LLTR Bagian 2: Algoritma untuk menentukan topologi jaringan dari statistik yang dikumpulkan

Logo Topologi Lapisan Tautan Mengungkap


T: Apa yang kita miliki?
A: Statistik dikumpulkan dari host.


T: Apa yang ingin kita dapatkan?
A: Topologi jaringan! Lebih tepatnya, Anda perlu membangun rantai peer (host) yang benar untuk RingSync .


Kita harus membuat algoritma yang pertama mengubah statistik menjadi topologi jaringan, dan kemudian menjadi rantai rekan. Sejauh ini, algoritmenya terlihat seperti ini:


 –-[**]-->   --[**]-->   


Jika Anda senang membaca "Bagian 1" di Halaman GitHub , berikut adalah tautan ke bagian itu di Halaman GitHub.


Peringatan : Di bawah ini akan menjadi artefak Habr-parser yang sama dengan yang saya peringatkan di "Bagian 1" .


Setiap teknologi yang cukup maju tidak dapat dibedakan dari sihir.  - Arthur C. Clarke


Catatan : lebih lanjut sebagai ganti β€œ –-[**]--> ” Saya akan menggunakan β€œ –-[???]--> ”.


Statistik yang terkumpul menunjukkan pada kami host mana yang menerima kecepatan trafik broadcast yang menurun. Misalnya, lihat hasil iterasi nol di jaringan "N2_2" (" Network " dari artikel sebelumnya "LLTR Bagian 1"):


 {300,164,164}, 


2 status host terlihat jelas di sini:


  • kecepatan normal (nilai " 300 ") - tidak ada reaksi ;
  • kecepatan turun (nilai " 164 ") - ada reaksi .


Apa yang saya maksudkan? Untuk binarisasi! Jika kita mengkode tidak adanya reaksi sebagai 0 , dan keberadaan reaksi sebagai 1 , maka kita dapat menempatkan semua reaksi host dalam satu iterasi menjadi satu variabel ( 32 - 512 bit [ AVX - 512 ]). Selain menghemat memori (dan ruang yang dihabiskan dalam cache), ini akan meningkatkan kecepatan pemrosesan - semua respons host dari iterasi tertentu ( SIMD ) akan diproses sekaligus dalam satu instruksi.


Catatan : karena menggunakan LLTR Basic untuk sejumlah besar host sangat mahal ( lihat bagian awal β€œLLTR Bagian 0 :: LLTR Advanced” ), kemudian semuanya cocok dengan register x86-64 bit 64 .


Catatan : Dalam teks tautan ke bagian yang terletak di artikel lain (bagian lain), saya akan menambahkan nomor bagian dalam format: " LLTR Bagian # :: β€Ή nama bagian β€Ί ". Dan di " title " tautan saya akan menuliskan nama bagian tersebut, misalnya, untuk "LLTR Bagian 0 ::", "Secara otomatis mendeteksi topologi jaringan dan sakelar yang tidak dikelola akan muncul." Mission Impossible? ”


Mari kita ambil contoh iterasi nol yang sama dan lihat bagaimana binarisasi akan terlihat:


 {300,164,164} --[]--> 011 


Sangat kompak, tetapi saya ingin " 1 " ( adanya reaksi ) untuk segera menarik perhatian saya ketika melihat daftar semua iterasi. Sekarang " 1 " tidak menonjol dengan latar belakang " 0 " (data palsu, untuk contoh visual ):


 0101011010110 1100010110010 0101101010111 0100010110100 


Untuk menyoroti " 1 ", saya memperkenalkan notasi:


  • " 1 " berarti 1 - ada reaksi ;
  • β€œ . ”Berarti 0 - tidak ada reaksi .


Mari kita lihat "data palsu" lagi:


 .1.1.11.1.11. 11...1.11..1. .1.11.1.1.111 .1...1.11.1.. 


Jauh lebih baik ( IMHO ).


Algoritma, saat ini, terlihat seperti ini:


  –-[]-->   --[???]-->   --[???]-->   


Kami meninggalkan detail binarisasi untuk akhir artikel, dan berkonsentrasi pada sisa algoritma.


Paling mudah untuk membuat algoritma berdasarkan input / input data tertentu (kasus khusus, kondisi batas; tes dalam hal TDD ). Dalam kasus kami, data awal tergantung pada topologi jaringan, jadi Anda harus membuat jaringan yang kecil dan pada saat yang sama berisi skema koneksi sakelar yang berbeda ( bintang , koneksi serial ). Mungkin sesuatu yang istimewa dapat dimasukkan di dalamnya ... Secara umum, imajinasi menarik jaringan seperti itu (notasi untuk elemen mirip dengan notasi yang digunakan pada akhir bagian " LLTR Bagian 0 :: Topologi:" koneksi serial sakelar " "):


Bagan: Jaringan Hibrida LLTR


Catatan : melihat jaringan ini, pertanyaan "apakah mungkin untuk melakukan pemindaian penuh dalam topologi ini jika salah satu sakelar ..." (dekat bagian akhir " LLTR Bagian 0 :: Topologi:" koneksi serial sakelar " "), dan Anda perhatikan bahwa tidak ada host yang terhubung langsung ke salah satu switch. Apalagi, tidak ada masalah, karena 3 lebih banyak sakelar terhubung ke sakelar ini (saya menghitung hanya sakelar yang terhubung β€œdari bawah”, tanpa memperhitungkan fakta bahwa sakelar itu terhubung ke sakelar lain β€œdari atas”), yang masing-masing memiliki host.


Namun, dalam diagram ini ada beberapa detail ekstra (mengganggu). Saya akan membersihkannya dengan menghapus:


  • host siaran (tidak ada dalam input / statistik);
  • port yang menghubungkan switch satu sama lain.

Bagan: LLTR Hybrid Network (hapus)


Di sini saklar "tanpa host" segera terlihat. Selain itu, saya mengatur semua switch sedemikian rupa sehingga host di dalamnya tidak saling tumpang tindih secara vertikal. Ini akan berguna jika di masa depan saya ingin menunjukkan "reaksi host" bukan dalam bentuk entri teks " .....1...... ", tetapi dalam bentuk diagram (hanya ada satu host pada satu vertikal):


Bagan: jaringan hibrida LLTR (jelas), penjelasan tentang penunjukan "tanggapan tuan rumah"


Sekarang bayangkan statistik yang kita dapatkan di akhir semua iterasi pemindaian jaringan ini. Ada 12 host di jaringan (tidak termasuk host siaran), oleh karena itu, kami akan memiliki data pada 132 iterasi. Namun, tidak semua hasil iterasi akan berguna bagi kita, misalnya, mereka tidak akan berguna:



Setelah dibersihkan, dari semua 132 hasil iterasi, hanya 5 (tanggapan host) akan tetap:


 1111111111.. 11111111.... ..111....... .....111.... 11.......... 


Catatan : untuk kejelasan, saya mengatur iterasi dalam urutan dari jumlah yang lebih besar dari " 1 " ke yang lebih kecil.


