الفصل المفقود في تعليم علوم الحاسوب › خليط من المواضيع 11 / 13 السابق التالي

خليط من المواضيع

محتويات الدرس

  • إعادة ربط لوحة المفاتيح
  • الخدمات الخلفية (Daemons)
  • FUSE
  • النسخ الاحتياطي (Backups)
  • واجهات البرمجة (APIs)
  • علمات سطر الأوامر/الأنماط الشائعة
  • مديرو النوافذ
  • شبكات VPN
  • Markdown
  • Hammerspoon (أتمتة سطح المكتب على macOS)
  • الإقلاع وأقراص USB الحية (Live USBs)
  • Docker وVagrant والأجهزة الافتراضية والسحابة وOpenStack
  • البرمجة بالدفاتر (Notebook programming)
  • GitHub

إعادة ربط لوحة المفاتيح

بصفتك مبرمجًا، لوحة المفاتيح هي وسيلة الإدخال الرئيسية لديك. وكما هي الحال مع أي شيءٍ تقريبًا في حاسوبك، فهي قابلةٌ للتخصيص (وتستحق التخصيص).

أبسط تغييرٍ هو إعادة ربط المفاتيح. وهذا يتضمن عادةً بعض البرمجيات التي تستمع، وعندما يُضغط مفتاحٌ معيّن، فإنها تعترض ذلك الحدث وتستبدله بحدثٍ آخر مطابقٍ لمفتاحٍ مختلف. بعض الأمثلة:

  • إعادة ربط Caps Lock بـCtrl أو Escape. نحن (المدرّسون) نشجع هذه الإعدادات بشدة لأن Caps Lock له موضعٌ ملائمٌ جدًا لكنه نادر الاستخدام.
  • إعادة ربط PrtSc بزر التشغيل/الإيقاف المؤقت للموسيقى. معظم أنظمة التشغيل لديها مفتاح تشغيل/إيقاف مؤقت.
  • تبديل Ctrl ومفتاح Meta (Windows أو Command).

يمكنك أيضًا ربط المفاتيح بأوامر عشوائيةٍ من اختيارك. هذا مفيدٌ للمهام الشائعة التي تقوم بها. هنا، تستمع بعض البرمجيات لتركيبة مفاتيحٍ معيّنةٍ وتنفّذ سكربتًا ما كلما اكتُشف ذلك الحدث.

  • فتح طرفيةٍ أو نافذة متصفحٍ جديدة.
  • إدراج بعض النصوص المحددة، مثل عنوان بريدك الإلكتروني الطويل أو رقم معرّف MIT الخاص بك.
  • إسبات الحاسوب أو الشاشات.

هناك تعديلاتٌ أكثر تعقيدًا يمكنك تكوينها:

  • إعادة ربط تسلسلاتٍ من المفاتيح، مثل الضغط على shift خمس مراتٍ لتبديل حالة Caps Lock.
  • إعادة الربط عند النقر مقابل عند الإمساك، مثل أن يُعاد ربط مفتاح Caps Lock بـEsc إذا نقرته بسرعة، لكنه يُعاد ربطه بـCtrl إذا أمسكته واستخدمته كمعدِّلٍ.
  • جعل عمليات إعادة الربط خاصةً بلوحة مفاتيحٍ أو ببرنامجٍ معيّن.

بعض الموارد البرمجية للبدء في الموضوع:

  • macOS - karabiner-elements وskhd أو BetterTouchTool
  • لينكس - xmodmap أو Autokey
  • ويندوز - مدمجٌ في لوحة التحكم، أو AutoHotkey أو SharpKeys
  • QMK - إذا كانت لوحة مفاتيحك تدعم برنامجًا ثابتًا مخصصًا، يمكنك استخدام QMK لتكوين الجهاز العتادي نفسه بحيث تعمل عمليات إعادة الربط على أي جهازٍ تستخدم معه لوحة المفاتيح.

الخدمات الخلفية (Daemons)

