دعونا fastcode مثل المهنيين


أعطني رافعة ، نقطة ارتكاز ، أرجل وشريط مقوى



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




محتوى


  1. مقدمة ................................... 2 
  2. تثبيت محرر ليو ..................... 2 
  3. الإعداد ................................ 4 
  4. التعرف على الواجهة ................. 7 
  5. إنشاء ملفات خارجية ................. 14 
  6. استخدام المقاطع المسماة ........ 18 
  7. الجشع إدراج ........................ 21 
  8. سحر بسيط ...................... 24 
  9. الجانب العكسي للذئب ............... 30 
  10. تصور هذا ........................ 33 
  11. المحتوى والشكل ...................... 36 
  12. سأبني بيئة تطوير متكاملة لنفسي .................... 39 
  13. حرية الفكر ........................... 49 
  14. يا هلا ، النهاية .............................. 58 
  15. محدث.  أمثلة التطبيق ................. 58 




فاتحة


عندما تكتب بأية لغة برمجة ، يوجد دائمًا نقص حاد في متصفح الفصل من Smalltalk ، والشعور المزعج بأن يديك مقيدتان وأن ساقيك رطبتان لا تنتهي. ويحدث أيضًا أنك غالبًا ما تبحث عن شيء واحد على الإنترنت ، وتجد شيئًا مختلفًا تمامًا ، ولكنه جميل جدًا لدرجة أن سبب بداية البحث يضيع على خلفية الآفاق التي تتكشف. يؤدي البحث عن عبارة "متصفح فئة python class" إلى إنتاج الكثير من القمامة ، لكن الماس غير المصقول يكمن في هذا الجبل ، اللامع الخافت ، ولا يجذب اهتمامًا كبيرًا ، في انتظار العين اليقظة والعقل المستفسر لإشعاره واستلامه.



تثبيت محرر ليو


المشروع عبر الأنظمة الأساسية ، يتم توفير عملية التثبيت لمنصة Windows. لبدء المحرر ، تحتاج إلى Python ومكتبة Qt. يعد خيار التثبيت الموضح هو الأكثر تطوراً بالنسبة للمستخدم غير مستعد للمعاناة ، ويمكن للمحترفين التصرف وفقًا لتقديرهم.

تثبيت Miniconda بيثون مدير مساحة عمل مبرمج. يسمح لك هذا الحل بالحد من القدرة على الحصول على اليقطين بدلاً من المكونات المتصلة بشكل صحيح ، وفي حالة الجمود التعسفي ، استرجع بشكل غير مؤلم إلى حالة الصفر والتحول بسرعة إلى اختبار خيار ضبط مختلف.

من صفحة التنزيل ، نزّل برنامج التثبيت Python 3.7 Miniconda3 Windows 64 بت. نضع عندما ينشأ سؤال حول العلامات ، قم بتنشيط الاثنين.

بعد ذلك ، قم بتشغيل سطر الأوامر (المفاتيح [Win + R] ، "cmd" ، [Enter]). نحن اكتب:

conda 

عودة الصورة مرة أخرى

لا توجد أخطاء ، هناك إمكانية الوصول المباشر إلى الشقة. نحن نتحقق من توفر الإصدار المطلوب من لغوي اللغة:

 python -V 

عودة الصورة مرة أخرى

على الفور.

ننظر إلى إصدارات المحرر المتوفرة للتثبيت:

 pip install leo== 

نحن نفضل أحدث إصدار بدون أحرف في الرقم:

 pip install leo==6.1 

بعد التنزيل والتفريغ والتثبيت ، نجرب حظنا: نحن نطلق مترجم python ونتصل بمكونات المحرر ونبدأ تشغيل المحرر

 python >>>import leo >>>leo.run() 

عودة الصورة مرة أخرى



تعديل


إذا لم يظهر اختصار التشغيل على سطح المكتب ، فقم بإضافته بنفسك:

المسار إلى محرر المشغل : ٪ USERPROFILE٪ \ Miniconda3 \ Scripts \ leo.exe
مسار الرمز : ٪ USERPROFILE٪ \ Miniconda3 \ Lib \ site-package \ leo \ Icons \ SplashScreen_trans.ico

عودة الصورة مرة أخرى

لم يعجبني شكل مظهري المرئي الأصلي ، لذلك اضطررت إلى صنع موضوعاتي الخاصة. لاستخدامه ، يجب عليك أولاً تنزيله . خالي من الفيروسات 1000٪. ملف python.py هو وصف لعناصر التمييز في بناء جملة python. يجب وضعه في ٪ USERPROFILE٪ \ Miniconda3 \ Lib \ site-package \ leo \ modes \ مع استبدال الملف السابق. ما استسلمت من أجله سوف تصبح لغة الثعبان واضحة بعد قليل. يجب نسخ الملفات المتبقية من الأرشيف إلى المجلد ٪ USERPROFILE٪ \ Miniconda3 \ Lib \ site-package \ leo \ themes \ .