Algoritma mulai terlihat seperti ini:


  –-[]-->   --[   ]--[  ]--[???]-->   --[???]-->   

titik reset

Saya berpikir untuk memasukkan semua ini dalam spoiler, tetapi pada akhirnya saya menyadari bahwa ini adalah bagian penting dari cerita, yang lebih baik jangan sampai terlewatkan ketika membaca.


¬ ( Jangan langsung ke otak saat membaca : Cong



[reset point] Dalam 5 hasil iterasi yang tersisa, dua yang pertama menarik perhatian: yang pertama termasuk yang kedua, dan yang kedua termasuk 3 yang lebih rendah yang tersisa. Di sini saya mengingat "bayangan" dari bagian " LLTR Bagian 0 :: Topologi:" koneksi serial sakelar " ". Di bagian yang sama, pada akhir setiap iterasi, kami membentuk (atau tidak membentuk) cluster baru berdasarkan data yang baru saja diperoleh. Sekarang kita perlu melakukan hal yang sama.


Tetapi bagaimana kami membentuk kelompok baru? Faktanya, semua (bukan tunggal) reaksi dari host β€œ 1 ” dari iterasi saat ini adalah β€œcluster baru”, kami hanya harus menemukan persimpangan (β€œβˆ©β€; bukan kosong β€œβˆ…β€) dengan kluster yang ada untuk menghapus (β€œβˆ–β€) dari yang lebih besar host cluster termasuk dalam cluster yang lebih kecil.


Namun, dalam tindakan kami ada kondisi / percabangan (jika): Anda perlu menentukan cluster mana yang lebih besar, dan kemudian melakukan operasi sederhana (A βˆ– B) - kurangi yang lebih kecil (B) dari cluster yang lebih besar (A). Mewakili siksaan CPU dengan pipa panjang yang disebabkan oleh kebutuhan untuk mengatur ulang pipa jika prediksi cabang salah (jika ada "blok prediksi cabang" sama sekali), saya hampir memutuskan untuk menggunakan β€œ?: " , Tetapi pada saat itu ...

Saya berdiri di toilet dan menggantung jam. Tiba-tiba terpeleset, menabrak kepalanya di wastafel, dan ketika aku bangun aku punya visi, gambar di otakku, visi ini - pemisah aliran drive stream ( Kembali ke masa depan ) :

Kembali ke Masa Depan: Flux Divider
 // Flux Divider c=a^b; aa=a&c; bb=b&c; cc=a&b; 


Dan segera lihat karyanya pada contoh tumpang tindih cluster (lebih tepatnya, satu set (cluster) secara ketat termasuk " " di set lain):


 .....11..... - a ..11111111.. - b ..111..111.. - c=a^b ............ - aa=a&c ..111..111.. - bb=b&c .....11..... - cc=a&b 


Gugurkan cluster:


 ..111....... - a .......111.. - b ..111..111.. - c=a^b ..111....... - aa=a&c .......111.. - bb=b&c ............ - cc=a&b 


Ternyata itu:


  • " aa " mengandung elemen unik untuk " a ";
  • dalam " bb " - unik untuk " b ";
  • dalam " cc " - umum untuk " a " dan " b ".


Contoh lain dengan cluster berpotongan ("tidak mungkin", tetapi contoh yang baik):


 ...1111..... - a .....1111... - b ...11..11... - c=a^b ...11....... - aa=a&c .......11... - bb=b&c .....11..... - cc=a&b 


Catatan : respons seperti ini (reaksi host) tidak ada dalam data sumber.


Dengan cara yang sama, Anda dapat menyingkirkan take :


 .....11..... - a .....11..... - b ............ - c=a^b ............ - aa=a&c ............ - bb=b&c .....11..... - cc=a&b 


Tapi, sedikit kemudian ...

Kepala berhenti sakit setelah mengenai wastafel, pikiran menjadi jernih, dan masalah yang jelas muncul ...

Pada input, kami memiliki 2 variabel (hasil iterasi / reaksi host / cluster / set / ...), tetapi sudah ada 3 pada output, dan setidaknya salah satu dari mereka akan kosong ("βˆ…"). Jika Anda tidak segera menyingkirkan "βˆ…", maka Anda harus memasukkannya dalam pemrosesan di masa mendatang. Karena itu, lebih baik menyingkirkan "βˆ…" segera. Tetapi bagaimana cara melakukannya? Gunakan kondisi / percabangan! ... Secara umum, saya kembali ke tempat saya mulai. Selain itu, jika semuanya dilakukan seperti yang dijelaskan di atas, ditambah lagi menghilangkan ",", maka pada akhirnya kita dapatkan dari:


 1111111111.. 11111111.... ..111....... .....111.... 11.......... 


Ini adalah:


 ........11..             -     "............",     :( ..111....... .....111.... 11.......... 


Saatnya mengajukan pertanyaan: "Bagaimana cara mendapatkan topologi jaringan dari ini?" Sekarang data ini dapat "mengatakan" tentang kelompok mana yang dimiliki oleh host tertentu (yaitu, untuk mana host tersebut terhubung), tetapi data ini sekarang benar-benar tidak memiliki informasi tentang topologi switch (yaitu, bagaimana cara terhubung beralih satu sama lain) - kami kehilangan informasi ini selama konversi data. Selain itu, cluster (switch) mana yang dimiliki oleh 2 host paling kanan? Jika kita menganggap setiap baris sebagai cluster terpisah (atau sebagai indikasi host mana yang terhubung ke switch tertentu), ternyata 2 host ekstrim ini tidak terhubung di mana pun! Selain itu, kami memiliki 6 switch di jaringan, dan ada 4 baris yang tersisa, di mana ada 2 baris lagi? Kami menghapus satu (seperti komentar di atas berbunyi), dan yang lain, seharusnya ada "2 host di paling kanan".


[ titik reset goto ] Untuk mengembangkan ide ini lebih lanjut tidak berguna. Jalan Buntu (cabang git). Anda harus memutar kembali ke label "titik reset", melupakan semua yang ada setelahnya, tetapi meninggalkan cabang ini untuk cerita.


Sekarang, agar tidak jatuh ke "cabang mati" lagi, Anda perlu memutuskan struktur akhir (representasi) dari topologi jaringan dalam memori. Yaitu, dengan apa yang ingin kita dapatkan pada saat "topologi jaringan":


  –-[]-->   --[   ]--[  ]--[???]--> <strong> </strong> --[???]-->   


Pertama , semua host harus ada:


 <strong>..........11</strong> <-- 1111111111.. 11111111.... ..111....... .....111.... 11.......... 


Kedua , orang tua harus ditunjukkan (gugus induk untuk setiap gugus; saat ini: induk βŠ‹ anak ; pada diagram jaringan, saya menempatkan orangtua di atas anak-anak) (nomor gugus ditambahkan di sebelah kiri):


 0) ..........11 parent: ? 1) 1111111111.. parent: ? 2) 11111111.... parent: 1 3) ..111....... parent: 2 4) .....111.... parent: 2 5) 11.......... parent: 2 


