الأحد، 26 يوليو 2026

نظام بيئي مفتوح لأجهزة القراءة الإلكترونية.

فري إنك هي مجموعة مفتوحة المصدر تعمل على تطوير البرمجيات والبرامج الثابتة والأجهزة الخاصة بقارئات الورق الإلكتروني. جميع مكوناتها متاحة للجميع، مما يتيح لأي شخص استخدامها وتطويرها وتخصيصها حسب رغبته.
تجربة قراءة إلكترونية مُصممة خصيصًا لأسلوب قراءتك.
برنامج ثابت مفتوح المصدر بالكامل، تم تطويره من قِبل المجتمع، لأجهزة قراءة الكتب الإلكترونية الاقتصادية، يتميز بمزيد من الميزات، وتحكم أكبر، وقاعدة مفتوحة يُمكن لأي شخص البناء عليها.
عرض ملفات EPUB 2 و3
يقوم الجهاز بتحليل ملفات EPUB 2 و3، وتطبيق CSS المدمج، وتنسيق الفصول بالخط والحجم والهوامش التي تختارها. يتم تخزين الصفحات مؤقتًا على بطاقة SD عند فتحها لأول مرة، مما يجعل إعادة فتحها في كل مرة شبه فورية.
خيارات تخصيص الخطوط
يتضمن الجهاز خطي Noto Serif وNoto Sans مدمجين، بالإضافة إلى أي خط يتم تحميله من بطاقة SD. يمكنك ضبط الحجم والتباعد والهوامش والوصلات والمحاذاة والتنعيم.
نقل ومزامنة عبر Wi-Fi
يشغل الجهاز خادم تحميل عبر Wi-Fi. يمكنك سحب ملفات EPUB من أي متصفح، وإرسالها مباشرة من Calibre، والاحتفاظ بمكانك على جميع الأجهزة باستخدام مزامنة KOReader.
إضافة إشارة مرجعية لأي فقرةاضغط مطولًا على زر التأكيد في أي مكان لإضافة إشارة مرجعية. يحتفظ كل موضع محفوظ برقم الصفحة ونسبة القراءة، مما يتيح لك العودة إلى سطر مفضل بنقرة واحدة.
قراءة مركزة
يُبرز بداية كل كلمة لتوجيه نظرك وتحديد سرعة قراءتك، مع تنعيم الحواف بتدرجات الرمادي وعرض مُجزأ لتصفح سريع وسلس للصفحات.
يدعم لغتك
تصميم كامل من اليمين إلى اليسار للغتين العبرية والعربية، بالإضافة إلى قوائم مترجمة بالإسبانية والفرنسية والألمانية والإيطالية والبرتغالية والروسية.


الشبكات والإنترنت: من المبادئ الأساسية