تحتاج الآن إلى تمكين السمة في إعدادات المستخدم.

عودة الصورة مرة أخرى

انقر فوق عنصرsettings ، ثم استخدم المفتاح [Insert] لإضافة عنصر متداخل جديد. لصق النص:

 @string theme-name = monokai.leo 

لحفظ التغييرات ، اضغط على [Enter]. إذا تم إلغاء تنشيط تحرير اسم عنصر ما عن غير قصد ، يمكنك تمكينه بالنقر المزدوج على العنصر أو بالضغط على المجموعة [Ctrl + h].

عودة الصورة مرة أخرى

إعادة التشغيل مع حفظ التغييرات.

عودة الصورة مرة أخرى

يجب أن يحدث الارتباط مع ملفات ".leo" تلقائيًا ، ولكن إذا لم يكن كذلك ، فسنستخدم الحل المدمج.

عودة الصورة مرة أخرى

حتى وقت قريب ، لم ينجح هذا بدون تعديلات ، والآن قاموا بإصلاحه ، كما لو ، هه.



التعرف على الواجهة


عودة الصورة مرة أخرى

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

عودة الصورة مرة أخرى

يبدو أن هناك شيئًا نمطيًا ، لكن هناك غرابة ، بدلاً من الأزرار التي تظهر على الشاشة ، يُقترح الضغط على مفاتيح لوحة المفاتيح. ولا يحتوي الأمر find-all على مفتاح معين على الإطلاق. الآن كل الاهتمام في أسفل النافذة.

عودة الصورة مرة أخرى

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

عودة الصورة مرة أخرى

عودة الصورة مرة أخرى

عودة الصورة مرة أخرى

يتم عرض نتائج البحث عن كل الكلمات التي تحدث "the" في عقدة شجرة جديدة تم إنشاؤها عمداً. المزرعة الجماعية! (لا تقلق ، فإن البحث الحكيم "يمتد" خلال الأحداث المكتشفة ، كما هو الحال في الأعمام الصحية).

عودة الصورة مرة أخرى

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

عودة الصورة مرة أخرى

تسمح لك منطقة العلامات بتعيين تسميات إلى العقد ثم العمل معها لاحقًا. تستخدم على ما يبدو لإضافة أبعاد جديدة إلى عمق الفوضى الترتيب. نختار العقدة ، نكتب معرف العلامة ، انقر فوق "+". نختار عقدة أخرى ، فقط اضغط على "+" ، سيتم تعيين العلامة النشطة. نختار العقدة الثالثة ، اكتب "Schmucker" ، اضغط على "+". لدينا حاليًا عقدتان تحمل علامة "zutsker" وعقدة واحدة تحمل علامة "shmutsker".

عودة الصورة مرة أخرى

يؤدي تحديد علامة من قائمة العلامات إلى قائمة العقد المرتبطة بالعلامات التي يمكنك التنقل من خلالها. لتحديد علامة من عقدة ، انقر بزر الماوس الأيمن عليها.

عودة الصورة مرة أخرى

التالي يأتي لوحة ناف مفيدة للغاية. يساعد على التغاضي بسرعة عن العقد التي تحدث فيها كلمة معينة. نظرًا لأن طريقة الحفاظ على ملفات .leo تمثل فوضى كبيرة مع مستوى عالٍ من التنظيم ، فإن التنقل من خلال البحث يناسب الدورة الطبيعية للتطبيق.

عودة الصورة مرة أخرى

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

عودة الصورة مرة أخرى

تسمح لك قائمة السياق الخاصة بالعقدة باستخدام نسبة كبيرة من إمكانيات علامة تبويب المهام.

عودة الصورة مرة أخرى



إنشاء ملفات خارجية


لن يكون من الصعب تحديد كيفية تعديل النص واستخدام الشجرة بنفسك ، لذلك ننتقل إلى الغوص في هاوية الإمكانيات اللانهائية لنقل التجريدات إلى العالم الحقيقي. قم بإنشاء ملف جديد.

عودة الصورة مرة أخرى

يتم تغيير اسم العقدة المفردة NewHeadline إلى @file 1.txt

عودة الصورة مرة أخرى

إضافة بعض النص إلى محتويات العقدة.

عودة الصورة مرة أخرى

احفظ ملف. lo في مكان ما. افتح المجلد الذي يوجد به ملف .leo. نلاحظ وجود 1.txt. نحن نفتحها