Catatan : jika Anda melihat sesuatu yang aneh di sini, membandingkan diagram jaringan ini dengan data ini, maka Anda menyukai saya.


Spoiler, lebih baik tidak membuka sampai membaca seluruh daftar

Bahkan (menurut diagram), induk untuk klaster 1 adalah kluster 0, tetapi kemudian kondisi " induk βŠ‹ anak " tidak terpenuhi. Mungkin di " Pertama " kami membuat kesalahan, dan bukannya " ..........11 " itu layak ditambahkan " 111111111111 "?



Ketiga , harus ada satu induk "root" yang menghubungkan masing-masing pohon (yaitu, hutan ) menjadi satu pohon:


 -1) 111111111111 0) ..........11 parent:-1 1) 1111111111.. parent:-1 2) 11111111.... parent: 1 3) ..111....... parent: 2 4) .....111.... parent: 2 5) 11.......... parent: 2 


Keempat , alangkah baiknya memiliki daftar anak dengan masing-masing orang tua:


 -1) 111111111111            children: 0,1 0) ..........11 parent:-1 1) 1111111111.. parent:-1, children: 2 2) 11111111.... parent: 1, children: 3,4,5 3) ..111....... parent: 2 4) .....111.... parent: 2 5) 11.......... parent: 2 


Dan akhirnya , sekarang mungkin untuk mengeluarkan anak-anak dari orang tua mereka:


 -1) ............            children: 0,1 0) ..........11 parent:-1 1) ........11.. parent:-1, children: 2 2) ............ parent: 1, children: 3,4,5 3) ..111....... parent: 2 4) .....111.... parent: 2 5) 11.......... parent: 2 


Sekarang setiap baris menjelaskan satu cluster, yaitu menunjuk ke host yang terhubung ke switch yang sama. Namun, tunggu, ada 6 switch di jaringan kami, dan ada 7 cluster! Akhirnya, akhirnya, untuk membaca teks dari spoiler di atas " Spoiler, lebih baik tidak membuka sampai membaca seluruh daftar ", dan memperbaiki situasi:


 0) ..........11            children: 1 1) ........11.. parent: 0, children: 2 2) ............ parent: 1, children: 3,4,5 3) ..111....... parent: 2 4) .....111.... parent: 2 5) 11.......... parent: 2 


Data ini justru merupakan "topologi jaringan" - ini menggambarkan pohon sakelar, dan darinya Anda dapat menentukan semua host yang terhubung ke sakelar tertentu.


  –-[]-->   --[   ]--[  ]--[???]--> <strong> </strong> --[???]-->   


Masih memahami bagaimana membawa data ke formulir ini. Faktanya, semua yang telah kita lakukan (pertama, kedua, ...) dapat dikonversi menjadi sebuah algoritma:


  1. "Pertama" (setelah melakukan koreksi dari spoiler, menjadi serupa dengan tindakan "ketiga") - tambahkan "root" cluster " 111111111111 " ( universal ), termasuk (host dari semua pohon di hutan, host yang terletak pada saklar yang sama dengan host siaran ), yaitu Ini termasuk semua host di jaringan;
  2. "Kedua" - mencari orang tua untuk setiap cluster ;
  3. "Keempat" - membangun daftar anak-anak untuk setiap orang tua ;
  4. "Dan akhirnya" - pengecualian anak-anak dari orang tua mereka .


Sekarang Anda dapat menambahkan tindakan ini ke algoritma umum (sedikit mengubah tampilannya):


                                               ●  ●                                [] β–Ί                 [   ]                          [  ] β–Ί /                [ "" ] β–Ί /        [    ] [     ]              [   ] β–Ί   ●                                        [???] β–Ί   ● 

Pandangan alternatif

 ●      β–Ί [] β–¬   β–Ί [   ]                   [  ] β–¬ /   β–Ί [ "" ] β–¬ / β–Ί [    ]                   [     ]                   [   ] ●   β–Ί [???] ●    ● 


Mari kita lihat apa yang terjadi jika Anda menerapkan algoritma ini ke jaringan lain. Saya ingin mengambil jaringan Network_ serial dan hasil simulasi (statistik) dari bagian " LLTR Bagian 1 :: Lebih banyak jaringan dengan topologi yang berbeda, menambahkan jaringan baru ".


Catatan : Mengapa saya memilih jaringan khusus ini? Ini cukup besar, dan ada kekurangan dalam data yang dikumpulkan darinya (lihat bagian akhir "hasil simulasi" spoiler untuk jaringan ini).


Ayo pergi!


Binarisasi

Reaksi Tuan Rumah:


 .111111.. .111111.. .111111.. .111111.. .111111.. .111111.. .......11 .......11 ..1...... ...1111.. ...1111.. ...1111.. ...1111.. .......11 .......11 1........ ...1111.. ...1111.. ...1111.. ...1111.. .......11 .......11 1........ .1....... ....1.... .....11.. .....11.. .......11 .......11 1........ .1....... ..1...... .....11.. .....11.. .......11 .......11 1........ .1....... ..1...... ...1..... ......1.. ......... ......... ......... .1....... ..1...... ...1..... ....1.... ......... ......... ......... .1....... ..1...... ...1..... ....1.... .....1... ........1 1........ .111111.. .111111.. .111111.. .111111.. .111111.. .111111.. 1........ .111111.. .111111.. .111111.. .111111.. .111111.. .111111.. .......1. 


Pemurnian dari reaksi tunggal

 .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .......11 --> .......11 .......11 --> .......11 ..1...... --> ...1111.. --> ...1111.. ...1111.. --> ...1111.. ...1111.. --> ...1111.. ...1111.. --> ...1111.. .......11 --> .......11 .......11 --> .......11 1........ --> ...1111.. --> ...1111.. ...1111.. --> ...1111.. ...1111.. --> ...1111.. ...1111.. --> ...1111.. .......11 --> .......11 .......11 --> .......11 1........ --> .1....... --> ....1.... --> .....11.. --> .....11.. .....11.. --> .....11.. .......11 --> .......11 .......11 --> .......11 1........ --> .1....... --> ..1...... --> .....11.. --> .....11.. .....11.. --> .....11.. .......11 --> .......11 .......11 --> .......11 1........ --> .1....... --> ..1...... --> ...1..... --> ......1.. --> ......... --> ......... ......... --> ......... ......... --> ......... .1....... --> ..1...... --> ...1..... --> ....1.... --> ......... --> ......... ......... --> ......... ......... --> ......... .1....... --> ..1...... --> ...1..... --> ....1.... --> .....1... --> ........1 --> 1........ --> .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. 1........ --> .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .111111.. --> .111111.. .......1. --> 


Membersihkan dari duplikat (kami mendapatkan "cluster / hutan"):


 .111111.. .......11 ...1111.. .....11.. ......... 


Selain itu, untuk kenyamanan , saya akan mengurutkan dalam urutan jumlah " 1 ":


 .111111.. ...1111.. .....11.. .......11 ......... 


