<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>الإنسانيات الرقمية |</title><link>https://clementgodbarge.com/ar/category/%D8%A7%D9%84%D8%A7%D9%86%D8%B3%D8%A7%D9%86%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A%D8%A9/</link><atom:link href="https://clementgodbarge.com/ar/category/%D8%A7%D9%84%D8%A7%D9%86%D8%B3%D8%A7%D9%86%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A%D8%A9/index.xml" rel="self" type="application/rss+xml"/><description>الإنسانيات الرقمية</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>ar</language><lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><image><url>https://clementgodbarge.com/media/icon_hu_64a6c3bec25b3d7b.png</url><title>الإنسانيات الرقمية</title><link>https://clementgodbarge.com/ar/category/%D8%A7%D9%84%D8%A7%D9%86%D8%B3%D8%A7%D9%86%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A%D8%A9/</link></image><item><title>tei-mcp v0.3: ترميز TEI من غير أن يُمَسّ المصدر</title><link>https://clementgodbarge.com/ar/post/tei-mcp-span-locked/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ar/post/tei-mcp-span-locked/</guid><description>&lt;p&gt;حين
، كان المراد أن نكفّ مساعدي الذكاء الاصطناعي عن هلوسة ترميز TEI. وقد حلّ التأسيس على المخطط (schema grounding) شطرًا من المشكلة: فمع الوصول المباشر، عبر الأدوات، إلى مواصفة P5، لم يعد النموذج مضطرًّا إلى تخمين معنى عنصر أو السمات التي يقبلها، وصارت مخرجاته تجتاز التحقق.&lt;/p&gt;
&lt;p&gt;على أن للهلوسة في ترميز TEI وجهين، والمخطط لا يمسك إلا بأحدهما. فالتحقق وفق المواصفة يخبركم بأن &lt;em&gt;الترميز&lt;/em&gt; حسن التكوين، ولا يقول حرفًا عن &lt;em&gt;النص&lt;/em&gt; الذي يغلّفه ذلك الترميز. وفي النص نفسه تكمن الهلوسات الأشد ضررًا. والتركيب المقفل بالمدى، وهو أبرز ما في الإصدار v0.3، مصمم خصيصًا لدرئها.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;فهرس المحتويات&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#الهلوسة-التي-يعجز-المخطط-عن-التقاطها"&gt;الهلوسة التي يعجز المخطط عن التقاطها&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#التركيب-المقفل-بالمدى"&gt;التركيب المقفل بالمدى&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ما-هو-وما-ليس-هو"&gt;ما هو، وما ليس هو&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#لماذا-يهم-الأمر-خارج-tei-أيضا"&gt;لماذا يهم الأمر خارج TEI أيضًا&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#الحصول-على-التحديث"&gt;الحصول على التحديث&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="الهلوسة-التي-يعجز-المخطط-عن-التقاطها"&gt;الهلوسة التي يعجز المخطط عن التقاطها&lt;/h2&gt;
&lt;p&gt;اطلبوا من نموذج أن يرمّز رسالة فرنسية من القرن السادس عشر، فسيعود إليكم في الغالب بوثيقة TEI لا غبار عليها في الظاهر: الترويسة معبّأة، ووسوم &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt; في مواضعها الصحيحة، و&lt;code&gt;&amp;lt;dateline&amp;gt;&lt;/code&gt; حسن التكوين. مرّروها على &lt;code&gt;validate_document&lt;/code&gt; فتجتاز الاختبار.&lt;/p&gt;
&lt;p&gt;ثم قابلوا المتن بالمصدر.&lt;/p&gt;
&lt;p&gt;فإذا &lt;code&gt;mesme&lt;/code&gt; قد صارت &lt;code&gt;même&lt;/code&gt;، وفاصلة قد انتقلت من موضعها، و&lt;code&gt;luy&lt;/code&gt; قد حُدِّثت في صمت إلى &lt;code&gt;lui&lt;/code&gt;، وجملة عسُرت قراءتها في المخطوطة قد «صُحِّحت» إلى شيء أنظف. لم يُطلب شيء من هذه التغييرات، ولم يُنبَّه إلى شيء منها؛ فالوثيقة صحيحة وفق المخطط، وخاطئة في صمت.&lt;/p&gt;
&lt;p&gt;وفي سير العمل الأرشيفي — حيث يصير النص المرمَّز السجل الدائم الذي يعوّل عليه القراء اللاحقون وفهارس البحث والاستشهادات — هذا هو نمط الإخفاق الذي يُحسب له حساب. فالوسم المشوّه مزعج لا أكثر؛ أما الرسم المحدَّث الذي لا يفطن إليه أحد خمس سنين فتحريف.&lt;/p&gt;
&lt;h2 id="التركيب-المقفل-بالمدى"&gt;التركيب المقفل بالمدى&lt;/h2&gt;
&lt;p&gt;يأتي الإصدار الجديد (v0.3) بآلية لمنع الهلوسة تستهدف نمط الإخفاق هذا بعينه. والغاية من التصميم أن تصير هلوسة نص المتن مستحيلة بحكم البناء، لا مستبعدة فحسب.&lt;/p&gt;
&lt;p&gt;والفكرة بسيطة: &lt;strong&gt;النموذج لا يكتب نص المتن قط&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;وإنما يجري العمل على النحو الآتي:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;يستدعي النموذج &lt;code&gt;get_source(&amp;quot;letter_001&amp;quot;)&lt;/code&gt; فيتلقى النص المصدري الخام سلسلةً نصية غير قابلة للتغيير.&lt;/li&gt;
&lt;li&gt;يستدعي لكل وسم يريد تطبيقه &lt;code&gt;tag_span(&amp;quot;letter_001&amp;quot;, start, end, element_path, attrs)&lt;/code&gt; — فيسجّل عنصر TEI على مدى من المحارف فوق المصدر.&lt;/li&gt;
&lt;li&gt;فإذا فرغ استدعى &lt;code&gt;compose(&amp;quot;letter_001&amp;quot;)&lt;/code&gt;، فيُدرج الخادم الوسوم المسجّلة في تضاعيف النص الخام الأصلي، ويصيّر الـTEI النهائي، ثم يتحقق &lt;em&gt;بايتًا بايتًا&lt;/em&gt; من أن المحتوى النصي المسطّح للوثيقة المصيَّرة يساوي المصدر.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;فإن تطابقت البايتات عادت الوثيقة؛ وإن لم تتطابق — إن اقتضت وسوم النموذج على نحو ما متنًا يخالف المصدر ولو بمحرف واحد — رفع &lt;code&gt;compose()&lt;/code&gt; استثناءً بدل أن يعيد وثيقة فاسدة.&lt;/p&gt;
&lt;p&gt;ليس في سير العمل هذا مسار واحد يُخرج فيه النموذج وثيقة TEI يخالف متنها المصدر. فالثابت (invariant) ميكانيكي لا سلوكي: لستم مطالبين بأن تثقوا في أن النموذج لن يهلوس، بل بأن تثقوا في فحص &lt;code&gt;==&lt;/code&gt; بين سلسلتي بايتات.&lt;/p&gt;
&lt;h2 id="ما-هو-وما-ليس-هو"&gt;ما هو، وما ليس هو&lt;/h2&gt;
&lt;p&gt;التركيب المقفل بالمدى &lt;strong&gt;مكمّل&lt;/strong&gt; للتأسيس على المخطط، لا بديل منه. فأدوات التأسيس على المخطط (&lt;code&gt;validate_document&lt;/code&gt; و&lt;code&gt;lookup_element&lt;/code&gt; و&lt;code&gt;valid_children&lt;/code&gt; وسائر الأدوات الست عشرة الأصلية) تعين النموذج على إخراج TEI &lt;em&gt;صحيح&lt;/em&gt;؛ أما التركيب المقفل بالمدى فيضمن أن نص المتن داخل ذلك الـTEI &lt;em&gt;أمين&lt;/em&gt; للمصدر. وسير عمل الترميز الصالح للنشر لا بد أن يستوفي المحورين معًا، وقد صار كلاهما اليوم في عهدة خادم واحد.&lt;/p&gt;
&lt;p&gt;ثم إنه ليس عصًا سحرية تحل كل شيء. فـ&lt;code&gt;compose()&lt;/code&gt; لا يتحقق بعدُ من أن الوسوم المسجّلة جائزة وفق تخصيص ODD المحمَّل — وذلك عمل لاحق. والوسوم المسجّلة تقيم في ذاكرة العملية ولا تصمد بعد إعادة التشغيل. ولا بد أن تكون الملفات المصدرية مقروءة من حيث يعمل الخادم. وكل ذلك قابل للمعالجة، وليس فيه ما يقوّض الثابت الجوهري.&lt;/p&gt;
&lt;h2 id="لماذا-يهم-الأمر-خارج-tei-أيضا"&gt;لماذا يهم الأمر خارج TEI أيضًا&lt;/h2&gt;
&lt;p&gt;هذا النمط قابل للتعميم. فكلما طُلب من نموذج أن يعلّق على نص أو يحوّله أو يغلّفه — وكانت سلامة النص الأصلي أهم من براعة النموذج في «تحسينه» — صلح الحل نفسه: لا تسألوا النموذج أن يعيد كتابة النص، بل سلوه تعليمات فوق النص، ودعوا مركّبًا حتميًّا يطبّقها في ظل ثابت المساواة.&lt;/p&gt;
&lt;p&gt;وفي الطبعات الرقمية على وجه الخصوص، يغيّر هذا حدود ما يمكن أن يُعهد به إلى نموذج بضمير مرتاح. فيغدو الترميز بغتةً مهمة تُفوَّض من غير أن تضطروا إلى مقابلة كل مخرج بالمصدر بأيديكم: تسلك الآلة الطريق الممل، ويراجع المحقّق الترميز لا الرسم.&lt;/p&gt;
&lt;h2 id="الحصول-على-التحديث"&gt;الحصول على التحديث&lt;/h2&gt;
&lt;p&gt;إن كان tei-mcp مثبتًا لديكم من قبل:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;أو تثبيتًا من جديد:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ولاستعمال التركيب المقفل بالمدى، وجّهوا الخادم إلى مجلد يضم ملفات النصوص المصدرية الخام:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;TEI_MCP_SPAN_SOURCE_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/sources
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ويصير جذع اسم كل ملف معرّفًا لوثيقته (&lt;code&gt;letter_001.txt&lt;/code&gt; → &lt;code&gt;letter_001&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;الشيفرة المصدرية والتوثيق الكامل وملاحظات التصميم الخاصة بالثابت:
&lt;/p&gt;</description></item><item><title>طبعة رقمية من طراز آخر</title><link>https://clementgodbarge.com/ar/post/cavriana-edition/</link><pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ar/post/cavriana-edition/</guid><description>&lt;p&gt;أكثر المصادر الأولية لا يرى النور أبدًا. والنموذج الذي نعوّل عليه لتدارك هذا النقص، أعني الطبعات الرقمية الممولة بالمنح، أغلى وأشد مركزيةً وأوهى من أن يصلح على نطاق واسع. وقد نشرت لتوّي
أبيّن فيها لماذا أبني الطبعة النقدية لرسائل كافريانا (Cavriana) على نحو مختلف: مصادر أولية مرقمنة تنمو نموًّا عضويًّا، ببنية تحتية لا تكاد تُذكر، وصيانة مؤتمتة، وباب مفتوح للتعاون، وكلفة من الزهد بحيث تستغني عن المنح كليًّا. إنها مرافعة عن إنسانيات رقمية تمضي في طريقها سواء أساندتها المؤسسات أم خذلتها.&lt;/p&gt;</description></item><item><title>tei-mcp: مواصفة TEI P5 في متناول وكلاء الذكاء الاصطناعي</title><link>https://clementgodbarge.com/ar/post/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ar/post/tei-mcp/</guid><description>&lt;p&gt;من جرّب يومًا أن يكتب TEI XML بمساعد برمجة يعمل بالذكاء الاصطناعي، فلا بد أنه لاحظ كثرة عثراته: عناصر تظهر في غير موضعها، وسمات تُخترع اختراعًا، وقواعد تداخل تُطرح جانبًا. فللنموذج فكرة تقريبية عن هيئة TEI، أما معرفةٌ يُعتدّ بها بالمواصفة فلا.&lt;/p&gt;
&lt;p&gt;وهذا ما يعالجه tei-mcp: يفتح لوكلاء الذكاء الاصطناعي بابًا مباشرًا، عبر الأدوات، إلى إرشادات TEI P5.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;فهرس المحتويات&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#ما-mcp"&gt;ما MCP؟&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ما-الذي-يصنعه-tei-mcp"&gt;ما الذي يصنعه tei-mcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#لماذا-يهم-هذا-الأمر"&gt;لماذا يهم هذا الأمر&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#للبدء"&gt;للبدء&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="ما-mcp"&gt;ما MCP؟&lt;/h2&gt;
&lt;p&gt;
، أو MCP اختصارًا، معيار مفتوح يتيح لتطبيقات الذكاء الاصطناعي أن تتصل بمصادر بيانات وأدوات خارجية. تصوّروه منفذ USB للذكاء الاصطناعي: بروتوكول واحد يوصل أي عميل متوافق — Claude وCursor وWindsurf وسواها — بخدمات متخصصة.&lt;/p&gt;
&lt;p&gt;ويتيح خادم MCP &lt;em&gt;أدوات&lt;/em&gt; يستدعيها الذكاء الاصطناعي في أثناء المحادثة؛ فبدل أن يتكل النموذج على ما حفظه من بيانات التدريب، يستفتي مصدرًا حيًّا موثوقًا.&lt;/p&gt;
&lt;h2 id="ما-الذي-يصنعه-tei-mcp"&gt;ما الذي يصنعه tei-mcp&lt;/h2&gt;
&lt;p&gt;يحلّل tei-mcp مواصفة TEI P5 بصيغة ODD ويتيح 16 أداة تجيب عن أكثر ما يطرحه المحقّق أو المرمّز من أسئلة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ما هذا العنصر؟&lt;/strong&gt; ابحثوا عن أي عنصر أو صنف أو ماكرو أو وحدة (module) بالاسم، بمطابقة لا تفرّق بين حالتي الأحرف، مع اقتراحات لتصويب الأخطاء الإملائية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ما السمات التي يقبلها؟&lt;/strong&gt; حلّوا السمات عبر التسلسل الهرمي الكامل للأصناف — السمات المحلية أولًا، ثم الموروثة على ترتيبها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ما الذي يجوز إدراجه داخله؟&lt;/strong&gt; ابسطوا نماذج المحتوى في أشجار مهيكلة، أو اطلبوا قائمة مسطّحة بالعناصر الأبناء الصالحة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;أيجوز وضع هذا العنصر هنا؟&lt;/strong&gt; تحققوا من تداخل الأصل والفرع، أو تتبّعوا إمكانية البلوغ عبر التسلسل الهرمي الكامل للعناصر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;هل وثيقتي صحيحة؟&lt;/strong&gt; تحققوا من ملف TEI XML وفق المواصفة: نماذج المحتوى، وقيم السمات، وقوائم القيم المغلقة، وسلامة الإحالات، وتحذيرات الإهمال (deprecation).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;وماذا عن مخطط مشروعي؟&lt;/strong&gt; حمّلوا ملف تخصيص ODD ليُحصر كل ما سبق في المجموعة الفرعية من TEI الخاصة بمشروعكم.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="لماذا-يهم-هذا-الأمر"&gt;لماذا يهم هذا الأمر&lt;/h2&gt;
&lt;p&gt;الترميز بـTEI لا يستغني عن الرجوع الدائم إلى الإرشادات. فالمرمّز المتمرس يستبطن الأنماط الأكثر شيوعًا، لكنه يظل محتاجًا إلى مراجعة المواصفة عند العناصر الأقل ألفة أو نماذج المحتوى المعقدة. أما مساعدو الذكاء الاصطناعي، وليس لديهم شيء من هذه المعرفة المستبطنة، فالداء عندهم أشد: يهلوسون ترميزًا معقول المظهر باطل الجوهر.&lt;/p&gt;
&lt;p&gt;مع tei-mcp لا يعود النموذج بحاجة إلى التخمين؛ إذ يستطيع أن يلتمس الجواب في المواصفة قبل أن يخطّ قوسًا زاويًّا واحدًا. والحصيلة ترميز مطابق لـTEI P5 — أو لتخصيص ODD الخاص بمشروعكم.&lt;/p&gt;
&lt;h2 id="للبدء"&gt;للبدء&lt;/h2&gt;
&lt;p&gt;ثبّتوه من PyPI:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ثم أضيفوه إلى إعدادات عميل MCP لديكم:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tei&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tei-mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ينزّل الخادم مواصفة TEI عند أول تشغيل، ويعمل مع أي عميل متوافق مع MCP.&lt;/p&gt;
&lt;p&gt;الشيفرة المصدرية والتوثيق الكامل:
&lt;/p&gt;</description></item><item><title>تعليم النظام الثنائي بمحاكي التلغراف ITA2</title><link>https://clementgodbarge.com/ar/post/baudot/</link><pubDate>Thu, 13 Feb 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ar/post/baudot/</guid><description>&lt;h2 id="حين-يصير-المجرد-ملموسا"&gt;حين يصير المجرّد ملموسًا&lt;/h2&gt;
&lt;p&gt;هذا المحاكي لشفرة ITA2 وسيلةٌ تعليمية عملية بكل معنى الكلمة: إذ يجعل مفاهيم الترميز المجردة مرئيةً يتفاعل معها الطالب بيده، فيدخله من أوسع الأبواب إلى مفهوم محوري في الحوسبة والاتصالات، هو التمثيل الثنائي، أي كيف يستحيل النص أنماطًا من آحاد وأصفار.
نحن نعلّم هذا الأمر في الغالب تعليمًا نظريًّا؛ أما أن يرى الطالب الثقوب وهي تظهر على الشريط، فذلك ما يفهمه كيف تحمل الأنظمة المادية معلومات رقمية.
&lt;div class="baudot-emulator"&gt;
&lt;h2&gt;ITA2 (Baudot-Murray) Telegraph Type Emulator&lt;/h2&gt;
&lt;p&gt;Type a word in the input below to see its representation on the ITA2 tape.&lt;/p&gt;
&lt;div class="baudot-controls"&gt;
&lt;label for="baudot-input"&gt;Type word:&lt;/label&gt;
&lt;input id="baudot-input" class="text-input" size="50" maxlength="50" /&gt;
&lt;button type="button" id="baudot-ltr-button" class="control-button active"&gt;LTR&lt;/button&gt;
&lt;button type="button" id="baudot-fig-button" class="control-button"&gt;FIG&lt;/button&gt;
&lt;/div&gt;
&lt;div class="tape-outer-container"&gt;
&lt;div class="tape-container"&gt;
&lt;table&gt;
&lt;tbody id="baudot-tape"&gt;&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;style&gt;
.baudot-emulator {
--light-color: #f3f4f6;
--dark-color: #1f2937;
--light-alt-color: #e5e7eb;
--dark-alt-color: #374151;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;
max-width: 100%;
margin: 2rem 0;
padding: 0;
box-sizing: border-box;
}
.baudot-emulator {
--tape-bg: var(--light-color);
--hole-bg: var(--light-color);
--hole-border: #d1d5db;
--punched-bg: var(--dark-color);
--punched-border: var(--dark-color);
--sprocket-bg: var(--light-color);
--sprocket-border: #9ca3af;
--button-bg: var(--light-color);
--button-bg-active: #d1d5db;
--button-text: var(--dark-color);
--button-border: #d1d5db;
--input-bg: white;
--input-border: #d1d5db;
--input-text: var(--dark-color);
--line-number: #6b7280;
}
html.dark .baudot-emulator,
html[data-theme='dark'] .baudot-emulator,
body.dark .baudot-emulator {
--tape-bg: var(--dark-alt-color);
--hole-bg: var(--dark-alt-color);
--hole-border: #4b5563;
--punched-bg: var(--light-color);
--punched-border: var(--light-color);
--sprocket-bg: var(--dark-alt-color);
--sprocket-border: #9ca3af;
--button-bg: var(--dark-alt-color);
--button-bg-active: #4b5563;
--button-text: var(--light-color);
--button-border: #4b5563;
--input-bg: var(--dark-alt-color);
--input-border: #4b5563;
--input-text: var(--light-color);
--line-number: #9ca3af;
}
.baudot-controls {
margin-bottom: 1.5rem;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5rem;
}
.baudot-emulator .text-input {
flex: 1;
min-width: 200px;
padding: 0.5rem;
font-size: 1rem;
border: 1px solid var(--input-border);
border-radius: 4px;
background: var(--input-bg);
color: var(--input-text);
}
.baudot-emulator .control-button {
padding: 0.5rem 1rem;
background: var(--button-bg);
color: var(--button-text);
border: 1px solid var(--button-border);
border-radius: 4px;
cursor: pointer;
font-size: 0.9rem;
}
.baudot-emulator .control-button.active {
background: var(--button-bg-active);
font-weight: bold;
}
.tape-outer-container {
padding: 0;
margin-bottom: 1.5rem;
border-radius: 4px;
overflow: hidden;
}
.tape-container {
width: 100%;
overflow-x: auto;
background: var(--tape-bg);
padding: 1rem 0.5rem;
}
.baudot-emulator table {
border-collapse: collapse;
width: 100%;
table-layout: fixed;
border: none;
}
.baudot-emulator tr {
height: 24px;
border: none;
}
.baudot-emulator td {
border: none;
padding: 0;
}
.baudot-emulator .line-number {
width: 20px;
text-align: center;
color: var(--line-number);
font-size: 0.8rem;
padding: 0 8px 0 0;
font-weight: bold;
}
.baudot-emulator .cell {
position: relative;
width: 20px;
height: 20px;
}
.baudot-emulator .cell-content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 12px;
height: 12px;
border-radius: 50%;
background: var(--hole-bg);
border: 1px solid var(--hole-border);
}
.baudot-emulator .punched .cell-content {
background: var(--punched-bg);
border: 1px solid var(--punched-border);
}
.baudot-emulator .sprocket-hole {
position: absolute;
left: 50%;
top: 100%;
transform: translate(-50%, -50%);
width: 4px;
height: 4px;
border-radius: 50%;
background: var(--sprocket-bg);
border: 1px solid var(--sprocket-border);
z-index: 2;
}
&lt;/style&gt;
&lt;script&gt;
document.addEventListener('DOMContentLoaded', function() {
initBaudotEmulator();
});
function initBaudotEmulator() {
if (!document.getElementById('baudot-input')) return;
const textInput = document.getElementById('baudot-input');
const tape = document.getElementById('baudot-tape');
const ltrButton = document.getElementById('baudot-ltr-button');
const figButton = document.getElementById('baudot-fig-button');
const ita2Code = {
'A': '00011', 'B': '11001', 'C': '01110', 'D': '01001', 'E': '00001',
'F': '01101', 'G': '11010', 'H': '10100', 'I': '00110', 'J': '01011',
'K': '01111', 'L': '10010', 'M': '11100', 'N': '01100', 'O': '11000',
'P': '10110', 'Q': '10111', 'R': '01010', 'S': '00101', 'T': '10000',
'U': '00111', 'V': '11110', 'W': '10011', 'X': '11101', 'Y': '10101',
'Z': '10001',
'1': '00011', '2': '11001', '3': '01110', '4': '01001', '5': '00001',
'6': '01101', '7': '11010', '8': '10100', '9': '01011', '0': '11000',
'-': '00011', '?': '00100', ':': '01010', '(': '11000', ')': '11101',
'.': '01000', ',': '00010', "'": '10001', '=': '01111', '/': '10011',
'+': '11011', ' ': '00100',
'FIG': '11011', 'LTR': '11111',
};
function generateTape() {
let rows = '';
for (let row = 0; row &lt; 5; row++) {
rows += '&lt;tr&gt;';
rows += `&lt;td class="line-number"&gt;${row + 1}&lt;/td&gt;`;
for (let col = 0; col &lt; 50; col++) {
rows += `&lt;td id="baudot_${row}_${col}" class="cell unpunched"&gt;
&lt;div class="cell-content"&gt;&lt;/div&gt;
${row === 2 ? '&lt;div class="sprocket-hole"&gt;&lt;/div&gt;' : ''}
&lt;/td&gt;`;
}
rows += '&lt;/tr&gt;';
}
tape.innerHTML = rows;
}
function updateITA2Code(word) {
clearTape();
word = word.toUpperCase();
let tapePosition = 0;
let currentCharType = 'LTR';
ltrButton.classList.add('active');
figButton.classList.remove('active');
for (let i = 0; i &lt; word.length; i++) {
const char = word[i];
let code = ita2Code[char] || ita2Code[' '];
let requiredCharType = /[A-Z ]/.test(char) ? 'LTR' : 'FIG';
if (requiredCharType !== currentCharType) {
const shiftCode = requiredCharType === 'LTR' ? ita2Code['LTR'] : ita2Code['FIG'];
punchTape(shiftCode, tapePosition++);
currentCharType = requiredCharType;
ltrButton.classList.toggle('active', currentCharType === 'LTR');
figButton.classList.toggle('active', currentCharType === 'FIG');
}
punchTape(code, tapePosition++);
}
}
function punchTape(code, tapePosition) {
if (tapePosition &gt;= 50) return;
for (let bit = 0; bit &lt; 5; bit++) {
const cell = document.getElementById(`baudot_${bit}_${tapePosition}`);
if (cell) {
cell.className = code[bit] === '1' ? 'cell punched' : 'cell unpunched';
}
}
}
function clearTape() {
for (let i = 0; i &lt; 50; i++) {
for (let bit = 0; bit &lt; 5; bit++) {
const cell = document.getElementById(`baudot_${bit}_${i}`);
if (cell) {
cell.className = 'cell unpunched';
}
}
}
}
generateTape();
textInput.addEventListener('input', function() {
updateITA2Code(this.value);
});
ltrButton.addEventListener('click', function() {
this.classList.add('active');
figButton.classList.remove('active');
if (textInput.value) {
updateITA2Code(textInput.value);
}
});
figButton.addEventListener('click', function() {
this.classList.add('active');
ltrButton.classList.remove('active');
if (textInput.value) {
updateITA2Code(textInput.value);
}
});
if (textInput.value) {
updateITA2Code(textInput.value);
}
}
&lt;/script&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id="السياق-التاريخي-من-التلغراف-إلى-الحاسوب"&gt;السياق التاريخي: من التلغراف إلى الحاسوب&lt;/h2&gt;
&lt;p&gt;وُضعت شفرة ITA2 (الأبجدية التلغرافية الدولية رقم 2)، وتُعرف كذلك بشفرة بودو-موراي، في عشرينيات القرن العشرين تهذيبًا للشفرة التلغرافية الأصلية التي ابتكرها إميل بودو (Émile Baudot) في سبعينيات القرن التاسع عشر. وقد كان لهذه الأنظمة المبكرة أثرٌ مباشر في ما تلاها من تطور الحوسبة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;كان الترميز بخمسة بتات مثالًا مبكرًا على ترميز المحارف&lt;/li&gt;
&lt;li&gt;ولّد ضيق مجموعة المحارف (32 تركيبة لا غير بخمسة بتات) آليةً بارعة للتبديل بين وضع الحروف (LETTERS) ووضع الأرقام (FIGURES)&lt;/li&gt;
&lt;li&gt;ظل هذا النظام مستعملًا في آلات التلغراف الطابعة (teletype) حتى وقت متقدم من القرن العشرين&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="تعلم-آلات-الحالة-لعبا"&gt;تعلّم آلات الحالة لعبًا&lt;/h2&gt;
&lt;p&gt;تفتح آلية التبديل بين الحروف والأرقام باب آلات الحالة من تلقاء نفسها؛ فيكتشف الطلاب بالتجربة أن النمط الواحد قد يدل على محرفين مختلفين تبعًا للوضع الجاري. وهذه المعايشة العملية للترميز القائم على الحالة تُعدّهم لما هو أعقد من مفاهيم الحوسبة.
فنمط البتات &lt;code&gt;00011&lt;/code&gt;، مثلًا، يدل على:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;الحرف &amp;lsquo;A&amp;rsquo; في وضع الحروف (LETTERS)&lt;/li&gt;
&lt;li&gt;الرقم &amp;lsquo;1&amp;rsquo; في وضع الأرقام (FIGURES)
وهذا التأويل المزدوج المرهون بالحالة هو من صميم الطريقة التي تعالج بها الحواسيب البيانات.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="أنشطة-للصف"&gt;أنشطة للصف&lt;/h2&gt;
&lt;p&gt;إليكم بعض السبل لإدماج محاكي ITA2 في التدريس:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;تحدي فك الشفرة&lt;/strong&gt;: كلّفوا الطلاب بفك رسائل مشفّرة بأنماط ITA2&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الترميز الاقتصادي&lt;/strong&gt;: ناقشوا لماذا كانت آلية التبديل ضرورية لتوفير عرض النطاق&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تطور الترميز&lt;/strong&gt;: قارنوا شفرة ITA2 ذات الخمسة بتات بشفرة ASCII (7 بتات) وبـ Unicode&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الحوسبة المادية&lt;/strong&gt;: صِلوا هذا النظام التاريخي بالمتحكمات الدقيقة الحديثة من قبيل Arduino&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="مكاسب-في-إتاحة-التعلم"&gt;مكاسب في إتاحة التعلّم&lt;/h2&gt;
&lt;p&gt;وفوق طرافتها التاريخية، تُسعف هذه المقاربة الطلاب على اختلاف أساليبهم في التعلّم:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;فالمتعلّم البصري يرى الأنماط بعينه&lt;/li&gt;
&lt;li&gt;والمتعلّم الحركي يباشر عملية الترميز بيده&lt;/li&gt;
&lt;li&gt;وصاحب الذهن المفاهيمي يجد فيها مدخلًا إلى الجوانب الرياضية لنظرية المعلومات&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="تفاصيل-التنفيذ"&gt;تفاصيل التنفيذ&lt;/h2&gt;
&lt;p&gt;كُتب المحاكي بلغة JavaScript، ويسهل دمجه في أي منصة تعليمية على الويب. والشيفرة معيارية قابلة للتطويع بحسب سياق التدريس.
تجدون الشيفرة المصدرية ويمكنكم تجربة المحاكي بأنفسكم على:
&lt;/p&gt;</description></item></channel></rss>