هل تساءلت يومًا عما يحدث عندما نرسل رسالة نصية أو نتصل أو نجري محادثة فيديو مع صديق أو زميل في قارة أخرى، ويصلنا رده في جزء من الثانية، كما لو كان في الغرفة نفسها؟ في الخفاء، تجري سلسلة من التحويلات غير المرئية: يُترجم صوتك أو الفيديو أو رسالتك إلى موجات راديوية تعبر الغرفة إلى جهاز توجيه الواي فاي الخاص بك، ثم إلى نبضات كهربائية في النحاس (أو ضوء، إذا كان لديك اتصال ألياف ضوئية)، ثم إلى ومضات ضوئية داخل خيط زجاجي أرق من شعرة يرقد في قاع المحيط، ليعود التسلسل بأكمله معكوسًا عند الطرف الآخر. أجد من المذهل أننا نستطيع التواصل فورًا مع أي شخص في العالم بمجرد إحداث اضطرابات مُتحكم بها ومنظمة في الكهرباء والضوء والراديو.
تمر الرسالة عبر معدات مملوكة لعشرات الشركات المستقلة في دول مختلفة. لم ينسق أي منها مع الآخر خصيصًا لنقل هذه الرسالة، ولا يعرف أي منها المسار الكامل الذي سلكته بياناتك، بل يُسلمونها ببساطة إلى أقرب مسار تالٍ. لا يوجد حاسوب مركزي يُدير حركة البيانات، ولا تملك أي شركة بمفردها البنية التحتية للإنترنت. ومع ذلك، فهو يعمل مليارات المرات كل ثانية، بكفاءة عالية لدرجة أننا لا نلاحظه إلا عندما تتقطع المكالمة أو يتوقف الفيديو مؤقتًا.تناولت المقالة السابقة قصة جهاز واحد، بدءًا من الإلكترونات في السيليكون وصولًا إلى البرامج التي تُشغّلها. أما هذه المقالة، فتتناول قصة الروابط بين هذه الأجهزة. وكما هو الحال مع طبقات الحوسبة، لم يُصمّم الإنترنت دفعة واحدة، بل تراكم على مدى عقود، ولا يُفهم كل بروتوكول إلا عند إدراك القيد الملموس الذي صُمّم لمعالجته. من السهل الخلط بين النتيجة النهائية وشيء مُصمّم وفقًا لمخطط نهائي، لأن الأعطال نادرة لدرجة تجعلنا نعتقد أن النظام كان دائمًا بهذه الموثوقية. في الواقع، كل آلية في هذه المقالة، مثل تبديل الحزم، وTCP، وDNS، وTLS، كانت بمثابة حل مؤقت لمشكلة محددة، طُبّقت بعد عقود من "عمل" الإنترنت، والضغط الذي أدى إلى ظهورها لم يتوقف: فهو الآن ناتج عن روابط مادية جديدة، وسيناريوهات أعطال جديدة، ومتطلبات جديدة من البرامج لم تكن موجودة عند تصميم الطبقة التي تحتها.
هدفي هو بناء هذا الفهم انطلاقًا من المبادئ الأساسية. في النهاية، ستصبح العديد من الألغاز اليومية لاستخدام الإنترنت منطقية بشكل بديهي في إطار نموذج ذهني واحد ومتماسك: كيف يحمي القفل الموجود في شريط العنوان تفاصيل بطاقة الائتمان الخاصة بك، وما إذا كانت الصفحة المعطلة هي خطأ الموقع الإلكتروني أو عطل من جانبك، ولماذا يمكن أن تبدو صفحة الويب بطيئة حتى على اتصال "جيجابت"، وكيف يتم إعادة توجيه بياناتك ديناميكيًا حول كابل بحري معطل على بعد نصف العالم.


الثلاثاء، 21 يوليو 2026

إرشادات واجهة سطر الأوامر

