Bagi Anda tidak akrab dengan monyet patch, itu adalah mekanisme untuk "memperpanjang atau memodifikasi kode run-time dari bahasa dinamis tanpa mengubah kode sumber asli". Sebelumnya, saya menunjukkan bagaimana monyet patch dapat memodifikasi logika dari permata ketergantungan Rubyuntuk bekerja pengaturan konfigurasi sekitar hardcoded. Seperti yang Anda bayangkan, teknik ini, jika digunakan dalam film Matrix, akan menjadi keuntungan besar untuk kami favorit "hacker" Neo dalam usahanya untuk menjadi "The One".
Dalam posting blog ini, saya akan menunjukkan beberapa contoh kode Matrix dunia nyata yang menunjukkan bagaimana Anda (hacker) dapat meng-upgrade senjata Anda, belajar karate, dan menghindari ditembak oleh wanita dalam gaun merah.
Pilihannya adalah milikmu ...
Upgrade Senjata Anda (Metode Override)
Jika Matrix ditulis dalam Ruby, kode untuk menentukan senjata semi-otomatis bisa terlihat seperti ini:
12345678910 |
Apa yang Anda akan melihat tentang implementasi senjata ini adalah bahwa hal itu menghormati kendala tradisional senjata semi-otomatis yang nyata. Ini berarti bahwa setiap kali memicu ditarik senjata api hanya satu tembakan, seperti:
1234 |
Sekarang, jika Anda berada di bertengkar dengan, katakanlah, Agen Smith; Anda mungkin perlu tingkat yang sedikit lebih tinggi dari api. Kita dapat mencapai ini adalah dengan mendefinisikan ulang Gun saat run-time.Kami melakukan ini dengan mengharuskan dalam versi monyet-patch dari Gun, yang tampak seperti aslinya, tetapi dengan memicu didefinisikan ulang untuk memecat tiga tembakan, bukan satu:
12345 |
Dengan membutuhkan kode diubah ini, kita secara efektif mengubah yang sudah ada sebelumnya gun semi-otomatis untuk mendukung semburan 3 putaran.
12345678 |
Anda akan melihat bahwa ID objek tidak berubah (id yang sama), tapi ajaib perilaku yang tidak lagi sama.
Dengan menggunakan teknik ini, kita dapat menentukan metode apa yang lakukan untuk mengubah objek yang sudah ada dan baru bahkan jika kita tidak mengontrol kode sumber gun.rb. Kemampuan ini memungkinkan kita untuk mengubah perilaku run-time dari Gun dan realitas tikungan dengan kemauan kita.
Belajar Kung Fu (Instance Stomping Variable)
Sekarang, saya bisa membuktikan sebagai pengamat film avid daripada banyak kali Anda membutuhkan lebih dari senjata besar untuk mengalahkan orang jahat. Kadang-kadang Anda diminta untuk berpikir pada kaki Anda dan belajar sesuatu yang baru untuk mengatasi musuh Anda. Beruntung bagi Neo, Morpheous memiliki cara untuk meng-upload keterampilan baru sehingga siapa pun bisa belajar hal-hal seperti terbang helikopter atau belajar Kung Fu.
Jika saya harus membayangkan bagaimana otak Neo ini awalnya dilaksanakan di Matrix, itu mungkin akan tampak seperti ini:
123456789101112 |
Sebelum proses upload sihir Morpheus ', Anda bisa cukup banyak menganggap ini akan menjadi hasil yang mungkin untuk Neo jika ia pernah berlari ke agen.
12345678 |
Tapi ... melalui keajaiban dari apa yang saya hanya bisa berasumsi untuk menjadi monyet patch, Neo bisa benar-benar belajar keterampilan baru segera.
12345678 |
12345678910111213141516 |
Sekali lagi, Anda akan melihat kami ID objek yang sama, tetapi otak sekarang memiliki kemampuan baru setelah mendapatkan keterampilan baru.
Dengan menggunakan teknik ini, kita berhasil dapat menimpa variabel misalnya yang sebelumnya tidak langsung antarmuka diakses dari otak. Hal ini memungkinkan kita untuk menentukan metode baru seperti yang kita lihat dengan contoh gun, tetapi juga menunjukkan bagaimana untuk menimpa variabel instan yang menentukan bagaimana akhirnya berperilaku.
Lady di Red Dress (Warisan Pembajakan)
Aku selalu bertanya-tanya bagaimana agen di Matrix dapat mengontrol orang lain. Hal ini mengingatkan saya simulasi di mana wanita dalam perubahan gaun merah ke agen dan poin pistol tepat di wajah Neo.
Sekali lagi, dengan asumsi Matrix ditulis dalam Ruby, wanita berbaju merah dapat diterapkan seperti:
12345 |
Sekarang, kita bisa selalu mengganti metode #do_something menggunakan teknik yang sama yang telah kita bahas. Ini akan efektif, tetapi di Matrix itu berarti bahwa agen perlu mencari setiap individu untuk membuat ini strategi yang efektif untuk melacak Neo.
Namun, solusi yang sedikit lebih tidak langsung adalah lebih mungkin. Alih-alih mengejar individu, mari kita pergi setelah esssence dari apa yang membuat mereka manusia. Dalam matriks ini adalah beberapa bentuk kode sumber. Ketika kita melihat obyek Ruby, mereka mempertahankan pohon warisan di mana banyak benda Ruby mewarisi dari Object. Dugaan saya adalah bahwa dalam rangka untuk agen untuk mengambil kendali atas setiap orang, mereka hanya menimpa metode primitif pada Obyek seperti:
12345 |
Efektif bersih ini adalah sebagai berikut:
123456789101112 |
Jelas, ini adalah beberapa bisnis yang benar-benar rumit yang dilakukan oleh agen. Aku hanya bisa membayangkan mengapa orang-orang yang datang sebelum Neo tidak dapat mengetahuinya. Saya kira itu hanya masalah waktu sebelum Neo menyadari bahwa meskipun Obyek umumnya dianggap sebagai puncak rantai makanan, itu benar-benar mewarisi dari awal yang lebih primitif BasicObject. BasicObject ini sering diabaikan dan aku menebak itulah bagaimana Neo mengambil alih dengan permata kecil ini setelah agen akhirnya mencoba untuk masuk ke dalam dirinya untuk melihat siapa orang ini adalah:
123456 |
Sekarang, kunci misteri ini adalah bahwa ketika Neo akhirnya mengacak-acak bulu Agen Smith, ia harus mencari siapa pahlawan kita benar-benar, dan itu adalah kesalahan yang besar. Di Ruby, jika Anda pernah ingin melihat apa unik mengidentifikasi objek Anda selalu dapat merujuk ke id objeknya. Jadi, ketika Agen Smith melihat ke siapa Neo benar-benar ia benar-benar berhasil untuk mengatur sisa matriks gratis, seperti:
123456 |
No comments:
Post a Comment