ربما تكون على درايةٍ بالفعل بمفهوم الخدمات الخلفية، حتى لو بدت الكلمة جديدةً عليك. تمتلك معظم الحواسيب سلسلةً من العمليات التي تعمل دائمًا في الخلفية بدلًا من انتظار مستخدمٍ لإطلاقها والتفاعل معها. تسمى هذه العمليات بالخدمات الخلفية، والبرامج التي تعمل كخدماتٍ خلفيةٍ تنتهي غالبًا بحرف d للدلالة على ذلك. على سبيل المثال، sshd، وهي خدمة SSH الخلفية، هي البرنامج المسؤول عن الاستماع إلى طلبات SSH الواردة والتحقق من أن المستخدم البعيد يمتلك بيانات الاعتماد اللازمة لتسجيل الدخول.

في لينكس، يعد systemd (الخدمة الخلفية للنظام) الحل الأكثر شيوعًا لتشغيل وإعداد عمليات الخدمات الخلفية. يمكنك تشغيل systemctl status لسرد الخدمات الخلفية قيد التشغيل حاليًا. قد تبدو معظمها غير مألوفة لكنها مسؤولة عن أجزاءٍ أساسيةٍ من النظام مثل إدارة الشبكة، أو حل استعلامات DNS، أو عرض الواجهة الرسومية للنظام.

يمكن التفاعل مع Systemd باستخدام الأمر systemctl من أجل enable وdisable وstart وstop وrestart أو فحص status للخدمات (تلك هي أوامر systemctl).

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

# /etc/systemd/system/myapp.service
[Unit]
Description=My Custom App
After=network.target

[Service]
User=foo
Group=foo
WorkingDirectory=/home/foo/projects/mydaemon
ExecStart=/usr/bin/local/python3.7 app.py
Restart=on-failure

[Install]
WantedBy=multi-user.target

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

FUSE

تتكون أنظمة البرمجيات الحديثة عادةً من لبنات بناءٍ أصغر تُركّب معًا. يدعم نظام تشغيلك استخدام خلفيات أنظمة ملفاتٍ مختلفةٍ لأن هناك لغةً مشتركةً لعمليات نظام الملفات. على سبيل المثال، عندما تشغّل touch لإنشاء ملفٍ، ينفّذ touch استدعاء نظامٍ للنواة لإنشاء الملف، وتنفّذ النواة استدعاء نظام الملفات المناسب لإنشاء الملف المعني. ثمّة قيدٌ وهو أن أنظمة ملفات UNIX تُنفَّذ تقليديًا كوحدات نواةٍ (kernel modules) ولا يُسمح سوى للنواة بتنفيذ استدعاءات نظام الملفات.

يسمح FUSE (نظام الملفات في مساحة المستخدم) بتنفيذ أنظمة الملفات بواسطة برنامجٍ للمستخدم. يتيح FUSE للمستخدمين تشغيل كود مساحة المستخدم لاستدعاءات نظام الملفات ثم يربط الاستدعاءات اللازمة بواجهات النواة. في الممارسة العملية، هذا يعني أن المستخدمين يمكنهم تنفيذ وظائف عشوائيةٍ لاستدعاءات نظام الملفات.

على سبيل المثال، يمكن استخدام FUSE بحيث كلما نفّذت عمليةً في نظام ملفاتٍ افتراضي، تُمرَّر تلك العملية عبر SSH إلى جهازٍ بعيدٍ، وتُنفَّذ هناك، ويُعاد المخرج إليك. وبهذه الطريقة، يمكن للبرامج المحلية رؤية الملف كما لو كان في حاسوبك بينما هو في الحقيقة على خادمٍ بعيدٍ. هذا هو فعليًا ما يفعله sshfs.

