<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Boris Orekhov</title>
    <description>The latest articles on DEV Community by Boris Orekhov (@nevmenandr).</description>
    <link>https://dev.to/nevmenandr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1744598%2F1c5fba73-a136-4422-b265-15c1fb254a94.png</url>
      <title>DEV Community: Boris Orekhov</title>
      <link>https://dev.to/nevmenandr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nevmenandr"/>
    <language>en</language>
    <item>
      <title>🧠 I Trained a Massive Word2Vec Model on 13 Billion Russian Fiction Words — Here’s What Happened</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Mon, 07 Sep 2026 06:14:00 +0000</pubDate>
      <link>https://dev.to/nevmenandr/i-trained-a-massive-word2vec-model-on-13-billion-russian-fiction-words-heres-what-happened-3m63</link>
      <guid>https://dev.to/nevmenandr/i-trained-a-massive-word2vec-model-on-13-billion-russian-fiction-words-heres-what-happened-3m63</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; I built a lemma‑based Word2Vec model (CBOW, 300d) on a huge corpus of Russian fiction (13B tokens → 7.3B after cleaning). You can load it with Gensim and explore semantic neighborhoods of words like &lt;em&gt;слово&lt;/em&gt;, &lt;em&gt;язык&lt;/em&gt;, &lt;em&gt;речь&lt;/em&gt;. The model captures literary semantics without stop words or grammar tags. Check it out on &lt;a href="https://huggingface.co/nevmenandr/w2v-russian-fiction" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why another word2vec for Russian?
&lt;/h2&gt;

&lt;p&gt;Most pre‑trained Russian word2vec models are trained on web crawls, news, or mixed corpora. That’s fine for general NLP, but &lt;strong&gt;fiction has its own semantic rules&lt;/strong&gt;. Poetic metaphors, archaic vocabulary, and author‑specific styles shift vector spaces.&lt;/p&gt;

&lt;p&gt;I wanted a model that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is trained &lt;strong&gt;exclusively on fiction&lt;/strong&gt; (from classic to modern authors).&lt;/li&gt;
&lt;li&gt;Uses &lt;strong&gt;lemmas&lt;/strong&gt; (no inflection noise).&lt;/li&gt;
&lt;li&gt;Is small enough to ship (197 MB for the main model, plus two 5.8 GB arrays).&lt;/li&gt;
&lt;li&gt;Lets researchers and developers play with &lt;strong&gt;literary semantics&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built one. And I’m sharing it under the MIT license.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Corpus by Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Raw words before preprocessing&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;13.98 B&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;After lemmatization &amp;amp; stop‑word removal&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7.36 B&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sentences (after cleaning short ones)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.36 B&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paragraphs processed&lt;/td&gt;
&lt;td&gt;~539 M&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Stop words:&lt;/strong&gt; removed using &lt;a href="https://github.com/nevmenandr/DigitalHumanitiesMinorFeatures/blob/master/stop_ru.txt" rel="noopener noreferrer"&gt;this list&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Lemmatizer:&lt;/strong&gt; Yandex Mystem.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Sentence splitter:&lt;/strong&gt; &lt;code&gt;razdel.sentenize&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;All lemmas are &lt;strong&gt;lowercase&lt;/strong&gt;, dictionary form, no part‑of‑speech tags (saves time &amp;amp; space).&lt;/p&gt;


&lt;h2&gt;
  
  
  Training Details
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;gensim&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gensim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;word2vec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LineSentence&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;splitted_lemmed_lines.txt&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gensim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Word2Vec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;vector_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;min_count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;sg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;          &lt;span class="c1"&gt;# CBOW (faster, good for large corpora)
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cbow_300_10.model&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CBOW&lt;/strong&gt;, not skip‑gram – slightly better syntactic capture for fiction.&lt;/li&gt;
&lt;li&gt;Window size 10 – balances local and long‑range dependencies.&lt;/li&gt;
&lt;li&gt;Min count 2 – very rare words become noise; keep it clean.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The training script is plain Gensim – no weird dependencies. You can retrain or fine‑tune if you have more data.&lt;/p&gt;


&lt;h2&gt;
  
  
  What’s Inside the Download?
&lt;/h2&gt;

&lt;p&gt;When you clone from Hugging Face, you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cbow_300_10.model&lt;/code&gt; (197 MB) – the main Gensim model object
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cbow_300_10.model.syn1neg.npy&lt;/code&gt; (5.8 GB) – negative sampling weights
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cbow_300_10.model.wv.vectors.npy&lt;/code&gt; (5.8 GB) – the actual word vectors
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;README.md&lt;/code&gt;, &lt;code&gt;tst.py&lt;/code&gt; – docs and a test script&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yes, the two &lt;code&gt;.npy&lt;/code&gt; files are large. But you can load the model without loading both if you only need similarities (Gensim does lazy loading). Or use &lt;code&gt;model.wv&lt;/code&gt; directly.&lt;/p&gt;


&lt;h2&gt;
  
  
  Quick Start – Get Similar Words
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;gensim&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gensim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Word2Vec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cbow_300_10.model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Look at closest neighbours of "слово" (word)
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;most_similar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;слово&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;topn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;фраза: 0.7941
словечко: 0.6602
слог: 0.6322
реплика: 0.6015
словосочетание: 0.5928
изречение: 0.5818
высказывание: 0.5800
глагол: 0.5735
эпитет: 0.5615
сентенция: 0.5556
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how &lt;em&gt;epithet&lt;/em&gt; and &lt;em&gt;verb&lt;/em&gt; pop up – the model clearly learned linguistic meta‑concepts from fiction.&lt;/p&gt;

&lt;p&gt;Now try &lt;code&gt;язык&lt;/code&gt; (language / tongue):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;наречие (adverb) 0.6684
диалект 0.6095
латынь 0.5892
язычок (little tongue) 0.5698
алфавит 0.5039
грамматика 0.5027
суахили 0.4977
идиома 0.4952
иврит 0.4950
произношение 0.4927
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;code&gt;речь&lt;/code&gt; (speech):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;монолог 0.6400
спич 0.5914
тирада 0.5900
фраза 0.5652
диалог 0.5477
проповедь 0.5334
слово 0.5217
разглагольствование 0.5193
филиппика 0.5184
декламация 0.5147
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Cool Things You Can Do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Author style analysis&lt;/strong&gt; – Compare vector spaces of Tolstoy vs. modern authors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic change over time&lt;/strong&gt; – Not directly, but you can train separate models for 19th and 20th century subsets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Genre classification&lt;/strong&gt; – Fiction vs. non‑fiction (though this model is pure fiction, so it will be biased).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creative writing tools&lt;/strong&gt; – Find thematic associations, generate metaphor candidates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Educational&lt;/strong&gt; – Show how word geometry reflects literary concepts.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Known Limitations (Read Before You Complain)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No POS tags&lt;/strong&gt; – All lemmas are ambiguous (e.g., &lt;code&gt;стекло&lt;/code&gt; could be noun “glass” or past tense of “to flow”). That’s a conscious trade‑off for performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only lemmas&lt;/strong&gt; – No inflected forms. Want &lt;code&gt;слова&lt;/code&gt;, &lt;code&gt;слову&lt;/code&gt;, &lt;code&gt;словом&lt;/code&gt;? You won’t find them; use the lemma &lt;code&gt;слово&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fiction bias&lt;/strong&gt; – This model will perform poorly on legal documents, tweets, or technical manuals. But that’s the point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large memory footprint&lt;/strong&gt; – The full model takes ~12 GB on disk. However, you can load just the vectors with &lt;code&gt;KeyedVectors.load()&lt;/code&gt; to save RAM.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Comparison with Other Russian Word2Vec Models
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Corpus&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;POS&lt;/th&gt;
&lt;th&gt;Availability&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This one&lt;/td&gt;
&lt;td&gt;Fiction, 13B words&lt;/td&gt;
&lt;td&gt;300d&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;MIT, HF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://huggingface.co/nevmenandr/w2v-russian-tolstoy" rel="noopener noreferrer"&gt;w2v-russian-tolstoy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Only Tolstoy&lt;/td&gt;
&lt;td&gt;300d&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;MIT, HF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://huggingface.co/dhcloud/w2v-russian-19c-fiction-lemmas" rel="noopener noreferrer"&gt;w2v-russian-19c-fiction-lemmas&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;19th century prose&lt;/td&gt;
&lt;td&gt;300d&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;HF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RusVectores (web+news)&lt;/td&gt;
&lt;td&gt;Mixed, ~20B&lt;/td&gt;
&lt;td&gt;300d&lt;/td&gt;
&lt;td&gt;Yes (tags)&lt;/td&gt;
&lt;td&gt;CC BY‑SA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you need a &lt;strong&gt;general‑purpose&lt;/strong&gt; model with grammatical info, go for RusVectores. If you work with &lt;strong&gt;literary analysis&lt;/strong&gt;, this one is your friend.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why You Should Star / Share / Fork
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;Ready to use&lt;/strong&gt; – &lt;code&gt;pip install gensim&lt;/code&gt; and &lt;code&gt;model = gensim.models.Word2Vec.load(...)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🧪 &lt;strong&gt;Reproducible&lt;/strong&gt; – Full preprocessing script included in the HF repo.&lt;/li&gt;
&lt;li&gt;📚 &lt;strong&gt;Academically referenced&lt;/strong&gt; – Several papers already used it (see README).&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Lightweight core&lt;/strong&gt; – The 197 MB model loads in seconds; the big &lt;code&gt;.npy&lt;/code&gt; files are optional.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Get the Model
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Hugging Face:&lt;/strong&gt; &lt;a href="https://huggingface.co/nevmenandr/w2v-russian-fiction" rel="noopener noreferrer"&gt;nevmenandr/w2v-russian-fiction&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT  &lt;/p&gt;

