الجزء الثاني من LLTR: خوارزمية لتحديد هيكل الشبكة من الإحصائيات المجمعة

تكشف طبولوجيا طبقة الارتباط عن الشعار


س: ماذا لدينا؟
ج: الإحصائيات التي تم جمعها من المضيفين.


س: ما الذي نريد الحصول عليه؟
ج: طوبولوجيا الشبكة! بتعبير أدق ، تحتاج إلى بناء السلسلة الصحيحة من النظراء (المضيفين) لـ RingSync .


علينا أن نخرج خوارزمية تحول الإحصاءات أولاً إلى طوبولوجيا شبكة ، ثم إلى سلسلة نظير. حتى الآن ، تبدو الخوارزمية كما يلي:


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


إذا كنت تستمتع بقراءة "الجزء الأول" على صفحات GitHub ، فإليك رابطًا لذلك الجزء على صفحات GitHub.


تحذير : فيما يلي نفس القطع الأثرية من محلل هابر التي حذرت منها في "الجزء الأول" .


لا يمكن تمييز أي تقنية متقدمة بما فيه الكفاية عن السحر.  - آرثر سي كلارك


ملاحظة : بدلاً من " –-[**]--> " سأستخدم " –-[???]--> ".


توضح لنا الإحصاءات التي تم جمعها عن أي المضيفين انخفضت سرعة استقبال حركة البث. على سبيل المثال ، انظر إلى نتيجة التكرار الصفري في الشبكة "N2_2" (" Network " من المقالة السابقة "LLTR Part 1"):


 {300,164,164}, 


هناك دولتان مضيفتان مرئيتان بوضوح هنا:


  • السرعة العادية (القيمة " 300 ") - لا يوجد رد فعل ؛
  • انخفضت السرعة (القيمة " 164 ") - هناك رد فعل .


ما الذي أحصل عليه؟ للعزل الثنائي! إذا قمنا بتشفير غياب التفاعل على أنه 0 ، ووجود التفاعل على أنه 1 ، فيمكننا وضع جميع تفاعلات المضيفين في تكرار واحد في متغير واحد ( 32 - 512 بت [ AVX - 512 ]). بالإضافة إلى توفير الذاكرة (والمساحة التي يتم إنفاقها في ذاكرة التخزين المؤقت) ، سيؤدي ذلك إلى زيادة سرعة المعالجة - سيتم معالجة جميع استجابات المضيف لتكرار معين ( SIMD ) مرة واحدة في تعليمات واحدة.


ملاحظة : لأن يعد استخدام LLTR Basic لعدد كبير من المضيفين أمرًا مكلفًا للغاية ( انظر بداية القسم "LLTR Part 0 :: LLTR Advanced" ) ، ثم يناسب كل شيء في تسجيلات 64 بت x86-64.


ملاحظة : في نص الارتباط إلى القسم الموجود في مقال آخر (جزء آخر) ، سأضيف رقم الجزء بالصيغة : " LLTR Part # :: ‹ name name › ". وفي " title " الرابط ، سأكتب اسم الجزء ، على سبيل المثال ، بالنسبة إلى "LLTR Part 0 ::" ، "سيظهر لك تلقائيًا مخطط الشبكة والمفاتيح غير المُدارة". مهمة مستحيلة؟ "


لنأخذ نفس المثال عن التكرار الصفري ونرى كيف ستبدو بعد التثبيط:


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


مضغوط للغاية ، لكني أرغب في " 1 " ( وجود رد فعل ) أن يلفت انتباهي فورًا عند عرض قائمة بجميع التكرارات. الآن " 1 " لا يبرز في الخلفية " 0 " (بيانات مزيفة ، كمثال مرئي ):


 0101011010110 1100010110010 0101101010111 0100010110100 


لتسليط الضوء على " 1 " ، أقوم بتقديم التعريف:


  • " 1 " تعني 1 - هناك رد فعل ؛
  • " . يعني 0 - لا يوجد رد فعل .


دعونا نلقي نظرة على "البيانات المزيفة" مرة أخرى:


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


أفضل بكثير ( IMHO ).


تبدو الخوارزمية في الوقت الحالي كما يلي:


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


نترك تفاصيل الترميز الثنائي في نهاية المقال ، ونركز على بقية الخوارزمية.