عودة الصورة مرة أخرى

ماذا بنينا؟ قمنا بتكوين تصدير أحد العقد لملف .leo إلى ملف خارجي.
ما القمامة حول النص لدينا؟ البيانات الوصفية التي تسمح لك بإعادة إنشاء الهيكل عند تحميل الملف مرة أخرى إلى محرر Leo ، وهو أمر ضروري إذا كان سيتم تعديل الملف في مكان ما بالخارج. يمكن إسقاط معظم ملفات python من الكود المصدري Leo Editor بالسحب والإسقاط في المحرر ووجدت أنها تحتوي على وصف للبنية:

عودة الصورة مرة أخرى

ولكن إذا لم نكن بحاجة إلى وظيفة التحميل العكسي على الإطلاق ، ولكن على العكس من ذلك ، نريد ألا يحتوي الملف على بايتات غريبة ، ثم يتم ذلك عن طريق استبدال التوجيه @file بـ @file-nosent (بدون حراس).

عودة الصورة مرة أخرى

بعد حفظ التغييرات في ملف .leo ، سيتم تحديث الملف الخارجي تلقائيًا.

عودة الصورة مرة أخرى



باستخدام المقاطع المسماة


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

عودة الصورة مرة أخرى

يتم إخطارنا بمشكلتين:

  1. لدينا عقدة "اختبار" معلقة في الهواء (نسبة إلى الملف الخارجي ، نظرًا لوجود عقدة داخل بنية .leo ، لكننا لم نشير إلى كيفية إضافتها إلى الملف الخارجي ، نظرًا لوجود خطأ).
  2. حتى يتم حل المشكلة @file-nosent 1.txt لن يتم حفظ أية تغييرات أخرى داخل @file-nosent 1.txt في القرص.

الطريقة الأولى لإضافة الروابط بين العقد هي من خلال المقاطع. يبدو التنسيق الخاص لأسماء الأقسام كما يلي:

 <<my_name>> 

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

عودة الصورة مرة أخرى

عودة الصورة مرة أخرى

الملف الناتج:

عودة الصورة مرة أخرى

في المثال نفسه على ملف حقيقي ، يتم تخصيص قسم الاستيراد للتبعيات الخارجية بشكل صريح لعقدة منفصلة.

عودة الصورة مرة أخرى



إدراج الجشع


ولكن ماذا نفعل إذا أردنا إنشاء قسم متداخل في قسم متداخل ووضع قسمًا آخر فيه؟ يمكنك التصرف بسذاجة:

عودة الصورة مرة أخرى

ولكن لمثل هذه الرغبات الطبيعية ، هناك ما يصل إلى @all : @all و @others .

التوجيه @all طعم النصوص من جميع العقد المتداخلة.

عودة الصورة مرة أخرى

بالطبع ، كل هذا يتوقف على تنسيق الملف الذي تحتاجه في الإخراج ، ولكن ربما ترغب في توجيه @others ، والذي يسمح لك بتحقيق الهيكل المصمم في النموذج المطلوب. خيار حزين:

عودة الصورة مرة أخرى

التفاف الأقسام مع الكلمات الرئيسية:

عودة الصورة مرة أخرى

تنسيق المسافة البادئة:

عودة الصورة مرة أخرى

حسنا؟ هل بدأت في التبلور؟ نحن بالكاد ننكب على المتعة الحقيقية. :: ::



سحر بسيط


أخيرًا ، نبدأ في إنشاء الرمز. ستكون المهمة غبية ، لكن تحتوي على عناصر أساسية نموذجية لبرنامج مفيد. إنشاء عقدة جديدة في أي مكان في الملف الموجود أو الجديد. يشير السطر الأول إلى توجيه @language لتمكين تمييز الكود. إذا كنت تحت لغتك المميزة في المجلد ٪ USERPROFILE٪ \ Miniconda3 \ Lib \ site-package \ leo \ modes \ no ، فلا أحد يحظر إضافتها بنفسك.

عودة الصورة مرة أخرى

افترض أن المعلومات التي سنقوم بمعالجتها مخزنة بواسطة لوحة في ملف CSV.

نحتاج إلى: حساب عدد الأحرف "0" الموجودة في العمود Count

يجب علينا:

  1. تحويل النص إلى نموذج بنية البيانات
  2. أداء التكرار مع العد

عودة الصورة مرة أخرى

نحن نتحلل البرنامج وفقا للخوارزمية المتقدمة. الخطوة الثانية بعد قراءة الملف ، قم بتقسيم النص إلى أسطر. ما كانت الخطوة الأولى تنتقل إلى العقدة الفرعية للقراءة.

عودة الصورة مرة أخرى