Catatan : Mungkin bernilai termasuk menyortir dalam algoritma. Apa yang kamu pikirkan


Menambahkan "root" cluster (kita mendapatkan "cluster / tree"):


 111111111 .111111.. ...1111.. .....11.. .......11 ......... 


Ini termasuk host dari 2 pohon (kiri " .111111.. " dan kanan " .......11 " bagian dari jaringan) dan 1 host (" 1........ " terletak di satu beralih dengan host siaran).


Pencarian orang tua untuk setiap cluster:


 0) 111111111 1) .111111.. parent: 0 2) ...1111.. parent: 1 3) .....11.. parent: 2 4) .......11 parent: 0 5) ......... parent: 4 


Catatan : Di sinilah dampak negatif dari kesenjangan data muncul - klaster ke-4 menjadi induk untuk klaster ke-5! Secara umum, setiap cluster dapat menjadi induk dari cluster ke-5, karena itu kosong (βˆ…).


Membuat daftar anak-anak untuk setiap orang tua:


 0) 111111111            children: 1,4 1) .111111.. parent: 0, children: 2 2) ...1111.. parent: 1, children: 3 3) .....11.. parent: 2 4) .......11 parent: 0, children: 5 5) ......... parent: 4 


Pengecualian anak-anak dari orang tua:


 0) 1........            children: 1,4 1) .11...... parent: 0, children: 2 2) ...11.... parent: 1, children: 3 3) .....11.. parent: 2 4) .......11 parent: 0, children: 5 5) ......... parent: 4 


Pada langkah ini, kami seharusnya mendapatkan "topologi jaringan." Dan kami mendapatkannya. Jika kita hanya tertarik pada lokasi host, maka "topologi jaringan" ini cukup memuaskan bagi kita. Namun, switch lain muncul di jaringan kami, di mana 0 host!


Untuk memperbaiki semuanya, itu akan cukup setelah salah satu langkah pertama untuk menghilangkan "kelemahan data" ini. Ini dapat dilakukan segera setelah "binarisasi":


                                               ●  ●                                [] β–Ί   [<strong>   (βˆ…),    (⦱)</strong>]               [   ]                          [  ] β–Ί /                [ "" ] β–Ί /        [    ] [     ]              [   ] β–Ί   ●                                        [???] β–Ί   ● 


Kami menghapus set kosong (βˆ…; " ......... "), tetapi mengapa menghapus semesta (⦱; " 111111111 ")? Jawabannya akan menjadi jelas ketika kita mulai mengimplementasikan fase "binarisasi". Varian yang berbeda dari implementasi "binarisasi" dapat menghasilkan " ......... " dan " 111111111 " pada data yang sama (data dengan cacat yang dijelaskan). Dan karena mustahil untuk mendapatkan " 111111111 " di data input yang benar seperti mendapatkan " ......... ", maka kita dapat menghapus semua " 111111111 " (selain itu, mereka tidak membawa informasi apa pun kecuali bahwa ada "kelemahan" dalam data).


Jika Anda menerapkan algoritma ini (augmented, koreksi) ke jaringan yang sama (" Network_ serial "), maka "topologi jaringan" akan terlihat seperti ini:


 0) 1........            children: 1,4 1) .11...... parent: 0, children: 2 2) ...11.... parent: 1, children: 3 3) .....11.. parent: 2 4) .......11 parent: 0 


Note : , . , . , 2 ( β€œswitch0”), 1 ( 2 ):


β€œ ”

 0) 11........            children: 1,4 1) ..11...... parent: 0, children: 2 2) ....11.... parent: 1, children: 3 3) ......11.. parent: 2 4) ........11 parent: 0 

 0) 1......            children: 1,4 1) .1..... parent: 0, children: 2 2) ..1.... parent: 1, children: 3 3) ...11.. parent: 2 4) .....11 parent: 0 


β€œ ”. β€œ ” β€œ ”. RingSync , ( : Pre‑order ). β€œ ” :


 1 1........ hostS/seed -> host0 -> . .11...... host1 -> host2 -> . ...11.... host3 -> host4 -> . .....11.. host5 -> host6 -> . .......11 host7 -> host8/leech 


Note : (, ) , broadcast .


, β€œ ” ( ), (β€œ Network_ serial ”). ( ), . :


Diagram: koneksi serial sakelar;  jalur arus lalu lintas untuk rantai yang dibangun tanpa prioritas


, β€œ ” (β€œ ”):


 ..........11 1 hS/seed -> h10 -> h11 -> ........11.. . h8 -> h9 -> ..111....... . h2 -> h3 -> h4 -> .....111.... . h5 -> h6 -> h7 -> 11.......... . h0 -> h1/leech 


( β€œ ”) . , – 2, .. (βˆ…). , β€œ ” , β€œ ” ( , ), (βˆ…) ? , : ‑, β€œβ€ , ( , οΌ›οΌ‰; ‑, ( ).


, β€œ ” , β€œ ”

: LLTR   (clear),  ,   β€œdepth first traversal”


( ) , , β€œ ”, ‑ …



, β€œ ”, …


Note : , , . .



, ( ), .


: LLTR   (clear);


:


 ..........11 1 hS/seed -> <strong>h11</strong> -> <strong>h10</strong> -> ........11.. . <strong>h9</strong> -> <strong>h8</strong> -> ..111....... . h2 -> h3 -> h4 -> .....111.... . h5 -> h6 -> h7 -> 11.......... . h0 -> h1/leech 


β€œ Network_ serial ”…


, :


           switch0 -> switch1 -> switch2 -> switch3 -┐ switch4 <- switch0 <- switch1 <- switch2 <-----------β”˜ 


… β€œβ€ β€œ switch0 <- switch1 <- switch2 ”. :


                                 switch0 -> switch4 -┐ switch3 <- switch2 <- switch1 <- switch0 <-----------β”˜ 


:


Diagram: koneksi serial sakelar;  jalur arus lalu lintas untuk rantai prioritas


, , , !


Note : , .. β€œ ”.


Note : β€œ ”, β€œ ” ( ; – L0 ) – .


, β€œ ” .


Note : , – .


() : β€œ ” ( LLTR 0:: : β€œ ” ) :


  1. – ;
  2. – ;
  3. – ( );
  4. – ( ) – , .


Note : β€œ – ” β€œ , ”, , , .


Note : – ( ). – ( ) . , ( ): ( ); ( ).


:


                                                    ●  ●                                     [] β–Ί      [   (βˆ…),    (⦱)]                    [   ]                               [  ] β–Ί /                     [ "" ] β–Ί /             [    ]    [     ]                   [   ] β–Ί   ● [      /] β–Ί   ● 


β€œ ” β€œ Network_ serial ” :


 1 1........ hostS/seed -> host0 -> . .......11 host7 -> host8 -> . .11...... host1 -> host2 -> . ...11.... host3 -> host4 -> . .....11.. host5 -> host6/leech 


β€œ ”, .


β€œ ” . β€œ ” :


 s0) ..........11 1 hS/seed -> h10 -> h11 -> s1) ........11.. . h8 -> h9 -> s3) ..111....... . h2 -> h3 -> h4 -> s4) .....111.... . h5 -> h6 -> h7 -> s5) 11.......... . h0 -> h1/leech 