من الأسهل إنشاء خوارزمية تستند إلى بيانات إدخال / إدخال محددة (حالات خاصة ، وظروف الحدود ، والاختبارات من حيث TDD ). في حالتنا ، تعتمد البيانات الأولية على طوبولوجيا الشبكة ، لذلك تحتاج إلى التوصل إلى شبكة تكون صغيرة وفي نفس الوقت تحتوي على مخططات اتصال تبديل مختلفة ( نجمة ، اتصال تسلسلي ). ربما يمكن تضمين شيء خاص فيه ... بشكل عام ، رسم الخيال مثل هذه الشبكة (تدوين العناصر يشبه التدوين المستخدم في نهاية القسم " LLTR Part 0 :: طوبولوجيا:" التوصيل التسلسلي للمفاتيح " "):


الرسم البياني: LLTR Hybrid Network


ملاحظة : بالنظر إلى هذه الشبكة ، فإن السؤال "هل من الممكن إجراء فحص كامل في هذا الهيكل إذا كان أحد المفاتيح ..." (بالقرب من نهاية القسم " LLTR Part 0 :: الهيكل:" الاتصال التسلسلي للمفاتيح " ") ، وستلاحظ أنه لا يوجد مضيف متصل مباشرة بأحد المفاتيح. علاوة على ذلك ، لا توجد مشاكل ، لأنه هناك 3 مفاتيح أخرى متصلة بهذا المفتاح (أحسب فقط المفاتيح المتصلة "من الأسفل" ، دون مراعاة حقيقة أنه متصل بمحول آخر "من الأعلى") ، كل منها يحتوي على مضيفات.


ومع ذلك ، في هذا الرسم البياني هناك بعض التفاصيل الإضافية (المشتتة للانتباه). سأقوم بتنظيفه عن طريق إزالة:


  • مضيف البث (ليس في الإدخال / الإحصائيات) ؛
  • منافذ توصيل التبديل مع بعضها البعض.

رسم بياني: LLTR Hybrid Network (واضح)


هنا يظهر التبديل "بدون مضيفين" على الفور. بالإضافة إلى ذلك ، رتبت جميع المفاتيح بطريقة لا يتداخل فيها المضيفون عموديًا. سيكون هذا مفيدًا إذا كنت أرغب في إظهار "ردود فعل المضيف" في المستقبل ليس في شكل إدخال نص " .....1...... " ، ولكن في شكل رسم تخطيطي (هناك مضيف واحد فقط على رأس واحد):


رسم بياني: شبكة مختلطة LLTR (واضحة) ، شرح تسمية "ردود المضيف"


تخيل الآن الإحصائيات التي نحصل عليها في نهاية كل تكرارات مسح هذه الشبكة. هناك 12 مضيفًا في الشبكة (باستثناء مضيف البث) ، وبالتالي سيكون لدينا بيانات عن 132 تكرارًا. ومع ذلك ، لن تكون جميع نتائج التكرار مفيدة لنا ، على سبيل المثال ، ستكون غير مجدية:


  • ردود فعل مفردة (كما في المثال أعلاه - " .....1...... " ؛ LLTR Part 0 :: أتساءل ما هي خيارات التكرار الأول؟> الخيار 4: "unicast in sw" ) ؛
  • الزوجي (النتائج المتكررة) ، على سبيل المثال ، " .....111.... " سيحدث حوالي 15 مرة ( 3 × (12 - 3− (2 + 2)) ؛ "تقريبًا" ، لأنني لا لقد أنشأت نموذجًا لهذه الشبكة في OMNeT ++ ، ولم أقم بتشغيل المحاكاة ، وأجريت فقط تجربة فكرية لم أتمكن من أخذ بعض التفاصيل فيها بعين الاعتبار).


بعد التنظيف ، من بين جميع نتائج التكرار البالغ عددها 132 ، ستبقى فقط 5 (استجابات المضيف):


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


ملحوظة : من أجل الوضوح ، رتبت التكرارات بالترتيب من عدد أكبر من " 1 " إلى أصغر.


بدأت الخوارزمية تبدو كما يلي:


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

نقطة إعادة الضبط

فكرت في تضمين كل هذا في المفسد ، ولكن في النهاية أدركت أن هذا جزء مهم من القصة ، ومن الأفضل عدم تفويته عند القراءة.