بعد ذلك ، قم بإنشاء مجموعة من القواميس المقابلة للبيانات الموجودة في الجدول. هذه العقدة في المستوى العلوي.

عودة الصورة مرة أخرى

والخطوة الاخيرة.

عودة الصورة مرة أخرى

في غضون ذلك ، سيتشكل الملف main.py الناتج على القرص.

عودة الصورة مرة أخرى

الصيحة ، نحن عظيمون. لكن فجأة كانت لدينا رغبة غير مفهومة في حساب عدد الخطوط المهمة في ملف CSV نفسه. ليست مشكلة ، وجعل copy.paste من العقدة الرئيسية ، وتغيير اسم ملف الإخراج ، وتعديل رمز الخطوة الأخيرة. نحصل على النتيجة.

عودة الصورة مرة أخرى

وهنا تفرح فرحتنا بالحزن ، لأن اسم ملف CSV قد يصبح مختلفًا ، مما يعني أننا إذا صححناه في برنامج واحد ، فحينئذٍ في الثانية سوف نغفل عنه بالتأكيد ونخسر فرحة إعادة استخدام الكود.

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

انسخ العقدة.

عودة الصورة مرة أخرى

ندرج باسم "الوهمية".

عودة الصورة مرة أخرى

الفانتوم لها أيقونة مختلفة. تنعكس أي تغييرات في الاسم أو المحتوى أو العقد الفرعية في النسخة. نقوم بحذف عقدة القراءة القديمة وتحقق من أن تعديل اسم الملف يتم تنفيذه الآن بشكل متزامن في كل مكان.

عودة الصورة مرة أخرى

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

عودة الصورة مرة أخرى

يتيح لك ذلك القيام بأشياء رائعة: توفق مع تمثيلات المعلومات ، وربط حاويات البيانات غير المتجانسة ، وعدد لا حصر له من النسخ الفعلية من البيانات في مشروع واحد ، وتحميل البيانات في شجرة Leo التي لا يمكن وضعها في شجرة منتظمة.



بالذئب عكس


دعونا نفعل تجربة. إنشاء عقدة جديدة. أضف نصًا إليه.

 g.es( len("This is test".split()) ) 

عودة الصورة مرة أخرى

اضغط على [Ctrl] + [b].

عودة الصورة مرة أخرى

تشبوك ، مساء جميل. نعم ، لدينا هنا ، كما اتضح ، مترجم Python مدمج ، يمكنه تنفيذ نص العقدة كرمز. إذا كانت المقاطع متصلة بالعقدة وفقًا لقواعد ربط المقاطع بالملفات الخارجية ، فسيتم أيضًا تنفيذ الكود منها ، مما يعني أنه لا توجد قوة يمكن أن تمنعنا من خوض معركة مع الاضطراب.

عودة الصورة مرة أخرى

مثال على الحياة: رمز الدروس التعليمية متردد بشكل رهيب في الكتابة بشكل طبيعي ، ولكن إذا كان أكثر من 50 سطرًا ، فإن الفوضى التي أصبحت غير قابلة للقراءة في اليوم التالي مضمونة. تجدر الإشارة إلى أن العديد من المدربين يستخدمون نفس مجموعة البيانات المصدر ، ويقومون بمعالجات مختلفة عليها. ما سبق صحيح بالنسبة لأي "نموذج أولي" أو "أداة مساعدة 1-2 مرات." في هذا المكان ، تعتبر شرائح Leo Editor الموصوفة مفيدة للغاية.

عودة الصورة مرة أخرى

هذا كل شيء - هذا رمز يعمل شيئًا داخل محرر Leo ، دون تحميله إلى ملفات .py.

على عكس أوراق السباغيتي في الصورة ، يمكنك على الفور فهم الجوهر العام لما يحدث. على سبيل المثال ، في برنامج "4 Linear Regression" ، تتم كتابة البيانات من الإنترنت لأول مرة في ملف. ثم يتم إجراء العديد من التلاعب على النموذج العددي لـ "انحدار OLS" ، المصمم وفقًا للملف. علاوة على ذلك ، إذا كنا بحاجة إلى استخدام بيانات أخرى أو إعدادات أخرى للنموذج ، فهذا يكفي لإجراء تغييرات في عقدة واحدة ، نظرًا لأن الأجزاء المعاد استخدامها من البرنامج يتم تنفيذها بواسطة "phantoms". ينقسم البرنامج إلى 6 أجزاء مستقلة ، يتم إطلاق كل منها على حدة ، ولكن في نفس الوقت يبدأ تنفيذها من نقطة واحدة مشتركة.

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