? , , , ( ):


 s0 -> s1 -> s2 -> s3 -┐  β”Œ- s4 <- s2 <------β”˜  β””------> s2 -> s5 


Note : β€œ s# ” β€œ ” (. ).


# TL;DR


:


  1. (~~ k‑medoids ~~) + (βˆ…), (⦱) + :
    1. a min a max
    2. 2
      1. + (βˆ…), (⦱)
    3. :
      1. ( : )
      2. ( O(nlogn) O(1) )
      3. ( nth_element implementations complexities )
    4. a medL (medLow) a medR (medHi)
    5. 2 ,
    6. +
  2. + β€œβ€ :
    1. + β€œβ€
    2. + bitCount ( max min)
  3. :
    1. min (min) (max) ( ) , ;
      bitCount(a i )==bitCount(a i |a min ) , : a i ==a i |a min
    2. , ( ) –
    3. min ( )
  4. () :
    1. ( β€œβ€ β€œβ€)
  5. :
    1. β€œβ€, max , or|=a i , a max &=~or
      ( β€œ a max ^=or ” – )

    2. ( a max a min , .. , )
  6. /:
    1. (RingSync)


Note : git , .



. ( ), .

β€œ , ”


, , (β€œ {…} ”) () . ():


 //    "  " int ...;{   //    "" } 


β€œβ€, ():


 //==[Name]==// int ...;{   ... } 


, :


Tensors Flowing

? TensorsFlowing


yaitu – , β€œ, ” – .


?
:


  • – ( ) , . β€œβ€ , .. β€œβ€ β€œβ€ . , β€œ ”, .
  • – β€œβ€ / , , . . , (Interprocedural optimization, Whole program optimization; Link‑time optimization) β€œβ€ – .


Note : : .. (2D/3D , , *, …). (), , , ( , , 24 , ; , ACPI ), ( ) , :(. (, , …) , ‑ . , , ‑. ( β€œβ€ β€œβ€), β€œ *”. , – , , , . () – , . – ( ), . – , //‑/ /. (debug) ‑ .


Note : Debug , (, – { 9 , ; – Γ—16 ( 1.2 1.5); β†’ }), warning' .


Note : , , , ‑. , , ( β€œ ” ) .



# Tooo Long; Didn't Read; Visualize, plz.


Note : , ( GIF β€œTensorsFlowing” β€œ ”). GIF β€œTensorsFlowing” GIF β€œ Loop over python list animation ”. , GIF , β€œ ” / . , ‑ 1:1, β€œ ”.


#


Note : GIF ( β€œLoop over python list animation”), . , , . ( οΌ›οΌ‰


Note : ( ) ( ). , .


Note : GIF ( β€œScroll Down”) – (Ctrl+R), GIF . ( , ; , ‑ <oembed> ? )


Animasi: Binarisasi

#1

 int average;{      int max,min;      max=min=countFill[i][0];      for(int j=1;j<numHosts;j++){            max=countFill[i][j]>max?countFill[i][j]:max;            min=countFill[i][j]<min?countFill[i][j]:min;      }      average=(max+min)/2; } 

:  –  1


Note : GIF …



#2

 int lo=0; struct CnN{      int Count; }iFill[numHosts]; for(int j=0,hi=numHosts-1;j<numHosts;j++){      if(countFill[i][j]<average) iFill[lo++].Count=countFill[i][j];      else                       iFill[hi--].Count=countFill[i][j]; } bitCluster[i]=0; if(lo==0||lo==numHosts) continue; //-      


Note : ( ) .


:  –  2


#3

 int averageMed;{      CnN *iFillLo=&iFill[0];      CnN *iFillHi=&iFill[lo];      const int hi=numHosts-lo;      if(lo>1) std::nth_element(iFillLo,&iFillLo[lo/2],&iFillLo[lo],[](const CnN a,const CnN b){return a.Count<b.Count;});      if(hi>1) std::nth_element(iFillHi,&iFillHi[hi/2],&iFillHi[hi],[](const CnN a,const CnN b){return a.Count<b.Count;});      averageMed=(iFillLo[lo/2].Count+iFillHi[hi/2].Count)/2; } 

:  –  3


Note : std::nth_element() , , ( + = ).



#4

 for(unsigned int j=0;j<numHosts;j++) bitCluster[i]|=( (countFill[i][j]<averageMed)?1:0 )<<j; 

:  –  4


#5

 bitCluster[i] = bitCluster[i]^(1<<((i/(numHosts-1))+(i%(numHosts-1)+1))%numHosts) ? bitCluster[i]:0; 

:  –  5


Note : GIF git . ReadMe ( ; ‑ , ).



‑ OMNeT++ β€œ ”, β€œ DAT_EX.h ”.



...


#


3‑ 1.92 , , 1.6 - 2 . , 3‑ ( ) ( Go – 2 , – 2 - 4 ). (4 ), 2.5 LLTR.


+ TODO' + .


, ‑ , , , 2 .


Note : , / , …


Spoiler

2 ?



?


, , . , , 2 . .





# Tooo Long; Didn't Read; Visualize, plz.


TODO[old]: (1 – gif_1, , 2 – gif_2, , …)


TODO: ,


:   & –   ‑

? ( )


TODO: ( GIF β€œTensorsFlowing”, ‑ – ),


( Note, GIF , , , YouTube. : 4:2:0 TV‑ ( 16 - 235 ). , – (). : SVG – , β€œ ‑”; SWF – RIP)


# ?


( ), std (, ) ( );


( β€œ 1 ” == β€œ 1 ” ). Contoh:


 0) 111111111111 1) 1111111111.. 2) 11111111.... 3) ..111....... 4) .....111.... <-  ,     2‑,  3‑ 5) 11.......... 


(.. ), .. β€œ 1 ” ( ) (. β€œ ” β€œ ”). β€œ 1 ”, ..:


 0) 111111111111 1) 1111111111.. 0 2) 11111111.... 1 3) ..111....... 2 4) .....111.... 2 5) 11.......... 4 


( , – + (+), )


( β€œβ€). CPU, + . , , , , .


...



3: OMNeT++

LLTR 3: OMNeT++


Golang. ( , )


( , OMNeT++ c Qtenv)


( β€œbackground/fresh” β€œ.ned” {β€œ grey99 ” β†’ β€œ -,-,0;bgi=background/fresh ”}, β€œblueprint/print-26.png” Qtenv β€œLLTR 1:: ”)


( , β€œOMNetProject (v0.9) lltdapp”)


( , β€œhostS” – ( ) . , , – broadcast , unicast , .. – , . , – β€œ ”. β€œ – ”, : β€œ ” – β€œSerial” β€œ 1” ( – β€œ ”). – (, , broadcast unicast )[ rand , , – , – ])