¬ ( لا تخطي إلى الدماغ عند القراءة : Cong



[نقطة إعادة الضبط] في نتائج التكرار الخمسة المتبقية ، يجذب الأولان الانتباه: الأول يتضمن الثاني ، والثاني يشمل الثلاثة الأقل المتبقية. وهنا أتذكر "الظل" من قسم " LLTR الجزء 0 :: الهيكل:" التوصيل التسلسلي للمفاتيح ". في نفس القسم ، في نهاية كل تكرار ، قمنا بتشكيل (أو لم نقم) مجموعات جديدة بناءً على البيانات التي تم الحصول عليها للتو. الآن نحن بحاجة للقيام بنفس الشيء.


لكن كيف قمنا بتشكيل مجموعات جديدة؟ في الواقع ، كانت جميع ردود الفعل (ليست مفردة) للمضيفات " 1 " للتكرار الحالي هي "الكتلة الجديدة" ، كان علينا فقط العثور على التقاطعات ("∩" ؛ وليس "∅" فارغة) مع المجموعات الموجودة من أجل إزالة ("∖") من أكبر المضيفين الكتلة المدرجة في كتلة أصغر.


ومع ذلك ، في إجراءاتنا كان هناك شرط / تفرع (إذا): تحتاج إلى تحديد أي من المجموعات أكبر ، ثم قم بإجراء عملية بسيطة (A ∖ B) - اطرح أصغر (B) من المجموعة الأكبر (A). تمثيل عذاب وحدة المعالجة المركزية مع خط أنابيب طويل ناتج عن الحاجة إلى إعادة تعيين خط الأنابيب إذا كان التنبؤ بالفرع غير صحيح (إذا كان هناك "كتلة تنبؤ بالفروع" على الإطلاق) ، فقد قررت تقريبًا استخدام “?: " ، ولكن في هذه اللحظة ...

وقفت على المرحاض وعلقت الساعة. انزلق فجأة ، وضرب رأسه على الحوض ، وعندما استيقظت كان لدي رؤية ، صورة في دماغي ، رؤية لهذا - فاصل تيار محرك الدفق ( العودة إلى المستقبل ) :

العودة إلى المستقبل: Flux Divider
 // Flux Divider c=a^b; aa=a&c; bb=b&c; cc=a&b; 


وشاهد على الفور عمله على مثال المجموعات المتداخلة (بتعبير أدق ، تم تضمين مجموعة واحدة (مجموعة) بدقة " " في مجموعة أخرى):


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


التجمعات المنفصلة:


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


اتضح أن:


  • يحتوي " aa " على عناصر فريدة لـ " a " ؛
  • في " bb " - فريد لـ " b " ؛
  • في " a " - شائعة في " a " و " b ".


مثال آخر على التجمعات المتقاطعة ("مستحيل" ، ولكن مثال جيد):


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


ملاحظة : هذا النوع من الاستجابة (رد فعل المضيف) غير موجود في بيانات المصدر.


بنفس الطريقة ، يمكنك التخلص من اللقطات :


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


ولكن ، بعد ذلك بقليل ...

توقف الرأس عن الأذى بعد ضرب الحوض ، ويختفي العقل ، وتظهر مشاكل واضحة ...

عند الإدخال ، لدينا متغيرين (نتائج التكرار / تفاعلات المضيف / المجموعات / المجموعات / ...) ، ولكن هناك بالفعل 3 متغيرات ، وسيكون واحد على الأقل فارغًا ("∅"). إذا لم تتخلص فورًا من "∅" ، فسيتعين عليك تضمينها في المعالجة في المستقبل. لذلك ، من الأفضل التخلص من "∅" على الفور. ولكن كيف نفعل ذلك؟ استخدم الشرط / التفرع! ... بشكل عام ، عدت إلى حيث بدأت. بالإضافة إلى ذلك ، إذا تم عمل كل شيء كما هو موضح أعلاه ، بالإضافة إلى أنه يتخلص من "،" في النهاية نحصل على:


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


هذا:


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


حان الوقت لطرح السؤال: "كيف تحصل على طوبولوجيا الشبكة من هذا؟" الآن يمكن لهذه البيانات أن "تقول" عن المجموعة التي ينتمي إليها مضيف معين (أي الذي يرتبط به المضيف) ، لكن هذه البيانات تفتقر الآن تمامًا إلى معلومات حول طوبولوجيا المفاتيح (أي كيف ترتبط التبديل بين بعضها البعض) - فقدنا هذه المعلومات أثناء تحويل البيانات. بالإضافة إلى ذلك ، إلى أي مجموعة (مفتاح) ينتمي المضيفان الموجودان في أقصى اليمين؟ إذا اعتبرنا كل سطر كمجموعة منفصلة (أو كدليل على المضيفين المتصلين بمحول معين) ، فقد تبين أن هذين المضيفين المتطرفين غير متصلين في أي مكان! علاوة على ذلك ، لدينا 6 مفاتيح على الشبكة ، وهناك 4 خطوط متبقية ، أين يوجد خطان آخران؟ لقد محينا واحدًا (كما يقرأ التعليق أعلاه) ، وفي الآخر ، كان يجب أن يكون هناك "مضيفان في أقصى اليمين".


[الانتقال إلى نقطة إعادة تعيين ] لمزيد من تطوير هذه الفكرة غير مجدية. طريق مسدود (فرع بوابة). سيكون عليك العودة إلى تصنيف "نقطة إعادة الضبط" ، مع نسيان كل ما بعد ذلك ، ولكن ترك هذا الفرع للقصة.


الآن ، حتى لا تقع في "فرع ميت" آخر ، تحتاج إلى تحديد البنية النهائية (التمثيل) لشكل الشبكة في الذاكرة. أي ما نريد الحصول عليه في وقت "طوبولوجيا الشبكة":


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


أولاً ، يجب أن يكون جميع المضيفين حاضرين:


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


ثانيًا ، يجب الإشارة إلى الوالدين (الكتلة الأصل لكل عنقود ؛ في الوقت الحالي: الوالد - الطفل ؛ في مخطط الشبكة ، قمت بوضع الوالدين فوق الأطفال) (تتم إضافة أرقام المجموعة على اليسار):


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


ملاحظة : إذا لاحظت شيئًا غريبًا هنا ، مقارنة الرسم التخطيطي لهذه الشبكة بهذه البيانات ، فأنت معجب بي.


المفسد ، من الأفضل عدم الفتح حتى قراءة القائمة بأكملها

في الواقع (وفقًا للرسم التخطيطي) ، فإن أصل المجموعة 1 هو المجموعة 0 ، ولكن بعد ذلك لا يتم استيفاء شرط " الوالد - الطفل ". ربما في " الأول " ارتكبنا خطأ ، وبدلاً من " ..........11 " كان الأمر يستحق إضافة " 111111111111



ثالثًا ، يجب أن يكون هناك أصل "جذري" واحد يربط الأشجار الفردية (أي الغابات ) بشجرة واحدة:


 -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 


رابعًا ، سيكون من الجيد وجود قوائم بالأطفال مع كل من الوالدين:


 -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 


وأخيرًا ، من الممكن الآن استبعاد الأطفال من والديهم:


 -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 


الآن يصف كل صف مجموعة واحدة ، أي يشير إلى المضيفين المتصلين بنفس المفتاح. ومع ذلك ، انتظر ، هناك 6 مفاتيح في شبكتنا ، وهناك 7 مجموعات! حان الوقت ، أخيراً ، لقراءة النص من المفسد فوق " المفسد ، من الأفضل عدم الفتح حتى قراءة القائمة بأكملها " ، وتصحيح الموقف:


 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 


هذه البيانات هي بالضبط "طوبولوجيا الشبكة" - تصف شجرة المفاتيح ، ومن خلالها يمكنك تحديد جميع المضيفات المتصلة بمحول معين.


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


يبقى فهم كيفية إحضار البيانات إلى هذا النموذج. في الواقع ، كل شيء قمنا به (أولاً ، ثانيًا ، ...) يمكن تحويله إلى خوارزمية:


  1. "أولاً" (بعد إجراء التصحيحات من المفسد ، يصبح مشابهًا للإجراء "الثالث") - إضافة مجموعة "جذر" " 111111111111 " ( عالمية ) ، بما في ذلك (مضيفات جميع الأشجار في مضيفي مجموعة التفرعات الموجودة على نفس المفتاح مثل مضيف البث ) ، أي يشمل جميع المضيفين على الشبكة ؛
  2. "ثانيًا" - ابحث عن أحد الوالدين لكل عنقود ؛
  3. "رابعاً" - بناء قائمة بالأطفال لكل من الوالدين ؛
  4. "وأخيراً" - استبعاد الأطفال من آبائهم .


يمكنك الآن إضافة هذه الإجراءات إلى الخوارزمية العامة (غيرت المظهر قليلاً):


                                               ●  ●                                [] ►                 [   ]                          [  ] ► /                [ "" ] ► /        [    ] [     ]              [   ] ►   ●                                        [???] ►   ● 

رأي بديل

 ●      ► [] ▬   ► [   ]                   [  ] ▬ /   ► [ "" ] ▬ / ► [    ]                   [     ]                   [   ] ●   ► [???] ●    ● 


دعنا نرى ما يحدث إذا قمت بتطبيق هذه الخوارزمية على شبكة أخرى. أود أن آخذ الشبكة Network_ serial ونتائج المحاكاة الخاصة بها (الإحصائيات) من قسم " LLTR الجزء الأول :: المزيد من الشبكات ذات الهياكل المختلفة ، وإضافة شبكات جديدة ".


ملاحظة : لماذا اخترت هذه الشبكة بالذات؟ إنه كبير جدًا ، وهناك عيوب في البيانات التي تم جمعها منه (انظر نهاية المفسد "نتائج المحاكاة" لهذه الشبكة).


دعنا نذهب!


ثنائيات

ردود فعل المضيف:


 .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. 


التنقية من ردود الفعل المفردة

 .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. --> 


التنظيف من التكرارات (نحصل على "العناقيد / الغابة"):


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


بالإضافة إلى ذلك ، من أجل الراحة ، سأفرز بترتيب تنازلي للكمية " 1 ":


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


ملاحظة : قد يكون من المفيد تضمين الفرز في الخوارزمية. ما رأيك؟


إضافة عنقود "جذر" (نحصل على "عناقيد / شجرة"):


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


يتضمن مضيفين من شجرتين (يسار " .111111.. " و يمين " .......11 " جزء من الشبكة) ومضيف واحد (" 1........ " موجود على واحد التبديل مع مضيف البث).


البحث الأصل لكل عنقود:


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


ملاحظة : هذا هو المكان الذي ظهر فيه التأثير السلبي لفجوات البيانات - أصبحت المجموعة الرابعة هي الأم للمجموعة الخامسة! بشكل عام ، يمكن لأي مجموعة أن تصبح أصل المجموعة الخامسة ، لأن إنه فارغ (∅).


بناء قائمة بالأطفال لكل من الوالدين:


 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 


استبعاد الأبناء من الوالدين:


 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 


في هذه الخطوة ، كان من المفترض أن نحصل على "طوبولوجيا الشبكة". لقد حصلنا عليها. إذا كنا مهتمين فقط بموقع المضيفين ، فإن "طوبولوجيا الشبكة" هذه مرضية تمامًا بالنسبة لنا. ومع ذلك ، ظهر مفتاح آخر في شبكتنا ، حيث لا يوجد مضيفين!


لإصلاح كل شيء ، سيكون كافيًا بعد إحدى الخطوات الأولى لإزالة "عيوب البيانات" هذه. يمكن القيام بذلك مباشرة بعد "ثنائيات":


                                               ●  ●                                [] ►   [<strong>   (∅),    (⦱)</strong>]               [   ]                          [  ] ► /                [ "" ] ► /        [    ] [     ]              [   ] ►   ●                                        [???] ►   ● 


نحذف المجموعات الفارغة (∅ ؛ " ......... ") ، ولكن لماذا نحذف الأكوان (⦱ ؛ " 111111111 ")؟ سيظهر الجواب عندما نبدأ في تنفيذ مرحلة "ثنائيات". يمكن أن تنتج الأشكال المختلفة لتطبيق "ثنائيات" كلا من " ......... " و " 111111111 " على نفس البيانات (بيانات مع العيب الموصوف). ولأن من المستحيل الحصول على " 111111111 " في بيانات الإدخال الصحيحة كما هو للحصول على " ......... " ، ثم يمكننا حذف جميع " 111111111 " (بالإضافة إلى أنها لا تحمل أي معلومات باستثناء ذلك هناك "عيوب" في البيانات).


إذا قمت بتطبيق هذه الخوارزمية (المدمجة ، المصححة) على نفس الشبكة (" Network_ serial ") ، فستبدو "طوبولوجيا الشبكة" كما يلي:


 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 ”). ( ), . :


:   ;     ,


, “ ” (“ ”):


 ..........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 <-----------┘ 


:


:   ;     ,


, , , !


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


أي – , “, ” – .


?
:


  • – ( ) , . “” , .. “” “” . , “ ”, .
  • – “” / , , . . , (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> ? )


:

#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 : , / , …


المفسد

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 ” ). مثال:


 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]” “ ” ( )


المراجع:




4:

LLTR 4:


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



∀ habrauser ∈ {user ∈ Habrahabr | user “”},

, “” .



(, . )


المراجع:



, (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”).
ما الفرق؟ ( [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, )


المراجع:




6+7: +

LLTR 6:


, Golang.


المراجع:



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”)


المراجع:



( “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/ar421243/


All Articles