50 ملفات مبعثرة مع ملفات المصدر و 50 ملفات مبعثرة. 50 عقد مع أكواد المصدر هي قاعدة المعرفة مع الرغبة الداخلية للتنظيم الذاتي.



تصور ذلك


قبل الشروع في مستوى صعوبة Nightmare ، دعنا نعود إلى الواجهة.

يمكن سحب لوحات المحرر لتنظيم مساحة العمل الخاصة بك بأفضل طريقة. يحتفظ كل ملف بإعدادات المظهر الخاصة به. يمكنك إغلاق جميع اللوحات باستثناء الشجرة. لإعادة اللوحات مرة أخرى ، انقر بزر الماوس الأيمن على رأس الشجرة.

عودة الصورة مرة أخرى

في نفس القائمة هناك تقديم معين. تم تصميم هذا الشيء الصغير وفقًا لاسمه لعرض كل شيء في العالم.

بشكل افتراضي ، يحاول التجسيد تقديم نص العقدة كـ reStructuredText . يتم تضمين أوضاع أخرى من التشغيل عن طريق فرض نوع المحتوى في اسم العقدة.
معرفنوع المحتوىتعليق
@asciidocعلامة توثيق Asciidoctorيتطلب تثبيت Asciidoctor
@htmlترميز HTML
@graphics-scriptواجهة المستخدم الرسومية المخصصة الرسم من خلال فئات QT QGraphicsView ، QGraphicsScene
@imageعرض الصور من الأشكال الشعبيةيشار إلى المسار إلى الصورة في الجسم
@svgتعيين SVGيشير الجسم إما إلى مسار الصورة أو مصدر SVG
@jupyterعرض جوبيتر جلسات تفاعليةلا تعمل بشكل صحيح
@latexعرض توصيف اللثيلا تعمل بشكل صحيح
@md, @markdownتخفيض سعر العرضيتطلب تثبيت معالج تخفيض السعر
@movieعرض الفيديويتم تحديد المسار إلى الفيديو في الجسم
@pyplotعرض الرسوم البيانية باستخدام Matplotlib بيثونيتطلب تركيب Matplotlib Python

كما ترون من الجدول ، Render لا يعمل بقوة كبيرة ، والخبر السار هو أنه يمكن توسيع Leo Editor مع الإضافات ، بما في ذلك المكونات المرئية. على سبيل المثال ، كنت بحاجة لتحميل الأرقام في الجداول ورسم الرسوم البيانية ، مع تغيير البيانات الأولية ألف مرة.

عودة الصورة مرة أخرى

يبدو الحد الأدنى لرمز البرنامج المساعد المرئي كما يلي:

 from leo.core.leoQt import QtCore, QtGui, QtWidgets import leo.core.leoGlobals as g class My_Plugin_Widget(QtWidgets.QWidget): def __init__(self, parent=None, leo_com=None): super(My_Plugin_Widget, self).__init__(parent) c = leo_com self.c = c self.layout = QtWidgets.QVBoxLayout() self.message = QtWidgets.QLabel("Hello there!", self) self.layout.addWidget(self.message) self.setLayout(self.layout) def init(): g.registerHandler("after-create-leo-frame", onCreate) g.plugin_signon(__name__) return True def onCreate(tag, keys): c = keys.get("c") if not c: return dw = c.frame.top dock = g.app.gui.create_dock_widget(closeable=True, moveable=True, height=150, name='My plugin') dw.leo_docks.append(dock) dock.setWidget(My_Plugin_Widget(leo_com=c)) dw.splitDockWidget(dw.body_dock, dock, QtCore.Qt.Horizontal) dock.show() 

البرنامج المساعد مطلوب:

  1. حفظ إلى %USERPROFILE%\Miniconda3\Lib\site-packages\leo\plugins\
  2. قم بالتسجيل في ملف myLeoSettings.leo في @settings\@enabled-plugins

عودة الصورة مرة أخرى

يمكنك أن تقرأ عن كيفية صنع الإضافات هنا ، إذا لم يكن لديك نفاد صبر للحصول على مزيد من المعلومات ، فالطريقة الوحيدة هي دراسة البرنامج المساعد viewrendered.py بنفسك.

لماذا هذا كله؟ مرة أخرى إلى احتمالات لا حدود لها. يتيح لك الوصول الكامل إلى QT إما إعادة إنتاج المعلومات بطريقة تعسفية ، أو إدخالها بأكثر الطرق غير المتوقعة.



المحتوى والنموذج


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

عودة الصورة مرة أخرى

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

  1. فتح إغلاق العلامات
  2. تعيين نص العقدة كسمات علامة
  3. يتم وضع نص العقد بالاسم الخاص "> <" داخل العلامة المقابلة