بعض الأمثلة المثيرة للاهتمام لأنظمة ملفات FUSE:

  • sshfs - فتح الملفات/المجلدات البعيدة محليًا عبر اتصال SSH.
  • rclone - تثبيت خدمات التخزين السحابي مثل Dropbox وGDrive وAmazon S3 أو Google Cloud Storage وفتح البيانات محليًا.
  • gocryptfs - نظام تراكبٍ مشفّر. تُخزَّن الملفات مشفرةً، لكن بمجرد تثبيت نظام الملفات، تظهر كنصٍّ صريحٍ في نقطة التثبيت.
  • kbfs - نظام ملفاتٍ موزّعٍ بتشفيرٍ من طرفٍ إلى طرفٍ. يمكنك امتلاك مجلداتٍ خاصةٍ ومشتركةٍ وعامة.
  • borgbackup - تثبيت نسخك الاحتياطية المزالة التكرار (deduplicated) والمضغوطة والمشفرة لسهولة التصفح.

النسخ الاحتياطي (Backups)

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

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

حلول المزامنة ليست نسخًا احتياطيةً. على سبيل المثال، Dropbox/GDrive حلولٌ مريحةٌ، لكن عندما تُمسح البيانات أو تُفسد فإنها تنشر التغيير. وللسبب نفسه، فإن حلول نسخ المرايا (disk mirroring) مثل RAID ليست نسخًا احتياطيةً. إنها لا تساعد إذا حُذفت البيانات أو أُفسدت أو شُفّرت بواسطة برمجيات فدية (ransomware).

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

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

لشرحٍ أكثر تفصيلًا، راجع ملاحظات محاضرة 2019 عن النسخ الاحتياطي.

واجهات البرمجة (APIs)

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

معظم هذه الواجهات لها صيغةٌ مماثلة. إنها عناوين URL منظمة، غالبًا ما تتجذر في api.service.com، حيث تشير مسارات ومعاملات الاستعلام (query parameters) إلى البيانات التي تريد قراءتها أو الإجراء الذي تريد تنفيذه. بالنسبة لبيانات الطقس الأمريكية على سبيل المثال، للحصول على التوقعات لموقعٍ معيّن، تصدر طلب GET (باستخدام curl مثلًا) إلى https://api.weather.gov/points/42.3604,-71.094. يحتوي الاستجابة نفسها على مجموعةٍ من عناوين URL الأخرى التي تتيح لك الحصول على توقعاتٍ محددةٍ لتلك المنطقة. عادةً، تُنسَّق الاستجابات بصيغة JSON، والتي يمكنك بعدها تمريرها عبر أداةٍ مثل jq لتحويلها إلى ما يهمك.

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

IFTTT موقعٌ وخدمةٌ تتمحور حول فكرة واجهات البرمجة — فهو يوفر عمليات تكاملٍ مع الكثير من الخدمات، ويتيح لك ربط أحداثها بطرقٍ شبه عشوائية. ألقِ نظرةً عليه!

