<?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/code/</link><atom:link href="https://clementgodbarge.com/hi/code/index.xml" rel="self" type="application/rss+xml"/><description>कोड</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>hi-in</language><image><url>https://clementgodbarge.com/media/icon_hu_64a6c3bec25b3d7b.png</url><title>कोड</title><link>https://clementgodbarge.com/hi/code/</link></image><item><title>tei-mcp</title><link>https://clementgodbarge.com/hi/code/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/code/tei-mcp/</guid><description>&lt;h2 id="tei-mcp-एआई-एजट-क-लए-tei-p5"&gt;tei-mcp: एआई एजेंटों के लिए TEI P5&lt;/h2&gt;
&lt;p&gt;tei-mcp एक ओपन-सोर्स
सर्वर है, जो एआई कोडिंग असिस्टेंटों को
विनिर्देश तक सीधी पहुँच देता है। प्रशिक्षण-डेटा की धुँधली याद के भरोसे रहने के बजाय – जिससे अक्सर देखने में ठीक-ठाक पर ग़लत मार्कअप निकलता है – एआई विनिर्देश से सीधे, उसी वक़्त पूछ सकता है।&lt;/p&gt;
&lt;h2 id="वशषतए"&gt;विशेषताएँ&lt;/h2&gt;
&lt;p&gt;सर्वर 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;पूरी TEI क्लास-श्रेणी में &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;TEI P5 के विरुद्ध &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;ODD अनुकूलन लोड करना&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;रेगुलर एक्सप्रेशन से सभी प्रकार की इकाइयों में &lt;strong&gt;खोज&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="इसटलशन"&gt;इंस्टॉलेशन&lt;/h2&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;uvx tei-mcp
&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;किसी भी MCP-संगत क्लाइंट (Claude, Cursor, Windsurf आदि) में जोड़िए:&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;स्रोत कोड और दस्तावेज़ीकरण
पर उपलब्ध हैं।&lt;/p&gt;</description></item><item><title>Multi-Saxon</title><link>https://clementgodbarge.com/hi/code/multi-saxon/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/code/multi-saxon/</guid><description>&lt;h2 id="multi-saxon-बड-tei-करपस-क-लए-समनतर-xslt-परससग"&gt;Multi-Saxon: बड़े TEI कॉर्पस के लिए समानांतर XSLT प्रोसेसिंग&lt;/h2&gt;
&lt;p&gt;XML प्रोसेसिंग के औज़ारों में एक बड़ी कमी रही है: LXML (Python की लोकप्रिय XML लाइब्रेरी) XSLT 2.0 और 3.0 के रूपांतरण नहीं सँभाल पाती। Multi-Saxon इसी कमी को पूरा करता है और ऐसे रूपांतरणों को समानांतर चलाने की सुविधा देता है। यह ख़ास तौर पर XML TEI दस्तावेज़ों के बड़े संग्रहों के लिए बनाया गया है, और समानांतर निष्पादन से प्रोसेसिंग का समय काफ़ी घटा देता है।&lt;/p&gt;
&lt;h2 id="मखय-वशषतए"&gt;मुख्य विशेषताएँ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;उन्नत XSLT समर्थन&lt;/strong&gt;: LXML की सीमा से आगे जाकर XSLT 2.0 और 3.0 के रूपांतरण&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;समानांतर प्रोसेसिंग&lt;/strong&gt;: बड़े दस्तावेज़-संग्रहों के रूपांतरण का समय समानांतरीकरण से नाटकीय रूप से कम&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TEI के लिए अनुकूलित&lt;/strong&gt;: विशेष रूप से Text Encoding Initiative (TEI) के XML दस्तावेज़ों के लिए बनाया गया&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;/ul&gt;
&lt;h2 id="multi-saxon-कस-समसय-क-हल-ह"&gt;Multi-Saxon किस समस्या का हल है&lt;/h2&gt;
&lt;p&gt;TEI के साथ काम करने वाले डिजिटल मानविकी के शोधकर्ता अक्सर दो बड़ी अड़चनों से जूझते हैं:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LXML (Python की आम XML प्रोसेसिंग लाइब्रेरी) केवल XSLT 1.0 का समर्थन करती है, जिससे XSLT 2.0/3.0 की उन्नत सुविधाओं का इस्तेमाल असंभव हो जाता है&lt;/li&gt;
&lt;li&gt;TEI दस्तावेज़ों का बड़ा कॉर्पस एक-एक करके प्रोसेस करने में इतना समय लग सकता है कि काम ही अव्यावहारिक हो जाए&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Multi-Saxon दोनों समस्याओं को हल करता है: यह Saxon की उन्नत XSLT क्षमताओं का लाभ उठाता है और प्रोसेसिंग को कई कोर पर बाँटकर प्रदर्शन में बड़ी बढ़त देता है।&lt;/p&gt;
&lt;h2 id="करयनवयन"&gt;कार्यान्वयन&lt;/h2&gt;
&lt;p&gt;Multi-Saxon Python को Java के Saxon प्रोसेसर से जोड़कर एक तेज़ रूपांतरण-पाइपलाइन बनाता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;मज़बूत XSLT 2.0/3.0 प्रोसेसिंग के लिए Java की Saxon लाइब्रेरी का उपयोग&lt;/li&gt;
&lt;li&gt;उपलब्ध CPU कोर पर रूपांतरण बाँटने के लिए मल्टीप्रोसेसिंग&lt;/li&gt;
&lt;li&gt;अधिकतम थ्रूपुट के लिए प्रोसेसर-पूल का कुशल प्रबंधन&lt;/li&gt;
&lt;li&gt;TEI दस्तावेज़ों की बैच-प्रोसेसिंग के लिए सीधा-सादा इंटरफ़ेस&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="उपयग-क-उदहरण"&gt;उपयोग का उदाहरण&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;multi_saxon&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MultiSaxon&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Initialize with your XSLT stylesheet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MultiSaxon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;transform.xsl&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Transform a single document&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;input.xml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;output.xml&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Transform an entire directory in parallel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform_directory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;input_dir&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;output_dir&amp;#34;&lt;/span&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;h2 id="डजटल-मनवक-क-लए-महतव"&gt;डिजिटल मानविकी के लिए महत्व&lt;/h2&gt;
&lt;p&gt;TEI दस्तावेज़ों के बड़े संग्रहों से जूझ रही डिजिटल मानविकी परियोजनाओं के लिए Multi-Saxon संभव बनाता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;पूरे कॉर्पस पर ऐसे जटिल रूपांतरण, जो LXML से असंभव होते&lt;/li&gt;
&lt;li&gt;प्रोसेसिंग समय में नाटकीय कमी (मल्टी-कोर सिस्टम पर अक्सर 5–10 गुना)&lt;/li&gt;
&lt;li&gt;XSLT 2.0/3.0 की उन्नत सुविधाओं से और परिष्कृत विश्लेषण&lt;/li&gt;
&lt;li&gt;पूरे दस्तावेज़-संग्रह को प्रोसेस करने का सरल वर्कफ़्लो&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;स्रोत कोड और दस्तावेज़ीकरण
पर उपलब्ध हैं।&lt;/p&gt;</description></item><item><title>persNamer</title><link>https://clementgodbarge.com/hi/code/persnamer/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/code/persnamer/</guid><description>&lt;h2 id="persnamer-tei-क-virtual-international-authority-file-स-जडन"&gt;persNamer: TEI को Virtual International Authority File से जोड़ना&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;persNamer एक विशेष Python उपकरण है, जो VIAF (Virtual International Authority File) के प्रामाणिक व्यक्ति-डेटा को TEI XML दस्तावेज़ों में जोड़ने का काम सरल बनाता है। VIAF पहचानकर्ता को तैयार TEI मार्कअप में बदलकर persNamer डिजिटल विद्वत्तापूर्ण संस्करणों के लिए संरचित व्यक्ति-प्रविष्टियाँ बनाने की हाथ की मेहनत काफ़ी घटा देता है।&lt;/p&gt;
&lt;h2 id="tei-म-परमणक-नम-सच-क-चनत"&gt;TEI में प्रामाणिक नाम-सूची की चुनौती&lt;/h2&gt;
&lt;p&gt;डिजिटल विद्वत्तापूर्ण संस्करणों में ऐतिहासिक व्यक्तियों की सटीक पहचान ज़रूरी होती है – मानकीकृत नाम और जन्म-मृत्यु की तिथियों समेत। पूरी परियोजना में प्रामाणिक नाम-सूची को एकरूप रखने के लिए चाहिए:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ऐतिहासिक पाठों में व्यक्तियों की पहचान&lt;/li&gt;
&lt;li&gt;उनके बारे में प्रामाणिक डेटा की खोज&lt;/li&gt;
&lt;li&gt;सही ढंग से गढ़ी गई TEI प्रविष्टियाँ&lt;/li&gt;
&lt;li&gt;पूरी परियोजना में एक जैसे संदर्भ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ये सारे चरण आम तौर पर हाथ से किए जाते हैं, समय खाते हैं और असंगति की गुंजाइश छोड़ते हैं।&lt;/p&gt;
&lt;h2 id="persnamer-कस-कम-करत-ह"&gt;persNamer कैसे काम करता है&lt;/h2&gt;
&lt;p&gt;persNamer इस वर्कफ़्लो को स्वचालित करता है:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;VIAF डेटा लाना&lt;/strong&gt;: VIAF पहचानकर्ता मिलने पर उपकरण HTTP कंटेंट नेगोशिएशन के ज़रिये RDF डेटा प्राप्त करता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;मुख्य जानकारी निकालना&lt;/strong&gt;: RDF को पार्स करके पसंदीदा नाम, जन्म-तिथि और मृत्यु-तिथि निकालता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TEI मार्कअप बनाना&lt;/strong&gt;: दो ज़रूरी XML खंड तैयार करता है:
&lt;ul&gt;
&lt;li&gt;एक &lt;strong&gt;प्रामाणिक नाम-सूची की प्रविष्टि&lt;/strong&gt; (&lt;code&gt;&amp;lt;person&amp;gt;&lt;/code&gt; एलिमेंट, जिसमें स्वतः बना &lt;code&gt;xml:id&lt;/code&gt;, &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;birth&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;death&amp;gt;&lt;/code&gt; और &lt;code&gt;&amp;lt;idno type=&amp;quot;VIAF&amp;quot;&amp;gt;&lt;/code&gt; होते हैं)&lt;/li&gt;
&lt;li&gt;एक अलग &lt;strong&gt;टिप्पणी-टैग&lt;/strong&gt; (&lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;, जिसका &lt;code&gt;ref&lt;/code&gt; एट्रिब्यूट नाम-सूची की प्रविष्टि की ओर संकेत करता है)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;इस दोहरे आउटपुट से संपादक एक केंद्रीय नाम-सूची रख सकते हैं और साथ ही अपने TEI पाठों में टिप्पणी-टैग आसानी से डाल सकते हैं।&lt;/p&gt;
&lt;h2 id="मखय-वशषतए"&gt;मुख्य विशेषताएँ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;मानक ID निर्माण&lt;/strong&gt;: &lt;code&gt;pers-[familyname]-[givenname initial]&lt;/code&gt; के प्रारूप में एकरूप XML ID बनाता है (जैसे &lt;code&gt;pers-deteligny-c&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RDF पार्सिंग&lt;/strong&gt;: &lt;code&gt;rdflib&lt;/code&gt; के ज़रिये विभिन्न RDF प्रॉपर्टियों (जैसे &lt;code&gt;rdfs:label&lt;/code&gt;, &lt;code&gt;schema:name&lt;/code&gt;, &lt;code&gt;viaf:mainHead&lt;/code&gt;) से जानकारी निकालता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;कमांड-लाइन इंटरफ़ेस&lt;/strong&gt;: बस एक VIAF नंबर देकर चलाइए – और कुछ ज़रूरी नहीं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;विस्तृत आउटपुट&lt;/strong&gt;: अंतिम XML के साथ प्रोसेसिंग का पूरा ब्योरा भी देता है&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="उपयग-क-उदहरण"&gt;उपयोग का उदाहरण&lt;/h2&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;python persNamer.py &lt;span class="m"&gt;314802260&lt;/span&gt;
&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-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-deteligny-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 deTé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&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&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;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;/person&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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&lt;/span&gt; &lt;span class="na"&gt;ref=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#pers-deteligny-c&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Charles deTéligny&lt;span class="nt"&gt;&amp;lt;/persName&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;persNamer ख़ास तौर पर इनके लिए उपयोगी है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;प्रामाणिक नाम-सूची की ज़रूरत वाले डिजिटल विद्वत्तापूर्ण संस्करण&lt;/li&gt;
&lt;li&gt;ऐतिहासिक व्यक्तियों से जुड़ी TEI एनकोडिंग परियोजनाएँ&lt;/li&gt;
&lt;li&gt;दस्तावेज़ों को प्रामाणिक अभिलेखों से जोड़ने वाली लिंक्ड डेटा पहलें&lt;/li&gt;
&lt;li&gt;बड़े TEI कॉर्पस में एकरूपता बनाए रखना&lt;/li&gt;
&lt;li&gt;डिजिटल मानविकी के पाठ्यक्रमों में प्रामाणिक नाम-सूची की अवधारणा पढ़ाना&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="करयनवयन"&gt;कार्यान्वयन&lt;/h2&gt;
&lt;p&gt;persNamer Python में लिखा गया है और इन पर निर्भर है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP अनुरोधों के लिए &lt;code&gt;requests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;RDF पार्सिंग के लिए &lt;code&gt;rdflib&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;XML सँभालने के लिए &lt;code&gt;lxml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;स्रोत कोड और दस्तावेज़ीकरण
पर उपलब्ध हैं।&lt;/p&gt;</description></item><item><title>ITA2 टेलीग्राफ़ एम्युलेटर</title><link>https://clementgodbarge.com/hi/code/baudot-emulator/</link><pubDate>Thu, 13 Feb 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/code/baudot-emulator/</guid><description>&lt;p&gt;यह ITA2 एम्युलेटर पढ़ाने का एक व्यावहारिक औज़ार है: एनकोडिंग जैसी अमूर्त अवधारणा को यह आँखों के सामने और हाथ में ले आता है। जब विद्यार्थी कोई पाठ टाइप करते हैं और उसे तुरंत छेदों के पैटर्न में बदलते देखते हैं, तो वे कंप्यूटिंग और दूरसंचार की कई बुनियादी बातें एक साथ सीख रहे होते हैं।&lt;/p&gt;
&lt;h2 id="शकषक-लभ"&gt;शैक्षिक लाभ&lt;/h2&gt;
&lt;p&gt;पहली बात, यह बाइनरी निरूपण दिखाता है – पाठ किस तरह 1 और 0 के पैटर्न में बदल जाता है। आम तौर पर हम इसे किताबी ढंग से पढ़ाते हैं, लेकिन जब टेप पर सचमुच छेद उभरते दिखते हैं, तो विद्यार्थी समझ पाते हैं कि कोई भौतिक व्यवस्था डिजिटल सूचना को कैसे धारण कर सकती है।&lt;/p&gt;
&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;LETTERS/FIGURES शिफ़्ट की युक्ति स्टेट मशीन की अवधारणा को सहज ढंग से सामने ले आती है। विद्यार्थी प्रयोग करते-करते ख़ुद खोज लेते हैं कि एक ही पैटर्न मौजूदा मोड के हिसाब से अलग-अलग वर्ण दर्शा सकता है। अवस्था-आधारित एनकोडिंग का यह हाथों-हाथ अनुभव उन्हें कंप्यूटिंग की और जटिल अवधारणाओं के लिए तैयार करता है।&lt;/p&gt;
&lt;h2 id="करयनवयन-क-बयर"&gt;कार्यान्वयन का ब्योरा&lt;/h2&gt;
&lt;p&gt;एम्युलेटर JavaScript और HTML/CSS में लिखा गया है, इसलिए इसे किसी भी वेब-पेज में आसानी से जोड़ा जा सकता है। कोड मॉड्यूलर है और अलग-अलग शैक्षिक संदर्भों के अनुसार ढाला जा सकता है।&lt;/p&gt;
&lt;p&gt;स्रोत कोड यहाँ मिलेगा, और एम्युलेटर को आप ख़ुद भी आज़मा सकते हैं:
।&lt;/p&gt;</description></item></channel></rss>