&lt;p&gt;Clone with &lt;code&gt;git lfs&lt;/code&gt; or download via &lt;code&gt;huggingface_hub&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;huggingface_hub&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;snapshot_download&lt;/span&gt;
&lt;span class="nf"&gt;snapshot_download&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;repo_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nevmenandr/w2v-russian-fiction&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;local_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./w2v_model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What I’d Love to See in the Comments
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🧩 &lt;strong&gt;Use cases&lt;/strong&gt; – Are you doing computational literary studies? Building a Russian story generator? Tell me!&lt;/li&gt;
&lt;li&gt;🐛 &lt;strong&gt;Issues / improvements&lt;/strong&gt; – Did you find a bug? A word that should be a lemma but isn’t?&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Benchmarks&lt;/strong&gt; – How does it perform on your task compared to other models?&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Funny analogies&lt;/strong&gt; – Run &lt;code&gt;model.most_similar(positive=['царь', 'женщина'], negative=['мужчина'])&lt;/code&gt; and share the result. (Hint: it’s not “царица” – fiction is weird.)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Code Snippet – Try It Yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;gensim&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gensim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Word2Vec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cbow_300_10.model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Find words similar to "поэт" (poet)
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Neighbors of поэт:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;most_similar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;поэт&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;topn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Analogy: Москва : Россия = Париж : ?
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;most_similar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;positive&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Франция&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Москва&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;negative&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Россия&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;topn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Москва / Россия ≈ Париж / &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (score &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it. Play with it. Break it. Then tell me in the comments what you found.  &lt;/p&gt;

&lt;p&gt;Happy vector hunting! 🧙‍♂️&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. The model is called &lt;code&gt;cbow_300_10.model&lt;/code&gt; – old‑school name, but it works like a charm.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>word2vec</category>
      <category>russian</category>
      <category>nlp</category>
      <category>gensim</category>
    </item>
    <item>
      <title>How I Ended Up Publishing My Coding Journey – and Why CoderLegion Made It Worthwhile</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Tue, 01 Sep 2026 22:50:00 +0000</pubDate>
      <link>https://dev.to/nevmenandr/how-i-ended-up-publishing-my-coding-journey-and-why-coderlegion-made-it-worthwhile-3ood</link>
      <guid>https://dev.to/nevmenandr/how-i-ended-up-publishing-my-coding-journey-and-why-coderlegion-made-it-worthwhile-3ood</guid>
      <description>&lt;p&gt;A few weeks ago, I received an unexpected message.&lt;/p&gt;

&lt;p&gt;It came from the CoderLegion community team. They'd noticed my engagement on the site and asked if I'd be interested in sharing my programming journey as part of their "Developer Stories" series.&lt;/p&gt;

&lt;p&gt;My first reaction? Skepticism, if I'm honest. I've been around long enough to know how these things usually go. Platforms reach out, they promise visibility, they ask for content, and then... crickets. Your carefully written piece gets buried under an avalanche of "10 JavaScript Tips You Won't Believe" and disappears into the void.&lt;/p&gt;

&lt;p&gt;But something about their approach felt different. They were direct, genuine, and – most importantly – they'd actually read what I'd written before reaching out. That's rarer than you'd think.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;"But I'm not a real developer"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I felt I should be upfront. I replied that I'm not a professional software engineer – I'm a researcher, a scientist, a humanities guy who learned to code out of necessity. My code has never been production-grade, I've cut more corners than I care to admit, and my early work still makes me wince in hindsight.&lt;/p&gt;

&lt;p&gt;Would that kind of story still be of interest?&lt;/p&gt;

&lt;p&gt;Their response was immediate and unequivocal: "Absolutely."&lt;/p&gt;

&lt;p&gt;No gatekeeping. No "well, let's see if it fits our editorial direction." Just a straightforward recognition that a researcher's pragmatic, messy, real-world coding journey might actually be &lt;em&gt;more&lt;/em&gt; relatable than another polished success story from a FAANG engineer.&lt;/p&gt;

&lt;p&gt;That was the moment I decided to say yes.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;From philology to Python – and everything in between&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I wrote the piece over a couple of days. It wasn't difficult – the memories came flooding back. PHP without templates, Perl without &lt;code&gt;use strict;&lt;/code&gt;, Python without a debugger, all held together with hope and &lt;code&gt;echo&lt;/code&gt; statements. My "server" was shared hosting that ran CGI scripts, and my "database" was a handful of MySQL tables that today I'd replace with a JSON file.&lt;/p&gt;

&lt;p&gt;The story wrote itself, really.&lt;/p&gt;

&lt;p&gt;When I sent it over, I braced myself for edits, rewrites, or the dreaded "this is great, but could you make it more technical?" None of that happened. &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Why CoderLegion stands out&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that the piece is live, I want to share a few thoughts about the platform itself – because it genuinely deserves attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. It's a small community, and that's a good thing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Platforms like DEV.to have become enormous. That's great for reach, but it also means your carefully crafted post competes with thousands of others. Unless you're writing about the latest JavaScript framework or AI trend, you're shouting into the void.&lt;/p&gt;

&lt;p&gt;On CoderLegion, the community is smaller, but the engagement feels more genuine. My posts there get modest view counts – but they're still &lt;em&gt;several times higher&lt;/em&gt; than on DEV.to. People actually read, reflect, and respond. It reminds me of the early internet, where community meant something.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. They treat contributors like humans, not content factories&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the big one. The person who reached out didn't just send a template email and move on. They read my work, understood its value, and engaged in a thoughtful, personal conversation throughout the entire process. The editorial support was light-touch but effective – they helped my story shine without making it theirs.&lt;/p&gt;

&lt;p&gt;Too many platforms treat contributors as interchangeable content providers. CoderLegion doesn't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. They allow republishing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This might seem like a small thing, but it matters. CoderLegion permits authors to share content that's already appeared elsewhere. I haven't taken advantage of it yet, but knowing that I &lt;em&gt;can&lt;/em&gt; – without being locked into exclusivity – lowers the barrier to participation significantly. It's a flexible, author-friendly policy that respects your time and effort.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What I'd tell other developers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're considering sharing your journey, here's my advice: don't overthink it.&lt;/p&gt;

&lt;p&gt;You don't need to be a rockstar developer. You don't need to have built the next unicorn startup or contributed to major open-source projects. Your story – with all its false starts, bad habits, and lessons learned the hard way – is probably &lt;em&gt;more&lt;/em&gt; valuable than you realise. Because somewhere out there, someone is making the same mistakes you did, and they'd benefit from hearing that it's okay.&lt;/p&gt;

&lt;p&gt;Platforms like CoderLegion exist precisely to tell those stories.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The piece went live recently, and I've already shared it with my Telegram audience. The response has been warm – several fellow researchers and self-taught coders reached out to say they saw themselves in the narrative.&lt;/p&gt;

&lt;p&gt;That's the whole point, isn't it? To connect, to reassure, to remind each other that we're all figuring it out as we go.&lt;/p&gt;

&lt;p&gt;So here's my public thank-you to the CoderLegion team. Thank you for reaching out, for trusting my story, for handling it with care, and for building a space where imperfect journeys are welcomed.&lt;/p&gt;

&lt;p&gt;I'll be writing more about the experience on DEV.to soon – but for now, if you're curious, here's the piece itself:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://coderlegion.com/25394/from-philology-to-python-how-i-fell-into-coding-and-why-my-code-still-makes-me-wince" rel="noopener noreferrer"&gt;https://coderlegion.com/25394/from-philology-to-python-how-i-fell-into-coding-and-why-my-code-still-makes-me-wince&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And to anyone reading this: if you have a story to tell, tell it. You might be surprised who listens.&lt;/p&gt;

</description>
      <category>coderlegion</category>
      <category>developerstories</category>
      <category>selftaught</category>
      <category>programmingjourney</category>
    </item>
    <item>
      <title>How to Actually Determine Authorship with a Computer (And Why Most People Get It Wrong)</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Thu, 27 Aug 2026 05:56:00 +0000</pubDate>
      <link>https://dev.to/nevmenandr/how-to-actually-determine-authorship-with-a-computer-and-why-most-people-get-it-wrong-513p</link>
      <guid>https://dev.to/nevmenandr/how-to-actually-determine-authorship-with-a-computer-and-why-most-people-get-it-wrong-513p</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Most “computer‑based” author attribution you see on the internet is junk. Average word length? TF‑IDF + cosine similarity? Please. There’s a method that actually works – it’s called &lt;strong&gt;Delta&lt;/strong&gt;, it’s 20 years old, and you can run it with a few clicks in R. Let me show you why the naive approaches fail and how real stylometry is done.&lt;/p&gt;




&lt;h3&gt;
  
  
  The problem with “obvious” methods
&lt;/h3&gt;

&lt;p&gt;We’ve all seen it: someone grabs a few texts, computes average word distribution or most frequent words, draws a pretty line chart, and declares they can tell who wrote what.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spoiler:&lt;/strong&gt; they can’t.&lt;/p&gt;

&lt;p&gt;A famous example – in 2018, a data scientist tried to identify the anonymous &lt;em&gt;New York Times&lt;/em&gt; op‑ed “I Am Part of the Resistance Inside the Trump Administration”. He used TF‑IDF on Trump administration members’ tweets, computed cosine similarity, and concluded… the most likely author was Trump himself (or someone from State Department).  Not very convicing.&lt;/p&gt;

&lt;p&gt;That’s not science – that’s cargo‑cult data analysis.&lt;/p&gt;

&lt;p&gt;Even worse, a 2023 book &lt;em&gt;Python for Hackers&lt;/em&gt; dedicates a whole chapter to stylometry, yet it uses &lt;strong&gt;average word length&lt;/strong&gt; and plots line charts copied from 19th‑century geophysicist Thomas Mendenhall. Yes, the same Mendenhall who thought word‑length distributions would work like spectral analysis of chemical elements.  &lt;/p&gt;

&lt;p&gt;Spoiler: they don’t. Grzybek (2007) already buried that idea.&lt;/p&gt;

&lt;p&gt;So if those methods are garbage, what actually works?&lt;/p&gt;




&lt;h3&gt;
  
  
  Enter John Burrows and the Delta method (2002)
&lt;/h3&gt;

&lt;p&gt;Burrows proposed a surprisingly simple distance measure between texts – &lt;strong&gt;Delta&lt;/strong&gt;. It uses only the 100–500 &lt;strong&gt;most frequent words&lt;/strong&gt; (mostly function words like “the”, “and”, “of” – not content words). That’s genius, because it ignores topic and focuses on style.&lt;/p&gt;

&lt;p&gt;Here’s the intuition:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For each text, compute the relative frequency of each frequent word.&lt;/li&gt;
&lt;li&gt;Convert to &lt;strong&gt;z‑scores&lt;/strong&gt; (how many standard deviations above/below the corpus average).&lt;/li&gt;
&lt;li&gt;Delta between two texts = mean absolute difference of their z‑scores across all words.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Small Delta → stylistically similar → probably same author.&lt;/p&gt;

&lt;p&gt;No neural networks. No thousands of parameters. Just robust statistics.&lt;/p&gt;

&lt;p&gt;And it works. On English, Russian, Arabic, Ancient Greek, even Chinese (yes, despite no clear word boundaries). Nobody knows exactly &lt;em&gt;why&lt;/em&gt; – but it has been validated on hundreds of test cases.&lt;/p&gt;




&lt;h3&gt;
  
  
  How to run it without writing a single line of R
&lt;/h3&gt;

&lt;p&gt;There’s an R package called &lt;strong&gt;&lt;code&gt;stylo&lt;/code&gt;&lt;/strong&gt; (Kestemont et al., 2016). It has a point‑and‑click GUI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight r"&gt;&lt;code&gt;&lt;span class="n"&gt;install.packages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'stylo'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stylo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;stylo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;# GUI opens&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxo8irxbpnfv6tgxk7ywi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxo8irxbpnfv6tgxk7ywi.png" alt="Stylo" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You put your texts in a folder named &lt;code&gt;corpus&lt;/code&gt;. Name files like &lt;code&gt;author_title.txt&lt;/code&gt; – &lt;code&gt;stylo&lt;/code&gt; automatically colors by author in the output.&lt;/p&gt;

&lt;p&gt;It produces a dendrogram (cluster tree). If the method works, texts by the same author cluster together.&lt;/p&gt;

&lt;p&gt;I tested 24 Russian prose texts (Lermontov, Chekhov, Leskov, Gogol). One unknown text (“???”) was supposed to be by Leskov. Result: 23 out of 24 correctly clustered. Only one early Chekhov story drifted to Lermontov – because Delta is sensitive to author’s evolution over time.  &lt;/p&gt;

&lt;p&gt;The unknown text landed right with Leskov.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpx1n9cyq23ke3fhddvo8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpx1n9cyq23ke3fhddvo8.png" alt="Cluster dendrogram" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not perfect – but far better than random guessing.&lt;/p&gt;




&lt;h3&gt;
  
  
  Case studies that (sort of) worked
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Rowling / Galbraith (2013)
&lt;/h4&gt;

&lt;p&gt;When J.K. Rowling published &lt;em&gt;The Cuckoo’s Calling&lt;/em&gt; as “Robert Galbraith”, stylometrists quickly identified her as the author. Rowling later confessed. A model case, right?&lt;/p&gt;

&lt;p&gt;Well… &lt;code&gt;stylo&lt;/code&gt; includes a &lt;code&gt;galbraith&lt;/code&gt; dataset. I ran it. The data are hand‑picked: authors from different centuries and genres, making Rowling stand out artificially. A more honest test? Still works, but less dramatic. &lt;strong&gt;Always question your benchmark.&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The Quiet Don (Sholokhov)
&lt;/h4&gt;

&lt;p&gt;The famous Russian novel has been suspected to be plagiarised from Fyodor Kryukov. Delta analysis (using 100+ texts) shows:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It’s &lt;strong&gt;not&lt;/strong&gt; Kryukov.
&lt;/li&gt;
&lt;li&gt;“Don Stories” (signed Sholokhov) and “The Quiet Don” cluster together → same author.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Politics aside, the data are clear.&lt;/p&gt;

&lt;h4&gt;
  
  
  Bitcoin white paper (Satoshi Nakamoto)
&lt;/h4&gt;

&lt;p&gt;Here the method is &lt;strong&gt;abused&lt;/strong&gt;. The white paper has only ~3700 words – well below the recommended 10k+ minimum. Still, curious minds ran it: the paper clustered with &lt;strong&gt;Craig Wright&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ovtvxh1i5pi480llkdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ovtvxh1i5pi480llkdg.png" alt="Satoshi Nakamoto" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Should you trust that? Absolutely not. But it’s fun.&lt;/p&gt;




&lt;h3&gt;
  
  
  Where Delta breaks (and why you should care)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Different genres&lt;/strong&gt; – comparing a play to a novel makes no sense. Remove the play.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Theological texts&lt;/strong&gt; – for unknown reasons, Delta often fails on religious writings. Atheist algorithm?
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Short texts&lt;/strong&gt; (&amp;lt; 10,000 words) – too noisy. Don’t even try.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authors who change style radically&lt;/strong&gt; – early vs. late Chekhov can look like different people.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So it’s not magic. But when used correctly, it’s the best we have.&lt;/p&gt;




&lt;h3&gt;
  
  
  For the curious programmer
&lt;/h3&gt;

&lt;p&gt;If you want to dig deeper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Burrows, J. F. (2002). &lt;em&gt;Delta: A Measure of Stylistic Difference&lt;/em&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;stylo&lt;/code&gt; package: &lt;a href="https://github.com/computationalstylistics/stylo" rel="noopener noreferrer"&gt;https://github.com/computationalstylistics/stylo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My colleague’s visualisation (better than dendrograms): distributions of intra‑author vs inter‑author distances.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73k1nh10c6qu5d0y46o8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73k1nh10c6qu5d0y46o8.png" alt="better than dendrograms" width="592" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And a fascinating book: &lt;em&gt;Passwords: Philology, Security, Authentication&lt;/em&gt; by B. Lennon (2018) – it traces the common roots of cryptography and stylometry. The first US crypto‑analysis unit hired… English professors who argued over Shakespeare’s authorship.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final verdict
&lt;/h3&gt;

&lt;p&gt;Next time someone shows you a line chart of average word lengths to “prove” who wrote something, send them this post. Real authorship attribution is harder – but also more reliable when you use proper methods like Delta.&lt;/p&gt;

&lt;p&gt;And remember: if the text is shorter than 10,000 words, just walk away. No method can save you.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it yourself:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Download a few texts by two different authors (&amp;gt;10k words each), name them &lt;code&gt;author1_title.txt&lt;/code&gt;, run &lt;code&gt;stylo()&lt;/code&gt;, and see if they separate. You’ll be surprised how well it works.&lt;/p&gt;

</description>
      <category>stylometry</category>
      <category>authorship</category>
      <category>attribution</category>
      <category>delta</category>
    </item>
    <item>
      <title>Chess plays as data for word2vec models</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Mon, 17 Aug 2026 05:42:00 +0000</pubDate>
      <link>https://dev.to/nevmenandr/chess-plays-as-data-for-word2vec-models-1pgn</link>
      <guid>https://dev.to/nevmenandr/chess-plays-as-data-for-word2vec-models-1pgn</guid>
      <description>&lt;h2&gt;
  
  
  ♟️ You shall know a piece by the company it keeps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Chess plays as data for word2vec models&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Programmers, have you ever looked at a PGN file and thought: &lt;em&gt;this looks like a language&lt;/em&gt;?&lt;br&gt;&lt;br&gt;
What if we trained word2vec on 5.4 million chess games, treating each move as a &lt;strong&gt;word&lt;/strong&gt; and each game as a &lt;strong&gt;sentence&lt;/strong&gt;? Would the vectors capture anything about chess strategy? Or would it be nonsense?&lt;/p&gt;

&lt;p&gt;I asked exactly that. And the results are surprisingly… meaningful.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 Original preprint: &lt;a href="https://arxiv.org/abs/2407.19600" rel="noopener noreferrer"&gt;arXiv:2407.19600&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h3&gt;
  
  
  🧩 The core idea
&lt;/h3&gt;

&lt;p&gt;Word2vec relies on the &lt;strong&gt;distributional hypothesis&lt;/strong&gt;: a word’s meaning is defined by its context (neighbouring words).&lt;br&gt;&lt;br&gt;
Orekhov’s move: apply the same to chess moves.&lt;/p&gt;

&lt;p&gt;He built &lt;strong&gt;18 different models&lt;/strong&gt; from a corpus of ~5.4M high‑level games (≈840M moves).&lt;br&gt;&lt;br&gt;
Two main approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type 1&lt;/strong&gt; – moves only (each move = a word, game = sentence)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type 2&lt;/strong&gt; – moves + board state (each “sentence” = current position + the move)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then: train word2vec (skip‑gram / CBOW), get dense vectors (300‑500 dims), and run the usual NLP tricks – nearest neighbours, odd‑one‑out, analogies, t‑SNE visualisations.&lt;/p&gt;


&lt;h3&gt;
  
  
  🔍 What the model learned (without ever seeing a board)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quasi‑synonyms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Closest vectors to &lt;code&gt;Pe2e4&lt;/code&gt; are &lt;code&gt;Pe2e3&lt;/code&gt;, &lt;code&gt;Ng1f3&lt;/code&gt;, &lt;code&gt;Pd2d4&lt;/code&gt; – exactly what you’d expect.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Odd one out&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;[Pe2e4, Ng1f3, Pd2d4, Bf1c4, Nb1c3, Pb4b5]&lt;/code&gt; → &lt;code&gt;Pb4b5&lt;/code&gt; is flagged (edge pawn move, rarely an opening).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Analogies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;king - man + woman ≈ queen&lt;/code&gt; for words. For chess: &lt;code&gt;Pe2e4 - Pf2f4 + pe7e5&lt;/code&gt; suggests &lt;code&gt;pe7e6&lt;/code&gt; (French Defence). Works.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Castling detection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Ke1g1&lt;/code&gt; (short castling) → closest vectors include &lt;code&gt;Rh1f1&lt;/code&gt; and &lt;code&gt;Ke1c1&lt;/code&gt;. The model learned that king and rook move together.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Endgame clusters&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;t‑SNE shows extremely clean, piece‑separated clusters. Openings are messy (all similar).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bishop colour&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Light‑squared and dark‑squared bishops form &lt;strong&gt;different clusters&lt;/strong&gt; – the model learned chess‑relevant semantics.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Captures as “POS tags”&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adding &lt;code&gt;_CAP&lt;/code&gt; / &lt;code&gt;_N&lt;/code&gt; made moves cluster by &lt;strong&gt;destination square&lt;/strong&gt; instead of source piece. A new kind of “part of speech” for chess.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;📊 Over 68% of moves have at least 3 of their 10 nearest neighbours being the &lt;strong&gt;same piece moving to the same square&lt;/strong&gt;. That’s not random – it’s structural.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h3&gt;
  
  
  🤯 The most beautiful visualisation
&lt;/h3&gt;

&lt;p&gt;The model trained on &lt;strong&gt;games without queens&lt;/strong&gt; produced a perfectly &lt;strong&gt;symmetric&lt;/strong&gt; t‑SNE plot – white moves on one side, black moves mirrored.&lt;br&gt;&lt;br&gt;
The algorithm had no concept of “colour” as a feature. Yet the distributional signal was so strong that the two colour spaces separated like antipodal points on a sphere.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4rf9yqk20dgxea4z5tp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4rf9yqk20dgxea4z5tp.png" alt="tSNE visualisation of the moves from the endgame_moves_black.model with perplexity 30" width="765" height="439"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  ⚠️ The honest conclusion (refreshing for a paper)
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“I don't see how this representation can be used productively. It's unlikely to help engines or humans choose the best move. But in a purely academic sense, it captures something important about the nature of the game.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No overhyped “this will revolutionise chess AI”. Just a clean, curious application of NLP to a symbolic system – and it works.&lt;/p&gt;


&lt;h3&gt;
  
  
  🧰 For the hacker’s toolbox
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;All models are &lt;strong&gt;public on HuggingFace&lt;/strong&gt;: &lt;a href="https://huggingface.co/nevmenandr/w2v-chess" rel="noopener noreferrer"&gt;nevmenandr/w2v-chess&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Code &amp;amp; data: PGN corpus of 5.4M games (freely available online)&lt;/li&gt;
&lt;li&gt;Techniques used: word2vec, t‑SNE, cosine distance, analogies, “stemming” (removing source square), part‑of‑speech tags for captures&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  📚 Cite this work
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;APA&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Orekhov, B. (2024). &lt;em&gt;You shall know a piece by the company it keeps. Chess plays as a data for word2vec models&lt;/em&gt;. arXiv preprint. &lt;a href="https://arxiv.org/abs/2407.19600" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2407.19600&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IEEE&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
B. Orekhov, “You shall know a piece by the company it keeps. Chess plays as a data for word2vec models,” 2024. [Online]. Available: arXiv:2407.19600&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MLA&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Orekhov, Boris. “You Shall Know a Piece by the Company It Keeps. Chess Plays as a Data for Word2vec Models.” arXiv, 2024, &lt;a href="https://arxiv.org/abs/2407.19600" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2407.19600&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BibTeX&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight bibtex"&gt;&lt;code&gt;&lt;span class="nc"&gt;@misc&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;orekhov2024shallknowpiececompany&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;{You shall know a piece by the company it keeps. Chess plays as a data for word2vec models}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;{Boris Orekhov}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;year&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;{2024}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;eprint&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;{2407.19600}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;archivePrefix&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;{arXiv}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;primaryClass&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;{cs.CL}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;{https://arxiv.org/abs/2407.19600}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;👉 &lt;em&gt;Would you run word2vec on Go games? Poker hands? Protein folding sequences? The method is language‑agnostic – and that’s the real lesson.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>word2vec</category>
      <category>chess</category>
      <category>nlp</category>
      <category>semantics</category>
    </item>
    <item>
      <title>Natural Languages vs. Programming Languages</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Fri, 07 Aug 2026 05:30:00 +0000</pubDate>
      <link>https://dev.to/nevmenandr/natural-languages-vs-programming-languages-7gj</link>
      <guid>https://dev.to/nevmenandr/natural-languages-vs-programming-languages-7gj</guid>
      <description>&lt;h2&gt;
  
  
  Natural Languages vs. Programming Languages: Same Word, Different Worlds
&lt;/h2&gt;

&lt;p&gt;We call them both “languages” – but does a &lt;code&gt;for&lt;/code&gt; loop have anything in common with a love poem? Turns out, yes and no. And the differences are way more interesting than you might think.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Reason We Have Languages (Either Kind)
&lt;/h3&gt;

&lt;p&gt;Languages exist to pass information around. Human languages gave us tribes, then kingdoms, then sci-fi novels about interstellar travel – written centuries before anyone ever left Earth. That’s flexibility.&lt;/p&gt;

&lt;p&gt;Computers, on the other hand, speak &lt;strong&gt;machine code&lt;/strong&gt;: raw numbers and arithmetic operations. &lt;code&gt;BB 11 01&lt;/code&gt; means something to a CPU, but to a human? It’s a headache. So in the late 1950s, we invented programming languages – a human-readable middle layer that gets translated into machine code. That’s why you can write &lt;code&gt;if user.is_active:&lt;/code&gt; instead of pushing hex bytes around.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Human Languages Lie (and Why Code Doesn’t)
&lt;/h3&gt;

&lt;p&gt;Russian says &lt;em&gt;“dождь идёт”&lt;/em&gt; – “the rain walks”. English says &lt;em&gt;“it rains”&lt;/em&gt; – “it rain-verbs”. French says &lt;em&gt;“il pleut”&lt;/em&gt;. None of them are true: there’s no walker, no “it”, just water falling from the sky. Human languages force reality into their own grammar.&lt;/p&gt;

&lt;p&gt;Machine code has zero such illusions. It’s brutally literal: &lt;em&gt;take this number, add that number, put the result there&lt;/em&gt;. No metaphors, no actors, no walking rain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Low‑Level vs High‑Level – It’s Not a Class Thing
&lt;/h3&gt;

&lt;p&gt;“Low‑level” languages (like assembly) stay close to the machine – you tell the CPU every tiny step. “High‑level” languages (Python, JavaScript) let you say &lt;em&gt;“make it pretty, I don’t care how”&lt;/em&gt;. The naming reflects our narcissism: humans at the top, computers at the bottom.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Real Killer Difference: Narration vs Commands
&lt;/h3&gt;

&lt;p&gt;What do we do most with natural language? &lt;strong&gt;We tell stories.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I woke up dressed in an armchair,&lt;br&gt;&lt;br&gt;
In my own flat among familiar walls…&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now try to write that in C. All you get are assertions: &lt;code&gt;I_am = dressed; I_am = awake; my_location = armchair;&lt;/code&gt; Clunky, right? Programming languages are built almost entirely for the &lt;strong&gt;imperative mood&lt;/strong&gt; – do this, go there, set that. They’re instruction manuals, not novels.&lt;/p&gt;

&lt;p&gt;Want to talk about the past? Good luck. Natural languages handle tense effortlessly. In code, the past doesn’t matter unless you explicitly store it. And concepts like “spiritual thirst” (Pushkin’s famous line) can’t be mapped to a variable – &lt;code&gt;thirst = 0&lt;/code&gt; is just an empty box, not a longing.&lt;/p&gt;

&lt;h3&gt;
  
  
  But People Still Write Poetry in Code
&lt;/h3&gt;

&lt;p&gt;Yes, really. There are &lt;strong&gt;esoteric languages&lt;/strong&gt; like &lt;em&gt;Shakespeare&lt;/em&gt;, where the source code looks like a Renaissance play. And people have written poems in Python and JavaScript – some for everyone, some for the elite few. The results are awkward, fascinating, and beautifully absurd.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bottom Line
&lt;/h3&gt;

&lt;p&gt;Both language families have words and grammar. But natural grammars are universal – they can describe anything from a rainy street to a broken heart. Programming grammars are narrow, laser‑focused on giving commands. One tells stories, the other gives orders. And that’s why you can’t &lt;code&gt;import&lt;/code&gt; a soul.&lt;/p&gt;

</description>
      <category>linguistics</category>
      <category>programming</category>
      <category>languages</category>
    </item>
    <item>
      <title>Chess &amp; Computer Tech Today – A Programmer’s Take</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Mon, 27 Jul 2026 05:25:00 +0000</pubDate>
      <link>https://dev.to/nevmenandr/chess-computer-tech-today-a-programmers-take-2338</link>
      <guid>https://dev.to/nevmenandr/chess-computer-tech-today-a-programmers-take-2338</guid>
      <description>&lt;h2&gt;
  
  
  Chess &amp;amp; Computer Tech Today – A Programmer’s Take
&lt;/h2&gt;

&lt;p&gt;Remember when beating a human at chess was the holy grail of AI? In 1972, it was literally &lt;em&gt;the&lt;/em&gt; benchmark. Fast forward to today: a random office desktop crushes any grandmaster. Game over? Not even close.&lt;/p&gt;

&lt;p&gt;Chess didn’t die – it went full cyberpunk. And as a programmer who barely knows a fork from a fianchetto (my Lichess rating is ~800), I’ve become obsessed with how code reshaped this ancient game. Here’s what every dev should care about.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Analysis engines – the real MVP
&lt;/h3&gt;

&lt;p&gt;Every chess move today gets instantly judged by an engine. That little “thermometer” on stream? It’s a live eval bar. One blunder, and the score tanks from +2 to -3 – you &lt;em&gt;feel&lt;/em&gt; the drama.&lt;/p&gt;

&lt;p&gt;But here’s the fun part for us: I built &lt;strong&gt;vector models of chess games&lt;/strong&gt; using word2vec. Treating moves like words in a sentence. Preprint here: &lt;a href="https://arxiv.org/abs/2407.19600" rel="noopener noreferrer"&gt;arxiv.org/abs/2407.19600&lt;/a&gt;. Turns out, chess positions embed nicely into vector space. Who knew?&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Cheating – from SMS to… sex toys?
&lt;/h3&gt;

&lt;p&gt;Cheating in chess is not like doping. A single engine move at the right moment = game over. So offline tournaments scan players like airport security.&lt;/p&gt;

&lt;p&gt;But the real WTF moment: during the 2022 Carlsen–Niemann scandal, Elon Musk suggested Niemann might have received moves via a &lt;strong&gt;remote-controlled vibrating sex toy&lt;/strong&gt; hidden inside his body. Yes, seriously.&lt;/p&gt;

&lt;p&gt;And how would you encode a chess move without Bluetooth? French team at 2010 Olympiad used SMS + captain standing near imaginary chessboard squares. Programmers, think about it: you could encode a move with just 2 vibrations (source square, target square). Someone even wrote Python demo for that.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Online chess – pre-moves, flag-hunting, and lag
&lt;/h3&gt;

&lt;p&gt;Online blitz (3+0, 3+1) is a different beast. &lt;strong&gt;Premoves&lt;/strong&gt; let you queue your next move while opponent thinks. Click, and it executes instantly when their move arrives. No physical clock button. No “oops I dropped the knight”.&lt;/p&gt;

&lt;p&gt;But then you get &lt;strong&gt;flag-hunting&lt;/strong&gt; – players in losing positions spam premoves hoping the winner runs out of time. Old-school champ Kramnik calls it unethical. New generation says “it’s in the rules”.&lt;/p&gt;

&lt;p&gt;The ultimate test? A 2024 match between Kramnik (legend, hates flag-hunting) and Jospem (online phenom, suspected cheater). Half the games OTB, half online, same room back-to-back. Result: inconclusive. But the drama? Chef’s kiss. Also, organizers printed fresh laptops – Windows updates caused lag &lt;em&gt;only for one player&lt;/em&gt;. Conspiracy? Probably just Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters for devs
&lt;/h3&gt;

&lt;p&gt;Chess is no longer about “intelligence”. It’s about psychology, emotion, and… code. We built machines that play perfect chess, then humans kept playing anyway. Now we’re debating: does a premove change the nature of the game? Is online chess “real” chess? Can we detect cheaters from move statistics?&lt;/p&gt;

&lt;p&gt;These are &lt;em&gt;our&lt;/em&gt; questions – systems design, anomaly detection, real-time constraints, UI/UX of time controls.&lt;/p&gt;

&lt;p&gt;And the best part? No definitive answers. Just like software engineering.&lt;/p&gt;

</description>
      <category>chess</category>
      <category>ai</category>
      <category>programming</category>
      <category>game</category>
    </item>
    <item>
      <title>Combinatorics of Beads</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Fri, 17 Jul 2026 05:10:00 +0000</pubDate>
      <link>https://dev.to/nevmenandr/combinatorics-of-beads-38j3</link>
      <guid>https://dev.to/nevmenandr/combinatorics-of-beads-38j3</guid>
      <description>&lt;h2&gt;
  
  
  🧩 Combinatorics of Beads: When Tang Poetry Meets Chess in Python
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;What if you could shuffle classical Chinese verses using chess moves — and get weird, wonderful new poetry?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’ve ever read Hermann Hesse’s &lt;em&gt;The Glass Bead Game&lt;/em&gt;, you know the feeling: a mysterious, intellectual game where players combine symbols from music, math, art, and literature to create beautiful, useless patterns. Hesse never explained the rules. He wanted every reader to invent their own.&lt;/p&gt;

&lt;p&gt;So I did. &lt;strong&gt;With Python.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;Chess Bead Game&lt;/strong&gt; – a small Python package that lets Tang dynasty poems (8 lines × 7 characters + punctuation = 8×8 grid) play a game of chess against themselves. Each character is a square. Every move swaps two characters. After 40 moves, the poem becomes… something else.&lt;/p&gt;

&lt;p&gt;And something surprisingly poetic.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 The Rules (such as they are)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Take a classical Chinese poem&lt;/strong&gt; from the Tang era (7 characters per line, 8 lines → 8×8 board).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load a real chess game&lt;/strong&gt; from a PGN file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For each move:&lt;/strong&gt; swap the characters on the &lt;em&gt;from&lt;/em&gt; and &lt;em&gt;to&lt;/em&gt; squares.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the original text mutate&lt;/strong&gt; – step by step, move by move.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No practical purpose whatsoever.&lt;/strong&gt; ✔️&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it. Pure, useless, beautiful combinatorial art.&lt;/p&gt;




&lt;h2&gt;
  
  
  🐍 Show Me the Code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;chess_bead&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;cb&lt;/span&gt;

&lt;span class="n"&gt;game&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Game&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;           &lt;span class="c1"&gt;# loads a random poem + a random chess game
&lt;/span&gt;&lt;span class="n"&gt;verses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start_game&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# run all moves
&lt;/span&gt;
&lt;span class="n"&gt;viz&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Viz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;verses&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;author&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;viz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gif&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                  &lt;span class="c1"&gt;# creates an animation of the whole transformation
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s literally it. Two lines to shuffle an 8th‑century poem using a Kasparov‑vs‑Topalov knight sacrifice.&lt;/p&gt;




&lt;h2&gt;
  
  
  📜 Before &amp;amp; After (with Machine Translation)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Original poem&lt;/strong&gt; (anonymous Tang style):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;新婦去年胼手足，
衣不暇縫蠶廢簇。
白頭使我憂家事，
還如夜裏燒殘燭。
當初為取傍人語，
豈道如今自辛苦。
在時縱嫌織絹遲，
有絲不上鄰家機。
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Translation (DeepL):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Last year the bride’s hands and feet were calloused,&lt;br&gt;
No time to sew, silkworms abandoned in their frames.&lt;br&gt;
White hair makes me worry about family matters,&lt;br&gt;
Like a candle burning low in the night.&lt;br&gt;
At first I listened to other people’s gossip,&lt;br&gt;
How could I know I’d suffer so myself?&lt;br&gt;
Back then I complained that weaving silk was too slow,&lt;br&gt;
But now I have silk – yet won’t use the neighbor’s loom.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After 10 chess moves&lt;/strong&gt; – same characters, completely new order:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;新裏去年胼手家，
衣不暇婦憂廢簇。
白頭使我蠶足事，
還如夜織燒殘不。
當初為嫌絲人語，
豈道縫今自辛苦。
在時縱取傍絹遲，
有如燭上鄰家機。
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;New translation:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Last year in the inner chamber, calloused hands stayed home,&lt;br&gt;
No time for the woman – worries over wasted silk frames.&lt;br&gt;
White hair makes me busy with silkworm matters,&lt;br&gt;
Yet like weaving at night, burning the candle but not quite.&lt;br&gt;
At first I disliked the gossiping people,&lt;br&gt;
How did I know the seams would now be stiff with toil?&lt;br&gt;
Back then I freely took the silk, but too slow,&lt;br&gt;
It's like a candle on the neighbor's loom.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The two versions enter a dialogue. The banal candle becomes surreal. Helplessness turns into defiant.&lt;/p&gt;




&lt;h2&gt;
  
  
  ♟️ Why Programmers Will Love This
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It’s completely useless&lt;/strong&gt; – perfect for a side project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Combinatorial explosion&lt;/strong&gt; – 64! possible permutations, but constrained by chess move legality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data mashing&lt;/strong&gt; – poetry × chess × machine translation × animation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plug‑and‑play architecture&lt;/strong&gt; – easily extend to other text grids (Latin hexameters? Haiku? ASCII art?).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python package on PyPI&lt;/strong&gt; – &lt;code&gt;pip install chess_bead&lt;/code&gt; and you’re ready.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The package already includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A small corpus of Tang‑style 8×8 poems.&lt;/li&gt;
&lt;li&gt;PGN parser for real chess games.&lt;/li&gt;
&lt;li&gt;GIF generator (shows each move as a frame).&lt;/li&gt;
&lt;li&gt;DeepL integration? No, but you can pipe the output yourself.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;Hesse dreamed of a game that weaves together mathematics, music, astronomy, Greek, Latin, and Chinese wisdom. This is one tiny step: &lt;strong&gt;chess (rules) + Chinese poetry (data) + randomness (deterministic but emergent).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next steps? Add mathematical sequences, musical notation, ancient Greek fragments, maybe a SPARQL endpoint to Wikidata. Imagine a game where a Beethoven motif, a line from Ovid, and a tangram shape swap places according to chess rules.&lt;/p&gt;

&lt;p&gt;Yes, it’s absurd.&lt;br&gt;&lt;br&gt;
Yes, it’s beautiful.&lt;br&gt;&lt;br&gt;
Yes, I want to see the &lt;a href="https://chess-bead.readthedocs.io/en/latest/_images/game.gif" rel="noopener noreferrer"&gt;GIF&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Get It / Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PyPI: &lt;a href="https://pypi.org/project/chess_bead/" rel="noopener noreferrer"&gt;&lt;code&gt;chess_bead&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://chess-bead.readthedocs.io/" rel="noopener noreferrer"&gt;chess-bead.readthedocs.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/nevmenandr/chess_bead" rel="noopener noreferrer"&gt;github.com/nevmenandr/chess_bead&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;chess_bead
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run the 3‑line script above and watch poetry disintegrate into art.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎼 “Let it resound in our games, in our whole life, in everything we create and endure!”
&lt;/h2&gt;

&lt;p&gt;― Hermann Hesse (paraphrased)&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Inspired by Alexander Genis’s confession: “In *The Glass Bead Game&lt;/em&gt;, I was only interested in the game itself. Everything else – just because.”*&lt;/p&gt;

</description>
      <category>python</category>
      <category>chess</category>
      <category>game</category>
      <category>coding</category>
    </item>
    <item>
      <title>When Code Speaks Latin and Acts Like Shakespeare</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Tue, 07 Jul 2026 05:02:00 +0000</pubDate>
      <link>https://dev.to/nevmenandr/when-code-speaks-latin-and-acts-like-shakespeare-1c85</link>
      <guid>https://dev.to/nevmenandr/when-code-speaks-latin-and-acts-like-shakespeare-1c85</guid>
      <description>&lt;h2&gt;
  
  
  When Code Speaks Latin and Acts Like Shakespeare Or why programmers secretly love useless beauty
&lt;/h2&gt;

&lt;p&gt;You’d think poetry and programming are light-years apart. They aren’t. Their intersection is the charming, useless zone where engineers become artists.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 Natural languages vs. code
&lt;/h3&gt;

&lt;p&gt;Linguistics isn’t pure humanities — it’s closer to biology. But programming languages have words, syntax, and expressiveness. Just like in human speech, you can say anything in any programming language. The difference? How many lines you write and how much cruft the CPU swallows.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Latin lets you say “the generation that will beget even worse” in one tight phrase. Russian? Awkward illiteracy. Same in code: Python is concise but hides massive overhead. Assembly is verbose but brutally efficient.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🔁 The assignment quirk
&lt;/h3&gt;

&lt;p&gt;Most languages write &lt;code&gt;x = 5&lt;/code&gt; (right to left).&lt;br&gt;&lt;br&gt;
R flips it: &lt;code&gt;5 -&amp;gt; x&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
It’s a tiny rebellion against how we think.&lt;/p&gt;

&lt;h3&gt;
  
  
  📜 Poetry in binary?
&lt;/h3&gt;

&lt;p&gt;Victor Pelevin once joked about writing poems in assembly — “fewer rhyming problems in binary.” A wink at the myth that poetry needs rhymes. (It doesn’t. Ask the Japanese or ancient Greeks.)&lt;/p&gt;

&lt;h3&gt;
  
  
  🎭 Esoteric languages: beauty without utility
&lt;/h3&gt;

&lt;p&gt;These are languages built &lt;em&gt;not&lt;/em&gt; to solve problems, but to amuse, provoke, and confuse.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;Perligata&lt;/strong&gt; — code in Latin
&lt;/h4&gt;

&lt;p&gt;No fixed word order. Declensions do the work.&lt;br&gt;&lt;br&gt;
&lt;code&gt;nexto stringum reperimentum da&lt;/code&gt; = assign to &lt;code&gt;$next&lt;/code&gt; the position in a string.&lt;br&gt;&lt;br&gt;
Free order, just like Latin poetry. The creator: &lt;em&gt;“If you ask ‘Why?’ – the answer won’t make sense anyway.”&lt;/em&gt;&lt;br&gt;&lt;br&gt;
Pure humanities fuel.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;strong&gt;Shakespeare&lt;/strong&gt; — programs as Elizabethan plays
&lt;/h4&gt;

&lt;p&gt;Variables are characters (Romeo, Juliet).&lt;br&gt;&lt;br&gt;
Logic is hidden in dialogue: “Thou art as villainous as the square root of Romeo!”&lt;br&gt;&lt;br&gt;
It can only add, subtract, and print. But it &lt;em&gt;looks&lt;/em&gt; like a postmodern play.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Why this matters for devs
&lt;/h3&gt;

&lt;p&gt;Because not every line of code needs to ship to production. Sometimes you write for the weird joy of it. These languages remind us that programming is also a form of expression — absurd, beautiful, and deeply human.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“If you have to ask ‘Why?’, then the answer probably won’t make any sense to you either.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Enjoyed this?&lt;/strong&gt; Share with a colleague who secretly writes poetry in their comments. Or someone who still thinks Latin is useless. 😉&lt;/p&gt;

</description>
      <category>esoteric</category>
      <category>programming</category>
      <category>poetry</category>
    </item>
    <item>
      <title>A Skeptical Review of Critical Code Studies</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Sat, 27 Jun 2026 04:45:00 +0000</pubDate>
      <link>https://dev.to/nevmenandr/a-skeptical-review-of-critical-code-studies-2lne</link>
      <guid>https://dev.to/nevmenandr/a-skeptical-review-of-critical-code-studies-2lne</guid>
      <description>&lt;h2&gt;
  
  
  Is Code Really a “Social Text”? A Skeptical Review of &lt;em&gt;Critical Code Studies&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; A sharp academic review takes aim at Mark C. Marino’s &lt;em&gt;Critical Code Studies&lt;/em&gt; (MIT Press, 2020). The verdict? Lots of hype, some interesting cases, but little real code analysis. If you’re a programmer who rolls your eyes at postmodern buzzwords, this one’s for you.&lt;/p&gt;




&lt;h3&gt;
  
  
  📖 The Book in a Nutshell
&lt;/h3&gt;

&lt;p&gt;Marino argues that code has escaped the programmer’s dungeon and entered mainstream culture. Code is no longer just a tool – it’s a &lt;strong&gt;social text&lt;/strong&gt; whose meaning changes with every new reader (lawyers, poets, activists, etc.). The book promises a literary‑style reading of software, drawing on postcolonial, feminist, and queer theory.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 What the Review Says (Boris Orekhov, &lt;em&gt;Digital Humanities&lt;/em&gt;, 2026)
&lt;/h3&gt;

&lt;p&gt;Me, Boris Orekhov - a digital humanities scholar - is &lt;strong&gt;not impressed&lt;/strong&gt;. My main gripes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Overblown claims&lt;/strong&gt; – “Audience of code has exploded!” Really? When was the last time a climate change debate hinged on reading source code? I call it cherry‑picking.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Case‑dropping, not analysis&lt;/strong&gt; – We get anecdotes: a protest sign in C, a feminist PHP app, the Transborder Immigrant Tool. But actual &lt;strong&gt;code examination&lt;/strong&gt; is superficial. A license phrase (“no warranties”) is noted as tragicomic – that’s about it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lost the plot&lt;/strong&gt; – Marino sets up a story about two programmers competing for a job, then… never finishes it. This happens every 10‑15 pages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Postmodern catechism&lt;/strong&gt; – The book wears its ideology on its sleeve (postcolonial, queer, feminist). Fine, but it substitutes slogans for rational argument. Systematic methodology? Nowhere.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Missing prior work&lt;/strong&gt; – My own 2015 &lt;a href="https://dev.to/nevmenandr/poetry-in-code-3iak"&gt;paper&lt;/a&gt; on code as poetry, and Black’s 2015 Mozilla history (which &lt;em&gt;does&lt;/em&gt; a real textual analysis), are ignored.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🤖 The Elephant in the Room: LLMs
&lt;/h3&gt;

&lt;p&gt;The book was written when only &lt;strong&gt;humans&lt;/strong&gt; wrote code. Now LLMs generate code without intention or social context. That guts Marino’s entire framework of authorial social meaning.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎯 Final Verdict
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“This book is less a scientific study and more a cabinet of curiosities – or a postmodern art exhibit catalog dressed as a monograph.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It might find its audience, but don’t expect a toolkit for actually reading code.&lt;/p&gt;




&lt;h2&gt;
  
  
  👩‍💻 Why Should Programmers Care?
&lt;/h2&gt;

&lt;p&gt;Because the gap between &lt;strong&gt;how we write code&lt;/strong&gt; and &lt;strong&gt;how humanities scholars talk about it&lt;/strong&gt; is huge. This review gives you an honest, critical look at one of the most hyped books in “software studies.” You’ll learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why calling code a “text” is both obvious and misleading
&lt;/li&gt;
&lt;li&gt;Why social‑justice lenses often skip the actual &lt;code&gt;for&lt;/code&gt; loops
&lt;/li&gt;
&lt;li&gt;What happens when ideology meets semicolons
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And you’ll get a good laugh at academic overreach.&lt;/p&gt;




&lt;h2&gt;
  
  
  📄 Read the Full Review (PDF)
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://nevmenandr.github.io/portfolio/assets/pdf/critical-code-studies.pdf" rel="noopener noreferrer"&gt;Critical Code Studies review – Orekhov 2026&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Cite the Original Review
&lt;/h2&gt;

&lt;h3&gt;
  
  
  APA
&lt;/h3&gt;

&lt;p&gt;Orekhov, B. (2026). Рецензия на книгу Марка К. Марино «Критические исследования кода» [Review of &lt;em&gt;Critical Code Studies&lt;/em&gt;, by M. C. Marino]. &lt;em&gt;Цифровые гуманитарные исследования&lt;/em&gt;, (1), 114–121. &lt;a href="https://doi.org/10.31860/cgi-2026-1-114-121" rel="noopener noreferrer"&gt;https://doi.org/10.31860/cgi-2026-1-114-121&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  MLA
&lt;/h3&gt;

&lt;p&gt;Orekhov, Boris. “Рецензия на книгу Марка К. Марино «Критические исследования кода».” Review of &lt;em&gt;Critical Code Studies&lt;/em&gt;, by Mark C. Marino. &lt;em&gt;Цифровые гуманитарные исследования&lt;/em&gt;, no. 1, 2026, pp. 114–121. DOI: 10.31860/cgi-2026-1-114-121.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chicago
&lt;/h3&gt;

&lt;p&gt;Orekhov, Boris. “Рецензия на книгу Марка К. Марино «Критические исследования кода».” Review of &lt;em&gt;Critical Code Studies&lt;/em&gt;, by Mark C. Marino. &lt;em&gt;Цифровые гуманитарные исследования&lt;/em&gt; 1 (2026): 114–121. &lt;a href="https://doi.org/10.31860/cgi-2026-1-114-121" rel="noopener noreferrer"&gt;https://doi.org/10.31860/cgi-2026-1-114-121&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  BibTeX
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight bibtex"&gt;&lt;code&gt;&lt;span class="nc"&gt;@review&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;Orekhov2026code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Рецензия на книгу Марка К. Марино «Критические исследования кода»}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Орехов, Борис}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2026}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;doi&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{10.31860/cgi-2026-1-114-121}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;journal&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Цифровые гуманитарные исследования}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;number&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{1}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;pages&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{114--121}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💬 Let’s Discuss
&lt;/h2&gt;

&lt;p&gt;Have you read &lt;em&gt;Critical Code Studies&lt;/em&gt;? Do you think code has a “social life” beyond its function? Drop your take in the comments – and share this post if you want more honest, no‑BS book reviews for devs.&lt;/p&gt;

&lt;h1&gt;
  
  
  CriticalCodeStudies #BookReview #SoftwareStudies #Programming #DigitalHumanities
&lt;/h1&gt;

</description>
      <category>bookreview</category>
      <category>softwarestudies</category>
      <category>programming</category>
      <category>digitalhumanities</category>
    </item>
    <item>
      <title>Poetry in Code</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Wed, 17 Jun 2026 04:08:00 +0000</pubDate>
      <link>https://dev.to/nevmenandr/poetry-in-code-3iak</link>
      <guid>https://dev.to/nevmenandr/poetry-in-code-3iak</guid>
      <description>&lt;h2&gt;
  
  
  Poetry in Code: When Code Becomes Poetry
&lt;/h2&gt;

&lt;p&gt;Have you ever written poetry in Java? Or C++? It turns out there’s a whole genre at the intersection of programming and poetry — &lt;strong&gt;code poetry&lt;/strong&gt;. Not just poems &lt;em&gt;about&lt;/em&gt; computers or programmers, but actual executable programs that are also poetic texts.&lt;/p&gt;

&lt;p&gt;Ten years ago I published a &lt;a href="https://scholar.google.com/scholar?cluster=12660271881389408371&amp;amp;hl=ru&amp;amp;as_sdt=0,5" rel="noopener noreferrer"&gt;paper&lt;/a&gt; proposing a method for analysing such works. Here are the key ideas — I think the dev.to community will find them interesting.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;Imagine writing code in Java, Python, or even CSS — it runs and works. But at the same time, the source code itself reads like a poem: rhythm, metre, imagery.&lt;/p&gt;

&lt;p&gt;Here’s an &lt;a href="https://habr.com/ru/articles/186044/" rel="noopener noreferrer"&gt;example&lt;/a&gt; from Habr (2013):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newGame&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;resources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;free&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;FILENAME&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;setLocation&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; &lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;loadDialog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;process&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;setGamerColor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;RED&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;reset&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notReady&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;make&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resourceNotFound&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// change to int!&lt;/span&gt;

&lt;span class="n"&gt;music&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This Java code can be compiled and executed. And when read aloud, it follows a strict &lt;strong&gt;trochaic tetrameter&lt;/strong&gt;. The author deliberately arranged the accents so that the rhythm aligns with the poetic metre.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to classify such works?
&lt;/h2&gt;

&lt;p&gt;In the paper I proposed three main analytical criteria:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Programming language choice
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High‑level languages&lt;/strong&gt; (Python, PHP, Perl) — closer to humans, accessible to a wider audience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low‑level languages&lt;/strong&gt; (assembly) — elitist, requiring deep expertise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dead languages&lt;/strong&gt; (Pascal, Cobol) — like Latin poetry, archaic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example from a Stanford poetry slam (C++):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;For_every&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;public:&lt;/span&gt;
  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;ngular&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"I"&lt;/span&gt;&lt;span class="p"&gt;;};&lt;/span&gt;
  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;que&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"f"&lt;/span&gt;&lt;span class="p"&gt;;};&lt;/span&gt;
  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ng&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;;};&lt;/span&gt;
  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ghting&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"d"&lt;/span&gt;&lt;span class="p"&gt;;};&lt;/span&gt;
  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ving&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"e"&lt;/span&gt;&lt;span class="p"&gt;;};&lt;/span&gt;
  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;" n"&lt;/span&gt;&lt;span class="p"&gt;;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;For_every&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ngular&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quet&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ng&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ving&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ghting&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vidual&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thanks to variable names (&lt;code&gt;i&lt;/code&gt;, &lt;code&gt;us&lt;/code&gt;) and method names, the sequence produces a phrase: &lt;em&gt;"I fought we will surely seperately"&lt;/em&gt; — the theme of “I vs. we”.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Functional load