في ثمانينيات القرن الماضي، إذا أردتَ استخدام حاسوب شخصي لإنجاز مهمة ما، كان عليك معرفة ما تكتبه عند مواجهة C:\> أو ~$. كانت المساعدة تأتي على شكل كتيبات سميكة ذات غلاف حلزوني. كانت رسائل الخطأ مبهمة. لم يكن هناك موقع مثل Stack Overflow لإنقاذك. لكن إن كنت محظوظًا بما يكفي لامتلاك اتصال بالإنترنت، كان بإمكانك الحصول على المساعدة من Usenet، وهي مجتمع إنترنت مبكر يضم أشخاصًا آخرين كانوا محبطين مثلك تمامًا. كان بإمكانهم مساعدتك في حل مشكلتك، أو على الأقل تقديم بعض الدعم المعنوي والتضامن.
بعد أربعين عامًا، أصبحت الحواسيب متاحة للجميع بشكل أكبر، غالبًا على حساب تحكم المستخدم النهائي على مستوى النظام. في العديد من الأجهزة، لا يوجد وصول إلى سطر الأوامر على الإطلاق، ويعود ذلك جزئيًا إلى تعارضه مع مصالح الشركات التي تُفضّل الأنظمة المغلقة ومتاجر التطبيقات.
معظم الناس اليوم لا يعرفون ما هو سطر الأوامر، فضلًا عن سبب رغبتهم في استخدامه. كما قال رائد الحوسبة آلان كاي في مقابلة عام ٢٠١٧: "لأن الناس لا يفهمون ماهية الحوسبة، يعتقدون أنهم يمتلكونها في هواتفهم الذكية، وهذا الوهم لا يقل سوءًا عن وهم أن لعبة 'Guitar Hero' تُضاهي الغيتار الحقيقي".
ليس المقصود بـ"الغيتار الحقيقي" الذي يتحدث عنه كاي هو واجهة سطر الأوامر (CLI) - ليس تمامًا. كان يتحدث عن طرق برمجة الحواسيب التي تُوفر قوة واجهة سطر الأوامر وتتجاوز كتابة البرامج في ملفات نصية. هناك اعتقاد سائد بين أتباع كاي بضرورة التحرر من قيود البرمجة النصية التي نعيشها منذ عقود.
من المثير تخيل مستقبل نبرمج فيه الحواسيب بطريقة مختلفة تمامًا. حتى اليوم، لا تزال جداول البيانات هي لغة البرمجة الأكثر شيوعًا، وتنتشر حركة البرمجة بدون كتابة أكواد بسرعة في محاولة منها لتلبية الطلب المتزايد على المبرمجين الموهوبين.
ومع ذلك، لا تزال واجهة سطر الأوامر، بقيودها القديمة وخصائصها غير المفهومة، هي الجانب الأكثر تنوعًا في الحاسوب. يُتيح لك هذا النظام كشفَ خبايا النظام، والاطلاع على ما يجري فعلاً، والتفاعل معه بأسلوب إبداعي بمستوى من التطور والعمق لا تُوفّره واجهات المستخدم الرسومية. وهو مُتاح على معظم أجهزة الكمبيوتر المحمولة، لأي شخص يرغب في تعلّمه. يُمكن استخدامه بشكل تفاعلي، أو بشكل آلي. كما أنه لا يتغير بالسرعة نفسها التي تتغير بها أجزاء النظام الأخرى. تكمن القيمة الإبداعية في استقراره.
لذا، ما دام هذا النظام مُتاحًا، علينا أن نسعى إلى تعظيم فائدته وسهولة الوصول إليه.
لقد تغيّر الكثير في طريقة برمجة أجهزة الكمبيوتر منذ تلك الأيام الأولى. كان سطر الأوامر في الماضي مُصمّمًا ليُلائم الآلة في المقام الأول: لم يكن أكثر من مُحاكاة تفاعلية (REPL) فوق منصة برمجة نصية. ولكن مع ازدهار لغات البرمجة التفسيرية للأغراض العامة، تقلّص دور البرامج النصية. أصبح سطر الأوامر اليوم مُصمّمًا ليُلائم المستخدم في المقام الأول: واجهة مستخدم نصية تُتيح الوصول إلى جميع أنواع الأدوات والأنظمة والمنصات. في الماضي، كان المُحرّر موجودًا داخل الطرفية - أما اليوم، فالطرفية غالبًا ما تكون جزءًا من المُحرّر. وقد شهدنا انتشارًا واسعًا لأوامر الأدوات المتعددة الشبيهة بـ Git. أوامر داخل أوامر، وأوامر عالية المستوى تُنفّذ سير عمل كامل بدلًا من وظائف مُفردة.
انطلاقًا من فلسفة يونكس التقليدية، ورغبةً منا في تشجيع بيئة سطر أوامر أكثر سهولةً ومتعةً، واستنادًا إلى خبراتنا كمبرمجين، قررنا أن الوقت قد حان لإعادة النظر في أفضل الممارسات ومبادئ التصميم لبناء برامج سطر الأوامر.
فلتحيا سطر الأوامر!
تغطي هذه الوثيقة فلسفة التصميم العامة، بالإضافة إلى إرشادات عملية. وتركز بشكل أكبر على الإرشادات لأن فلسفتنا كممارسين لا تقوم على الإسهاب في التنظير. فنحن نؤمن بالتعلم من خلال الأمثلة، ولذلك وفرنا العديد منها.
لا يتناول هذا الدليل برامج الطرفية بملء الشاشة مثل إيماكس وفيم. برامج ملء الشاشة مشاريع متخصصة، ونادرًا ما يُتاح لنا تصميمها.
كما أن هذا الدليل لا يُقيّد بلغات البرمجة أو الأدوات المستخدمة بشكل عام.
لمن هذا الدليل؟





أصبح تطبيق Chatto الآن مفتوح المصدر!

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



نهاية العالم الزائفة Pseudpocalypse