علمات سطر الأوامر/الأنماط الشائعة

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

  • معظم الأدوات تدعم نوعًا من علمة --help لعرض تعليمات استخدامٍ موجزةٍ للأداة.
  • العديد من الأدوات التي يمكنها إحداث تغييرٍ لا رجعة فيه تدعم فكرة "التشغيل التجريبي" (dry run) حيث تطبع فقط ما كانت ستفعله، دون تنفيذ التغيير فعليًا. وبالمثل، غالبًا ما تمتلك علمة "تفاعلية" تطلب منك تأكيد كل إجراءٍ مدمرٍ.
  • يمكنك عادةً استخدام --version أو -V لجعل البرنامج يطبع نسخته الخاصة (مفيدٌ للإبلاغ عن الأخطاء!).
  • تقريبًا كل الأدوات تمتلك علمة --verbose أو -v لإنتاج مخرجاتٍ أكثر تفصيلًا. يمكنك عادةً تضمين العلمة عدة مراتٍ (-vvv) للحصول على مخرجاتٍ أكثر تفصيلًا، وهو ما قد يكون مفيدًا لتصفية الأخطاء. وبالمثل، تمتلك العديد من الأدوات علمة --quiet لجعلها تطبع شيئًا فقط عند حدوث خطأٍ.
  • في العديد من الأدوات، تعني - في موضع اسم الملف "الإدخال القياسي" أو "الإخراج القياسي"، اعتمادًا على الوسيط.
  • الأدوات التي قد تكون مدمرةً ليست متكررةً (recursive) افتراضيًا عادةً، لكنها تدعم علمة "التكرار" (غالبًا -r) لجعلها تتكرر.
  • أحيانًا تريد تمرير شيءٍ يبدو كعلميةٍ كوسيطٍ عادي. على سبيل المثال، تخيل أنك تريد حذف ملفٍ يسمى -r. أو تريد تشغيل برنامجٍ واحدٍ "عبر" برنامجٍ آخر، مثل ssh machine foo، وتريد تمرير علمةٍ إلى البرنامج "الداخلي" (foo). الوسيط الخاص -- يجعل البرنامج يتوقف عن معالجة العلمات والخيارات (الأشياء التي تبدأ بـ-) فيما يلي، ما يتيح لك تمرير أشياءَ تبدو كعلماتٍ دون تفسيرها على هذا النحو: rm -- -r أو ssh machine --for-ssh -- foo --for-foo.

مديرو النوافذ

معظمكم معتادٌ على استخدام مدير نوافذٍ "سحب وإفلات" (drag and drop)، مثل ما يأتي مع ويندوز وmacOS وأوبونتو افتراضيًا. هناك نوافذٌ معلقةٌ على الشاشة، ويمكنك سحبها وإعادة تحجيمها وتراكبها فوق بعضها. لكن هذه مجرد نوعٍ واحدٍ من مديري النوافذ، وغالبًا ما يُشار إليه باسم مدير النوافذ "العائم". هناك أنواعٌ أخرى كثيرة، خاصةً على لينكس. البديل الشائع بشكلٍ خاص هو مدير النوافذ "المبلِّط" (tiling). في مدير النوافذ المبلِّط، لا تتداخل النوافذ أبدًا، بل تُرتَّب كبلاطاتٍ على شاشتك، نوعًا ما مثل اللوحات في tmux. مع مدير النوافذ المبلِّط، تُملأ الشاشة دائمًا بكل النوافذ المفتوحة، مرتّبةً وفقًا لنوعٍ من التخطيط. إذا كان لديك نافذةٌ واحدةٌ فقط، فإنها تشغل الشاشة كاملةً. إذا فتحت بعدها نافذةً أخرى، تنكمش النافذة الأصلية لإفساح مجالٍ لها (غالبًا مثل 2/3 و1/3). إذا فتحت ثالثةً، تنكمش النوافذ الأخرى مجددًا لاستيعاب النافذة الجديدة. وكما هو الحال مع لوحات tmux، يمكنك التنقل بين هذه النوافذ المبلَّطة بلوحة المفاتيح، ويمكنك إعادة تحجيمها وتحريكها، كل ذلك دون لمس الفأرة. إنها تستحق الاطلاع!

شبكات VPN

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

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

يجب أن تعلم أيضًا أنه هذه الأيام، الكثير من حركة المرور الخاصة بك، على الأقل من النوع الحساس، مشفرةٌ بالفعل عبر HTTPS أو TLS بشكلٍ عام. في هذه الحالة، لا يهم عادةً ما إذا كنت على شبكةٍ "سيئة" أم لا — سيتعلم مشغّل الشبكة فقط الخوادم التي تتحدث إليها، لكن لن يعرف شيئًا عن البيانات المتبادلة.

لاحظ أنني قلت "في أفضل الأحوال" أعلاه. ليس من غير المألوف أن يهيئ مزودو VPN برمجياتهم بشكلٍ خاطئٍ عن طريق الخطأ بحيث يكون التشفير ضعيفًا أو معطّلًا تمامًا. بعض مزودي VPN خبيثون (أو على الأقل انتهازيون)، وسيسجلون كل حركة المرور الخاصة بك، وربما يبيعون معلوماتٍ عنها لأطرافٍ ثالثة. اختيار مزود VPN سيئٍ غالبًا ما يكون أسوأ من عدم استخدام واحدٍ أصلًا.