&lt;/h3&gt;

&lt;p&gt;What does the program do? Even if pragmatically “useless”, the program’s intended behaviour matters.&lt;/p&gt;

&lt;p&gt;Example: an infinite loop in C as a metaphor for addiction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;addiction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;mind&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;mind&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mind&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mind&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An infinite loop is usually considered a bug, but here it becomes an artistic device.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Dependence on natural language
&lt;/h3&gt;

&lt;p&gt;Can code poetry avoid relying on English? That’s the holy grail. Most authors use English words as variable names — e.g., an SQL query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;hand&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;mine&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;restaurant&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;nearby&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;would&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is essentially English wrapped in SQL syntax. But if one could express meaning purely through the programming language itself (without borrowed natural language) — that would be a new art form, understandable to any developer regardless of their mother tongue.&lt;/p&gt;




&lt;h2&gt;
  
  
  Not just “normal” languages
&lt;/h2&gt;

&lt;p&gt;At the &lt;strong&gt;Code Poetry Slam&lt;/strong&gt; (Stanford, 2013–2015), even non‑Turing‑complete languages like CSS or lists of HTTP status codes are accepted.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;201 created
200 OK
100 continue
303 see other
302 found
409 conflict
403 forbidden
520 origin error
...
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are Apache web server response codes. But arranged like this, they evoke a lyrical mood — reminiscent of human life with its errors, redirects, and successes.&lt;/p&gt;