إليكم فرضية: إذا نشرتَ كمية كبيرة من النصوص على الإنترنت بأسماء مستعارة، يُمكن ربط هذه الهويات باستخدام النص نفسه فقط. هذا ممكن (حسب ظني) بفضل "البصمة" الإحصائية التي تتركها في كل ما تكتبه.
تخيّل موقعًا إلكترونيًا يُمكنك من خلاله لصق نص جديد كتبه أحدهم للتو. في المقابل، يُوفّر الموقع روابط لجميع النصوص التي نشرها هذا الكاتب على الإطلاق، مهما كان اسمه. ليس مثاليًا، ولكنه جيد جدًا. على حد علمي، لا يوجد موقع كهذا - على الأقل ليس على الإنترنت العام. لكني أظن أنه ممكن وسيُصبح سهلًا قريبًا. سيُشكّل هذا بعض الصعوبة للتدوين بأسماء مستعارة.
ملاحظة: كتبتُ معظم هذه المقالة في منتصف عام 2025، وبعدها تركتها جانبًا لمدة عام كامل، مُنكبًّا على تعديل عبارات نظرية لن يقرأها أحد منكم.١
في هذه الأثناء، أصبحت منصات الذكاء الاصطناعي أكثر دقة في تخمين هوية المؤلفين من النصوص. (بمجرد قراءة أول ألف كلمة من مسودة هذا المنشور، يعرف كلود 4.8 أنني أنا). مع ذلك، أعتقد أننا في البداية فقط. أتوقع أن نرى كتّابًا مغمورين بشكل متزايد يتم التعرف عليهم من خلال أجزاء نصية صغيرة جدًا. أتوقع أن ينجح هذا حتى عندما يكتب الناس بأسلوب مختلف أو عن مواضيع غير ذات صلة. وأتوقع أن كل ما كتبته تحت أي اسم مستعار سيرتبط قريبًا باسمي الحقيقي.
التخمين الأقوى هو أننا نتجه نحو نوع من نهاية العالم للأسماء المستعارة. ربما، في المستقبل، إذا تفاعلت مع العالم من خلال أي قناة ذات نطاق ترددي عالٍ، فستكشف عن هويتك. لنفترض أنك ترتدي قناعًا في الأماكن العامة وتتحدث فقط عن طريق التلفظ بصوت خافت في جهاز تغيير الصوت. لا بأس، سيتم التعرف عليك من خلال شكل جسمك أو مشيتك أو بصمتك الكيميائية. أو لنفترض أنك لا تحب أن يتم تتبع سيارتك في كل مكان، لذلك تتوقف عن حمل الهاتف وتقنع المشرعين بطريقة ما بحظر لوحات الترخيص. لا مشكلة، ستظل سيارتك قابلة للتتبع من خلال خدوش صغيرة أو أصوات تنبيه مميزة من المحرك. أو لنفترض أنك لا ترغب في أن يتم تتبعك على الإنترنت، لذا قمت بتأمين ملف تعريف متصفحك، واشتريت فقط باستخدام عملة مونيرو، واتصلت عبر سلسلة من ثلاث شبكات VPN. لا بأس بذلك. ستظل هويتك قابلة للتحديد من خلال طريقة تحريك إصبعك أثناء تصفحك للصفحة. كلنا فريدون للغاية، وحدود المعلومات النظرية تقترب منا.

أصبح برنامج Microsoft Comic Chat الآن مفتوح المصدر

برنامج الدردشة الذي قدّم خط Comic Sans للعالم متوفر الآن على GitHub.
يسرّنا اليوم الإعلان عن إطلاق برنامج Microsoft Comic Chat مفتوح المصدر، وهو برنامج الدردشة الذي حوّل المحادثات تلقائيًا في بروتوكول IRC إلى لوحات قصصية مصورة بشخصيات ورسوم متحركة وفقاعات كلام وتعبيرات وجه، وساهم في تعريف العالم بخط Comic Sans المميز.
نعم، إنه Comic Sans نفسه. صمّمه في الأصل فنسنت كونار، مصمم الخطوط في مايكروسوفت، عام ١٩٩٤، ووجد Comic Sans مكانه الأمثل في Comic Chat، حيث انسجم أسلوبه غير الرسمي، الذي يُحاكي الكتابة اليدوية، تمامًا مع فقاعات الكلام في البرنامج.
بالنسبة للكثيرين، يُعدّ برنامج Comic Chat أثرًا حنينيًا من بدايات الإنترنت، حين انتقلنا من تقنيات مثل Telnet وUsenet وIRC إلى شبكة الويب المرئية التي نتمتع بها اليوم. أما بالنسبة لآخرين، فهو جزء أسطوري من تاريخ مايكروسوفت، لم يسمعوا عنه إلا في القصص والصور والنقاشات حول الطباعة. الآن، يُمكن للمطورين والمؤرخين وهواة الحوسبة القديمة، وكل من يُقدّر فكرةً غير تقليدية، استكشاف شفرة المصدر بأنفسهم.
رؤية مختلفة للتواصل عبر الإنترنت
اليوم، اعتدنا على تطبيقات المراسلة التي تتضمن تفاعلات، وملصقات، وصور متحركة، وصور رمزية، وفيديوهات، ومحتوى مُولّد بالذكاء الاصطناعي. لكن في منتصف التسعينيات، كانت محادثات الإنترنت عبارة عن صفحات نصية متحركة.
بدلاً من عرض الرسائل كنص عادي، قدّم تطبيق "كوميك تشات" المشاركين كشخصيات مُصوّرة. كانت المحادثات تجري في لوحات قصصية، مع فقاعات كلام، وتعبيرات، وإيماءات مُولّدة مما يكتبه المستخدمون. فإذا كتب أحدهم "أعجبني هذا"، قد تُشير الشخصية إلى نفسها. وإذا أوحى النص بالغضب، فقد تعبس الشخصية أو تعقد ذراعيها. كان التطبيق غريب الأطوار، وطموحًا، وفوضويًا أحيانًا، ومُتطلّعًا للمستقبل بشكلٍ مُدهش.
العديد من الأفكار التي نعتبرها اليوم بديهية في التواصل عبر الإنترنت، يُمكن أن تُعزى روحها إلى تجارب مثل "كوميك تشات".