في مأزقٍ ما، تدير MIT شبكة VPN لطلابها، لذا قد يستحق ذلك نظرةً. أيضًا، إذا كنت ستستخدم حلًا بنفسك، ألقِ نظرةً على WireGuard.

Markdown

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

ربما تكون قد رأيت Markdown بالفعل، أو على الأقل بعض أشكاله. تُستخدم وتُدعم مجموعات فرعيةٌ منه في كل مكانٍ تقريبًا، حتى لو لم يكن باسم Markdown. في جوهره، Markdown محاولةٌ لتقنين الطريقة التي غالبًا ما ينسّق بها الناس النصوص بالفعل عندما يكتبون مستندات نصٍ صريحٍ. يُضاف التشديد (مائل) بإحاطة كلمةٍ بـ*. ويُضاف التشديد القوي (عريض) باستخدام **. الأسطر التي تبدأ بـ# هي ترويساتٌ (وعدد # هو مستوى العنوان الفرعي). أي سطرٍ يبدأ بـ- هو عنصر قائمةٍ نقطية، وأي سطرٍ يبدأ برقمٍ + . هو عنصر قائمةٍ مرقمة. تُستخدم علامة الاقتباس الخلفي لإظهار الكلمات بخط كودٍ، ويمكن إدخال كتلة كودٍ بإزاحة سطرٍ بأربع مسافاتٍ أو بإحاطته بثلاث علامات اقتباسٍ خلفية:

```
code goes here
```

لإضافة رابطٍ، ضع النص للرابط بين قوسين مربعين، وعنوان URL بعده مباشرةً بين قوسين: [name](url). من السهل البدء مع Markdown، ويمكنك استخدامه في كل مكانٍ تقريبًا. في الواقع، ملاحظات هذه المحاضرة وجميع المحاضرات الأخرى مكتوبةٌ بـMarkdown، ويمكنك رؤية Markdown الخام هنا.

Hammerspoon (أتمتة سطح المكتب على macOS)

Hammerspoon إطار عملٍ لأتمتة سطح المكتب على macOS. يتيح لك كتابة سكربتات Lua ترتبط بوظائف نظام التشغيل، مما يتيح لك التفاعل مع لوحة المفاتيح/الفأرة والنوافذ والشاشات ونظام الملفات وأكثر من ذلك بكثير.

بعض الأمثلة على الأشياء التي يمكنك القيام بها مع Hammerspoon:

  • ربط اختصاراتٍ لتحريك النوافذ إلى مواقع محددة
  • إنشاء زرٍ في شريط القوائم يرتب النوافذ تلقائيًا بتخطيطٍ معيّن
  • كتم مكبر الصوت عند وصولك إلى المختبر (باكتشاف شبكة الواي فاي)
  • إظهار تحذيرٍ لك إذا أخذت عن طريق الخطأ مصدر طاقة صديقك

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

الموارد

الإقلاع وأقراص USB الحية (Live USBs)

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

أقراص USB الحية هي محركات أقراص USB محمولةٌ تحتوي على نظام تشغيل. يمكنك إنشاء واحدةٍ منها بتنزيل نظام تشغيلٍ (مثل توزيعة لينكس) وحرقه على محرك الأقراص المحمول. هذه العملية أكثر تعقيدًا قليلًا من مجرد نسخ ملف .iso إلى القرص. هناك أدواتٌ مثل UNetbootin لمساعدتك على إنشاء أقراص USB حية.

أقراص USB الحية مفيدةٌ لجميع أنواع الأغراض. من بين أشياء أخرى، إذا أتلفت تثبيت نظام التشغيل الحالي بحيث لم يعد يقلع، يمكنك استخدام قرص USB حيٍّ لاستعادة البيانات أو إصلاح نظام التشغيل.