&lt;p&gt;Or CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.ocean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;cornflowerblue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;pitch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;high&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.boat&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;firebrick&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;94deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.rescue-team&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;visibility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s already a narrative about a capsized boat and a rescue team.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbauzlzgq8oehzjnyf5t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbauzlzgq8oehzjnyf5t.png" alt="Poetry in Code" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;I think this practice is more than a hype. Behind it are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;therapeutic relief (programmers unwind through creativity);&lt;/li&gt;
&lt;li&gt;carnivalisation of professional language;&lt;/li&gt;
&lt;li&gt;the search for new expressive means.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, when the element of contrast wears off, the wave may subside. But for now, such texts keep appearing, and a subculture has already formed around them. Over time, researchers will amass a whole corpus of “poetic programs”.&lt;/p&gt;




&lt;h2&gt;
  
  
  Link to the full paper
&lt;/h2&gt;

&lt;p&gt;If you want to dive deeper, here’s the PDF (in Russian, but with an English abstract and plenty of code examples):&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://nevmenandr.github.io/portfolio/assets/pdf/21.pdf" rel="noopener noreferrer"&gt;https://nevmenandr.github.io/portfolio/assets/pdf/21.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;APA citation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Orekhov, B. (2016). Stikhi v programmnom kode: sovremennyy opyt i metodika analiza [Poetry in program code: Contemporary experience and analysis methods]. &lt;em&gt;Kritika i Semiotika&lt;/em&gt;, (2), 94–101. &lt;a href="https://nevmenandr.github.io/portfolio/assets/pdf/21.pdf" rel="noopener noreferrer"&gt;https://nevmenandr.github.io/portfolio/assets/pdf/21.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BibTeX citation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight bibtex"&gt;&lt;code&gt;&lt;span class="nc"&gt;@article&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;Orekhov2015programmpoetry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Стихи в программном коде: современный опыт и методика анализа}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Орехов, Борис}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2016}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;journal&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Критика и семиотика}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;number&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;pages&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{94--101}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;issn&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2307-1737}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;keywords&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{poetry discourse, poetic text analysis, programming languages}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Let me know in the comments — have you ever tried writing “code poetry”? Or do you know other examples? 👨‍💻📜&lt;/p&gt;