( Precision Time Protocol (PTP) 2016-04-12)


( – , , β€œa3_v0.3_ft0.1.0”, β€œa3_v0.3.0” – , ; β€œft” – fixed time)


.


TODO [x]: , , . β€œ TODO [x]” β€œ ” ( )


Referensi:




4:

LLTR 4:


Wolfram Mathematica – Numbers (last episode 1 season) – .



βˆ€ habrauser ∈ {user ∈ Habrahabr | user β€œβ€},

, β€œβ€ .



(, . )


Referensi:



, (hostsCount) – . . ? (: )


(, β€œβ€, {β€œβ€,β€œβ€,β€œβ€})


( ( ) [ ; β€œ ”], – n‑ β€œ ”; , LLTR, )


Permutation of bitsets (β€œlexicographic” order) derivation (mathematical induction)

( , __ [ , , , ]):


 n=4; k=2 bitset  i 0011 <- 0 0101 <- 1 1001 <- 2 0110 <- 3 1010 <- 4 1100 <- 5 


Note: , .. bitset k i < bitset k i+1 , i – β€œ ”; k – ; n – .


β€œβ€ ( ; /; , β€œβ€/), ?


  • ( β€œB9”) ( β€œ ” O_o; , )
  • β€œ _tmain() ” ( )
  • , , – β€œ med() ” β€œ demed() ”


, :



:
β€œ ” (β€œ ”; β€œPermutations of multisets”).
Apa bedanya? ( [abcdef]), ( [000011]).
, ( ):


 a => 0 b => 0 c => 0 d => 0 e => 1 f => 1 


, , .. , , [abcdfe] β‡’ [000011], [000011] . (, )


{{000011}}.
{abcdef} 6! ( nuclphys.sinp.msu.ru/mathan/p1/m0204.html ).
.
, , ( [000011]) , ( (β€œ1”) 2! Γ— (β€œ0”) 4! ) = 2! Γ— 4! = 2! Γ— (6βˆ’2)! .
= 6! βˆ• (2! Γ— (6βˆ’2)!).