السبت، 11 يوليو 2026

لا يمكنك اختبار الوحدات من أجل الذوق

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

يعرض التطبيق تقدمك على خرائط تفاعلية، مما يتيح للمستخدمين استكشاف أماكنهم بأنفسهم. لطالما رغبت في إثراء الخرائط بمعالم سياحية أو مواقع تاريخية مثيرة للاهتمام. بالنسبة للمسارات التي أعرفها، يمكنني إنشاء قوائم مماثلة بنفسي، لكن هذا لا ينطبق على المسارات التي تمتد عبر بلدان لا أعرفها. لذلك، بدأت البحث عن مصدر بيانات لنقاط الاهتمام التي يمكنني بناء نظام بيانات عليها. خلال هذه الرحلة، واجهت تحديات تتعلق بالذوق والتحيزات، وكافحت حالة هلوسة. ظننتُ في البداية أن الذكاء الاصطناعي سيكون الميزة الأساسية، لكنه انتهى به الأمر مجرد عنصر داعم إلى جانب الإشارات الأخرى وأساسيات معالجة البيانات.
مجموعة البيانات والأدوات#
كانت GeoNames نقطة انطلاق بديهية، فهي مصدر بيانات شامل يضم مواقع وفئات وروابط. يمكن تحميل مجموعة البيانات الكاملة وهي مرخصة بموجب رخصة المشاع الإبداعي. لذا، شرعتُ مع صديقي كلود في بناء مسار بيانات لتحويل البيانات الخام إلى نقاط اهتمام ذات صلة لمستخدمي In the Long Run.
استخدمنا لغة بايثون للبرمجة (لأنها تتمتع بدعم مكتبي ممتاز للمهام المطلوبة)، وخزنّا البيانات المُعالجة محليًا كملفات Apache Parquet، واستخدمنا DuckDB كطبقة استعلام.1 كانت هذه تجربتي الأولى مع كل من Parquet وDuckDB، لكنني وجدتُ سهولة استخدام كليهما، وقد عرّفني كلود على ميزاتهما خطوة بخطوة (وكان معظم العمل على DuckDB باستخدام لغة SQL التي أتقنها جيدًا). ​​عمومًا، أجد أن إضافة أداة أو اثنتين جديدتين أو تقنيتين إلى أي مشروع هي أفضل طريقة للتعلم. إذا كانت جميع التقنيات جديدة عليك، فسيكون تعلمها صعباً للغاية وقد يجعلك تتخلى عن المشروع تماماً. تُغيّر برامج الذكاء الاصطناعي هذه المعادلة إلى حد ما، ولكن حتى مع ذلك، أجد أن إلمامي بمعظم التقنيات المستخدمة يُتيح لي توجيه البرنامج بشكل أفضل واتخاذ قرارات مدروسة بدلاً من اتباعه بشكل أعمى.
قبل البدء بالتنفيذ، وضعتُ خطة مشروع مع كلود، مُحددين فيها الخطوات المختلفة لخط سير العمل ومهام تطوير الميزات. ومع تقدمنا، أنشأنا مواصفات/خطة لكل خطوة، بحيث يُمكننا تطويرها وتحسينها كلما اكتسبنا المزيد من المعرفة من العمل السابق. هذا يعني أيضًا أنه يُمكنني بدء جلسات جديدة مع الوكيل لكل مرحلة. إن تلخيص نتائج المراحل السابقة في سياق موجز وتعليمات للخطوة التالية يُؤدي إلى استجابات أسرع وأفضل (أجد أن السياقات الكبيرة تُقلل من جودة عمل الوكيل بسرعة).

القوائم المترابطة المتضمنة (Intrusive linked lists)

القوائم المتصلة المتداخلة (Intrusive linked lists) هي نوع من القوائم المتصلة التي تكون فيها روابط الربط مُضمَّنةً داخل البنية نفسها التي يجر...