</description>
      <category>poetry</category>
      <category>programminglanguages</category>
      <category>code</category>
    </item>
    <item>
      <title>Verse Markup Language (VML)</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Sun, 07 Jun 2026 04:02:53 +0000</pubDate>
      <link>https://dev.to/nevmenandr/verse-markup-language-vml-37o4</link>
      <guid>https://dev.to/nevmenandr/verse-markup-language-vml-37o4</guid>
      <description>&lt;h2&gt;
  
  
  Verse Markup Language (VML): When Poetry Meets Code
&lt;/h2&gt;

&lt;p&gt;Have you ever tried to make a computer understand a poem? Not just find rhymes, but parse where the author is, where the title is, where the epigraph is, and where the actual verses are? If so, you know how quickly “plain text” becomes a headache.&lt;/p&gt;

&lt;p&gt;I’m &lt;a href="https://nevmenandr.github.io/homepage/" rel="noopener noreferrer"&gt;Boris Orekhov&lt;/a&gt;, and I created &lt;strong&gt;&lt;a href="https://github.com/nevmenandr/VML" rel="noopener noreferrer"&gt;VML&lt;/a&gt; (Verse Markup Language)&lt;/strong&gt; — a minimalist markup language that turns the chaos of poetic text into a machine-readable structure. And yes, it’s already working on real‑world corpora (e.g., the &lt;a href="http://web-corpora.net/bashcorpus/" rel="noopener noreferrer"&gt;Bashkir Poetry Corpus&lt;/a&gt; with &amp;gt;10,000 poems).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A note on language:&lt;/strong&gt; The full &lt;a href="https://github.com/nevmenandr/VML" rel="noopener noreferrer"&gt;VML&lt;/a&gt; specification is written in Russian. However, given the current state of machine translation (DeepL, GPT-4, etc.), this is hardly a barrier. Anyone can obtain an accurate, readable English version in seconds. The tag names and syntax are language-agnostic anyway — &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;&amp;amp;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;n&amp;gt;&lt;/code&gt; work the same in any idiom.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not TEI, JSON, or Markdown?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TEI&lt;/strong&gt; – a beast. It can handle anything, but marking up a single poem feels like writing a new gospel in XML. Impossible for handling for humanists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON&lt;/strong&gt; – great for machines, but a humanist will close their laptop in horror.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown&lt;/strong&gt; – fine for documentation, but not for strict metadata markup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;VML&lt;/strong&gt; is a text format that stays human‑readable and is easy to parse. Its tags are short (&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;&amp;amp;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;n&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;rm&amp;gt;&lt;/code&gt;), the hierarchy is strict, and learning it takes 5 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimal example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&amp;gt;&lt;/span&gt; William Blake
&lt;span class="err"&gt;&amp;lt;&amp;amp;&lt;/span&gt;&amp;gt; Tyger Tyger, burning bright,
In the forests of the night,
What immortal hand or eye,
Could frame thy fearful symmetry?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; – author (stays active until the next &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;&amp;amp;&amp;gt;&lt;/code&gt; – the first line of the poem (incipit). Without it, the document is invalid.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From this you can already extract the author, the title (none here), the list of lines, and even count them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&amp;gt;&lt;/span&gt; Emily Dickinson
&lt;span class="nt"&gt;&amp;lt;rm&amp;gt;&lt;/span&gt; Hope is the thing with feathers   &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;-- epigraph (prose insert)
&lt;span class="err"&gt;&amp;lt;&amp;amp;&lt;/span&gt;&amp;gt; “Hope” is the thing with feathers -
That perches in the soul -
And sings the tune without the words -
And never stops - at all -
&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;*&amp;gt; And sweetest - in the Gale - is heard -
And sore must be the storm -
That could abash the little Bird
That kept so many warm -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;rm&amp;gt;&lt;/code&gt; – prose insert (epigraph, dedication, stage direction). Each line gets its own &lt;code&gt;&amp;lt;rm&amp;gt;&lt;/code&gt;. Poetry parser skips it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;*&amp;gt;&lt;/code&gt; – start of a stanza. Stanzas are separated by repeated &lt;code&gt;&amp;lt;*&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbfeyshs8a5y9j40s5z8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbfeyshs8a5y9j40s5z8.png" alt="VML logo" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Poetry cycles
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;nn&amp;gt;&lt;/span&gt; Sonnets to the Young Man
&lt;span class="nt"&gt;&amp;lt;n&amp;gt;&lt;/span&gt; Sonnet 1
&lt;span class="err"&gt;&amp;lt;&amp;amp;&lt;/span&gt;&amp;gt; From fairest creatures we desire increase...
&lt;span class="nt"&gt;&amp;lt;n&amp;gt;&lt;/span&gt; Sonnet 2
&lt;span class="err"&gt;&amp;lt;&amp;amp;&lt;/span&gt;&amp;gt; When forty winters shall beseige thy brow...
&lt;span class="nt"&gt;&amp;lt;/nn&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;&amp;lt;nn&amp;gt; ... &amp;lt;/nn&amp;gt;&lt;/code&gt; – a cycle. Inside are several poems, each with its own title &lt;code&gt;&amp;lt;n&amp;gt;&lt;/code&gt; and incipit &lt;code&gt;&amp;lt;&amp;amp;&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if an epigraph appears before an incipit without a title?
&lt;/h2&gt;

&lt;p&gt;Two poems in a row, and the second has an epigraph. How do you avoid attaching the epigraph to the first poem? VML provides &lt;code&gt;&amp;lt;&amp;amp;&amp;amp;&amp;gt;&lt;/code&gt; – an explicit start of a new poem &lt;strong&gt;before&lt;/strong&gt; an incipit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&amp;gt;&lt;/span&gt; John Keats
&lt;span class="err"&gt;&amp;lt;&amp;amp;&lt;/span&gt;&amp;gt; A thing of beauty is a joy for ever...
...
&lt;span class="err"&gt;&amp;lt;&amp;amp;&amp;amp;&lt;/span&gt;&amp;gt;
&lt;span class="nt"&gt;&amp;lt;rm&amp;gt;&lt;/span&gt; Epigraph to “Ode to a Nightingale”
&lt;span class="nt"&gt;&amp;lt;rm&amp;gt;&lt;/span&gt; “Thou wast not born for death, immortal Bird!”
&lt;span class="err"&gt;&amp;lt;&amp;amp;&lt;/span&gt;&amp;gt; My heart aches, and a drowsy numbness pains...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  For the geeks: “ladder” layout
&lt;/h2&gt;

&lt;p&gt;If you’re a verse scholar, you might need explicit  “ladder” markup:&lt;/p&gt;

&lt;p&gt;For example Mayakovsky:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;&amp;amp;&amp;gt; Я волком бы &amp;lt;l-2&amp;gt; выгрыз &amp;lt;l-3&amp;gt; бюрократизм.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tools
&lt;/h2&gt;

&lt;p&gt;The repository contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/nevmenandr/VML/blob/main/Code/vml_validator.py" rel="noopener noreferrer"&gt;Validator&lt;/a&gt;&lt;/strong&gt; (&lt;code&gt;vml_validator.py&lt;/code&gt;) – checks syntax, nesting, escaping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/nevmenandr/VML/blob/main/Code/vml_counter.py" rel="noopener noreferrer"&gt;Counter&lt;/a&gt;&lt;/strong&gt; (&lt;code&gt;vml_counter.py&lt;/code&gt;) – outputs statistics: authors, poems, lines, cycles.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 vml_validator.py poem.vml
python3 vml_counter.py poem.vml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Where is it already used?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bashkir Poetry Corpus&lt;/strong&gt; (&lt;a href="http://web-corpora.net/bashcorpus/" rel="noopener noreferrer"&gt;http://web-corpora.net/bashcorpus/&lt;/a&gt;) – more than 10,000 poems marked up in VML. Based on this corpus, a monograph (Orekhov, 2019) and several articles on quantitative verse studies have been published.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is it for?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Humanists&lt;/strong&gt; who want to build their own corpus without learning XML/JSON.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developers&lt;/strong&gt; who need to extract metadata from poems for NLP tasks (author, date, metre, stanza structure).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digital Humanities enthusiasts&lt;/strong&gt; looking for a simple, open standard.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full specification&lt;/strong&gt; – &lt;a href="https://github.com/nevmenandr/VML/blob/main/README.md" rel="noopener noreferrer"&gt;README.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository with code and examples&lt;/strong&gt; – &lt;a href="https://github.com/nevmenandr/VML" rel="noopener noreferrer"&gt;github.com/nevmenandr/VML&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language DOI&lt;/strong&gt; – &lt;a href="https://doi.org/10.5281/zenodo.20100191" rel="noopener noreferrer"&gt;10.5281/zenodo.20100191&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License&lt;/strong&gt; – Apache 2.0 (free to use, modify, and distribute, including commercial use)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Biblio
&lt;/h2&gt;

&lt;p&gt;Orekhov, B. V. (2019). &lt;em&gt;Bashkirskiy stikh XX veka. Korpusnoye issledovaniye&lt;/em&gt; [Bashkir Verse of the 20th Century: A Corpus Study]. Saint Petersburg: Aleteya. 344 p. ISBN 978-5-907189-29-4. (In Russian)&lt;/p&gt;

&lt;h2&gt;
  
  
  P.S. What about escaping?
&lt;/h2&gt;

&lt;p&gt;In real poems, sequences like &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; almost never appear as part of the text. But just in case, escaping exists: &lt;code&gt;\&amp;lt;a&amp;gt;&lt;/code&gt; will be treated as plain &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; and won’t break the parser.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Discussion in the comments is welcome.&lt;/strong&gt; Do you use any formats for poetry markup? Would you like to try VML? Feel free to open issues on GitHub – any feedback is valuable.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://nevmenandr.github.io/homepage/" rel="noopener noreferrer"&gt;Boris Orekhov&lt;/a&gt;, 2026&lt;/em&gt;&lt;/p&gt;

</description>
      <category>markup</category>
      <category>poetry</category>
      <category>textcorpora</category>
      <category>metadata</category>
    </item>
    <item>
      <title>Programming as text creation</title>
      <dc:creator>Boris Orekhov</dc:creator>
      <pubDate>Thu, 20 Mar 2025 07:45:26 +0000</pubDate>
      <link>https://dev.to/nevmenandr/programming-as-text-creation-48nk</link>
      <guid>https://dev.to/nevmenandr/programming-as-text-creation-48nk</guid>
      <description>&lt;p&gt;I am a philologist and I need to write texts: scientific papers, popularization articles. But sometimes I want to write code. I often treat code as natural language texts. Just as sometimes you want to try your hand at a new genre, you want to leave behind and offer the community code in a programming language that is not your primary language. &lt;/p&gt;

&lt;p&gt;I used to write a lot in Perl, it was my second language, but now I've thoroughly forgotten it. However, for sentimental reasons I'd like to have &lt;a href="https://github.com/search?q=owner%3Anevmenandr+lang%3APerl+&amp;amp;type=repositories" rel="noopener noreferrer"&gt;Perl code in my github account&lt;/a&gt;, so I had to remember it.&lt;/p&gt;

&lt;p&gt;I tried using ChatGPT to accomplish the task I wanted, but never got the results I wanted. I had to write code the old fashioned way and work out the rules of the language.&lt;/p&gt;

&lt;p&gt;I plan to write some more applications (useful and just beautiful) in different programming languages in the near future and make them available to the public.&lt;/p&gt;

</description>
      <category>perl</category>
      <category>text</category>
    </item>
  </channel>
</rss>
