<?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/hi/category/%E0%A4%A1%E0%A4%BF%E0%A4%9C%E0%A4%BF%E0%A4%9F%E0%A4%B2-%E0%A4%AE%E0%A4%BE%E0%A4%A8%E0%A4%B5%E0%A4%BF%E0%A4%95%E0%A5%80/</link><atom:link href="https://clementgodbarge.com/hi/category/%E0%A4%A1%E0%A4%BF%E0%A4%9C%E0%A4%BF%E0%A4%9F%E0%A4%B2-%E0%A4%AE%E0%A4%BE%E0%A4%A8%E0%A4%B5%E0%A4%BF%E0%A4%95%E0%A5%80/index.xml" rel="self" type="application/rss+xml"/><description>डिजिटल मानविकी</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>hi-in</language><lastBuildDate>Mon, 07 Sep 2026 00:00:00 +0000</lastBuildDate><image><url>https://clementgodbarge.com/media/icon_hu_64a6c3bec25b3d7b.png</url><title>डिजिटल मानविकी</title><link>https://clementgodbarge.com/hi/category/%E0%A4%A1%E0%A4%BF%E0%A4%9C%E0%A4%BF%E0%A4%9F%E0%A4%B2-%E0%A4%AE%E0%A4%BE%E0%A4%A8%E0%A4%B5%E0%A4%BF%E0%A4%95%E0%A5%80/</link></image><item><title>persNamer 1.2: एक VIAF नंबर, नौ प्रामाणिक नाम-सूचियाँ</title><link>https://clementgodbarge.com/hi/post/persnamer-1-2/</link><pubDate>Mon, 07 Sep 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/post/persnamer-1-2/</guid><description>&lt;p&gt;शुरू में
एक छोटी-सी सुविधा भर था: VIAF नंबर दीजिए, TEI की एक &lt;code&gt;&amp;lt;person&amp;gt;&lt;/code&gt; प्रविष्टि पाइए, साथ में पाठ में लगाने के लिए &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt; टैग। बस इतना ही — और जो प्रविष्टि बनती थी वह भी दुबली-पतली: एक नाम, दो तिथियाँ, एक पहचानकर्ता। आज जारी हुआ संस्करण 1.2 अब भी वही एक काम करता है, पर इस बार जो प्रविष्टि निकलती है वह सँभालकर रखने लायक है।&lt;/p&gt;
&lt;h2 id="वयकत-परवषट-म-अब-कय-कय-ह"&gt;व्यक्ति-प्रविष्टि में अब क्या-क्या है&lt;/h2&gt;
&lt;p&gt;पहले नाम की बात। VIAF के क्लस्टर में हर सहयोगी पुस्तकालय अपना-अपना नाम-रूप लेकर आता है, और पुराना persNamer जो लेबल पहले हाथ लगे वही उठा लेता था। उससे वोल्तेयर (Voltaire) के बारे में पूछिए तो जवाब मिलता « فولتير، » — यानी नाम का अरबी रूप, और वह भी पीछे लटके अल्पविराम सहित — ऊपर से एक खाली &lt;code&gt;xml:id&lt;/code&gt; मुफ़्त में। अब औज़ार पूरे क्लस्टर में नाम-रूपों की गिनती करके वही रखता है जिस पर स्रोत रिकॉर्ड एकमत हों; बाक़ी रूप &lt;code&gt;&amp;lt;persName type=&amp;quot;variant&amp;quot;&amp;gt;&lt;/code&gt; बनकर पीछे-पीछे आते हैं, जो सबसे प्रचलित हो वह सबसे आगे। तिथियाँ मानकीकृत होकर (&lt;code&gt;1572-08-00&lt;/code&gt; से &lt;code&gt;1572-08&lt;/code&gt;) दो बार दर्ज होती हैं — एक बार पाठ के रूप में, एक बार &lt;code&gt;@when&lt;/code&gt; विशेषता में — और तिथियाँ समझने वाली कोई भी प्रोसेसिंग असल में इसी दूसरी को पढ़ती है। लिंग और विवरण भी आते हैं, जहाँ VIAF उन्हें देता है।&lt;/p&gt;
&lt;p&gt;और अब वह हिस्सा जिसका मुझे सबसे ज़्यादा इंतज़ार था। VIAF जिस-जिस पहचानकर्ता को इस व्यक्ति से जोड़ता है — चाहे &lt;code&gt;schema:sameAs&lt;/code&gt; के ज़रिए, चाहे अपने स्रोत-आईडी के ज़रिए — वह सब अब अलग-अलग &lt;code&gt;&amp;lt;idno&amp;gt;&lt;/code&gt; में दर्ज हो जाता है: BnF, GND, लाइब्रेरी ऑफ़ कांग्रेस, SUDOC, Wikidata, ISNI, BNE, LIBRIS, NDL। एक नंबर अंदर गया, नौ कैटलॉग बाहर आए। किसी व्यक्ति-सूची (personography) के लिए नामों की कोरी फ़ेहरिस्त और प्रामाणिक डेटा के जाल की एक गाँठ में जो फ़र्क़ है, वह यही है।&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;person&lt;/span&gt; &lt;span class="na"&gt;xml:id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;pers-teligny-c&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;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;lt;persName&amp;gt;&lt;/span&gt;Charles de Téligny&lt;span class="nt"&gt;&amp;lt;/persName&amp;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;lt;birth&lt;/span&gt; &lt;span class="na"&gt;when=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1535&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1535&lt;span class="nt"&gt;&amp;lt;/birth&amp;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;lt;death&lt;/span&gt; &lt;span class="na"&gt;when=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1572-08-24&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1572-08-24&lt;span class="nt"&gt;&amp;lt;/death&amp;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;lt;sex&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;M&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;M&lt;span class="nt"&gt;&amp;lt;/sex&amp;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;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;VIAF&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;314802260&lt;span class="nt"&gt;&amp;lt;/idno&amp;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;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;BNF&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;16133360&lt;span class="nt"&gt;&amp;lt;/idno&amp;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;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Wikidata&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Q1868249&lt;span class="nt"&gt;&amp;lt;/idno&amp;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;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ISNI&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;0000000071126808&lt;span class="nt"&gt;&amp;lt;/idno&amp;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;lt;/person&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="टकड-स-वयकत-सच-तक"&gt;टुकड़ों से व्यक्ति-सूची तक&lt;/h2&gt;
&lt;p&gt;एक आदमी के लिए टर्मिनल पर XML छाप लेना ठीक है; पर एक संपादित ग्रंथ में तो सैकड़ों लोग होते हैं। इसलिए persNamer अब एक साथ कई VIAF नंबर लेता है, दो अनुरोधों के बीच VIAF को साँस लेने की मोहलत देता है, जो कुछ लाया है उसे कैश में रख लेता है ताकि दोबारा न माँगना पड़े, और &lt;code&gt;--merge&lt;/code&gt; मिलते ही नई प्रविष्टियाँ सीधे मौजूदा TEI फ़ाइल के &lt;code&gt;&amp;lt;listPerson&amp;gt;&lt;/code&gt; में बिठा देता है। जो लोग फ़ाइल में पहले से हैं, वे अपने VIAF नंबर से पहचान लिए जाते हैं और उनका &lt;code&gt;xml:id&lt;/code&gt; ज्यों का त्यों रहता है; नए आईडी फ़ाइल से मिलाए जाते हैं और कहीं टकराव हो तो पीछे प्रत्यय (&lt;code&gt;-2&lt;/code&gt;, &lt;code&gt;-3&lt;/code&gt;) लग जाता है; अंत में पूरी फ़ाइल के इंडेंट फिर से सँवार दिए जाते हैं — हाँ, उससे पहले एक &lt;code&gt;.bak&lt;/code&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;persnamer --merge edition.xml &lt;span class="m"&gt;314802260&lt;/span&gt; &lt;span class="m"&gt;36925746&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;एक बदलाव ज़रूर ध्यान में रखिए: कुलनाम से पहले आने वाला कण (particle) अब डिफ़ॉल्ट रूप से आईडी में नहीं रहता, इसलिए Charles de Téligny पहले के &lt;code&gt;pers-deteligny-c&lt;/code&gt; की जगह अब &lt;code&gt;pers-teligny-c&lt;/code&gt; हो गया है। आपकी परियोजना पुराने रूप की आदी हो चुकी हो तो &lt;code&gt;--keep-particle&lt;/code&gt; उसे वापस ले आता है; और नामों के भरोसे रहना ही न हो तो &lt;code&gt;--id-format viaf&lt;/code&gt; से &lt;code&gt;pers-viaf-314802260&lt;/code&gt; मिल जाता है।&lt;/p&gt;
&lt;h2 id="सफ-सफई"&gt;साफ़-सफ़ाई&lt;/h2&gt;
&lt;p&gt;स्क्रिप्ट अब बाक़ायदा एक पैकेज बन गई है, अपनी &lt;code&gt;persnamer&lt;/code&gt; कमांड के साथ: &lt;code&gt;uv tool install&lt;/code&gt; या &lt;code&gt;pipx&lt;/code&gt; से एक लाइन में इंस्टॉल कीजिए, या बिना इंस्टॉल किए बस एक बार आज़माना हो तो &lt;code&gt;uvx&lt;/code&gt; से चला लीजिए। छब्बीस टेस्ट VIAF की रिकॉर्ड की हुई प्रतिक्रियाओं पर चलते हैं, इसलिए टेस्ट-सूट को नेटवर्क की कोई ज़रूरत नहीं; CI उन्हीं को Python 3.9 से 3.13 तक दोहराता है, और आउटपुट TEI P5 के मुताबिक़ जाँचा जाता है। लाइसेंस पहले की तरह Apache 2.0 ही है।&lt;/p&gt;
&lt;p&gt;जो यह अब भी नहीं बता सकता, वह है कि कोई कहाँ पैदा हुआ और रोज़ी-रोटी के लिए क्या करता था: VIAF के क्लस्टर RDF में न जगहें हैं, न पेशे। पर जिन BnF और GND रिकॉर्डों से यह जुड़ा है, उनमें दोनों हैं — और उनके नंबर अब आपके हाथ में हैं।&lt;/p&gt;
&lt;p&gt;कोड और दस्तावेज़
पर।&lt;/p&gt;</description></item><item><title>tei-mcp v0.3: स्रोत को दोबारा लिखे बिना TEI एनकोडिंग</title><link>https://clementgodbarge.com/hi/post/tei-mcp-span-locked/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/post/tei-mcp-span-locked/</guid><description>&lt;p&gt;जब मैंने
, तो मक़सद था एआई
असिस्टेंटों को TEI मार्कअप गढ़ने से रोकना। स्कीमा-आधार ने समस्या का एक हिस्सा
सुलझा दिया: 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 दस्तावेज़ बना सके जिसका
मूल पाठ स्रोत से भिन्न हो। यह अपरिवर्तनीय शर्त यांत्रिक है, व्यवहार पर टिकी नहीं।
आपको यह भरोसा नहीं करना कि मॉडल मतिभ्रम नहीं करेगा; आपको बस दो बाइट-स्ट्रिंगों के
बीच एक &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; और मूल सोलह में से
बाक़ी) मॉडल को &lt;em&gt;वैध&lt;/em&gt; TEI बनाने में मदद करते हैं। स्पैन-लॉक्ड कंपोज़िशन इसकी गारंटी
देती है कि उस 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;हर फ़ाइल का मूल नाम उसका दस्तावेज़ ID बन जाता है (&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/hi/post/cavriana-edition/</link><pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/post/cavriana-edition/</guid><description>&lt;p&gt;ज़्यादातर प्राथमिक स्रोत कभी प्रकाशित नहीं होते। इसका इलाज जिस मॉडल से करने की हम कोशिश करते हैं – अनुदान पर टिके डिजिटल संस्करण – वह इतना महँगा, इतना केंद्रीकृत और इतना नाज़ुक है कि बड़े पैमाने पर चल ही नहीं सकता। मैंने अभी-अभी
प्रकाशित की है, जिसमें बताया है कि मैं कावरियाना के पत्रों का आलोचनात्मक संस्करण अलग ढंग से क्यों बना रहा हूँ: डिजिटल रूप में प्राथमिक स्रोत, जो अपने-आप, धीरे-धीरे बढ़ते हैं – न्यूनतम इन्फ़्रास्ट्रक्चर के साथ, स्वचालित रखरखाव के साथ, सहयोग के लिए खुले, और इतने सस्ते कि अनुदान की ज़रूरत ही न पड़े। यह दरअसल एक ऐसी डिजिटल मानविकी के पक्ष में दलील है, जो संस्थागत सहारे के होने-न-होने की परवाह किए बिना चलती रहे।&lt;/p&gt;</description></item><item><title>tei-mcp: एआई एजेंटों के लिए TEI P5</title><link>https://clementgodbarge.com/hi/post/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/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; किसी भी एलिमेंट, क्लास, मैक्रो या मॉड्यूल को नाम से
खोजिए – बड़े-छोटे अक्षर का भेद किए बिना, और टाइपिंग की ग़लती पर सुझाव के साथ।&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 फ़ाइल को विनिर्देश पर परखिए: कंटेंट
मॉडल, एट्रिब्यूट के मान, बंद मान-सूचियाँ, संदर्भों की अखंडता और अप्रचलन की
चेतावनियाँ।&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/hi/post/baudot/</link><pubDate>Thu, 13 Feb 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/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 (International Telegraph Alphabet No. 2) कोड, जिसे बोदो-मरे कोड भी कहते हैं, 1920 के दशक में एमिल बोदो के 1870 के दशक वाले मूल टेलीग्राफ़ कोड को सुधारकर बनाया गया था। इन शुरुआती दूरसंचार प्रणालियों का बाद के कंप्यूटिंग विकास पर सीधा असर पड़ा:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;5-बिट एनकोडिंग योजना कैरेक्टर एनकोडिंग का एक आरंभिक उदाहरण थी&lt;/li&gt;
&lt;li&gt;वर्ण-समुच्चय की सीमा (5 बिट से केवल 32 संयोजन संभव) ने LETTERS/FIGURES शिफ़्ट की चतुर युक्ति को जन्म दिया&lt;/li&gt;
&lt;li&gt;यह प्रणाली टेलीटाइप मशीनों में बीसवीं सदी के काफ़ी अंदर तक इस्तेमाल होती रही&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="खल-खल-म-सटट-मशन"&gt;खेल-खेल में स्टेट मशीन&lt;/h2&gt;
&lt;p&gt;LETTERS/FIGURES शिफ़्ट की युक्ति स्टेट मशीन की अवधारणा को सहज ढंग से सामने ले आती है। विद्यार्थी प्रयोग करते-करते ख़ुद खोज लेते हैं कि एक ही पैटर्न मौजूदा मोड के हिसाब से अलग-अलग वर्ण दर्शा सकता है। अवस्था-आधारित एनकोडिंग का यह हाथों-हाथ अनुभव उन्हें कंप्यूटिंग की और जटिल अवधारणाओं के लिए तैयार करता है।
मिसाल के तौर पर, बिट-पैटर्न &lt;code&gt;00011&lt;/code&gt; का अर्थ है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LETTERS मोड में अक्षर &amp;lsquo;A&amp;rsquo;&lt;/li&gt;
&lt;li&gt;FIGURES मोड में अंक &amp;lsquo;1&amp;rsquo;
अवस्था के अनुसार बदलने वाली यह दोहरी व्याख्या कंप्यूटर के डेटा-संचालन की बुनियाद में है।&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 के 5-बिट कोड की तुलना 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>