حسنًا ، بالطبع ، محرر Leo يتيح الوصول غير المحدود إلى الشجرة من رمز العقدة. سواء بالنسبة للقراءة والكتابة. ما الذي يجعل من الممكن إجراء تعديلات تعسفية على تمثيلات المعلومات للإنسان والآلة. في أي اتجاه وبقدر ما تريد. يمكنك تنزيل تنسيق معين وإعادة بنائه إلى شجرة يمكن فهمها لك وإجراء تغييرات وتحويلها مرة أخرى. إذا كان تنسيق الإخراج تافهًا ، فيمكنك كتابة ملف خارجي باستخدام Python. إذا كان التنسيق معقدًا و / أو يوجد قدر كبير من البيانات ، فمن المفيد أن تقضي بعض الوقت في نقل البيانات إلى عقدة ملف مع أقسام ، لأن هذا يسهل إلى حد كبير تصحيح التحويلات.

وصف وظائف للعمل مع شجرة:
الفريقتأثير
g.es('text')print('text') Leo Editor
n = g.findNodeAnywhere(c, 'TITLE')'TITLE'
for node in n.children():
node.h/
node.b/
node.parent()
p()
c.selectPosition(p)
root_node = p.findRootPosition()
for node in root_node.following_siblings():
if node.h.startswith('OUTPUT'):, 'OUTPUT'
new_node = node.insertAsLastChild()
if node.hasChildren():
new_node = node.insertAfter()
node.deleteAllChildren()
c.redraw_now()