( nuclphys.sinp.msu.ru/mathan/p1/m0204.html ), ( ru.wikipedia.org/wiki/?stable=1 ) – . . β€œ ” ( ru.wikipedia.org/wiki/?stable=1 ), β€œβ€ β€œ1” β€œ0” – ( ru.wikipedia.org/wiki/?stable=1#___ ).


EN: β†’ β†’ combination: ( k‑combination with repetitions / k‑multicombination / multisubset ), ( en.wikipedia.org/wiki/Combination?stable=1#Example_of_counting_multisubsets ), β€œStars and Bars” ( en.wikipedia.org/wiki/Stars_and_bars_(combinatorics)?stable=1#Proofs_via_the_method_of_stars_and_bars ). (/ ): β€œ1” – Star, β€œ0” – Bar.


, β€œStars and Bars” β€œβ€ ( β€œ ” – k‑combination with repetitions) β€œ ” (permutations of multisets): en.wikipedia.org/wiki/Permutation?stable=1#Permutations_of_multisets .
RU: ru.wikipedia.org/wiki/?stable=1#__


PS stackoverflow.com/a/24257996 , ( – : n!βˆ•((nβˆ’k)!); nβ©΅k; (nβˆ’k)!β‡’1; n! ).


PPS [ alisey Trif ] ‑ / ( β€œPermutations of multisets”), ?




5: OMNeT++ 2

LLTR 5: OMNeT++ 2



( LLTR-Process sequence, – { β€œLLTD-Process (vFinal)”}, – , i β†’ dstId, )


Referensi:




6+7: +

LLTR 6:


, Golang.


Referensi:



LLTR 7: (: β€œ ” – )


( 4 { //Wi‑Fi}, 3 ? – 2 ! – MacBook, Wi‑Fi Ethernet Thunderbolt)


( , β€œ ”, , β€œ ”)


( Wi‑Fi UDP broadcast – WNIC //. : How to override wifi broadcast speed limit? , Why does my UDP Broadcast wireless communication is capped at 1MBs? . 3 Mbps, 5 Mbps { }. MacBook {Wi‑Fi } Super‑, broadcast‑, unicast, {Wi‑Fi- ‑} unicast‑ broadcast { – Wi‑Fi}. , Wi‑Fi- – CPU . ‑.)


( UDP‑, !? : Windows β€œβ€ {Windows NIC ?..}, API, β€œ CPU” { Win8 API, … (. β€œLLTD/flood/main.go”)}. β€œ ”. – API , β€œβ€ . *nix { API}, , β€œβ€ {. β€œLLTD/flood/main.go”}. : β€œ iperf3 and microbursts ”)


( β†’ . { ; SMB}: β†’ β†’ β†’ MacBook . , .)


( β€œLLTD/Prepare test environment.txt”)


Referensi:



( β€œLLTD/Client.go”, β€œβ€‘β€ – β€œLLTD/flood/main.go”)


( {Client1} NIC , – , , β€œ ” : β€œ interface always dead”)


Note: – Wi‑Fi ( ADSL‑/, ADSL – )


Note: ‑ : β€œβ€ 100 Mbps unicast ; 100 Mbps broadcast . ( , /, )



TODO : : ( – ; ; +1/βˆ’1 ). Google Wave, Google Docs, Discus. :


  • –
  • – ,
  • :
    • , (.. ) – β€œβ€ β€œ ” – (.. β€œβ€ )


UserJS/UserCSS, , , .. , .


– – , UI (, , ) ( , β€œβ€). β€œβ€ UserCSS. , , , ( ), ( ) ( ).


( ) ( ). ( UserJS UserCSS; Opera Presto , Firefox )


– β€œ OMNeT++ 2”.


TODO [x]: () + , + , , OMNeT++ v5.0b1 INET v3.0.0 + , ( ), – /


:



( ) (), . β€œ ” – , .


Note : – , ( ) – .


β€œ ”, , β€œ ”.


β€œ ”, , :


:    TOP SECRET


– . , – β€œ ”.


Note : β€œβ€ – ( βˆ’1 ) ( ) (: ; ; – ); β€œβ€‘β€‘β€‘β€ – ( ) , , ( ), , { β€œβ€ ( ) – , , β€œ ?”; + β€œ ' ', ”, : (cookie) view‑only}


Note : (‑)



LLTD v1 – TCP ( map?), ,
() ,


LLTD v0.9 – client , ( )


v0.5 Go
IP, github.com/hashicorp/mdns
github.com/davecheney/mdns
grokbase.com/t/gg/golang-nuts/132tcpawde/go-nuts-udp-multicast-who-is-on-my-network


PS ( ) β€œ ”.
r=rand();
r, .
:
1. ‑ . , – . + Β± ( β€œβ€ ).
2. β€œβ€. ( , ; ) + ( β€œβ€ )


iperf3 and microbursts burntchrome.blogspot.ru/2016/09/iperf3-and-microbursts.html



# Check‑list (TODO's)


TODO, .


PNG{SVG} (SVG thumbnail PNG) :


  1. PNG:
    1. [ 778px, 756px] ‑ ( . )
    2. ‑ 7z (un[7z]me), ( – β€œ ”, ‑ , ‑ )
      • [ Photoshop] β€œSave for Web” β†’ PNG 24+alpha
      • [ GIMP] β€œ8bpc RGBA” ( ), β€œ Save for Web ”
    3. 256 + alpha‑
    4. β€œβ€ , Image Catalyst ( β€œβ€ 2 : 2.1 2.5 , ):
      1. β€œβ€ Image Catalyst 2.1 ([5] Xtreme profile)
        Tools\config.ini

         [options] ;         ,    "true"  "false". fs = true ;    PNG.    0,       %NUMBER_OF_PROCESSORS%. threatpng = 0 ; .          ,    "true"  "false". up = false [JPEG] ; Metadata.       Metadata  JPEG,    "true"  "false" ,   . dc = true   ;Delete comment field (as left by progs like Photoshop & Compupic). de = true   ;Strip Exif section (smaller JPEG file, but lose digicam info). di = true   ;Delete IPTC section (from Photoshop, or Picasa). dx = true   ;Deletex XMP section. du = true   ;Delete non image sections except for Exif and comment sections. [PNG] ; ColorType  BitDepth.      ColorType  BitDepth  PNG,    "true"  "false". nc = true ; -.       "Dirty Transparency"  PNG c -,    "true"  "false". na = true ; Chunks. ;     Chunks   Chunks,   "remove"       Chunks   Chunks,   . ;     Chunks   Chunks,   "keep"       Chunks   Chunks,   . ; Chunks: ;text = iTXt,tEXt,zTXt ;color = cHRM,sRGB,iCCP,gAMA ;misc = bKGD,pHYs,sBIT,sPLT,hIST,tIME ;all  = all of noncritical chunks hunks = remove all 


        Note : β€œ Image Catalyst 2.1 . Enter. ”, , , ( β€œImage Catalyst 2.1” β€œImage-Catalyst-2.1”)


      2. β€œβ€ Image Catalyst 2.5 ([1] Xtreme profile)
        Tools\config.ini

         [options] ;Number of streams. If value early 0, is used value of parameter %NUMBER_OF_PROCESSORS%. thread=0 ;Automatic replacement of original images by the optimized. outdir=true ;Check update update=false [PNG] ;Parameters of optimization of PNG: ;/a# - PNG dirty transparency 0=Clean, 1=Optimize; ;/g# - PNG gamma 0=Remove, 1=Apply & Remove, 2=Keep; ;/na - PNG don't change RGB values for fully transparent pixels; ;/nc - PNG don't change ColorType and BitDepth; ;/np - PNG don't change Palette. xtreme=/a1 /g0 advanced=/a0 /g0 ;Remove PNG Metadata (Chunks). chunks=true [JPEG] ;Remove JPEG Metadata. metadata=true [GIF] ;Remove GIF Metadata. giftags=true 


        Note : β€œ Attention: running 2 of Image Catalyst. ”, , , ( β€œiCatalyst-2.5”)



      3. merge_min.bat

         @echo off setlocal enabledelayedexpansion :: Copy file from source to destination directory only if :: source file is smaller in size than in destination directory echo Src dir: %~f1 echo Dst dir: %~f2 echo --- for /r "%~1" %%A in (*) do ( set FileA=%%~fA set FileB=!FileA:%~f1=%~f2! set FileASize=%%~zA for %%Z in ("!FileB!") do set FileBSize=%%~zZ if !FileASize! LSS !FileBSize! copy "!FileA!" "!FileB!" ) 

    5. β€œ.svg” ( ) – (SVG) (un[7z]me)
  2. SVG:
    1. {SVG 1.1; UTF-8; ; : ; : β€œ1:100”; } ( , 2 – 1‑ )
    2. transform SVG ( 90 ) ( SVG ):
      1. DevTools transform ( β€œ [transform] ”)
      2. β€œ Rotate90AndSwapWH() ” ( β€œ ”)
        Rotate90AndSwapWH()

         Sub Rotate90AndSwapWH()   Dim sr As ShapeRange, s As Shape, w#, h#   Set sr = ActiveSelectionRange   On Error Resume Next   boostStart2 "Rotate 90 and Swap WH"   For Each s In sr       s.GetSize w, h       s.Rotate -90       s.SetSizeEx s.CenterX, s.CenterY, w, h   Next s   boostFinish2 End Sub 


        + boostStart2/boostFinish2:



        :


         Private Sub boostStart2(ByVal unDo$)   On Error Resume Next   ActiveDocument.BeginCommandGroup unDo   Optimization = True   EventsEnabled = False End Sub Private Sub boostFinish2()   On Error Resume Next   EventsEnabled = True   Optimization = False   ActiveWindow.Refresh   ActiveDocument.EndCommandGroup   'Refresh End Sub 

    3. :
      • :
        • ( [, ] )
        • ( )
    4. ( )
    5. XML ( )
      1. ( ):
        • β€œ DOCTYPE ” β€œ Creator ” β€œ 96ppi ” ( ppi CorelDRAW SVG)
        • β€œ metadata ”, β€œ id ” ( )
        • svg:
          1. β€œ xmlns ” β€œ xml:space ”
          2. β€œ xmlns:xlink ”
          3. [, β€œ style ” β€œ fill-rule:evenodd; clip-rule:evenodd ”] β€œ version ” β€œ style ” ` style="margin:16px auto" shape-rendering="geometricPrecision" fill-rule="evenodd" clip-rule="evenodd" xmlns="http://www.w3.org/2000/svg" version="1.1" baseProfile="full" `
        • ( ) ` " ` ` " `
      2. ( <rect> <g>), , β€œ viewBox ” ( <svg>)
        • , SVG , CorelDRAW – , , , ( , )
      3. SVG optimiser :
        • :
          • Whitespace: pretty
          • Style type: optimal
          • Truncate * numbers: unchanged
          • ( , β€œRemove clean group”, )
        • <svg>
        • <style> – SVG optimiser CDATA ( )
      4. XML
  3. PNG SVG:
    1. β€œPNG_SVG.bat” ( 7-Zip SVG: β€œ -txz -m0=LZMA2:lc1:pb0 -mx ”)
      PNG_SVG.bat

       @echo off setlocal enabledelayedexpansion :: PNG+7Zip{SVG} echo PNG dir: %~f1 echo SVG dir: %~f2 echo --- for /r "%~2" %%A in (*.svg) do ( set SVG=%%~fA set PNG=!SVG:%~f2=%~f1!.png "%ProgramFiles%\7-Zip\7z.exe" a dummy -txz -m0=LZMA2:d96m:fb74:lc1:pb0 -mx -so -- "!SVG!" >> "!PNG!" ) 


      β€œ LZMA2:d96m:fb74:lc1:pb0 ”?


      ‑ ( β€œRingSync_no_problem.svg”):


       - "LZMA2:d96m:fb64"        6804 byte - "LZMA2:d96m:fb74"        6800 byte - "LZMA2:d96m:fb74:lc2"    6812 byte - "LZMA2:d96m:fb57:lc2"    6780 byte - "LZMA2:d96m:fb57:lc1"    6768 byte - "LZMA2:d96m:fb56:lc1"    6760 byte - "LZMA2:d96m:fb49:lc1"    6760 byte - "LZMA2:d96m:fb56:lc1:pb0" 6696 byte - "LZMA2:d96m:fb46:lc1:pb0" 6688 byte (fb44-fb47) - "LZMA2:d96m:fb63:lc1:pb0" 6688 byte - "LZMA2:d96m:fb66:lc1:pb0" 6684 byte - "LZMA2:d96m:fb74:lc1:pb0" 6692 byte 


      svg β€œ LZMA2:d96m ” (fb64), β€œ LZMA2:d96m:fb74:lc1:pb0 ” .



Note : Image Catalyst: ping timeout, ( 2.5) ( 2.1 – )


Image Catalyst.bat

v2.1 diff:


 182c182 < if defined thrt >nul 2>&1 ping -n 1 -w 500 127.255.255.255 & goto:waithreat --- > if defined thrt >nul 2>&1 timeout /t 1 /nobreak & goto:waithreat 203c203 < 1>nul 2>&1 ping -n 1 -w 500 127.255.255.255 --- > 1>nul 2>&1 timeout /t 1 /nobreak 237c237 < if exist "%~1" (1>nul 2>&1 ping -n 1 -w 500 127.255.255.255 & goto:waitflag) --- > if exist "%~1" (1>nul 2>&1 timeout /t 1 /nobreak & goto:waitflag) 513c513 <     if exist "%tmppath%\typelog.lck" (1>nul 2>&1 ping -n 1 -w 500 127.255.255.255 & goto:savelog) --- >     if exist "%tmppath%\typelog.lck" (1>nul 2>&1 timeout /t 1 /nobreak & goto:savelog) 534c534 < if "%jpeg%" equ "0" if "%png%" equ "0" 1>nul ping -n 1 -w 500 127.255.255.255 2>nul & goto:finmessage --- > if "%jpeg%" equ "0" if "%png%" equ "0" 1>nul timeout /t 1 /nobreak 2>nul & goto:finmessage 572c572 <     1>nul ping -n 1 -w 500 127.255.255.255 2>nul --- >     1>nul timeout /t 1 /nobreak 2>nul 


V2.5 diff:


 319,320c319 <     call:division float 1024 100 <     call:echostd " In   - !float! " --- >     call:echostd " In   - !float! " 322d320 <     call:division change 1024 100 324,325c322 <     call:division float 1024 100 <     call:echostd " Out  - !float!  (!change! , %5%%%%%%)" --- >     call:echostd " Out  - !float!  (!change! , %5%%%%%%)" 362,363c359,360 < set /a "ww=%random%%%%1" < 1>nul 2>&1 ping -n 1 -w %ww% 127.255.255.255 --- > set /a "ww=%random%%%%1/1000" > 1>nul 2>&1 timeout /t %ww% /nobreak 707c704 < if %jpeg% equ 0 if %png% equ 0 if %gif% equ 0 1>nul 2>&1 ping -n 1 -w 500 127.255.255.255 & goto:finmessage --- > if %jpeg% equ 0 if %png% equ 0 if %gif% equ 0 1>nul 2>&1 timeout /t 1 /nobreak & goto:finmessage 741d737 < call:division changePNG 1024 100 747d742 < call:division changeJPG 1024 100 753d747 < call:division changeGIF 1024 100 800c794 <     call:echostd " Total %1:        %%change%1%% , %%perc%1%%%%%%" --- >     call:echostd " Total %1:        %%change%1%% , %%perc%1%%%%%%" 


Note : Image Catalyst ( ) CP866, diff, , .



:


  • 778px – (780px – βˆ’ 2px )
    • 756px – (758px – βˆ’ 2px )
    • 738px – (740px – βˆ’ 2px )
  • Image Catalyst v2.1 v2.5, ( β€œ merge_min.bat ”).
  • – : habrastorage β€œdwbmwbyvlzes80cep1hvcdb5iy.png” () HTTP‑ β€œ Content-Disposition : inline ;... ”, , , (): β€œdwbmwbyvlzes80cep1hvcdb5iy.png#real-name.png”. , – ( ). SVG – (), , …
  • (id, name). . ( – , , – )
  • , ( ).
  • ‑ (un[7z]me), habrastorage – , CloudFlare Polish .


Note : habrastorage SVG ( ): ( ), PNG{SVG} ( SVG, , – ) ( , , / – ‑ / , )


git:


  • git tag git β€œgit-tag-‹›” .
  • git , / , β€œarticle_#”. ( LLTR Simulation Model )
  • ( β€œhttp”), ( ) web.archive.org, sohabr.net:
     var res=str.match(/http[^#)\s]*/gm); var res_l=res.length; for(var i=0;i<res_l;i++) console.log(res[i]); var archive = res.filter(function(a){return a.search(/(omnetpp.org\/doc\/omnetpp\/manual\/#|wikipedia|\/github.com\/)/)==-1;}); 
    • , web.archive.org sohabr.net .
    • habrahabr.ru habr.com, .. web.archive.org ( , ).
  • , Wikipedia β€œ?stable=1”.
  • () MediaWiki (β€œ#.D0.AD.D0.B2.D1.80.D0.B8.D1.81…”; β€œwikipedia”, β€œ#.D0”) (β€œ#…”).
  • C ( ) + Git.
  • [ β€œ 2”] (β€œLLTR #::”), β€œtitle” ( ).
  • (id, name), (, β€œ#”) ( title β€œ ”).
    • sohabr.net ` id ` ( ), ` <a name=""></a> `?
    • β€œUnicode Link Symbol” (U+1F517; β€œ&#128279;”) , (Chrome , , ), .. .
  • (<hr />) – , UserCSS ( UserCSS ).
  • ` <p><br /></p> `, UserCSS ` <br /> `, ` margin ` ` <p> ` ( ).
    • `<p> ` , Markdown… (, ` <p> ` info , , UserCSS, ).
  • height ( ‑), , width.
  • β€œ Full width brackets ” ( ; , ).
  • β€œ ?”
    • ( , , ). , ( ) , . , – . , ( ). /, . //, – .
    • β€œ ”.
  • habrahabr.ru/info/help/posts/ ( , old )
    , how‑to – Β« Β» (tutorial), ;
  • .


Note : habrahabr <oembed> , GitHub , .


Note : TODO‑ , 43 KiB ( β€œ 0”), 69 KiB ( β€œ 1”), 45 KiB ( ).




DOI: 10.5281 / zenodo.1407060

Source: https://habr.com/ru/post/id421243/


All Articles