Docker وVagrant والأجهزة الافتراضية والسحابة وOpenStack

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

Vagrant أداةٌ تتيح لك وصف تكوينات الأجهزة (نظام التشغيل والخدمات والحزم، إلخ) في كودٍ، ثم استحضار الأجهزة الافتراضية بأمرٍ بسيطٍ هو vagrant up. Docker مشابهٌ من حيث المفهوم لكنه يستخدم الحاويات بدلًا من ذلك.

يمكنك أيضًا استئجار أجهزةٍ افتراضيةٍ على السحابة، وهي طريقةٌ رائعةٌ للحصول على وصولٍ فوريٍّ إلى:

  • جهازٍ رخيصٍ يعمل دائمًا وله عنوان IP عام، يُستخدم لاستضافة الخدمات
  • جهازٍ ذي معالجاتٍ وذاكرةٍ ومساحة قرصٍ و/أو معالجات رسوميةٍ كثيرًا
  • أجهزةٍ أكثر بكثير مما تملك حق الوصول المادي إليه (يُدفع عادةً بالثانية، لذا إذا أردت قدرًا كبيرًا من الحوسبة لفترةٍ قصيرةٍ، فمن الممكن استئجار 1000 حاسوبٍ لبضع دقائق)

من الخدمات الشائعة Amazon AWS وGoogle Cloud وMicrosoft Azure وDigitalOcean.

إذا كنت عضوًا في MIT CSAIL، يمكنك الحصول على أجهزةٍ افتراضيةٍ مجانيةٍ لأغراض البحث عبر مثيل CSAIL OpenStack.

البرمجة بالدفاتر (Notebook programming)

يمكن أن تكون بيئات البرمجة بالدفاتر مفيدةً جدًا لأداء أنواعٍ معيّنةٍ من التطوير التفاعلي أو الاستكشافي. ربما تكون بيئة البرمجة بالدفاتر الأكثر شيوعًا اليوم هي Jupyter، للبايثون (وعدة لغاتٍ أخرى). Wolfram Mathematica بيئة برمجةٍ بالدفاتر أيضًا رائعةٌ للبرمجة الموجهة نحو الرياضيات.

GitHub

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

هناك طريقتان رئيسيتان يساهم بهما الناس في المشاريع على GitHub:

  • إنشاء قضيةٍ (issue). يمكن استخدام ذلك للإبلاغ عن أخطاءٍ أو طلب ميزةٍ جديدة. لا يتضمن أيٌّ منهما قراءة أو كتابة كودٍ، لذا يمكن أن يكون خفيفًا جدًا للقيام به. يمكن أن تكون تقارير الأخطاء عالية الجودة قيّمةً جدًا للمطورين. التعليق على المناقشات الموجودة يمكن أن يكون مفيدًا أيضًا.
  • المساهمة بكودٍ عبر طلب سحبٍ (pull request). هذا عمومًا أكثر تطلبًا من إنشاء قضيةٍ. يمكنك تفرّع مستودعًا على GitHub، واستنساخ تفرعك، وإنشاء فرعٍ جديدٍ، وإجراء بعض التغييرات (مثل إصلاح خطأٍ أو تنفيذ ميزةٍ)، ودفع الفرع، ثم إنشاء طلب سحبٍ. بعد ذلك، سيكون هناك عمومًا بعض التواصل المتبادل مع المشرفين على المشروع، والذين سيعطونك ملاحظاتٍ على التصحيح الخاص بك. أخيرًا، إذا سار كل شيءٍ على ما يرام، سيُدمج تصحيحك في المستودع العلوي. في كثيرٍ من الأحيان، تمتلك المشاريع الأكبر دليل المساهمة، وتصنف القضايا الملائمة للمبتدئين، وبعضها لديه حتى برامج إرشادٍ لمساعدة المساهمين لأول مرةٍ على التعرف على المشروع.