يمكن الحصول على وظائف أخرى من مصادر Leo Editor وملفات .leo كاملة ، ولا يوجد بالفعل أي وثائق ( باستثناء هذه الصفحة ) = (

بالمناسبة ، هذه المقالة مكتوبة في Leo Editor.

عودة الصورة مرة أخرى

يتم استخدام الكود التالي لتصدير الشجرة إلى HTML:

 @language python from pathlib import Path @others path = Path('C:\\Projects\\article\\') / 'out.html' out_text = '<body><script>document.body.style.fontSize = 20;</script>' n = g.findNodeAnywhere(c, 'TITLE') assert nh == ('TITLE') tag = f'<h1>{nb}</h1> ' out_text = out_text + tag + '\n\n' n = g.findNodeAnywhere(c, 'TEXT') assert nh == ('TEXT') for header_node in n.children(): anchor_id = hash(header_node.h) tag = f'<anchor>{anchor_id}</anchor><h3>{header_node.h}</h3>' out_text = out_text + tag + '\n' if '' == header_node.h: text = make_toc(header_node) tag = f'{text}' out_text = out_text + tag + '\n' for content_node in header_node.children(): if '@image' in content_node.h: tag = f' <img src="{content_node.b}" alt="  "> ' else: text = content_node.b if not 'table' in content_node.h: content_node.h = ' '.join(content_node.b.split()[:3]) text = text.replace('\n', ' ') tag = f'{text}' out_text = out_text + tag + '\n' tag = ' <hr/>' out_text = out_text + tag + '\n' out_text = out_text + '</body>' + '\n' with open(path, 'w', encoding='utf-8') as f: f.write(out_text) g.es('.') 



سوف نبني بيئة تطوير متكاملة لنفسي


ليس ثعبان واحد ، لذلك دعونا نحاول تزويد أنفسنا بزاوية تحت ... أي شيء. أولاً ، أخيرًا اضغط على زر البرنامج النصي.

عودة الصورة مرة أخرى

يؤدي هذا الإجراء إلى ظهور زر جديد أسفل القائمة الرئيسية باسم العقدة الحالية. يشير المنطق إلى أن النقر على هذا الزر حديثًا سيؤدي إلى محاولة تنفيذ التعليمات البرمجية من العقدة المرتبطة بالزر. أنها مريحة ، ولكن غير مريح أن الزر سوف تتبخر بعد إعادة تشغيل المحرر. للحفاظ على الزر دائمًا في مكانه ، تحتاج إلى إضافة تعويذة خاصة باسم العقدة @buttonوإعادة تشغيل Leo Editor.

عودة الصورة مرة أخرى

لكل زر مستخدم ، يمكنك تعيين مفتاح الاختصار باستخدام التعبير. من @key=

عودة الصورة مرة أخرى

أجل تشغيل برنامج نصي آخر من برنامج نصي واحد ، يجب عليك استدعاء وظيفةc.executeMinibufferCommand('FIRE'). كل نص برمجي مرتبط يقع في المجموعة العامة لأوامر المحرر تحت اسم الزر ، أي نعم ، يمكن تشغيل البرنامج النصي من سطر أوامر المحرر أيضًا.

عودة الصورة مرة أخرى

من أجل تنفيذ البرنامج النصي للعقدة قيد التركيز حاليًا ، من برنامج نصي آخر (كما لو كان بالضغط على [Ctrl] + [b]) ، يتم استخدام الأمر c.executeMinibufferCommand('execute-script').

لنفترض أن لدينا بعض الرموز المعدة. سيكون من المفيد تنفيذها من Leo Editor ، وسيكون من الرائع الحصول على جميع الأخطاء من وحدة التحكم. ألقِ نظرة على مثال للتنسيق التلقائي لرمز Python داخل عقدة باستخدام الأداة المساعدة Black الشهيرة.

 @language python import subprocess import re c.frame.log.selectTab('Log') c.frame.log.clearLog() python_src = [] for line in pbsplitlines(): if re.match(r'@', line) is not None: line = line.replace('@', '# special_comment@') elif re.match(r'<<', line) is not None: line = line.replace('<<', '# special_comment<<') python_src.append(line) text = '\n'.join(python_src) proc = subprocess.Popen( ['black', '-', '-q', '--skip-string-normalization'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, bufsize=0, shell=True, ) proc.stdin.write(text.encode()) proc.stdin.close() s = proc.stdout.read() if s: text = s.decode('utf-8') text = text.replace('# special_comment<<', '<<') text = text.replace('# special_comment@', '@') if 'error: cannot format -: Cannot parse:' in text: z = re.search(r'Cannot parse:.*', text) g.error(z.group(0)) else: undoData = c.undoer.beforeChangeNodeContents(p) pb = text.strip() c.undoer.afterChangeNodeContents(p,'Format with black', undoData) c.executeMinibufferCommand('execute-script') 

تم القيام بما يلي:

  1. نحن نأخذ النص من العقدة
  2. نضع تعليمات محرر ليو الخاصة في التعليقات
  3. قم بتشغيل الأداة المساعدة وحدة التحكم
  4. نمرر النص إلى الأداة
  5. قراءة استنتاجها
  6. نعود إلى المكان تعليمات خاصة
  7. إذا لم تكن هناك أخطاء ، فاستبدل النص الحالي بالتنسيق
  8. قم بتشغيل رمز العقدة

ستكون هذه العينة كافية لإطلاق أي شيء على أساسها.

الآن دعونا نلقي نظرة على نسخة جميلة وواضحة للاستخدام العملي لمحرر ليو. يحتوي نظام Python البيئي على العديد من الحلول لإنشاء تطبيقات واجهة المستخدم الرسومية ، أحدها إطار عمل Kivy. من الميزات المهمة في هذا الإطار القدرة على تحميل وصف واجهة بلغة خاصة من ملف نصي. سيساعدنا محرر Leo أولاً على تخزين رمز ووصف الواجهة في مساحة واحدة ، وثانيًا ، سيحل محل تحرير النص بتحرير شجرة ، وهو ما سيقربنا أكثر من رسومات واجهة wysiwyg.

عودة الصورة مرة أخرى

ما الحقائق التي يمكن استخلاصها من لقطة الشاشة أعلاه:

  1. Leo Editor Kivy
  2. RUN make_GUI, make_py,

عودة الصورة مرة أخرى

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

نمر إلى الفرع مع الرمز.

عودة الصورة مرة أخرى

نظيفة جدا وهذا واضح. نحن لا نولي اهتماما ل DATAGRAPH. وماذا عن الفصول؟

عودة الصورة مرة أخرى

تم إغلاق الدائرة ، ثم ما حدث لهذه القصة جاء في شكل تطبيق مؤقت لمتصفح الفئة لبيثون. رؤوس العقدة ليست مجرد تعليقات ؛ يتم استخدام محتوياتها عند إنشاء ملفات .py. تشكل مستويات تداخل الفئة تلقائيًا تسلسل هرمي. كل شيء ونحن نعبد.

عودة الصورة مرة أخرى

KA-EE-FF !!! لا تركز على معنى ما يحدث ، يتم إلقاء الدروس للحصول على لقطة شاشة.

يمكن القيام بشيء مماثل على الوظائف العارية لأقسام الملفات ، ولكن سيتعين عليك تحديد جميع بنيات اللغة بشكل صريح (def ، class ...) ، ومع أي تغييرات ، سيكون من الضروري تذكر إجراء العديد من التصحيحات هناك (ورؤوس تعليق العقد غير المجدية أيضًا. ).

ومرة أخرى ، حول مساحة واحدة من التعليمات البرمجية وواجهة. أولاً ، تذكر بحث التنقل ، والذي يسمح لك بالبحث السريع عن معالجات التعليمات البرمجية عن العناصر المرئية والعناصر المرئية من التعليمات البرمجية.

عودة الصورة مرة أخرى

ثانياً ، لا تزال هناك ميزة متوقعة مثل محرر نصوص إضافي.

عودة الصورة مرة أخرى

قفز!

عودة الصورة مرة أخرى

لذلك ليست هناك حاجة للتشغيل ذهابًا وإيابًا مع التحرير المتبادل المعقّد للعقد.

بالمناسبة:

عودة الصورة مرة أخرى



حرية الفكر


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

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

يجب على الوحدة الوظيفية الأولية: أن يكون لها مدخلات لتلقي المعلومات ، وتكون قادرة على الاستجابة لنوعها ، ومعالجة المعلومات الأولية ، وحزم نتائج المعالجة في تنسيق للإرسال ، وترجمة النتيجة إلى الخارج.

عودة الصورة مرة أخرى

لنفترض أن هناك مهمة جريئة تتمثل في تحليل المواقع. سنحتاج الكتل التالية:

  1. مكون الشبكة
  2. محلل صفحة الويب
  3. منع للاتصال من البيانات الواردة واجهة رسومية

عودة الصورة مرة أخرى

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

عودة الصورة مرة أخرى

بالطبع ، يمكن لكل كتلة خرسانية إعادة تحميل الطرق النموذجية بطريقتها الخاصة إذا تمت ملاحظة قاعدتين بدقة:

  1. في كل كتلة ، تستدعي طريقة فك التشفير بالضرورة العملية ، والتي بدورها تستدعي التشفير
  2. تستدعي طريقة التشفير طريقة فك التشفير على جميع الكتل المسجلة كمخرجات.

وهذا هو: توافر التوحيد الهيكلي وتجانس تبادل المعلومات مضمونة.

عودة الصورة مرة أخرى

نفس الشيء ، ولكن بشكل أكثر وضوحًا:

  1. المنتج الأصلي يكمن في اللوحة اليسرى.
  2. فك شفرة يعد المنتج للمعالجة
  3. بعد ذلك ، تنفذ الكتلة وظيفتها الرئيسية في طريقة العملية
  4. يتم حزم المنتج عن طريق ترميز
  5. يتم نقل المنتج المعبأ إلى وحدات لاحقة

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

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

عودة الصورة مرة أخرى

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

عودة الصورة مرة أخرى

إرفاق خطوط أنابيب مخصصة لا يشوه الصورة العامة ، لأن منطق العمل مع البيانات التعسفية متطابق دائمًا.

عودة الصورة مرة أخرى

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

عودة الصورة مرة أخرى

نكتب مولد رمز البرنامج من شجرة ، وينتج النتيجة التالية:

عودة الصورة مرة أخرى

لا يوجد خوف.

عودة الصورة مرة أخرى

التالي يأتي تغيير الشرط حسب الحالة. يتم ذلك بشكل مثير للريبة.

عودة الصورة مرة أخرى

عودة الصورة مرة أخرى

لقد كانت مجرد مجموعة من البطاقات مع استبدال زوج من البطاقات التعسفية. حسنًا ، شارك جهازًا واحدًا في العديد من الأجهزة.

عودة الصورة مرة أخرى

بعد ذلك ، يتم إنشاء منطق معالجة جولة اللعبة.

عودة الصورة مرة أخرى

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



الصيحة ، النهاية


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

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

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

بشكل عام ، اصنع واقعك ، وإذا لم تكن هناك أدوات ضرورية لذلك ، ففعله.




UPD. أمثلة التطبيق


الادارية : مكتبة القيادة. يمكنك فقط تخزينه ، يمكنك تشغيله كما هو ، يمكنك استخدام إعدادات الوسيطة داخل الشجرة. على سبيل المثال ، قم بتنظيم العمل باستخدام عدة قواعد بيانات.

عودة الصورة مرة أخرى

التوليف الخوارزمي للموسيقى : تنظيم المسار

عودة الصورة مرة أخرى

تضمين : تنظيم تعسفي للكود في حال كانت البيئة الخاصة بك محدودة في الوسائل.

هناك خياران:
1. تقسيم البرنامج إلى أقسام بالترتيب الأكثر ملاءمة
2. إذا لم يكن للغة وظائف ، فيمكن محاكاتها باستخدام phantoms ،

عودة الصورة مرة أخرى

هناك ثلاث طرق لتنظيم ترتيب تنفيذ التعليمات البرمجية:

عودة الصورة مرة أخرى

عودة الصورة مرة أخرى

عودة الصورة مرة أخرى

Pentester : نقل ترسانتك المعتادة إلى "ضربة الكوبالت" الشخصية "

عودة الصورة مرة أخرى

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


All Articles