<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Alex Alejandre</title><link>https://alexalejandre.com/</link><description>Recent content on Alex Alejandre</description><copyright>2025 Alex Alejandre All rights reserved</copyright><lastBuildDate>Fri, 20 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://alexalejandre.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Interview With John Earnest</title><link>https://alexalejandre.com/programming/interview-with-john-earnest/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/interview-with-john-earnest/</guid><description>John Earnest worked as a K programmer, made Decker, WigglyPaint, Lil, oK!</description><content:encoded>&lt;p>&lt;a href="https://github.com/JohnEarnest">John Earnest&lt;/a> (&lt;a href="https://lobste.rs/~Internet_Janitor">Internet_Janitor&lt;/a>) crafts creative, empowering &lt;a href="https://beyondloom.com/things/index.html">projects&lt;/a>. Powering projects &amp;ldquo;impossibly complex for the platforms they&amp;rsquo;re running on&amp;rdquo; like &lt;a href="https://woodring.itch.io/dp-data-flow-in-decker">dp&lt;/a> and &lt;a href="https://cratmang.itch.io/octoma">Octoma&lt;/a>, his project &lt;a href="https://beyondloom.com/decker/">Decker&lt;/a> reminds many of &lt;a href="https://en.wikipedia.org/wiki/HyperCard">HyperCard&lt;/a>, discussed on the &lt;a href="https://youtu.be/0TgdxzCWOXM?si=8EX06wQ6mHSXkAzZ&amp;amp;t=435">Arraycast&lt;/a>. &lt;a href="https://johnearnest.github.io/ok/ike/ike.html">iKe&lt;/a> is a sound and graphics platform for &lt;a href="https://github.com/JohnEarnest/ok">oK&lt;/a>, with example programs like Asteroids on the bottom right.&lt;/p>
&lt;p>In this interview, we discussed array languages (K and Lil), language design and creativity.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Where should we start? Oh! A chicken just jumped in your lap, cute! What&amp;rsquo;s her name?&lt;/strong>&lt;/p>
&lt;p>Galina, like the mineral. I had two, but her sister passed away; these things happen.&lt;/p>
&lt;p>Most of my professional experience is with K, often regarded as a successful fusion of APL sensibilities and some Lisp ideas. While pretty much every other APL has the notion of strictly rectangular arrays as the data carrier, in K, nested tree-like lists are no problem. K&amp;rsquo;s syntax is essentially m-expr like Lisp was originally intended to be.&lt;/p>
&lt;p>&lt;strong>How do you architect large systems in K? I&amp;rsquo;ve only read big APL systems where short, elegant primitives drown among many long names and even a single declaration per file like the worst Java excesses. Is there a way to avoid this?&lt;/strong>&lt;/p>
&lt;p>In Lisp, everything intentionally looks like it&amp;rsquo;s made out of the same material. Racket or Clojure have a bit more syntax than just s-expr but macros intentionally look the same as a function, both good and bad depending on perspective. The crystalline quality of an APL-family language is diminished when you build a huge codebase and it starts to resemble more conventional languages.&lt;/p>
&lt;p>In the K and Q codebases I&amp;rsquo;ve worked on, you have subsystems broken into their own files, excessive commenting&amp;hellip; Local names remain short but module-level names tend longer. The overall architecture looks the same as if you&amp;rsquo;d implemented it in any other dynamic language, but the business language shrinks down into tiny knots; k expresses what&amp;rsquo;s a page of code in another language, in 2-3 lines, so you&amp;rsquo;re left looking at names.&lt;/p>
&lt;p>APLs and Lisps are both very high-level, expressive languages, but in a Lispy language you learn to build up a set of abstractions and &lt;a href="https://www.youtube.com/watch?v=lw6TaiXzHAE">grow the language&lt;/a> in the direction of what you&amp;rsquo;re trying to do. In the APL languages, the ideal is programming without abstractions. You write the program directly in terms of the language. Design discussions often focus around what ought to be a primitive vs. an idiom (simple composition). Indeed, some strident APLers advocate against libraries as files of code you import, but rather think of them as a file of snippets you can modify to do exactly what you need.&lt;/p>
&lt;p>In the novel &lt;em>The Mote in God&amp;rsquo;s Eye&lt;/em>, the engineer caste would never just build a chair, rather they&amp;rsquo;d build the precise chair one person needs at this exact time. It&amp;rsquo;s different way of approaching code reuse: Instead of taking for granted and assuming everything inside this encapsulation works and has a reasonably narrow interface vs. decomposing, adapting and blending it to the intended system. Certain problems have enough irreducible complexity to them that it&amp;rsquo;s difficult to take this approach; a web browser has to deal with enormous, complicated, evolving standards and there are material reasons to want the codebase to correspond to the structure of the specification. But if your task isn&amp;rsquo;t making a standards compliant browser but building something with the &lt;em>function&lt;/em> of a web browser, you have opportunities for tearing down preconceived ideas and simplifying the problem. This philosophy is quite compatible with Forth where you also program without abstractions.&lt;/p>
&lt;p>As an aside, high and low level languages are a false dichotomy. Paul Graham&amp;rsquo;s &lt;a href="https://paulgraham.com/avg.html">Blub article about Lisp&lt;/a> posits a linear scale of goodness in language, but it&amp;rsquo;s at least a lattice. Some languages are objectively better or worse designed, but once you add a context and something you want to &lt;em>do&lt;/em> with the language, there are multiple good languages, multiple dimensions of expressiveness and rigidity, rigor and plasticity, which can benefit different domains.&lt;/p>
&lt;p>&lt;strong>How does one determine their context? It&amp;rsquo;s quickly &amp;ldquo;non-technical.&amp;rdquo;&lt;/strong>&lt;/p>
&lt;p>That&amp;rsquo;s what programming&amp;rsquo;s about. Whether you&amp;rsquo;re an artist choosing interesting constraints for yourself or you&amp;rsquo;re an engineer receiving a set of constraints you need to satisfy: Does it need to be fast, deploy on a tiny or exotic device, be maintained for a long time by many people or should it be portable to things which don&amp;rsquo;t yet exist? There are many dimensions to think about.&lt;/p>
&lt;p>A controversial opinion, in many contexts static type systems are overrated. They obviously excel in certain contexts: If you&amp;rsquo;re making something irreducibly complex which won&amp;rsquo;t ever fit in a single person&amp;rsquo;s head, then expressing the constraints in a machine readable set of schemas, solves coordination or social problems. But when programming in the small, when things are changing rapidly, conciseness and immediacy shine and types constrain your thinking unnecessarily.&lt;/p>
&lt;p>&lt;strong>Lil&amp;rsquo;s error model for human-scale systems applies perfectly here. Redefining your problem and tools lets you ignore entire categories of complexity.&lt;/strong>&lt;/p>
&lt;p>To clarify in context, Lil has syntactic errors but no runtime errors, so every well-formed Lil program has defined behavior even if silly or not necessarily matching what you hope. The idea&amp;rsquo;s that adding constraints to say &amp;ldquo;this operation is invalid or erroneous&amp;rdquo;, you are making the space of valid programs sparser and further apart. If your goal is as much concision as possible, you want to pack as much meaning in as you can.&lt;/p>
&lt;p>I wouldn&amp;rsquo;t recommend anyone build a million line codebase in Lil, but it&amp;rsquo;s pretty good at solving problems in 50 lines. In the procession of ideas from k, q and the APL family, their terseness is a good user interface at a REPL. With programming constructs letting you write without explicit loops nor conditionals, you have a piece of code with a cyclomatic complexity of one and &lt;em>can&lt;/em> test it interactively in the REPL as you build it. You have different kinds of assurances than in another language with different techniques. Of course, it doesn&amp;rsquo;t always work that way.&lt;/p>
&lt;p>Anytime I add a new library to the Decker ecosystem or a new operator to Lil, there&amp;rsquo;s a fun design problem of how to make it useful in as many situations as possible. What does it mean to apply this to a dictionary, list or table? How can you unify them or simplify the application logic?&lt;/p>
&lt;p>&lt;strong>How do you actually try to answer those questions, iterate and get a tighter fit?&lt;/strong>&lt;/p>
&lt;p>My programming philosophy is using the language a lot. I build applications, look for patterns with a lot of repetition or difficult/clumsy to express and any time many people resort to a library, the question&amp;rsquo;s whether this is so open-ended, application-specific or unclear about the right way to do it that it should be in a library or should it be in the language itself?&lt;/p>
&lt;p>I caution language designers not to do too much cold golf in their language. People into PLT do a lot of fun puzzles, but puzzles have recurring themes less represented in practical applications. You can go crazy adding features for code golf, but every language has a complexity budget. You hope you spend it on beneficial things. Lil spends a lot of that budget on its integrated &lt;a href="https://beyondloom.com/decker/lil.html#lilthequerylanguage">query language&lt;/a> with first class tables, which comes in handy in many domains.&lt;/p>
&lt;p>&lt;strong>How do you find projects or ideas for applications?&lt;/strong>&lt;/p>
&lt;p>Having Decker as a rapid prototyping system, I just get ideas of what I can build and sometimes realize I need a missing dependency too! Last year, I wrote a fun little program to generate Valentine&amp;rsquo;s Day cards with clip-art as PDF files to print out and fold. So I had to write a PDF generation library, because I didn&amp;rsquo;t want to develop a cross-platform printing API. A controlled subset i.e. generating PDFs, isn&amp;rsquo;t so bad and every platform has working PDF viewers with print functions!&lt;/p>
&lt;p>There are so many things me or my users might want to build which often fork into further problems. A lot of it&amp;rsquo;s just building tools and games. I made a graph plotting library for my personal budgeting application. If I need to add a new feature, editor mode&amp;rsquo;s one click away.&lt;/p>
&lt;p>It&amp;rsquo;s difficult to help new &lt;a href="https://beyondloom.com/decker/">Decker&lt;/a> users understand documents and applications don&amp;rsquo;t need a hard separation. The data lives in the deck. The deck is an application. You can implement your own &lt;code>undo&lt;/code>, &lt;code>redo&lt;/code>, &lt;code>save&lt;/code> and &lt;code>load&lt;/code> or just leverage them as properties of the environment itself. If you want to write a CRUD application, plopping a grid widget onto a card which already supports adding and removing by rows, sort by column etc. You can switch between programming, editing, drawing and using the application.&lt;/p>
&lt;p>What really makes me happy is when users take and modify some deck or card to suit their preferences, rearrange things, change the font, draw on the back of cards. Wouldn&amp;rsquo;t it be great if more of our applications today tolerated that kind of customization?&lt;/p>
&lt;p>&lt;strong>It&amp;rsquo;s so empowering!&lt;/strong>&lt;/p>
&lt;p>We have a small group of people who really like Decker and build stuff. It takes time to find and collect the people who will have a lot of time with it. Over time, I&amp;rsquo;m also improving the tool. I&amp;rsquo;ve made a lot of performance improvements over the 3 years it&amp;rsquo;s been public. In the last year, we added partial native Unicode support so it&amp;rsquo;s suitable for people speaking other languages.&lt;/p>
&lt;p>&lt;strong>How do you cultivate a &lt;a href="https://internet-janitor.itch.io/decker/community">community&lt;/a>? Even individual applications built on Decker have communities!&lt;/strong>&lt;/p>
&lt;p>I&amp;rsquo;ve always felt the responsibility to answer all questions I can. As the designer of Lil, I&amp;rsquo;m the world&amp;rsquo;s foremost Lil programmer and I wrote all the documentation. If the documentation is unclear or incomplete, I can fix it live! Having the patience to answer beginner questions is the only way to teach others to use the system. By leading by example, answering questions and giving advice, others have begun to do the same and answer questions too! We have a growing group of enthusiasts with their own ways of approaching things. I think that&amp;rsquo;s really great.&lt;/p>
&lt;p>Making the Decker ecosystem as appealing and useful as possible to people who don&amp;rsquo;t conventionally consider themselves as programmers is very important. We have a lot of artists, writers and other creative people looking for ways to make their ideas interactive. I want to make Decker as useful as possible without any programming. If they&amp;rsquo;re willing to learn a little bit, I want them to then get a lot out of that.&lt;/p>
&lt;p>I&amp;rsquo;ve always thought of programming as a wonderful, expressive medium. The act of writing a program about something is a way of learning about that something. If I want to make a program which helps generate audio, I&amp;rsquo;ll learn a lot about digital signal processing, sound, maybe music theory. I want as many people as possible to at least have the opportunity to dip their toes.&lt;/p>
&lt;p>&lt;strong>How can we help people see programming as a tool of exploration and learning?&lt;/strong>&lt;/p>
&lt;p>Typically, I approach this in the same way as language design: Start with applications first! Learning to build anything requires you to get some rough, incomplete, flawed understanding of your domain to get it to work at all. If you solve several sets of problems in a domain, you&amp;rsquo;ll see the shape of things you have to do in multiple places. Writing a program requires making the details more concrete than merely writing about it on paper, leading to crisper understanding. This is why programming really interests me.&lt;/p>
&lt;p>We can solve things in a human way, a statistical way or with engineering-esque rules of thumb, but turning them into algorithms we can truly understand them! (It&amp;rsquo;s unfortunate how the popular use of the word algorithm inverted its original meaning. As a computer scientist, it means totally known discrete steps to carry out something while the popular understanding sees a black box with inconceivable inner workings.) Learning to drag heuristics, rules of thumb and statistical approximations into discrete, understandable programs is lovely, intellectually satisfying! But not everything has to be that way either. You can make toys, games, puzzles without understanding everything; it&amp;rsquo;s just about the effect you&amp;rsquo;re trying to achieve like a magic trick or a film.&lt;/p>
&lt;p>&lt;strong>How does Lil help people write programs?&lt;/strong>&lt;/p>
&lt;p>I think of Lil as a less beautiful language than K. It&amp;rsquo;s a set of pragmatic compromises. K is a very pragmatic language among the APLs, refined in the crucible of high frequency trading and quant work; it had to be plastic and fast with the tool box for solving those problems. When you look at K, the irregular aspects of the design will become apparent when you realize what specific thing Arthur needed to do.&lt;/p>
&lt;p>K has a regular adverb set i.e. higher order abstract iteration features with great symmetry. You have &lt;code>over&lt;/code>: &lt;code>/&lt;/code> (known as reduce &lt;code>reduce&lt;/code>) &lt;code>scan&lt;/code>: &lt;code>\&lt;/code> (&lt;code>reduce&lt;/code> where you keep intermediate steps) &lt;code>each right&lt;/code>: &lt;code>/:&lt;/code> and &lt;code>each left&lt;/code>: &lt;code>\:&lt;/code> then &lt;code>each&lt;/code>: &lt;code>'&lt;/code> and &lt;code>each prior&lt;/code>: &lt;code>':&lt;/code> which is specifically for zipping a sequence against a 1 shifted version of itself. It just turns out that&amp;rsquo;s really useful in its domain (running differences, changing ratios) and common enough to warrant an adverb form!&lt;/p>
&lt;p>Lil is a stripped down, less beautiful version of Q from a certain perspective. It leans more heavily on tokenized names than symbols, relies less on overloaded meanings. In k, most symbols on your keyboard have at least 2 meanings (monadic and dydadic, taking one or two arguments, not a monoid in the category of endofunctors). In Lil, they&amp;rsquo;re peeled apart; an operator is either an infix dyad or a prefix monad. K has flexible projection (partial application) and currying support, which Lil has less of. Lil has less adverbs.&lt;/p>
&lt;p>Basically, I tried to make Lil less scary for beginners. When you get better at an APL, you begin to appreciate symbolic notation and how it lets you see words and phrases in a few symbols which have a unitary meaning together. With keywords, you lose the ability to grasp an algorithm from its shape.&lt;/p>
&lt;p>But Lil looks like Lua to be approachable for a beginner who&amp;rsquo;s used Python, JavaScript or anything dynamic. But secretly it&amp;rsquo;s a pure functional language; all the built-in data types are immutable, you can do equational reasoning, it has tail call elimination. Secretly inside of that, it&amp;rsquo;s even an array language. It&amp;rsquo;s designed so people can approach it and use a tiny, narrow subset in an unsurprising way without hammering them with how exotic and exciting it is. But the deeper you go into it, it lets you use so many styles of programming in one language! The hope I have is that people who ease themselves into Lil will find the language has a lot of headroom to grow and take on more complicated things. And also, there are so many things I&amp;rsquo;d find intolerable to not have access to like implicit vector arithmetic; so many Decker APIs are built around pairs like positions on screen which you can just add together! You very rarely have to do something on the x-coordinate of an object then on the y-coordinate, nor iterate over the points in a polygon then draw the lines together because the canvas drawing API accepts an entire &lt;a href="https://www.reddit.com/r/gis/comments/62tjkc/why_is_it_called_polylines_and_not_lines/">polyline&lt;/a>. I can generate an entire polyline without a loop because I have range operators and implicit arithmetic.&lt;/p>
&lt;p>There&amp;rsquo;s some sleight of hand making the simplest things people want to do as easy as they can be; the power in the language does not come at the expense of scaring people off.&lt;/p>
&lt;p>&lt;strong>Arthur Whitney didn&amp;rsquo;t do the first part, he sought pure power and speed! How did you go about learning K? I used &lt;a href="https://xpqz.github.io/kbook/Introduction.html">What about k?&lt;/a>, &lt;a href="https://github.com/kparc/kcc">kcc&lt;/a> and your &lt;a href="https://github.com/JohnEarnest/ok/blob/gh-pages/docs/Manual.md">oK manual&lt;/a>!&lt;/strong>&lt;/p>
&lt;p>I had bounced off &lt;a href="https://www.jsoftware.com/#/README">J&lt;/a> in my earlier career. The J manual was a really slow burn, telling you how to do conditionals or what a number is which felt like any other programming language. But I read about k and the impending &lt;a href="https://fall.tr/kos">kOS&lt;/a>, about an extraordinarily effective programmer writing human-scale programs and I found it romantic. I wanted to play with k but didn&amp;rsquo;t have an interpreter, but I was able to find the &lt;em>manual&lt;/em>. So I literally read the K2 reference manual front to back a few times and implemented an interpreter behaving as described. Of course, looking back that was a mess and I made many mistakes but it was a good way to learn the language.&lt;/p>
&lt;p>Of course, I did many of the things anyone else does when learning a language: Do some &lt;a href="https://projecteuler.net/">Project Euler&lt;/a>, do some puzzles and gradually tackle more complicated things. I ended up building this system called &lt;a href="https://github.com/JohnEarnest/ok/tree/gh-pages/ike">Ike&lt;/a>, a graphical programming toolkit you can wire to input events, draw polygons and bitmaps on the screen, play sound. So I implemented some &lt;a href="http://johnearnest.github.io/ok/ike/ike.html">arcade games&lt;/a>, trying to do more open ended things instead of batch mode programs. Eventually I got some opportunities in consulting and technical writing which led me to professional k work. It&amp;rsquo;s quite difficult to work your way into the places these languages are used; but they understand they won&amp;rsquo;t get candidates deeply familiar with these languages. They&amp;rsquo;re looking for people willing to give it a try in spite of it not looking like Java. There&amp;rsquo;s also some luck involved which I try to pay forward.&lt;/p>
&lt;p>&lt;strong>You really do pay it forward empowering people with Decker, oK etc. What inspires you?&lt;/strong>&lt;/p>
&lt;p>I think creative expression is really important. Computers, networks and the web give us enormous opportunities to exercise that creative expression. I want programming to be seen more as a liberal art than something career-oriented. I&amp;rsquo;m always frustrated by politicians discussing computer education in terms of earning potential; we don&amp;rsquo;t discuss algebra, social studies or arts programs under such perspectives. I don&amp;rsquo;t think everyone will enjoy programming, but I think many would benefit from learning a little bit about programming and maybe discovering they enjoy it. Distilling it down, we should consider computing as an art.&lt;/p>
&lt;p>The art of programming&amp;rsquo;s always been intertwined with the needs and preferences of industry. But there&amp;rsquo;s so much in programming that&amp;rsquo;s like poetry and sculpture; you&amp;rsquo;re choosing your words carefully, you&amp;rsquo;re defining space. But when making a webapp for your e-commerce company, it may be hard to feel it. Nevertheless, there&amp;rsquo;s this seed of elegance, of intellectual joy to programming, the philosophy of writing programs as a vehicle to understand things about the world.&lt;/p>
&lt;p>There&amp;rsquo;s always the curse where if programming is an art, it&amp;rsquo;s not very accessible. It&amp;rsquo;s easier to appreciate a beautiful painting, perhaps more cerebral to appreciate certain kinds of poems, but you really need a lot of technical grounding to appreciate a beautiful program, which doesn&amp;rsquo;t diminish it as an art. If anything, it levels the challenge at us: How can we make this more accessible? How can we communicate this to a broader range of people? I don&amp;rsquo;t know the answers but it&amp;rsquo;s a pursuit worth pursuing.&lt;/p>
&lt;p>&lt;strong>How did you learn computing? What happened until you could implement a language described in a manual?&lt;/strong>&lt;/p>
&lt;p>My family got access to our first computer, which I had a limited ability to play with. I didn&amp;rsquo;t have the internet nor any mentors, but I had a library card and could read unclear, hideously out-of-date books about the same introductory topics until something would click. I spent a long time writing atrocious BASIC more ambitious than my skill level. It just takes a long time. But so many things would have been easier with a mentor to tell me what to read or try, which motivates me to help others.&lt;/p>
&lt;p>It&amp;rsquo;s so rewarding when I hear someone who&amp;rsquo;s used one of my tools or projects say it was rewarding or inspired them to go on their own path. I try to give people a better time than I had.&lt;/p>
&lt;p>&lt;strong>How would you mentor a little you today, who for lack of a better goal would like to engage with your current work.&lt;/strong>&lt;/p>
&lt;p>I would get myself programming in &lt;a href="https://processing.org/">Processing&lt;/a> and shown &lt;a href="https://natureofcode.com/">The Nature of Code&lt;/a>, starting with motivating these ideas of computational geometry and computer graphics with little agents interacting in simulated worlds. I wanted to do so many things in BASIC but didn&amp;rsquo;t understand physics, geometry nor have an expressive enough language to play with agents in a simulation. There&amp;rsquo;s a lot of hard-won stuff as I worked my way through different programming paradigms. I think we all encounter a gateway drug that changes the way we think about things. Astrachan &amp;amp; Wallingford an article called &lt;a href="https://users.cs.duke.edu/~ola/patterns/plopd/loops.html">Loop Patterns&lt;/a> breaking down and categorizing conventional &lt;code>for&lt;/code> and &lt;code>while&lt;/code> loops into abstract strategies like loop and a half where you prime the pump on something then continue the loop or filter things. At the time, it gave a profound realization that these control structures are like lower level components for higher level ideas. When I discovered Python&amp;rsquo;s Itertools while working as a Java programmer (pre-Javastreams) I learned a lot about iterators. This stuff slowly got me more into a functional, abstract way of describing logic until I was ready for J or k.&lt;/p>
&lt;p>I don&amp;rsquo;t want to give the impression that people using imperative languages are mentally stunted, but learning to think in larger pieces requires thinking in more abstract patterns of programming. My favorite thing about K is how I can go on a walk and think about the solution to a complicated problem in terms of K or Lil primitives, come home and pour out that line or two and see it often work how I was thinking about it. I like to go on long walks to think about programming in general. But I&amp;rsquo;d never been able to be as precise, to carry as many ideas in my mind as when I&amp;rsquo;ve learned these more expressive languages with more abstract tools. When I have to work in something like C, I miss having these tools. It hurts to write a lot more code when I know there&amp;rsquo;s a more concise pattern, a simpler decomposition of an idea.&lt;/p>
&lt;p>The beautiful thing about APL-family languages is you have these thoughtfully, wonderfully designed building blocks that fit together in so many ways, some useful patterns, sort of tiling space. In many programming languages, you&amp;rsquo;ll have a sort function as part of a built-in standard library. You&amp;rsquo;ll have the choice of comparator or choosing between ascending and descending. In APL-family languages it&amp;rsquo;s normally split into two parts: grades &lt;code>&amp;lt;&lt;/code> and &lt;code>&amp;gt;&lt;/code> (APL: &lt;code>⍋&lt;/code> and &lt;code>⍒&lt;/code>) give a permutation vector sorting a collection ascending or descending and indexing &lt;code>@&lt;/code> (&lt;code>⌷&lt;/code>) is the other half. You index a list by the grade up (&lt;code>@&amp;lt;&lt;/code>) of itself in order to sort it. (&lt;code>a: 1 5 3 7; a@&amp;lt;a&lt;/code> returns: &lt;code>1 3 5 7&lt;/code>) By splitting it into 2 pieces, it&amp;rsquo;s now just as easy to sort one list relative to another list which is quite difficult or clumsy in many other languages. (&lt;code>a @&amp;lt; 4 3 2 1&lt;/code> returns: &lt;code>7 4 5 1&lt;/code> while &lt;code>a @&amp;lt; 2 2 1 1&lt;/code> returns: &lt;code>1 5 3 7&lt;/code>)&lt;/p>
&lt;p>People like Iverson and Whitney put a lot of thought into these beautiful decompositions, in these useful general tools. It&amp;rsquo;s unfortunate how people think of APLs as regular expressions for lists like it&amp;rsquo;s this DSL with goofy notation for complicated munging. But when you apply it to broader domains, it&amp;rsquo;s surprising how many kinds of problems you can solve with those same building blocks and data structures.&lt;/p>
&lt;p>&lt;strong>I&amp;rsquo;ve been thinking about &lt;a href="https://alexalejandre.com/programming/unity-of-paradigms/">unifying paradigms&lt;/a> lately. We have operations across whole data structures without looping or e.g. kSQL (related to logic programming), different metaphors for the same data structures and operations. You commented somewhere about tables and the primitives required for them to be a useful data structure for a given problem type. How do you choose what metaphors to use?&lt;/strong>&lt;/p>
&lt;p>The most successful relational programming language in existence is SQL. The dream of the relational family was to separate the logic of exactly what&amp;rsquo;s happening from the data and the description of what we want. Every programmer feels like they ought to know more Prolog than they do; if you learn it, it&amp;rsquo;s like tricking a search algorithm into doing other things too. SQL queries have a smoothness to the solution space (ignoring nits in big queries). In K, if you need to do a specific thing like parse some fiddly record format, if you solve the exact problem in front of you, there&amp;rsquo;s normally some elegant way to do it. But if you change the problem even slightly, the solution will wildly change to something else. It&amp;rsquo;s nicer if small changes to the constraints/requirements of a problem correspond to a small change to the program that solves it. I would argue small changes to a query require small changes to the SQL code (ignoring SQL-engine dependent issues). It&amp;rsquo;s like a unified algorithmic framework for sorting, filtering, mapping, set operations etc. The idea of a new control structure unifying operations is exactly what &lt;a href="https://beyondloom.com/decker/lil.html#lilthequerylanguage">Lil&amp;rsquo;s query language&lt;/a> is intended to be: unifying searching, mapping, filtering, grouping etc. into queries.&lt;/p>
&lt;p>I in no way claim credit for this; Lil&amp;rsquo;s query language is very similar to kSQL/QSQL (the kdb+ query language) but it&amp;rsquo;s generalized further. kSQL&amp;rsquo;s designed to ease simple things for people comfortable with SQL. Then you take the training wheels off and it&amp;rsquo;s a bunch of triadic or pentadic, complicated functions doing row manipulations of a selection in a more general and abstract way etc. Lil like &lt;a href="https://code.kx.com/q/basics/qsql/">QSQL&lt;/a> is a columnar query language; all subexpressions in a query operate on entire columns at once with conforming primitives.&lt;/p>
&lt;p>You can&amp;rsquo;t avoid Lil&amp;rsquo;s Q/K/APL stuff in this context. People who&amp;rsquo;ve wrapped their brains around this write a query which works, then get amazed realizing they can write a query anywhere else too! Lil&amp;rsquo;s query language rules are less rigid than QSQL; you can repeat clauses or do them in any order. They take a table or list of grouped tables and a column expression, evaluate the column expression in related to the table(s) and return a table or list of tables. A &lt;code>where&lt;/code> has a column expression you apply in the context of some tables and received filtered tables as an output. Everything&amp;rsquo;s a pipeline.&lt;/p>
&lt;p>&lt;strong>Open-source ks mostly ignore kSQL, what inspired you to go down this path?&lt;/strong>&lt;/p>
&lt;p>When first getting into k, I didn&amp;rsquo;t recognize the expressive benefits of tables. From other languages, you think of a table as dictionary (or list of) with some extra constraints but it&amp;rsquo;s both; you can look at it from a vertical or horizontal expression. At work we did a lot of data manipulation. At 1010data, all the infrastructure was in k3. Beyond that, it exposed an ad-hoc query language interface for taking a gigantic data set and doing bulk operations on it before looking at it in granular detail. You could have a billion row table of every receipt from a grocery store and ask the system questions, see the top 10 most expensive line items, what usually gets bought together at the same time&amp;hellip; This query language had a compositional approach, starting with a table then banging on it with various operations, filtering it down, merging in another table, computing another column. The step by step process, seeing the intermediate steps, was a rather powerful way to think about transforming data. If you take an SQL expression and know what you&amp;rsquo;re doing, you can remove clauses and get something similar, but they go together in confusing orders and have surprising consequences. It&amp;rsquo;s difficult to get a step by step reasoning about an SQL query even if you&amp;rsquo;re a DB expert.&lt;/p>
&lt;p>Another nice thing is how a compositional query language, where every prefix of a query is a valid query, lets you aggressively cache results. If you grab a table, select a subset, compute a column, but then want to change something midway through the query - all the logical tables which flowed through the prefix of that table are cached and available. That&amp;rsquo;s how you get an interactive system querying against gigantic data sets across a cluster without giving up and working on a sample.&lt;/p>
&lt;p>Others are doing this too. &lt;a href="https://www.nushell.sh/">Nushell&lt;/a> has been around for a while. &lt;a href="https://ryelang.org">Rye&lt;/a> and Lil are prominent new examples of tables. There are elements of this in &lt;a href="https://learn.microsoft.com/en-us/dotnet/csharp/tutorials/working-with-linq">LINQ&lt;/a> for C# which lets you query iterables with SQL verbs. LINQ&amp;rsquo;s designed around simpler data structures, but I believe you could make a table data structure and overload it so LINQ would operate on it all at once.&lt;/p>
&lt;p>In APL, we learn the principle of operating on entire data structures at once rather than piece by piece. Even in functional programming, you set up a pipeline but you&amp;rsquo;re conceptually thinking of and implementing operations on the individual pieces. (That has its own advantages, if you want to demand-driven execute something without computing the whole infinite set first.)&lt;/p>
&lt;p>I&amp;rsquo;ve written so many practical programs in JS or what have you, where I&amp;rsquo;m operating on what&amp;rsquo;s conceptually a table but expressing it as a sequence of dictionaries with a uniform structure. Think of how many times you&amp;rsquo;ve done this, how many APIs work like this! If you want to manipulate them, it&amp;rsquo;s normally a column-wise operation based on a subset of fields. Maybe you want to reorder them but you obviously don&amp;rsquo;t want to only reorder the prices in a list of sales orders, you want to reorder all the columns in the same way at the same time!&lt;/p>
&lt;p>When you equip yourself with the idea of a rectangular table as a tool of modeling the world, you&amp;rsquo;ll see it in a lot of places. When you model the world this way, you&amp;rsquo;ll notice relational algebra&amp;rsquo;s high level operations like left joins are a useful way of expressing complicated algorithms on that data. Without first class tables, you can grasp at it. Most languages with a data frame probably want something more like a first class table. (Different languages and frameworks have varying degrees of generality about this, so I don&amp;rsquo;t want to sling too many stones.) Many systems have a dataframe but require every column to have the same datatype, which is better than nothing but less general and useful. It&amp;rsquo;s like a reduce operation, where the left and right operations are the same type letting you do &lt;code>min&lt;/code>, &lt;code>max&lt;/code>, &lt;code>product&lt;/code> etc. But if you&amp;rsquo;re constrained to something so rigid, you can&amp;rsquo;t express so many other things. Having records of data which travel together and get manipulated in a uniform way is a useful paradigm. Tables as a first class data structure or at least a convention understood by a large portion of your standard library, will get more adoption over time just as we have seen ideas like map and filter become common, even expected tools.&lt;/p>
&lt;p>I don&amp;rsquo;t think it&amp;rsquo;s hard to do what Lil does in more experimental languages, but many of Lil&amp;rsquo;s design decisions specifically allow it to work out as nicely as it does. A column expression in Lil is just a normal expression where there happened to be columns in the table bound as locals. There&amp;rsquo;s no special magic or case of implicit iteration. In a language without implicit iteration or element-wise equality, you&amp;rsquo;d have to invent something. As I understand it, R has blocks behaving in a special, lexical way and this mechanism provides a light-weight lambda function to symbolically spread an operation across a whole table. I think Ruby has similar facilities.&lt;/p>
&lt;p>&lt;strong>How do you approach designing software? You make many applications with Lil and Decker! How intentionally do you delineate what the universe is, what goals you want. Are you able to consider them done or do you randomly come back to add features?&lt;/strong>&lt;/p>
&lt;p>Using the tools I build is the best way I know to improve them. Using Decker to build interactive documentation and example projects keeps me constantly aware of what things are clunky to use, what recurring problems don&amp;rsquo;t have solutions at hand, and it does often help me discover bugs or design flaws before users are bitten by them. Simple things ought to be easy, so when they end up being difficult in practice that&amp;rsquo;s a signal. The tools grow to suit the needs of the projects I dream up to build, and the projects my users try to build.&lt;/p>
&lt;p>Sometimes those projects take on something of a life of their own. &lt;a href="https://beyondloom.com/blog/onwigglypaint.html">WigglyPaint&lt;/a> is a drawing tool I wrote in Decker that managed to become wildly popular with artists in China, and then later the broader web. I see it as something of a &amp;ldquo;social proof&amp;rdquo; for Decker as an authoring tool, since the vast majority of the people who have enjoyed WigglyPaint don&amp;rsquo;t have any idea it&amp;rsquo;s a Decker tech-demo; they like it on its own merits.&lt;/p>
&lt;p>If they were to dig a little deeper, though, they might be surprised to discover that the drawing tool they&amp;rsquo;re using resides within an entirely different drawing program. Everything is plastic: you can readily alter the color palettes, rearrange tools on the workspace, introduce a new brush shape, or even add complex, entirely new features without restarting anything or switching to a different application. Every exported &amp;ldquo;deck&amp;rdquo; comes with all the editing tools, so every user is empowered to take things apart and put them back together as they please. It&amp;rsquo;s lovely to have a self-contained rapid prototyping environment where everything you might need is close at hand and the whole system is &amp;ldquo;human-scale&amp;rdquo;; a person can fit it all in their head at once.&lt;/p>
&lt;p>In the right hands, &lt;a href="https://kx.com/products/kdb/">kdb+&lt;/a> is a similar story; it&amp;rsquo;s a single vertically-integrated technology that can be used to construct all sorts of distributed systems- databases, load-balancers, caches, ticker plants- with a page or so of code. Not just because K is a dense, expressive language, but because everything is made out of modular pieces that all fit together well. You can prototype &lt;em>entire&lt;/em> systems without the overhead of selecting, orchestrating, and then interoperating with a bunch of other products with their own APIs and protocols.&lt;/p>
&lt;p>&lt;strong>Wow! How much people on open-source Ks without these features missing out? J has jd, the &lt;a href="https://code.jsoftware.com/wiki/Vocabulary/Foreigns">foreigns&lt;/a> but&amp;hellip;&lt;/strong>&lt;/p>
&lt;p>Quite a bit. There are several high-quality FOSS K interpreters available now (&lt;a href="https://codeberg.org/growler/k">ngn/growler&lt;/a>, &lt;a href="https://github.com/kevinlawler/kona">Kona&lt;/a>, &lt;a href="https://github.com/ktye/i">ktye/i&lt;/a> besides my own &lt;a href="https://github.com/JohnEarnest/ok">oK&lt;/a>) which are great for learning the language &lt;em>itself&lt;/em>, but most of them don&amp;rsquo;t have the &amp;ldquo;batteries-included&amp;rdquo; you&amp;rsquo;d want to build a practical &lt;em>system&lt;/em>, like IPC, or a &amp;ldquo;K-Tree&amp;rdquo;, or support for first-class tables and queries. K2 even came with facilities for making data-bound GUI applications, but there&amp;rsquo;s no equivalent for modern dialects of K. (Unless you count Lil?)&lt;/p>
&lt;p>&lt;strong>Readers will enjoy your discussion of K versions and history on the &lt;a href="https://www.youtube.com/watch?v=1kwBPRf-5qs">ArrayCast&lt;/a>.&lt;/strong>&lt;/p>
&lt;p>&lt;strong>K itself is implemented simply through its unique paradigm. Alan Kay with STEPS tried to make a simpler OS too. Aaron Hsu believes doing everything through the array languages is optimal. How do we balance different goals of simplicity, of the user being able to write things easily on a certain level of abstraction, of the implementation to iterate more easily towards an optimal system etc.?&lt;/strong>&lt;/p>
&lt;p>The conventional wisdom is usually to start with a &lt;em>very&lt;/em> simple language- maybe even just a system of axioms- and build up a stack of progressive abstractions to grow your source language toward a solution for your specific problem. This is both the Lispy way and the Forthy way of doing things, with varying degrees of mechanical sympathy and appetite for encapsulation.&lt;/p>
&lt;p>APLs suggest a different approach: write your applications &lt;em>as directly in&lt;/em> the language as possible, avoiding the introduction of new abstractions. Represent your data in the datatypes that already exist. All the primitives of the language should fit together in as many useful ways as possible, applicable to as many useful situations as possible. As we tackle new domains with applications, the languages grow, but &lt;em>very slowly&lt;/em> and deliberately.&lt;/p>
&lt;p>Tersity of notation lets us think and communicate in terms of programming &lt;em>idioms&lt;/em> that are tailored to fit each situation, rather than &lt;em>libraries&lt;/em> that are reused as sealed units. The abstraction and reuse can live in our heads, instead of on a hard drive. we can write our programs comfortably on paper or a whiteboard rather than &lt;em>needing&lt;/em> an editor or IDE to augment us. It&amp;rsquo;s a very humanist way of programming, I think.&lt;/p>
&lt;p>&lt;strong>How do you like to approach testing?&lt;/strong>&lt;/p>
&lt;p>The best approach to testing will always depend on the nature of the application being tested; I think many of the very strong opinions about &amp;ldquo;the right way&amp;rdquo; to test things you&amp;rsquo;ll find online are a reflection of the domains the authors have worked in. The best tests are easy to write, easy to maintain, and are highly effective at catching regressions. The worst tests are difficult to write, tedious to maintain, and rarely catch mistakes or provide frequent false-positives.&lt;/p>
&lt;p>Interpreters and compilers tend to be relatively pure functions: provide a program fragment, run it, get a specific known result (or a specific error). For this kind of work I like leaning on end-to-end integration tests and avoiding internal test harnesses- makes it easy to compare multiple implementations with a single test suite, too. For something like a webapp frontend or video game, tests are tremendously more complex and tedious to author, and they tend to be quite brittle, prematurely ossifying designs. In Decker I expose public &amp;ldquo;headless&amp;rdquo; scripting APIs and use them to test as much of the surface area of the application as I can, but for the uppermost layers of the GUI I find it most practical to rely on manual testing.&lt;/p>
&lt;p>In APL-family languages we have building-blocks that often let us express complex algorithms as straight pipelines with no &lt;em>explicit&lt;/em> branches or iteration; when I can build up that type of program in a REPL interactively, the only path &lt;em>is&lt;/em> the happy path, and the REPL exploration serves as an exhaustive test on its own!&lt;/p></content:encoded></item><item><title>Interview With Nathan Goldbaum</title><link>https://alexalejandre.com/programming/interview-with-ngoldbaum/</link><pubDate>Fri, 20 Feb 2026 01:42:23 -0400</pubDate><guid>https://alexalejandre.com/programming/interview-with-ngoldbaum/</guid><description>Nathan Goldbaum helped make Python multithreaded! He shared his fine thoughts and insights on many topics like Mercurial and Jujutsuwith me.</description><content:encoded>&lt;p>&lt;a href="https://ngoldbaum.github.io/">Nathan Goldbaum&lt;/a> is doing awesome work &lt;a href="https://labs.quansight.org/blog/free-threaded-python-halfway">slaying Python&amp;rsquo;s GIL&lt;/a> and moving the entire ecosystem to the free-threading build. We also talked about burnout, Mercurial and Jujutsu. He likes PRs which &lt;a href="https://github.com/numpy/numpy/pull/30770">remove 1k loc&lt;/a>.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>What are your thoughts on your own work? You get to do open source
stuff and wanted to talk about this!&lt;/strong>&lt;/p>
&lt;p>I discovered an unusual career niche and it&amp;rsquo;s nice to show people it&amp;rsquo;s
possible. I started my career writing software to analyze simulations
of galaxies which transitioned into working on software that makes
grad students&amp;rsquo; lives easier. So I work on complicated Python projects
which help others work on projects more directly important to society
itself.&lt;/p>
&lt;p>tl;dr: So I went from astrophysics simulations to getting a commit bit on
NumPy and PyO3.&lt;/p>
&lt;p>&lt;strong>So you have a &lt;a href="https://ngoldbaum.github.io/">website&lt;/a> with some
articles, you&amp;rsquo;ve given a few talks, you&amp;rsquo;re on lobsters, IRC and so on
with your real name.
You want to show people what&amp;rsquo;s possible&amp;hellip; What inspires you to engage
with the public?&lt;/strong>&lt;/p>
&lt;p>It&amp;rsquo;s my privilege as a white dude with a US passport where I feel like I
can have an online presence and participate in online communities with my
real name without people bouncing down my door and telling me how much of
a piece of shit I am. So far that hasn&amp;rsquo;t happened. If it ever happens,
I might change my stance.&lt;/p>
&lt;p>In academia, I was into open science. In
astrophysics people would often keep their secret sauce, publishing
papers about simulations whose code and data was private. A large
fraction of the literature is worthless because you have to take it on
faith they didn&amp;rsquo;t have some bug. I wanted to help push everything to a
culture of reproducible workflows with shared data and analysis scripts
anyone could run. My PhD simulation data are
&lt;a href="https://girder.hub.yt/#collection/573647d3dd9119000164acf0">still available&lt;/a>
on a server at the University of Illinois.&lt;/p>
&lt;p>I find it personally satisfying to help people asking technical
questions, if I know the answer. It&amp;rsquo;s my karmic way of paying back.&lt;/p>
&lt;p>&lt;strong>Your website&amp;rsquo;s about page is reverse chronological (interesting
choice) but it ends at &amp;ldquo;got my PhD&amp;rdquo; what happened before? How&amp;rsquo;d you do
you decide to do astrophysics? Were you programming before?&lt;/strong>&lt;/p>
&lt;p>I took a basic class in like 9th or 10th grade in high school. I already
messed around with PC gaming. My dad was a PC technician so I would
watch him build computers and debug bullshit. At 12, I had Windows ME
which exposed me to dealing with computers breaking.&lt;/p>
&lt;p>I got a degree in Physics at CU Boulder and just went straight to grad
school, hanging out in the physics library, which informed my approach
where you haven&amp;rsquo;t actually learned until you&amp;rsquo;ve explained it to someone
(in a few ways!)&lt;/p>
&lt;p>A common pathology of hard science PhDs is:&lt;/p>
&lt;ul>
&lt;li>Get paid to work on something so huge no human could do it,
discouraging you until you get distracted by something tractable.&lt;/li>
&lt;li>Your project needs software, you see an existing OSS project doing it,
which you naturally fix.&lt;/li>
&lt;li>While fixing it, you interact with people on GitHub. It&amp;rsquo;s both more enjoyable
and more social than grad work.&lt;/li>
&lt;li>Get addicted to the dopamine hit from merging pull requests instead of
getting your PhD advisor&amp;rsquo;s approval.&lt;/li>
&lt;/ul>
&lt;p>It&amp;rsquo;s nice to solve a solvable problem like a bug report, sitting down
for a couple of hours working on a self-contained thing, which really
satisfies the kind of person who does a PhD, who is probably good at
solving homework problems. Research, on the other hand, is open-ended
and discouraging.&lt;/p>
&lt;p>&lt;strong>There&amp;rsquo;s a similar dynamic in Common Lisp where we have 4-50 years
worth of libraries which may have last been maintained 30 years ago or
had a commit 12 years ago, but which generally run fine. But maybe so
and so who updated it for their 1994 thesis didn&amp;rsquo;t care about the bug
you will encounter&amp;hellip; Is this similar?&lt;/strong>&lt;/p>
&lt;p>It&amp;rsquo;s usually worse than that. Sometimes you just have a paper which
describes an algorithm which you get to implement. If lucky, your
advisor wrote some relevant code. And it&amp;rsquo;ll always be buggy spaghetti
Fortran or C++.&lt;/p>
&lt;p>But hopefully you can use a community tool others work on; many analysis
tasks are quite similar so ideally we can maintain tricky code in common
routines together with nice APIs which people want to use. So it&amp;rsquo;s
better to work on community packages, encourage people to use them and
get dopamine hits with our friendly communities!&lt;/p>
&lt;h3 id="python">Python&lt;/h3>
&lt;p>&lt;strong>I&amp;rsquo;ve long had the impression of things in Python not
working together, so you have to write a lot of glue between two
libraries. A big promise of Julia was that all libraries would work
together because it had standard math formats. How does Python handle
that today?&lt;/strong>&lt;/p>
&lt;p>Via standardization! Projects which adhere to the &lt;a href="https://github.com/data-apis/array-api">Array API
Standard&lt;/a> work together, so if
someone passes a Torch tensor into scikit-learn it just works!
scikit-learn&amp;rsquo;s algorithms are written to call the Torch API in the right
way to make it run directly on the GPU. But there are limitations; it
only works if you can encode the algorithm as a series of NumPy
operations or in Python, but not if you go into a Cython extension&amp;hellip;&lt;/p>
&lt;p>I&amp;rsquo;d love to update the &lt;a href="https://docs.python.org/3.15/c-api/buffer.html">Buffer Protocol&lt;/a> API. It&amp;rsquo;s a
detail in the Python C API which allows you to do zero-copy sharing of a
void* pointer to an arbitrary buffer containing bytes. People like 0
copy data sharing! But the way the Buffer Protocol was originally
formulated, it only works with data types NumPy supported 20 years ago.
We can make it so NumPy, when sharing a buffer for e.g. a string dtype
array, it will have extra format metadata saying &amp;ldquo;this is a NumPy string
dtype buffer with version 1.1 and some basic
metadata.&amp;rdquo; This is useful for Cython and there&amp;rsquo;s a ton of Cython code in
the wild like Pandas, scikit-learn. It has neat syntax for passing a
NumPy arrays to Cython via the Buffer Protocol called &lt;a href="https://cython.readthedocs.io/en/latest/src/userguide/memoryviews.html">typed
memoryviews&lt;/a>&lt;/p>
&lt;p>Right now it&amp;rsquo;s impossible to share any type unsupported by the Buffer
Protocol with this nice Cython syntax. Ideally I want to make it possible
for anyone to define custom data types that can then be shared via the buffer
protocol. That will take some work both in CPython and in the community to enable.&lt;/p>
&lt;p>&lt;strong>What&amp;rsquo;s package management like in Python now?&lt;/strong>&lt;/p>
&lt;p>There&amp;rsquo;s a lot of stuff happening. The &lt;a href="https://anaconda.org/">Conda&lt;/a>
ecosystem is really nice. I wouldn&amp;rsquo;t necessarily use the Anaconda Python
distribution because of some legal issues, but the community-maintained
conda-forge package ecosystem makes stuff instantly available and
installable in a uniform way on the main OSs, great especially for
native dependencies. The classic example is
&lt;a href="https://gdal.org/en/stable/">GDAL&lt;/a>, a complicated geophysical data
analysis library with all kinds of native dependencies, which you could
never &lt;code>pip install&lt;/code>, but it works through conda.&lt;/p>
&lt;p>The &lt;a href="https://pixi.prefix.dev/latest/">Pixi&lt;/a> package manager lets
you have a lock file with an environment with all your packages defined and has
similar goals to &lt;a href="https://github.com/astral-sh/uv">uv&lt;/a> (uv is to Pip as Pixi is to Conda).
I&amp;rsquo;m excited because conda packages can build the package too. So Pixi
could recursively build everything in an environment from source,
enabling sanitizer testing for packages all over the ecosystem. There
are many packages of big Cython code bases, which is technically a
memory safe language sort of, but there are styles where you&amp;rsquo;re writing
C in a Pythonic interface. I&amp;rsquo;ve personally shipped Cython code doing undefined behavior,
generating garbage data in production, causing incorrect science
results. I&amp;rsquo;m sure if you recursively built any big project&amp;rsquo;s entire
dependency stack including Python with sanitizer instrumentation, you&amp;rsquo;d
see all kinds of use-after-frees, buffer overflows and other nastiness
no one&amp;rsquo;s noticing now. I want to make the process of running tests under
sanitizers and other runtime validation tools super easy.&lt;/p>
&lt;p>I also want to enable people to reach for PyO3 and Rust, which doesn&amp;rsquo;t
have a hold in the scientific ecosystem; Cython took a hold before Rust
existed. Currently, no one wants to add the Rust dependency, but I&amp;rsquo;d
like to add a Rust module to NumPy so a Rust compiler is a NumPy build
dependency, making it more straight forward for any other project to add
a Rust dependency.&lt;/p>
&lt;p>I don&amp;rsquo;t think C or C++ is a good choice for native, greenfield code in
2026. I&amp;rsquo;d also always choose Rust over Cython; writing in a safe language with
tooling and which doesn&amp;rsquo;t compile to generated C is so much more pleasant.
We should be handing people shovels not grenades.&lt;/p>
&lt;p>The main blocker to getting this going in the Python community is adding better
support for Rust and PyO3 projects to meson and meson-python. PyO3 is tightly coupled
to Python. Maturin manages this complexity, but meson-python will need to do something
similar if it wants to directly support PyO3-based Rust projects. See &lt;a href="https://github.com/mesonbuild/meson-python/issues/721">this issue&lt;/a>
for more details.&lt;/p>
&lt;p>What does work right now is putting Rust code in its own package that other projects
can depend on. The Rust code is managed by maturin, so we nicely sidestep the issue with
meson and meson-python. That said, I&amp;rsquo;d really like to be able to add Rust code directly
to scientific projects and I&amp;rsquo;m hoping to find a way to get that meson-python feature request through.&lt;/p>
&lt;h3 id="free-threading">Free Threading&lt;/h3>
&lt;p>&lt;strong>What is your elevator pitch for free threading? Who is it for?&lt;/strong>&lt;/p>
&lt;p>It&amp;rsquo;s for people who understand &lt;a href="https://en.wikipedia.org/wiki/Amdahl's_law">Amdahl&amp;rsquo;s law&lt;/a>.
You&amp;rsquo;ll always have CPU-bound pure-Python code to orchestrate low-level
code that releases the GIL, so no matter how well your low-level code scales,
Pure Python code and the GIL will eventually show up as a scaling bottleneck for almost
any arbitrary Python code if you want to exploit
your 100-core Threadripper.&lt;/p>
&lt;p>Now that we&amp;rsquo;ve gone through the effort and converted all these projects, you can really use your threads! We just
need people to use it now.&lt;/p>
&lt;p>&lt;strong>Scientific computing&amp;rsquo;s not new, what workflows does the free-threaded
build help or enable?&lt;/strong>&lt;/p>
&lt;p>Anywhere you have CPU bound code in Python. If someone has optimized
something to death, I doubt the free-threaded build will lead to
speedups, but it will really speed up development for e.g. throwing 12
cores on a laptop at a data reduction pipeline. Right now, with
&lt;a href="https://docs.python.org/3/library/multiprocessing.html">multiprocessing&lt;/a>
you &lt;em>can&lt;/em> do it but it might require copying a lot of data, without
noticing. Pickle also introduces weird caveats for multiprocessing e.g.
with Jupyter Notebooks. Free-threading will often be more efficient too.&lt;/p>
&lt;p>By the way, we dearly need people to test and report multi-threading
performance issues. For example, whether a test is faster with multiprocessing than
multi-threading. We&amp;rsquo;re not sure where the scaling issues are because the
community hasn&amp;rsquo;t started experimenting yet. Some workflows won&amp;rsquo;t work
yet. I wouldn&amp;rsquo;t make my production workflow depend on it yet. But most
workflows should work! I&amp;rsquo;d love it if people who normally use
multiprocessing would give this a try. Like, if you have a process pool
executor, what happens if you replace it with our thread pool executor?
We&amp;rsquo;d really love to find and fix the cases where it&amp;rsquo;s slower. Ideally
multithreading should always beat or be just as fast as multiprocessing.&lt;/p>
&lt;p>&lt;strong>Is there any reason to prefer multiprocessing?&lt;/strong>&lt;/p>
&lt;p>One big issue with the free-threaded build is there&amp;rsquo;s only one
stop-the-world garbage collector, so many threads can wait on a GC pass,
which we&amp;rsquo;ll need to address. In some cases, process pools may be better.
I ran into a case like this, so it won&amp;rsquo;t always be a complete slam dunk
depending on the region of scaling space you&amp;rsquo;re in.&lt;/p>
&lt;p>Maybe a future version of the free-threaded interpreter will have a concurrent
garbage collector to avoid scaling issues coming from GC pauses. It&amp;rsquo;s also
possible to re-architect extensions so long-running native calculations occasionally
check in with the interpreter to allow the GC to run, so these issues can be worked around.&lt;/p>
&lt;p>&lt;strong>How did free threading finally become a thing?&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://github.com/colesbury">Sam Gross&lt;/a> and the Python runtime team at
Meta are very, very smart and found
a way to do it without invasive changes all over enormous legacy code
bases! There&amp;rsquo;s still a CPython runtime you have to explicitly attach
and detach from, but now without releasing a lock! This builds on the
enormous engineering effort to produce
&lt;a href="https://github.com/python/cpython/issues/90815">mimalloc&lt;/a>, and efforts from WebKit to develop parking-lot style Mutexes, which directly inspired the design of
&lt;a href="https://docs.python.org/3/c-api/init.html#c.PyMutex">pymutex&lt;/a>. So it was the right time
in terms of technology.&lt;/p>
&lt;p>Because of the GIL, the community&amp;rsquo;s multi-threaded C knowledge was low
and injecting some modern sensibility is badly needed. We&amp;rsquo;re finding all
kinds of thread safety issues, present forever, because no one has
been using threads.&lt;/p>
&lt;p>&lt;strong>How long have they been working on this?&lt;/strong>&lt;/p>
&lt;p>Meta&amp;rsquo;s been working on Cinder, their CPython fork, for a long time.
I believe Instagram is running its Django on Cinder, without a GIL. Sam
Gross forked Python 3.9 and got CPython running without the GIL around then.
Also it&amp;rsquo;s not all Sam. The Python runtime team at Meta has a lot of very
talented folks who are working to improve CPython.&lt;/p>
&lt;p>At some point, I guess someone decided it&amp;rsquo;d cost less engineering effort
to use the upstream version of CPython and everyone benefits, really.
It&amp;rsquo;s not always possible to align a mega corporation with community
benefit, but the stars aligned. &lt;a href="https://peps.python.org/pep-0703/">PEP
703&lt;/a> was approved in October 2023 and
the steering council asked Meta to fund two full-time equivalents to
support the ecosystem, which was subcontracted to us at Quansight.&lt;/p>
&lt;p>In March, 2024 we started on NumPy, Cython, setuptools etc. trying to
get the absolute bottom of the stack working with the three-threaded
interpreter. It was mostly me for NumPy, fixing the global state, though
ndarray is fundamentally unsafe. No matter how fancy the lock, you&amp;rsquo;d
have contention and I don&amp;rsquo;t want to deal with the fall out on something
as stable as NumPy. It&amp;rsquo;d be better to make something with the same
interfaces as ndarray but is CPU only and immutable. ndarray is deeply
mutable but doesn&amp;rsquo;t need to be.&lt;/p>
&lt;p>After NumPy, I helped get Py03 working, which is very sensitive to the
ABI. Now, the free-threaded interpreter has a completely different ABI,
a different layout to PyObject structs&amp;hellip; There needs to be Rust code
explicitly listing out the ABI down to the byte level, so the
&lt;a href="https://pyo3.rs/main/doc/pyo3_ffi/index.html">pyo3-ffi&lt;/a> crate is
basically rewriting the CPython headers with extra complexity for older
Python versions via conditional compilation. It was a lot.&lt;/p>
&lt;p>Thankfully I
had a lot of help from &lt;a href="https://github.com/davidhewitt">David Hewitt&lt;/a>
who mentored me a bit. It&amp;rsquo;s so nice to have someone who really knows a
codebase and can just tell you what you need to work on. I&amp;rsquo;ll have to do
this again for 3.15&amp;rsquo;s new ABI and for the new planned stable ABI.&lt;/p>
&lt;p>Historically, each release (3.3, 3.4) had its own ABI, you had to build
a binary for. Around 3.2 they added a &lt;a href="https://docs.python.org/3/c-api/stable.html#stable">stable
subset&lt;/a> of the
CPython ABI, you could build extensions against to support arbitrary
future versions. But the PyObject struct is public with 2 fields: the
type and ref count, so for a multi-threaded program taking references to
a Python object, you have to increment and decrement the ref counts
(multi-threaded counter) on a shared object. Yikes.&lt;/p>
&lt;p>But you can&amp;rsquo;t change the layout because you&amp;rsquo;re exposing the ref count
which people use and rely on (in dubious ways). Technically, you&amp;rsquo;re not
even supposed to move PyObjects in memory, just use pointers - but
people do it! For free-threading, one of the fields is a mutex, so you
need a per-object lock - there&amp;rsquo;s nowhere to put it in the original
layout. On the free-threaded build, PyObject has a completely different
layout. The struct isn&amp;rsquo;t even the same size.&lt;/p>
&lt;p>This means that reference count can be split into shared and local
references. The cost is that many operations are no longer so simple.
Py_INCREF is no longer just incrementing an unsigned integer. Take a
look at &lt;a href="https://github.com/python/cpython/blob/0fa1fc69f3ff0deb778e3c9f37cdc0c702bc8ad2/Include/refcount.h#L251-L306">its implementation&lt;/a>!&lt;/p>
&lt;p>In the future, they want a shared ABI so you can ship one
binary for both interpreters (but hopefully we&amp;rsquo;ll only have the
free-threaded interpreter) which means making PyObjects opaque.
&lt;a href="https://github.com/serhiy-storchaka">Serhiy Storchaka&lt;/a>, &lt;a href="https://github.com/hugovk">Hugo van Kemenade&lt;/a>, &lt;a href="https://encukou.cz/">Petr
Viktorin&lt;/a> are working on this.&lt;/p>
&lt;p>&lt;strong>What do you not anticipate supporting the free-threaded build?&lt;/strong>&lt;/p>
&lt;p>There are some sketchily maintained or &amp;ldquo;done&amp;rdquo; libraries which many
projects rely on. But with these radical changes to Python, the
assumptions baked into them are no longer true. For example, we did a
lot of work on &lt;a href="https://github.com/python-cffi/cffi/">cffi&lt;/a> whose author
considered it done. There&amp;rsquo;s a long tail of such projects.&lt;/p>
&lt;p>Thankfully for CFFI we were able to convince the original author and the
current maintainer to accept our patches to make the C internals thread-safe.&lt;/p>
&lt;p>But even in the worst case, it&amp;rsquo;s only a few weeks of effort. We were
thinking &lt;a href="https://github.com/python-greenlet/greenlet">Greenlet&lt;/a> would
be difficult to support, because it patches the interpreter and makes a
lot of assumptions. But Thomas Wouters gave it a look and it&amp;rsquo;s supported
&lt;a href="https://github.com/python-greenlet/greenlet/commit/e6fead23d967fd6194c5a1eaa48d55a07b4bda40">experimentally&lt;/a>
now.&lt;/p>
&lt;p>We&amp;rsquo;ve been focusing hard on the scientific and AI ecosystem where
people are quite excited, but there&amp;rsquo;s also the Python web developer
ecosystem. The big reason I did PyO3 was to get cryptography working,
which is a reverse dependency of almost every Python web stack. More
niche things will definitely lag.&lt;/p>
&lt;p>I think the Python ecosystem is ripe for rewriting all these old C
extensions. &lt;a href="https://pola.rs/">Polars&lt;/a> is faster and fixed a lot of
mistakes in the Pandas API, leaving it in the dust.&lt;/p>
&lt;p>&lt;strong>You&amp;rsquo;ve been working on a lot of codebases in this project! How do you
cope with that?&lt;/strong>&lt;/p>
&lt;p>I had around 1500 contributions in 2025 according to the &lt;a href="https://github.com/ngoldbaum">Github
graph&lt;/a>. Before Quansight, I had a lot of
experience noticing and addressing a bug in random projects in the
scientific Python ecosystem, for the most part well maintained packages
with communities. But in this project, the packages with 1-2 maintainers
we&amp;rsquo;ve been branching out to add free-threaded support to, are unique and
we have to figure out how to work with them individually. We don&amp;rsquo;t want
to make it so no one can use these without explicit support for the
free-threaded build, but there are often thread safety issues with
static global variables in old C extensions, so we fix that where we
can. Lately, I&amp;rsquo;ve been adding testing to pure Python projects, but some
aren&amp;rsquo;t actively maintained and they just sit there awaiting approval. A
teammate has a spreadsheet generating reminders for them to look at our
contributions.&lt;/p>
&lt;p>This is in no way a criticism of maintainers who aren&amp;rsquo;t looking at my PRs
as fast as I would like. It&amp;rsquo;s a reflection of the open source ecosystem and
lack of resources available for maintainers of critical but not-so-visible
libraries.&lt;/p>
&lt;p>&lt;strong>How do you go about testing?&lt;/strong>&lt;/p>
&lt;p>For free-threaded build support, we&amp;rsquo;ve used
&lt;a href="https://github.com/Quansight-Labs/pytest-run-parallel">pytest-run-parallel&lt;/a>,
a PyTest plugin, which runs each test in a suite many times at once in a
thread pool, helping to shake out problematic global state. It&amp;rsquo;s not
perfect, it won&amp;rsquo;t validate thread safety for mutable data structures, but
it will find implementations that rely on global state. If a test suite passes under pytest-run-parallel,
then it&amp;rsquo;s probably safe to use the library in a multithreaded workflow, but without sharing
any mutable state between threads (e.g. read-only map-reduce operations).&lt;/p>
&lt;p>Explicitly multi-threaded tests are better but trickier because you have
to understand what you&amp;rsquo;re actually trying to test and think hard to test
something interesting, harder than running something automatically over
the codebase. But it&amp;rsquo;s surprising if any of these code bases use
threads at all, so we have to understand the project, hope the
documentation is good&amp;hellip; Sometimes it&amp;rsquo;s more straightforward e.g. if it
makes sense to share a mutable object like a counter between threads,
you just make sure it&amp;rsquo;s accumulating correctly. Sometimes you might only
read an object from multiple threads! If there&amp;rsquo;s an obvious
multi-threaded workflow, we just set that up in a test with a thread
pool. The free-threaded guide documents &lt;a href="https://py-free-threading.github.io/testing/">testing
patterns&lt;/a> to set that up.
We want to improve the documentation and tooling around this.&lt;/p>
&lt;p>If a project only exposes pure functions and doesn&amp;rsquo;t expose any types with mutable
state, it&amp;rsquo;s easy to say whether it&amp;rsquo;s thread safe. If there&amp;rsquo;s no global
state in the implementation, by definition it&amp;rsquo;s thread safe. There can
be weird issues like a thread mutating the argument to a function like &lt;code>np.array()&lt;/code>&lt;/p>
&lt;p>while another thread is creating an array from the object - but I&amp;rsquo;m
usually assuming no one&amp;rsquo;s intentionally trying to break anything like
that. It&amp;rsquo;s easy to get bogged down in patterns not indicative of real
world use. For instance, fuzz tests are less impactful because they
mostly find things people would never do. In the distant future, we
should think about that, make things resilient against monkey business
but it&amp;rsquo;s not possible right now. So yeah, there be dragons all around
multi-threaded testing, especially where there&amp;rsquo;s nontrivial work with
threads, wrapping a C library. Sometimes it&amp;rsquo;s easy, FFmpeg is 100%
thread safe! But if not, there are probably issues hiding in the
GIL-enabled build already.&lt;/p>
&lt;p>&lt;strong>How much Rust is making its way into the Python ecosystem?&lt;/strong>&lt;/p>
&lt;p>There&amp;rsquo;s a move towards tooling and new packages, basing them on Rust and
Py03 instead of Cython, the C API,
&lt;a href="https://github.com/pybind/pybind11">pybind11&lt;/a> or
&lt;a href="https://github.com/wjakob/nanobind">nanobind&lt;/a> and C++. So Polars,
Astral&amp;rsquo;s tooling, Pixi&amp;rsquo;s tooling, UV, new type checkers etc. A lot of
excitement now comes from implementing low level stuff in Rust. There&amp;rsquo;s
a lot for the web. The cryptography project led the way, putting Rust in
everyone&amp;rsquo;s stacks which made it easier for other projects because they
could rely on the Rust already being there when distributions build nontrivial Python stacks.&lt;/p>
&lt;p>Business-y, data science tasks are more often C++. Scientific Python
isn&amp;rsquo;t ready for Rust yet - I want to fix the problems blocking more Rust adoption.
Many communities are stable, people don&amp;rsquo;t want to add new languages.
Others see Rust as complicated and are comfortable with Cython&amp;rsquo;s
Pythonic syntax.&lt;/p>
&lt;p>I have a good mental model of how to write Rust and can reason solutions
from compiler warnings, after &lt;em>a few years&lt;/em>. It isn&amp;rsquo;t easy. But if we
start people now and shift towards that direction, a lot of things will
be a lot easier. Many problems with NumPy are because changing the C
code is so difficult; it&amp;rsquo;d be nice to work in a language where I can
refactor things without feeling like I&amp;rsquo;ve broken something.&lt;/p>
&lt;p>&lt;strong>Do you think Python itself will be entirely written in Rust at any
point?&lt;/strong>&lt;/p>
&lt;p>David Hewitt gave a talk about adding Rust to the standard library. Emma Smith is also leading the effort to write a PEP to implement that proposal, currently targeting Python 3.16. A
key issue&amp;rsquo;s that Python helps bootstrap Linux distros and e.g. Debian
gives exotic architectures first-class support, which a Rust dependency
could block or complicate. But Rust is being included in Linux now and
as it gets incorporated more, we could talk about introducing Rust in
the Python interpreter. Personally, I think it makes the most sense
for CPython to give extensions a Rust API alongside the C API. That might look like upstreaming parts of PyO3 into CPython itself.&lt;/p>
&lt;p>&lt;strong>Interestingly, you have an &lt;a href="https://ngoldbaum.github.io/posts/python-vs-rust-nn/">old article&lt;/a> where
Python, because of its libraries, outcompetes Rust at scientific tasks.&lt;/strong>&lt;/p>
&lt;p>That was in 2019, not knowing Rust well yet.&lt;/p>
&lt;p>You&amp;rsquo;ll should still probably be doing machine learning in Python, but a lot of your dependencies will be written in Rust. If you&amp;rsquo;re using Huggingface&amp;rsquo;s tokenizers, that&amp;rsquo;s Rust. However, the core will like still be C++,
PyTorch or such. I don&amp;rsquo;t think it&amp;rsquo;s reasonable for every task to always
be in Rust, but I think where it really shines is when you have Python
which isn&amp;rsquo;t fast enough.If a single function takes up all your
runtime, I think PyO3 is really well-suited to replace the implementation. But if you wanted to deal with a complicated C++ library, PyO3
of course doesn&amp;rsquo;t make sense. So many domains are based on a huge corpus of a flavor of C++ I like to call &amp;ldquo;cmake soup&amp;rdquo;.
Rust isn&amp;rsquo;t going to unseat that anytime soon, but I want to enable that possible future
without memory unsafe languages.&lt;/p>
&lt;p>&lt;strong>How long do you think it&amp;rsquo;ll take for free threading to be everywhere, to be the only build?&lt;/strong>&lt;/p>
&lt;p>Maybe 3.16 or 3.17. That depends on community uptake, how people feel
about it and how fast we address the issues the steering council
identified. It&amp;rsquo;s not good for CPython to have these &lt;code>ifdef&lt;/code>s everywhere
for onboarding new devs; two builds adds a lot of complexity. Hopefully
we can manage this in the next year and half, address documentation
issues and help packages support it. We&amp;rsquo;re making steady progress here.&lt;/p>
&lt;p>&lt;strong>What would you like to do after free-threading?&lt;/strong>&lt;/p>
&lt;p>I have a list of things in NumPy like improving the next iteration of
StringDType, NumPy&amp;rsquo;s variable-wdith utf-8 text data type. It&amp;rsquo;d be nice for it to support other encodings. It&amp;rsquo;d also be nice to have a BytesDType to go along with StringDType for cases where there is no valid encoding or the encoding is unknown. If NumPy has first-class support for arrays of text, it
should also for arrays of bytes. Being able to specify an encoding would help memory map
enormous CSV data set for performance optimization, addressing problems
&lt;a href="https://github.com/astropy/astropy">astropy&lt;/a> faces. That&amp;rsquo;s funded by a
NASA grant.&lt;/p>
&lt;p>&lt;strong>What goes into a NumPy NEP?&lt;/strong>&lt;/p>
&lt;p>It&amp;rsquo;s looser than in Python with its steering council, bylaws and
formalized rules. If Python&amp;rsquo;s developer community&amp;rsquo;s 100 people, NumPy&amp;rsquo;s
is perhaps 10 so there&amp;rsquo;s significantly less social complexity.&lt;/p>
&lt;p>When starting a big project, taking more than e.g. 10 working sessions
it&amp;rsquo;s a good idea to sit down and write out a plan, even sketch out a
prototype or get something mostly working, to inform a design document.
I really like documentation driven design where I write the docs or
example programs which demonstrate what I want to be able to do. After
implementing a prototype, you can then compare with the examples and
documentation to find bugs (whether in the implementation or design).&lt;/p>
&lt;p>A lot of my job is communicating, writing things on GitHub, so I try to
write as clearly as possible. It&amp;rsquo;s enjoyable though also time-consuming
and labor-intensive, to draft a bigger document but worthwhile
especially for technically complex work. Assembling all the details
together helps discover mistakes and also gives you something to refer
to later.&lt;/p>
&lt;p>For my first NumPy project (&lt;a href="https://numpy.org/neps/nep-0055-string_dtype.html">NEP55&lt;/a>) my main thrust
was adding better support for variable length string arrays to NumPy. NumPy
supports fixed-width strings, that is, arrays of strings with a fixed number of characters. For example, a scalar items in a &amp;ldquo;U4&amp;rdquo; string array are four-character unicode strings. So every entry in the array is a four
character string and if NumPy is supplied a string with more than four characters to store in the arrays, it just truncates it. If an item has
less than four characters, NumPy stores null bytes in the trailing characters, wasting memory.&lt;/p>
&lt;p>NumPy arrays are &lt;a href="https://en.wikipedia.org/wiki/Stride_of_an_array">strided&lt;/a> data. That things are fixed width is deeply baked into the
structure and assumptions of NumPy, so adding variable length strings
required some hacks. It took some engineering effort to make it possible
to add new
&lt;a href="https://numpy.org/doc/stable/reference/arrays.dtypes.html">dtypes&lt;/a> or
add more advanced dtypes as user packages. This all builds on that.
Sebastian Berg led the effort before me while at the Berkeley Institute
for Data Science, but didn&amp;rsquo;t manage to completely ship the new dtype implementation before I stated on NumPy. He helped me tackle it. The NumPy
community also helped a lot; I&amp;rsquo;d propose a plan and others would give
in-depth improvements to the plan along with example code!&lt;/p>
&lt;p>&lt;strong>Is there any Documentation that you are particularly proud of writing?&lt;/strong>&lt;/p>
&lt;p>I am really proud of these:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://unyt.readthedocs.io/en/stable/">https://unyt.readthedocs.io/en/stable/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://py-free-threading.github.io/">https://py-free-threading.github.io/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://numpy.org/neps/nep-0055-string_dtype.html">https://numpy.org/neps/nep-0055-string_dtype.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://ytep.readthedocs.io/en/master/YTEPs/YTEP-0032.html">https://ytep.readthedocs.io/en/master/YTEPs/YTEP-0032.html&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>What community development approaches do you like?&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Clearly write down the norms&lt;/li>
&lt;li>Go where people actually are (e.g. people went to Discord from IRC,
some active people like to communicate over email, others over chat or
it can be easier to track something on a GitHub issue)&lt;/li>
&lt;li>In person meetings (e.g. everyone meet at a conference) are really
cool, you get a lot done&lt;/li>
&lt;li>Regular meetings (like a &lt;a href="https://scientific-python.org/calendars/">public
call&lt;/a> anyone can show up at)&lt;/li>
&lt;/ul>
&lt;p>Anyone can do this, it just takes a few people to develop the habit,
and if you stick a few people in a meeting for an hour they&amp;rsquo;ll have
interesting discussions about something!&lt;/p>
&lt;h3 id="version-control">Version Control&lt;/h3>
&lt;p>&lt;strong>You worked on a &lt;a href="https://hg.sr.ht/~ngoldbaum/rug">Mercurial client&lt;/a> at
the Recurse center?&lt;/strong>&lt;/p>
&lt;p>In the Mercurial IRC channel, I&amp;rsquo;d seen interesting technical discussions
and development e.g. related to scaling from Google and Meta
engineers doing actual real things, in real production code bases. I wanted a
concrete project to learn Rust, spread out over multiple files. I wrote
some &lt;a href="https://ngoldbaum.github.io/posts/revlog/">blog posts&lt;/a>.&lt;/p>
&lt;p>Mercurial&amp;rsquo;s legacy is in &lt;a href="github.com/jj-vcs/jj">Jujutsu&lt;/a>, especially influencing the UI with
&lt;a href="https://jj-vcs.github.io/jj/latest/revsets/">revsets&lt;/a>. Many of the
Mercurial IRC people are now in the JJ discord too!&lt;/p>
&lt;p>&lt;strong>What about Mercurial became untenable for Meta, Google et al. that they switched?&lt;/strong>&lt;/p>
&lt;p>All the tooling in the universe is built around Git; a lot of tooling
assumes any code in a repository is in Git. The only fix is to treat
version control like an abstract system with an adapter for each
alternative, which no one wants to do. So bootstrapping off Git makes a
lot of sense today. There were attempts to make that work but e.g.
BitBucket eventually decided it wouldn&amp;rsquo;t support &lt;code>hg&lt;/code> repos anymore -
deleting all the repos, issues, PRs, discussions etc. But BitBucket was
already terrible, for Open Source you had to use GitHub by 2015 at the
latest, for super holdouts like CPython. Mercurial&amp;rsquo;s death knell was
Meta forking it (into &lt;a href="https://github.com/facebook/sapling">Sapling&lt;/a>).
Before that, most dev effort in Mercurial was from Meta, but then they stopped
contributing upstream&amp;hellip;&lt;/p>
&lt;p>&lt;strong>Why did Meta move to Sapling?&lt;/strong>&lt;/p>
&lt;p>I think Mercurial kept making Meta&amp;rsquo;s goals harder than they needed to
be. At first, Mercurial was quite lively, supported by Google Code etc.
but as less people used Mercurial it stopped being worth it to upstream
things, but I&amp;rsquo;m just speculating.&lt;/p>
&lt;p>&lt;strong>What do you want in a future forge?&lt;/strong>&lt;/p>
&lt;p>To really replace Git, you need it usable for things besides text files.
People want to version arbitrary binary files, natively. Figuring out
semantic diffs as a first class thing, not just binary blobs. But I
don&amp;rsquo;t know how to actualize this nebulous concept.&lt;/p>
&lt;p>I think good jj native hosting will push things off the edge form Git.
Maybe &lt;a href="https://ersc.io/">East River&lt;/a>. I&amp;rsquo;m skeptical of
&lt;a href="https://blog.tangled.sh/stacking">Tangled&lt;/a>, was atProto really the best
choice? We all know GitHub is shitting the bed, e.g. &lt;a href="https://github.com/orgs/community/discussions/177971">IP blocking South
America&lt;/a> or being
unreasonably slow on Safari due to a CSS bug. Or just generally being down a lot. It &lt;em>would&lt;/em> take a lot of
engineering to replicate GitHub actions, but do you really need to?&lt;/p>
&lt;p>&lt;strong>What different version control workflows have you had?&lt;/strong>&lt;/p>
&lt;p>It&amp;rsquo;s easiest to talk about in terms of metaphor. There&amp;rsquo;s &lt;a href="https://stevelosh.com/blog/2013/04/git-koans/">this blog post&lt;/a> that sarcastically offers some &amp;ldquo;git koans&amp;rdquo;
from 10 years ago. Things have improved a bit since then and there&amp;rsquo;s work going on to improve Git&amp;rsquo;s documentation and UI, but still Git&amp;rsquo;s UI
is arbitrarily complicated for no reason. &lt;code>git checkout&lt;/code> is a homonym of
3 different things! Mercurial (or JJ)&amp;rsquo;s UI is well composed, each
command&amp;rsquo;s a verb doing just one thing. Most commands accept &lt;code>-r&lt;/code> or
&lt;code>--rev&lt;/code> where a revset can be a commit hash, branch name, change ID or
an expression in the &lt;a href="https://docs.jj-vcs.dev/latest/revsets/">revset DSL&lt;/a> letting you
search the commit graph with predicates! &lt;code>hg rebase&lt;/code> or &lt;code>jj rebase&lt;/code>
works the same way with a source and base concept, not present in Git.&lt;/p>
&lt;p>In Mercurial (and jujutsu), a commit can &amp;ldquo;evolve&amp;rdquo;, starting as a
draft then getting published. You can rewrite draft commits while
published/public commits are immutable (without &lt;code>--force&lt;/code>). While doing
a code review (e.g. a PR), commits are in draft phase and you can do
whatever with them.&lt;/p>
&lt;p>There are 2 approaches for version control. Some
treat it as a backup, pressing &amp;ldquo;save&amp;rdquo; every now and then. These people
won&amp;rsquo;t understand crafting commit messages. But you can also &lt;strong>treat a
commit like documentation: After you hack your way to a fix, squash it
into a single commit which you then split into a reasoned history&lt;/strong>.
Doing this, you&amp;rsquo;ll very quickly run into more complicated things where
Mercurial or jj come in handy. But &lt;code>jj rebase&lt;/code> is of course already more
pleasant if you keep a long running branch which you need to rebase
every now and then.&lt;/p>
&lt;h3 id="burnout">Burnout&lt;/h3>
&lt;p>I definitely don&amp;rsquo;t work on code very much outside of working hours. I
burned out pretty hard and quit my job in 2020 and was was not working
for a few years, I have tried to structure things so that work is very
timelocked to 35 hours a week. At Quansight I have to put hours in a
time sheet, which timeboxes me so they can&amp;rsquo;t legitimately ask me to like
be on call on the weekend or something. That&amp;rsquo;s just not something
Quansight does.&lt;/p>
&lt;p>While I was at the Recurse Center I had to job hunt too although I ended
up finding a job without going through Recurse Center. I actually
almost got a job working on the test team for the Windows probes at
CrowdStrike. So I was almost on the team that caused the CrowdStrike
global outage.&lt;/p>
&lt;p>&lt;strong>What did you do with your time after quitting?&lt;/strong>&lt;/p>
&lt;p>Not much. It was the pandemic. So the first bit of that was just kind of
like feeling like, yeah, I&amp;rsquo;m glad I don&amp;rsquo;t have a job right now. And then
after that I was, I was like, okay, I&amp;rsquo;m going to take a break for six
months. And then six months passed. And I was like, yeah, I don&amp;rsquo;t really
want to do it anymore. And just kind of my mental health wasn&amp;rsquo;t getting
any better. It was getting worse, in fact. And my wife encouraged me to
seek therapy. And I started medication, which also helped a lot. I don&amp;rsquo;t
mind publicly saying that.
My &lt;a href="https://www.youtube.com/watch?v=cUhP0OCSWsk">SciPy 2024 talk&lt;/a> covers
this experience at what like the period after that experience, where I
sort of got my legs back working on NumPy stuff. But yeah I really
wish I had started antidepressants in grad school. It would have helped
me a lot. But for some reason, I had a mental block or had told
myself that I would be like cheating or something or that like, yeah,
the medication is bad. There&amp;rsquo;s lots of incorrect presuppositions that&lt;br>
probably should have been disabused. But
you know, I made my own way in the world and didn&amp;rsquo;t have a lot of
help from adults.
at the end of that period, I reached out to Ralf Gommers. I said I was interested in looking for work.&lt;/p>
&lt;p>I was at Quansight from October 2019 to March 2020. So like six months.
And then I started again, October 2022. And I haven&amp;rsquo;t stopped since then
first at 20 hours a week. Then after a year, 35 hours a week when I felt
I could do more. I do more engineering management too. Ralf
transitioned from head of Quansight Labs, an internal division inside of
Quansight, to CEO of Quansight
&lt;a href="https://quansight.com/post/quansight-is-now-a-public-benefit-corporation/">PBC&lt;/a>,
which made me take on more responsibilities. He was leading the project
that we&amp;rsquo;re working on to do the free threaded support stuff.&lt;/p>
&lt;p>&lt;strong>What other interests do you have?&lt;/strong>&lt;/p>
&lt;p>I quit in 2020 because I was thinking about work all the time. It didn&amp;rsquo;t
feel like I could be physically active, spend time with my wife and
actually fulfill job requirements. I could pick 2, not 3. My mom died in
2018, she was very unhealthy and I could see myself going down that
path. So running, rock climbing and biking, I lost 50 pounds. So I was
looking for things that aren&amp;rsquo;t programming, while getting paid to
program too.&lt;/p>
&lt;p>&lt;strong>What you would suggest people do to try to better segment time or
mentally handle work and segment that from the rest of their life or
something. But as a manager, do you have ideas for how you can help your
team with this perhaps?&lt;/strong>&lt;/p>
&lt;p>People are humans. If you
have problems, it&amp;rsquo;s okay. It&amp;rsquo;s the Dutch management style, which I learned from Ralf. You just say
what you mean and you accept people as humans. Sometimes people aren&amp;rsquo;t
able to do what we&amp;rsquo;re asking of them, so I try to make space for them to
contribute. Reasonable expectations are important. Maybe you can change
their project to align better with their experience. But they&amp;rsquo;re adults,
I can&amp;rsquo;t force them, only make them aware of expectations. If they won&amp;rsquo;t do
it, there are consequences.&lt;/p>
&lt;p>A good thing about the free threaded project is that everyone&amp;rsquo;s very
experienced. If I run into a hard technical problem, I can often just
ask someone to arrive at an answer and fix it. In my past experience,
the most I could do would be filing an issue and hope someone checks it out.&lt;/p>
&lt;p>Working with really talented excellent people makes managing them and
keeping track of what they&amp;rsquo;re doing really easy because you don&amp;rsquo;t have
to micromanage, just look at results!&lt;/p></content:encoded></item><item><title>Interview With Steve Klabnik</title><link>https://alexalejandre.com/programming/steve-klabnik-interview/</link><pubDate>Sun, 15 Feb 2026 01:42:23 -0400</pubDate><guid>https://alexalejandre.com/programming/steve-klabnik-interview/</guid><description>Steve Klabnik wrote the Rust Book, Jujutsu for Everyone, worked at Oxide etc.</description><content:encoded>&lt;p>&lt;a href="https://steveklabnik.com">Steve Klabnik&lt;/a> wrote the Rust Book, a lovely &lt;a href="https://steveklabnik.github.io/jujutsu-tutorial/">Jujutsu tutorial&lt;/a>, worked at Oxide and gave many &lt;a href="https://www.youtube.com/watch?v=79PSagCD_AY">interesting talks&lt;/a>. We spoke a few times in the fall and around new years.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>How did you discover programming?&lt;/strong>&lt;/p>
&lt;p>I started programming when I was 7. I grew up on a beef farm. My dad, his dad and his dad were all butchers. My uncle was a programmer in the 70s and 80s and brought a computer over to show what he did. When I saw it, I knew I wouldn&amp;rsquo;t go outside anymore. Sorry dad. My little sister became the farm boy, she&amp;rsquo;s a veterinarian now.&lt;/p>
&lt;p>I learned BASIC, then C, C++, Java. I don&amp;rsquo;t remember not being able to program. I grew up reading slash dot (had a 5 digit id) and absorbed the culture around open source and free software. So I just ended up contributing to open source and joining a startup after college. People know me for Rust now, but I was involved in Ruby for years before that. Back then, in Rubyland, there was a guy named &lt;a href="https://en.wikipedia.org/wiki/Why_the_lucky_stiff">Why the Lucky Stiff&lt;/a>, a deliberately constructed identity doing important work. When he disappeared, I wanted to keep it going. He disappeared because people revealed his private persona to the world, which he wanted to keep separate. I made the choice there.&lt;/p>
&lt;p>&lt;strong>Many quite dislike their work and only want to talk about personal projects, but as a public personality does your professional and personal lives and interests totally merge together?&lt;/strong>&lt;/p>
&lt;p>It&amp;rsquo;s definitely a bit weird. I&amp;rsquo;ve been dating someone for about a year now and had to explain this &lt;em>my being an online person&lt;/em> thing which clarified a lot of stuff.&lt;/p>
&lt;p>What matters most to me is impact, I&amp;rsquo;m trying to improve the world, make things better. For me, the best way is being a relatively public person; a public persona helps push things forward. I have a joke about a secret gamer identity; my Discord is my gamer name first which I change to Steve Klabnik in technical/programming Discords. That&amp;rsquo;s most to keep from leaking my literal name into video game spaces, but if I had to maintain a public Steve and a private Steve, that&amp;rsquo;d be a little harder. So I got used to being a public person. It&amp;rsquo;s easier to get things done when your goal&amp;rsquo;s also your job, so I don&amp;rsquo;t try to maximize personal income but find things I want to do. These days I don&amp;rsquo;t have time to do a second job after my first job, whereas I used to have the time to work 80 hours around the clock. Hitting 40, I&amp;rsquo;ve been thinking about getting older&amp;hellip;&lt;/p>
&lt;p>On the other hand, if I&amp;rsquo;m checking Lobsters, HN, Bluesky at night&amp;hellip; Since I&amp;rsquo;ve often been in developer relations, like PR, if there were a crisis in the Rust community at Friday night&amp;hellip; I&amp;rsquo;m always a bit on.&lt;/p>
&lt;p>&lt;strong>How did you avoid a you-shaped hole when you left Ruby or Oxide? How do you help keep something going without you?&lt;/strong>&lt;/p>
&lt;p>I had the habit of picking up and maintaining other existing projects no one was working on. If someone else wanted to take over, great! But there wasn&amp;rsquo;t so much of a crisis to leave things as I left them before. Some of those projects already had replacements like &lt;a href="https://github.com/resque/resque">Resque&lt;/a> and &lt;a href="https://github.com/sidekiq/sidekiq">Sidekiq&lt;/a> too. I also felt increasingly weird maintaining Why&amp;rsquo;s stuff after he deliberately destroyed it. Worse, his projects were deeply tied into Ruby internals and deprecating APIs, making it difficult and time-consuming to maintain. This maintenance burden also informed his departure, which I came to learn first hand.&lt;/p>
&lt;p>I started going to Ruby conferences where people asked me to talk about things I cared about. But well, I cared about Rust and talked about it, connecting those communities together. So there was no clean break. Unless you commit info suicide on your persona like Why, which I couldn&amp;rsquo;t do. I still like the Ruby community but did deliberately decide to focus my attention away; I haven&amp;rsquo;t written Ruby in a long time.&lt;/p>
&lt;p>For Oxide, I said I was quitting and asked to discuss a transition plan. I started pair programming every day to onboard someone to the project I was working on by myself. It took about 6 weeks to hand everything over.&lt;/p>
&lt;p>&lt;strong>Matklad has an &lt;a href="https://matklad.github.io/2024/03/22/basic-things.html">article&lt;/a> about what open source projects need. You also have a few &lt;a href="https://steveklabnik.com/writing/how-to-be-an-open-source-gardener/">along these lines&lt;/a>. What advice do you have for a newer community which wants to build these things up and stay maintained long term?&lt;/strong>&lt;/p>
&lt;p>A big thing I did in Rust and want JJ to follow is open source is an act of creation. You want something to exist, so you build it. That need for creation&amp;rsquo;s often born out of unhappiness with how things exist today. I used to teach programming as a job and tell people if the program existed bug-free, you wouldn&amp;rsquo;t be programming. It&amp;rsquo;s the act of moving things from a state you don&amp;rsquo;t like to one you do. When writing code, you&amp;rsquo;re creating features which don&amp;rsquo;t exist or fixing problems which do. It&amp;rsquo;s easy and tempting for projects to fixate on the criticism they create by existing, but this is unhealthy. As an example, Rails was focused on Java sucking, but when you fixate on someone else sucking, you&amp;rsquo;re not focused on improving your own stuff and rot. And what happens if you win? You lack a positive narrative to keep growing and eat yourself alive if you can&amp;rsquo;t find another enemy. Well, it turns out JavaScript&amp;rsquo;s not actually that bad and Rails missed the boat on JavaScript-heavy applications. Rails didn&amp;rsquo;t fail into irrelevance, but did lose cultural dominance.&lt;/p>
&lt;p>So the Rust world focused on not saying Rust is great because C++ is terrible. There is criticism, but the project can&amp;rsquo;t be about that. It&amp;rsquo;s bad on a personal and a strategic level. Hating on others makes you a bad person. Instead, you have to focus on excited people building and creating. In the jj community, we should be &amp;ldquo;git is fine, we just like jj better&amp;rdquo; not &amp;ldquo;git sucks, jj is good&amp;rdquo;. This is important and healthier for a community long term.&lt;/p>
&lt;p>I haven&amp;rsquo;t been involved in Rust for about 3 years, but before there was a clear perspective that we were building a community, which meant we needed to bring people into the community. There&amp;rsquo;s a funnel from all the people who hear the name &amp;ldquo;Rust&amp;rdquo;, then who click on Rustlings, then who make a contribution&amp;hellip;&lt;/p>
&lt;p>&lt;strong>How do you manage projects and communities in open source?&lt;/strong>&lt;/p>
&lt;p>With open source, you can&amp;rsquo;t compel people to do certain things. Well, programmers are prima donnas in a few ways, so even as employees you can&amp;rsquo;t force them to do anything or they&amp;rsquo;ll push back. So you need the soft skills to sell the vision and convince people to help. Building consensus is always a nice thing. People will follow good examples, but also bad ones. If leadership encourages a brash, off-the-cuff communication style, they will attract and retain similar people. If leadership is more measured, they&amp;rsquo;ll accumulate a community of measured people.&lt;/p>
&lt;p>If I find words or styles of communication which resonates, I&amp;rsquo;ll see community members replicate those same arguments. There&amp;rsquo;s a classic book &amp;ldquo;High Output Management&amp;rdquo; by the Intel guy from the 90s, whose whole thing was that a CEO&amp;rsquo;s job is purely cultural transmission to others because that&amp;rsquo;s the only way you can affect change at scale. A CEO can&amp;rsquo;t just stand on the assembly line and do everyone else&amp;rsquo;s job better at the same time, after all. When managing, you reproduce the culture you want to see and it either works or it doesn&amp;rsquo;t! It&amp;rsquo;s a second order way of working, not doing it yourself but creating the environment where the work is done.&lt;/p>
&lt;p>Especially the higher you go, e.g. what distro is integrating what systems is all intraproject management and intracommunity coordination, 100% soft skills, because you&amp;rsquo;re not even in the project you&amp;rsquo;re managing. As an example, Ubuntu is currently integrating the Rust based &lt;a href="https://github.com/uutils/coreutils">uutil&lt;/a>, but can&amp;rsquo;t force them to do anything. Ubuntu&amp;rsquo;s communication must be like &amp;ldquo;hey, we want this in order to make that happen, are you interested in it?&amp;rdquo; Then the uutil people hopefully say &amp;ldquo;yes, we will take your advice and do this, because this is a shared goal.&amp;rdquo;&lt;/p>
&lt;p>&lt;strong>How do you approach course design, textbook writing?&lt;/strong>&lt;/p>
&lt;p>The &lt;a href="https://doc.rust-lang.org/book/foreword.html">Rust Book&lt;/a> was me making a 50 pg. tutorial called Rust for Rubyists in 2013, which I then rewrote into 175ish pages. Later I got Carol in as my coauthor and we wrote what&amp;rsquo;s now on the site. The &lt;a href="https://steveklabnik.github.io/jujutsu-tutorial/introduction/introduction.html">jj tutorial&lt;/a> is 100% me besides the Gerrit chapter.&lt;/p>
&lt;p>For all of these, I write down what I&amp;rsquo;m learning in the order I learn because writing helps me understand. There&amp;rsquo;s no better way to know what a new person needs than by being new yourself. The problem&amp;rsquo;s that not everyone is you, so you have to go beyond. The trick with the Rust Book&amp;rsquo;s that it has extra constraints from being official e.g. not using many external packages lest it bias the ecosystem. Normally writing Rust involves many third party libraries, which you don&amp;rsquo;t do in the course at all. I also felt the need to include all language features because it was going to be the primary way for people to learn.&lt;/p>
&lt;p>For the final version, I wrote down a ton of concepts I knew and went through the reference writing down more features to cover. I wrote them on note cards and started arranging them into a concept map. You need to know x before you learn y. The difficulty&amp;rsquo;s all the dependencies especially early on. Guy Steele showed how to &lt;a href="https://www.youtube.com/watch?v=lw6TaiXzHAE">grow a language&lt;/a>. To learn Rust, you have to build the smallest possible &amp;ldquo;kernel&amp;rdquo; to bootstrap your understanding on, growing the language one piece at a time. This meant putting ownership and borrowing as soon as reasonable, because it was the newest thing really impacting people. After functions, variables, loops and borrowing, readers have a base to understand the rest.&lt;/p>
&lt;p>In the 2nd version of the jj tutorial, I&amp;rsquo;m focusing more heavily on workflows. People want to know what they can actually do with something more than what it is. Especially experienced programmers are willing to hand-wave things although they claim to want the details. They just want to get things done, at first.&lt;/p>
&lt;p>Those are the two major design philosophies for a book-length tutorial, start building from small parts or just run with it, explaining as you go. With jj, most people just want to get things done; there aren&amp;rsquo;t many version control fanatics.&lt;/p>
&lt;p>&lt;strong>How do you yourself learn?&lt;/strong>&lt;/p>
&lt;p>I read existing documentation then try to do stuff, mess around. When learning a programming language, I try to implement a text adventure game going back to the first thing I ever did on a computer at my grandma&amp;rsquo;s house playing the &lt;a href="https://rickadams.org/adventure/advent/">Collosal Cave Adventure&lt;/a>. I&amp;rsquo;ve always loved text adventures. You get a little bit of I/O, data management, loops and stuff, enough to get a feel for writing something real. The one I wrote in Rust just had nine rooms, but that&amp;rsquo;s enough to really get going. But you can&amp;rsquo;t write a game in jj. I just had to use it, run into problems and ask for help.&lt;/p>
&lt;p>&lt;strong>How do you think about languages, APIs and design?&lt;/strong>&lt;/p>
&lt;p>Simon Peyton Jones&amp;rsquo; &amp;ldquo;avoid success at any cost&amp;rdquo; motto for Haskell is really interesting, with multiple interpretations. The most important thing is build the thing you want to build. You have deliberately decide your priorities and what you care about. Oxide&amp;rsquo;s really big on values. Figure out what&amp;rsquo;s most important then put them in an order. Rust cares about safety, performance, correctness in that order. On a different axis, Rust always wanted to be used by many people, so choices leading to broad industry adoption were important to us.&lt;/p>
&lt;p>I have an article about the &lt;a href="https://steveklabnik.com/writing/the-language-strangeness-budget/">language strangeness budget&lt;/a> where you can only be weird about so many things before no one uses your thing anymore. You have to be deliberate and careful about where you innovate. Now, this advice only matters if aiming for broad adoption, but the key is making that deliberate choice. If you just want something fun for yourself, great! But you&amp;rsquo;re making the compromise of it only being for yourself. Designing is inherently about making tough choices. Be aware and deliberate. Design requires taste and taste requires broad exposure and experience. If you don&amp;rsquo;t realize there&amp;rsquo;s a choice because you don&amp;rsquo;t have enough context to know what your options are, you will do things accidentally, not deliberately.&lt;/p>
&lt;p>&lt;strong>If you could reinvent/change any aspect of Rust, what would you do alternatively?&lt;/strong>&lt;/p>
&lt;p>A lot happened because we wanted to ship a useful thing with only so much time in the day, so some things were less deliberate than others. There&amp;rsquo;s an alternate version of Rust with significantly faster compiler times, because while we cared about compile times when designing we always prioritized other values more. We never asked ourselves how this feature or implementation impacted compiler analysis time and there are several spots where something slightly different would have much faster compiler times, which people do care about. But had we spent time on that, we would have neglected other things and not been any more successful. I think whatever language eventually succeeds Rust will be much faster to compile and borrow checking will never be the big time sink when compiling.&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/steveklabnik/rue">Rue&lt;/a>&amp;rsquo;s readme says it&amp;rsquo;s mostly a way of working on different compiler optimizations. Which of those have been most interesting?&lt;/strong>&lt;/p>
&lt;p>Honestly, Rue&amp;rsquo;s only public because GitHub charges for actions when your repo is private and I&amp;rsquo;m addicted to CI. Now, I love compilers and organized my college classes to get to compilers first but never worked on the Rust compiler, that just wasn&amp;rsquo;t the best way to utilize my skills. So I wanted to mess around with compilers.&lt;/p>
&lt;p>Conceptually, I understood single static assignment with block params vs. &lt;a href="https://www.llvmpy.org/llvmpy-doc/dev/doc/llvm_concepts.html">phi nodes&lt;/a> from reading papers, but never actually seriously looked at implementation code. Partly, I just want some code I can look at and mess around with without responsibilities. There&amp;rsquo;s a big difference between intellectually understanding something and actually writing code for it. I knew about React&amp;rsquo;s architecture for like years before I wrote a line of React - my understanding only grew when I actually coded and experimented with it.&lt;/p>
&lt;p>I&amp;rsquo;ve only been working on it for a few months, but I have a small effectively useless language (without strings). My goal is building out a full production compiler pipeline for this tiny, useless language because most people make languages useful then try to refactor the compiler; I&amp;rsquo;m doing the opposite. What if I grew the compiler wide and the language very short? While I don&amp;rsquo;t have strings, I have 7 different layers of IR and will probably reach full incremental compilation before adding strings. That&amp;rsquo;s just what I care about building.&lt;/p>
&lt;p>It took Rust like 2 years to implement &lt;a href="https://rustc-dev-guide.rust-lang.org/mir/index.html">MIR&lt;/a> because there was a whole production programming language, but it took me a few hours because no one uses it and there are no features. Implementing compiler internals is easier without surface features! I do have some language design features, but I&amp;rsquo;ll only work on that when the compiler&amp;rsquo;s ready. I only want to add features required to improve the compiler.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Hey, a few months have passed since we last spoke!&lt;/strong>&lt;/p>
&lt;p>It&amp;rsquo;s interesting how some of my thoughts have changed! I recently spent more time with Rue and came to appreciate Zig more, for example.&lt;/p>
&lt;p>A lot of Rust&amp;rsquo;s complexity comes from wanting to be as low level and fast as C. In Rue, what if we don&amp;rsquo;t make decisions based on those values? I assume Rue will have a runtime etc. Higher than Rust but lower than Go. It builds on some of Swift and Hylo&amp;rsquo;s mutable value semantics. If you don&amp;rsquo;t have references as a language construct, you can get rid of lifetimes! If you don&amp;rsquo;t put references in structs nor return references, you don&amp;rsquo;t need lifetimes and the borrow checker goes away! You lose a little efficiency, but oh well.&lt;/p>
&lt;p>Rust has affine types, but I think linear types are also neat. Linear types and borrowing&amp;rsquo;s also weird&amp;hellip;&lt;/p>
&lt;p>There&amp;rsquo;s an issue of expressed and acted values too. The Rust team cares about compiler performance, has people working on it etc. We did care about this, but no enough to require RFCs to analyze compiler impacts and reject things for compiler overhead. I don&amp;rsquo;t mean to criticize - I was there and involved too. (I still think the compiler will get faster, and maybe it&amp;rsquo;d be better from scratch but some features put a ceiling on it.)&lt;/p>
&lt;p>With Rue, how close can I get to Rust while caring about compiler performance? Recently, I&amp;rsquo;ve come to appreciate Zig a lot more for its decisions. Concretely, macros can introduce new items, so you have to expand all macros before type checking a Rust program. At least one of the Rust analyzer devs said they&amp;rsquo;d remove the ability of macros introducing items. Heavily relying on &lt;a href="https://en.wikipedia.org/wiki/Monomorphization">monomorphization&lt;/a> impacts compile time significantly, because you generate a lot of similar code then expect LLVM to filter it out. In Rust, conditional compilation is based on attribution. Zig made me uncomfortable in the past; dead code elimination finds things that aren&amp;rsquo;t used and eliminates them, making the binary smaller. But you can also view that as a failure; any code generated but thrown away means you did work producing it before dumping it. Rust programs often generate a lot of code which it eventually dumps later. Zig just doesn&amp;rsquo;t compile or process things if you know it won&amp;rsquo;t occur! This had made me uncomfortable if e.g. had errors in some other branch e.g. compiling for Linux while the Windows config is fundamentally broken.&lt;/p>
&lt;p>&lt;strong>How did you approach building a system of values and getting buy-in for people?&lt;/strong>&lt;/p>
&lt;p>I am kind of old school. A lot of it flows top-down; you can&amp;rsquo;t have an outsider show up and impose values on a community. They have to come from some legitimate source in the community itself. Expressing values requires action too. People will notice if you say one thing and do another. On some level, &lt;em>what leadership does&lt;/em> creates the actual values. It&amp;rsquo;s tricky in general, because even rational adults find it hard to always act in accordance with their values.&lt;/p>
&lt;p>&lt;strong>How&amp;rsquo;d you decide which your values would be then?&lt;/strong>&lt;/p>
&lt;p>I joked that my parents&amp;rsquo; biggest mistake was telling me to do what I thought was right, which caused a lot of friction when we disagreed! I have changed a lot as a person over the course of my life. I&amp;rsquo;d like to think that things happened which I took under consideration and made changes after. It often happens in software development communities that you find yourself among people you don&amp;rsquo;t want to be like. You have to ask whether you&amp;rsquo;re the kind of person you want to be, and make changes to align yourself. Earlier in my career, I loved talking shit on languages, tools and communities I thought were bad - but then I realized who I was becoming and made serious changes.&lt;/p>
&lt;p>&lt;strong>How do you approach programming? What&amp;rsquo;s unusual about your methods?&lt;/strong>&lt;/p>
&lt;p>My weirdest thing is not customizing my software. I don&amp;rsquo;t set color schemes. I don&amp;rsquo;t have a dot-files repo. A long time ago, teaching programming as a job, I helped people with their setups and wanted to understand the default user experience; I didn&amp;rsquo;t want to recommend a program I only liked because I had 45 extensions&amp;hellip; I didn&amp;rsquo;t want to get out of touch. I don&amp;rsquo;t use an ad-blocker.&lt;/p>
&lt;p>A hater once wrote that my Rust code seemed simpler and more straight forward, which I thought was a very nice thing for a hater to say! I tend not to write macros at all. I also avoid fancy advanced type system tricks. Although Rust has the reputation of a complicated, big language, you don&amp;rsquo;t have to use it that way. I&amp;rsquo;m actually pretty tolerant of boilerplate these days.&lt;/p>
&lt;p>Handing off a project at Oxide, I mentioned some packages would reduce duplicates and boilerplate, but seeing the struct fields copied from one struct to another is more straightforward than some macro automatically doing it besides this one exception where&amp;hellip;.&lt;/p>
&lt;p>&lt;strong>I can&amp;rsquo;t get over no ad-block.&lt;/strong>&lt;/p>
&lt;p>A lot of pages have terrible intrusive ads, which guide my behavior to stay away from them.&lt;/p>
&lt;p>My relationship with privacy has also changed. I used to think tracking me was offensive and upsetting, but now I live such a public life with hundreds of hours of talks on youtube, where ads are the least of my worries.&lt;/p>
&lt;p>&lt;strong>Oxide rewrites basically everything. How&amp;rsquo;d you make sure you were actually writing better fitting replacements?&lt;/strong>&lt;/p>
&lt;p>In other organizations, there&amp;rsquo;s constantly a low-key conflict between programmers and management about what we spend time on. People often slip refactoring in before shipping the ticket, because they&amp;rsquo;ll never get permission to refactor after closing the ticket.&lt;/p>
&lt;p>Oxide looks at what exits, what it needs and figures out whether they should build it or use something. Culturally, a lot of programmers read &lt;a href="https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/">Joel Spolsky&lt;/a> 25 years ago. Oxide is like if that article had never been written and people would rewrite when useful.&lt;/p>
&lt;p>It comes down to what&amp;rsquo;s fit for purpose. Software&amp;rsquo;s often an 80% fit. Do you just live with that other 20%? Perhaps some people can live with a bigger misfit than others. This does slow down when we ship, but quality emerges from really working on this ourselves. That&amp;rsquo;s an intangible but important benefit. We had more willingness to experiment and try than other places, which paid off.&lt;/p>
&lt;p>Oxide&amp;rsquo;s leadership really cares about knowing your tools well. So if a tool doesn&amp;rsquo;t yet exist, it&amp;rsquo;s fine to make that tool for future productivity benefits. We wrote our own debugger for our own embedded real time operating system, which paid off when we had to debug firmware issues. Brian et al. had seen this approach work out in the past, so the whole organization buys in too. Oxide&amp;rsquo;s the only company to rewrite AMD&amp;rsquo;s CPU firmware. They didn&amp;rsquo;t believe us until it happened.&lt;/p>
&lt;p>&lt;strong>How deeply did you dive into less popular programming paradigms?&lt;/strong>&lt;/p>
&lt;p>I used to joke that I didn&amp;rsquo;t do LSD in college but did Haskell instead; not sure which is more harmful! I used to experiment a lot. Earlier in my career, I cared a lot about programming for its own sake and now I care more about what I can do with programs. High level languages seem to have an inherent low end of where they can go. (I know this isn&amp;rsquo;t directly true, you can write an OS in Lisp.) I care less about &amp;ldquo;everything is a&amp;hellip;&amp;rdquo; type languages. &amp;ldquo;Everything is an object&amp;rdquo; is like a Beatles cover band, it&amp;rsquo;s not a novel thing because we already explored that space but the interesting developments aren&amp;rsquo;t there. The vitalization of lower level languages is some cyclical effect after spending a lot of energy on higher level languages.&lt;/p>
&lt;p>I do find &lt;a href="https://www.unison-lang.org/">Unison&lt;/a> cool. There&amp;rsquo;s definitely room for alternative paradigms, but I want to see them prove themselves before investing a lot of time in it. Time&amp;rsquo;s precious. I think I experienced enough with most of that stuff. There are some unexplored avenues like effect systems though.&lt;/p>
&lt;p>&lt;strong>How do you manage and prioritize your time?&lt;/strong>&lt;/p>
&lt;p>It&amp;rsquo;s hard and changed a lot for me this past year. I&amp;rsquo;m now in a serious relationship with someone who has kids, adding constraints I didn&amp;rsquo;t previously have. A year ago, I could do whatever whenever, but now I care about people and have obligations to them.&lt;/p>
&lt;p>But when I feel I want to do the thing, I just do the thing as hard as possible. For example, I started working on Rue in August, got busy in September and set it down until the end of December when I spent a few frantic weeks on it. Claude and I shipped 100 commits on Christmas day! I wait for inspiration to spark then push on it as hard as I can.&lt;/p>
&lt;p>I have time blocks, spend time with work, spend time with my girlfriend, spend time on me, and within those I just do whatever I feel.&lt;/p>
&lt;p>&lt;strong>How do you structure commits?&lt;/strong>&lt;/p>
&lt;p>I&amp;rsquo;m a big believer in CI and use it on PRs, even on personal projects. I don&amp;rsquo;t push to main myself, either. Well, I use trunk. I care more about whether CI passes than perfectly crafting the exact commit I want. Committing to use PRs for everything, looking over the diff for 10k lines sucks on GitHub. So I tend towards very small changes. Ideally under 1000-line diffs. I once had a client where the CEO would disappear for a few months, then appear and commit something to master, so the rest of the company would frantically try to rebase all their work on top of everything. The original principles of CI matter a lot. I prefer high velocity of a small number of commits, rather than big perfect ones. Sometimes this means shipping duplication to master, then cleaning it up in a later PR, because keeping things factored while adding a new feature might suck. I trust my tests, keep my cycles quick and keep things small. Sometimes that even means feature flags; I&amp;rsquo;ll ship broken features behind flags which won&amp;rsquo;t get shown in production, and remove the flag when the feature&amp;rsquo;s done, rather than work on a branch for a long time and eventually ship it in the end. At least, these processes work better for me.&lt;/p>
&lt;p>I&amp;rsquo;d rather have more small things than fewer larger things.&lt;/p>
&lt;p>&lt;strong>What about version control inspired you enough to leave Oxide?&lt;/strong>&lt;/p>
&lt;p>I always loved git. I was early on it. I really hated how &lt;a href="https://en.wikipedia.org/wiki/Concurrent_Versions_System">CVS&lt;/a> worked (i.e. the above story.) Distributed version control just seemed straight up better to me. Code matters, but this is the software we entrust all our work output to. If git deleted all our repos tomorrow, it&amp;rsquo;d be a problem but not so bad because distributed, because backups, while your CVS repo going down would ruin you.&lt;/p>
&lt;p>You&amp;rsquo;re the sum of all the people you spend time with. That&amp;rsquo;s true of tools, too. We spend hours and hours with version control, if that tool can get better, it&amp;rsquo;ll help a lot of people. I got involved with Rails, because I realized I could help every single webapp at once. I got involved with Ruby to help an even bigger set of people. I got involved with Rust, because making the OS better helps everyone! Moving down the stack gives you higher leverage to help more people and DVCS is quite low; there are few things you can do to make JavaScript, C and Rust developer&amp;rsquo;s lives better at the same time.&lt;/p>
&lt;p>I like doing high leverage things. Working on version control is interesting to me because it can help a lot of people. I also really just like jj.&lt;/p>
&lt;p>But another thing: I never worked at a FAANG, but they&amp;rsquo;ve all converged on some things different from the rest of our industry, like monorepos. At some scale, they just move to monorepos for rational reasons (which aren&amp;rsquo;t important right now.) This implies a lot of other things: path dependence and unexpected technology choices and unique systems. They have their own version control systems, often based on Mercurial for interesting historical reasons.&lt;/p>
&lt;p>In the past, rich people had access to things other people didn&amp;rsquo;t. But today, there&amp;rsquo;s no better Coca-Cola than Coca-Cola. Elon and me drink the same cola! Software&amp;rsquo;s largely like this too. But FAANG companies have these entire stacks not available to the rest of us. If I wanted to use a monorepo and use Piper, that&amp;rsquo;s just not an option; it&amp;rsquo;s internal to Google, tied to their individual infrastructure&amp;hellip; So I think there&amp;rsquo;s some sort of Prometheus play around stealing the fire from the gods.&lt;/p>
&lt;p>I&amp;rsquo;ve been toying with my own personal monorepo for all projects. You know what sucks? Setting up integrations, IDEs etc. every time I start a new project! I&amp;rsquo;m very monorepo brained. I&amp;rsquo;m interested in tools like jj which show that world to the rest of us.&lt;/p>
&lt;p>&lt;strong>What are the benefits of a monorepo?&lt;/strong>&lt;/p>
&lt;p>If I want CI to pass, my commits are limited. If it takes an hour for my CI to run, I get 24 commits a day and that&amp;rsquo;s it. To scale up, you need to start to think about whether literally every test should run on every commit: No. How do you determine which tests to run? How do I share dependencies across projects? How do I integrate build systems with all the projects? There are a lot of big topics. But then it&amp;rsquo;s quick to start a new project. It removes coordination costs. At Oxide, every team can use any tools they want. So some teams run on Gerrit, others on GitHub etc. which is cool but moving teams means relearning a new stack. On the flip side, a monorepo&amp;rsquo;s homogeneity means you don&amp;rsquo;t have to learn something new to work on another part of the code base. But now the monorepo&amp;rsquo;s huge. Making everyone download the whole repo kind of sucks. Trade offs. At scale, different trade offs make more sense. These tools also assume scale. Cargo doesn&amp;rsquo;t scale up to a Google sized monorepo. Buck, Blaze or Bazel are built for monorepos, annoying to use on small scales. I feel like there&amp;rsquo;s a smoother transition somewhere with more powerful tools.&lt;/p>
&lt;p>&lt;strong>How did you become &amp;ldquo;AI-pilled?&amp;rdquo;&lt;/strong>&lt;/p>
&lt;p>A year ago, I would have said these tools were BS and didn&amp;rsquo;t matter. I try to be an informed hater though and realized I hadn&amp;rsquo;t tried them in a while. I never liked autocomplete, so the first generation of &amp;ldquo;spicy autocomplete&amp;rdquo; did nothing for me. But agents are a fundamentally different way of working. Claude and ChatGPT also started writing ok Rust code.&lt;/p>
&lt;p>I had a rough 2024. In 2025, I did a lot of soul searching and considered the implications of these new tools, what my actual opinions about software development were etc. And I don&amp;rsquo;t know man, I barely wrote any code last year. I don&amp;rsquo;t know if I&amp;rsquo;m going to write any code this year personally, by hand, like at all. I started programming at 7. This might be the first year I don&amp;rsquo;t code since then. It&amp;rsquo;s &lt;a href="https://ratfactor.com/tech-nope2">uncomfortable and strange&lt;/a>.&lt;/p>
&lt;p>I hate the whole &amp;ldquo;if you don&amp;rsquo;t learn this stuff, you&amp;rsquo;ll fall behind&amp;rdquo; rhetoric from AI people. When Rails came out, everyone loved and flocked to it. But you know what? Not everyone actually did, only a small vocal minority. The people who didn&amp;rsquo;t learn Rails weren&amp;rsquo;t left behind. They didn&amp;rsquo;t lose their career for not jumping on the hottest trend. It&amp;rsquo;s reasonable and rational to not care. But I enjoy them. They are tools which require skill. People are willing to acknowledge that vim is useful, even if they use Emacs. I see AI tooling like vim. You have to approach it like a scientist or an engineer. You can&amp;rsquo;t just say &amp;ldquo;build me a Google clone&amp;rdquo;. Using them in an engineering-science-y way to produce good results takes different kinds of skills than directly writing code yourself. I used to care a lot about being one with the code; some of my best memories are spending a weekend solving a bug in college. But these days that just means I spent my whole weekend being frustrated and didn&amp;rsquo;t get anything done!&lt;/p>
&lt;p>I&amp;rsquo;ve been meaning to write about &lt;a href="https://steveklabnik.com/writing/getting-started-with-claude-for-software-development/">how to approach this&lt;/a>, but it takes so much heat from people online&amp;hellip; Some of my friends are vehement anti-AI people which has made our friendship awkward, which sucks, because I like my friends. I also talk about this less on e.g. Lobsters than I normally would. I just do it in private channels to avoid the shit. But I should be more open about it, it can help people.&lt;/p>
&lt;p>&lt;strong>People have been complaining about AI-driven PR spam.&lt;/strong>&lt;/p>
&lt;p>My work in open source predisposed me to be ok with AI here. There have always been crap PRs by people who don&amp;rsquo;t know what they&amp;rsquo;re doing. That&amp;rsquo;s the normal state of things for open source! You just get a bunch of junk from people you don&amp;rsquo;t know. Some might be great, don&amp;rsquo;t get me wrong. You need to have processes in place to make sure a PR is good before merging and that&amp;rsquo;s true no matter who authors the code.&lt;/p>
&lt;p>&lt;strong>How do you use it?&lt;/strong>&lt;/p>
&lt;p>I&amp;rsquo;ll briefly go into how these tools work. I&amp;rsquo;ll assume you&amp;rsquo;re using Claude here. You send a request to the model. What&amp;rsquo;s in the request? The tool author&amp;rsquo;s system prompt, the prompt you typed in, then a bag of context (e.g. the conversation history). You can tweak all these parameters. Sometimes the correct approach is throwing the system prompt away and writing your own (using an API). People were obsessed with prompt engineering for a while - thinking prompts were the primary lever. But the context window is the biggest percentage of input. So recently people have been talking about context engineering. When the context window fills up, LLM performance goes down. You can make worse prompts if you do a better job context engineering.&lt;/p>
&lt;p>We used to argue about horizontal vs. vertical slicing for apps, DB, framework, application, view layers vs. feature folders. From a context perspective, a folder per feature is easier for an agent or a person to figure out what&amp;rsquo;s needed (assuming you separated your feature out). How do you ensure the context window only has what&amp;rsquo;s relevant to the goal?&lt;/p>
&lt;p>In Rue, I have these architecture decision records (ADR) describing a design and its rationale. I&amp;rsquo;ll tell Claude to read ADR 1 and 5 and then mention I want to modify the type system. It&amp;rsquo;s like tickets, you want a ticket with a minimum reproduction. I don&amp;rsquo;t think these are new things, rather we&amp;rsquo;ve been collectively paying these practices lip service, and those who actually follow them will do better with these tools. A well-structured codebase means both a human and an agent will have a better time; it&amp;rsquo;s just easier to notice an agent flailing around than realize a developer taking 3 weeks to ship a fix is the same symptom.&lt;/p>
&lt;p>LLMs are like an average user, which is a nice feedback mechanism too. In the first iteration of Rue, Claude was trying to dump the assembly for a program it was debugging. It kept passing &lt;code>-S&lt;/code> which wasn&amp;rsquo;t implemented instead of &lt;code>--emit-asm-&lt;/code> which I thought was nicer. But it turns out &lt;code>-S&lt;/code> is a standard flag across compilers, assuming it exists is a good assumption. So I implemented that as an LLM to stop it from flailing around. There&amp;rsquo;s value in watching what an LLM assumes. It will give reasonable attempts or answers, because it&amp;rsquo;s seen everything. If you can make something easy enough for Claude to understand, it might be a good model.&lt;/p>
&lt;p>&lt;strong>Since we spoke, he has published &lt;a href="https://steveklabnik.com/writing/">a few articles&lt;/a> about coding with LLMs.&lt;/strong>&lt;/p></content:encoded></item><item><title>Poesía épica</title><link>https://alexalejandre.com/notes/poes%C3%ADa-epica-traducida/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/notes/poes%C3%ADa-epica-traducida/</guid><description>&lt;p>He aquí unas traducciones en versos castellanos&lt;/p>
&lt;h3 id="la-divina-comedia">La Divina Comedia&lt;/h3>
&lt;p>&lt;a href="https://es.wikisource.org/wiki/La_Divina_Comedia">Bartolomé Mitre&lt;/a> (1894) tambien escribió sobre la &lt;a href="https://es.wikisource.org/wiki/Teor%C3%ADa_del_traductor">teoría del tradutor&lt;/a>.&lt;/p></description><content:encoded>&lt;p>He aquí unas traducciones en versos castellanos&lt;/p>
&lt;h3 id="la-divina-comedia">La Divina Comedia&lt;/h3>
&lt;p>&lt;a href="https://es.wikisource.org/wiki/La_Divina_Comedia">Bartolomé Mitre&lt;/a> (1894) tambien escribió sobre la &lt;a href="https://es.wikisource.org/wiki/Teor%C3%ADa_del_traductor">teoría del tradutor&lt;/a>.&lt;/p>
&lt;p>En medio del camino de la vida,&lt;br>
Errante me encontré por selva oscura,&lt;br>
En que la recta vía era perdida.&lt;/p>
&lt;p>¡Ay! que decir lo que era, es cosa dura,&lt;br>
Esta selva salvaje, áspera y fuerte,&lt;br>
Que en la mente renueva la pavura!&lt;/p>
&lt;p>¡Tan amarga es, que es más solo la muerte!&lt;br>
Mas al contar el mal que allí encontrara,&lt;br>
El bien diré, que hallara por mi suerte.&lt;/p>
&lt;p>No podría explicar como allí entrara.&lt;br>
Tan soñoliento estaba en el instante&lt;br>
En que el cierto camino abandonara.&lt;/p>
&lt;h3 id="la-eneida---publio-virgilio-marón">La Eneida - Publio Virgilio Marón&lt;/h3>
&lt;p>Miguel Antonio Caro (1946)&lt;/p>
&lt;p>Canto asunto marcia; al héroe canto
Que, de Troya lanzado, a Italia vino;
Que ora en mar, ora en tierra, sufrió tanto
De Juno rencorosa y del destino;
Que en guerras luego padeció quebranto,
Conquistador en el país latino,
Hasta fundar, en fin, con alto ejemplo,
Muro a sus armas, y a sus dioses templo.&lt;/p>
&lt;p>De álla trajo su ser el trono albano,
Su nombre el pueblo a quien el orbe admira,
Roma de allá su cetro soberano&amp;hellip;
¡Más tú a mi osado verso, Musa, inspira!
Abre de estos sucesos el arcanol
¿Que a la errante virtud sigue y quebranta?
?Cupo en celestes pechos furia tanta?&lt;/p>
&lt;p>&amp;hellip;&lt;/p>
&lt;p>147
Y vuela el tiempo en pláticas sabrosas,
Y Dido, platicando, amor apura;
Mil cosas sobre Príamo y mil cosas
A Preguntar sobre Héctor se apresura:
Ya qué huestes trujera pavorosas
El hijo de la Aurora, oír procura;
Ya la historia saber de los gentiles
Potros de Reso o el poder de Aquiles.&lt;/p>
&lt;p>&amp;ndash;!Que en fin - exclama -, por ventura mía
Desde el principio en relatar vinieses
Los pasos de la griega alevosía,
Huésped y vuestras glorias y reveses!
También tus viajes entender querría,
Ya que contemplas los estivos meses
Tornar séptima vez desde que yerras
Mares cruzando y extranjeras tierras.&amp;ndash;&lt;/p>
&lt;p>134
Meta de viajes, causa de gemidos
En Drépano encontré. De ahí del viento
Vinimos por el piélago impelidos,
Merced de un Dios, a vuestro ilustre asiento &amp;ndash;
Tal sucesos del Cielo dirigidos
Narraba el héroe al auditorio atento,
Contratiempos, errores y peleas:
Calló, en fin, y descanso tomó Eneas.&lt;/p>
&lt;p>3
¿Qué brío a su alma y brazo no acompaña?
¡Cuál se pinta en su frente su destino!
Yo, si mis ojos la ilusión no engaña,
Que desciende de Dioses adivino;
Pues torpe miedo que el semblante empaña,
Siempre delata al corazón mezquino;
Y él tras tanto conflicto y prueba tanta,
¡Qué de combates concluídos canta!&lt;/p>
&lt;p>Eterno, irrevocable es mi desvío
De un nuevo enlace al criminal deseo;
Que mi esperanza en flor y el amor mío
Yacen con las cenizas de Siqueo.
Mas si a mis ojos sin fulgor sombrío
Pudiese arder la antorcha de Himeneo,
Sólo de este héroe la gentil presencia
Capaz fuera a vencer mi resistencia.&lt;/p>
&lt;p>123
Álzate, vengador amenazante,
Acelera los tiempos; y ahora y luego,
Tu sombra por do vayan los espante;
Arróllalos feroz a sangre y fuego.
Y muro contra muro se levante;
Y un mar contra otro mar se ensañe ciego;
Y pueblo contra pueblo alce la frente;
¡Y guerra eterna mi rencor sustente!&lt;/p>
&lt;p>128
&amp;ndash;¡Oh dulces prendas con mejor fortuna!
¡Dulces por siempre cuando Dios quería!
¡Mi espíritu os entrego y mi importuna
Memoria cese con la vida mía!
La senda anduve que emprendí en la cuna.
Viví las horas que vivir debía:
Hoy, fin logrando a míseros afanes,
Van a otro mundo mis augustos manes.&lt;/p>
&lt;p>Fundé yo una ciudad, ciudad preclara,
Murallas propias coronó mi mano;
Vengué la sombra del esposo cara;
Yo tomé enmienda del malvado hermano.
¡Feliz, harto feliz si no tocara
Mis costas, nada más, bajel troyano!&amp;ndash;
Y aquí, a par que en el lecho el rostro imprime,
&amp;ndash;¿Moriré inulta? ¡mas muramos! &amp;ndash; gime.&amp;ndash;&lt;/p></content:encoded></item><item><title>Can Macros Tame Crud?</title><link>https://alexalejandre.com/programming/lisp/can-macros-tame-crud/</link><pubDate>Fri, 06 Feb 2026 15:48:34 -0500</pubDate><guid>https://alexalejandre.com/programming/lisp/can-macros-tame-crud/</guid><description>&lt;p>I want to make a forum, easy enough. An MVP only needs to:&lt;/p></description><content:encoded>&lt;p>I want to make a forum, easy enough. An MVP only needs to:&lt;/p>
&lt;ul>
&lt;li>read .json (lazy initial db) into hash map&lt;/li>
&lt;li>on page visit, turn hash map into page&lt;/li>
&lt;li>modify map (for posts)&lt;/li>
&lt;li>save json on edit (ignore other processes and threads to &lt;a href="https://www.youtube.com/watch?v=loKqHFV5o2M">KISS&lt;/a>)&lt;/li>
&lt;/ul>
&lt;p>That&amp;rsquo;s not actually different from a to do app, how easy! (So the examples come from my notes.) I&amp;rsquo;ve even told people &amp;ldquo;CRUD is a solved problem&amp;rdquo;. Let&amp;rsquo;s start a &lt;a href="https://github.com/joy-framework/joy">Joy&lt;/a> project.&lt;/p>
&lt;details id="a-script-if-you-want-to-work-along...">
&lt;summary>A script if you want to work along&amp;hellip;&lt;/summary>
&lt;p>(Can anyone tell me how to narrow these code block?)&lt;/p>
&lt;p>I hope you&amp;rsquo;re on Linux&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># install janet&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git clone https://github.com/janet-lang/janet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d">cd&lt;/span> janet &lt;span style="color:#c3e88d;font-weight:bold">&amp;amp;&amp;amp;&lt;/span> git fetch --tags &lt;span style="color:#c3e88d;font-weight:bold">&amp;amp;&amp;amp;&lt;/span> git checkout &lt;span style="color:#c099ff">$(&lt;/span>git describe --tags &lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#c099ff">$(&lt;/span>git rev-list --tags --max-count&lt;span style="color:#c3e88d;font-weight:bold">=&lt;/span>1&lt;span style="color:#c099ff">)&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#c099ff">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d">export&lt;/span> CFLAGS&lt;span style="color:#c3e88d;font-weight:bold">=&lt;/span>&lt;span style="color:#c3e88d">&amp;#39;-fPIC -O2 -flto&amp;#39;&lt;/span> &lt;span style="color:#444a73;font-style:italic"># speed gains&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo make install
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>make install-jpm-git &lt;span style="color:#444a73;font-style:italic"># Janets old package manager&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d">cd&lt;/span> ..
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo rm -rf janet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># install libraries&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo jpm install joy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo jpm install spork
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now just run &lt;code>joy new example &amp;amp;&amp;amp; cd example&lt;/code> and open &lt;code>main.janet&lt;/code>!&lt;/p>
&lt;/details>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> home [request]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> data ((json/decode (&lt;span style="color:#82aaff">slurp&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;entries.json&amp;#34;&lt;/span>) &lt;span style="color:#c3e88d">true&lt;/span>) &lt;span style="color:#ff966c">:active&lt;/span>)) &lt;span style="color:#444a73;font-style:italic"># true turns strings into keywords!&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">defn&lt;/span> url [d] (&lt;span style="color:#82aaff">get-in&lt;/span> d [&lt;span style="color:#ff966c">:links&lt;/span> &lt;span style="color:#ffc777">0&lt;/span> &lt;span style="color:#ff966c">:target&lt;/span>]))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:div&lt;/span> {&lt;span style="color:#ff966c">:class&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;tc&amp;#34;&lt;/span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:h1&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;I&amp;#39;m a title!&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">map&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">fn&lt;/span> [d] [&lt;span style="color:#ff966c">:p&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:b&lt;/span> (d &lt;span style="color:#ff966c">:title&lt;/span>)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">when-let&lt;/span> [u (url d)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:a&lt;/span> {&lt;span style="color:#ff966c">:href&lt;/span> u} &lt;span style="color:#c3e88d">&amp;#34;Link&amp;#34;&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:p&lt;/span> (d &lt;span style="color:#ff966c">:explanation&lt;/span>)]])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> data)])
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;span class="marginnote">Not a typo, examplest is cute&lt;/span>
&lt;details id="note-forma/examplest">
&lt;summary>Note forma/examplest&lt;/summary>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;active&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;time&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;2025-03-27 05:46:35&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;topic&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;fennel&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;explanation&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;Fennel looks promising, give it a spin&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;title&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;Build Fennel forum \/ ssg&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;done&amp;#34;&lt;/span>: &lt;span style="color:#ffc777">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;time&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;2025-03-27 07:18:11&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;topic&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;finance, stock, &amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;explanation&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;title&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;GBX - Greenbrier&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;done&amp;#34;&lt;/span>: &lt;span style="color:#ffc777">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;links&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;target&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;https:\/\/www.gbrx.com\/&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;internal&amp;#34;&lt;/span>: &lt;span style="color:#ffc777">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;type&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d">&amp;#34;reference&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;time&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;2025-03-27 07:15:59&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;topic&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;security, website&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;explanation&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;title&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;Minimize your Browser Fngerprint&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;done&amp;#34;&lt;/span>: &lt;span style="color:#ffc777">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;links&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;target&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;https:\/\/coveryourtracks.eff.org&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;internal&amp;#34;&lt;/span>: &lt;span style="color:#ffc777">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;type&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d">&amp;#34;reference&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;time&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;2025-03-27 06:03:29&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;topic&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;china, security, finance&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;explanation&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;title&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;Chinese Money Laundering Practices&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;done&amp;#34;&lt;/span>: &lt;span style="color:#ffc777">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;links&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;target&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;https:\/\/globalchinapulse.net\/moving-bricks-money-laundering-practices-in-the-online-scam-industry\/&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;internal&amp;#34;&lt;/span>: &lt;span style="color:#ffc777">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">&amp;#34;type&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d">&amp;#34;reference&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }]}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/details>
&lt;p>In Janet like k, data structures are their own accessor functions: &lt;code>({:key &amp;quot;value} :key)&lt;/code> which is much nicer than &lt;code>get&lt;/code> etc. but it&amp;rsquo;s still repetitive/tedious. In CRUD we are pairing schemas around, isn&amp;rsquo;t there a better way?&lt;/p>
&lt;p>&lt;code>get&lt;/code>? Like getters and setters in OOP? Common Lispers are smart and like OOP. And aren&amp;rsquo;t objects just hash maps which Clojure-likes love? We can try that. We even have &lt;a href="https://git.sr.ht/~subsetpark/fugue/">CLOS at home&lt;/a> (actually better), but let&amp;rsquo;s keep it simple, this isn&amp;rsquo;t an &lt;a href="https://aphyr.com/posts/341-hexing-the-technical-interview">interview&lt;/a>. Besides, Janet already has some &lt;a href="https://janet-lang.org/docs/object_oriented.html">OOP&lt;/a> built in:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">def&lt;/span> EntryProto
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> @{&lt;span style="color:#ff966c">:title&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> [self] (self &lt;span style="color:#c3e88d">&amp;#34;title&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:explanation&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> [self] (self &lt;span style="color:#c3e88d">&amp;#34;explanation&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#444a73;font-style:italic"># Calculated property that handles the nesting safely&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:url&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> [self] (&lt;span style="color:#82aaff">get-in&lt;/span> self [&lt;span style="color:#c3e88d">&amp;#34;links&amp;#34;&lt;/span> &lt;span style="color:#ffc777">0&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;target&amp;#34;&lt;/span>]))})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> wrap-entry [raw-data]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">table/setproto&lt;/span> raw-data EntryProto))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">def&lt;/span> data (&lt;span style="color:#82aaff">map&lt;/span> wrap-entry ((json/decode (&lt;span style="color:#82aaff">slurp&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;entries.json&amp;#34;&lt;/span>)) &lt;span style="color:#c3e88d">&amp;#34;active&amp;#34;&lt;/span>))) &lt;span style="color:#444a73;font-style:italic"># not keywords, true not set&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> home [request]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:div&lt;/span> {&lt;span style="color:#ff966c">:class&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;tc&amp;#34;&lt;/span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:h1&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;You found joy!&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">map&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> [d]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:p&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:b&lt;/span> (&lt;span style="color:#ff966c">:title&lt;/span> d)] &lt;span style="color:#444a73;font-style:italic"># Calls the :title method in EntryProto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">when-let&lt;/span> [u (&lt;span style="color:#ff966c">:url&lt;/span> d)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:a&lt;/span> {&lt;span style="color:#ff966c">:href&lt;/span> u} &lt;span style="color:#c3e88d">&amp;#34;Link&amp;#34;&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:p&lt;/span> (&lt;span style="color:#ff966c">:explanation&lt;/span> d)]])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> data)])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#82aaff">array/push&lt;/span> data (wrap-entry @{&lt;span style="color:#c3e88d">&amp;#34;title&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;Bla&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d">&amp;#34;links&amp;#34;&lt;/span> @[@{&lt;span style="color:#c3e88d">&amp;#34;target&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;https://google.com&amp;#34;&lt;/span>}]}))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Whelp, that&amp;rsquo;s worse (a separate for everything?! Why don&amp;rsquo;t short funcs like &lt;code>|($ &amp;quot;target&amp;quot;)&lt;/code> work here!?) and this is Lisp (Lispers know &lt;a href="https://dreamsongs.com/WorseIsBetter.html">Worse Is Better&lt;/a>) so let&amp;rsquo;s make a macro:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defmacro&lt;/span> def-entity [name &amp;amp; p]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> schema-map (&lt;span style="color:#82aaff">apply&lt;/span> struct p))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> getters (&lt;span style="color:#82aaff">map&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> [[k path]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">if&lt;/span> (&lt;span style="color:#c3e88d">or&lt;/span> (&lt;span style="color:#82aaff">tuple?&lt;/span> path) (&lt;span style="color:#82aaff">array?&lt;/span> path))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#c3e88d">defn&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>(&lt;span style="color:#82aaff">symbol&lt;/span> k) [d] (&lt;span style="color:#82aaff">get-in&lt;/span> d &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>path))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#c3e88d">defn&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>(&lt;span style="color:#82aaff">symbol&lt;/span> k) [d] (&lt;span style="color:#82aaff">get&lt;/span> d &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>path)))) &lt;span style="color:#444a73;font-style:italic"># get keeps symmetry&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">pairs&lt;/span> schema-map)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> constructor
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#c3e88d">defn&lt;/span> make [&amp;amp;keys args]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> res @{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">loop&lt;/span> [[k v] &lt;span style="color:#ff966c">:in&lt;/span> (&lt;span style="color:#82aaff">pairs&lt;/span> args)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">if-let&lt;/span> [path (&lt;span style="color:#82aaff">get&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>schema-map k)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">if&lt;/span> (&lt;span style="color:#82aaff">string?&lt;/span> path)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">put&lt;/span> res path v)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">eprint&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;Unhandled stuff: &amp;#34;&lt;/span> k))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">eprint&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;Unknown schema key: &amp;#34;&lt;/span> k)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> res))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#c099ff">upscope&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,;&lt;/span>getters &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>constructor))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(def-entity Entry
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:time&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;time&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:topic&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;topic&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:explanation&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;explanation&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:title&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;title&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:links&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;links&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:url&lt;/span> [&lt;span style="color:#c3e88d">&amp;#34;links&amp;#34;&lt;/span> &lt;span style="color:#ffc777">0&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;target&amp;#34;&lt;/span>] &lt;span style="color:#444a73;font-style:italic"># note the nesting!&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">def&lt;/span> data ((json/decode (&lt;span style="color:#82aaff">slurp&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;entries.json&amp;#34;&lt;/span>)) &lt;span style="color:#c3e88d">&amp;#34;active&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> home [request]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:div&lt;/span> {&lt;span style="color:#ff966c">:class&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;tc&amp;#34;&lt;/span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:h1&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;You found joy!&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">map&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> [d]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:p&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:b&lt;/span> (title d)] &lt;span style="color:#444a73;font-style:italic"># now call generated funcs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">when&lt;/span> (url d)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:a&lt;/span> {&lt;span style="color:#ff966c">:href&lt;/span> (url d)} &lt;span style="color:#c3e88d">&amp;#34;Link&amp;#34;&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:span&lt;/span> (explanation d)]])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> data)])
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The schema&amp;rsquo;s all duplication, so let&amp;rsquo;s use an array based schema (and keywords). We should also handle other things like SQL:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defmacro&lt;/span> def-entity [name &amp;amp; fields]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> schema &lt;span style="color:#444a73;font-style:italic"># Normalize fields to {name path}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">from-pairs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">map&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> [f]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">if&lt;/span> (&lt;span style="color:#82aaff">keyword?&lt;/span> f)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [f f]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> fields)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> getters
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">map&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> [[k path]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> func-name (&lt;span style="color:#82aaff">symbol&lt;/span> k))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> fetch-expr
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">if&lt;/span> (&lt;span style="color:#c3e88d">or&lt;/span> (&lt;span style="color:#82aaff">tuple?&lt;/span> path) (&lt;span style="color:#82aaff">array?&lt;/span> path))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#82aaff">get-in&lt;/span> d &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>path)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#82aaff">get&lt;/span> d &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>path)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#c3e88d">defn&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>func-name [d] &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>fetch-expr))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">pairs&lt;/span> schema)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#444a73;font-style:italic"># make the wrapping proto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> assignments
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">map&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> [[k path]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> fetch-expr
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">if&lt;/span> (&lt;span style="color:#c3e88d">or&lt;/span> (&lt;span style="color:#82aaff">tuple?&lt;/span> path) (&lt;span style="color:#82aaff">array?&lt;/span> path))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#82aaff">get-in&lt;/span> source &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>path)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#82aaff">get&lt;/span> source &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>path)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#82aaff">put&lt;/span> res &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>k &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>fetch-expr))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">pairs&lt;/span> schema)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> constructor-name (&lt;span style="color:#82aaff">symbol&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;make-&amp;#34;&lt;/span> name))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> constructor
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#c3e88d">defn&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>constructor-name [source]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> res @{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">,;&lt;/span>assignments
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> res))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#c099ff">upscope&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,;&lt;/span>getters &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>constructor))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(def-entity Entry
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:time&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:topic&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:title&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:explanation&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:url&lt;/span> [&lt;span style="color:#ff966c">:links&lt;/span> &lt;span style="color:#ffc777">0&lt;/span> &lt;span style="color:#ff966c">:target&lt;/span>]])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">def&lt;/span> data ((json/decode (&lt;span style="color:#82aaff">slurp&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;entries.json&amp;#34;&lt;/span>) &lt;span style="color:#c3e88d">true&lt;/span>) &lt;span style="color:#ff966c">:active&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> home [request]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:div&lt;/span> {&lt;span style="color:#ff966c">:class&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;tc&amp;#34;&lt;/span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:h1&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;You found joy!&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">map&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> [d]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:p&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:b&lt;/span> (title d)] &lt;span style="color:#444a73;font-style:italic"># now call generated funcs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">when&lt;/span> (url d)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:a&lt;/span> {&lt;span style="color:#ff966c">:href&lt;/span> (url d)} &lt;span style="color:#c3e88d">&amp;#34;Link&amp;#34;&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:span&lt;/span> (explanation d)]])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> data)])
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For an SQL example, just drop in &lt;code>def-entity&lt;/code> and this to replace &lt;code>create&lt;/code> in &lt;a href="https://codeberg.org/veqq/janetdocs/src/commit/acf09e37d505aecd3cfe278c927b64ed5624289c/routes/examples.janet#L163">examples/export&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(def-entity JDSchema
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:body&lt;/span> &lt;span style="color:#444a73;font-style:italic"># simple field w matching names&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:account-id&lt;/span> [&lt;span style="color:#ff966c">:account&lt;/span> &lt;span style="color:#ff966c">:id&lt;/span>]] &lt;span style="color:#444a73;font-style:italic"># flatten objects&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:account-login&lt;/span> [&lt;span style="color:#ff966c">:account&lt;/span> &lt;span style="color:#ff966c">:login&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:binding-id&lt;/span> [&lt;span style="color:#ff966c">:binding&lt;/span> &lt;span style="color:#ff966c">:id&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:binding-name&lt;/span> [&lt;span style="color:#ff966c">:binding&lt;/span> &lt;span style="color:#ff966c">:name&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:package-id&lt;/span> [&lt;span style="color:#ff966c">:package&lt;/span> &lt;span style="color:#ff966c">:id&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ff966c">:package-name&lt;/span> [&lt;span style="color:#ff966c">:package&lt;/span> &lt;span style="color:#ff966c">:name&lt;/span>]])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> create [request]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> {&lt;span style="color:#ff966c">:body&lt;/span> body &lt;span style="color:#ff966c">:params&lt;/span> params} request)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">when-let&lt;/span> [login (&lt;span style="color:#82aaff">get-in&lt;/span> request [&lt;span style="color:#ff966c">:session&lt;/span> &lt;span style="color:#ff966c">:login&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> account (db/find-by &lt;span style="color:#ff966c">:account&lt;/span> &lt;span style="color:#ff966c">:where&lt;/span> {&lt;span style="color:#ff966c">:login&lt;/span> login})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> binding (db/find-by &lt;span style="color:#ff966c">:binding&lt;/span> &lt;span style="color:#ff966c">:where&lt;/span> {&lt;span style="color:#ff966c">:id&lt;/span> (params &lt;span style="color:#ff966c">:binding-id&lt;/span>)})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> package (db/find-by &lt;span style="color:#ff966c">:package&lt;/span> &lt;span style="color:#ff966c">:where&lt;/span> {&lt;span style="color:#ff966c">:id&lt;/span> (binding &lt;span style="color:#ff966c">:package-id&lt;/span>)})]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">if&lt;/span> (blank? (body &lt;span style="color:#ff966c">:body&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (new (&lt;span style="color:#82aaff">merge&lt;/span> request {&lt;span style="color:#ff966c">:errors&lt;/span> {&lt;span style="color:#ff966c">:body&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;Body can&amp;#39;t be blank&amp;#34;&lt;/span>}}))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (db/insert &lt;span style="color:#ff966c">:example&lt;/span> (make-JDSchema {&lt;span style="color:#ff966c">:account&lt;/span> account &lt;span style="color:#444a73;font-style:italic"># this struct holds values&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:binding&lt;/span> binding
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:package&lt;/span> package
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:body&lt;/span> (body &lt;span style="color:#ff966c">:body&lt;/span>)}))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (redirect (binding-show-url binding))))))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I leave deduplicating JDSchema and the holding struct as an exercise to the reader, but is this really &lt;em>better&lt;/em> than the original?&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> create [request]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> {&lt;span style="color:#ff966c">:body&lt;/span> body &lt;span style="color:#ff966c">:params&lt;/span> params} request)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">when-let&lt;/span> [login (&lt;span style="color:#82aaff">get-in&lt;/span> request [&lt;span style="color:#ff966c">:session&lt;/span> &lt;span style="color:#ff966c">:login&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> account (db/find-by &lt;span style="color:#ff966c">:account&lt;/span> &lt;span style="color:#ff966c">:where&lt;/span> {&lt;span style="color:#ff966c">:login&lt;/span> login})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> binding (db/find-by &lt;span style="color:#ff966c">:binding&lt;/span> &lt;span style="color:#ff966c">:where&lt;/span> {&lt;span style="color:#ff966c">:id&lt;/span> (params &lt;span style="color:#ff966c">:binding-id&lt;/span>)})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> package (db/find-by &lt;span style="color:#ff966c">:package&lt;/span> &lt;span style="color:#ff966c">:where&lt;/span> {&lt;span style="color:#ff966c">:id&lt;/span> (binding &lt;span style="color:#ff966c">:package-id&lt;/span>)})]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">if&lt;/span> (blank? (body &lt;span style="color:#ff966c">:body&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (new (&lt;span style="color:#82aaff">merge&lt;/span> request {&lt;span style="color:#ff966c">:errors&lt;/span> {&lt;span style="color:#ff966c">:body&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;Body can&amp;#39;t be blank&amp;#34;&lt;/span>}}))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (db/insert &lt;span style="color:#ff966c">:example&lt;/span> {&lt;span style="color:#ff966c">:account-id&lt;/span> (account &lt;span style="color:#ff966c">:id&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:account-login&lt;/span> (account &lt;span style="color:#ff966c">:login&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:binding-id&lt;/span> (binding &lt;span style="color:#ff966c">:id&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:binding-name&lt;/span> (binding &lt;span style="color:#ff966c">:name&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:package-id&lt;/span> (package &lt;span style="color:#ff966c">:id&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:package-name&lt;/span> (package &lt;span style="color:#ff966c">:name&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff966c">:body&lt;/span> (body &lt;span style="color:#ff966c">:body&lt;/span>)})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (redirect (binding-show-url binding))))))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We don&amp;rsquo;t have to specify &lt;code>package-id&lt;/code> etc. but at minimum we must always indicate what data we&amp;rsquo;re changing: &lt;code>[account binding package (body :body)]&lt;/code> That&amp;rsquo;s the real issue. Really, we can only choose between:&lt;/p>
&lt;ul>
&lt;li>&lt;code>(ds key&lt;/code>&lt;/li>
&lt;li>&lt;code>(ds :key)&lt;/code>&lt;/li>
&lt;li>&lt;code>(:getter ds)&lt;/code>&lt;/li>
&lt;li>&lt;code>(getter ds)&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>(I&amp;rsquo;m not sure what I prefer.) Even if we just do &lt;code>key&lt;/code>, how far does that get us? Is there a better way? Has Betteridge struck again? Hold tight while we hunt for tacit, point-free CRUD!&lt;/p></content:encoded></item><item><title>Sketching Janet 2</title><link>https://alexalejandre.com/notes/janet2/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/notes/janet2/</guid><description>A growing collection of ideas to make the best programming language ever</description><content:encoded>&lt;p>We must &lt;a href="https://janet.zulipchat.com/#narrow/channel/399615-general/topic/I.20have.20addressed.20everything.20that.20bothered.20me.20in.20janet.2E/with/569950717">be the change you want to be&lt;/a>&lt;/p>
&lt;p>Grow&lt;/p>
&lt;ul>
&lt;li>combine with Prolog/minikanren and APL (a la Shen) &lt;a href="https://alexalejandre.com/notes/unity-of-paradigms/">https://alexalejandre.com/notes/unity-of-paradigms/&lt;/a>&lt;/li>
&lt;li>OS features like DB, networking (a la plan9)&lt;/li>
&lt;li>sh-dsl and joy features&lt;/li>
&lt;li>&lt;a href="http://code.jsoftware.com/wiki/Vocabulary/Dissect">dissect&lt;/a> besides disasm&lt;/li>
&lt;li>J locales might be the best scoping and namespacing
&lt;ul>
&lt;li>in Q typing a name space in the REPL tells you what&amp;rsquo;s there&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Janet already has short funcs with predefined variables, but maybe there&amp;rsquo;s a more elegant approach - k defaults to 3 predefined inputs, Q lets you define inputs then do point free stuff
&lt;ul>
&lt;li>point free coe is an AST already, easily optimizable, however hooks and forms make you count verbs to the left and right&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>K/Q have strong IPC, you make many processes constantly communicating together&lt;/li>
&lt;li>errors handling? &lt;a href="https://lobste.rs/s/ce0ksl/second_great_error_model_convergence">https://lobste.rs/s/ce0ksl/second_great_error_model_convergence&lt;/a>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>jubilation about transducers overlooked that they are just a less generic form of ad-hoc polymorphism, invented to abstract over operations on collections&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>APL isn&amp;rsquo;t really one of these exhibitions of computational simplicity in the way of the languages you mention. It&amp;rsquo;s inventor, Kenneth Iverson, was more focused on the human side of thinking in and using the language. Forth, Lisp, et al are quite easy to implement, but they require considerable library layers on top to make them useful for expressing application-level logic, even if we just focus on the pure functions. APL, on the other hand, has a larger core set of primitives, but you&amp;rsquo;re then immediately able to concisely express high-level application logic. - &lt;a href="https://news.ycombinator.com/item?id=44197284">xelxebar&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Though succinct notation &lt;em>is&lt;/em> a tool of thought, the operator set (having found its truest expression in BQN?) is key, raising the level of abstraction. I promose allowing longhand names and symbolic or ASCII shorthand. Array manipulations work just as well on tables, whether in K, Fennel or&amp;hellip;&lt;/p>
&lt;p>K forgoes rank fine in its target problem space, but some problems benefit. Which problem types benefit from rank? I suspect rank will be desirable - but perhaps through split primitives to avoid complexity in simple (far more common) cases.&lt;/p>
&lt;p>Bakpakin does not approve of renaming things much, although the community &lt;a href="https://github.com/janet-lang/janet/issues/1248">often&lt;/a> did &lt;a href="https://github.com/janet-lang/janet/discussions/1251">think&lt;/a> and &lt;a href="https://github.com/janet-lang/janet/issues/626">discuss&lt;/a> it.&lt;/p>
&lt;p>&lt;code>;&lt;/code> &lt;code>#&lt;/code> break holy and sacrosanct tradition!&lt;/p>
&lt;ul>
&lt;li>weird naming:
&lt;ul>
&lt;li>&lt;a href="https://github.com/janet-lang/janet/issues/626">https://github.com/janet-lang/janet/issues/626&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/janet-lang/janet/discussions/1251">https://github.com/janet-lang/janet/discussions/1251&lt;/a>&lt;/li>
&lt;li>&lt;code>any?&lt;/code> is not a predicate but a functional &lt;code>or&lt;/code>, also &lt;code>any&lt;/code>&lt;/li>
&lt;li>&lt;code>any&lt;/code>, &lt;code>some&lt;/code>, &lt;code>all&lt;/code>&lt;/li>
&lt;li>inconsistent theming: &lt;code>freeze&lt;/code>, &lt;code>thaw&lt;/code> vs immutable&lt;/li>
&lt;li>&lt;code>sort&lt;/code>, &lt;code>sorted&lt;/code>, yet &lt;code>reverse&lt;/code>, &lt;code>reverse!&lt;/code> Bakpakin doesn&amp;rsquo;t want many &lt;code>!&lt;/code>
&lt;ul>
&lt;li>more without a ! &lt;code>put&lt;/code>, &lt;code>set&lt;/code>, &lt;code>update&lt;/code>, &lt;code>array/push&lt;/code>, &lt;code>array/insert&lt;/code>, &lt;code>array/remov&lt;/code>&lt;/li>
&lt;li>n.b. they return stuff, so they&amp;rsquo;re useful in pipelines etc.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>chr&lt;/code> confuses people who want it named &lt;code>byte&lt;/code>&lt;/li>
&lt;li>&lt;code>accumulate&lt;/code> - could be named &lt;code>scan&lt;/code> or &lt;code>folding-map&lt;/code>
&lt;ul>
&lt;li>&lt;code>reduce&lt;/code>, &lt;code>reduce2&lt;/code>, &lt;code>accumulate2&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>keep-syntax&lt;/code> and &lt;code>keep-syntax!&lt;/code> - the &lt;code>!&lt;/code> isn&amp;rsquo;t mutable but rather coerces the types!&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>change by accretion, add new, don&amp;rsquo;t break old (this made me think of a rationalization library, aliasing functions with better names e.g. set!)&lt;/p>
&lt;ul>
&lt;li>&lt;code>next&lt;/code> - i think this is effectively the same as asking if something is not empty&lt;/li>
&lt;li>&lt;code>invert&lt;/code> - i think this can be used to make a table from an indexed value that is effectively a sort of set&lt;/li>
&lt;/ul>
&lt;p>I am reluctant to use these as-is in my own code to express the meanings above because i suspect i will rapidly forget their intent&amp;hellip;thereby leaving my future self with puzzles i could have avoided&lt;/p>
&lt;p>Such fixes are blocked to not break holy backwards compatability, which right, nevertheless sad. It is currently possible to just alias over (almost) everything and e.g. &lt;a href="https://github.com/llmII/jumble/blob/master/jumble/moddoc.janet">manipulate doc strings&lt;/a> but that serves little purpose without fundamental improvements.&lt;/p>
&lt;blockquote>
&lt;p>I thing the problem with adopting the &lt;code>!&lt;/code> suffix is that so many functions in the core mutate inputs that it would just become extra noise in the code. It works in Clojure because most functions &lt;em>don&amp;rsquo;t&lt;/em> mutate inputs.&lt;/p>
&lt;p>Anyways, what I will not do is append &lt;code>!&lt;/code> to all functions that mutate their input for the sake of bike shedding. - &lt;a href="https://github.com/janet-lang/janet/issues/626#issuecomment-773713106">Bakpakin&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Implementation&lt;/p>
&lt;ul>
&lt;li>bakpakin &lt;a href="https://alexalejandre.com/programming/interview-with-bakpakin/">said&lt;/a> the current memory model is somehow unfixable (without breaking), so fix it&lt;/li>
&lt;li>implement directly on linux system calls to have no dependencies, not even c? &lt;a href="https://github.com/lone-lang/lone">https://github.com/lone-lang/lone&lt;/a> but then how to extend? But cffi could be necessary?&lt;/li>
&lt;li>intermediary representation / simplified assembly based on Common Lisp or Go&amp;rsquo;s, maybe? Wasm? Or what to do with the bytecode?&lt;/li>
&lt;li>&lt;a href="https://code.jsoftware.com/wiki/Essays/Incunabulum">Arthur Whitney stye&lt;/a> c is lovely, but do it in zig. I don&amp;rsquo;t think it can be done in Rust (for memory and succinctness issues.) Potentially c would make sense, but&amp;hellip;
&lt;ul>
&lt;li>macros climb the abstraction ladder. Reading you consume definitions from the top down&lt;/li>
&lt;li>brevity leads to expressivity&lt;/li>
&lt;li>&lt;a href="https://www.jsoftware.com/help/jforc/contents.htm">&amp;rsquo;thinking big&amp;rsquo; in programming&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>k has the best practices, breaking many &amp;ldquo;truths&amp;rdquo; industry holds&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Every character carries a lot of meaning. A line of J could replace a page of just about anything else. In any other language, your brain ain’t working half the time; instantiating things, making iterators go, building brain dead switch statements, dealing with preposterous function call overhead or declarations, writing dumb helper patterns that are a tiny variation on something you have done 100 times before. With J you have to pay attention at all times. The line-noise look of the language makes you think better. I’m hoping it also makes you more productive; I figure a page of code a day is a decent amount of output; a page of J will do a lot of useful work. - &lt;a href="https://scottlocklin.wordpress.com/2012/09/18/a-look-at-the-j-language-the-fine-line-between-genius-and-insanity/">Scott Locklin&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Your CPU has a shockingly small amount of &lt;strong>directly-attached memory&lt;/strong> (around 64kb). That&amp;rsquo;s been true since the 1970s, and is likely to be true for another fifty years. This &lt;strong>used to be called RAM&lt;/strong>, but now we call anything directly addressable by the CPU as RAM, and we call this thing cache (or L1 or whatever) because that&amp;rsquo;s basically how most people use it. [1]&lt;/p>
&lt;p>Now what your CPU does all day, is look at a memory address, and if that&amp;rsquo;s not in the cache, it sends a message to a memory controller and waits for that memory to show up (somewhat a simplification). Those instructions show up, now your CPU can execute them, and those instructions require more memory so again the CPU sends a message to the memory controller and waits for that memory to show up. All day long, alternating between these two wait states, we wait a bit for code, we wait a bit for data, and then we repeat.&lt;/p>
&lt;p>Because K is small: Because the interpreter, the application source code, and all your state variables fit into that 64kb, you can see that memory waiting drops by half. - &lt;a href="https://news.ycombinator.com/item?id=22566752">geocar&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>k&amp;rsquo;s fast (for an interpreter), because instead of for example a bytecode interpreter where each instruction operates on a single value, APL/j/k interpreters execute operators over whole arrays at once with optimized C code. - &lt;a href="https://news.ycombinator.com/item?id=22565699">ehallewicz2&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>the set of operators has been designed to work with each other and cover the basic concrete needs (i.e what the CPU actually needs to do rather than how you would describe it in words). &lt;code>,//&lt;/code> is a complete implementation of “flatten”. &lt;code>|/0(0|+)\&lt;/code> is a complete implementation of an efficient the maximum-subarray-sum. In both cases, each character does one very well defined thing implemented in tight C (sometimes SIMD) code, and K interpreter just orchestrates how they interact. - &lt;a href="https://news.ycombinator.com/item?id=22565817">beagle3&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Lisp macros are awesome because they condense/abstact away repeated code. What&amp;rsquo;s the optimal function and macro set for productive coding? I suspect many array operators are in it. Much Lisp effort&amp;rsquo;s gone to finding the smallest primitive set - not the set leading to smaller solutions.&lt;/p>
&lt;blockquote>
&lt;blockquote>
&lt;p>Is there something about the primitives that APL-derivitives provide that mean that more of your program can happen inside the primitives so the interpreter is doing less work?&lt;/p>&lt;/blockquote>
&lt;p>Yes. Well, maybe not the primitives themselves, so much as how the language pushes you to use them.&lt;/p>
&lt;p>J interpreter execution tends to be a few tight loops in built-in verb implementations, the loops are glued together with some interpretation-style higher-overhead dispatch code. Implicit looping incurs a once-per-array-op cost, but the cost of the computation done on each array element dominates the total cost. The interpreter is not especially clever, but &lt;strong>the language encourages the programmer to write code that&amp;rsquo;s easy for the interpreter to handle.&lt;/strong>&lt;/p>
&lt;p>Performance is a bit fragile though. If the operation you&amp;rsquo;re lifting over a whole array includes array-lifted operations internally, now you&amp;rsquo;re doing the heavy interpretive dispatch inside the loop. As a simple example, &lt;code>{.+{:&lt;/code> means &amp;ldquo;add the first item to the last item.&amp;rdquo; If you apply it to a vector, it adds the first and last scalars. If you apply it to a matrix, it adds the first and last rows (and so on). Applying it to a very wide matrix is cheap because &lt;code>{.&lt;/code> and &lt;code>{:&lt;/code> just have to select the right rows, and then you have a simple loop over those rows&amp;rsquo; elements. It&amp;rsquo;s about 166ms on my laptop with ten million row elements:&lt;/p>
&lt;pre>&lt;code> wide =. i. 2 10000000
6!:2 '({.+{:) wide'
&lt;/code>&lt;/pre>
&lt;p>0.166085ms&lt;/p>
&lt;p>With the data oriented the other way, there&amp;rsquo;s no inherent reason computation should be any slower, but it is. &lt;code>({.+{:)&amp;quot;1&lt;/code> means, &amp;ldquo;apply &lt;code>{.+{:&lt;/code> to each individual vector.&amp;rdquo; So we&amp;rsquo;ve changed from selecting the top and bottom from each column to selecting the left and right from each row. The way the J interpreter is structured, we have to figure out the loop for &lt;code>{.+{:)&amp;quot;1&lt;/code>, but the loop body isn&amp;rsquo;t just grabbing two numbers and adding them. The loop body jumps back to the interpreter to figure out how &lt;code>{.+{:&lt;/code> should work on a 2-element vector. That takes about as long as figuring out how it should work on a 2-row matrix, but we do that for all ten million vectors.&lt;/p>
&lt;pre>&lt;code> tall =. i. 10000000 2
6!:2 '({.+{:)&amp;quot;1 tall'
&lt;/code>&lt;/pre>
&lt;p>2.99855ms&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://news.ycombinator.com/item?id=22568448">kd0amg&lt;/a>&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;p>Of simplicity in minimal OS like kOS:&lt;/p>
&lt;blockquote>
&lt;p>Arthur writes pretty plain/linear-looking code, with little branching because duh, branching is usually slow. There are no modules or layers- the HID ISR writes the event data into a k object and calls k. The timer ISR is the same code. The frame buffer is memory mapped to the gpu but on the cpu-side has a k header in front. NVME hardware is memory mapped&amp;hellip;&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>The main kos feature is what message sending is as expensive as negating a pointer and writing it to a memory address, and this is possible because all the code and global variables are in the higher half (negative pointers).&lt;/p>&lt;/blockquote>
&lt;h3 id="why-did-people-leave-janet">Why did people leave Janet?&lt;/h3>
&lt;p>Its a combination of language features out of the box and the frameworks and libraries at the time.&lt;/p>
&lt;ul>
&lt;li>How do I compress and resize images? In JS the winning library for image manipulation is sharp. But sharp isn&amp;rsquo;t available everywhere, like Cloudflare workers. Workers has their own image manipulation tool now too. &lt;/li>
&lt;li>How do I hash something for deduplication? I solved that with janetls at the time. JS has its own language-built-in crypto set of functions. &lt;/li>
&lt;li>How do I parse cookies? How do I authenticate cookie sessions or the like? &lt;/li>
&lt;li>How do I do access control? (Firmly in the land of frameworks)&lt;/li>
&lt;li>How do I parse markdown and make my own html with it? How do I recognize my own special token to inject a component unique to my environment?&lt;/li>
&lt;li>And the usual &amp;ldquo;Hey this guy in IRC / Matrix made this library I like and suddenly they&amp;rsquo;re not around anymore&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;p>Speaking of parsing, the tools Janet has are incredible. But nigh undebuggable. I found Parsec in Haskell to be much more enjoyable, honestly.&lt;/p>
&lt;hr>
&lt;p>[1] Tangentially, is it true that modern caches (directly-attached memory) were called RAM in the past? From wiki:&lt;/p>
&lt;blockquote>
&lt;p>Originally, PCs contained less than 1 mebibyte of RAM, which often had a response time of 1 CPU clock cycle, meaning that it required 0 wait states. Larger memory units are inherently slower than smaller ones of the same type, simply because it takes longer for signals to traverse a larger circuit. Constructing a memory unit of many gibibytes with a response time of one clock cycle is difficult or impossible. Modern CPUs often still have a mebibyte of 0 wait state cache memory, but it resides on the same chip as the CPU cores due to the bandwidth limitations of chip-to-chip communication.&lt;/p>&lt;/blockquote></content:encoded></item><item><title>Unity of Paradigms</title><link>https://alexalejandre.com/programming/unity-of-paradigms/</link><pubDate>Wed, 24 Dec 2025 18:15:15 -0700</pubDate><guid>https://alexalejandre.com/programming/unity-of-paradigms/</guid><description>Map/filter/reduce, APL and Relational Algebra seem to be the same</description><content:encoded>&lt;h3 id="relational-algebra">Relational Algebra&lt;/h3>
&lt;ul>
&lt;li>constrained algebra of set theory for querying relations [tuple calculus?] or [APL is to arrays as RA is to tuple sets]&lt;/li>
&lt;li>uses sets of tuples (rows) in a relation (table) which share attributes (columns) [relation is tuple set over attribute]&lt;/li>
&lt;li>Symbols:
&lt;ul>
&lt;li>∪ union&lt;/li>
&lt;li>− set difference&lt;/li>
&lt;li>× cartesian product&lt;/li>
&lt;li>σ selection (&lt;code>WHERE&lt;/code>)&lt;/li>
&lt;li>π projection (&lt;code>SELECT&lt;/code>)&lt;/li>
&lt;li>ρ rename (naming is important, after all lambda calculus is just about naming things)&lt;/li>
&lt;li>∩ intersection&lt;/li>
&lt;li>⋈ join&lt;/li>
&lt;li>γ for grouping&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>∪ − × σ π ρ are minimally relationally complete as &lt;code>R ∩ S = R − (R − S)&lt;/code> and &lt;code>R ⋈ S = σ cond (R × S)&lt;/code>. You can also do &lt;code>R ∩ S = R −(R − S)&lt;/code>&lt;/li>
&lt;/ul>
&lt;h5 id="sql-diverges-from-ra">SQL diverges from RA&lt;/h5>
&lt;ul>
&lt;li>duplicate rows while relations are sets. Tables are multisets because removing duplicates is computationally expensive&lt;/li>
&lt;li>RA lacks order&lt;/li>
&lt;li>null/3-valued logic - RA is 2-valued logic and assumes a closed world (no unknowns)&lt;/li>
&lt;li>aggegation and group - Codd&amp;rsquo;s RA only works on wholes (but many use γ)&lt;/li>
&lt;/ul>
&lt;h3 id="ra-resembles-apl">RA resembles APL&lt;/h3>
&lt;ul>
&lt;li>declaratively compose bulk ops&lt;/li>
&lt;li>RA works on unordered structural records (like maps), APL uses ordered multi dimensional grids
&lt;ul>
&lt;li>Tuple (row) resembles an immutable map. Relation is set/bag of these maps. (In first normal form) RA uses joins, not nested structures, which we can see as precomputed joins!&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>RA&lt;/th>
&lt;th>APL&lt;/th>
&lt;th>FP&lt;/th>
&lt;th>Note&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>σ&lt;/td>
&lt;td>&lt;code>⊃/&lt;/code>&lt;/td>
&lt;td>filter&lt;/td>
&lt;td>By predicate&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>π&lt;/td>
&lt;td>indexing&lt;/td>
&lt;td>map&lt;/td>
&lt;td>Implicit in APL&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>∪&lt;/td>
&lt;td>&lt;code>∪&lt;/code>&lt;/td>
&lt;td>concat&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>×&lt;/td>
&lt;td>&lt;code>∘.,&lt;/code> or just &lt;code>,&lt;/code>&lt;/td>
&lt;td>mapcat&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ρ&lt;/td>
&lt;td>&lt;code>←&lt;/code>&lt;/td>
&lt;td>def or let&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⋈&lt;/td>
&lt;td>&lt;code>⌿&lt;/code>&lt;/td>
&lt;td>mapcat then filter&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>−&lt;/td>
&lt;td>&lt;code>/&lt;/code> or `~&lt;/td>
&lt;td>filter&lt;/td>
&lt;td>By neg. predicate&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Also see &lt;a href="https://storytotell.org/relational-thinking-in-j">Relational Thinking in J&lt;/a>&lt;/p>
&lt;h5 id="prolog-emerges-from-ra">Prolog emerges from RA&lt;/h5>
&lt;ul>
&lt;li>state facts/relations and query&lt;/li>
&lt;li>Prolog can create new facts with rules or infer them from rules on facts&lt;/li>
&lt;li>Datalog is Prolog without funcs, so all querries resolve [are finite]&lt;/li>
&lt;li>Set theory defines set explicitly (enumerate or comprehension). RA defines set with operations on existing sets. Prolog intensionally defines sets with rules, describing the properties of members.
&lt;ul>
&lt;li>extensional - list set&amp;rsquo;s actual members&lt;/li>
&lt;li>intensional - list rules members must satisfy by relationship to others&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="functional-programming-pipelineshigher-order-functions">Functional Programming Pipelines/Higher Order Functions&lt;/h3>
&lt;ul>
&lt;li>Different paradigm but same goals?&lt;/li>
&lt;li>Query plan is tree, steps/transducers are a pipeline&lt;/li>
&lt;li>Functional programming is operative via composition [you write how to transform, not describing what relation/answer you want. FP is like writing an execution plan, which the query planner does&amp;hellip;] RA describes the result while FP describes transformations to reach the result (what the query planner does)&lt;/li>
&lt;li>&lt;code>WHERE&lt;/code> is like filter, &lt;code>SELECT&lt;/code> like map&lt;/li>
&lt;li>&amp;ldquo;collection programming&amp;rdquo; without loops declaring operations on set or composing traversal patterns like map, called &amp;ldquo;whole-meal programming&amp;rdquo; like APL too. But HOF are sequential and nested unlike APL&amp;rsquo;s. [IDK how to phrase this yet]
&lt;ul>
&lt;li>in RA reorderinng ops is semantically preserving (algebra has rewrite rules)&lt;/li>
&lt;li>APL is set at a time like RA and has global rewrite laws&lt;/li>
&lt;li>While FP pipelines work element by element, RA works on whole/arrays sets enabling algebraic rewrites and APL works on entire arrays (i.e. on whole relations)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="questions">Questions&lt;/h3>
&lt;ul>
&lt;li>Is idiomatic APL declarative?&lt;/li>
&lt;li>Is it possible to write all programs via map/reduce/filter with ops/predicates inside? You do need mapcat
&lt;ul>
&lt;li>Is the minimum &lt;code>map&lt;/code>, &lt;code>filter&lt;/code>, &lt;code>mapcat&lt;/code>, &lt;code>reduce&lt;/code>, &lt;code>zipcol&lt;/code> and &lt;code>comb&lt;/code>?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>To what extent is this true: FP pipelines are element by element, RA is row by row of elements, APL is table by table of rows of elements.&lt;/li>
&lt;li>Can we abstract them all into 1 paradigm, operating on different dimensions?&lt;/li>
&lt;li>Can we enrich any of the paradigms with operations from the others?&lt;/li>
&lt;/ul>
&lt;h3 id="look-into">Look into&lt;/h3>
&lt;ul>
&lt;li>Wholemeal programming - working with the entire datainstead of element sequence or one path&lt;/li>
&lt;li>Projective programming - solve a general problem, then transform solution into specific program&lt;/li>
&lt;li>&lt;a href="https://www.rntz.net/datafun/">https://www.rntz.net/datafun/&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.logicblox.com/technology.html">LogicBlox and LogicQL&lt;/a> &amp;ldquo;combine transactional, analytical, graph, probabilistic, and mathematical programming&amp;rdquo;&lt;/li>
&lt;li>MonetDB&lt;/li>
&lt;li>&lt;a href="http://www.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-173.pdf">Dedalus: Datalog in Time and Space&lt;/a> formalizes Datalog to include time, specifically to handle async behavior. &lt;a href="https://www.youtube.com/watch?v=R2Aa4PivG0g">https://www.youtube.com/watch?v=R2Aa4PivG0g&lt;/a> or &lt;a href="https://taylor.town/reactive-relational-algebra">https://taylor.town/reactive-relational-algebra&lt;/a> which independently found it?
&lt;ul>
&lt;li>People mention differential data flow like Missionary:
&lt;ul>
&lt;li>&lt;a href="https://news.ycombinator.com/item?id=41602759">https://news.ycombinator.com/item?id=41602759&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=xtTCdT6e9-0">https://www.youtube.com/watch?v=xtTCdT6e9-0&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>LINQ - RA in func host, with query trees vs. execution pipelines - discusses them together&lt;/li>
&lt;li>stream fusion ??? describes database algebra like whole-meal programming &amp;hellip;fusion is vectorized execution?&lt;/li>
&lt;li>dataparallel/array sql&lt;/li>
&lt;/ul></content:encoded></item><item><title>Interview With Bakpakin</title><link>https://alexalejandre.com/programming/interview-with-bakpakin/</link><pubDate>Mon, 01 Dec 2025 01:42:23 -0400</pubDate><guid>https://alexalejandre.com/programming/interview-with-bakpakin/</guid><description>Bakpakin made Janet. I asked him about the project and community.</description><content:encoded>&lt;h3 id="some-context">Some Context&lt;/h3>
&lt;p>&lt;a href="https://janet-lang.org/">Janet&lt;/a> is a Lisp inspired by Clojure, implemented in transparent C89, making small (1 mb) binaries which use a few mb of RAM. Many people love this &lt;a href="https://toodle.studio/">project&lt;/a> and &lt;a href="https://bauble.studio/">craft&lt;/a> &lt;a href="https://lisp.trane.studio/">amazing&lt;/a> &lt;a href="https://pantagruel-language.com/">things&lt;/a> with &lt;a href="https://alect.itch.io/camp-wanna-tya-knot">love&lt;/a> and &lt;a href="https://github.com/joy-framework/joy">joy&lt;/a>.&lt;/p>
&lt;p>Our community is growing and has a few big efforts. I think reaching consensus on goals will help us make informed decisions and achieve them. To that end, I interviewed &lt;a href="https://github.com/bakpakin">Bakpakin&lt;/a> hoping to jump-start a conversation.&lt;/p>
&lt;p>In the past, he wrote a &lt;a href="https://github.com/janet-lang/janet/discussions/554#discussioncomment-267822">comment&lt;/a> asking for and noting some short term goals and explaining some values:&lt;/p>
&lt;blockquote>
&lt;p>While adoption is always nice, Janet is not a commercial endeavor and my main goal is &amp;ldquo;to make a useful lisp-like programming language for scripting and extending C applications&amp;rdquo;. The hope is that if the software is good, users will come. To that end, I think the core language is mostly there, and adding more functionality is encroaching on &amp;ldquo;bloat&amp;rdquo;. However, we are not there yet and there is room to improve.&lt;/p>
&lt;p>However, wider adoption does make Janet more useful (more people adding code, more insight, more manpower, etc.), so &amp;ldquo;adoption&amp;rdquo; is just one factor that make Janet better software (and perhaps a better community).&lt;/p>&lt;/blockquote>
&lt;p>Our sister project Fennel has &lt;a href="https://fennel-lang.org/rationale">rationale&lt;/a> and &lt;a href="https://fennel-lang.org/values">values&lt;/a> docs, Clojure has a &lt;a href="https://clojure.org/about/rationale">rationale&lt;/a> too. I&amp;rsquo;m not sure whether we need such a document, but they&amp;rsquo;re nifty.&lt;/p>
&lt;h3 id="interview">Interview&lt;/h3>
&lt;p>&lt;strong>You once PMed me:&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>I have been slow to respond to Janet inquiries and discussions recently (such is life), and as such have tried to delegate some power and responsibility to people who have been both competent and consistent.&lt;/p>&lt;/blockquote>
&lt;p>&lt;strong>Technomancy mentioned you two spoke about how to make a project live beyond us. To this effect, active community building could help. I&amp;rsquo;ll ask questions about your thoughts on the project to jump start some consensus building. To what extent is this just your personal project which we like, and you do things to just for you vs. a community thing?&lt;/strong>&lt;/p>
&lt;p>I try to have empathy for the user. Frankly, I have more empathy for existing users than new users. Existing users are more important than new users. There is no corporate interest, I&amp;rsquo;m not selling anything so there&amp;rsquo;s no need to grow or sell more. We just make it good for the people who care. I&amp;rsquo;m more caring about that than making it good for myself.&lt;/p>
&lt;p>With making things last, the idea is enabling forwards compatibility and non-breaking changes, making sure there are resources for future programmers even when we&amp;rsquo;ve all moved on. Documentation shouldn&amp;rsquo;t disappear, forum posting should at least be public if not well organized.&lt;/p>
&lt;p>I&amp;rsquo;ll talk about how this project came about, where it went and how I see and &amp;ldquo;run&amp;rdquo; the community. I say &amp;ldquo;run&amp;rdquo; in quotes because in truth, I don&amp;rsquo;t really run it, which causes some confusion.&lt;/p>
&lt;p>This started out with Fennel. Later, Phil found it and the compiler has since been rewritten. I don&amp;rsquo;t think any of my original code has been left. So that&amp;rsquo;s sort of a separate project now.&lt;/p>
&lt;p>My Fennel efforts became Janet. It&amp;rsquo;s a real language, a real compiler, a real interpreter. Importantly, it does not serve any corporate interest. There&amp;rsquo;s no overarching goal beyond being a general purpose scripting language. When people ask &amp;ldquo;what&amp;rsquo;s the point? What&amp;rsquo;s the goal?&amp;rdquo; The goal is to be a tool that&amp;rsquo;s useful. I get contributions via PRs or suggestions and if they match my vision, I incorporate them. At the beginning, people advised me to set up a website and donations, which in retrospect weren&amp;rsquo;t necessary but it&amp;rsquo;s really good to have a website, documentation and community!&lt;/p>
&lt;p>I don&amp;rsquo;t want the community owned by people. But in a certain sense, everything is professionally attatched to me, so I moderate to make sure nothing crazy&amp;rsquo;s going on.&lt;/p>
&lt;p>As far as project direction, there&amp;rsquo;s a deference to taste lest it go off the rails and someone fills it with 10 features specific to their needs. I want to point out that the Janet project is done in a sense. We have incremental updates and people will always want to fix things, but big sweeping changes would be better served by a new project, which I don&amp;rsquo;t have a strict need for right now; Janet works for me. A lot of the big changes I&amp;rsquo;d make would be for the runtime, low level things, improving the compiler. But if you have suggestions, I&amp;rsquo;m happy to hear them. No one&amp;rsquo;s immune to a well written argument. If you post the problem you have, what you ran into and have a good idea, that&amp;rsquo;s &lt;a href="https://github.com/janet-lang/janet/commit/f79e4d6249ecc25f460204f2bc509dd1ad9713f5">really convincing&lt;/a>! Changes solving concrete problems are more convincing than changes helping to solve general problems.&lt;/p>
&lt;p>Real improvements to Janet require starting over to enable nice changes and make it run faster without compromising its use. But a new garbage collector, internal representations JIT-compiler would break backwards compatability, Right now, the goal&amp;rsquo;s no significant backward incompatible changes (barring fixing &amp;ldquo;broken&amp;rdquo; stuff). I don&amp;rsquo;t think there will ever be Janet 2. It&amp;rsquo;d have to be a new project. Stuff that can&amp;rsquo;t meet that level of stability is generally moved to spork or external packages.&lt;/p>
&lt;p>&lt;strong>There have been some attempts to rationalize documentation and vocabulary. What are your thoughts about this?&lt;/strong>&lt;/p>
&lt;p>I care about documentation, but frankly it&amp;rsquo;s just a lot of work. There &lt;em>is&lt;/em> inconsistent naming and terminology, because most of it was written probably 5 years ago while the language has evolved. But the fact that it&amp;rsquo;s still there is a testament that the language hasn&amp;rsquo;t change too much. If we go back, we could clarify things, but I have not put a ton of effort into modifying the prose, so there&amp;rsquo;s a lack of precision in it. I really appreciate when people put in effort to, you know, keep things nice and help with documentation and community. I know I&amp;rsquo;ve described the project like anarchy, but I&amp;rsquo;m still very appreciative of the help. I just mean I&amp;rsquo;m not your boss is what I&amp;rsquo;m saying.&lt;/p>
&lt;p>Our documentation and discussions are also all scattered. I first set up an IRC channel, then the freenode fiasco happened. I found IRC a bit archaic, what with the bouncers etc. so I set up &lt;a href="https://github.com/janet-lang/janet/discussions">GitHub discussions&lt;/a> which GitHub introduced during the drama but we eventually settled on &lt;a href="https://janet.zulipchat.com/">Zulip&lt;/a>.&lt;/p>
&lt;p>&lt;strong>Community management&amp;hellip; what does it mean to not be owned by people?&lt;/strong>&lt;/p>
&lt;p>There&amp;rsquo;s no formal governance structure. If you own the domain, you own it. I prefer that kind of organization because when legal issues appear, that&amp;rsquo;s how it&amp;rsquo;ll work. If something happens on my domain, it&amp;rsquo;s my problem. I guess there&amp;rsquo;s not a place for a larger organization right now.&lt;/p>
&lt;p>When I started the project, I didn&amp;rsquo;t care about copyleft, but if I were doing this all over again I might go GPL. Anyway, if you don&amp;rsquo;t like it, you can fork it. If you want to merge the forks later and I like the idea, we&amp;rsquo;ll do that. But I&amp;rsquo;ve gotten plenty of good suggestions related to garbage collection, compilers and performance which sound good, but there&amp;rsquo;s always a long tail of little problems and a lot of work. I am generally hesitant of change that I am uncomfortable of going in to fix myself if there is an issue, but if something is well reasoned and tested, that is pretty convincing and more likely to get merged.&lt;/p>
&lt;p>&lt;strong>The Go people have the goal of keeping the compiler simple over any little optimization, do you agree with that?&lt;/strong>&lt;/p>
&lt;p>Yes.&lt;/p>
&lt;p>Really where I care about the quality, there&amp;rsquo;s the Janet codebase, specifically C which has to be good because of security repercussions. I also care about Spork, our contrib library. If I were to redo it, Spork would be part of Janet, one repository, versioned and tested together. So that&amp;rsquo;s where I try to maintain the level of quality. That means it&amp;rsquo;s tested, matches things, there&amp;rsquo;s not bad performance, specifically big O performance. Janet&amp;rsquo;s not ever going to win any speed contest. Here are some C style points:&lt;/p>
&lt;ul>
&lt;li>Don&amp;rsquo;t break userspace (existing programs)&lt;/li>
&lt;li>Keep the doc strings short and mostly plain text - they are included in binaries&lt;/li>
&lt;li>C code is C99 + platform specifics, mainly for MSVC, clang, and gcc&lt;/li>
&lt;li>C code - correctness is more important that making it pretty or &amp;ldquo;clean&amp;rdquo;. Don&amp;rsquo;t do anything too stupid, but high performance is not a primary goal.&lt;/li>
&lt;li>Please don&amp;rsquo;t mess with the build system too much&lt;/li>
&lt;/ul>
&lt;p>There&amp;rsquo;s a &lt;a href="https://github.com/janet-lang/janet/blob/master/CONTRIBUTING.md">contribution guide&lt;/a>, git history and example code too. At the end of the day, it&amp;rsquo;s hard to just codify every little opinion I have, so I try not to be too nit-picky.&lt;/p>
&lt;p>As for things which other people like and I don&amp;rsquo;t, people want immutable data structures to just work and be fast. The truth is, I&amp;rsquo;ve never seen that just work and be fast, ever, anywhere. There are some technical reasons why it&amp;rsquo;s not great for Janet.&lt;/p>
&lt;p>I like Clojure&amp;rsquo;s &amp;ldquo;change by accretion&amp;rdquo;, trying to add new things rather than breaking old things, &lt;a href="https://github.com/janet-lang/janet/commit/b92992c86287e107d3f0a5c87dc5de9ab26ecec5">function2&lt;/a> instead of breaking old code. The package managers are a salient example of this with our tools.&lt;/p>
&lt;p>&lt;strong>What Clojure practices do you like or dislike?&lt;/strong>&lt;/p>
&lt;p>I like the aesthetics, general syntax and macros. A lot of this comes from Common Lisp, but terser than Common Lisp&amp;rsquo;s verbose default functions. So like Clojure, terse code is another a goal.&lt;/p>
&lt;p>We have a very small core language, 13 special forms. We had less but grew it out. We build that out into 600 built-in forms.&lt;/p>
&lt;p>But that&amp;rsquo;s just the Syntax, the runtime is more like Lua, Python or your favorite scripting language. There&amp;rsquo;s a simple garbage collector, no object system beneath it which would make it more like Clojure. Lately, I&amp;rsquo;ve been mostly using it like Python for file processing and text manipulation especially.&lt;/p>
&lt;p>&lt;strong>Package management is hot right now, receiving a lot of effort and forming big catalyst for this interview. We had JPM and now &amp;ldquo;modern&amp;rdquo; bundles and janet-pm. My undestanding&amp;rsquo;s that the bundle stuff does everything but networking and UI which a Janet package manager should add.&lt;/strong>&lt;/p>
&lt;p>Regarding things like package managers, there were technical problems with our original PM JPM being hard to configue. We had many bug reports where people were misconfiguring it by accident or accidentially missed a small skip when following documentation. Another issue&amp;rsquo;s that it was tied to C tool chains, to GCC, Clang how your system is set up. The second iteration decoupled that so you could use one part e.g. just the build part. I have a local project where I don&amp;rsquo;t use all the package stuff, just C compiler extractions. Many people do the opposite, using PM but don&amp;rsquo;t care about C compilers.&lt;/p>
&lt;p>There are a lot of ways to look at this. In the end, a package manager is just something which moves files around. I&amp;rsquo;ll give you an example research/self learning project of mine with computer graphics, which uses Janet and the new bundle stuff. What it doesn&amp;rsquo;t do is handle dependencies or package management, it just uses the build system. It uses bundles but doesn&amp;rsquo;t download from the internet. That distinguishes what I think is a common use case.&lt;/p>
&lt;p>This project links to some system libraries but also a bunch of assets like images 3D models, shaders etc. that I want copied over when I install it. So the bundle isn&amp;rsquo;t one module, it&amp;rsquo;s a collection of things which are versioned and released together while a module is a single import. There&amp;rsquo;s no requirement that a bundle only has one module while a bundle could have a hundred or no modules, like a system font if you&amp;rsquo;re being creative. There&amp;rsquo;s no requirement to use the dependency system we established with JPM, you coud just vendor your dependencies and put them into subversion. (I know the open source world just uses git, but in industry you see a lot of other things. So it should be agnostic to git in a way many nascent projects are not.) It&amp;rsquo;s also not dependent on any centralized file server, which is expensive infrastructure and a legal entity.&lt;/p>
&lt;p>I don&amp;rsquo;t use so many dependencies in general. But frankly, there&amp;rsquo;s enough people on the internet giving advice on how to do software engineering without evidence, so I won&amp;rsquo;t go too far into that. It &lt;em>is&lt;/em> harder to test with a lot of dependencies.&lt;/p>
&lt;p>&lt;strong>Since bundle focuses on shared/universal features, making it easier to make a package manager would you prefer many coexisting or for everyone to coalesce on a single one?&lt;/strong>&lt;/p>
&lt;p>I have some points about PMs which I know are a little unpopular, which causes some friction. I don&amp;rsquo;t want to be building something I don&amp;rsquo;t think&amp;rsquo;s a good thing to build. But clearly people kind of want that. But I also know it&amp;rsquo;s a pain in the butt to manage things yourself for every project, use git sub modules and custom build systems&amp;hellip;. It would be great if there were only one.&lt;/p>
&lt;p>The Janet binary itself has bootstrapping capabilities to build a real full package manager which does things people really want vs. what I want which is&amp;hellip;. I don&amp;rsquo;t really care. I just use git to vendor in dependencies (editor note: He manually uses &lt;code>git clone&lt;/code> or just copypastes the necessary code in) and not worry about other people&amp;rsquo;s problems to be frank.&lt;/p>
&lt;p>There&amp;rsquo;s a good point for why I&amp;rsquo;m doing this. Other people have been very nice to help, I know &lt;a href="https://github.com/rwtolbert/">Bob Tolbert&lt;/a>, &lt;a href="https://github.com/pyrmont/">Michael Camilleri&lt;/a> and &lt;a href="https://github.com/sogaiu">Sogaiu&lt;/a> have been fixing up my 80% code and I&amp;rsquo;m very thankful for that.&lt;/p>
&lt;p>There are 2 parts of the tool. There&amp;rsquo;s a package manager which I&amp;rsquo;m not a big fan of and a build tool, which is very necessary.&lt;/p>
&lt;p>Janet being a lisp, the build tool should be self-hosted, so the REPL, the runtime can build things, call to subprocesses, coordinate its real language. That&amp;rsquo;s a great example of metaprogramming.&lt;/p>
&lt;p>Package managers on the other hand aren&amp;rsquo;t useful without strong curation, which is difficut and expensive. You need a human in the loop. There are also second order effects like name squatting. I don&amp;rsquo;t want to build a package manager without a lot of curation. What we have already is already a bit unnecessary, like the &lt;a href="https://github.com/janet-lang/pkgs">package listing&lt;/a>. You can&amp;rsquo;t just put your own package with malware on there, &lt;a href="https://git.sr.ht/~pepe/">Pepe&lt;/a> checks first. A few have commit privilege; I see commit rights as full trust for the repository. So, there&amp;rsquo;s a lot more human than technical aspects of a package manager.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Many people have proposed rationalizing naming conventions, adding exclamation marks to &lt;code>set&lt;/code> etc. Obviously that would break a lot of things, what about aliasing them? Is that pointless because current users are already happy?&lt;/strong>&lt;/p>
&lt;p>It doesn&amp;rsquo;t technically break things, but keep in mind the namespace of all default symbols. As it grows, you&amp;rsquo;re taking away common or short binding names from people.&lt;/p>
&lt;p>&lt;strong>Many don&amp;rsquo;t like the term &amp;ldquo;namespace&amp;rdquo;.&lt;/strong>&lt;/p>
&lt;p>To me a namespace is a space which contains names. There&amp;rsquo;s no concrete abstraction there. There&amp;rsquo;s just a set of names, of strings you can choose from.&lt;/p>
&lt;p>&lt;strong>Weren&amp;rsquo;t you working on a JIT?&lt;/strong>&lt;/p>
&lt;p>There&amp;rsquo;s a branch with a DSL to compile eventually to machine code, but I won&amp;rsquo;t finish anytime soon.&lt;/p>
&lt;p>&lt;strong>You&amp;rsquo;ve written that you prefer shorter docstrings, because every byte goes into every Janet binary. So small binaries is another goal?&lt;/strong>&lt;/p>
&lt;p>It is in part about saving disk space but more about saving RAM. I wouldn’t say minimalism is a goal for Janet, but we should not be particularly wasteful. If binary sizes and ram requirements grow significantly over time, that is a form of breaking compatibility on less powerful systems.&lt;/p>
&lt;p>&lt;strong>What inspired Janet&amp;rsquo;s fiber approach?&lt;/strong>&lt;/p>
&lt;p>I&amp;rsquo;d been playing around with Lua coroutines, its version of green fibers. I ran into a problem where I was trying to use them for both an event loop and error handling but you can&amp;rsquo;t because you can only yield one kind of yield. That&amp;rsquo;s where the signals come in. That has its own complications; it&amp;rsquo;s not super simple. But it allows you to use fibers for many different things and build up your own schedule. It came from Lua, a bit of Erlang. There used to be a version of Janet with native threads directly, with a thread module. But actually that might have been a good idea&amp;hellip; The event loop is nice until it isn&amp;rsquo;t, if your operating system doesn&amp;rsquo;t play nice with it&amp;hellip;&lt;/p>
&lt;p>&lt;strong>That inspired all the &lt;code>dyn&lt;/code> stuff too.&lt;/strong>&lt;/p>
&lt;p>As opposed to &lt;code>var&lt;/code>, dynamics will automatically fix themselves when you handle an error which could leave a var in a bad state when messsing with other threads, runtimes, parallel processes&amp;hellip; It&amp;rsquo;s not as efficient though.&lt;/p>
&lt;p>&lt;strong>Why did you walk away from traditional lisp syntax for &lt;code>~&lt;/code> and &lt;code>;&lt;/code>?&lt;/strong>&lt;/p>
&lt;p>The syntax was more of an accident - the original plan for syntax was actually going to be more like Python or shell, hence &lt;code>#&lt;/code> for comments, with lisp syntax being used to bootstrap things. However, there was no need to change things later.&lt;/p>
&lt;p>&lt;strong>The community has some idiosyncratic tastes like &lt;code>def&lt;/code> everywhere.&lt;/strong>&lt;/p>
&lt;p>There&amp;rsquo;s a really simple technical reasons for &lt;code>def&lt;/code>. It&amp;rsquo;s just that everything has to use what&amp;rsquo;s in the file ahead of it because we don&amp;rsquo;t have mutual recurrence nor a linking stage, so &lt;code>boot.janet&lt;/code> uses a lot of &lt;code>def&lt;/code>.&lt;/p>
&lt;p>&lt;strong>I guess the whole community just really liked boot.janet and ignored e.g. &lt;a href="https://github.com/janet-lang/janet/blob/c2cbfa4d5d480954b55017b145f54f56d2a68d9a/tools/gendoc.janet#L64">gendoc&lt;/a> which uses big lets!&lt;/strong>&lt;/p></content:encoded></item><item><title>Gradual Automation With Do Nothing Scripts</title><link>https://alexalejandre.com/programming/gradual-automation-with-do-nothing-scripts/</link><pubDate>Sun, 26 Oct 2025 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/gradual-automation-with-do-nothing-scripts/</guid><description>Save time and mental load with this gradual automation methodology</description><content:encoded>&lt;p>N.b. This is a WIP. In the minimal example given, Janet offers nothing over a shorter shell script.&lt;/p>
&lt;hr>
&lt;p>For some time upfront, automation saves us time in the future, but the break-even point&amp;rsquo;s rarely clear. &lt;span class="marginnote">Some prfer &amp;ldquo;runbook script&amp;rdquo;&lt;/span> &lt;a href="https://blog.danslimmon.com/2019/07/15/do-nothing-scripting-the-key-to-gradual-automation/">Do-nothing scripts&lt;/a> help us hack the &lt;a href="https://xkcd.com/1205/">worthiness&lt;/a> curve and focus on the low hanging fruit: Print the next instruction, execute manuallyor automate when friction repeats. Or reversed: automate some steps while &amp;ldquo;shelling out to a person&amp;rdquo; to do the others manually.&lt;/p>
&lt;p>This piecemeal approach helps stay productive and work around blockers too. Instead of being stumped on something for a day, we can leave it unimplemented while still delivering value elsewhere in the process!&lt;/p>
&lt;p>This workflow fits an entire business well too. Every business, even thousands of years ago, has processes. Today, managers and business analysts document and optimize existing processes or create new roles and tasks from scratch. Quick gains can be had from creating do-nothing scripts documenting the entire business, which get automated according to need and ability. Going further, logging our scripts gives us metrics on what to automate first. Updating the script overtime is also &lt;a href="https://nicolasbouliane.com/blog/no-script-is-too-simple">easier to propagate&lt;/a> than teaching people up to date commands/processes.&lt;/p>
&lt;p>For a minimal example, backing up our &lt;a href="https://www.passwordstore.org/">password store&lt;/a> and required gpg keys requires entering (copypasting) in the right order, reentering a password multiple times etc. which is tedious and error-prone. Roughly, we have these instructions:&lt;/p>
&lt;h5 id="to-backup">To Backup&lt;/h5>
&lt;p>First, pick an ID for encryption:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>gpg --list-secret-keys
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Second, export all public and private keys:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>gpg --export-secret-keys --armor &amp;gt; private-keys.asc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpg --export --armor &amp;gt; public-keys.asc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpg --export-ownertrust &amp;gt; trust-db.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Third, copy and encrypt password store:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>tar -cz ~/.password-store/ | gpg --encrypt --recipient YOUR_KEY_ID &amp;gt; pass-backup.tar.gz.gpg
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>N.b. &lt;code>-c&lt;/code> makes a new archive and &lt;code>-z&lt;/code> compresses the archive with gzip. While the password store&amp;rsquo;s already encrypted, this protects metadata like filenames and directory structure.&lt;/p>
&lt;h5 id="to-restore">To Restore&lt;/h5>
&lt;p>First, restore keys:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>gpg --import private-keys.asc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpg --import public-keys.asc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpg --import-ownertrust trust-db.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Second, restore passord store:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>gpg --decrypt pass-backup.tar.gz.gpg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tar -xzf password-store-backup.tar.gz -C ~/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Third, clean up&lt;/p>
&lt;h5 id="lets-automate">Let&amp;rsquo;s Automate&lt;/h5>
&lt;p>With our instructions collected, we can put each step into its own &lt;em>self-documenting&lt;/em> function. Here&amp;rsquo;s the backup written in &lt;a href="https://janet-lang.org/">Janet&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-Janet" data-lang="Janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> pick-encryption-key []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">print&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;gpg --list-secret-keys&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> export-keys []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">print&lt;/span> &lt;span style="color:#c3e88d">`gpg --export-secret-keys --armor &amp;gt; private-keys.asc
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d"> gpg --export --armor &amp;gt; public-keys.asc
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d"> gpg --export-ownertrust &amp;gt; trust-db.txt`&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> copy-and-encrypt-password-store []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">print&lt;/span> &lt;span style="color:#c3e88d">`tar -cz ~/.password-store/
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d"> | gpg --encrypt --recipient YOUR_KEY_ID
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d"> &amp;gt; pass-backup.tar.gz.gpg`&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> execute-sequence
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d">&amp;#34;Execute array of funcs in order, pausing after each.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [functions &amp;amp;opt pause-msg]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">default&lt;/span> pause-msg &lt;span style="color:#c3e88d">&amp;#34;Press enter to continue...&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">each&lt;/span> function functions
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (function)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">print&lt;/span> pause-msg)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">getline&lt;/span>)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(execute-sequence [pick-encryption-key
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> export-keys
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> copy-and-encrypt-password-store])
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>While Janet has a lovely &lt;a href="https://acha.ninja/blog/dsl_for_shell_scripting/">shell DSL&lt;/a> called &lt;a href="https://github.com/andrewchambers/janet-sh">janet-sh&lt;/a>, as a novice Janet programmer, I was blocked by uncertainty around how password requests are handled (with system popups, keyring requests etc. on my system). Typically, I would avoid the task until a foggy later (which might not come) where I understand the solution or go down a rabbithole trying to understand it before starting the project. As is, the program outputs commands to copypaste and run, but with the overall architecture out of the way, it&amp;rsquo;s easy to extend:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">import&lt;/span> sh)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> pick-encryption-key []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (sh/$ &lt;span style="color:#c3e88d">&amp;#34;gpg&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;--list-secret-keys&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Might as well experiment how Janet and Linux Mint&amp;rsquo;s keyring work:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>sh/$ sudo &lt;span style="color:#c3e88d">echo&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;ok&amp;#34;&lt;/span>&lt;span style="color:#c3e88d;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>sh/$ sudo &lt;span style="color:#c3e88d">echo&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;ok&amp;#34;&lt;/span>&lt;span style="color:#c3e88d;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Great, I only needed to enter it once! That clears the way for the final solution (summarized with these expressions):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-Janet" data-lang="Janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">with&lt;/span> [out (&lt;span style="color:#82aaff">file/open&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;private-keys.asc&amp;#34;&lt;/span> &lt;span style="color:#ff966c">:w&lt;/span>)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (sh/$ &lt;span style="color:#c3e88d">&amp;#34;gpg&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;--export-secret-keys&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;--armor&amp;#34;&lt;/span> &amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>out))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">with&lt;/span> [out (&lt;span style="color:#82aaff">file/open&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;pass-backup.tar.gz.gpg&amp;#34;&lt;/span> &lt;span style="color:#ff966c">:w&lt;/span>)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (sh/$ tar -czf - &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>(&lt;span style="color:#82aaff">string&lt;/span> (&lt;span style="color:#82aaff">os/getenv&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;HOME&amp;#34;&lt;/span>) &lt;span style="color:#c3e88d">&amp;#34;/.password-store&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">|&lt;/span> gpg --encrypt --recipient &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>key-id &amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>out))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>A few notes, in &lt;code>janet-sh&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>&amp;gt;&lt;/code> requires a file object (and can&amp;rsquo;t create one by itself)&lt;/li>
&lt;li>&lt;code>~&lt;/code> does not resolve&lt;/li>
&lt;li>&lt;code>,&lt;/code> is needed to escape implicit quotes&lt;/li>
&lt;li>you can give quoted or unquoted arguments&lt;/li>
&lt;/ul>
&lt;p>Altogether:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">import&lt;/span> sh)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">def&lt;/span> backup-location &lt;span style="color:#c3e88d">&amp;#34;key-backup.tar&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> pick-encryption-key []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (sh/$ &lt;span style="color:#c3e88d">&amp;#34;gpg&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;--list-secret-keys&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> export-keys []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">with&lt;/span> [out (&lt;span style="color:#82aaff">file/open&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;private-keys.asc&amp;#34;&lt;/span> &lt;span style="color:#ff966c">:w&lt;/span>)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (sh/$ &lt;span style="color:#c3e88d">&amp;#34;gpg&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;--export-secret-keys&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;--armor&amp;#34;&lt;/span> &amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>out))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">with&lt;/span> [out (&lt;span style="color:#82aaff">file/open&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;public-keys.asc&amp;#34;&lt;/span> &lt;span style="color:#ff966c">:w&lt;/span>)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (sh/$ &lt;span style="color:#c3e88d">&amp;#34;gpg&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;--export&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;--armor&amp;#34;&lt;/span> &amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>out))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">with&lt;/span> [out (&lt;span style="color:#82aaff">file/open&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;trust-db.txt&amp;#34;&lt;/span> &lt;span style="color:#ff966c">:w&lt;/span>)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (sh/$ &lt;span style="color:#c3e88d">&amp;#34;gpg&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;--export-ownertrust&amp;#34;&lt;/span> &amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>out)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> copy-and-encrypt-password-store
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">print&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;paste your key id&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> key-id (&lt;span style="color:#82aaff">string/trim&lt;/span> (&lt;span style="color:#82aaff">getline&lt;/span>)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">with&lt;/span> [out (&lt;span style="color:#82aaff">file/open&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;pass-backup.tar.gz.gpg&amp;#34;&lt;/span> &lt;span style="color:#ff966c">:w&lt;/span>)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (sh/$ tar -czf - &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>(&lt;span style="color:#82aaff">string&lt;/span> (&lt;span style="color:#82aaff">os/getenv&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;HOME&amp;#34;&lt;/span>) &lt;span style="color:#c3e88d">&amp;#34;/.password-store&amp;#34;&lt;/span>) &lt;span style="color:#c3e88d;font-weight:bold">|&lt;/span> gpg --encrypt --recipient &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>key-id &amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>out)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> zip []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">def&lt;/span> files [&lt;span style="color:#c3e88d">&amp;#34;private-keys.asc&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;public-keys.asc&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;trust-db.txt&amp;#34;&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;pass-backup.tar.gz.gpg&amp;#34;&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (sh/$ tar -cvf &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>backup-location &lt;span style="color:#c3e88d;font-weight:bold">;&lt;/span>files)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (sh/$ rm &lt;span style="color:#c3e88d;font-weight:bold">;&lt;/span>files)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">print&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;Saved &amp;#34;&lt;/span> backup-location &lt;span style="color:#c3e88d">&amp;#34; in your cwd:&amp;#34;&lt;/span> (&lt;span style="color:#82aaff">os/cwd&lt;/span>)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> main [_ &amp;amp; args]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">map&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">|&lt;/span>($) [export-keys
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> pick-encryption-key
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> copy-and-encrypt-password-store
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> zip]))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This will only ask for a password and ask you to copypaste a key ID. The full code for backing up and restoring is &lt;a href="https://codeberg.org/veqq/pass-backup/">here&lt;/a>.&lt;/p></content:encoded></item><item><title>Interview With Technomancy</title><link>https://alexalejandre.com/programming/interview-with-technomancy/</link><pubDate>Sun, 27 Jul 2025 01:42:23 -0400</pubDate><guid>https://alexalejandre.com/programming/interview-with-technomancy/</guid><description>Technomancy made Leinigen, leads the Fennel project and makes beautiful games!</description><content:encoded>&lt;p>This was the result of one and a half hours talking to &lt;a href="https://lobste.rs/~technomancy">technomancy&lt;/a> for a &lt;a href="https://lobste.rs/t/interview">Lobsters interview&lt;/a> and many suggestions, particularly by &lt;a href="http://lobste.rs/~smlckz">smlckz&lt;/a>. Unfortunately, a bug prevents the proofread text from being uploaded in the &lt;a href="https://lobste.rs/s/terwiu/lobsters_interview_with_technomancy">rightful place&lt;/a> (and I was negligent in my editing).&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Past interviews started off with introducing yourself, what do you do for work etc. But you&amp;rsquo;re not so interested in your work-work.&lt;/strong>&lt;/p>
&lt;p>I started programming as a kid, but fell off the wagon for a while. In college, I got back into it, and around graduation, around 2004, got really into Ruby, at its inflection point. I didn&amp;rsquo;t exactly get tired of it, but my eye caught something shinier with Clojure and functional programming, which was really in around 2008-9. Like, everyone saw Moore&amp;rsquo;s law tapering off and thought of functional programming as the solution, the way forward. Now, I&amp;rsquo;m still doing that professionally but I got disillusioned with&amp;hellip;&lt;/p>
&lt;p>&lt;strong>You once mentioned it wasn&amp;rsquo;t meant for hobby projects, everything added&amp;rsquo;s for corporate use&lt;/strong>&lt;/p>
&lt;p>Yeah, I guess to take a step even further back, I got really interested in the free software movement, kind of idealistic in this idea that you could make the world a better place with software! And open source, because I felt like that was the same thing. The idea was by picking the right license you can write software that makes the world better, which doesn&amp;rsquo;t actually make any sense because like, what is the software doing? Without more analysis, people think they&amp;rsquo;re like being altruistic, developing open source and it ends up just being free labor for companies to exploit. So I got disillusioned with the JVM in terms of that. Like, if I&amp;rsquo;m going to get paid for it, it&amp;rsquo;s fine.&lt;/p>
&lt;p>But it&amp;rsquo;s really good at solving problems companies have, not humans. So I wanted to change how I was going to spend my free time. From there, I got really into Lua, playing around, making games with my kids, using &lt;a href="https://love2d.org/">löve 2D&lt;/a>, for 3-4 years. But then I found this compiler Fennel that applied what I learned in Clojure to Lua. I eventually took over the project and been running it since since then. That&amp;rsquo;s where most of my headspace is right now.&lt;/p>
&lt;p>&lt;strong>Was what took you away from Ruby similar to what pulled you from Clojure?&lt;/strong>&lt;/p>
&lt;p>No, with Lua, I wanted to deliberately step back from the corporate world, which didn&amp;rsquo;t play into leaving Ruby before. But there are some similarities. I got into both when they were hitting their inflection points. You really &lt;a href="https://www.youtube.com/watch?v=jTurIBwz0mY">had to be there&lt;/a> in 2004 with Ruby or 2008 with Clojure. No one would do it because they thought it was good for their career, but because you just really wanted to learn more and expand your horizons. It was like the reason I came didn&amp;rsquo;t apply anymore, this is mature, I&amp;rsquo;ve learned a lot from this, but I don&amp;rsquo;t feel like I&amp;rsquo;m learning anymore.&lt;/p>
&lt;p>&lt;strong>You mentioned the Moore&amp;rsquo;s law stopping, slowing down. Maybe 5 or 8 years after, I personally noticed it, which pushed me in the other direction of &lt;em>wait, all these functional things like &lt;code>map&lt;/code>, we&amp;rsquo;re wasting all these cycles. Maybe we shouldn&amp;rsquo;t be doing that.&lt;/em>&lt;/strong>&lt;/p>
&lt;p>It&amp;rsquo;s an interesting tension, right? The zeitgeist was like, if Moore&amp;rsquo;s law&amp;rsquo;s slowing down it wasn&amp;rsquo;t that computer&amp;rsquo;s wouldn&amp;rsquo;t be more capable, but where would the capability come from? Going wide, adding more cores, scaling out instead of up, right? Until that point, in the the 90s and early 2000s, it was like, boom, boom, boom, our clock speeds were just going higher and higher. That&amp;rsquo;s what stopped.&lt;/p>
&lt;p>Now, we were doing largely server side programs, so each server was going to have more cores and you&amp;rsquo;d throw in more servers. Erlang got a big boost in popularity. Relatively, for the niche nerds. But we thought &lt;em>this is the future&lt;/em>. If you make it easier to spread out across multiple processes, you&amp;rsquo;re not going to not hit this problem. You&amp;rsquo;re not going to run into a wall. That resonated a lot with people and kicked off interest in algorithms that are easy to parallelize, which you get for free with immutable data. So functional programming became a lot more appealing, but as you mentioned, there&amp;rsquo;s also overhead. If you can overwrite a value in place, that&amp;rsquo;s faster than than making a functional update. There&amp;rsquo;s a place where that overhead won&amp;rsquo;t make sense, especially in the context of a single core, running on a more constrained hardware, maybe on mobile or on your laptop, you&amp;rsquo;re not going to want to just throw more cores at it in the same way.&lt;/p>
&lt;p>&lt;strong>So it actually fits with the human vs. business related software.&lt;/strong>&lt;/p>
&lt;p>Yeah. You want to pay more attention to efficiency. If you&amp;rsquo;re a startup with all this investor money, and the community in the late 2000s had all this investor money sloshing around, you can solve your problem by throwing more cores at it. I think ironically, the wave of interest in functional programming didn&amp;rsquo;t end up&amp;hellip; Maybe I&amp;rsquo;m extrapolating here, but even imperative languages, you&amp;rsquo;re going to run in a similar way. You&amp;rsquo;re going to run a bunch of processes behind a load balancer and the point of synchronization is going to be the database anyway. So using a functional language isn&amp;rsquo;t necessarily going to make it easier for you to go wide on that. If you&amp;rsquo;re tied to a request–response cycle, then your load balancer is going to do the job for you. And everything&amp;rsquo;s web based, so you&amp;rsquo;re almost always tied to a request response cycle.&lt;/p>
&lt;p>There are exceptions. If you want to keep one socket open for an extended period of time, which Erlang handles more gracefully, that is really hard to do with a load balancer. But when you&amp;rsquo;re dealing with everything going over HTTP, it&amp;rsquo;s not really the silver bullet we expected.&lt;/p>
&lt;p>&lt;strong>What&amp;rsquo;s your workspace and computing environment like? We&amp;rsquo;ve talked about this on &lt;a href="https://lobste.rs/chat">IRC&lt;/a>, about decks and keyboards.&lt;/strong>&lt;/p>
&lt;p>My main machine is what I call a &lt;a href="https://blog.mattgauger.com/2022/08/01/the-51nb-x210/">ThinkPad fanfic&lt;/a>, takes a chassis of a ThinkPad from like 2009. This hacker collective in Shenzhen redesigned the motherboard with a more modern CPU and architecture, which fits right into that. The screen&amp;rsquo;s a little dim, but everything else is great, the replaceable battery, old school ThinkPad keyboard.&lt;/p>
&lt;p>But the majority of the time I&amp;rsquo;m using the keyboard I designed myself &lt;a href="https://atreus.technomancy.us/">the Atreus&lt;/a> with 42 in the original, 44 keys now, with each side angled to match where your hands are. It&amp;rsquo;s really portable because I love going out all the time, at least a couple times a week, to coffee shops or when weather&amp;rsquo;s nicer, a park or something. I got the original Ergodox and I loved it. it felt so comfortable at home, but it was a pain to take with me when I went out because of the wires needed for the two halves.&lt;/p>
&lt;p>In my office, I have an older ThinkPad with two portrait display monitors and a big old Kensington track ball, almost a billiard ball size. I like that a lot. But I prefer keyboard shortcuts. I use Emacs. And then there&amp;rsquo;s &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/surfingkeys_ff/">Surfingkeys&lt;/a>, a browser extention for highlighting and visiting links by keyboard. That&amp;rsquo;s pretty nice.&lt;/p>
&lt;p>&lt;strong>Do you have your Emacs config online somewhere?&lt;/strong>&lt;/p>
&lt;p>Yeah, &lt;a href="https://git.sr.ht/~technomancy/dotfiles">all my dot files&lt;/a> are together. Emacs and everything else. Yeah. But I use Emacs as my window manager using &lt;a href="https://github.com/emacs-exwm/exwm">exWM&lt;/a> so every program running in Xorg is shown as if it was an Emacs buffer. So your regular Emacs screen splits instead of having text files inside of them. There&amp;rsquo;s Firefox, your terminal, whatever else.&lt;/p>
&lt;p>&lt;strong>Did Emacs come before Clojure or vice versa?&lt;/strong>&lt;/p>
&lt;p>I started with Emacs in in university. I had just learned Dvorak and was like, now Vim or Emacs? In Vim, HKJL are all lined up for QWERTY and&amp;hellip; forget it. So Emacs and Elisp. When I started thinking about functional languages, a lot of people were talking about Haskell and Erlang, but &lt;em>I liked this Lisp thing&lt;/em>.&lt;/p>
&lt;p>&lt;strong>Did you have any favorite courses or such? Like in some corners, people love to obsess over SICP.&lt;/strong>&lt;/p>
&lt;p>My CS program wasn&amp;rsquo;t really great. I learned more from all the hacking I did to get Linux working on a laptop in 2003 than in classes. But recently I&amp;rsquo;ve been working through this book called Elements of Computing Systems, &lt;a href="https://www.nand2tetris.org/">nand2tetris&lt;/a>, with my kids, in upper high school. I was trying to stay ahead of them, but it&amp;rsquo;s summer. There&amp;rsquo;s no way I can do that. But I like how every step is built on the previous step; you can&amp;rsquo;t use anything until you&amp;rsquo;ve derived it from first principles. And how far can that approach get you? It turns out pretty far!&lt;/p>
&lt;p>&lt;strong>Did you discover Lua games through programming with your kids or making games for, with them? When you first had kids, did you think oh I love programming and need to share it?&lt;/strong>&lt;/p>
&lt;p>Yeah. I think it&amp;rsquo;s normal to want to share what you&amp;rsquo;re interested in, with the kids and especially if they show interest and get on board. And games are just such a great way to learn, in general. It&amp;rsquo;s easy to get people and kids&amp;rsquo; attention with games. And they&amp;rsquo;re curious &lt;strong>how did they do that? Let&amp;rsquo;s take a look.&lt;/strong> So we first started in &lt;a href="https://scratch.mit.edu/">Scratch&lt;/a>, a drag and drop programming environment which is great for younger kids. You don&amp;rsquo;t have to know how to type but it still lets you do step by step algorithms etc. And more importantly, if it doesn&amp;rsquo;t work as hoped, it teaches you how to debug that and how to break the problem apart and try to find e.g. where you didn&amp;rsquo;t quite cover all the bases or whatever.&lt;/p>
&lt;p>One of the coolest things about scratch is that when you publish something, anyone else can view source, how was it made, and then more importantly remix, like make a copy you can edit yourself and change, to, you know, make the characters move faster or see what happens when the shots are fired at a different angle. Experimenting is amazing when you&amp;rsquo;re trying to explore the world of how software works. I wish everything would work like that. It&amp;rsquo;s really empowering.&lt;/p>
&lt;p>One of my more recent projects is &lt;a href="https://fedibot.club/">fedibot.club&lt;/a> where you can create these scripts that get tied into social media bots, doing whatever you want on a schedule or in response to replies. And this is really, really fun, just as kind of a toy to mess around with social media, but also great fit for Lua because Lua makes it really easy to sandbox code and limit what you have access to, to make sure one person can&amp;rsquo;t write a script that will take the whole system down.&lt;/p>
&lt;p>Then on top of that, I was able to add this same remix ability. So when you see one of these bots, maybe they&amp;rsquo;ll have a link in their bio to the source. You go to their source code, log in and boom, you test it, change it, do something a little different! I really admired Scratch and its model of &amp;lsquo;View source&amp;rsquo;. View source is so important for learning how to program, how something was done. You shouldn&amp;rsquo;t have to go search on GitHub then clone it, it should be right there, at your fingertips. It isn&amp;rsquo;t enough to just read code, because our our understanding&amp;rsquo;s limited without executing it.&lt;/p>
&lt;p>(Later insert, today on IRC, he said:)&lt;/p>
&lt;blockquote>
&lt;p>Using emacs is praxis because it gives people a view into how computing should be; view-source on every command, immediately rewrite things to work the way you want.&lt;/p>&lt;/blockquote>
&lt;p>I feel we don&amp;rsquo;t understand this very well from a scientific perspective. Why is this true? For most things, you can just read a book and understand it. But reading a piece of code, interacting with it, running, modifying it, those are so different! In terms of how you experience them and how it affects your understanding of the problem.&lt;/p>
&lt;p>There&amp;rsquo;s a really great paper on this called &lt;a href="https://gist.github.com/onlurking/fc5c81d18cfce9ff81bc968a7f342fb1">Programming as Theory Building&lt;/a>. It doesn&amp;rsquo;t even try to explain why, which is kind of funny. But it goes and talks about the implications of your understanding. When you have a piece of code, what you really have, what&amp;rsquo;s really valuable is the knowledge in heads of the people developing it. That&amp;rsquo;s what you&amp;rsquo;re building. The code is almost a side effect of that. Once you have the theory about how the system works, the code itself is not that big of a deal. A lot of people don&amp;rsquo;t understand that about working in a team and building programs.&lt;/p>
&lt;p>&lt;strong>How do you actually approach modeling? Like, you have a problem. What do you do with it?&lt;/strong>&lt;/p>
&lt;p>So with Fennel, I&amp;rsquo;m doing language design. And one most important skills for language design is just having enough imagination to try to think of all the ways how five years from now, we could be looking back on this, wishing if only we had known better and not done this. If you have an idea, what are the ways you&amp;rsquo;ll potentially regret it? It&amp;rsquo;s really hard and I think it can only come from experience.&lt;/p>
&lt;p>Everyone&amp;rsquo;s really leaning into LSP (language server protocol) nowadays, right? You have this standardized tooling, which enables certain analysis on your project, e.g. immediately showing mistakes without compilation. I was a skeptic, but I&amp;rsquo;ve been won over. But it&amp;rsquo;s very difficult to do this safely. In Clojure, if you want to run the language server on a program or a file, you don&amp;rsquo;t want to compile the program because in Clojure compiling it runs it, which isn&amp;rsquo;t uncommon in dynamic languages. Obviously, the problem&amp;rsquo;s that you don&amp;rsquo;t know whether to trust the code. And how do you know if you should trust the code? By opening it up in your editor and reading it! But opening it up runs it? A chicken and egg problem. A lot of language servers just don&amp;rsquo;t care and run it anyway, which is really bad. I thought Clojure would too, because it&amp;rsquo;s so dynamic, but they built out a completely separate static analysis tool in the language server that does the job of the compiler, redundantly, safely, because it won&amp;rsquo;t to try to expand the macros. That&amp;rsquo;s great, the right choice for Clojure.&lt;/p>
&lt;p>But it sucks to not expand your macros. Sometimes macros will introduce new local variables and you&amp;hellip; don&amp;rsquo;t see where they come from, which might look like an error. Now, what can we learn from this experience? How can we run macros safely? Well, why should a macro be able to write to disk, or open a network connection? That doesn&amp;rsquo;t make any sense. No macros have legitimate reason to open a network connection.&lt;/p>
&lt;p>&lt;strong>I totally do. I love to use macros to prepare the environments, download data and compile with those.&lt;/strong>&lt;/p>
&lt;p>Yeah, there are legitimate use cases to read from disk, but to write to disk, or to send data&amp;hellip; And even if you must allow writes, they should never be outside the project directory! But it&amp;rsquo;s too late for Clojure, hundreds of thousands of macros have been written. But Fennel didn&amp;rsquo;t have a macro system yet. Okay, so macros are like functions; they take and produce ASTs. There&amp;rsquo;s no reason to be able to output anything else. So we made Fennel&amp;rsquo;s macro system work that way, so its language server doesn&amp;rsquo;t face the problem Clojure&amp;rsquo;s does, even though we&amp;rsquo;ve spent a tiny amount of comparative effort. It&amp;rsquo;s smaller, with less resources, but capable of more because we learned from the situation.&lt;/p>
&lt;p>The commitment to backwards compatibility is hard. Sometimes you have to stick with decisions you don&amp;rsquo;t like. And how can you avoid that, really learn from your own mistakes or learn from someone else&amp;rsquo;s mistakes? I like defaulting to saying no until you&amp;rsquo;ve really got the chance to think it all the way through. We can do what we&amp;rsquo;re confident now and extend later, but you can&amp;rsquo;t go the other way and sometimes people are too fast.&lt;/p>
&lt;p>A thoughtful coworker has a general design trick: &amp;ldquo;Take it apart!&amp;rdquo; Like, this thing causes trouble, but it&amp;rsquo;s really &lt;em>two&lt;/em> things! Think about how to untangle them and reason about them separately. This sounds like such generic advice, but it&amp;rsquo;s a really good lens to approach problems with.&lt;/p>
&lt;p>&lt;strong>Is there a special Clojure word for that?&lt;/strong>&lt;/p>
&lt;p>Rich calls it &amp;ldquo;decomplecting.&amp;rdquo; He has a talk &lt;a href="https://www.youtube.com/watch?v=LKtk3HCgTa8">Simple Made Easy&lt;/a> but it wasn&amp;rsquo;t until I saw it in action through my coworker&amp;rsquo;s work that I truly appreciate what it means. Taking it apart&amp;rsquo;s the one trick for 90% of design problems.&lt;/p>
&lt;p>&lt;strong>How do you choose what problem to actually work on? Out of so many problems, so much information, fun things&amp;hellip;&lt;/strong>&lt;/p>
&lt;p>Let me just take a step back. We&amp;rsquo;ve seen the rise of hosted languages in the past 10-15 years. Clojure lives on the JVM, compiles to Java bytecode, uses Java libraries, piggybacks on this existing ecosystem, getting a bunch of stuff for free. I think &lt;a href="https://en.wikipedia.org/wiki/Adobe_ColdFusion">ColdFusion&lt;/a> was the first to do it. But with Clojure, I could see how compelling this approach was. And today you have Elixir, TypeScript, &lt;a href="https://gleam.run/">Gleam&lt;/a>, &lt;a href="https://reasonml.github.io/">Reason&lt;/a> and F#. It&amp;rsquo;s really hard to build a language, runtime, library ecosystem, profilers, debuggers from scratch&amp;hellip; If you can narrow down the work in front of you, without inventing the wheel everywhere, it&amp;rsquo;s amazing what you can accomplish. I love that about Fennel!&lt;/p>
&lt;p>Usually with hosted languages, your compiler is limited to the host&amp;rsquo;s feature set, so if you want extra features, you&amp;rsquo;ll need a standard library too. Clojure&amp;rsquo;s features require runtime support, so you can&amp;rsquo;t compile Clojure and run it on the JVM without the standard library, while compiled Fennel will just work, because there is no standard library. Fennel does all its tricks at compile time.&lt;/p>
&lt;p>But Fennel just has the compiler. When you compile a Fennel function, you get a Lua function, nothing more, nothing less. Sharing runtime semantics exactly with your host language really reduces the scope of what you have to do. If it&amp;rsquo;s not a transformation you can do compile-time, we just say sorry. &amp;ldquo;What if Fennel had immutable data structures?&amp;rdquo; That&amp;rsquo;s never going to happen; it&amp;rsquo;s just a compiler. But we can point you to so and so library which provides them at run time.&lt;/p>
&lt;p>Now, I have a conceptual space of features. For example, pattern matching, one of my favorites, what does it actually mean? I think it&amp;rsquo;s 2 orthogonal features: destructuring, pulling your data apart declaratively and binding local variables to it. That&amp;rsquo;s one axis. But destructuring can&amp;rsquo;t decide which path to take. So you have conditionals, and when you put them together you have pattern matching.&lt;/p>
&lt;p>(Later insert: Peter van Roy&amp;rsquo;s &lt;a href="https://webperso.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng.pdf">paradigm diagram&lt;/a> is interesting. What others are there, exploring these concept spaces?)&lt;/p>
&lt;p>So if some new feature is composed from things already there, you&amp;rsquo;re not adding much burden to learning, effectively using or even implementing the language. But if you add pattern matching to a language without destructuring, there&amp;rsquo;s a lot more to chew on. But if you already have destructuring, adding this little thing lets it make decisions for you, cool! So what&amp;rsquo;s the conceptual footprint of so and so feature? What space does it take up? If destructuring and conditionals are already allocated in the learner&amp;rsquo;s mind, you get pattern matching for free! Fennel&amp;rsquo;s list comprehensions are similar: If you already have loops and data structures, you&amp;rsquo;re just combining them. A loop can give you a sequential or associative data structure. We first added the sequential DS, which you use all the time. Then we wondered about adding one for key value DS as well, the operation&amp;rsquo;s not as common, so it&amp;rsquo;s not worth spending limited space in our conceptual tool box.&lt;/p>
&lt;p>&lt;strong>How did you first discover Fennel? Were you already like facing issues due to Lua&amp;rsquo;s design, looking for alternatives?&lt;/strong>&lt;/p>
&lt;p>In my home directory, I have the &lt;strong>gripe file&lt;/strong>. A friend in IRC gave me the idea. You just collect all the problems, complaints you have. How could the programs I use on a regular basis be better? Sometimes you see something can added or improved and you can delete this line from the gripe file. I love it. For example, SSH wouldn&amp;rsquo;t let you specify a directory for your config files. But a few years later, I went back and saw they had! So I deleted it from the gripe file, which is a really cool feeling. I recommend you keep a gripes file.&lt;/p>
&lt;p>For Lua, if you typo the name of a variable, you can think it&amp;rsquo;s local, but it ends up being a global and set or read it by accident. This makes sense, if you really want your scripts to be short and accessible, but I don&amp;rsquo;t think it&amp;rsquo;s the right choice because you can only catch it at run time. You can use the LSP, linters but&amp;hellip; Shouldn&amp;rsquo;t that just be in the language? So that goes in my gripe file. There are statements, not just expressions, another gripe! Lack of destructuring? Lack of pattern matching? Sure, Lua&amp;rsquo;s a small language, they had to draw the line somewhere, but it bugs me.&lt;/p>
&lt;p>I began to look for alternatives and thought you could fix most of them with a Lisp! So I looked for Lisps on the Lua runtime, found a few Schemes, an early, impressive Clojurescript prototype, but it wasn&amp;rsquo;t self hosted, depending on JVM stuff (to work on one runtime, requiring another 100 times bigger doesn&amp;rsquo;t feel great). I found a few one offs, but many like &lt;a href="https://urn-lang.com/">Urn&lt;/a> weren&amp;rsquo;t just syntactic transformations but included full standard libraries, which is cool, but I wanted something tiny, just a compiler.&lt;/p>
&lt;p>So I found Fennel, a project Calvin Rose spent like a week on, then put to the side to work on another language from scratch, with his own virtual machine and everything. I think he was just more interested in how build a VM, how to solve tricky performance problems, whereas Lua&amp;rsquo;s already existed, but I wanted to explore the space around the language. So, Fennel was like a thousand lines of code and the core I wanted was visible. Excited, I started sending patches and asking him to clarify how it worked. I think he was really surprised that I was interested, really helpful and receptive! But he was more interested in this other language, DST at the time, renamed &lt;a href="https://janet-lang.org/">Janet&lt;/a>.&lt;/p>
&lt;p>&lt;strong>How&amp;rsquo;d that &amp;ldquo;handover&amp;rdquo; go? Some guy falls in love with some weekend side project and now people write games in it! How do you react to that?&lt;/strong>&lt;/p>
&lt;p>I think he saw it as a warm up. He had some ideas and wanted to sketch them out, starting with an easier problem, just this compiler; now he&amp;rsquo;s working on what he really wants to do with a bytecode engine, I love that for him. But it&amp;rsquo;s like playing on hard mode, doing it all from scratch. But we don&amp;rsquo;t have as much flexibility in Fennel, to e.g. add immutable data structures, but we&amp;rsquo;re making the most of our niche.&lt;/p>
&lt;p>(Later insert, listen to Technomancy on the &lt;a href="https://conf.fennel-lang.org/2021">history of Fennel&lt;/a>. I also asked Calvin, who said:)&lt;/p>
&lt;blockquote>
&lt;p>As far as the Fennel handoff to technomancy, it was sort of there from the beginning. The first versions of Fennel, then just fnl, was more of a sketch than a full blown project, and was only fleshed out a couple years later when Phil reached out and had some input for improvements, libraries, testing, etc. I suggested creating a new “home” repo for the second life of the project, which now I think barely shares any code with the original compiler, but there was no need to move it, and so the original GitHub repo remains. At this point, I only follow the mailing list, watching updates and hoping for a good chance to use Lua again professionally. I think I may have made a few commits in the last few years, but very few, and I don’t recall on what :).
As far as falling in love with open source, it was just a way to share what I was doing with other people. In many ways, it’s a bit more like gardening than a day job, where you can just tidy up what you think needs tidying up, and your colleagues are often other people who similarly care about software. The experience of having a side project become somewhat “real” was also incredibly gratifying in a certain way, like there was proof that there was something interesting there. At that point in time, I had already started thinking/working on the Janet runtime, but given that fnl code was a bit terse and incomplete when Phil started on improvements, I felt obligated to help guide the handoff. In retrospect, there was no such obligation, but collaborative work on a project I started was fun nonetheless. I think I still felt some ownership over the original code. At this point, Phil and a few other folk have much more understanding and ability to fix things with Fennel, and so I no longer get involved as much.&lt;/p>
&lt;p>The whole experience was great; I got to meet a number of very interesting and far more experienced engineers than myself, the collective interest was a huge confidence boost for me as a young engineering student, as well as Phil and some other folk setting an example on how to build a small community from scratch. Ultimately, I kept working on other fun projects I wanted to keep working on, but I would recommend for anyone to get involved with small community open source (as opposed to very large projects with hundreds of engineers) as way to keep collaboration exciting and meet other like minded folk.&lt;/p>&lt;/blockquote>
&lt;p>&lt;strong>How do you see the basic requirements and expectations of tooling changing? The hosted language helps with some of that already, but e.g. you made &lt;a href="https://leiningen.org/">Leinigen&lt;/a>, a build system for Clojure, while now Janet has JPM just built in. Most new languages appear with these kinds of things already (built-in?), otherwise, people won&amp;rsquo;t touch them.&lt;/strong>&lt;/p>
&lt;p>There&amp;rsquo;re many different categories of tooling, with runtime stuff like a profiler. In Fennel and Clojure you can use the profiles meant for Lua and Java. They work fine, though maybe you&amp;rsquo;ll see problems with source mapping? So another big win for hosted languages. But then you have things like LSP, where we have to do it ourselves. But we used a cheat code by making macros a sandbox, so you can just use the compiler instead of duplicating its behavior like Clojure&amp;rsquo;s language server. But you&amp;rsquo;re hinting at this idea of libraries, the whole ecosystem. Fennel itself doesn&amp;rsquo;t have a solution for pulling in libraries and dependencies. Before, when working in Clojure that was one of the first things I did, because going into the JVM, you see these deep dependency trees and the dependencies are even binary artifacts, right? But in other languages, you can just drop the source in and it&amp;rsquo;s less important to have a dependency manager that can pull the versions you need. In Fennel, it&amp;rsquo;s viable to just drop the repositories you want and be done. But there are a few places that doesn&amp;rsquo;t work very well, like when you have libraries which depend on C code, where your make file has to invoke their &lt;code>Makefile&lt;/code> and&amp;hellip; But the Fennel programs I write rarely have more than a dozen (even transitive) dependencies and the majority are just one file! It just hasn&amp;rsquo;t felt like enough to build a whole manager around! But C code is also complicated, not uniform, so you can&amp;rsquo;t do a one size fits all solution. Now, someone is working on &lt;a href="https://andreyor.st/posts/2025-01-10-depsfnl-a-new-dependency-manager-for-fennel-projects/">deps.fnl&lt;/a> but I haven&amp;rsquo;t tried it myself.&lt;/p>
&lt;p>&lt;strong>I&amp;rsquo;m curious about pedagogy. You came to Lua to make things with your kids. You&amp;rsquo;re doing nand2tetris now with them. Fennel, Lua and games echo (/resemble/now represent?) that beautiful learning experience of BASIC from the 80s. But now with LLMs, we&amp;rsquo;re &amp;ldquo;pulling up the ladder&amp;rdquo;. How do I phrase this?&lt;/strong>&lt;/p>
&lt;p>Yeah, I love Fennel as a place to start learning because it&amp;rsquo;s so simple. You can learn the whole thing in a few days with a programming background. But as a fresh learner, it&amp;rsquo;s also a better place to start with fewer concepts, it fits in your head, so I love that. I don&amp;rsquo;t know what to say about AI though.&lt;/p>
&lt;p>&lt;strong>You mentioned the Fediverse before.&lt;/strong>&lt;/p>
&lt;p>I mentioned picking projects with human impact and that&amp;rsquo;s the perfect example: digital independence, breaking the silos, giving people agency over their data etc., a way to allow people to take control of their own destiny with how they communicate. It&amp;rsquo;s inspiring seeing projects like Mastadon, but then &lt;a href="https://gotosocial.org/">GoToSocial&lt;/a>, &lt;a href="https://pleroma.social/">Pleroma&lt;/a>, &lt;a href="https://akkoma.social/">Akkoma&lt;/a>, the ecosystem is really taking off. The Free Software Foundation and GNU project have these ideals but miss the opportunity to make impacts, too focused on licensing&amp;hellip; While megacorps are treating their users quite badly, while using software on free licenses, which don&amp;rsquo;t make much of a difference. But the Fediverse shows another way. You really can build software which impacts people in a direct way! I&amp;rsquo;ve been working with GoToSocial to improve their documentation, test new features, but mostly I&amp;rsquo;m just a user. I&amp;rsquo;m really impressed with how easy it is to run and operate. It takes like 15 minutes to set up your own server and it just runs. I did Debian packaging for it too, so you can just do &lt;code>apt&lt;/code> if you add &lt;a href="https://apt.technomancy.us/">my repo&lt;/a>.&lt;/p>
&lt;p>Talking about empowering users, it&amp;rsquo;s really easy to take for granted the way package managers put this wealth of incredible software at your fingertips, just one command and boom! But my packaging won&amp;rsquo;t be upstreamed in Debian any time soon; I break a ton of rules because of versioning etc. It&amp;rsquo;s a very non-compliant package, but better than nothing.&lt;/p>
&lt;p>&lt;strong>Why do you think ActivityPub got adoption where XMPP didn&amp;rsquo;t?&lt;/strong>&lt;/p>
&lt;p>Just being in the right place at the right time? Mastodon was the poster child for ActivityPub and plain as day, you could see new signup spikes to Mastodon instances every time e.g. Twitter did something stupid. Just being there and not screwing up while others kept dropping the ball so hard, helps. Even before Musk, so many bad decisions, whether or not we&amp;rsquo;re kicking the Nazis off or whatever, almost comical. And they were just ready to take on these dissatisfied users.&lt;/p>
&lt;p>With XMPP, you had &lt;a href="https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish">embrace, extend, extinguish&lt;/a> situation where, Google went in with a big investment on XMPP, Facebook let you connect with XMPP&amp;hellip; Then one day, &lt;em>oh, we&amp;rsquo;re not doing that anymore&lt;/em>. So suddenly you couldn&amp;rsquo;t talk to your friends, the whole reason you were there. I think we were a little naive to think Google showing up and investing was a good thing.&lt;/p>
&lt;p>&lt;strong>I strongly empathize with your packaging woes. I tried to help with Jank&amp;rsquo;s but failed, burned out.&lt;/strong>&lt;/p>
&lt;p>I helped with the packaging of Fennel too. It was like night and day because we have one dependency and one or two files, a man page and an executable. But as soon as you start pulling in these complex dependencies, multiple Go or C libraries, you have to be an expert in deviant packaging to to pull that off. Even with Fennel, we stubbed our toe and it took like six months of back and forth.&lt;/p></content:encoded></item><item><title>Exploring Janet</title><link>https://alexalejandre.com/notes/exploring-janet/</link><pubDate>Thu, 17 Jul 2025 23:39:28 -0400</pubDate><guid>https://alexalejandre.com/notes/exploring-janet/</guid><description>A Gorgeous new Clojure-like with native compilation</description><content:encoded>&lt;p>Although I&amp;rsquo;d seen Janet before, we finally got to know each other a few days ago and I&amp;rsquo;m heads over heels in love! Though 2x slower as a a CLI than Common Lisp, 1 MB vs. 60 MB executables and 1/3-1/4 the LoC are hard to argue with.&lt;/p>
&lt;h3 id="closures-are-a-bit-different">Closures are a bit different&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># The expected form doesn&amp;#39;t work:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> timer [t] (&lt;span style="color:#c099ff">fn&lt;/span> [] (set! t (&lt;span style="color:#82aaff">+&lt;/span> t &lt;span style="color:#ffc777">1&lt;/span>))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># In Janet, params are constants (as if made by def). So you must shadow:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> timer [t] (&lt;span style="color:#c099ff">var&lt;/span> t t) (&lt;span style="color:#c099ff">fn&lt;/span> [] (&lt;span style="color:#c099ff">set&lt;/span> t (&lt;span style="color:#82aaff">+&lt;/span> t &lt;span style="color:#ffc777">1&lt;/span>))))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="when-youre-not-sure-what-a-function-is-named">When you&amp;rsquo;re not sure what a function is named&lt;/h3>
&lt;p>I wanted to make nested maps from an array of strings. Perusing Janet&amp;rsquo;s &lt;a href="https://janet-lang.org/docs/index.html">formal&lt;/a> and &lt;a href="https://janetdocs.com">informal&lt;/a> documentation, I failed to find something like Clojure&amp;rsquo;s &lt;code>assoc-in&lt;/code>. I tried:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># time janet: .679s .649s .029s&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># time jpm build: 15.779s 14.920s .533s&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#82aaff">map&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">|&lt;/span>(&lt;span style="color:#82aaff">merge-into&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> verses
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> @{(&lt;span style="color:#82aaff">get&lt;/span> (&lt;span style="color:#82aaff">string/split&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#82aaff">\t&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> $) &lt;span style="color:#ffc777">1&lt;/span>) (&lt;span style="color:#82aaff">table&lt;/span>)})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> v)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#82aaff">map&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">|&lt;/span>(&lt;span style="color:#82aaff">merge-into&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (verses (&lt;span style="color:#82aaff">get&lt;/span> (&lt;span style="color:#82aaff">string/split&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#82aaff">\t&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> $) &lt;span style="color:#ffc777">1&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> @{(&lt;span style="color:#82aaff">get&lt;/span> (&lt;span style="color:#82aaff">string/split&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#82aaff">\t&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> $) &lt;span style="color:#ffc777">2&lt;/span>) (&lt;span style="color:#82aaff">table&lt;/span>)})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> v)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#82aaff">map&lt;/span> (&lt;span style="color:#c099ff">fn&lt;/span> (x) (&lt;span style="color:#82aaff">put&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ((verses (&lt;span style="color:#82aaff">get&lt;/span> (&lt;span style="color:#82aaff">string/split&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#82aaff">\t&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> x) &lt;span style="color:#ffc777">1&lt;/span>)) (&lt;span style="color:#82aaff">get&lt;/span> (&lt;span style="color:#82aaff">string/split&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#82aaff">\t&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> x) &lt;span style="color:#ffc777">2&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">get&lt;/span> (&lt;span style="color:#82aaff">string/split&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#82aaff">\t&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> x) &lt;span style="color:#ffc777">3&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">get&lt;/span> (&lt;span style="color:#82aaff">string/split&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#82aaff">\t&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> x) &lt;span style="color:#ffc777">4&lt;/span>)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> v)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>N.b. &lt;code>janet&lt;/code> executes the program as a script while &lt;code>jpm build&lt;/code> compiles it. We are only comparing marshalling times, as the final data structure is the same.&lt;/p>
&lt;p>I made an ugly macro expanding to this. I then thought to implement Clojure&amp;rsquo;s &lt;code>assoc-in&lt;/code> more directly:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># time janet: .411s .38s .031s&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># time jpm build: 14.392s 113.781s.469s&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> assoc-in [m ks v]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d">``Insert (and make) deeply nested tables, based on Clojure&amp;#39;s. Use like: (var t (table)) (assoc-in t [:a :b :c :d] &amp;#34;e&amp;#34;)``&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">if&lt;/span> (&lt;span style="color:#82aaff">empty?&lt;/span> ks)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> v
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">let&lt;/span> [k (&lt;span style="color:#82aaff">first&lt;/span> ks)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nested (&lt;span style="color:#c3e88d">or&lt;/span> (&lt;span style="color:#82aaff">get&lt;/span> m k) @{})]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">put&lt;/span> m k (assoc-in nested (&lt;span style="color:#82aaff">slice&lt;/span> ks &lt;span style="color:#ffc777">1&lt;/span>) v)))))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After this fun exploration, &lt;a href="https://calebfiggers.com/">Caleb&lt;/a> wrote Janet calls it &lt;code>put-in&lt;/code>, with an unexpectedly imperative implementation &lt;a href="https://github.com/janet-lang/janet/blob/73334f3/src/boot/boot.janet#L1619">here&lt;/a>. A perfect drop-down replacement for my &lt;code>assoc-in&lt;/code>, it exhibits the same (honestly irrelevant) performance characteristics.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># time janet: 0.383s 0.354s 0.29s&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># time jpm build: 14.753s 15.064s .0591s&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">var&lt;/span> verses (&lt;span style="color:#82aaff">table&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">var&lt;/span> v (&lt;span style="color:#82aaff">string/split&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#82aaff">\n&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> (&lt;span style="color:#82aaff">slurp&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;kjv.tsv&amp;#34;&lt;/span>)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> insert-verse (abbrev ch verse quote) (&lt;span style="color:#82aaff">put-in&lt;/span> verses [abbrev ch verse] quote))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#82aaff">map&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">fn&lt;/span> (x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">let&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [line-as-array (&lt;span style="color:#82aaff">string/split&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;&lt;/span>&lt;span style="color:#82aaff">\t&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> abbrev (&lt;span style="color:#82aaff">get&lt;/span> line-as-array &lt;span style="color:#ffc777">1&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ch (&lt;span style="color:#82aaff">get&lt;/span> line-as-array &lt;span style="color:#ffc777">2&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> verse (&lt;span style="color:#82aaff">get&lt;/span> line-as-array &lt;span style="color:#ffc777">3&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> quote (&lt;span style="color:#82aaff">get&lt;/span> line-as-array &lt;span style="color:#ffc777">4&lt;/span>)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (insert-verse abbrev ch verse quote)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> v)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="are-immutable-ds-faster-to-access">Are Immutable DS faster to access?&lt;/h3>
&lt;p>&lt;a href="https://janet-lang.org/docs/data_structures/index.html">No&lt;/a>, but I still wanted to investigate. I added these type casts, which did not noticeably impact marshal times:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">def&lt;/span> verses (&lt;span style="color:#82aaff">table/to-struct&lt;/span> verses))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># ...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">var&lt;/span> abbrev-array (&lt;span style="color:#82aaff">tuple&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">;&lt;/span>(&lt;span style="color:#82aaff">keys&lt;/span> abbrev-set)))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For actual execution, &lt;code>hyperfine &amp;quot;./test-janet gen 3:4&amp;quot;&lt;/code> showed no appreciable difference:&lt;/p>
&lt;p>Mutable: &lt;code>48.1 ms ± 4.8 ms [User: 38.1 ms, System: 9.8 ms]&lt;/code>&lt;/p>
&lt;p>Immutable: &lt;code>47.0 ms ± 3.5 ms [User: 37.4 ms, System: 9.5 ms]&lt;/code>&lt;/p>
&lt;p>For good measure, as a script, &lt;code>hyperfine &amp;quot;janet verse-reader.janet gen 3:4&amp;quot;&lt;/code> gives:&lt;/p>
&lt;p>Just slow: &lt;code>246.3 ms ± 63.7 ms [User: 233.8 ms, System: 12.2 ms]&lt;/code>&lt;/p>
&lt;h3 id="image-based-development">Image Based Development&lt;/h3>
&lt;p>Making an image is easy!&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic">### in a repl&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">def&lt;/span> my-module @{&lt;span style="color:#ff966c">:public&lt;/span> true})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># (var voice [:unvoiced :voiced]) # do stuff here...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#82aaff">spit&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;test.jimage&amp;#34;&lt;/span> (&lt;span style="color:#82aaff">make-image&lt;/span> (&lt;span style="color:#82aaff">curenv&lt;/span>)))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>janet -i test.jimage&lt;/code> will run it. But how do you resume it?&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> restore-image [image]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">loop&lt;/span> [[k v] &lt;span style="color:#ff966c">:pairs&lt;/span> image]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">put&lt;/span> (&lt;span style="color:#82aaff">curenv&lt;/span>) k v)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(restore-image (&lt;span style="color:#82aaff">load-image&lt;/span> (&lt;span style="color:#82aaff">slurp&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;test.jimage&amp;#34;&lt;/span>)))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;a href="https://janet.zulipchat.com/#narrow/channel/409517-help/topic/Image.20Based.20Development.3F/with/529177765">Discovering&lt;/a> this was somewhat painful but the community is very helpful!&lt;/p>
&lt;p>This means there&amp;rsquo;s still work to create an image-driven development flow (and determine whether it&amp;rsquo;s better than sending source code to the REPL.)&lt;/p>
&lt;p>Closures even stay synced across loads!&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> timer [t]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">var&lt;/span> t t)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [(&lt;span style="color:#c099ff">fn&lt;/span> [] (&lt;span style="color:#c099ff">set&lt;/span> t (&lt;span style="color:#82aaff">+&lt;/span> t &lt;span style="color:#ffc777">1&lt;/span>)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">fn&lt;/span> [] (&lt;span style="color:#c099ff">set&lt;/span> t (&lt;span style="color:#82aaff">+&lt;/span> t &lt;span style="color:#ffc777">2&lt;/span>)))])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">def&lt;/span> tx (timer &lt;span style="color:#ffc777">0&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic"># call like this:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>((tx &lt;span style="color:#ffc777">0&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>((tx &lt;span style="color:#ffc777">1&lt;/span>))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After saving the image as above, you can exit and start a new REPL, load the image and they will stay synced!&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>me:~$ janet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Janet 1.38.0-local linux/x64/gcc - &lt;span style="color:#c3e88d">&amp;#39;(doc)&amp;#39;&lt;/span> &lt;span style="color:#c099ff">for&lt;/span> &lt;span style="color:#c3e88d">help&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:1:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>defn timer &lt;span style="color:#c3e88d;font-weight:bold">[&lt;/span>t&lt;span style="color:#c3e88d;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:2:&lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>var t t&lt;span style="color:#c3e88d;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:3:&lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">[(&lt;/span>fn &lt;span style="color:#c3e88d;font-weight:bold">[]&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>&lt;span style="color:#c3e88d">set&lt;/span> t &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>+ t 1&lt;span style="color:#c3e88d;font-weight:bold">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:4:&lt;span style="color:#c3e88d;font-weight:bold">([&lt;/span>&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>fn &lt;span style="color:#c3e88d;font-weight:bold">[]&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>&lt;span style="color:#c3e88d">set&lt;/span> t &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>+ t 2&lt;span style="color:#c3e88d;font-weight:bold">)))])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;&lt;span style="color:#c099ff">function&lt;/span> timer&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:5:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>def tx &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>timer 0&lt;span style="color:#c3e88d;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>&amp;lt;&lt;span style="color:#c099ff">function&lt;/span> 0x5E0A7C67FBF0&amp;gt; &amp;lt;&lt;span style="color:#c099ff">function&lt;/span> 0x5E0A7C67FC50&amp;gt;&lt;span style="color:#c3e88d;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:6:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">((&lt;/span>tx 0&lt;span style="color:#c3e88d;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffc777">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:7:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">((&lt;/span>tx 1&lt;span style="color:#c3e88d;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffc777">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:8:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>def my-module @&lt;span style="color:#c3e88d;font-weight:bold">{&lt;/span>:public true&lt;span style="color:#c3e88d;font-weight:bold">})&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>@&lt;span style="color:#c3e88d;font-weight:bold">{&lt;/span>:public true&lt;span style="color:#c3e88d;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:9:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>var voice &lt;span style="color:#c3e88d;font-weight:bold">[&lt;/span>:unvoiced :voiced&lt;span style="color:#c3e88d;font-weight:bold">])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>:unvoiced :voiced&lt;span style="color:#c3e88d;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:10:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>spit &lt;span style="color:#c3e88d">&amp;#34;test.jimage&amp;#34;&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>make-image &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>curenv&lt;span style="color:#c3e88d;font-weight:bold">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>nil
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:11:&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>me:~$ janet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Janet 1.38.0-local linux/x64/gcc - &lt;span style="color:#c3e88d">&amp;#39;(doc)&amp;#39;&lt;/span> &lt;span style="color:#c099ff">for&lt;/span> &lt;span style="color:#c3e88d">help&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:1:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>defn restore-image &lt;span style="color:#c3e88d;font-weight:bold">[&lt;/span>image&lt;span style="color:#c3e88d;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:2:&lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>loop &lt;span style="color:#c3e88d;font-weight:bold">[[&lt;/span>k v&lt;span style="color:#c3e88d;font-weight:bold">]&lt;/span> :pairs image&lt;span style="color:#c3e88d;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:3:&lt;span style="color:#c3e88d;font-weight:bold">((&lt;/span>&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>put &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>curenv&lt;span style="color:#c3e88d;font-weight:bold">)&lt;/span> k v&lt;span style="color:#c3e88d;font-weight:bold">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;&lt;span style="color:#c099ff">function&lt;/span> restore-image&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:4:&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:5:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>restore-image &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>load-image &lt;span style="color:#c3e88d;font-weight:bold">(&lt;/span>slurp &lt;span style="color:#c3e88d">&amp;#34;test.jimage&amp;#34;&lt;/span>&lt;span style="color:#c3e88d;font-weight:bold">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>nil
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:6:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">((&lt;/span>tx 0&lt;span style="color:#c3e88d;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffc777">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:7:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">((&lt;/span>tx 0&lt;span style="color:#c3e88d;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffc777">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:8:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">((&lt;/span>tx 1&lt;span style="color:#c3e88d;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffc777">7&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:9:&amp;gt; &lt;span style="color:#c3e88d;font-weight:bold">((&lt;/span>tx 1&lt;span style="color:#c3e88d;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffc777">9&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>repl:10:&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>How does it do this? I don&amp;rsquo;t know! Looking at the image:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>@{_ @{&lt;span style="color:#ff966c">:value&lt;/span> @{&lt;span style="color:#ff966c">:public&lt;/span> true}} my-module @{&lt;span style="color:#ff966c">:source-map&lt;/span> (&lt;span style="color:#c3e88d">&amp;#34;repl&amp;#34;&lt;/span> &lt;span style="color:#ffc777">10&lt;/span> &lt;span style="color:#ffc777">1&lt;/span>) &lt;span style="color:#ff966c">:value&lt;/span> @{&lt;span style="color:#ff966c">:public&lt;/span> true}} timer @{&lt;span style="color:#ff966c">:doc&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;(timer t)&lt;/span>&lt;span style="color:#82aaff">\n\n&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> &lt;span style="color:#ff966c">:source-map&lt;/span> (&lt;span style="color:#c3e88d">&amp;#34;repl&amp;#34;&lt;/span> &lt;span style="color:#ffc777">1&lt;/span> &lt;span style="color:#ffc777">1&lt;/span>) &lt;span style="color:#ff966c">:value&lt;/span> &amp;lt;function timer&amp;gt;} tx @{&lt;span style="color:#ff966c">:source-map&lt;/span> (&lt;span style="color:#c3e88d">&amp;#34;repl&amp;#34;&lt;/span> &lt;span style="color:#ffc777">6&lt;/span> &lt;span style="color:#ffc777">1&lt;/span>) &lt;span style="color:#ff966c">:value&lt;/span> (&amp;lt;function &lt;span style="color:#ffc777">0x63B32169BF30&lt;/span>&amp;gt; &amp;lt;function &lt;span style="color:#ffc777">0x63B32169C110&lt;/span>&amp;gt;)}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>and current environment with &lt;code>(curenv)&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>@{_ @{&lt;span style="color:#ff966c">:value&lt;/span> &amp;lt;cycle &lt;span style="color:#ffc777">0&lt;/span>&amp;gt;} my-module @{&lt;span style="color:#ff966c">:source-map&lt;/span> (&lt;span style="color:#c3e88d">&amp;#34;repl&amp;#34;&lt;/span> &lt;span style="color:#ffc777">10&lt;/span> &lt;span style="color:#ffc777">1&lt;/span>) &lt;span style="color:#ff966c">:value&lt;/span> @{&lt;span style="color:#ff966c">:public&lt;/span> true}} restore-image @{&lt;span style="color:#ff966c">:doc&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;(restore-image image)&lt;/span>&lt;span style="color:#82aaff">\n\n&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> &lt;span style="color:#ff966c">:source-map&lt;/span> (&lt;span style="color:#c3e88d">&amp;#34;repl&amp;#34;&lt;/span> &lt;span style="color:#ffc777">1&lt;/span> &lt;span style="color:#ffc777">1&lt;/span>) &lt;span style="color:#ff966c">:value&lt;/span> &amp;lt;function restore-image&amp;gt;} timer @{&lt;span style="color:#ff966c">:doc&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;(timer t)&lt;/span>&lt;span style="color:#82aaff">\n\n&lt;/span>&lt;span style="color:#c3e88d">&amp;#34;&lt;/span> &lt;span style="color:#ff966c">:source-map&lt;/span> (&lt;span style="color:#c3e88d">&amp;#34;repl&amp;#34;&lt;/span> &lt;span style="color:#ffc777">1&lt;/span> &lt;span style="color:#ffc777">1&lt;/span>) &lt;span style="color:#ff966c">:value&lt;/span> &amp;lt;function timer&amp;gt;} tx @{&lt;span style="color:#ff966c">:source-map&lt;/span> (&lt;span style="color:#c3e88d">&amp;#34;repl&amp;#34;&lt;/span> &lt;span style="color:#ffc777">6&lt;/span> &lt;span style="color:#ffc777">1&lt;/span>) &lt;span style="color:#ff966c">:value&lt;/span> (&amp;lt;function &lt;span style="color:#ffc777">0x63B321651220&lt;/span>&amp;gt; &amp;lt;function &lt;span style="color:#ffc777">0x63B321651410&lt;/span>&amp;gt;)}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I thought the &amp;ldquo;function hashes&amp;rdquo; were only sometimes changing. But in &lt;a href="https://janet.zulipchat.com/#narrow/channel/399615-general/topic/IRC/with/531459999">IRC&lt;/a>, Wolfdog explained:&lt;/p>
&lt;blockquote>
&lt;p>&lt;code>&amp;lt;function 0x............&amp;gt;&lt;/code> are just the address the object points to (see src/core/pp.c, function janet_to_string_b)&lt;/p>&lt;/blockquote>
&lt;p>The first number after &lt;code>&amp;quot;repl&amp;quot;&lt;/code> is the line it was defined on. I don&amp;rsquo;t know the 2nd yet.&lt;/p>
&lt;h3 id="limits-of-image-based-development">Limits of Image Based Development&lt;/h3>
&lt;p>If you start a repl with &lt;code>janet -d&lt;/code>, &lt;code>(dyn 'symb)&lt;/code> will show you &lt;code>symb&lt;/code>&amp;rsquo;s metadata, including its &lt;code>:source-form&lt;/code>. While it works for locally defined forms, &lt;code>(get (dyn '+) :source-form)&lt;/code> is &lt;code>nil&lt;/code>. Potentially, one could build Janet while preserving such &lt;a href="https://github.com/janet-lang/janet/blob/f2eaa5dee82dcc05a1f22d092dbd3c00c174daec/src/boot/boot.janet#L42">debug&lt;/a> information.&lt;/p>
&lt;p>C code can&amp;rsquo;t be marshalled into &lt;code>.jimage&lt;/code> files, leading to projects like &lt;a href="https://github.com/CFiggers/jayson">jayson&lt;/a>.&lt;/p></content:encoded></item><item><title>Iraq War Decision</title><link>https://alexalejandre.com/notes/iraq-war-decision/</link><pubDate>Thu, 17 Jul 2025 23:31:16 -0400</pubDate><guid>https://alexalejandre.com/notes/iraq-war-decision/</guid><description>How did the US &amp;ldquo;sleep-walk&amp;rdquo; into invading Iraq and killing a million people.</description><content:encoded>&lt;h4 id="leap-of-faith---iraq-war-decision">Leap of Faith - Iraq War Decision&lt;/h4>
&lt;ul>
&lt;li>
&lt;p>The National Security Council believed once you “cut off the head” of the Iraqi government, you would witness a “rapid and inevitable march toward Jeffersonian democracy.” But the metaphor already fails, what marches after losing its head?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>almost everyone, Democrat and Republican, was for it. As soon as he stopped being a client, everyone suddenly noticed his problems&lt;/p>
&lt;ul>
&lt;li>in the 90s, e.g. Al Gore wrote op-eds calling for Saddam&amp;rsquo;s toppling&lt;/li>
&lt;li>&amp;ldquo;destructive ambiguity&amp;rdquo; - everyone knew everyone else knew the policy was eliminating Saddam, but since it wasn&amp;rsquo;t official, it didn&amp;rsquo;t go through official channels, wasn&amp;rsquo;t formally debated&amp;hellip;&lt;/li>
&lt;li>Abilene Paradox - no one wants to, but everyone supports it, thinking everyone else does and don&amp;rsquo;t want to shake the boat&lt;/li>
&lt;li>Bob Baer started organizing a coup in 95 for Ahmed Chalabi, thinking his superiors wanted it. His coup shared Strelkov&amp;rsquo;s Ukrainian strategy, sparking rebellion, which the other side would start to crush, causing the greater power to intervene!
&lt;ul>
&lt;li>Rumsfeld proposed making Chalabi ruler/dictatotr&lt;/li>
&lt;li>Bush apparently considered Chalabi a conman and nixed it&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Wolfowitz lost most of his family in the holocaust, dedicated his career to the US opposing tyranny and oppression everywhere&lt;/p>
&lt;/li>
&lt;li>
&lt;p>All American politicians have been &amp;ldquo;neocons&amp;rdquo; with a &amp;ldquo;missionary impulse&amp;rdquo; believing Americans are the good guys, who must right wrongs everywhere and freedom and democracy belong everywhere. Others, now and in the past, rather believe countries have core and peripheral interests, you shouldn&amp;rsquo;t interfere with core interests and different groups have different goals, leading to interesting diversity. Indeed, other countries don&amp;rsquo;t see themselves as &amp;ldquo;good guys&amp;rdquo; but a people.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>our belief that we’re bombing you for your own good&lt;/p>&lt;/blockquote>
&lt;ul>
&lt;li>
&lt;p>Saddam&amp;rsquo;s regime dismantled WMDs in the 90s, but publicly pretended to still have them. Perhaps they pretended for prestige or against Iran, while believing US intelligence would figure it out.&lt;/p>
&lt;ul>
&lt;li>As Ba&amp;rsquo;Athism opposed radical Sunni Islam, why would the US oppose him and e.g. not ask for help fighting it?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>after 9/11, CIA Director George Tenetdescribed the White House as “more raw emotion in one place than I think I’ve ever experienced in my life.” They all thought they, personally, were in personal, physical danger.&lt;/p>
&lt;ul>
&lt;li>they then further traumatized themselves starting every morning with the &amp;ldquo;threat matrix&amp;rdquo; listing all terror threats under investigation. Cheney articulated a one percent doctrine, requiring immediate action against anything with a 1% chance of being real.&lt;/li>
&lt;li>Doug Feith and Rumsfeld communicated intentions against all terror groups, in Latin America etc. even.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>the US admin believed dictatorships sponsor terrorism, so removing them would stop terrorism!&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Afghanistan was going very well, making people feel sloppy regime change could work&lt;/p>
&lt;/li>
&lt;li>
&lt;p>large organizations are &amp;ldquo;artificial intelligences&amp;rdquo;, weirdly shaped minds. Are they super intelligent or retarded? In some ways both. But we humans do not understand how such (differently-shaped) cognitive architectures reach decisions.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>because there was no concious decision, they never decided what they were actually doing&lt;/p>
&lt;ul>
&lt;li>Rumsfeld just wanted to shrink the defense department, so he rejected all proposals, asking why they couldn&amp;rsquo;t be smaller etc. He rejected all &amp;ldquo;round numbers&amp;rdquo; of troops, believing they couldn&amp;rsquo;t be the result of considered analysis.
&lt;ul>
&lt;li>Russia too convinced itself it didn&amp;rsquo;t need a big footprint in Ukraine&lt;/li>
&lt;li>neocons supported this, because the US needed spare capacity for Iran and other wars right after, which they called &amp;ldquo;recocking the pistol&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>an aid agency asked who would provide security for reconstruction, a US officer suggested they &amp;ldquo;hire warlords&amp;rdquo;&lt;/li>
&lt;li>a leader must ensure everyone knows what the goals, strategy, plan are, so they can work as a team. Yet Bush didn&amp;rsquo;t know them himself. So everyone was backstabbing each other&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>the US media jumped in line to push the war, even those opposing Bush parroted the WMD narrative etc. Al Gore, John Kerry and the Clintons supported it. Even 10 years later, only the far left and far right would discuss how bad this was&lt;/p>
&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Both were firmly outside the window of acceptable opinion. This phenomenon, where an informational “firewall” is maintained against an obvious and important truth that could undermine the legitimacy of the entire system, is supposed to be something that only happens under oppressive or authoritarian governments&lt;/p>&lt;/blockquote>
&lt;ul>
&lt;li>Cheney broke &amp;ldquo;norms&amp;rdquo; by ignoring bureaucracy (under him) and trying to get answers from the source.&lt;/li>
&lt;li>Rumsfield was intelligent, like a debater. He could argue any side, but struggled to synthesize and integrate information into his own theory, picking sides due to convenience instead of belief. He could justify, but not choose action. kHe thought the military-industrial complex wasteful and sought to fight it, but found himself wielding it &amp;hellip;against Iraq.&lt;/li>
&lt;li>Collin Powell, often seen as an honorable man, was actually the man who covered up the My Lai massacre, writing “relations between…soldiers and the Vietnamese people are excellent.&amp;quot; He was willing to do whatever his superiors wanted.&lt;/li>
&lt;li>Condoleeza Rice was a child prodigy, by 3: violin, French, ballet, ran her parents&amp;rsquo; household by 10 and started college at 15. Psmiths argue she was &lt;em>addicted to approval&lt;/em> (as many child prodigies, leading to their failure. They seek ever further praise, but don&amp;rsquo;t learn to set their own objectives.)&lt;/li>
&lt;li>George Bush Jr. found good people, put them in charge and vibed. If something breaks, you simply make a big decision and rest on your vibes. Conny said: &amp;ldquo;Very intuitive and insightful… He is somebody who very efficiently gets to the essence of a question… He least likes me to say, ‘This is complex.&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>a man brimming with the most interesting contradictions: at once shrewd and intellectually lazy; aloof from the details of policy, and a recurrent micromanager of speeches and statements; humane and compassionate at some moments, and frat-boy cutting and dismissive at others; a faith-driven altruist capable of titanic outbursts of fury and profanity…essentially genuine and deeply committed to the well-being of the American people and to the promotion of freedom abroad…so heedless of detail as to be repeatedly shocked by the implications of his own choices. - Leap of Faith - Mazarr&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>I felt there was a real danger here that you could get bogged down in a long drawn out conflict…and then you’ve got to worry about what comes after. And then you have to accept the responsibility for what happens in Iraq, accept more responsibility for what happens in the region. It would have been an all-US operation, I don’t think any of our allies would have been with us, maybe Britain, but nobody else. And you’re going to take a lot more American casualties if you’re gonna go much around in Iraq for weeks on end trying to run Saddam Hussein to ground and capture Baghdad and so forth and I don’t think it would have been worth it. - Dick Cheney&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=FNt7s_Wed_4">General Wesley Clark Wars Were Planned Seven Countries In Five Years&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>he stated that Bush’s neocon team wanted to invade and destroy seven countries in five years: Iraq, Syria, Lebanon, Libya, Somalia, Sudan, Iran, none of which had anything to do with the supposed 9/11 attackers&lt;/p>
&lt;p>This strategy was itself based on Israel’s 1996 policy document A Clean Break: A New Strategy for Securing the Realm. In this document Israel&amp;rsquo;s strategy for regional security included destabilizing and weakening key nations seen as threats. The document explicitly called for efforts to undermine and topple the regimes in Iraq and Syria. It proposed supporting internal opposition within Iraq to weaken Saddam Hussein’s regime, particularly due to concerns over Iraq&amp;rsquo;s military capabilities and potential weapons of mass destruction, while Syria was viewed as a major regional threat because of its alliance with Iran and its support for Hezbollah. Although not directly calling for military action, the strategy also outlined efforts to counter Iran&amp;rsquo;s growing regional influence, especially its nuclear ambitions. The overarching aim was to reshape the Middle East by destabilizing these nations to reduce the perceived threats to Israel&amp;rsquo;s security.&lt;/p>&lt;/blockquote>
&lt;p>Richard Clark, on 9/12:&lt;/p>
&lt;blockquote>
&lt;p>I expected to go back to a round of meetings examining what the next attacks could be, what our vulnerabilities were, what we could do about them in the short term. Instead, I walked into a series of discussions about Iraq. At first I was incredulous that we were talking about something other than getting al Qaeda. Then I realized with almost a sharp physical pain that Rumsfeld and Wolfowitz were going to try to take advantage of this national tragedy to promote their agenda about Iraq. Since the beginning of the administration, indeed well before, they had been pressing for a war with Iraq. My friends in the Pentagon had been telling me that the word was we would be invading Iraq sometime in 2002.&lt;/p>
&lt;p>On the morning of the 12th DOD&amp;rsquo;s focus was already beginning to shift from al Qaeda. CIA was explicit now that al Qaeda was guilty of the attacks, but Paul Wolfowitz, Rumsfeld&amp;rsquo;s deputy, was not persuaded. It was too sophisticated and complicated an operation, he said, for a terrorist group to have pulled off by itself, without a state sponsor—Iraq must have been helping them. I had a flashback to Wolfowitz saying the very same thing in April when the administration had finally held its first deputy secretary-level meeting on terrorism. When I had urged action on al Qaeda then, Wolfowitz had harked back to the 1993 attack on the World Trade Center, saying al Qaeda could not have done that alone and must have had help from Iraq. The focus on al Qaeda was wrong, he had said in April, we must go after Iraqi-sponsored terrorism. He had rejected my assertion and CIA&amp;rsquo;s that there had been no Iraqi-sponsored terrorism against the United States since 1993. Now this line of thinking was coming back.&lt;/p>
&lt;p>By the afternoon on Wednesday, Secretary Rumsfeld was talking about broadening the objectives of our response and &amp;ldquo;getting Iraq.&amp;rdquo; Secretary Powell pushed back, urging a focus on al Qaeda. Relieved to have some support, I thanked Colin Powell and his deputy, Rich Armitage. &amp;ldquo;I thought I was missing something here,&amp;rdquo; I vented. &amp;ldquo;Having been attacked by al Qaeda, for us now to go bombing Iraq in response Evacuate the White House 31 would be like our invading Mexico after the Japanese attacked us at Pearl Harbor.&amp;rdquo; Powell shook his head. &amp;ldquo;It&amp;rsquo;s not over yet.&amp;rdquo; Indeed, it was not. Later in the day, Secretary Rumsfeld complained that there were no decent targets for bombing in Afghanistan and that we should consider bombing Iraq, which, he said, had better targets. At first I thought Rumsfeld was joking. But he was serious and the President did not reject out of hand the idea of attacking Iraq. Instead, he noted that what we needed to do with Iraq was to change the government, not just hit it with more cruise missiles, as Rumsfeld had implied.&lt;/p>&lt;/blockquote>
&lt;h5 id="critiques-on-this">Critiques on this&lt;/h5>
&lt;ul>
&lt;li>but actually in 2002 Al Gore spoke against invasion: &lt;a href="https://www.theguardian.com/world/2002/sep/23/usa.iraq?CMP=share_btn_url">https://www.theguardian.com/world/2002/sep/23/usa.iraq?CMP=share_btn_url&lt;/a>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>As to the Iraqi nuclear weapons story, we forget that the assertion about those weapons was only one of about 16 different justifications given for the attack. The bureaucracy treated the criticisms of Iraq as if they were arraigning Al Capone &amp;ndash; if we can&amp;rsquo;t get him on murder charges, at least we can get him on tax evasion. That kind of shotgun approach may work in the vile US &amp;ldquo;legal&amp;rdquo; system, but it is no way to run foreign policy.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Do you have any programs going on that I don’t know about? - &lt;a href="https://www.theamericanconservative.com/saddams-secret-weapon/">Saddam&lt;/a> in 1998&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>So firmly did Saddam believe in the underlying unity of the world that after enduring years of unrelenting UN inspections, he began to wonder if maybe Iraq did secretly possess WMDs after all. Why else would the Swedes keep badgering him? “Do you have any programs going on that I don’t know about?” he asked his deputy prime minister in 1998. “Absolutely not,” the minister replied, thinking this was a loyalty test—and only later realizing that the dictator was in earnest. Not long after, another one of Saddam’s aides approached him with the same question. “Do we have WMD?” he asked. “Don’t you know?” Saddam replied. “No!” the minister yelped. “No,” Saddam said. And when Saddam announced to his generals on the eve of the Iraq War that Iraq definitely did not possess nuclear weapons, many were surprised. They had always assumed that his constant questions about the subject implied some radiant secret, hidden from all eyes but his own.&lt;/p>&lt;/blockquote></content:encoded></item><item><title>Einige Nationalkonservative</title><link>https://alexalejandre.com/notes/national-conservatives/</link><pubDate>Tue, 15 Jul 2025 15:37:38 -0400</pubDate><guid>https://alexalejandre.com/notes/national-conservatives/</guid><description>Interessante frühere Mitläufer, die nicht lange bei den Nazis gut angeschrieben waren</description><content:encoded>&lt;p>Eduard Stadtler 1886-1945 - fleißig, selbstwichtig und von Mussolinibeseelt&lt;/p>
&lt;ul>
&lt;li>1918 &lt;a href="https://de.wikipedia.org/wiki/Antibolschewistische_Liga">Antibolschweistische Liga&lt;/a> gegründet&lt;/li>
&lt;li>1921 für diplomatischen Landesverrat angeklagt, wobei &amp;ldquo;bisher zeigte er sich so schlecht informiert, daß es verwunderlich wäre, wenn er Staatsgeheimnisse zu verraten hätte&amp;rdquo;&lt;/li>
&lt;li>1923 Putschpläne&lt;/li>
&lt;li>obwohl für &lt;a href="https://de.wikipedia.org/wiki/Deutschnationale_Volkspartei">DNVP&lt;/a> gewählt, als Nazi im Reichstag beigetreten&lt;/li>
&lt;li>unklar, ob NSDAP Mitglied war&lt;/li>
&lt;li>von 1936 von den Nazis als Reaktionär unterdrückt&lt;/li>
&lt;li>1937 im Buch &amp;ldquo;Welt-Revolutions-Krieg&amp;rdquo; den &amp;ldquo;Vitalismus der jüdischen Rasse&amp;rdquo; und Stalins &amp;ldquo;nationalistisch bis auf die Knochen&amp;rdquo; Politik gelobt, obzwar Erzfeind des Bolschewismus&lt;/li>
&lt;/ul>
&lt;p>Paul Schulz (1898-1963)&lt;/p>
&lt;ul>
&lt;li>Führer der &lt;a href="https://de.wikipedia.org/wiki/Fememord">fememörderischen&lt;/a> Schwarzen Reichswehr&lt;/li>
&lt;li>1931 SA nach &lt;a href="https://de.wikipedia.org/wiki/Walther_Stennes">Stennes&lt;/a> Putsch gegen den &lt;a href="https://de.wikipedia.org/wiki/Legalit%C3%A4tstaktik">Legalitätskurs&lt;/a> reorganisiert&lt;/li>
&lt;li>1934 in der Röhm-Aktion geschossen, doch überlebt
&lt;ul>
&lt;li>durch &lt;a href="https://de.wikipedia.org/wiki/Ulrich_L%C3%BCbbert">Lübbert&lt;/a> persönlichen Schutz von Hitler und Göring erhalten&lt;/li>
&lt;li>sofort nach der Schweiz, 1935 nach Athen, 1940 nach Budapest umgezogen&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>1940 versuchte Wiederaufnahme in der Partei zurückgewiesen&lt;/li>
&lt;/ul>
&lt;p>Hermann Ehrhardt (1881-1971)&lt;/p>
&lt;ul>
&lt;li>Leiter der Marine-Brigade Ehrhardt&lt;/li>
&lt;li>&lt;a href="https://de.wikipedia.org/wiki/Fememord">fememörderische&lt;/a> Organisation Consul gegründet, die Rathenau und Erzberger ermordert&lt;/li>
&lt;li>Hitler bei SA Gründung zurückgewiesen und mit &amp;ldquo;Herrgott, was will der Idiot schon wieder?&amp;rdquo; beschimpft&lt;/li>
&lt;li>mit von Kahr einen Vormarsch auf Berlin organisiert, dem Hitlers Putsch zurvorkommen sollte, gegen welchen Ehrhardt wiederum gestellt&lt;/li>
&lt;li>1931 Gefolgschaft gegründet, die eine Machtübernahme Hitlers zu verhindert gesucht&lt;/li>
&lt;li>1933 in die SS getreten(?)&lt;/li>
&lt;li>in der Röhm-Aktion geflohen&lt;/li>
&lt;/ul>
&lt;p>Ernst von Saloman (1902-1972)&lt;/p>
&lt;ul>
&lt;li>in Freikorps im Sparakusaufstand, in Lettland, am Kapp-Putsch, in Oberschlesien gekämpft&lt;/li>
&lt;li>für die Organisation Consul an Fememördern teilgenommen&lt;/li>
&lt;li>1930 die Geächteten veröffentlicht&lt;/li>
&lt;li>1933 Gelöbnis treuster Gefolgschaft &lt;em>nicht&lt;/em> unterzeichnet&lt;/li>
&lt;li>jüdische Frau&lt;/li>
&lt;li>Drehbücher für Propagandafilme wie &lt;a href="https://de.wikipedia.org/wiki/Carl_Peters_(Film)">Carl Peters&lt;/a> geschrieben&lt;/li>
&lt;li>sich so beschrieben: &amp;ldquo;vielmehr bin ich ein ganz korruptes Schwein geworden, das den schäbigen Rest von Seele glatt für die Brosamen verkauft&amp;rdquo;&lt;/li>
&lt;li>1951 den &lt;a href="https://de.wikipedia.org/wiki/Der_Fragebogen">Fragebogen&lt;/a> über Entnazifizierung veröffentlicht&lt;/li>
&lt;/ul></content:encoded></item><item><title>Python is against Backwards Compatibility</title><link>https://alexalejandre.com/notes/python-against-backwards-compatibility/</link><pubDate>Sun, 06 Jul 2025 18:11:33 -0400</pubDate><guid>https://alexalejandre.com/notes/python-against-backwards-compatibility/</guid><description>I have unreasonable opinions here.</description><content:encoded>&lt;blockquote>
&lt;p>A few years ago I would have said, &amp;ldquo;and of course it&amp;rsquo;s boring technology that&amp;rsquo;s been supported in the Python standard library forever,&amp;rdquo; but apparently the remaining Python maintainers are the ones who think that code stability and backwards compatibility with boring technology are actively harmful things, so they&amp;rsquo;ve been removing modules from the standard library if they are too boring and stable. I swear I am not making this up. The cgi module is removed in 3.13.&lt;/p>&lt;/blockquote>
&lt;p>The &lt;a href="https://peps.python.org/pep-0594/#cgi">justification&lt;/a> refers to &lt;a href="https://peps.python.org/pep-0206/">complaints&lt;/a> from 2000, describing cgi as &amp;ldquo;designed poorly and are now near-impossible to fix&amp;rdquo; because it starts new processes.&lt;/p>
&lt;p>There is a 3rd-party drop-in &lt;a href="https://github.com/jackrosenthal/legacy-cgi">replacement&lt;/a> and &lt;a href="https://pypi.org/project/legacy-cgi/">legacy-cgi&lt;/a>. Indeed, that&amp;rsquo;s what they want:&lt;/p>
&lt;blockquote>
&lt;p>Python has a rich and vibrant ecosystem of third-party packages. &amp;hellip; Python’s standard library is piling up with cruft, unnecessary duplication of functionality, and dispensable features&lt;/p>&lt;/blockquote>
&lt;p>Python maintainers happily make breaking changes for the sake of breakage.&lt;/p>
&lt;p>Now, cgi is easy and empowers many &lt;a href="https://wiki.fennel-lang.org/CGI">better&lt;/a> languages, so little loss either way.&lt;/p></content:encoded></item><item><title>Jangal Movement</title><link>https://alexalejandre.com/notes/junge-movement/</link><pubDate>Sun, 06 Jul 2025 02:15:03 -0400</pubDate><guid>https://alexalejandre.com/notes/junge-movement/</guid><description>A constitutionalist revolt in WWI Iran turned into a Soviet insurgency</description><content:encoded>&lt;p>&lt;a href="https://en.wikipedia.org/wiki/Mirza_Kuchik_Khan">Mirza Kuchik Khan&lt;/a> led a religious secessionist movement in Gilan against government corruption.&lt;/p>
&lt;p>During the Russian Revolution, Iranian Marxists began to collaborate with the Jangalis (later forming &lt;a href="https://en.wikipedia.org/wiki/Tudeh_Party_of_Iran">Tudeh&lt;/a>.) During the 1917-19 &lt;a href="https://en.wikipedia.org/wiki/Persian_famine_of_1917%E2%80%931919">famine&lt;/a>, the Jangali movement gained strength.&lt;/p>
&lt;p>They interfered with &lt;a href="https://en.wikipedia.org/wiki/Dunsterforce">Dunsterforce&lt;/a>, so Edward Noel tried to assassinate Mirza and planes bombed his house. Dunsterforce with &lt;a href="https://en.wikipedia.org/wiki/Armenian_Revolutionary_Federation">Armenian&lt;/a> red guards defeated them in the Battle of Manjil (1918), then briefly installed the &lt;a href="https://en.wikipedia.org/wiki/Centrocaspian_Dictatorship">Centro-Caspian Dictatorship&lt;/a> in Baku.&lt;/p>
&lt;p>In 1919, 20,000 Soviets intervened against the British, proclaimed the &lt;a href="https://en.wikipedia.org/wiki/Persian_Socialist_Soviet_Republic">Soviet Republic of Gilan&lt;/a> but replaced Mirza. Mirza began secret negotiations with the Iranian government against the communists, leading to a countercoup and brief peace.&lt;/p>
&lt;p>Reza Khan Pahlavi was made commander of the government&amp;rsquo;s Cossack Brigade. The British and Soviets withdrew troops and Pahlvai ended the Jangali movement by the end of 1921.&lt;/p></content:encoded></item><item><title>Jujutsu</title><link>https://alexalejandre.com/notes/jujutsu/</link><pubDate>Sun, 06 Jul 2025 02:15:03 -0400</pubDate><guid>https://alexalejandre.com/notes/jujutsu/</guid><description>Git is dead, long live Jujutsu!</description><content:encoded>&lt;h3 id="tips">Tips&lt;/h3>
&lt;ul>
&lt;li>&lt;code>j git push --named &amp;lt;branch-name&amp;gt;=&amp;lt;rev&amp;gt;&lt;/code> creates a new bookmark pointing to rev, to avoid default &lt;code>&amp;lt;change-id&amp;gt;&lt;/code> names.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Ceate your own cache/staging area out of an empty change. A classic approach is to create two empty changes in a row, start editing files in the child change, and then when you’re finished with part of a change, you can squash it into the parent change, treating that as the staging area. When you’re happy with the contents of the staging area, you can give it a description, and then create a new change after that to be your next staging area. &amp;hellip; using &lt;code>jj squash&lt;/code> instead of &lt;code>git add&lt;/code>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>basically every time I use `jj edit to make “just a few changes,” I completely lose track of what I changed and need to track down the original version. it’s definitely almost always worth it to do a separate change and then squash&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>My personal “killer” use-case is as follows: I maintain a tree of branches that depend on each other, and will become PRs. (Maybe there are two independent branches A and B on top of the current trunk, and then C that has both A and B as parents, and then D on top of C.) I want to change a commit in one of the lower branches, say A. How do I do this?&lt;/p>
&lt;p>With git rebase -i it has become recently possible using &amp;ndash;update-refs, but this is advanced and tricky and not quite natural (you have to pretend to rebase D on top of trunk, when you really want to rebase A and “just update the rest”). In jj this is very natural, just start working on whatever commit in A you want to update.&lt;/p>&lt;/blockquote>
&lt;h3 id="how-to-learn">How to Learn&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://steveklabnik.github.io/jujutsu-tutorial/">https://steveklabnik.github.io/jujutsu-tutorial/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://maddie.wtf/posts/2025-07-21-jujutsu-for-busy-devs">https://maddie.wtf/posts/2025-07-21-jujutsu-for-busy-devs&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="why">Why&lt;/h3>
&lt;blockquote>
&lt;p>Since 2012 I have been the git expert for my team at jobs: able to untangle its bad UI, complicated merges, conflicts, and errors. My month in jujutsu has me more confident than my 18 years in git. It’s the most impressive developer tooling I’ve picked up in ages, and I’m mostly impressed because it feels friendly, safe, and reliable.
&amp;hellip;
I guess I’m also saying that I have 35 years with the sharp knives school of tool design and I’m more than ready to stop getting hurt by my tools and blamed for it. I don’t know this history well, but I have gotten the impression that the field of safety engineering was driven strongly by aviation safety, which had the crucial insight that if an accident is blamed on user error the planes will keep crashing; if you approach an accident with the idea that you don’t need to find a single root cause but take every reasonable intervention available to prevent problems you can achieve incredible things. To bring it back to code, why is it trivial in almost all web frameworks to output invalid HTML? - &lt;a href="https://lobste.rs/c/id7yok">pushcx&lt;/a>&lt;/p>&lt;/blockquote>
&lt;h3 id="objections">Objections&lt;/h3>
&lt;h5 id="weird-branch-names">Weird branch names!&lt;/h5>
&lt;blockquote>
&lt;blockquote>
&lt;p>colleague pushes branches like dudename-hashasletters&lt;/p>&lt;/blockquote>
&lt;p>with PR/MR-based workflows, the branch name is largely a less-informative version of the PR’s subject line &amp;hellip; less useful than commit msgs in the log, and now they’re one less thing to pay attention to.&lt;/p>&lt;/blockquote>
&lt;p>But &lt;a href="https://crespo.business/posts/overeng-pr-create-jj/">here&lt;/a>&amp;rsquo;s a PR commit script to maintain meaningful branch names.&lt;/p></content:encoded></item><item><title>Janet Commonplace</title><link>https://alexalejandre.com/programming/lisp/janet-commonplace/</link><pubDate>Thu, 03 Jul 2025 10:48:14 -0400</pubDate><guid>https://alexalejandre.com/programming/lisp/janet-commonplace/</guid><description>Questions, resources and thoughts about Janet, a minimalist Clojure-like with native binaries.</description><content:encoded>&lt;ul>
&lt;li>&lt;a href="https://acha.ninja/blog/dsl_for_shell_scripting/">https://acha.ninja/blog/dsl_for_shell_scripting/&lt;/a> + 200 loc library for janet-sh&lt;/li>
&lt;li>&lt;a href="https://ianthehenry.com/posts/">https://ianthehenry.com/posts/&lt;/a> 7 about making a game&lt;/li>
&lt;li>&lt;a href="https://janetdocs.org/">https://janetdocs.org/&lt;/a> has many examples&lt;/li>
&lt;li>&lt;a href="https://github.com/sogaiu/janet-features-demos">https://github.com/sogaiu/janet-features-demos&lt;/a>&lt;/li>
&lt;li>most discussion on &lt;a href="https://janet.zulipchat.com/#recent">zulip&lt;/a>&lt;/li>
&lt;li>the spork module holds most batteries like JSON&lt;/li>
&lt;li>&lt;a href="https://toodle.studio/">toodle&lt;/a> has an in browser graphics sandbox and tutorial&lt;/li>
&lt;li>&lt;a href="https://janetdocs.com/">janetdocs&lt;/a> have community examples of every function
&lt;ul>
&lt;li>but maintainer disappeared, so I should clone it&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>There are many accessors:&lt;/p>
&lt;ul>
&lt;li>associative structures like &lt;code>(def m @{:k &amp;quot;val&amp;quot;})&lt;/code>
&lt;ul>
&lt;li>&lt;code>(get m :k)&lt;/code>&lt;/li>
&lt;li>&lt;code>(in m :k)&lt;/code> - n.b. it does not throw errors with tables &amp;amp; structs&lt;/li>
&lt;li>&lt;code>(m :k)&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>indexed structures like &lt;code>(def a [:a :b :c])&lt;/code>
&lt;ul>
&lt;li>&lt;code>(get a 0)&lt;/code>&lt;/li>
&lt;li>&lt;code>(in a 0)&lt;/code> - throws error on failure&lt;/li>
&lt;li>&lt;code>(a 0)&lt;/code>&lt;/li>
&lt;li>&lt;code>(0 a)&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>get&lt;/code>&lt;/li>
&lt;li>&lt;code>in&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="pending-questions">Pending Questions&lt;/h3>
&lt;ul>
&lt;li>what does &lt;code>math/next&lt;/code> do? &lt;code>math/next 1 math/inf)&lt;/code> just returns 1&lt;/li>
&lt;li>why do &lt;code>product&lt;/code> and &lt;code>sum&lt;/code> exist? &lt;code>(product [1 2 3])&lt;/code> is the same as &lt;code>(* ;[1 2 3])&lt;/code>. People suggested using them in these cases:
&lt;ul>
&lt;li>You could write &lt;code>(sum x)&lt;/code> and &lt;code>(product x)&lt;/code> instead of &lt;code>(reduce + 0 x)&lt;/code> and &lt;code>(reduce * 1 x)&lt;/code>&lt;/li>
&lt;li>&lt;code>(map (fn [[a b]] (* a b)))&lt;/code> -&amp;gt; &lt;code>(map product)&lt;/code>&lt;/li>
&lt;li>prefer &lt;code>(sum (seq [[game-id rounds] :pairs data :when (all true? ...)] game-id))&lt;/code> although slower, over:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">loop&lt;/span> [[game-id rounds] &lt;span style="color:#ff966c">:pairs&lt;/span> data]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">when&lt;/span> (&lt;span style="color:#82aaff">all&lt;/span> true? ...)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">set&lt;/span> total (&lt;span style="color:#82aaff">+&lt;/span> total game-id)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>total)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h5 id="solved-questions-and-insights">Solved Questions and Insights&lt;/h5>
&lt;ul>
&lt;li>&lt;code>import&lt;/code>
&lt;ul>
&lt;li>&lt;a href="https://github.com/janet-lang/pkgs/blob/master/pkgs.janet">https://github.com/janet-lang/pkgs/blob/master/pkgs.janet&lt;/a> is the list of &amp;ldquo;core&amp;rdquo; imports without git links required&lt;/li>
&lt;li>&lt;code>jpm install&lt;/code> seemms to only move the source without package name so &lt;code>import&lt;/code> only works through your entry file&amp;rsquo;s name. Thus you should name the main how you want the import API to be. Package name from project.janet seems to just be for jpm itself. To be clearer, in package blabla with source my-file.janet you &lt;code>(import my-file)&lt;/code> which should have imports to the other files in the project&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>In the repl &lt;code>(defn main [&amp;amp; args] (+ ;args))&lt;/code> then &lt;code>(spit &amp;quot;test.janet&amp;quot; (make-image (curenv)))&lt;/code> does not produce an image you can run with &lt;code>janet -i test.janet&lt;/code> why not? &lt;code>could not find method :+ &lt;/code>
&lt;ul>
&lt;li>&lt;code>(defn main [waste &amp;amp; args] (print (reduce + 0 (map |(int/to-number (int/u64 $)) args))))&lt;/code>&lt;/li>
&lt;li>Both are possible: &lt;code>(reduce + 0 (map |(int/to-number (int/u64 $)) args))&lt;/code> or &lt;code>(reduce + 0 (map int/to-number (map int/u64 args)))&lt;/code>&lt;/li>
&lt;li>note that the first element passed is the filename janet is runniing, so you need to ignore that arg!&lt;/li>
&lt;li>use &lt;code>(compose int/u64 int/to-number)&lt;/code>&lt;/li>
&lt;li>&lt;code>scan-number&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>how to create nested tables?
&lt;ul>
&lt;li>&lt;code>put-in&lt;/code>&lt;/li>
&lt;li>wrong solution: &lt;code>merge-into&lt;/code> is destructive - &lt;code>(defn insert-verse (abbrev ch verse quote) (merge-into verses @{abbrev @{ch @{verse quote}}}))&lt;/code>&lt;/li>
&lt;li>made my own &lt;code>assoc-in&lt;/code> here&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> assoc-in [m ks v]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d">``Insert (and make) deeply nested tables, based on Clojure&amp;#39;s.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c3e88d">Use like: (var t (table)) (assoc-in t [:a :b :c :d] &amp;#34;e&amp;#34;)``&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">if&lt;/span> (&lt;span style="color:#82aaff">empty?&lt;/span> ks)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> v
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">let&lt;/span> [k (&lt;span style="color:#82aaff">first&lt;/span> ks)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nested (&lt;span style="color:#c3e88d">or&lt;/span> (&lt;span style="color:#82aaff">get&lt;/span> m k) @{})]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">put&lt;/span> m k (assoc-in nested (&lt;span style="color:#82aaff">slice&lt;/span> ks &lt;span style="color:#ffc777">1&lt;/span>) v)))))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>how do you make &lt;code>cond&lt;/code> not print nil?&lt;/li>
&lt;li>accepting cmd lin args via main into &lt;code>cond&lt;/code> with &lt;code>(or (= 0 (length args)) (= &amp;quot;-h&amp;quot; args) (= &amp;quot;help&amp;quot; args))&lt;/code> to output help, why don&amp;rsquo;t they trigger?
&lt;ul>
&lt;li>args are a list, so use &lt;code>;&lt;/code> like &lt;code>;args&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>how do you use &lt;code>if&lt;/code> in &lt;code>each&lt;/code> or &lt;code>loop&lt;/code> on a map, when it outputs nil at the end? &lt;code>(each a {:a 1 :b 2 :c 3} (if (= 1 a) &amp;quot;yes&amp;quot; &amp;quot;no&amp;quot;))&lt;/code>
&lt;ul>
&lt;li>&lt;code> (find |(string/has-prefix? &amp;quot;a&amp;quot; $) [&amp;quot;be&amp;quot; &amp;quot;cat&amp;quot; &amp;quot;art&amp;quot;])&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>How does image based development work? &lt;code>(load-image (slurp &amp;quot;test.jimage&amp;quot;))&lt;/code> &lt;em>shows&lt;/em> the image, but doesn&amp;rsquo;t bind the symbols etc. &lt;code>eval&lt;/code>, &lt;code>repl&lt;/code>, &lt;code>require&lt;/code>, &lt;code>(run-context :read (slurp &amp;quot;test.jimage&amp;quot;))&lt;/code>&amp;hellip; &lt;code>(fiber/setenv (fiber/current) (load-image (slurp &amp;quot;test.jimage&amp;quot;)))&lt;/code> is also a no.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-janet" data-lang="janet">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defn&lt;/span> restore-image [image]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d">loop&lt;/span> [[k v] &lt;span style="color:#ff966c">:pairs&lt;/span> source]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">put&lt;/span> (&lt;span style="color:#82aaff">curenv&lt;/span>) k v)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(restore-image (&lt;span style="color:#82aaff">load-image&lt;/span> (&lt;span style="color:#82aaff">slurp&lt;/span> &lt;span style="color:#c3e88d">&amp;#34;test.jimage&amp;#34;&lt;/span>)))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>
&lt;p>why does &lt;code>[1 2 3]&lt;/code> output &lt;code>(1 2 3)&lt;/code>? Are the &lt;a href="https://janet-lang.org/docs/data_structures/tuples.html">tuple docs&lt;/a> wrong?&lt;/p>
&lt;ul>
&lt;li>It seems like the docs are wrong, but it doesn&amp;rsquo;t matter.&lt;/li>
&lt;li>&amp;ldquo;The whole notion of tuple types seems a bit strange and it was just so we could have a little bit more syntactic variety and tuple constructor literals. Outside of things like the compilers and pretty printing, tuples of either type are considered equal. A bracket tuple will construct a parenthesized tuple, which should be considered the default.&amp;rdquo; - &lt;a href="https://github.com/janet-lang/janet/issues/679#issuecomment-817046447">Bakpakin&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>cond&lt;/code> vs. &lt;code>case&lt;/code>?&lt;/p>
&lt;ul>
&lt;li>use &lt;code>case&lt;/code> if the important value is like an enum (particular thing, state)&lt;code>otherwise&lt;/code>cond`.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>when&lt;/code> or &lt;code>if&lt;/code>?&lt;/p>
&lt;ul>
&lt;li>prefer &lt;code>when&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="libraries">Libraries&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://github.com/ahungry/ahungry-janet">https://github.com/ahungry/ahungry-janet&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://github.com/janet-lang/sqlite3">sqlite3&lt;/a> Sqlite bindings&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://github.com/andrewchambers/janet-pq">janet-pq&lt;/a> Postgres bindings&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://github.com/ahungry/janet-pobox">janet-pobox&lt;/a> - Clojure like atoms for concurrency&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://git.sr.ht/~pepe/kamilah">https://git.sr.ht/~pepe/kamilah&lt;/a> - occasionally marshals a table to disc, for data storage, easy&lt;/p>
&lt;/li>
&lt;li>
&lt;p>web&lt;/p>
&lt;ul>
&lt;li>spork http adds functionality to the std lib&amp;rsquo;s http (&lt;a href="https://github.com/janet-lang/circlet">circlet&lt;/a> hasn&amp;rsquo;t been updated in some time)
&lt;ul>
&lt;li>no https support&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://bagatto.co/">https://bagatto.co/&lt;/a> ssg&lt;/li>
&lt;li>&lt;a href="https://github.com/swlkr/janet-html">https://github.com/swlkr/janet-html&lt;/a> hiccup html&lt;/li>
&lt;li>&lt;a href="https://bakpakin.github.io/mendoza/">https://bakpakin.github.io/mendoza/&lt;/a> ssg&lt;/li>
&lt;li>&lt;a href="https://github.com/CosmicToast/jurl">https://github.com/CosmicToast/jurl&lt;/a> like curl for gets etc.&lt;/li>
&lt;li>&lt;a href="https://git.sr.ht/~pepe/chidi">https://git.sr.ht/~pepe/chidi&lt;/a> - api style sever&lt;/li>
&lt;li>&lt;a href="https://github.com/pyrmont/churlish">https://github.com/pyrmont/churlish&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/yumaikas/cartnet">https://github.com/yumaikas/cartnet&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/zevv/janetttls">https://github.com/zevv/janetttls&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/CFiggers/janet-libcurl">https://github.com/CFiggers/janet-libcurl&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/pyrmont/ecstatic">https://github.com/pyrmont/ecstatic&lt;/a> ssg&lt;/li>
&lt;li>&lt;a href="https://github.com/swlkr/speakeasy">https://github.com/swlkr/speakeasy&lt;/a> ssg&lt;/li>
&lt;li>&lt;a href="https://github.com/swlkr/stripe-janet">https://github.com/swlkr/stripe-janet&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/pyrmont/markable">https://github.com/pyrmont/markable&lt;/a> - markdown parsing&lt;/li>
&lt;li>&lt;a href="https://github.com/swlkr/sqlheavy">https://github.com/swlkr/sqlheavy&lt;/a> for crud&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/@swlkr_/search?query=janet">https://www.youtube.com/@swlkr_/search?query=janet&lt;/a> many videos!&lt;/li>
&lt;li>swlkr: &lt;a href="https://swlkr.com/posts">https://swlkr.com/posts&lt;/a>
&lt;ul>
&lt;li>Joy was hiss first framework, then trout which has less features (no DB, middleware) but less typing!&lt;/li>
&lt;li>&lt;a href="https://github.com/swlkr/askjanet">https://github.com/swlkr/askjanet&lt;/a> Q &amp;amp; A website explained here: &lt;a href="https://swlkr.com/posts/ask-janet">https://swlkr.com/posts/ask-janet&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/joy-framework/joy">https://github.com/joy-framework/joy&lt;/a>
&lt;ul>
&lt;li>joy has db and sql, http, password crypto, markdown, halo2 http server&lt;/li>
&lt;li>docs: &lt;a href="https://joy.swlkr.com/index.html">https://joy.swlkr.com/index.html&lt;/a>&lt;/li>
&lt;li>docs: &lt;a href="https://github.com/joy-framework/joy/blob/master/docs/introduction.md">https://github.com/joy-framework/joy/blob/master/docs/introduction.md&lt;/a>&lt;/li>
&lt;li>many of his videos are about developing it&lt;/li>
&lt;li>&lt;a href="https://swlkr.com/posts/joy-routes-as-functions/">https://swlkr.com/posts/joy-routes-as-functions/&lt;/a>&lt;/li>
&lt;li>&amp;ldquo;rapid development. What is the least amount of keystrokes I can make to get something up and running?&amp;rdquo;&lt;/li>
&lt;li>manifesto: &lt;a href="https://swlkr.com/posts/joys-manifesto/">https://swlkr.com/posts/joys-manifesto/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://github.com/swlkr/osprey">https://github.com/swlkr/osprey&lt;/a>
&lt;ul>
&lt;li>was trout before? &lt;a href="https://swlkr.com/posts/low-memory-websites/">https://swlkr.com/posts/low-memory-websites/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/swlkr/reddit-tiktok">https://github.com/swlkr/reddit-tiktok&lt;/a> example &lt;a href="https://swlkr.com/posts/reddit-tiktok/">https://swlkr.com/posts/reddit-tiktok/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&amp;ldquo;single file websites are the holy grail&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;sqlite is enough&amp;rdquo;&lt;/li>
&lt;li>Routes Actions Data not MVC &lt;a href="https://swlkr.com/posts/rad/">https://swlkr.com/posts/rad/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>data&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/pyrmont/medea">https://github.com/pyrmont/medea&lt;/a> - json&lt;/li>
&lt;li>&lt;a href="https://git.sr.ht/~pepe/manisha">https://git.sr.ht/~pepe/manisha&lt;/a>&lt;/li>
&lt;li>spork has &amp;ldquo;data&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>testing&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/sogaiu/janet-ex-as-tests">https://github.com/sogaiu/janet-ex-as-tests&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/sogaiu/janet-minipbt-translation">https://github.com/sogaiu/janet-minipbt-translation&lt;/a> - property-based / generative&lt;/li>
&lt;li>&lt;a href="https://github.com/ianthehenry/judge">https://github.com/ianthehenry/judge&lt;/a> - snapshots&lt;/li>
&lt;li>&lt;a href="https://github.com/pyrmont/testament">https://github.com/pyrmont/testament&lt;/a> - based on &lt;code>clojure.test&lt;/code>&lt;/li>
&lt;li>&lt;a href="https://github.com/ianthehenry/banquet">https://github.com/ianthehenry/banquet&lt;/a> - can visualize tables nicely for snapshots&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>TUI&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/CFiggers/cmd">https://github.com/CFiggers/cmd&lt;/a> - parse cmdlin args&lt;/li>
&lt;li>&lt;a href="https://github.com/pyrmont/argy-bargy">https://github.com/pyrmont/argy-bargy&lt;/a> arg parsing&lt;/li>
&lt;li>&lt;a href="https://git.sr.ht/~lucasemmoreira/janet-ncurses">https://git.sr.ht/~lucasemmoreira/janet-ncurses&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Alligator/jtermbox">https://github.com/Alligator/jtermbox&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/sepisoad/jtbox">https://github.com/sepisoad/jtbox&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://git.sr.ht/~nullevoid/jermbox">https://git.sr.ht/~nullevoid/jermbox&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://git.sr.ht/~pepe/gp/tree/master/item/cjanet/term.janet">https://git.sr.ht/~pepe/gp/tree/master/item/cjanet/term.janet&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://git.sr.ht/~pepe/gp/tree/master/item/gp/tui.janet">https://git.sr.ht/~pepe/gp/tree/master/item/gp/tui.janet&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>graphics/frontend&lt;/p>
&lt;ul>
&lt;li>gui &lt;a href="https://www.reddit.com/r/janetlang/comments/q3zxzf/janetui_false_start/">https://www.reddit.com/r/janetlang/comments/q3zxzf/janetui_false_start/&lt;/a>&lt;/li>
&lt;li>jaylib
&lt;ul>
&lt;li>a guide &lt;a href="https://web.archive.org/web/20220611193304/http://www.unexpected-vortices.com/janet/jaylib/jaylib-1.html">https://web.archive.org/web/20220611193304/http://www.unexpected-vortices.com/janet/jaylib/jaylib-1.html&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://github.com/janet-lang/janetui">janetui&lt;/a> Bindings to libui&lt;/li>
&lt;li>&lt;a href="https://github.com/MorganPeterson/jermbox">jermbox&lt;/a> Bindings to Termbox&lt;/li>
&lt;li>&lt;a href="https://github.com/janet-lang/webview">webview&lt;/a> Electron-like webview bindings.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>comp sci&lt;/p>
&lt;ul>
&lt;li>OOP &lt;a href="https://fugue.soy/">https://fugue.soy/&lt;/a>&lt;/li>
&lt;li>interesting documentation system &lt;a href="https://pantagruel-language.com/">https://pantagruel-language.com/&lt;/a>&lt;/li>
&lt;li>persistent DS &lt;a href="https://github.com/ianthehenry/jimmy">https://github.com/ianthehenry/jimmy&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></content:encoded></item><item><title>Macros</title><link>https://alexalejandre.com/notes/macros/</link><pubDate>Thu, 03 Jul 2025 10:37:47 -0400</pubDate><guid>https://alexalejandre.com/notes/macros/</guid><description>Common Lisp, Scheme, Clojure, Janet all handle macros different. Who&amp;rsquo;s right?</description><content:encoded>&lt;h3 id="janet">Janet&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-clojure" data-lang="clojure">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">defmacro &lt;/span>do-texture [texture &lt;span style="color:#c3e88d;font-weight:bold">&amp;amp;&lt;/span> forms]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">~&lt;/span>(&lt;span style="color:#82aaff">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (,begin-texture-mode ,texture)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ,&lt;span style="color:#444a73;font-style:italic">;forms&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (,end-texture-mode)))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can simply &lt;em>unquote&lt;/em> functions so the macro expands the compile time scope&amp;rsquo;s func instead of the runtime scope. This elides the issues between hygienic and unhygienic funcs (e.g. using this macro in a context where end-texture-mode had been defined elsewise).&lt;/p>
&lt;ul>
&lt;li>early lisps had dynamic scoping, so macros and funcs behave the same&lt;/li>
&lt;li>newer lisps had lexical scoping (for funcs), while macros still used dynamic scoping&lt;/li>
&lt;/ul>
&lt;p>In Clojure, backquote fully-qualifies all symbols by default with the namespace in which the intended function is found, so while it’s possible to use this technique, it’s a solution for a problem that doesn’t exist.&lt;/p>
&lt;p>Lisp 2 version:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-lisp" data-lang="lisp">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c3e88d">defmacro&lt;/span> do-texture [texture &amp;amp; forms]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">`&lt;/span>(&lt;span style="color:#c3e88d">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">funcall&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>&lt;span style="color:#82aaff">#&amp;#39;&lt;/span>begin-texture-mode &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>texture)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">,@&lt;/span>forms
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">funcall&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>&lt;span style="color:#82aaff">#&amp;#39;&lt;/span>end-texture-mode)))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Somehow, this is unidiomatic in CL, yet it works!&lt;/p>
&lt;blockquote>
&lt;p>If you’re concerned about a macro being called in an environment where a function it needs might be locally redefined, the best solution is probably to put your code in a distinct package. - On Lisp - Paul Graham&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Macros expand into an expression that is composed of symbols that have no attached semantics. When substituted back into the program, a macro expansion could conceivably take on quite surprising meaning depending on the local environment.&lt;/p>
&lt;p>writers of macros often work on the hypothesis that additional functional variables may be referenced in macros as if they were globally constant&lt;/p>
&lt;p>&lt;code>(DEFMACRO MAKE-FOO (THINGS) &lt;/code>(LIST &amp;lsquo;FOO ,THINGS))`&lt;/p>
&lt;p>The writer of this macro definition is almost certainly assuming either that &lt;code>LIST&lt;/code> is locally bound in the calling environment and is trying to refer to that locally bound name or that list is to be treated as constant and that the author of the code will not locally bind &lt;code>LIST&lt;/code>. In practice, the latter assumption is almost always made.&lt;/p>
&lt;p>a strict reading of the Common Lisp specification seems to imply that writing the following should be acceptable:&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-lisp" data-lang="lisp">&lt;span style="display:flex;">&lt;span>(DEFMACRO FOO (X Y) &lt;span style="color:#444a73;font-style:italic">;take deep breath&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">`&lt;/span>(FUNCALL &lt;span style="color:#c3e88d">&amp;#39;,#&amp;#39;CONS&lt;/span> &lt;span style="color:#c3e88d">&amp;#39;FOO&lt;/span> (FUNCALL &lt;span style="color:#c3e88d">&amp;#39;,#&amp;#39;CONS&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>X (FUNCALL &lt;span style="color:#c3e88d">&amp;#39;,#&amp;#39;CONS&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>Y &lt;span style="color:#ff966c">NIL&lt;/span>))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(DEFUN BAZ (X Y)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (FLET ((CONS (X Y) (CONS Y X)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (FOO X Y)))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>Technical Issues of Separation in Function Cells and Value Cells - Richard Gabriel, Kent Pitman&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>in an ahead of time compiler supporting cross compilation, this trick doesnt work. The runtime value could be architecture dependent, for example macros with procedures modifying state. In an interpreter or compiled ahead of time&amp;hellip; Read: &lt;a href="http://www.phyast.pitt.edu/~micheles/scheme/scheme22.html">http://www.phyast.pitt.edu/~micheles/scheme/scheme22.html&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>in a Lisp-1, you either automatically unquote to fully-qualified symbols (as Clojure does), which sidesteps the problem for 90%, or you don’t expand to “bare” symbol. Scheme treats all symbols like gensym.&lt;/p>&lt;/blockquote>
&lt;p>Explicit renaming macro, where &lt;code>rename&lt;/code> takes a bare symbol and constructs a unique one on the fly (resolving to what the bare symbol resolved to at macro definition), which &lt;code>syntax-case&lt;/code> or &lt;code>syntax-rules&lt;/code> do automatically:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-scheme" data-lang="scheme">&lt;span style="display:flex;">&lt;span>(&lt;span style="color:#c099ff">define-syntax &lt;/span>foo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">er-macro-transformer&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">lambda &lt;/span>(&lt;span style="color:#82aaff">expr&lt;/span> rename compare)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c099ff">let &lt;/span>((&lt;span style="color:#82aaff">%x&lt;/span> (&lt;span style="color:#82aaff">rename&lt;/span> &lt;span style="color:#c3e88d">&amp;#39;x&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">%let&lt;/span> (&lt;span style="color:#82aaff">rename&lt;/span> &lt;span style="color:#c3e88d">&amp;#39;let&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">%+&lt;/span> (&lt;span style="color:#82aaff">rthename&lt;/span> &lt;span style="color:#c3e88d">&amp;#39;+&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#82aaff">arg&lt;/span> (&lt;span style="color:#c3e88d">cadr &lt;/span>expr)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d;font-weight:bold">`&lt;/span>(&lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>%let ((&lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>%x &lt;span style="color:#ffc777">1&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>%+ &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>%x &lt;span style="color:#c3e88d;font-weight:bold">,&lt;/span>arg))))))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>equality saturation (&lt;a href="https://egraphs-good.github.io/">https://egraphs-good.github.io/&lt;/a>) might be the missing piece that allows generalized macros to compose. A macro implemented with equality saturation could see every expansion step of its neighbors and rewrite based on the specific one(s) it’s looking for.&lt;/p>
&lt;p>When writing macros within Scheme’s &lt;code>syntax-case&lt;/code> model, they’re expressed as case-style pattern-matchers over syntax-objects (which themselves appear ideal for translation into e-nodes). In that context, I would posit that optimal extractions from saturated graphs are those which fulfill the earliest possible matches. Hence a match on a left-most &lt;code>set&lt;/code> literal would 1) take precedence over the no-match case, 2) can be applied after the test macro expands, and 3) could maybe even propogate transformations of sub-nodes into equivalent expansions where those literals have been eliminated (or not yet expanded into being).&lt;/p>
&lt;p>Implementing such a system would be difficult (let alone in Janet without an existing &lt;code>syntax-case&lt;/code> to fork), and although I think it addresses the settable example as-given, it’s a rough model. There are still ambiguous cases where one would presumably fall-back into depth-first expansion.&lt;/p>
&lt;p>The biggest problem is with that 3rd part, which is kinda out-there. Macros are effectively expansions of their parent expressions, so they can’t actually contribute transformations of themselves or their sibling arguments that are seperable from those parent expansions. Putting that aside (maybe by annotating with source syntax objects / equiv. e-nodes when preserving the transformation would be valid), it would feel kinda cursed to allow a match on a literal which might only exist in superposition&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;p>Is Janet&amp;rsquo;s approach of unqoting the symbol better than hygienic macros?&lt;/p>
&lt;blockquote>
&lt;p>The discursion on macros is interesting reading: &lt;a href="https://ianthehenry.com/posts/janet-game/the-problem-with-macros/">https://ianthehenry.com/posts/janet-game/the-problem-with-ma&amp;hellip;&lt;/a>. But it stops at Scheme’s hygienic macros, which address the very problem raised at the beginning of the discussion, in more or less the way Janet seems to work: &lt;a href="https://legacy.cs.indiana.edu/ftp/techreports/TR356.pdf">https://legacy.cs.indiana.edu/ftp/techreports/TR356.pdf&lt;/a> (page 4).&lt;/p>
&lt;p>The issue is not so much that macros are not merely syntactic transformations, but rather than s-expressions alone aren’t sufficiently expressive to represent the syntax of any Lisp with a package system. The scheme macro system solves that by having macros return syntax objects where identifiers used in a macro can carry around a reference to the original context where the macro was defined. So referencing a function in a macro definition will look up the function in the context of where the macro is defined, and return a syntax object that refers to the correct function. To my knowledge, most modern macro systems work this way (Scheme, Dylan, etc.)&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Most of the need for hygienic macros goes away if you have a compiler (or macro expander) that warns about shadowing.&lt;/p>
&lt;p>Code has to go out of its way to do something silly, like reference a variable which it does not define; and by coincidence this has to be defined by a macro that is used in the same scope (so that it simultaneously evades unbound variable and shadowing diagnosis).&lt;/p>
&lt;p>Hygienic macros do not solve accidental name capture in code that contains no macros. Manually written code can contain a mistake of reference due to variable shadowing, creating a bug.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Janet&amp;rsquo;s approach seems a little strange to me in that it&amp;rsquo;s opt-in rather than opt-out. In CL or Clojure, you just normally can&amp;rsquo;t have this issue due to the package or namespace system (e.g. you have to go out of your way to define an anaphoric macro that will work anywhere). Clojure doesn&amp;rsquo;t have a separate function namespace either, but since backquote will automatically qualify symbols with their ns unless you opt out, you don&amp;rsquo;t need to use any strange (at least to me) unquoting approach.&lt;/p>
&lt;p>The &amp;ldquo;separate package&amp;rdquo; issue is really a non-issue, especially in Clojure where you have a different namespace for every file. Some people prefer a separate package for every file in CL, but even with one-package-per-project, you only have to worry about your own code. Anyone redefining functions outside your package isn&amp;rsquo;t going to cause any problems with your macros.&lt;/p>&lt;/blockquote></content:encoded></item><item><title>Future of Scheme</title><link>https://alexalejandre.com/notes/future-of-scheme/</link><pubDate>Thu, 03 Jul 2025 10:13:52 -0400</pubDate><guid>https://alexalejandre.com/notes/future-of-scheme/</guid><description>&lt;h3 id="best-implementations-in-2025">Best implementations in 2025&lt;/h3>
&lt;p>These are all batteries-included with little care for standards:&lt;/p></description><content:encoded>&lt;h3 id="best-implementations-in-2025">Best implementations in 2025&lt;/h3>
&lt;p>These are all batteries-included with little care for standards:&lt;/p>
&lt;ul>
&lt;li>Racket&lt;/li>
&lt;li>Guile&lt;/li>
&lt;li>&lt;a href="https://cons.io/">Gerbil&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>More exotic, modern lisps are also quite tempting:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/naver/lispe">LispE&lt;/a>&lt;/li>
&lt;li>Fennel&lt;/li>
&lt;li>Janet&lt;/li>
&lt;li>&lt;a href="https://shenlanguage.org">Shen&lt;/a> (via CL port)&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="https://ecraven.github.io/r7rs-benchmarks/">https://ecraven.github.io/r7rs-benchmarks/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://github.com/ar-nelson/schemepunk">https://github.com/ar-nelson/schemepunk&lt;/a> has r7rs libraries&lt;/p>
&lt;h3 id="on-r7rs-large-or-even-r8rs">On r7rs large or even r8rs&lt;/h3>
&lt;p>&lt;a href="https://www.gnu.org/software/guile/manual/html_node/Guile-and-Scheme.html">https://www.gnu.org/software/guile/manual/html_node/Guile-and-Scheme.html&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>With R6RS and R7RS, the unified Scheme standardization process appears to have more or less run its course.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>for future directions, Guile takes inspiration from other related language communities: Racket, Clojure, Concurrent ML&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>we recommend using the parts of Guile that are useful in solving the problem at hand, regardless of whether they proceed from a standard or whether they are Guile-specific.&lt;/p>&lt;/blockquote>
&lt;p>From #scheme:&lt;/p>
&lt;p>03:31:24 PM - wingo: guile&amp;rsquo;s r7rs implementation should be fine. it is not a main focus however. most people that write scheme programs tend to target one implementation. targetting a standard is possible but not the easiest thing to do
03:32:04 PM - wingo: my pov is &lt;a href="http://wingolog.org/archives/2013/01/07/an-opinionated-guide-to-scheme-implementations">http://wingolog.org/archives/2013/01/07/an-opinionated-guide-to-scheme-implementations&lt;/a>, see the &amp;ldquo;you and your scheme&amp;rdquo; section&lt;/p></content:encoded></item><item><title>Asearch For</title><link>https://alexalejandre.com/notes/asearch-for/</link><pubDate>Wed, 25 Jun 2025 23:04:49 -0400</pubDate><guid>https://alexalejandre.com/notes/asearch-for/</guid><description>&lt;p>???&lt;br>
Since curiosity first cried&lt;br>
I&amp;rsquo;ve sought without end hope, grief-sick&lt;br>
I spied th&amp;rsquo;infinite, soared mong the platonic spheres and reached heaven&lt;br>
Alas, a prisoner of my fate, my mortal being&lt;/p></description><content:encoded>&lt;p>???&lt;br>
Since curiosity first cried&lt;br>
I&amp;rsquo;ve sought without end hope, grief-sick&lt;br>
I spied th&amp;rsquo;infinite, soared mong the platonic spheres and reached heaven&lt;br>
Alas, a prisoner of my fate, my mortal being&lt;/p>
&lt;p>I devoured the grimoires Seibel, Norvig gave,&lt;br>
Kane&amp;rsquo;s nephew, Sussmen pressed deep wisdom&amp;rsquo;s flame ; SICP, Steele = &amp;ldquo;great Quux&amp;rdquo;&lt;br>
Into my soul, the Great Work held me slave&lt;br>
To John&amp;rsquo;s heresy, my mortal frame&amp;rsquo;s still lame.&lt;/p>
&lt;p>I saw my symbols shrink to mold arrays&lt;br>
And convened with Whitney, Iverson and Hui,&lt;br>
Learned types with Haskell, Plan9 th&amp;rsquo;OS bewrayed,&lt;br>
Yet from these peaks glimpse but far more, a sea.&lt;/p>
&lt;p>I was at Mohasco when Moore th&amp;rsquo;angels heard,&lt;br>
I saw the miracles in Charlottesville, ; NRAO&lt;br>
Hofacker, Brodie kept the embers&amp;rsquo; words ; Forth on the Atari, Thinking Forth&lt;br>
Yet I wallow lost, creation&amp;rsquo;s vaster &amp;rsquo;n m&amp;rsquo; will.&lt;/p>
&lt;p>I probed the mighty Bay, wizards d&amp;rsquo;esprit&lt;br>
The warring unicorns and moonshot seats,&lt;br>
I witnessed MIT and NYC&lt;br>
And know the hollow sorrow of their feats.&lt;/p>
&lt;p>I climbed rocks, worked wood, read Slatestarcdoex fane,&lt;br>
Gleaned truth with Eastern Europe&amp;rsquo;s catvatars,&lt;br>
Debated AI with EA&amp;rsquo;s phrophets fain,&lt;br>
Yet find we&amp;rsquo;re all the same, meek kids and tsars.&lt;/p>
&lt;p>I suffered under project managers,&lt;br>
Hypedriven CEOs&amp;rsquo; base/blind buzzword bloat,&lt;br>
Shareholders fickle, VCs, shorttermist currs,&lt;br>
Yet still burn to transcend this flesh devote.&lt;/p>
&lt;p>My mind overflows, while my soul sheds tears&lt;br>
My body&amp;rsquo;s aged, while my heart cries, suckles,&lt;br>
Ken sates not, heaven lies beyond wise years,&lt;br>
Knowledge won&amp;rsquo;t sate, heaven&amp;rsquo;s b&amp;rsquo;yond wise years, ?&lt;br>
Yet I wrestled, grew and lived, ? ? ? ? ; God was the suck.&lt;/p>
&lt;p>I PCAd my soul and found&lt;br>
That there was difference at the ground,&lt;br>
I put my soul through FFT&lt;br>
And found my immortality. ; from Leopold Haller&lt;/p>
&lt;p>Why do i seek to learn more, knowing i&amp;rsquo;ll never reach heaven through knowledge (Trasncend the sublime fabric of our reality to perceive the code, structures, abstractions beyond beneath)
To grow old and overcome my drive, to thank the world for the journey, to see god was everywhere, the complexity and insight between the struggles&lt;/p></content:encoded></item><item><title>Which Language Has the Most Words</title><link>https://alexalejandre.com/languages/which-language-has-the-most-words/</link><pubDate>Sat, 21 Jun 2025 12:18:39 -0400</pubDate><guid>https://alexalejandre.com/languages/which-language-has-the-most-words/</guid><description>How many words do we have with wave, waves, wavey, wavelet and wavelets? Might Webster or Johnson have built a different tradition of dictionary making?</description><content:encoded>&lt;p>&lt;a href="https://ititranslates.com/which-language-is-richest-in-words/">Which Language Is Richest In Words?&lt;/a>&lt;/p>
&lt;p>Such claims rest on poor methodology. I will keep to the poor methodology and rely on unproven patterns (because we only have 5000 years of data in the best cases).&lt;/p>
&lt;p>(Many) languages seem to evolve in a circular pattern where vowels disappear, increasing the proportion of consonants. Something like &amp;ldquo;vuh-kuh&amp;rdquo; turned into Russian волк and even Czech vlk.&lt;/p>
&lt;p>Eventually many of those consonants disappear, so people attach more to the end to solve homophones. Mandarin words for things are now generally at least 2 syllables long, although their roots used to be individual roots. Compare boy, bow, buy, which have the same &amp;ldquo;baw&amp;rdquo; sound then another sound after. In Mandarin, most final consonants were lost, so they all sound the same. As a result they started to clarify like little baw, fight baw, money baw etc.&lt;/p>
&lt;p>We are not sure why sound changes happen at different speeds in various situations or sometimes so strongly and utterly like in English&amp;rsquo; &lt;a href="https://en.wikipedia.org/wiki/Great_Vowel_Shift">great vowel shift&lt;/a>.&lt;/p>
&lt;p>These changes impact grammatical and lexical meaning carried through lost sounds (but sometimes they remain). So where German can turn most verbs into a noun with -ung, many with Ge- (Gebirge) etc&amp;hellip; or Romance languages with -tion, in English we are at a stage where we often use the same form (lie -&amp;gt; lie) or change the stress (they procéss -&amp;gt; a prócess) not a processing nor a processtion (procession is from proceed!) -let like piglet, wavelet, booklet is no longer expected and each use finds its way into the dictionary! Yet in the past, English had many more methods of building words, mostly lost like &lt;a href="https://en.wiktionary.org/wiki/-t#Etymology_3">-t&lt;/a> like drive -&amp;gt; drift, see -&amp;gt; sight, thrive -&amp;gt; thrift or &lt;a href="https://en.wiktionary.org/wiki/-k">-k&lt;/a> like stale -&amp;gt; stalk, tale-&amp;gt;talk etc. Arabic&amp;rsquo;s been frozen at a point where it can derive &lt;a href="https://en.wiktionary.org/wiki/Appendix:Arabic_roots/%D9%83_%D8%AA_%D8%A8">a few dozen&lt;/a> separate meanings from a single root. But in some languages the numbers of roots are higher. A good dictionary will only show &lt;em>unexpected&lt;/em> meanings, so a root could produce library, desk, write, correspond, document, but only have 1 entry because those are expected forms of its &lt;a href="https://en.wikipedia.org/wiki/Lexeme">lexeme&lt;/a> just like write and writes are expected forms and not separate &amp;ldquo;words&amp;rdquo;. Theoretically, the total number of concepts suspended would stay the same, in isolation. They would just be encoded with different levels of systematization. We have somewhere, somehow, but not somewhy nor somewhen. Other language&amp;rsquo;s can be more or less consistent, &lt;a href="https://en.wikibooks.org/wiki/Esperanto/Appendix/Table_of_correlatives">Esperanto&lt;/a> artificially systematizing the whole series. With increasing inventions and changing lives, many no longer know what a harrow is because we think about and describe other items.&lt;/p>
&lt;p>But this &amp;ldquo;natural&amp;rdquo; process is blocked by modern techniques like mass literacy and the printing press or religious focus on a specific writing of a book (as with Classical Arabic, as all Romance speakers still wrote in Latin). Mass education did even more. These allow old roots to stay around longer, vocabularies really grow, both for the average person and the scientist discovering and describing more, creating novel terms!&lt;/p>
&lt;p>But it&amp;rsquo;s easy enough to go through another language&amp;rsquo;s dictionary and make Hungarian versions of everything. That&amp;rsquo;s how most languages were modernized during 19th century nationalism in Europe and Asia. Translators of scientific documents may coin even newer words etc. But most people do not know them. I don&amp;rsquo;t know all the bones of the body, various tissues or really &amp;hellip;biology. I do not know fancy woodworking terminology nor native English plants from our ancestral homeland, various brandles and burndlebushesand eeroughberries and what have you.&lt;/p>
&lt;p>Holding uncouth, unnumbered unwords like amniocentesis as English vocabulary to call it richer is but a tawdry lie. (Indeed, the artificial medical vocabulary is a &lt;a href="https://en.wikipedia.org/wiki/List_of_medical_roots,_suffixes_and_prefixes">shared system&lt;/a> used by many languages, with consistent prefixes, roots and suffixes.) While it is good and noble, that English speakers ventured around the world and named its bounties and wonders, perhaps a more interesting metric is how many given groups of speakers now, how many are used in day to day communication or literature etc.&lt;/p></content:encoded></item><item><title>On Meaning and Life</title><link>https://alexalejandre.com/notes/on-meaning-and-life/</link><pubDate>Mon, 16 Jun 2025 21:18:59 -0400</pubDate><guid>https://alexalejandre.com/notes/on-meaning-and-life/</guid><description>Self-sovereignty or Nietzsches Wille zur Macht, the need for freedom is a moral good.</description><content:encoded>&lt;p>On &lt;a href="https://lukesmith.xyz/articles/modern-freedom-means-being-a-slave-to-impulses/">freedom&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>It&amp;rsquo;s far better to strive and create than to passively survive. For society, sure, but also better for you as a person. There are forms of joy that aren&amp;rsquo;t available to someone just existing.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>&amp;ldquo;The real thing&amp;rdquo; is a more complex concept than many people appreciate, and a lot of it happens inside the skull and is heavily mediated by that skull&amp;rsquo;s other contents. It is definitely possible to get to a place where &amp;ldquo;the fake thing&amp;rdquo; appears to be strictly superior; general gooner behavior is more or less a superhighway directly to this state. Further, this general pattern generalizes to most of the other pleasures of human existence.&lt;/p>
&lt;p>The greatest source of joy in my life by far is my eldest child. Interacting with them, reading to them, the joy they radiate whenever they see me in the morning or when waking from a nap, cuddling with them and singing them to sleep at night are profoundly wonderful experiences that I would not trade for anything. But I remember quite well being quite determined to never have children, because they obviously interfered with all the &amp;ldquo;fun&amp;rdquo; I wanted to have playing video games and pursuing various hobbies. I do not think there are words present-Me could say to past-Me to convince them of their error; they thought the way they did because their mind was shaped by their circumstances and experiences, and only a change in circumstances and experiences could deliver a change of mind.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>One thought I&amp;rsquo;ve had is for alcohol or drug addicts or really anyone, is there a convincing rationalist answer for why people should quit or not use destructive drugs?&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>If one&amp;rsquo;s moral framework is entirely built around one&amp;rsquo;s own pleasure and benefit (or limbic gratification as you say), then sure, none of the above matter and anything I say will fall on deaf ears. There&amp;rsquo;s no logical argument I can provide to convince you that I&amp;rsquo;m right. But frankly, not calling your parents or raising your children or treating your wife well or reading books or staying fit is, for lack of a better term, a bitch move, no? At the risk of typical-minding after already admitting I&amp;rsquo;m weird, I think nearly every man has this urge or understands what I mean when I say that.&lt;/p>&lt;/blockquote></content:encoded></item><item><title>China's Economy</title><link>https://alexalejandre.com/notes/chinas-economy/</link><pubDate>Mon, 16 Jun 2025 15:37:38 -0400</pubDate><guid>https://alexalejandre.com/notes/chinas-economy/</guid><description>Will the 21st Century be China&amp;rsquo;s?</description><content:encoded>&lt;h3 id="comparing-the-incomparable">Comparing the Incomparable&lt;/h3>
&lt;blockquote>
&lt;p>The capital stock/flow of Americans companies is about 10&amp;ndash;20 years, but the stock/flow of China is about 5 years. - &lt;a href="https://x.com/layer07_yuxi/status/1933030758328971474">Yuxi on the Wired&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Comparing stock market cap to capital stock: Microsoft, Apple, Nvidia have market caps around 3 trillion and revenues from 150-400 billion. China has 100 trillion in capital stock for a 20 trillion GDP. The US has 70 trillion capital stock for a 30 trillion GDP.&lt;/p>
&lt;p>But GDP can&amp;rsquo;t be compared to cashflow (indeed, what would national FCF be?) China and the US&amp;rsquo; GDPs can&amp;rsquo;t be compared either; the US includes plenty of services China doesn&amp;rsquo;t and massive imputed rent.&lt;/p></content:encoded></item><item><title>PostScript</title><link>https://alexalejandre.com/notes/postscript/</link><pubDate>Mon, 16 Jun 2025 14:03:21 -0400</pubDate><guid>https://alexalejandre.com/notes/postscript/</guid><description>PostScript is fascinating concatenative language of great power, used in PDFs of all things!</description><content:encoded>&lt;p>While researching formal methods, I found NASA&amp;rsquo;s &lt;a href="https://github.com/nasa/pvslib">PVS&lt;/a> libraries which are half written in Common Lisp. I was intrigued by the third in PostScript, a language I&amp;rsquo;d never heard of&amp;hellip;&lt;/p>
&lt;p>For sure, I thought, that must be a tool of arcane, darkling power (and not just used to display PDFs.) Indeed, it is an exotic concatenative language with lispy data structures, a GC and strong dynamic typing (though only for built ins.)&lt;/p>
&lt;h3 id="materials">Materials&lt;/h3>
&lt;p>Reference manual &lt;a href="https://www.adobe.com/jp/print/postscript/pdfs/PLRM.pdf">red book&lt;/a> has 500 pages of code examples and explanations before the actual reference material!&lt;/p>
&lt;p>tutorial and cookbook or &lt;a href="https://archive.org/details/PSBlueBook/page/n1/mode/2up">blue book)&lt;/a>&lt;/p>
&lt;p>Postscript language program design &lt;a href="https://archive.org/details/PSGreenBook/mode/2up">green book&lt;/a>&lt;/p></content:encoded></item><item><title>Ontology</title><link>https://alexalejandre.com/notes/ontology/</link><pubDate>Sun, 15 Jun 2025 12:36:09 -0400</pubDate><guid>https://alexalejandre.com/notes/ontology/</guid><description>Semantic Web, RDFs, triple stores&amp;hellip;</description><content:encoded>&lt;h3 id="con">Con&lt;/h3>
&lt;blockquote>
&lt;p>Designing models independently from how they will be used sounds like a recipe for disaster. The idea that concepts like ‘actor’ or ‘movie’ have universal descriptions independent from how the concepts are utilized seems deeply flawed to me.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://plato.stanford.edu/entries/wittgenstein/#MeanUse">https://plato.stanford.edu/entries/wittgenstein/#MeanUse&lt;/a>&lt;/p>
&lt;h3 id="examples">Examples&lt;/h3>
&lt;p>&lt;a href="https://netflixtechblog.com/uda-unified-data-architecture-6a6aee261d8d">https://netflixtechblog.com/uda-unified-data-architecture-6a6aee261d8d&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://github.com/CategoricalData/hydra">https://github.com/CategoricalData/hydra&lt;/a> done by Joshua after &lt;a href="https://www.uber.com/blog/dragon-schema-integration-at-uber-scale/">https://www.uber.com/blog/dragon-schema-integration-at-uber-scale/&lt;/a>&lt;/p>
&lt;h3 id="pro">Pro&lt;/h3>
&lt;blockquote>
&lt;p>It&amp;rsquo;s been so long since the Semantic web and RDF and OWL and SKOS. I&amp;rsquo;m so glad they stuck with W3C and didn&amp;rsquo;t reinvent those wheels. Will this UDA approach catch on? I don&amp;rsquo;t know, but I hope so. It seems like it is trying to move the frontier of the difficulties of applying Domain Driven Design and semantic concepts to an enterprise company of significant scale.&lt;/p>
&lt;p>If we can get compound interest across development teams by giving them a common toolset and skillset that covers different applications but the same data semantics, maybe not every data contract will have to be reduced to DTOs that can be POSTed or otherwise forced to be a least common denominator just so it can fit past a network or other IPC barrier.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://berezovskyi.me/">https://berezovskyi.me/&lt;/a> is a fount of knowledge and passion&lt;/p>
&lt;p>I hope this or a similar initiative will go big, because the real benefits of such approaches only materialize when you need to connect more than 3 systems with differing information models but also when there is enough uptake in the market and tools come with such APIs out of the box. For example, OSLC (disclosure: I am involved with the project), gets attention when someone tries to connect IBM Jazz and Siemens Polarion that come with OSLC out of the box - there is far less interest to go and create OSLC APIs yourself for systems/tools you wish to integrate even for cases where the benefits are present in the same way as for Jazz/Polarion.&lt;/p>
&lt;blockquote>
&lt;blockquote>
&lt;p>Upper is the metamodel for Connected Data in UDA — the model for all models. It is designed as a bootstrapping upper ontology, which means that Upper is self-referencing, because it models itself as a domain model; self-describing, because it defines the very concept of a domain model; and self-validating, because it conforms to its own model.&lt;/p>&lt;/blockquote>
&lt;p>Are we certain this means something?&lt;/p>&lt;/blockquote>
&lt;p>I am somewhat certain it does. BFO &lt;a href="https://direct.mit.edu/books/monograph/4044/Building-Ontologies-with-Basic-Formal-Ontology">book&lt;/a> or &lt;a href="https://www.youtube.com/watch?v=GWkk5AfRCpM">lecture&lt;/a> may need to be consumed and understood before this fully makes sense, unfortunately. Upper ontologies are quite useful to help prevent grave information modelling mistakes (cf. BFO’s dependents vs continuants). This is somewhat helpful only if you decide to forego ontological nominalism (“these things will be called ducks because I said so”) and instead adopt ontological realism (“these things look similar and quack, therefore we will call them ducks”).&lt;/p>
&lt;p>I, however, have two nits about the statement you highlighted:&lt;/p>
&lt;ol>
&lt;li>RDF itself is homoiconic, because models of RDF data are themselves RDF (in a similar way to Lisp). To see an example, compare a model in Section 4 with the actual data in Section 2.1 in the &lt;a href="https://www.w3.org/TR/rdf12-primer/#section-triple">RDF Primer&lt;/a>. In other words, you can start using RDF today and get some of those properties from day one.&lt;/li>
&lt;li>At some level (deep enough - and upper ontology is the last stop), recursive/self-referencing definitions are actually undesired because you are trying to avoid logical errors (fallacies) such as circular reasoning.&lt;/li>
&lt;li>Finally, upper ontologies are very easy to bungle and they should be left to people with a Ph.D. in philosophy. There are excellent UOs out there (BFO is my pick, also see DOLCE Ultralite, possibly SUMO) and you should just use one (i.e. define your own classes as subclasses of UO terms etc.). Defining your own UO is like saying that you didn’t like the stdlib of a language and wrote your own. Furthermore, Upper does not seem like a real upper ontology, as it defines quite applied concepts (the idea of an upper ontology is to be above anything applied).&lt;/li>
&lt;/ol>
&lt;p>At the same time, I hope this gains momentum and maybe Netflix merges/aligns Upper with at least schema.org (popular for webpage metadata) or ISO/CD 23726-3 Industrial Data Ontology (quite popular in Oil&amp;amp;Gas).&lt;/p>
&lt;p>P.S. While we are on the topic of things that might or might not mean anything at all - my favourites are atomless &lt;a href="https://en.wikipedia.org/wiki/Glossary_of_mereology#gunk">gunk&lt;/a> and worldless junk. Are they real? We might never know.&lt;/p>
&lt;p>Below are some links for extra reading from my favorites.&lt;/p>
&lt;p>High-level overview:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://www.w3.org/DesignIssues/LinkedData.html">https://www.w3.org/DesignIssues/LinkedData.html&lt;/a> from TimBL&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.w3.org/DesignIssues/ReadWriteLinkedData.html">https://www.w3.org/DesignIssues/ReadWriteLinkedData.html&lt;/a> from TimBL&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.w3.org/DesignIssues/Footprints.html">https://www.w3.org/DesignIssues/Footprints.html&lt;/a> from TimBL&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Similar recent attempts:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://www.uber.com/en-SE/blog/dragon-schema-integration-at-uber-scale/">https://www.uber.com/en-SE/blog/dragon-schema-integration-at&amp;hellip;&lt;/a> an attempt in the similar direction at Uber&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.slideshare.net/joshsh/transpilers-gone-wild-introducing-hydra">https://www.slideshare.net/joshsh/transpilers-gone-wild-intr&amp;hellip;&lt;/a> continuation of the Uber Dragon effort at LinkedIn&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.palantir.com/docs/foundry/ontology/overview/">https://www.palantir.com/docs/foundry/ontology/overview/&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Standards and specs in support of such architectures:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="http://www.lotico.com/index.php/Next_Generation_RDF_and_SPARQL">http://www.lotico.com/index.php/Next_Generation_RDF_and_SPAR&amp;hellip;&lt;/a> (RDF is the only standard in the world for graph data that is widely used; combining graph API responses from N endpoints is a straightforward graph union vs N-way graph merge for JSON/XML/other tree-based formats). Also see &lt;a href="https://w3id.org/jelly/jelly-jvm/">https://w3id.org/jelly/jelly-jvm/&lt;/a> if you are looking for a binary RDF serialization.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.w3.org/TR/shacl/">https://www.w3.org/TR/shacl/&lt;/a> (needs tooling, see above)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.odata.org/">https://www.odata.org/&lt;/a> (in theory has means to reuse definitions, does not seem to work in practice)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.w3.org/TR/ldp/">https://www.w3.org/TR/ldp/&lt;/a> (great foundation, too few features - some specs like paging never reached Recommendation status)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://open-services.net/">https://open-services.net/&lt;/a> (builds atop W3C LDP; full disclosure: I&amp;rsquo;m involved in this one)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.w3.org/ns/hydra/">https://www.w3.org/ns/hydra/&lt;/a> (focus on describing arbitrary affordances; not related to LinkedIn Hydra in any way)&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Upper models:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://basic-formal-ontology.org/">https://basic-formal-ontology.org/&lt;/a> - the gold standard. See &lt;a href="https://www.youtube.com/watch?v=GWkk5AfRCpM">https://www.youtube.com/watch?v=GWkk5AfRCpM&lt;/a> for the tutorial&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.iso.org/standard/87560.html">https://www.iso.org/standard/87560.html&lt;/a> - Industrial Data Ontology. There is a lot of activity around this one, but I lean towards BFO. See &lt;a href="https://rds.posccaesar.org/WD_IDO.pdf">https://rds.posccaesar.org/WD_IDO.pdf&lt;/a> for the unpaywalled draft and &lt;a href="https://www.youtube.com/watch?v=uyjnJLGa4zI&amp;amp;list=PLr0AcmG4OlO05e_LBubKr4EVtDbkC1qic&amp;amp;index=6">https://www.youtube.com/watch?v=uyjnJLGa4zI&amp;amp;list=PLr0AcmG4Ol&amp;hellip;&lt;/a> for the videos&lt;/p>
&lt;/li>
&lt;/ul></content:encoded></item><item><title>Languages and Power</title><link>https://alexalejandre.com/notes/languages-and-power/</link><pubDate>Sat, 14 Jun 2025 00:17:27 -0400</pubDate><guid>https://alexalejandre.com/notes/languages-and-power/</guid><description>How does brevity relate to a language&amp;rsquo;s power? What else matters?</description><content:encoded>&lt;p>In response to: &lt;a href="https://ratfactor.com/cards/pl-small">https://ratfactor.com/cards/pl-small&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>brevity is the soul of wit - Shakespeare&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>…​the length of a shortest computer program (in a predetermined programming language) that produces the object as output&lt;/p>&lt;/blockquote>
&lt;p>My white whale is the most compressed/compressible program. Lisp, TCL Arthur Whitney style C, APL (no coincidence that I’ve been sharing such things) let you par down the implementation primitives very well, but an OS which exposes what we actually need/renders much code unnecessary helps even more. Just as garbage collection abstracted away memory management, Plan 9 abstracted away networking. We still have a long way to go, but e.g. condensing golfing SSGs and servers or Prolog implementations and accounting and valuation rule sets are a lot of fun!&lt;/p>
&lt;blockquote>
&lt;p>the concept can be boiled down to this hand-held size. And that means I can probably fit it in my head&lt;/p>&lt;/blockquote>
&lt;p>An empowering, condensing notation is a tool of thought, because it lets you think faster, as if everything were in our brain’s L1 cache. (By repeated effort, we can grow our L0 and hold rules, symbol tables etc. in it as we get used to a new paradigm/notation.) We can then &lt;a href="https://www.youtube.com/watch?v=_ahvzDzKdB0">grow the language&lt;/a> into anything we want. That was the original promise of Forth, though modern architectures, interop etc. make it all dreadful, time consuming… I hope we can soon abstract away these modern concerns.&lt;/p>
&lt;p>For a time, I chased the dragon of lisp machines, of a low level machine able to handle configurations through a logic language, of Forth drivers etc. Projects like &lt;a href="https://eyg.run/">EYG&lt;/a> are now using the browser as lisp machine, which is brilliant! It has a DB and so much built in!&lt;/p>
&lt;hr>
&lt;h3 id="uh">Uh&amp;hellip;&lt;/h3>
&lt;blockquote>
&lt;p>making programs short is what high level languages are for. It may not be 100% accurate to say the power of a programming language is in inverse proportion to the length of programs written in it, but it&amp;rsquo;s damned close&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>The most meaningful test of the length of a program is not lines or characters but the size of the codetree&amp;ndash; the tree you&amp;rsquo;d need to represent the source. The Arc &lt;a href="http://arclanguage.org/item?id=722">example&lt;/a> has a codetree of 23 nodes: 15 leaves/tokens + 8 interior nodes.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>my m.o. while working on Arc was to write applications in it, then comb through them line by line trying to imagine language features that would make them shorter. Then I&amp;rsquo;d implement those features, rewrite the program to use them, and start over&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://www.paulgraham.com/arcchallenge.html">https://www.paulgraham.com/arcchallenge.html&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>McCarthy began. In his original 1960 paper he built Lisp up from &amp;ldquo;axioms&amp;rdquo; like &lt;code>car&lt;/code>, &lt;code>cdr&lt;/code>, and &lt;code>cons&lt;/code>, through &amp;ldquo;theorems&amp;rdquo; like &lt;code>assoc&lt;/code> and &lt;code>mapcar&lt;/code>. There must be some optimal path all the way up to a complete language. What is it? McCarthy didn&amp;rsquo;t get very far along it in his paper. And after that the language passed into the hands of his grad students, who at the time were more worried about the exigencies of making an interpreter run on the IBM 704 than continuing McCarthy&amp;rsquo;s axiomatic approach. We&amp;rsquo;ve been living with their hacks ever since. Steele and Sussman tried to start over when they first began working on Scheme&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>that&amp;rsquo;s the goal: to find an optimal path from a small number of axioms up to a complete language for everyday use &amp;hellip; because I suspect that&amp;rsquo;s the way to get maximum expressive power&lt;/p>&lt;/blockquote>
&lt;p>Brevity is of course core APL style: &lt;a href="https://www.sacrideo.us/apl-style-patterns-and-anti-patterns-in-apl/">https://www.sacrideo.us/apl-style-patterns-and-anti-patterns-in-apl/&lt;/a>&lt;/p>
&lt;p>In APL an operation is often shorter than its name avoiding this problem:&lt;/p>
&lt;blockquote>
&lt;p>An abstraction frees you from thinking about its internals every time you use it. A service allows you to never learn its internals. A service is not an abstraction. It isn&amp;rsquo;t &amp;lsquo;abstracting&amp;rsquo; away the details. Somebody else is thinking about the details so you can remain ignorant. - &lt;a href="https://akkartik.name/post/libraries">Kartik Agaram&lt;/a>&lt;/p>&lt;/blockquote>
&lt;h3 id="data--code">Data &amp;amp; Code&lt;/h3>
&lt;p>&lt;a href="https://blog.rongarret.info/2008/02/what-are-programming-languages-for.html">https://blog.rongarret.info/2008/02/what-are-programming-languages-for.html&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>1989 paper by Phil Agre and David Chapman entitled &lt;a href="http://citeseer.ist.psu.edu/525648.html">What are Plans For?&lt;/a> &amp;hellip; plans should be considered as generalized information resources for a complex (and therefore academically interesting) execution engine&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Programs should be written for people to read, and only incidentally for machines to execute. - SICP&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>legibility is a function of a person&amp;rsquo;s knowledge state&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>brevity of a program is much more dependent on the available libraries than on the structure of the language&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>even node count is a red herring because it begs the question of where you draw the line between &amp;ldquo;language&amp;rdquo; and &amp;ldquo;library&amp;rdquo; and &amp;ldquo;program&amp;rdquo;&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>criteria should be, minimize /N x the length of Arc plus the length of each program in some representative set/ - &lt;a href="http://arclanguage.org/item?id=1298">queensnake&lt;/a>&lt;/p>&lt;/blockquote>&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>correct goal is to create a language that MINIMIZES the total of code, documentation, training, and learning curve to maintain it correctly - &lt;a href="http://arclanguage.org/item?id=1209">lgriffith&lt;/a>&lt;/p>&lt;/blockquote>&lt;/blockquote>
&lt;blockquote>
&lt;p>what are programming languages for? They are for making the creation of programs easier &amp;hellip; Sometimes investing a little more typing can pay dividends down the road, like making you do less typing when you change your mind and decide to use a hash table instead of an association list&lt;/p>&lt;/blockquote>
&lt;h3 id="start-from-the-goal">Start from the Goal&lt;/h3>
&lt;blockquote>
&lt;p>The way I wrote web.py was simple: I imagined how things should work and then I made that happen - &lt;a href="http://www.aaronsw.com/weblog/rewritingreddit">Aaron Swartz&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>M.P. Ward&amp;rsquo;s &lt;a href="http://www.gkc.org.uk/martin/papers/middle-out-t.pdf">Language-Oriented Programming&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;ol>
&lt;li>Start by developing a formally specified, &lt;em>domain-oriented&lt;/em> very high-level &lt;em>language&lt;/em> which is well-suited to developing &amp;ldquo;this kind of program&amp;rdquo;&lt;/li>
&lt;li>Implement the system using this &amp;ldquo;middle level&amp;rdquo; language&lt;/li>
&lt;li>Implement a compiler or translator or interpreter for the language&lt;/li>
&lt;/ol>&lt;/blockquote></content:encoded></item><item><title>Sapir Worf Programming</title><link>https://alexalejandre.com/notes/sapir-worf-programming/</link><pubDate>Fri, 06 Jun 2025 18:29:52 -0400</pubDate><guid>https://alexalejandre.com/notes/sapir-worf-programming/</guid><description>Do different programming languages influence how you think? Obviously!</description><content:encoded>&lt;p>&lt;a href="http://www.storytotell.org/">Daniel&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>what is the benefit of looking at this from a different perspective?&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>what is it like to think in another language?&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://scharenbroch.dev/blog/programming-paradigms/#fnref:14">https://scharenbroch.dev/blog/programming-paradigms/#fnref:14&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://alexalejandre.com/languages/end-of-programming-langs/">https://alexalejandre.com/languages/end-of-programming-langs/&lt;/a>&lt;/p>
&lt;p>An empowering, condensing notation is a &lt;a href="https://www.jsoftware.com/papers/tot.htm#">tool of thought&lt;/a>, because it lets you think faster, as if everything were in our brain’s L1 cache. (By repeated effort, we can grow our L0 and hold rules, symbol tables etc. in it as we get used to a new paradigm/notation.) We can then &lt;a href="https://www.youtube.com/watch?v=_ahvzDzKdB0">grow the language&lt;/a> into anything we want. That was the original promise of Forth, though modern architectures, interop etc. make it all dreadful, time consuming… I hope we can soon abstract away these modern concerns.&lt;/p>
&lt;p>&lt;a href="https://olano.dev/blog/software-design-is-knowledge-building/">https://olano.dev/blog/software-design-is-knowledge-building/&lt;/a>&lt;/p></content:encoded></item><item><title>Phonetic vs Phonemic Spelling</title><link>https://alexalejandre.com/notes/phonetic-vs-phonemic-spelling/</link><pubDate>Wed, 04 Jun 2025 20:27:01 -0400</pubDate><guid>https://alexalejandre.com/notes/phonetic-vs-phonemic-spelling/</guid><description>&lt;blockquote>
&lt;p>spelling reform to meaningfully move in a phonetic direction&lt;/p>&lt;/blockquote>
&lt;p>A phonetic respelling would destroy the languages, because there are too many dialects without matching pronunciations. Though rendering historical texts illegible, a phonemic approach would work. But that would still mean most speakers have 2-3 ways of spelling various vowels. You could predict pronunciation from spelling, but not spelling from pronunciation.&lt;/p></description><content:encoded>&lt;blockquote>
&lt;p>spelling reform to meaningfully move in a phonetic direction&lt;/p>&lt;/blockquote>
&lt;p>A phonetic respelling would destroy the languages, because there are too many dialects without matching pronunciations. Though rendering historical texts illegible, a phonemic approach would work. But that would still mean most speakers have 2-3 ways of spelling various vowels. You could predict pronunciation from spelling, but not spelling from pronunciation.&lt;/p>
&lt;p>&lt;a href="https://en.wiktionary.org/wiki/Appendix:English_pronunciation">https://en.wiktionary.org/wiki/Appendix:English_pronunciation&lt;/a>&lt;/p>
&lt;p>But we shouldn&amp;rsquo;t always do this. When you have morphological spellings like the plural -(e)s, which can be phonemically predicted from pronunciation (whether there&amp;rsquo;s a vowel sound or written e) while ignoring the specifically realized phoneme (/z/ in rags, /s/ in rocks.) -ed maps to pronunciations of /d/, /t/, /ɪd/.&lt;/p>
&lt;p>Now, protests against current English spelling are largely critiques of etymological spelling, but not entirely. In some cases, letters were added (b in doubt, s in island) where no sound had ever been, which can be easily removed. A bigger issue&amp;rsquo;s that pre- in prejudice and prequel or nat- in nation and national are pronounced differently although they&amp;rsquo;re clearly the same form. A phonetic or phonemic spelling would only obscure the connection and cause trouble for students learning to read etc.&lt;/p>
&lt;p>There&amp;rsquo;s 5 century long history of attempted reforms: &lt;a href="https://en.wikipedia.org/wiki/English-language_spelling_reform">https://en.wikipedia.org/wiki/English-language_spelling_reform&lt;/a> and parodies: &lt;a href="https://www.tau.ac.il/%7Epauzner/funs/simpler.html">https://www.tau.ac.il/%7Epauzner/funs/simpler.html&lt;/a> and internet communities with their own approaches.&lt;/p>
&lt;p>Gerhard H. Balg&amp;rsquo;s 1895 &lt;a href="https://www.gutenberg.org/files/50336/50336-h/50336-h.htm">translation&lt;/a> of Braune&amp;rsquo;s Gothic Grammar features a minimally reformed spelling:&lt;/p>
&lt;blockquote>
&lt;p>Sum of the explanations ar due to Bernhardt&amp;rsquo;s critical notes in his &amp;lsquo;Wulfila&amp;rsquo; to which I hav often referd. The Notes wer much more comprehensiv before the glossary was workt out, but many of them hav been transferd to the latter, in a few cases without being deleted in their first place, as I observd in reading the proof-sheets.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>The dubl sign kw (kv) which is uzed beside q for the Gothic character is due to &amp;hellip; nothing certain can be inferd about the fonetic value of Goth. q, altho it is possibl&amp;hellip;&lt;/p>&lt;/blockquote>
&lt;p>Besides, most speakers aren&amp;rsquo;t aware of what they&amp;rsquo;re phonetically saying. Are the p&amp;rsquo;s and t&amp;rsquo;s p in stop and spot the same?&lt;/p></content:encoded></item><item><title>Criticisms of Racket</title><link>https://alexalejandre.com/notes/criticisms-of-racket/</link><pubDate>Wed, 04 Jun 2025 16:35:20 -0400</pubDate><guid>https://alexalejandre.com/notes/criticisms-of-racket/</guid><description>I like Racket but others don&amp;rsquo;t. I&amp;rsquo;ll collect their objections.</description><content:encoded>&lt;p>Matthew Butterick, esteemed member of the community and author of its best textbook &lt;a href="https://beautifulracket.com/">Beautiful Racket&lt;/a> sadly &lt;a href="https://beautifulracket.com/appendix/why-i-no-longer-contribute-to-racket.html">quit&lt;/a> (but seems &lt;a href="https://www.youtube.com/watch?v=ftE89ogfTEY">back&lt;/a> to evangelizing the language). Leonardo Facchinetti did too:&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/_wY7FBtr7_c?si=j-YqTv3VCozPod3A" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen>&lt;/iframe>
&lt;p>&lt;a href="https://spritely.institute/">Spritely&lt;/a> migrated from Racket to Guile too. I asked two members about this:&lt;/p>
&lt;blockquote>
&lt;p>Spritely &amp;hellip; moved away as Racket became more focused on Rhombus and other things and didn’t feel particularly aligned to Spritely’s long-term vision. Racket tends to favor academics and educational use-cases whereas Guile has more of a focus on real-world production usage. The Guile community, including the Guile maintainers, are more receptive to the object capability security paradigm. Guile has a better REPL-driven development story and notably has Guix as a sort of flagship project which Christine and I have been users/developers of for years before Spritely. Andy Wingo’s compiler engineering is another factor since he’s applied a lot of techniques that production JavaScript engines use to Guile, and is now working on a state-of-the-art garbage collector. IMO Guile is the best Scheme overall, though other implementations have their advantages over Guile in certain areas. Hope this helps! — David Thompsen&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>We pivoted to Guile because:&lt;/p>
&lt;ul>
&lt;li>Guile was more easily debuggable&lt;/li>
&lt;li>Guile’s community aligns with ours a lot (esp with Guix etc)&lt;/li>
&lt;li>Racket’s future, language-wise, was kind of unclear with Rhombus. It was clear s-expressions would be “supported” but not if they were the future of the language, and it wasn’t clear what effects this would have on Racket, and we needed stability&lt;/li>
&lt;li>Guile is &lt;em>way&lt;/em> more performant, and way less memory usage&lt;/li>
&lt;/ul>
&lt;p>— Christine Lemmer-Webber&lt;/p>&lt;/blockquote>
&lt;p>The Rhombus effort really hurt enthusiasm among the core Lisp audience and some &lt;a href="https://groups.google.com/g/racket-users/c/vN_1uUJZnXo/m/iZ-7NoXWBQAJ">messaging&lt;/a> validated fears for Racket&amp;rsquo;s &lt;a href="https://greghendershott.com/2019/07/future-of-racket.html">future&lt;/a> and made some leave.&lt;/p>
&lt;hr>
&lt;p>I do not understand criticisms of the packaging system etc. as Racket tooling seems miles ahead of more popular languages like Java and Python. Guile&amp;rsquo;s competitive performance sounds awesome though!&lt;/p>
&lt;p>Unfortunately, the motivated, contributing Racket community is small and a single person shines brightly.&lt;/p>
&lt;blockquote>
&lt;p>Matthias behaves this way consistently, is unapologetic for it, and when pressed will explain that his &amp;ldquo;challenging behavior&amp;rdquo; (i.e. abuse) is some kind of test of your ideas, your willpower, or your capacity for success. — &lt;a href="https://news.ycombinator.com/item?id=27532954">parenwielder&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>His temper is a hazard I (personally) am willing to weather in exchange for learning from someone with his level of passion, dedication to teaching, dedication to research, experience both in academia and industry, breadth and depth of knowledge, first-hand history, et cetera. — &lt;a href="https://lobste.rs/c/8aofuj">a5c11&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>if the prof let the lazy student be lazy and silently condemn them to mediocrity, nobody would raise a peep and everyone would be fine. It&amp;rsquo;s only when the prof cares about to go take a personal risk to try to get through to the student (which they would only care to do because they care about the student) can someone complain — &lt;a href="https://news.ycombinator.com/user?id=xyzelement">xyzelement&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Felleisen offends many modern people. He nobly tries to maintain &amp;ldquo;&lt;a href="https://felleisen.org/matthias/Thoughts/Free_Speech.html">free speech&lt;/a>&amp;rdquo; and &amp;ldquo;&lt;a href="https://groups.google.com/g/racket-users/c/ewWuCvbe93k/m/QkAtH_eeAwAJ">keep out politics&lt;/a>&amp;rdquo;, but definitions, sensibilities, mores change, what was once political is now mere decency to many. With time, we eat our elders, kill our &lt;a href="https://www.youtube.com/watch?v=h0E7w8F-fuk">heroes&lt;/a>. I understand both sides and wish there were an amiable path. I choose the &amp;ldquo;politics&amp;rdquo; example, because culture war assumptions seem to have taken over, when the original statement revolved around &amp;ldquo;parentheses aren&amp;rsquo;t scary, we don&amp;rsquo;t need to hide them!&amp;rdquo; This is a problem our whole civilization is wrestling with. Anyway, the broader context is that leadership and development effort&amp;rsquo;s focussed on Rhombus, to satisfy people &lt;em>outside&lt;/em> of the community:&lt;/p>
&lt;blockquote>
&lt;p>it feels like a marketing driven effort vs. an engineering driven
effort i.e. prioritizing psychological appeasement over technical
excellence &amp;hellip; owith the hope that people who rejected Racket previously will
now respect us for bending over backward to accommodate them, and join
us — Brian Adkins&lt;/p>&lt;/blockquote>
&lt;p>I largely agree with these fears but understand the opposite view. Racket can support Rhombus and improve its DSL-build abilities, improving the overall experience without harming traditional Lispers. I believe weaknesses lie less in the language than community/materials, but e.g. &lt;a href="https://defn.io/">Bodgan Popa&lt;/a> is building out the &lt;a href="https://github.com/Bogdanp/koyo">web&lt;/a> experience. The Rhombus effort is something greater:&lt;/p>
&lt;blockquote>
&lt;p>If Racket can demonstrate and provide a practical solution for taking
random code (e.g. by adding #lang r4rs as the first line of a file),
and having the semantics just work, then that would be game changing
beyond the wildest dreams of even the most cynical academics. This
couldn&amp;rsquo;t happen without a monumental effort to provide facilities for
capturing language semantics in a meaningful way beyond simple syntax.
&amp;hellip;
The real challenge (it seems) is to provide a tool that makes it
possible to translate the semantics of one language to another in
a way that is consistent, understandable, and ideally, performant.
&amp;hellip;
I can appreciate why Matthew might like to consider alternate direction
after having spent the last 2 years working on performance optimizations
and semantics translation. However, I wonder whether the knowledge gained
as a result is equally valuable. Could it be implemented into Racket
itself? Said another way, can we have #lang common-lisp with all the
syntax, working as a Lisp-2, and have a performant implementation of
unwind-protect that can be used in &lt;code>#lang r4rs with-extended-semantics&lt;/code>? — Tom Gillespie&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>wonder whether Racket is now ideally poised to act as the bridge for the infinite and as yet unimagined syntaxes of the future and the enormous variety of existing runtimes — Tom Gillespie&lt;/p>&lt;/blockquote>
&lt;p>I feel that Racket is the best Scheme and DSL builder we have and it makes little sense to throw out the baby with the bathwater and waste a decade rebuilding what we already have. But:&lt;/p>
&lt;blockquote>
&lt;p>how I personally feel is irrelevant if enough other folks start looking around for lispier pastures :( — Brian Atkins&lt;/p>&lt;/blockquote></content:encoded></item><item><title>Writing as Tool of Thought</title><link>https://alexalejandre.com/notes/writing-as-thought-tool/</link><pubDate>Wed, 04 Jun 2025 16:27:46 -0400</pubDate><guid>https://alexalejandre.com/notes/writing-as-thought-tool/</guid><description>&lt;p>&lt;a href="https://paulgraham.com/writing44.html">https://paulgraham.com/writing44.html&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Writing doesn&amp;rsquo;t just communicate ideas; it generates them.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://mikegrindle.com/posts/write-to-think">https://mikegrindle.com/posts/write-to-think&lt;/a>&lt;/p></description><content:encoded>&lt;p>&lt;a href="https://paulgraham.com/writing44.html">https://paulgraham.com/writing44.html&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Writing doesn&amp;rsquo;t just communicate ideas; it generates them.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://mikegrindle.com/posts/write-to-think">https://mikegrindle.com/posts/write-to-think&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>I don’t know what I think until I write it down.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://www.paulgraham.com/words.html">https://www.paulgraham.com/words.html&lt;/a>&lt;/p>
&lt;p>Programming as Extended Cognition
&lt;a href="https://ieeexplore.ieee.org/document/11119124">https://ieeexplore.ieee.org/document/11119124&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://jyn.dev/theory-building-without-a-mentor/">https://jyn.dev/theory-building-without-a-mentor/&lt;/a>&lt;/p></content:encoded></item><item><title>Persian Christianity</title><link>https://alexalejandre.com/other/persian-christianity/</link><pubDate>Fri, 30 May 2025 21:01:30 -0400</pubDate><guid>https://alexalejandre.com/other/persian-christianity/</guid><description>Few Persians today know the period between Darius and the Islamic conquests well, about their region&amp;rsquo;s Christian past.</description><content:encoded>&lt;p>Few Persians and fewer Westerners today know the period between Darius and the Islamic conquests well, about their region&amp;rsquo;s Christian past. I will simply share some broader strokes to encourage curious investigation.&lt;/p>
&lt;p>Persia received the faith early through the apostles Thomas, Thaddeus and Bartholomew, but when the Roman empire crowned Christianity in purple, the Persian empire stained it with blood and Persian Christendom thrived and suffered under Zoroastrian and Islamic ascendancy.&lt;/p>
&lt;p>In the 2nd century, Eusebius described thriving communities in places like Nisibis and Seleucia-Ctesiphon where Thaddeus&amp;rsquo; disciples like Saint Mari baptized converts along and beyond the Tigris, founding the Church of the East, the national church of Sasanian Perisa. These seeds spread to India (the Syro-Malabar tradition), Mongolia and China (brought by Alopen in the 7th century).&lt;/p>
&lt;h3 id="martyrs-under-shapur-ii">Martyrs under Shapur II&lt;/h3>
&lt;p>After Constantine&amp;rsquo;s conversation, Persian leadership came to consider Christianity as a Roman movement and the later part of Shapur II&amp;rsquo;s rule (309-379 AD) saw perhaps &lt;a href="https://gloriaromanorum.blogspot.com/2019/04/the-16000-martyrs-of-persia-during.html">16,000&lt;/a> Christians martyred, remembered by Catholic feast days on April 6th, 22nd and May 9th. We can only mention a few, saints Bademus, Miles, Acepsimas, Barbasceminus, Daniel &amp;amp; Verda, Jonas &amp;amp; Barachisius.&lt;/p>
&lt;h3 id="nestorian-academies">Nestorian Academies&lt;/h3>
&lt;p>Yet by the grace of God, persecution could not squash the embers of faith and suffering became scholarship. Driven away by Eastern Roman persecution and welcomed by Khosrau I, Greek &amp;amp; Syriac Nestorian scholars brought their libraries, founding and flourishing in great academies &lt;span class="marginnote">farhan = knowledge, farhanestán = place of knowledge&lt;/span> in Nisibis, Gundeshapur (Beth Lapat) etc. where for a time they translated manuscripts into Middle Persian and taught in Syriac (which would remain the language of medicine for some time).&lt;/p>
&lt;p>When Caliph al Ma&amp;rsquo;mún expanded Baghdad&amp;rsquo;s house of wisdom in 832, he staffed it with Gondeshapur&amp;rsquo;s graduates emulating its methods, &lt;a href="https://en.wikipedia.org/wiki/Graeco-Arabic_translation_movement">translating&lt;/a> vast volumes of Greek learning into Arabic.&lt;/p>
&lt;h3 id="mongolians">Mongolians&lt;/h3>
&lt;!-- ![Hulagu and Dokuz Kathun](/images/persian-christianity/queen-dokuz.JPG) -->
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/6/62/HulaguAndDokuzKathun.JPG" alt="Hulagu and Dokuz Kathun">&lt;/p>
&lt;p>Before Genghis, the Keraite and Naiman tribes &lt;a href="https://en.wikipedia.org/wiki/Sergius_of_Samarkand#Conversion_legend">converted&lt;/a> to Nestorianism and ruled much of Central Asia until Genghis&amp;rsquo; conquests. Under the Mongol empire and Ilkhanate, Doquz Khatun had Christians spared (e.g. in Baghdad) and churches patronized. Monks like Bar Sauma and Patriarch Yahballaha III visited Rome as envoys for the Khan, seeking to reunite the church (though Eastern bishops rejected it).&lt;/p>
&lt;h3 id="armenians">Armenians&lt;/h3>
&lt;p>Armenia and Persia have had ties since 515 BC, suffering under Shapur&amp;rsquo;s persecutions (where e.g. the Etchmiadzin Cathedral was destroyed.)&lt;/p>
&lt;p>Shah Abbas I (1587–1629) brought Armenians into modern Iran in great numbers to seed his new capital of Esfahan in the New Julfa quarter, whose churches challenge the minarets. Armenians thrived here as merchants, scribes and artisans. The Vank Cathedral marries Safavid splendor and Christian devotion—frescoes of Eden beside Persian arabesques. They keep their community and faith today.&lt;/p>
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/10/Catedral_Vank%2C_Isfah%C3%A1n%2C_Ir%C3%A1n%2C_2016-09-20%2C_DD_95-97_HDR.jpg/1024px-Catedral_Vank%2C_Isfah%C3%A1n%2C_Ir%C3%A1n%2C_2016-09-20%2C_DD_95-97_HDR.jpg" alt="Vank Cathedral inside">&lt;/p>
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Vank_Cathedral_of_Isfahan.jpg/1024px-Vank_Cathedral_of_Isfahan.jpg" alt="Vank Cathedral">&lt;/p>
&lt;h3 id="sampsonia-teresa">Sampsonia Teresa&lt;/h3>
&lt;!-- ![Sampsonia](/images/persian-christianity/sampsonia.jpg) -->
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/2/23/Lady_Shirley_by_Anthony_van_Dyck%2C_c._1622.jpg" alt="Sampsonia">&lt;/p>
&lt;p>Circasian Orthodox, born to Shah Abbas the Great&amp;rsquo;s brother in law, Ismail Khan, and married an English adventurer. They traveled Europe together, meeting the Grand Duke of Muscovy, the Pope, the King of Poland, Holy Roman Emperor and countless others. After his death, the Pope received her in Rome where she spent the her last 30 years.&lt;/p>
&lt;p>Some believe she was (daughter of) a slave, purchased from &lt;a href="https://en.wikipedia.org/wiki/Black_Sea_slave_trade#Crimean_slave_trade_(15th%E2%80%9318th_centuries)">Crimean&lt;/a> traders, growing up in the harem.&lt;/p>
&lt;h3 id="until-today">Until Today&lt;/h3>
&lt;p>By the Qajar era, Western missionaries, Catholic and Protestant, came but failed to convert many. The Armenians and Nestorians, once mighty, clung to life, but faded with emigration and changing tides. Yet in their churches, liturgies and stubborn memory, they bore witness to a faith that outlived emperors and caliphs alike.&lt;/p>
&lt;p>During WWI, the Ottomans massacred Assyrians, who fled to Tehran or refugee camps in British-held Mesopotamia. The 117th Patriarch Benyamin XXI was killed by Kurdish warlord &lt;a href="https://en.wikipedia.org/wiki/Simko_Shikak_revolt_(1918%E2%80%931922)">Simko Shikak&lt;/a>.&lt;/p>
&lt;h3 id="some-pictures">Some Pictures:&lt;/h3>
&lt;!-- ![Sogdian-made Anikova dish, found in Perm, Russia](/images/persian-christianity/sogdian-anikova-dish.JPG) -->
&lt;p>Here is the Black Church, built in 66 AD, in modern Iran.&lt;/p>
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/1/15/Qareh_kelissa.jpg" alt="Qareh kelissa">&lt;/p>
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Mar_Toma_church_urmia.jpg/1024px-Mar_Toma_church_urmia.jpg" alt="Mar Toma chuch in Mavana, Iran">&lt;/p>
&lt;p>The Church of St. Thomas in Western Iran, dates to the 5th century.&lt;/p>
&lt;p>The Anikova dish, made by Sogdians, was found in Perm, Russia, depicting the Siege of Jerricho:&lt;/p>
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/ee/Piatto_con_decorazione_di_castello_assediato%2C_arg%2C_samirechye%2C_da_bolshoe-anikovskaya%2C_IX-X_sec_su_orig_del_l%27VIII_sec.JPG/1024px-Piatto_con_decorazione_di_castello_assediato%2C_arg%2C_samirechye%2C_da_bolshoe-anikovskaya%2C_IX-X_sec_su_orig_del_l%27VIII_sec.JPG" alt="Sogdian Anikova dish, found in Perm, Russia">&lt;/p>
&lt;p>Here is Moses before the Pharoah in a Syriac &lt;span class="marginnote">Syriac is a later form of Aramaic, the written language of the Achaemenid Persian empire.&lt;/span> bible:&lt;/p>
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/SyriacBibleParisFolio8rrMosesBeforePharaoh.jpg/800px-SyriacBibleParisFolio8rrMosesBeforePharaoh.jpg" alt="Syriac Bible, Moses before the Pharaoh">&lt;/p>
&lt;p>Here is a 10th century Christian Sogdian text:&lt;/p>
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Sogdian_Christian_Text_Written_in_Estrangelo.jpg/1024px-Sogdian_Christian_Text_Written_in_Estrangelo.jpg" alt="Sogdian Christian text">&lt;/p>
&lt;p>Here is the Gospel of Matthew in Persian (1312, by Mas&amp;rsquo;ud ibn Ibhrahim), with a curious section crossed out:&lt;/p>
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/2/25/Bible_Persian_Manuscript_%2814th_century%29.jpg" alt="Gospel of Matthew in New Persian, naskhi">&lt;/p>
&lt;p>St. Stepanos Armenian monestary in Julfa, Iran:&lt;/p>
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Iran_-_Aras_-_St._Stepanos_Monastry_-_panoramio.jpg/1024px-Iran_-_Aras_-_St._Stepanos_Monastry_-_panoramio.jpg" alt="St. Stepanos">&lt;/p>
&lt;p>St. Joseph Chaldean Catholic Church in Tehran:&lt;/p>
&lt;p>&lt;img src="https://upload.wikimedia.org/wikipedia/commons/2/2c/St._Joseph_Assyrian_Catholic_Church%2C_Tehran.jpg" alt="St. Joseph Chaldean Catholic Church in Tehran">&lt;/p>
&lt;hr>
&lt;p>N.b. &amp;ldquo;Nestorian&amp;rdquo; is a flawed concept. Researching the Nestorian split, I believe Nestorius&amp;rsquo; Christokolos was synonymous with Theotokos, but cultural misunderstandings and semantics got in the way. At minimum, Nestorians followed the Nicene Creed and the Assyrian Church practices open communion. The Assyrian Church of the East seems in no way heretical and practices open communion. With the Catholic Church, it &lt;a href="https://www.vatican.va/content/john-paul-ii/en/speeches/1994/november/documents/hf_jp-ii_spe_19941111_dichiarazione-cristologica.html">declared&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>As heirs and guardians of the faith received from the Apostles as formulated by our common Fathers in the Nicene Creed, we confess one Lord Jesus Christ, the only Son of God, begotten of the Father from all eternity who, in the fullness of time, came down from heaven and became man for our salvation&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>But far from constituting &amp;ldquo;one and another&amp;rdquo;, the divinity and humanity are united in the person of the same and unique Son of God and Lord Jesus Christ, who is the object of a single adoration.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>We both recognize the legitimacy and rightness of these expressions of the same faith and we both respect the preference of each Church in her liturgical life and piety.&lt;/p>&lt;/blockquote>
&lt;p>Here is a gorgeous, musical Our Father in Aramaic:&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/XOfRFb3oMTo?si=K7TXUjUEL-XDmOXl" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen>&lt;/iframe></content:encoded></item><item><title>Is AI the End of Programming Languages?</title><link>https://alexalejandre.com/languages/end-of-programming-langs/</link><pubDate>Tue, 27 May 2025 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/end-of-programming-langs/</guid><description>Karpathy and fans call English the hottest new programming language. I guess COBOL&amp;rsquo;s retro now.</description><content:encoded>&lt;p>A friend recently nerdsniped me:&lt;/p>
&lt;blockquote>
&lt;p>What do you make of the need for programming languages going away with more LLM usage? Is it going to be a bit like cursive?&lt;/p>&lt;/blockquote>
&lt;p>Language empowers us to think about the world. Formal languages empower us with precision, gifting us a more perfect command over our subjects. &lt;a href="https://en.wikipedia.org/wiki/Juggling_notation">Juggling notation&lt;/a> made new tricks possible! Knowing notations &amp;amp; languages improves your vision, perception, understanding of the world. From &lt;a href="https://www.youtube.com/watch?v=Wahc9Ocka1g">knot&lt;/a> theory to &lt;a href="https://www.jsoftware.com/papers/tot.htm#">APL&lt;/a>, mathematics and human discovery as a whole is an intergenerational project to tame and summarize the world with notations, &lt;a href="https://www.jsoftware.com/papers/tot.htm#">tools of thought&lt;/a>. &lt;a href="https://pages.cs.wisc.edu/~remzi/Naur.pdf">Programming is theory building&lt;/a> and caries this torch.&lt;/p>
&lt;p>The COBOL project attempted to solve programming, hiding it in an intuitive English skin, intended for non-technical leaders to understand. (The siren&amp;rsquo;s song. Using English grammar and concepts seduces you into confusion, because a formal language has different grammar, semantics, limits, so your speech must be retrained.) Low-code approaches are even more instructive, letting you avoid the scary code / formal notation and grammar. But in both cases, they led to an explosion in more difficult roles than before like &lt;a href="https://www.mendix.com/blog/low-code-principle-1-model-driven-development/">domain modelers&lt;/a> working in obtuse &lt;a href="https://fswb-documentation.knowis.net/2.5/SolutionDevelopment/content/managing_low_code_solutions.html">formal schematics&lt;/a>, themselves hidden notations with overlong untamed terminological confusion, ossifying their fields with mandatory, repeated boilerplate and ceremony.&lt;/p>
&lt;blockquote>
&lt;p>If every user of an application needs to write the same code, your API is wrong. If you abstract away the boilerplate and reuse that abstraction, you’ve made the world better. If you create a tool that generates the boilerplate, you’ve made the world more fragile. - David Chisnall&lt;/p>&lt;/blockquote>
&lt;p>A natural, informal language like English is not a formal language, by definition and tautology, English specifications or &amp;ldquo;&lt;a href="https://x.com/karpathy/status/1617979122625712128">code&lt;/a>&amp;rdquo; are ambiguous. AI may let us wield computers with English, but useful thoughts and plans cannot be in natural language. In order to command, to instruct subordinates or computers, you must order, clarify and structure your thoughts, to yourself before anyone else. Asking for a thingamajig, your friend must interpret, yea make an informed guess what you mean. If you say &amp;ldquo;no, that&amp;rsquo;s not it&amp;rdquo;, why do you have to try LLMs multiple times?&lt;/p>
&lt;blockquote>
&lt;p>Instead of regarding the obligation to use formal symbols as a burden, we should regard the convenience of using them as a privilege: thanks to them, school children can learn to do what in earlier days only genius could achieve. - Dijkstra&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>A short look at the history of mathematics shows how justified this challenge is. Greek mathematics got stuck because it remained a verbal, pictorial activity, Moslem &amp;ldquo;algebra&amp;rdquo;, after a timid attempt at symbolism, died when it returned to the rhetoric style, and the modern civilized world could only emerge —for better or for worse— when Western Europe could free itself from the fetters of medieval scholasticism —a vain attempt at verbal precision!— thanks to the carefully, or at least consciously designed formal symbolisms that we owe to people like Vieta, Descartes, Leibniz, and (later) Boole. - Dijkstra&lt;/p>&lt;/blockquote>
&lt;p>Just consider the European music tradition without notation, gradually adding forms of it and gaining in complexity and expressive power as the notation enabled more complex thought. Compare it to trying to describe a melody with words! That&amp;rsquo;s what this approach promises.&lt;/p>
&lt;hr>
&lt;p>Alexis King &lt;a href="https://lexi-lambda.github.io/blog/2025/05/29/a-break-from-programming-languages/">touched&lt;/a> on similar ground recently, feeling stuck in the Platonic spheres. I believe she’s throwing out the baby with the bathwater, that applying those PLT chops to make a lisp for music (instead of lists or maps) or for gardening or recipe design is the greatest thing we can do and tacitly helps people.&lt;/p>
&lt;p>Dancers and choreographers have &lt;a href="https://en.wikipedia.org/wiki/Benesh_Movement_Notation">Benesh&lt;/a> and &lt;a href="https://en.wikipedia.org/wiki/Labanotation">Laba&lt;/a> notation. There is now a &lt;a href="https://cooklang.org/">cooking&lt;/a> notation!&lt;/p></content:encoded></item><item><title>WIP Coupling Language and Geography</title><link>https://alexalejandre.com/programming/coupling-language-and-geography/</link><pubDate>Wed, 07 May 2025 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/coupling-language-and-geography/</guid><description>Historical linguistics has a lot to teach us about API/DSL design. While a decades old codebase may be a crime scene, human languages have endured magnitudes more churn!</description><content:encoded>&lt;p>While your decade old codebase is a grisly crime scene, human languages have endured magnitudes more churn so &lt;a href="https://en.wiktionary.org/wiki/diachronic">diachronic&lt;/a> linguistics can teach us a lot about API/DSL design.&lt;/p>
&lt;ul>
&lt;li>Why is &lt;em>Left&lt;/em> Bank Ukraine in the East not West?&lt;/li>
&lt;li>Why are &lt;a href="https://de.wikipedia.org/wiki/Oberdeutsche_Schreibsprache">&lt;em>Upper&lt;/em> German&lt;/a> varieties spoken in the South and &lt;a href="https://en.wikipedia.org/wiki/Low_German">Low German&lt;/a> in the North?&lt;/li>
&lt;li>Why is Belarus, i.e. White Rus, white?&lt;/li>
&lt;li>Why did the Ashkenaz, a lost, ancient Semetic kingdom, move to France, Germany, then Poland/the Pale of Settlement (and even Crimea and the Caucasus)?&lt;/li>
&lt;li>Why did Japanese, Korean and Vietnamese polities all claim to be the true China?di&lt;/li>
&lt;li>Why do Greeks &lt;a href="https://youtu.be/6tIKRERo4cU?si=sBObVIQhv7RITNnO&amp;amp;t=133">call&lt;/a> themselves Ρωμηός (Romans)?&lt;/li>
&lt;li>Why don&amp;rsquo;t these make sense to us moderns?&lt;/li>
&lt;/ul>
&lt;p>Why coupling, of course! Programming, we weave webs of names, building mighty
To control our spells, we name our primitives and combinations, stacking ever bigger combinations into mighty castles of air.
&amp;hellip;unless you do point free? i.e. make the primitives themselves really densely named!&lt;/p>
&lt;p>Imagine your ancestor &lt;a href="https://grugbrain.dev/">Grug&lt;/a> seeing something new. A mythical ur-language (or program), perfect, unblemished by the world, might map every concept to its own word. But the world, vast and ever changing, demands change. He must map the new to some sign and &lt;a href="https://www.youtube.com/watch?v=_ahvzDzKdB0">grow his language&lt;/a>, tame this ineffable with understanding and communicate with others. Though he can coin a &lt;a href="https://en.wiktionary.org/wiki/brand_new#Etymology">fire&lt;/a> new sign (or accidentally &lt;a href="https://en.wikipedia.org/wiki/Homophone">copy over&lt;/a> an existing sign), he often wields metaphor to &lt;a href="https://en.wikipedia.org/wiki/Polysemy">stretch&lt;/a> its meaning.&lt;/p>
&lt;p>With the name &amp;ldquo;&lt;a href="https://en.wikipedia.org/wiki/Conceptual_blending">bisociation&lt;/a>&amp;rdquo;, Arthur Köstler tamed this process of connecting unrelated &amp;ldquo;matrices of thought&amp;rdquo;. We are &lt;a href="https://youtu.be/vpUXI9wmKLc?si=E_t6BgVIhrdI3JN2&amp;amp;t=1703">analogy machines&lt;/a>, thinking by resonance, not deduction. Seeing the new, our brain asks &amp;ldquo;what else is like that?&amp;rdquo; To talk about the internet, we didn&amp;rsquo;t invent hundreds of new words but e.g. coupled it to water: surfing, streaming, phishing, downstream/upstream, TCP flow control, ports&amp;hellip; &lt;a href="https://en.wikipedia.org/wiki/Conceptual_blending">Conceptual blending&lt;/a> in action.&lt;/p>
&lt;blockquote>
&lt;p>Einstein&amp;rsquo;s space is no closer to reality than Van Gogh&amp;rsquo;s sky. The glory of science is not in a truth more absolute than the truth of Bach or Tolstoy, but in the act of creation itself. The scientist&amp;rsquo;s discoveries impose his own order on chaos, as the composer or painter imposes his; an order that always refers to limited aspects of reality, and is based on the observer&amp;rsquo;s frame of reference, which differs from period to period as a Rembrant nude differs from a nude by Manet. - The Act of Creation&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>But human languages aren&amp;rsquo;t engineered like programming languages!&lt;/p>&lt;/blockquote>
&lt;p>Aren&amp;rsquo;t they? Most European standard languages were intentionally engineered in the last few hundred years. Greats like Joachim Campe and Philipp von Zesen who coined thousands of German words for concepts like &lt;a href="https://de.wikipedia.org/wiki/Joachim_Heinrich_Campe#Verdeutschungen_von_Fremdw%C3%B6rtern">ancient, author, university&lt;/a>, &lt;a href="https://de.wikipedia.org/wiki/Philipp_von_Zesen#Erfolgreiche_Verdeutschungen">project, address, spelling&lt;/a> etc. Vuk Karadžić, Ljudevit Gaj, Bogoslav Šulek etc. did similar for Serbo-Croatian. Indeed, they even &lt;a href="https://en.wikipedia.org/wiki/Illyrian_movement#Language_characteristics">fought&lt;/a> and established basic grammar! In Finnland, Mikael Agricola, then Antero Warelius &amp;amp; August Ahlqvist, in Hungary, Ferenc Kazinczy &amp;amp; Dávid Baróti Szabó, in Czechia Josef Jungmann &amp;amp; Josef Dobrovský etc. Deliberate linguistic engineering is short leap to bringing Hebrew back to life, creating a Volapuk or Esperanto, Javascript or Lambda Calculus (Lisp was, of course, &lt;a href="https://twobithistory.org/2018/10/14/lisp.html">&lt;em>discovered&lt;/em>&lt;/a>).&lt;/p>
&lt;p>When Campe &amp;amp; von Zesen coined German vocabulary and Zamenhof chose Esperanto&amp;rsquo;s lemmas, when Iverson named the reduce function and Grug wrote a CLI, when Vostokov created the name &lt;a href="https://ru.wikisource.org/wiki/%D0%A1%D0%B2%D0%B5%D1%82%D0%BB%D0%B0%D0%BD%D0%B0_%D0%B8_%D0%9C%D1%81%D1%82%D0%B8%D1%81%D0%BB%D0%B0%D0%B2_(%D0%92%D0%BE%D1%81%D1%82%D0%BE%D0%BA%D0%BE%D0%B2)">Svetlana&lt;/a> and Fielding came up with REST APIs, they were performing the same ritual: stretching prior mappings of meaning to sign, coupling a new idea to another form, existing or new.&lt;/p>
&lt;p>But there&amp;rsquo;s a hitch! Languages &lt;em>change&lt;/em> as the world changes. After all, Italians no longer speak Latin and few readers would know what eoh, mearh, blanca, wiċġ mean. Their synonym hors is familiar, though hās&amp;rsquo; symbol changed and shares its sound: hoarse. When you couple the right side of a human to a river bank or political group and share its symbol with the very concept of correctness, what happens when these meanings, now complected, slide around over hundreds of years? Confusion!&lt;/p>
&lt;blockquote>
&lt;p>‘Complect’ &amp;hellip; means to turn something simple into something complex &amp;hellip; ‘think of four strands of yarn that hang independently—that’s a simple system. Now take those same four strands of yarn and braid them together. Now you’ve complected them.’ &amp;hellip; In the simple system, you can change one string independently without having to touch the others &amp;hellip; in the complected system, when you want to make a change to one strand of yarn, you are forced to change the other three&amp;hellip; - The Unicorn Project&lt;/p>&lt;/blockquote>
&lt;h3 id="forward-into-history">Forward into History!&lt;/h3>
&lt;p>Let&amp;rsquo;s revisit those questions! In each case, a once sensible couping (direction to river or color) lost its sense, but the words stubbornly remained as fossils, preserving old logics.&lt;/p>
&lt;p>Jerry-rigging cardinal directions onto your language isn&amp;rsquo;t easy. To our modern sensibilities, after Ptolemy&amp;rsquo;s eventual victory, with North at the top, left would be West. But reckoning with rivers, it makes sense to base things off of current: up and downstream, left and right. The left bank can be West (on the Rhine) or East (on the Dnieper). (Indeed, it changes as your river snakes around!) When reckoning with mountains, up simply means higher! But why use new symbols for directions when you have perfectly good &lt;a href="https://en.wikipedia.org/wiki/Cardinal_direction#Northern_Eurasia">colors&lt;/a>? White Russians and &lt;a href="https://en.wikipedia.org/wiki/White_Croats">White Croats&lt;/a> in the North-West, &lt;a href="https://en.wikipedia.org/wiki/Green_Ukraine">Green&lt;/a> Ukraine out East on the Pacific, the Black Sea in the South (conveniently, the Turkic &amp;ldquo;kara&amp;rdquo; was both the symbol for black and &lt;a href="https://en.wiktionary.org/wiki/Karadeniz#Etymology">&lt;em>North&lt;/em>&lt;/a>!) In China too, the &lt;a href="https://en.wikipedia.org/wiki/Heilongjiang">Black Dragon River&lt;/a> lies in the North while white means &lt;a href="https://en.wiktionary.org/wiki/ak#Etymology_1_3">West&lt;/a>. (Turks call the Mediterranean the White Sea.) China&amp;rsquo;s Yellow River and Mountains were once considered central (and the Golden horde was between the other Mongol hordes).&lt;/p>
&lt;p>Now, what if you move to a new place? Why even bother with new or local names when you can simply use one you already know (like New York, New Jersey or not even bother with &amp;ldquo;new&amp;rdquo; and make a 100 Santa Fes in the New World)?&lt;/p>
&lt;blockquote>
&lt;p>Let us take a classic example from European Jewish history. Around the year 1000 AD, a number of Jewish culture areas in Europe were crystallizing, each referring to itself by a name usually recycled from the Hebrew Bible. On the Iberian Peninsula it was Sepharad; in the Slavic lands Knaan (Canaan); and in the Germanic and adjacent territories of central Europe — Ashkenaz . The Jewish residents in these lands were the Ashkenazim (singular Ashkenazi ). Well, European history took its course. The Crusades and numerous other manifestations of medieval religious intolerance resulted in massacres and expulsions; as a result, over a period of generations, Ashkenazim were continually resettling eastward to the then more tolerant Baltic and Slavic lands, particularly Poland and Lithuania. And, guess what, their new home in the east just “became the new Ashkenaz,” and they were still the Ashkenazim, although their neighbors now spoke Slavic and Baltic languages rather than Germanic, and they were, to speak spatially, in a “different place.”&lt;/p>
&lt;p>Then there are many cases where a Jewish geographic term more or less represents an erstwhile state of geopolitical reality. Over the centuries, the militarily established borders keep changing or the original state might cease to exist altogether, but this changes zero for the stateless culture’s knowledge and transmission to new generations of its own world view of the geo-cultural terrain. As it happens, the best known case is Lita (Yiddish Líte ), which means “Lithuania” and whose Jews are known as Litvaks (Yiddish lítvakes ). The borders of Lita are relatively congruous with those the Grand Duchy reached in the days of Grand Duke Gediminas (Gedymin, ±1275 — 1341), and it is an irony of history that Lithuanian Yiddish is the only one of its many languages common to roughly “all and only” that territory. That made for the once-famous 1919 quip by diplomat Max Soloveitchik, negotiating on behalf of Lithuania with Soviet Russia, that he would respectfully like to ask for the ceding to Lithuania of all lands the Jews consider to be “Lita” (the Russian diplomat was called Mr. Yoffe, and they held this particular conversation in Yiddish). - &lt;a href="https://web.archive.org/web/20211104084902/elibrary.lt/resursai/Mokslai/VU/cartography/VSC-2004-01/Katz%20Paper.pdf">Dangers of Modern Cartography&lt;/a> - Dovid Katz&lt;/p>&lt;/blockquote>
&lt;p>China and Chinese has many names: 9 states (九州), Middle Country (中国), Flourishing and Grand (华夏), China (支那, offensive today!), all Xias (诸夏, perhaps similar to &amp;ldquo;all Ruses&amp;rdquo; for the Eastern Slavs), under Heaven (天下), Magnificence 华&amp;hellip; Some stress the physical place, others a civilized nature or importance. But what happens if the people and place are &lt;a href="https://en.wikipedia.org/wiki/Hua%E2%80%93Yi_distinction">no longer &amp;ldquo;civilized&amp;rdquo;&lt;/a>? Well, the neighboring rulers in (what&amp;rsquo;re now) Korea, Vietnam &amp;amp; Japan may call themselves Magnificence or (little) Middle Kingdom instead, asserting that they now hold the &lt;a href="https://en.wikipedia.org/wiki/Little_China_(ideology)">mantle&lt;/a> of civilization.&lt;/p>
&lt;p>But remember, people &lt;em>do&lt;/em> understand these terms! They &lt;a href="https://en.wikipedia.org/wiki/Closure_(computer_programming)">close over&lt;/a> and preserve old senses, old versions of language, most evident in fossil words like &amp;ldquo;fro&amp;rdquo;, &amp;ldquo;eke&amp;rdquo;, &amp;ldquo;kith&amp;rdquo;, &amp;ldquo;bated&amp;rdquo; only used in a single set phrase: &amp;ldquo;to and fro&amp;rdquo;, &amp;ldquo;eke out&amp;rdquo;,&amp;ldquo;kith and kin&amp;rdquo;, &amp;ldquo;with bated breath&amp;rdquo;. We see it with grammar too: &lt;code>hell hath no furry&lt;/code> preserving the &lt;a href="https://alexalejandre.com/languages/archaic-english/">archaic&lt;/a> &lt;code>hath&lt;/code> for &lt;code>has&lt;/code>.&lt;/p>
&lt;h3 id="apis--dsls---intentional-languages">APIs &amp;amp; DSLs - Intentional Languages&lt;/h3>
&lt;blockquote>
&lt;p>Cool story bro, but how does it help me with my sprint review tomorrow?&lt;/p>&lt;/blockquote>
&lt;p>Just think about your API endpoints. Sure, the URL you&amp;rsquo;re on right now is simple, quasi exposing its file system: &lt;code>https://alexalejandre.com/languages/coupling-language-and-geography&lt;/code> But dynamic sites often devolve into vague gibberish like &lt;code>/watch?v=fxqIrTLRBoE&amp;amp;list=PLBCINLbRAJXk9lvxxS0nJ2CYAXPRO4CQG&amp;amp;index=2&lt;/code> We can do better.&lt;/p>
&lt;p>If a url isn&amp;rsquo;t just a simple location, but an operation (DB call, money transfer, messenger pigeon delivery), how can you make it logical, intuitive, composable? By consciously designing its grammar and vocabulary! Relying on English speaker&amp;rsquo;s intuition:&lt;/p>
&lt;ul>
&lt;li>&lt;code>noun/verb/noun&lt;/code>&lt;/li>
&lt;li>&lt;code>location/noun/verb&lt;/code>&lt;/li>
&lt;li>&lt;code>verb/noun/details&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Perhaps your scheme permits plurals for batch jobs:&lt;/p>
&lt;ul>
&lt;li>&lt;code>give/me/newest/posts/&lt;/code>&lt;/li>
&lt;li>&lt;code>give/me/posts/from/last-year&lt;/code>&lt;/li>
&lt;li>&lt;code>give/server/data/to-upload&lt;/code>&lt;/li>
&lt;li>&lt;code>give/you/post/new&lt;/code>&lt;/li>
&lt;li>&lt;code>give/you/post/edited&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>English has: &lt;code>noun verb indirect-object direct-object&lt;/code> (I gave the dog a treat) or &lt;code>noun verb direct-object --to indirect object&lt;/code> (I gave a treat to the dog). We can use adverbs perhaps using &lt;code>?&lt;/code> keywords etc. For concrete examples, let&amp;rsquo;s look at CLIs:&lt;/p>
&lt;ul>
&lt;li>&lt;code>kubectl get pods&lt;/code>&lt;/li>
&lt;li>&lt;code>kubectl describe -n namespace resourcetype/resourcename&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>&lt;code>(name) veb noun details&lt;/code> while &lt;code>use (name) noun verb&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>docker image ls&lt;/code>&lt;/li>
&lt;li>&lt;code>docker node update nodeID...&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>At first, (name) verb noun seems clearer, subject verb object like English! But is it? Which is better: &lt;code>exercise fetch dog --ball&lt;/code> or &lt;code>exercise I walk dog --in park&lt;/code>? (Perhaps we should name this CLI &amp;ldquo;ToExercise&amp;rdquo;!) &lt;a href="https://uxdesign.cc/user-experience-clis-and-breaking-the-world-baed8709244f">Here&lt;/a>&amp;rsquo;s a case study:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/kubectl.webp" alt="chart">&lt;/p>
&lt;p>Coupling your API to English usage (&amp;ldquo;intuitive&amp;rdquo; due to existing familiarity) seems elegant, but is a complecting hope if done naively. After all, what API would ever use conjugation? &lt;code>I walk dog&lt;/code> but &lt;code>he walks dog&lt;/code>?!&lt;/p>
&lt;p>Inspired by languages with cases like Russian or Turkish, you could use keywords or query strings to mark grammatical purpose: &lt;code>ToExercise :subject I :verb walk :object dog :indirect-object grandma :in park :at 7&lt;/code> or &lt;code>ToExercise :nominative I :what throw :accusative dog&lt;/code> To push it further, in &lt;a href="https://gleam.run/">Gleam&lt;/a>, you can use filler to write: &lt;code>replace( in string: &amp;quot;the cat is black&amp;quot;, each pattern: &amp;quot;cat&amp;quot;, with replacement: &amp;quot;dog&amp;quot;)&lt;/code> or just &lt;code>replace(in: &amp;quot;the cat is black&amp;quot;, each: &amp;quot;cat&amp;quot;, with: &amp;quot;dog&amp;quot;)&lt;/code>.&lt;/p>
&lt;p>Intuition helps most when you expect your users to rarely use your API. If, however, users will use your API daily, a consistent, transparent system is easier to master and keep in your head, for a slight upfront cost. For Esperanto, Zamenhof made a single present tense verb ending &lt;code>-s&lt;/code> and an object marker &lt;code>-n&lt;/code>. Suffixes, however, don&amp;rsquo;t work as flags/keywords (and &lt;code>ToExercise I walk --s dog --n&lt;/code> is terrible!)&lt;/p>
&lt;p>For more exotic ideas, for &lt;code>/details&lt;/code> (or flags) why not give your API a &lt;code>quickly cargo build&lt;/code> to skip some optimizations and compile faster or &lt;code>cheaply store --on cloud&lt;/code> for cheaper cold storage?&lt;/p>
&lt;p>Non-linguistic concerns matter too. If your nouns support all verbs, verb first makes more sense and vice versa. Verb first allows you to chain objects (compare Lisp &lt;code>(add 1 2 3 4 5)&lt;/code> to &lt;code>1 + 2 + 3 + 4 + 5&lt;/code>.)&lt;/p>
&lt;h3 id="changing-gracefully">Changing Gracefully&lt;/h3>
&lt;p>While human languages organically deal with obsolescence, managing backwards compatibility or breaking changes in APIs is a deliberate balancing act with trade offs. The standard lib is where Python packages go to die and fixing Linux capabilities would break userland. On the other hand, BSD accepted the pain of breaking userland and Rust foregoes a large standard library for mortal packages. How do we choose?&lt;/p>
&lt;p>We don&amp;rsquo;t avoid coupling, but practice cohesion, &lt;a href="https://web.archive.org/web/20230809171022/https://loup-vaillant.fr/articles/physics-of-readability">essential&lt;/a> for abstraction and comprehension, judiciously coupling things which will evolve together. Merely behaving alike right now is insufficient, they must change together. As an example, we might factor &lt;code>3cat + 3dog + 3bird&lt;/code> to &lt;code>3(cat+dog+bird)&lt;/code>. If 3 is a true, stable relationship (they always come in 3s), we have simplified. If 3 is just a coincidence, we&amp;rsquo;ve complected the system and specifying 4 dogs will imply 4 cats and birds, because of a superficial similarity at one point in time.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>If&lt;/strong> your nouns support all verbs&amp;hellip;&lt;/p>&lt;/blockquote>
&lt;p>That was a load bearing if. Coupling is an act of faith and (hopefully informed) belief about your domain&amp;rsquo;s future.&lt;/p>
&lt;blockquote>
&lt;p>Maybe it does not make sense to talk about some thing called “software architecture”. Instead we should talk about “structural decomposition of systems”, “decision documents”, “behavior descriptions” or whatever else an architect might produce. None of these is necessary to exist when we build large systems although they might help. Maybe what we call “architecture” is just pareidolia. - &lt;a href="https://lobste.rs/~qznc">qznc&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Thankfully, there are some patterns. Human languages recognize common sound changes. &lt;a href="https://en.wikibooks.org/wiki/Conlang/Intermediate/History/Common_sound_changes">8&lt;/a>, &lt;a href="https://conlang.stackexchange.com/questions/1792/what-are-the-most-common-sound-changes-in-natlangs">9&lt;/a>, &lt;a href="http://www.amazon.com/Evolutionary-Phonology-Emergence-Sound-Patterns/dp/0521804280">10&lt;/a>, &lt;a href="https://www.reddit.com/r/conlangs/comments/3gf8mu/a_guide_to_sound_changes/">11&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://doriantaylor.com/the-specificity-gradient">The more specific, the more brittle&lt;/a>. The more general, the more stable. Concerns evolve/decay at different speeds, so do not couple across &lt;a href="https://www.youtube.com/watch?v=HTSbtM12IZw">shearing layers&lt;/a>. Notice how grammar/phonology (structure) changes slowly while vocabulary (functions, services) changes faster.&lt;/p>
&lt;ul>
&lt;li>language (syntax/runtime) is stable&lt;/li>
&lt;li>domain models evolve slowly&lt;/li>
&lt;li>UI, integrations, features change quickly&lt;/li>
&lt;/ul>
&lt;p>Coupling across layers invites trouble (e.g. encoding business logic with &amp;ldquo;intuitive&amp;rdquo; names reflecting transient understanding). When requirements shift (features, regulations), library maintainers introduce breaking changes or new processor architectures appear, our stable foundations, complected with faster-moving parts, still crack! Because of &lt;a href="https://en.wikipedia.org/wiki/Redundancy_(linguistics)">redundancy&lt;/a>, human languages have it easier. While a mispronounced word rarely causes a problem, a single wrong character can break a program.&lt;/p>
&lt;h3 id="towards-a-calculus-of-change">Towards a Calculus of Change&lt;/h3>
&lt;p>Linguists have tried to quantify language change with mixed success (&lt;a href="https://en.wikipedia.org/wiki/Glottochronology">glottochronology&lt;/a>, &lt;a href="http://starling.rinet.ru/new100/main.htm">lexicostatistics&lt;/a>.) We too lack a robust framework for code decay/enspaghettification. &lt;a href="https://connascence.io/">Connascence&lt;/a> offers a taxonomy of coupling, but the dynamics behind evolution and decay remain shrouded in mystery.&lt;/p>
&lt;p>What if we could identify where a coupling in our code has &lt;a href="https://en.wikipedia.org/wiki/Drift_(linguistics)">drifted&lt;/a> into the misleading or meaningless? Perhaps answers lie in the thousands of years of history, of data of how humans name, couple and misunderstand.&lt;/p>
&lt;p>To some extent, we can! There are many cases where 2 systems or notations don&amp;rsquo;t correspond but require judgement or further context to disentangle (English has 2 present tenses, Russian 1) or even encode totally different information, possible unknowable to a translator the Russian past tense marks gender makes past from gender, while English&amp;rsquo;s does not. What are these &amp;ldquo;loss zones&amp;rdquo; in programming? How do we bridge them?&lt;/p></content:encoded></item><item><title>Incentive Problem in American Justice System</title><link>https://alexalejandre.com/notes/incentives-in-usa-justice-system/</link><pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/notes/incentives-in-usa-justice-system/</guid><description>Swiftness and certainty of punishment beats severity, the American system focuses on severity. No US court gives speedy trials (violating Model Time Standards).</description><content:encoded>&lt;p>Summarizing John Fawkes&amp;rsquo; &lt;a href="https://darrellowens.substack.com/p/the-incentive-problem-at-the-heart">article&lt;/a>:&lt;/p>
&lt;p>Swiftness and certainty of punishment beats severity, the American system focuses on severity. No US court gives speedy trials (violating Model Time Standards).&lt;/p>
&lt;blockquote>
&lt;p>average number of judges and prosecutors, one-third fewer police officers per capita, 2.5 times as many corrections officers per capita, and four times as many prisoners per capita&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>solve just over half of all homicides, one quarter of robberies, and one in nine burglaries, and just under a third of rapes&lt;/p>&lt;/blockquote>
&lt;p>US money flows into prisons, not courts and police. Of GDP:&lt;/p>
&lt;blockquote>
&lt;p>US spends .75% on police vs .5% on prisons, while the EU spends 1% on police vs .2% on prisons&lt;/p>&lt;/blockquote>
&lt;p>Law enforcement is funded locally (10-15% of budgets come from state and federal grants), prisons on the state level. Courts are also local.&lt;/p>
&lt;blockquote>
&lt;p>Law enforcement is a better solution, but it costs your money. Prison is an inferior solution, but it costs other people’s money.&lt;/p>&lt;/blockquote>
&lt;p>A grand jury, made up of volunteers, mostly retirees, decide to indict defendants, required for federal felonies: &lt;a href="https://slate.com/news-and-politics/1998/08/who-is-a-grand-jury.html#:~:text=As%20a%20result,%20grand%20jurors,the%20unemployed,%20or%20government%20employees">https://slate.com/news-and-politics/1998/08/who-is-a-grand-jury.html#:~:text=As%20a%20result,%20grand%20jurors,the%20unemployed,%20or%20government%20employees&lt;/a>.&lt;/p>
&lt;p>In 1976, Ron DeLord made a Texan Police Union, then helped others increase bargaining power. It was in the 70s that police came to earn good wages, and local governments shifted money to prisons. He wrote: Police Association Power, Politics, and Confrontation: A Guide for the Successful Police Labor Leader&lt;/p>
&lt;p>The author proposes:&lt;/p>
&lt;blockquote>
&lt;p>State governments should provide matching funds to local police and county sheriffs department budgets, in order to make law enforcement cheaper for those governments. At the same time, state governments should charge some percentage of the cost of incarcerating offenders to the local or county jurisdiction which sentenced those offenders.&lt;/p>&lt;/blockquote></content:encoded></item><item><title>Notes on Persianate India</title><link>https://alexalejandre.com/languages/persian-in-india/</link><pubDate>Tue, 11 Mar 2025 02:19:21 -0400</pubDate><guid>https://alexalejandre.com/languages/persian-in-india/</guid><description>In the 1820s, the East India Company replaced Persian with English</description><content:encoded>&lt;p>Though haphazard and unconfidently cited, I pray these notes be of interest.&lt;/p>
&lt;h3 id="the-killing-stroke">The Killing Stroke&lt;/h3>
&lt;p>William Adam&amp;rsquo;s &lt;a href="https://en.wikisource.org/wiki/Adam%27s_Reports_on_Vernacular_Education_in_Bengal_and_Behar">Reports&lt;/a> on the State of Education in Bengal (1835-1838) is quite relevant to Persian language education in India. Teachers could instruct scholars in kachahris (court-houses), mosques, and baithak-khanas (drawing rooms) and even from house to house. The school-house could be built by the tea~her, by subscription of the parents or by private individuals, either out of benevolence, or with a view to advancing the cause of their children. He estimated 17 Persian schools in each Murshidabad, Birbhoom and Burdwan districts, with 279 in South Bihar and 234 in Tirhoot:&lt;/p>
&lt;blockquote>
&lt;p>Some unpaid teachers &amp;ldquo;not only instructs gratuitously, but also gives his scholars food and occasionally cloths; three support themselves by farming, of whom two are in possession of lakharj land, and of these one is a retired darogha, a fifth gains his livelihood as a mulla, a sixth instructs gratuitously from religious motives, and the object of the seventh was to keep in recollection his former acquirements. Of the paid teachers, a few only are dependent upon individual patrons, and those patrons are both Hindus and Musalmans; several of the scholars of these salaries teachers receive gratuitous instruction. Some of the patrons and gratuitous teachers are men of great wealth or high characters, and the other, without possessing either of these, are holders of land by the tenure of Ayma which, was apparently regarded in several instances as involving an obligation to give gratuitous instruction.
&amp;hellip;
&amp;ldquo;the number of Akhuns or inferior description of Mohammedans teachers is stated by Dr. Buchanan to have been 66, there being six districts that have none at all. The Persian or Arabic characters are taught without writing them which is made a separate study. By far the greater part of the people who in this district acquire the mastery of reading the Persian character, proceed no further, nor do they attempt to understand what they read. Many, however, study the Persian language, and it is supposed that there are about 1,000 men capable of conducting business by means of it; but in general they have confined their studies merely to the forms of correspondence and law proceedings. Few, indeed, are supposed to be elegant scholars, and none profess to teach the higher parts of Persian literature.&amp;rdquo;
&amp;hellip;
Due to this he considered it &amp;ldquo;unfit for being employed as the medium of instruction to the people&amp;rsquo; and &amp;lsquo;Persian can never be regarded in this country as fit instrument of vernacular instruction&amp;rsquo; because Persian is &amp;lsquo;foreign and unknown for natives&amp;rdquo;. &amp;ldquo;we must tum from the Persian to some of the vernacular dialects, Bengali, Hindi, or Urdu.&amp;rdquo; &amp;ldquo;up the whole, apart from the courts, the Persian language has a very feeble hold upon the district (Nattore in Bengal) and it would not be difficult not merely to substitute English for it, but to make English much more popular.&amp;rdquo;&lt;/p>&lt;/blockquote>
&lt;p>On its later history:&lt;/p>
&lt;blockquote>
&lt;p>In the early part of the century, especially during 1800-1835, prose grew in response to various sets of social and intellectual demands, one of which was the demand for educational or pedagogical material. The demand came from Fort William College, and also from other institutions such as the School Book Society of Calcutta (1817), the Madarsa School Text Book and Vernacular Society (1820), and the Native School and School Book Committee, Bombay (1820). The other stream of demand emanated from the religious and social movements. The Christian missionaries&amp;rsquo; criticism of Hinduism and Indian culture left a deep impact on Indian intellectuals, and they launched various social and religious reform movements on the one hand, and defended their theological ideas on the other. In this debate over what was &amp;lsquo;authentic&amp;rsquo; Indian culture, print played a central role.&lt;/p>
&lt;p>Indian prose writings, free from any foreign intervention, first appeared as religious tracts and works on social problems. The trend started with the publication of Ram Mohan Roy&amp;rsquo;s Persian work Tuhfat-ul-Muwahhidin (1803). Roy wrote against idolatry and also defended the Hindu theological position against Christian criticism. At the beginning of the nineteenth century the Persian apologetic book of Carl Gottlieb Pfander (1803-65), the Mizanu &amp;lsquo;1-Haqq (Balance of Truth), was widely discussed and refuted (discussed in chapter IV). The year 1813 marked yet another important step: the East India Company lifted all restrictions on the proselytism of Christian missionaries and from then, translations on the Bible in vernacular language were printed from Serampore in Bengal. Northern India and especially the Delhi-Agra area, witnessed vivid contests between Christian missionaries and Muslim divines through printed pamphlets and oral debates.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>&amp;ldquo;But the substitution of our language for that of the Mussulman dynasty, would have been to the real advantage of India. The introduction of that language has done for Indian literally nothing; it has improved neither its morals, its philosophy, nor is literature. For Europe the introduction of a foreign language as an object of study, has done every thing; the cultivation of Latin and Greek has refined its taste, raised its literature in the North, and scarcely in Greece itself. But after the cultivation of Persian literature for so many ages, the mental darkness of India is as dense and as palpable as ever.&amp;rdquo; - Friend of India, No. XIII (1825) pg. 388
&amp;hellip;
&amp;ldquo;Persian is as much a foreign language to the people of India as it was a century ago. If the Mussulman dynasty acted rightly in employing the Persian language, it is not equally that we should retain it. It was the language in which they conversed with each other, and in which all their literature was contained. But this is not the case with us; Persian is not the language. in which we converse with each other, nor is it the depository of our literature. To employ of therefore instead of our own is a peculiar hardship on the nation confided to our care. It has been already urged, that it does not place them on. a level; .. it.gives the Mussulman a very great superiority over the Hindoo by continuing the language of his dynasty in all judicial proceedings; but surely under a paternal government, if they are not placed&amp;rsquo;·perfectly on .. a level;&amp;rsquo; the oppressed·are~the· nation· to be exalted, rather than their former oppressors.&amp;rdquo; pg.393&lt;/p>&lt;/blockquote>
&lt;h3 id="sources">Sources&lt;/h3>
&lt;ul>
&lt;li>Persian Print Culture in India: 1780-1880 - Dr. Mehrdad Ramezannia&lt;/li>
&lt;li>Friend of India Quarterly&lt;/li>
&lt;li>Reports on Vernacular Education in Bengall and Behar, Report 3, Persian and Arabic Schools&lt;/li>
&lt;/ul></content:encoded></item><item><title>How to Learn Persian</title><link>https://alexalejandre.com/languages/learn-persian/</link><pubDate>Tue, 11 Mar 2025 00:49:23 -0400</pubDate><guid>https://alexalejandre.com/languages/learn-persian/</guid><description>Learning Tajiki Persian is faster and more eloquent!</description><content:encoded>&lt;h3 id="tldr">tl;dr:&lt;/h3>
&lt;ul>
&lt;li>Baizoyev &amp;amp; Howard&amp;rsquo;s Beginners Guide to Tajiki&lt;/li>
&lt;li>Read Tajik News&lt;/li>
&lt;li>Chat with natives (Iranian, Afghan and Tajik)&lt;/li>
&lt;li>Lambton&amp;rsquo;s Persian Grammar&lt;/li>
&lt;li>Read and chat some more&lt;/li>
&lt;/ul>
&lt;h3 id="learn-persian-in-a-year">Learn Persian in a Year&lt;/h3>
&lt;blockquote>
&lt;p>whoever will study the Persia language according to my plan, will in less than a year be able to translate and to answer any letter from an Indian prince, and to converse with the natives of India, not only with fluency, but with elegance - William Jones&lt;/p>&lt;/blockquote>
&lt;p>The genius and promise of Persian is its simple, welcoming grammar, which ties a wide vocabulary and arcane orthographies into a thousand years of sublime literature.&lt;/p>
&lt;p>To speak Persian is easier than Spanish, but to read harder than Latin. The Arabic script is simple enough, with 32 letters, learnable in a day. Yet the lay opinion is correct, the script is the student&amp;rsquo;s biggest hurdle for it leaves half the vowels unmarked and breaks &lt;a href="https://alexalejandre.com/languages/how-to-learn-languages/">my method&lt;/a> of language learning. This means when reading, you must look up nigh every new word to know its pronunciation. In 1792, Edward Moises already &lt;a href="https://alexalejandre.com/languages/old-persian-grammars/">suggested&lt;/a> not trying and just saying e everywhere. But this isn&amp;rsquo;t the only way:&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/viejY6UZ5Bk?si=EkbLL7H5UVSXAOt0&amp;amp;start=50" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen>&lt;/iframe>
&lt;p>You see, Tajiki Persian uses the Cyrillic alphabet, marking every single vowel letting you read the vast riches of Persian literature, confident in the pronunciation, useful for &lt;a href="https://en.wikipedia.org/wiki/Extensive_reading">extensive&lt;/a> reading and Sprachgefühl. Spoken Tajik (like Afghani) is closer to classical, literary Persian than colloquial Iranian Persian, which e.g. modifies many sound combinations in a consistent way. Either way, the student first learns the literary form then rules for transforming it into colloquial speech (provided by most grammars early on).&lt;/p>
&lt;p>If you want to get your feet wet first, Elwell-Sutton&amp;rsquo;s 1941 Colloquial Persian is the best start, a breezy transliterated introduction teaching the entire spoken language (though lacking dialogues, hence the need for Tajik.)&lt;/p>
&lt;p>Baizoyev &amp;amp; Howard&amp;rsquo;s Beginners Guide to Tajiki is the best start, hands down, although some students may initially want to skip the deeply cultural vocabulary without Western equivalent. If you speak Russian, Самоучитель Таджикского Языка - Махадов or Учебник Таджикского Языка - Ивавнов, Семенова,Хушкадамова are fantastic!&lt;/p>
&lt;p>After either, you may start reading Tajiki FB groups, news sites and PDFs with wiktionary.&lt;/p>
&lt;p>When you feel curious and ready to read the traditional script, Lambton&amp;rsquo;s Persian Grammar explains spelling rules, introduces historical usage etc. like nothing else.&lt;/p>
&lt;p>Finally, Philott&amp;rsquo;s &lt;a href="https://archive.org/details/higherpersiangra032060mbp">Higher Persian Grammar&lt;/a> is the most in depth (English) reference of Persian.&lt;/p>
&lt;h3 id="interesting-sites">Interesting Sites&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://persianlanguageonline.com/courses/">https://persianlanguageonline.com/courses/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.jahanshiri.ir/fa/en/demonstrative-adverb">https://www.jahanshiri.ir/fa/en/demonstrative-adverb&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>Touring Older Persian Grammars</title><link>https://alexalejandre.com/languages/old-persian-grammars/</link><pubDate>Wed, 26 Feb 2025 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/old-persian-grammars/</guid><description>Two hundred years of scholars and adventurers learned and taught Persian to yet more adventurers and scholars</description><content:encoded>&lt;p>For some 200 years, the English and Persianate worlds were in intimate contact. For a long time Englishmen learned Persian; from its first factory at Masulipatnam in 1611, the East India Company used Persian in administration and day to day business. Thus the first English works focused on philological, administrative and diplomatic concerns in India (many authors also wrote on Arabic and Hindustani), but from the 1820s English gradually &lt;a href="https://alexalejandre.com/languages/persian-in-india/">replaced&lt;/a> Persian and interactions with Iran became more important. The Iranian revolution largely cut our worlds apart, with precious few Americans picking up Persian during their Afghan adventure. Today, the number of English speaking Persians is far greater than the few hundred thousand Englishmen in India during the height of colonialism.&lt;/p>
&lt;h3 id="william-jones-grammar---1771">William Jones&amp;rsquo; Grammar - 1771&lt;/h3>
&lt;p>Sir William Jones (1746-94), a &lt;a href="https://en.wikipedia.org/wiki/Puisne_judge">puisne judge&lt;/a> at India&amp;rsquo;s highest court, launched Indo-European studies (alas, van Boxhorn, Çelebi, Coeurdoux and Lomonosov&amp;rsquo;s observations did not have such lasting impact, while Bopp, Young, Malte-Brun etc. referred to Jones&amp;rsquo;.)&lt;/p>
&lt;p>In his introduction, he advertises emphatically for the study of Persian:&lt;/p>
&lt;blockquote>
&lt;p>Thus, while the excellent writings of Greece and Rome are studied by every man of a liberal education, and diffuse a general refinement through our part of the world, the works of the Persians, a nation equally distinguished in ancient history, are either wholly unknown to us, or considered as entirely destitute of taste and invention.&lt;/p>&lt;/blockquote>
&lt;p>Interestingly, the libraries of his time had a number of Persian manuscripts:&lt;/p>
&lt;blockquote>
&lt;p>strange &amp;hellip; that the fine productions of a celebrated nation should remain in manuscript upon the shelves of our public libraries, without a single admirer who might open their treasures to his countrymen, and display their beauties to the light &amp;hellip; admired, like the characters on a Chinese screen, more for their gay colours than for their meaning.&lt;/p>&lt;/blockquote>
&lt;p>He goes into detail about the reasons for English engagement with Persian:&lt;/p>
&lt;blockquote>
&lt;p>dangerous to employ the natives as interpreters, upon whose fidelity they could not depend; and it was at last discovered, that they must apply themselves to the study of the Persian language&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>languages of Asia will now, perhaps, be studied with uncommon ardour; they are known to be useful, and will soon be found instructive and entertaining&lt;/p>&lt;/blockquote>
&lt;p>He gives advice on learning the language with a &amp;ldquo;munshi&amp;rdquo; (in EIC usage, scribe or language tutor, but also administrator and scholar) and reading texts with such a guide to explain troublesome phrases and native allusions.&lt;/p>
&lt;p>Pedagogy:&lt;/p>
&lt;blockquote>
&lt;p>endeavoured to lay down the clearest and most accurate rules, which I have illustrated by select examples from the most elegant writers&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>whoever will study the Persia language according to my plan, will in less than a year be able to translate and to answer any letter from an Indian prince, and to converse with the natives of India, not only with fluency, but with elegance.&lt;/p>&lt;/blockquote>
&lt;p>The editors vowelled all words in my (9th) edition, a sadly not universal habit.&lt;/p>
&lt;p>Like most following works, the second half comprises with an &amp;ldquo;Abstract of the Arabick Grammar&amp;rdquo;:&lt;/p>
&lt;blockquote>
&lt;p>Since one of the nouns in a compound word is often borrowed from the Arabick, a man who wishes to read the Persian books with satisfaction, ought to have a competent knowledge of both languages.&lt;/p>&lt;/blockquote>
&lt;p>??? so he talks about word building at length, here adjectives formed by combining verbs with nouns (of which we get 3 pages):&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Jones-2.png" alt="Cool adjectives built from verbs and nouns">&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Jones-3.png" alt="Cool adjectives built from nouns and participles">&lt;/p>
&lt;p>The editor of my (9th) edition (from 1828) modified the appendix on Persian prosody:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Jones-1.png" alt="Persian prosody">&lt;/p>
&lt;p>The author himself cared greatly for about poetry as the core of a nation&amp;rsquo;s unique genius, as you can see in his &lt;a href="https://archive.org/details/poemsconsistingc00joneiala/page/162/mode/2up">essays&lt;/a> and published translations from many languages.&lt;/p>
&lt;p>The editor Samuel Lee considers the Urdu شرح قصیدةء جوهر التّركيب by Shiva Ram and Hayder Ali the best Eastern production on Persian Grammar.&lt;/p>
&lt;p>Jones planed a second volume of Persian texts for learners, which never appeared. Rousseau and Moises both produced such companions. Of his 1801 &lt;a href="https://archive.org/details/flowerspersianl00richgoog">Flowers of Persian Literature&lt;/a>, Rousseau writes:&lt;/p>
&lt;blockquote>
&lt;p>Prefaces, in general, are supposed by the greater part of readers to consist of trifling passages, or an useless display of eloquence, and are therefore not considered as of sufficient importance to deserve perusal : but this is an egregious mistake; for in the prefatory discourse, the author feels it a duty to incumbent upon himself, to acquaint the world with the nature of his work, the reasons which induced him to undertake it, and his motives for laying it before the public.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>&amp;hellip;a want of proper books for the instruction of his pupils. This is an obstacle which every gentleman hitherto engaged as a Persian master, has loudly complained of, but not one of them has attempted to obviate it.&lt;/p>&lt;/blockquote>
&lt;p>Most interestingly, the final third provides a diachronic view of Persian:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Rousseau-1.png" alt="Extracts from Persian Authors">&lt;/p>
&lt;p>Rev. Edward Moises&amp;rsquo; 1792 &lt;a href="https://books.google.com/books?id=O3lHAAAAYAAJ&amp;amp;printsec=frontcover&amp;amp;source=gbs_ge_summary_r&amp;amp;cad=0#v=onepage&amp;amp;q&amp;amp;f=false">Persian Interpreter&lt;/a> likewise defers to Jones, just “intended to remove some impediments” by providing texts and vocabulary. His redundantly florid and flowery preface extols the unknown advantages of Persian on literary (not professional grounds):&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Moises-1.png" alt="Persian&amp;rsquo;s unknown">&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Moises-2.png" alt="Persian&amp;rsquo;s beautiful">&lt;/p>
&lt;p>With what imagery he decries the wont of instructional material:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Moises-3.png" alt="Moises writes beautifully">&lt;/p>
&lt;p>He does not dot texts, rather elides their need: As it&amp;rsquo;s &amp;ldquo;difficult to distinguish with precision the sound of one short vowel from another&amp;rdquo;, substitute &amp;ldquo;the Italic &lt;em>e&lt;/em>&amp;rdquo; and &amp;ldquo;the most perplexing part of the Asiatic languages will be rendered extremely simple&amp;rdquo;! This is actually fantastic advice: Instead of focusing on what you can&amp;rsquo;t (efficiently) know, focus on what you can know and learn it. Uncertainty &amp;ldquo;will no longer affright [you] with an imaginary difficulty&amp;rdquo; and you can fill in the gaps later. in programming terms: &lt;em>Assume your environment and invariants are the ones which let you code right now.&lt;/em>&lt;/p>
&lt;p>Along these lines, Moises recommends many learning strategies to enable progress by ignoring difficult or tedious parts until later. In his day, this was particularly useful as the skeleton of Greco-Latin grammar blinded many students. He sometimes uses an interlinear approach:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Moises-6.png" alt="Moises uses Hamiltonian method">&lt;/p>
&lt;h3 id="meerza-mohammad-ibraheems-grammar---1841">Meerza Mohammad Ibraheem&amp;rsquo;s Grammar - 1841&lt;/h3>
&lt;ul>
&lt;li>An Iranian, finding himself in England in 1841,&lt;/li>
&lt;li>dedicated to the Directors of the East-India Company&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>I, a native of Persia, undertake to communicate the elements of Persian Grammar to English Students, in an English dress.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>No native of any Eastern country has hitherto attempted to exhibit the structure, genius, and idiomatic phraseology of his own language, through the medium of any European dialect.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>&amp;hellip;after my arrival in England I had the honour of an appointment at the East-India College. At that time I was an entire stranger to the English tongue. &amp;hellip; [to learn English] I had recourse to the Elementary Works composed by the English Orientalists, for the express purpose of teaching Persian to English Students; in order that, by reversing the process, I might become a learner of English&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>The only extant Persian Grammars are those compiled by European Authors; few of whom have ever visited the people whose language they undertake to teach&lt;/p>&lt;/blockquote>
&lt;p>Until this, all works were made by scholars or Englishmen having served in India, learning from Indian masters (using Afghan Persian.)&lt;/p>
&lt;blockquote>
&lt;p>I seek to teach &lt;em>the Persian of Persians&lt;/em>; &amp;ndash;not the Persian only of &lt;em>books&lt;/em>. &amp;hellip;by those classes of native Persians who speak the language in its greatest purity.&lt;/p>&lt;/blockquote>
&lt;p>The other feels great need to repeat that he does not reject the European Persianists before him:&lt;/p>
&lt;blockquote>
&lt;p>must not however be imagined, that this statement is offered with the slightest intention to underrate the labours, or disparage the acquirements, of the Orientalists who have preceded me.
if I should be found in any degree to have advanced beyond them, it will, in part, be owing to the instruction I have derived both from their merits and their failures
I have not sought to supersede, but to assist, the philological labours of others.
Their works are not rendered less useful by mine&lt;/p>&lt;/blockquote>
&lt;p>On pedagogy:&lt;/p>
&lt;blockquote>
&lt;p>I have endeavoured to lay down a more correct and simple system of Verbs and their Conjugations than is adopted in the works of my European predecessors&lt;/p>&lt;/blockquote>
&lt;p>His dialogues serve as examples of syntax, for close study, they are not instructional textbook dialogues to learn the language from.&lt;/p>
&lt;blockquote>
&lt;p>[eight 10+ page dialogues with] an English Gentleman, who has acquired a competent knowledge of the language of Persia, and is traveling in that country for improvement; and a native Persian friend, who has also resided long enough in England to be able to converse with facility in English. The former occasionally makes mistakes, which the latter corrects;&amp;ndash;and an opportunity is thus afforded of exemplifying some of the Rules&lt;/p>&lt;/blockquote>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Ibrahim-3.png" alt="Persian dialogue">&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Ibrahim-4.png" alt="Persian dialogue">&lt;/p>
&lt;blockquote>
&lt;p>Vowel or Diacritical Points have been used throughout&lt;/p>&lt;/blockquote>
&lt;p>Vocabulary is simplify given as vowelled Persian with English:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Ibrahim-1.png" alt="Persian prepositions">&lt;/p>
&lt;p>Many small dialogues to illustrate grammatical points:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Ibrahim-2.png" alt="Persian dialogue">&lt;/p>
&lt;h3 id="duncan-forbes-1798-1868">Duncan Forbes (1798-1868)&lt;/h3>
&lt;p>After 4 years in India, his weak constitution led him to become a professor, writing many language manuals for future East Indian civil servants.&lt;/p>
&lt;p>A rather short &lt;a href="https://archive.org/details/in.ernet.dli.2015.180725">grammar&lt;/a> &amp;ldquo;confined entirely to its legitimate purpose &amp;ndash; the instructing of beginners&amp;rdquo;:&lt;/p>
&lt;blockquote>
&lt;p>the student will here find all the information of any consequence contained in larger volumes&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>those gallant bands of British Youth, who annually resort to India, destined to become, in their turn, the guardians of our Eastern Empire, an acquaintance with Persian is of the utmost importance. In the first place, it is the Court language of the Musulman Princes, and that of the higher classes generally&lt;/p>&lt;/blockquote>
&lt;p>Curiously:&lt;/p>
&lt;blockquote>
&lt;p>To the traveller in the East, a knowledge of it is as essential as that of the French used to be in Europe.&lt;/p>&lt;/blockquote>
&lt;p>Had English already gained preeminence?&lt;/p>
&lt;h3 id="bleecks-concise-grammar-1857">Bleeck&amp;rsquo;s Concise Grammar 1857&lt;/h3>
&lt;p>Bleeck (1829-77) wrote on Turkish, Persian and Avestan. Directionally a textbook, he states &lt;a href="https://books.google.com/books?id=vroOAAAAQAAJ&amp;amp;printsec=frontcover&amp;amp;source=gbs_ge_summary_r&amp;amp;cad=0#v=onepage&amp;amp;q&amp;amp;f=false">this work&lt;/a> should &amp;ldquo;contain a greater variety of information&amp;rdquo; &amp;ldquo;since all other Grammars are deficient, either in Reading Lessons, or Dialogues, or both&amp;rdquo;:&lt;/p>
&lt;blockquote>
&lt;p>Mirza Ibrahím&amp;rsquo;s are wholly unsuited to the beginner, and of very little use to the more advanced student, their avowed object being to teach not so much &lt;em>conversation&lt;/em> as &lt;em>syntax&lt;/em>.&lt;/p>&lt;/blockquote>
&lt;p>Rather uniquely, Bleck concretely justifies (with uncomfortable comparisons) why Persian literature should interest:&lt;/p>
&lt;blockquote>
&lt;p>the student will no doubt greatly prefer a few tangible names to any vague declarations of the &amp;lsquo;richness of Persian literature,&amp;rsquo; &amp;lsquo;its extensive and hitherto undeveloped resources,&amp;rsquo; etc.&lt;/p>&lt;/blockquote>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Bleeck-1.png" alt="Bleeck feels forced make cross cultural comparisons">&lt;/p>
&lt;p>Of pedagogy, it presents a &amp;ldquo;New Plan for Facilitating the Study of Languages&amp;rdquo;. Permit me a digression into his discussion of existing pedagogical methods. The dictionary process:&lt;/p>
&lt;blockquote>
&lt;p>there are few words (especially in Greek, Latin, Arabic, Persian, or Sanskrit) which have not at least three different significations; and it must be a very simple sentence of which you can determine the meaning without carrying four words in your head at once. Suppose, then, that the first meaning of each word happens to make no sense, as is frequently the case; you must not only burden your memory with twelve different meanings (for of course you cannot tell which of them may be wanted), but, since the four words may combine with one another in any possible manner, you will have no less than eighty-one distinct combinations&amp;hellip; So much for the dictionary process.&lt;/p>&lt;/blockquote>
&lt;p>I interrupt the quote for context: In the 1820s, James Hamilton began to teach classical languages through interlinear translation, which appear in early Hugos, Berlitzes, Trübners Simplified Grammars. (I personally prefer the dual text approach (like Assimil or Rousseau above).)&lt;/p>
&lt;blockquote>
&lt;p>The Hamiltonian &amp;hellip; posses an advantage &amp;hellip; of speed; but are liable to the grave charge of inaccuracy &amp;hellip; leave the student in ignorance of gender, declension, and conjugation &amp;hellip; the Latin verb &lt;em>fero&lt;/em> means properly &amp;rsquo;to bear &lt;em>or&lt;/em> carry,&amp;rsquo; but it very often occurs in the sense of &amp;rsquo;to relate&amp;rsquo; (besides other meanings):&amp;ndash; now, if the learner finds sometimes one meaning and sometimes the other, and sometimes a third or fourth, he will be wholly unable to say which is the primary and which the secondary meaning of the word, and must have recourse to a dictionary after all.&lt;/p>&lt;/blockquote>
&lt;p>His own system? &lt;span class="marginnote">He states Falck Lebahn&amp;rsquo;s system approaches his&lt;/span> Perhaps anti-climatic:&lt;/p>
&lt;blockquote>
&lt;p>Let the text of the foreign language be printed on one page, and on the opposite page let there be a dictionary of all the words contained in the text; the plan of the dictionary to be this:&amp;ndash; First, the &lt;em>root&lt;/em> meaning of each word to be given, and next the meaning which is required to make sense in the particular passage where the word occurs. If this be properly done, you have really and truly a &amp;lsquo;Magic Dictionary;&amp;rsquo; &amp;hellip; the vocabulary may be arranged &amp;hellip; [as required e.g. in a Latin line&amp;rsquo;s order]&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Grammatical notes may also be added &amp;hellip; sparingly &amp;hellip; to call the attention of the pupil to some peculiarity of construction, than to encumber him with a load of rules.&lt;/p>&lt;/blockquote>
&lt;p>Simple, but fair. My favorite textbooks, the 2nd generation Colloquials, simply put the lesson&amp;rsquo;s vocabulary at the end of a 1-2 page text, followed by the lesson&amp;rsquo;s new grammar. (I consider this approach superior to his, whose the English translation is rather disappointing (see the examples below).)&lt;/p>
&lt;blockquote>
&lt;p>to reap the full advantages of my system, it would be desirable that the complete works of several authors &amp;hellip; should be printed with the interleaved dictionary&lt;/p>&lt;/blockquote>
&lt;p>To my knowledge, the closest work in extent (though wanting to student friendliness and formatting) is Newmark, Prifti &amp;amp; Hubbard&amp;rsquo;s &lt;a href="http://files.eric.ed.gov/fulltext/ED195133.pdf">Readings in Albanian&lt;/a>.&lt;/p>
&lt;p>A forward-thinker, he proposes statistically constructed chrestomathies:&lt;/p>
&lt;blockquote>
&lt;p>advisable to point out certain selections which might be made in the different languages, calculated to furnish the student with an extensive supply of words; and to do this we must examine a little into what may be termed the &lt;em>Statistics&lt;/em> of language. As a general rule, when you thoroughly acquainted with ten thousand words of a language, you can read any book in it with only occasional reference to a dictionary.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>the entire writings of Virgil only contain about seven thousand different words, and those of Horace a similar number; though, owing to the great diversity between their respective subjects, Horace has about one thousand words which are not met with in Virgin, and &lt;em>vice versa&lt;/em>. Thus, with eight thousand words&amp;hellip;&lt;/p>&lt;/blockquote>
&lt;p>In those days, many culture&amp;rsquo;s cannons stood strong:&lt;/p>
&lt;blockquote>
&lt;p>As to the modern languages of Europe, the standard writers in each are so well known that it would be superfluous to mention their names; and any one desirous of compiling a Chrestomathy, whether in German, Italian, or Spanish, will be at no loss how to make a useful selection&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Orientalists map, perhaps, be divided in their opinions as to the precise nature of the selections which it would be best to make in the respective languages, but in lieu of better:&lt;/p>&lt;/blockquote>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Bleeck-3.png" alt="Bleeck proposes Chrestomathy authors">&lt;/p>
&lt;p>While this &amp;ldquo;Concise Grammar&amp;rdquo; itself applies this method (at less length) to Persian, Bleeck furnished 14 examples:&lt;/p>
&lt;ul>
&lt;li>
&lt;details id="armenian">
&lt;summary>Armenian&lt;/summary>
&lt;img src="https://alexalejandre.com/images/persian-textbooks/Bleeck-4.png" alt="An example in Armenian">
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="georgian">
&lt;summary>Georgian&lt;/summary>
&lt;p>This was the first Georgian printed in England:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Bleeck-5.png" alt="An example in Georgian">&lt;/p>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="latin">
&lt;summary>Latin&lt;/summary>
&lt;img src="https://alexalejandre.com/images/persian-textbooks/Bleeck-6.png" alt="An example in Latin">
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="persian">
&lt;summary>Persian&lt;/summary>
&lt;img src="https://alexalejandre.com/images/persian-textbooks/Bleeck-8.png" alt="An example in Persian">
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="russian">
&lt;summary>Russian&lt;/summary>
&lt;img src="https://alexalejandre.com/images/persian-textbooks/Bleeck-7.png" alt="An example in Russian">
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="swedish">
&lt;summary>Swedish&lt;/summary>
&lt;img src="https://alexalejandre.com/images/persian-textbooks/Bleeck-9.png" alt="An example in Swedish">
&lt;/details>&lt;/li>
&lt;/ul>
&lt;p>A most interesting remark:&lt;/p>
&lt;blockquote>
&lt;p>&amp;hellip;works as are more particularly deserving the attention of the learner; noting at the same time whether they exist in print, or only in MS.&lt;/p>&lt;/blockquote>
&lt;p>Perhaps the understanding was any student would be at one of the great universities of Europe with enough manuscripts handy, or in India with a munshi at hand.&lt;/p>
&lt;h3 id="palmers-dictionary-and-grammars-1882">Palmer&amp;rsquo;s Dictionary and Grammars 1882&lt;/h3>
&lt;p>Orphaned son of a schoolmaster, Palmer (1840-82) picked up Romani as a child. Later a London clerk, he learned French and Italian, by rubbing elbows with the foreigners he could find. After befriending Cambridge Hindustani professor Abdallah in 1860, he dove into orientalist studies (and later law), with Middle Eastern adventures and books interspersed.&lt;/p>
&lt;p>Furthering the all too common typical conceit of finishing a Persian grammar with a treatment of Arabic&amp;rsquo;s, his 1882 &lt;a href="https://archive.org/details/simplifiedgramm01palmgoog">Grammar of Hindustani, Persian and Arabic&lt;/a>, by prepending the work with Hindustandi!&lt;/p>
&lt;blockquote>
&lt;p>concise but practical introduction to the various languages, and at the same time to furnish students of comparative philology with a clear and comprehensive view of their structure&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>The attempt to adapt the somewhat cumbrous grammatical system of the Greek and Latin to every other tongue has introduced a great deal of unnecessary difficulty into the study of languages.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Where this proves impossible the difficulty is met by lists of exceptions and irregular forms, thus burdening the pupil&amp;rsquo;s mind with a mass of details of which he can make no practical use.&lt;/p>&lt;/blockquote>
&lt;p>Palmer was able to present a rather ground-breaking work:&lt;/p>
&lt;blockquote>
&lt;p>[instead] the structure of each language is carefully examined, and the principles which underlie it are carefully explained; while apparent discrepancies and so-called irregularities are shown to be only natural euphonie and other changes. All technical terms are excluded unless their meaning and application is self-evident&lt;/p>&lt;/blockquote>
&lt;p>His audience, of course:&lt;/p>
&lt;blockquote>
&lt;p>specially adapted for the requirements of Candidates for the Indian Civil Service and for the various Military and Civil Examinations in India.&lt;/p>&lt;/blockquote>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Palmer-3.png" alt="Less regular stems">&lt;/p>
&lt;p>Later that year, raiders robbed and killed Palmer and 2 companions, on mission to Egypt (described below), so his friend le Strange took over his final work &lt;a href="https://archive.org/details/concisedictionar0000palm">Concise Dictionary&lt;/a> (prepending Palmer&amp;rsquo;s Persian grammar).&lt;/p>
&lt;blockquote>
&lt;p>1880, Professor Palmer had shown me many bundles of these slips, and fortunately then explained to me the method he intended to pursue&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>The basis of the work was the First Part, the Persian-English, a copy of which had been cut up, and each paragraph pasted on a separate slip in order that the &lt;em>English&lt;/em> renderings might be arranged alphabetically.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>as in Persian the number of simple verbs is extremely limited, and further, the majority of the Persian compound verbs would only occur in the reversed Dictionary, under the English noun or participle, &lt;em>not&lt;/em> under the more appropriate infinitive: &lt;em>e.g.&lt;/em> &amp;lsquo;To advise&amp;rsquo; would be represented by &amp;lsquo;Advice,&amp;rsquo; because the Persians, to express the verb, make use of the phrase &amp;lsquo;To give advice.&amp;rsquo; &amp;hellip; he intended merely to indicate in its proper place the auxiliary verb to be used with the noun or participle&lt;/p>&lt;/blockquote>
&lt;p>A certain Sorabshaw Byramji Doctor &lt;a href="https://archive.org/details/studentspersian00unkngoog">reprinted&lt;/a> Palmer&amp;rsquo;s dictionary under his name (with a fake date?), leaving le Strange &amp;ldquo;in vindication of the literary honour of [his] friend&amp;rdquo;:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Palmer-1.png" alt="Vindication">&lt;/p>
&lt;p>This etching of the murders&amp;rsquo; execution says this of Palmer&amp;rsquo;s last days:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Palmer's-Murders'-Execution.png" alt="A hanging">&lt;/p>
&lt;blockquote>
&lt;p>to detach the Arab tribes from the side of Arabi Pasha, the nationalist leader, and to use his influence, backed by English gold, with the sheikhs of the Bedouin, to secure the immunity of the Suez Canal from Arab attack &amp;hellip; On 8 August he set out to meet the leading sheikhs to arrange the final terms of their allegiance. &amp;hellip;. He took a naval officer, Flag-Lieutenant Harold Charrington, as a guarantee of his official status. Captain William John Gill RE, the traveller, also accompanied him, with the intention of turning aside and cutting the telegraph wire which crossed the desert and connected Cairo with Constantinople. &amp;hellip; They were made prisoners and their baggage was plundered. There was at the time an order out from Cairo for Palmer&amp;rsquo;s arrest, dead or alive; but it is probable that the original motive of the attack was robbery. On the following morning, 11 August, the prisoners were driven about a mile to the Wadi Sudr, between al-‘Arish and Nakhl, and shot, Palmer being the first to die.&lt;/p>&lt;/blockquote>
&lt;p>As an aside, his Simplified Grammar was part of Trübner&amp;rsquo;s series of grammars, which originally sought to heroically cover full language branches or Sprachbünde in single volumes. &lt;span class="marginnote">From this time publishers begin to release series of related books, often treating many languages by the same method&lt;/span>&lt;/p>
&lt;blockquote>
&lt;p>This volume will be followed by Grammars of the Keltic and Slavonic languages and dialects &amp;hellip; The Keltic section will contain Welsch, Gaelic, Irish, and Breton; the Slavonic section will comprise Russian, Polish, Bohemian, Bulgarian; and the Scandinavian section Icelandic, Danish, Swedish, and Norwegian&lt;/p>&lt;/blockquote>
&lt;p>Alas, to the best of my knowledge, none were ever completed. Instead of a treatment of the &amp;ldquo;Slavonic&amp;rdquo; languages, Morfill e.g. wrote a grammar of only &lt;a href="https://archive.org/details/simplifiedgramma00morfuoft">Polish&lt;/a> in 1884, then in 1887 of only &lt;a href="https://archive.org/details/bub_gb_EkYdAAAAMAAJ/page/n3/mode/2up">Serbian&lt;/a> (itself an interesting window into a language still being standardized), both short and their first treatments in English. Otté&amp;rsquo;s Swedish and Danish volumes were likewise published separately. Torceanu&amp;rsquo;s 1883 Roumanian and Harvey&amp;rsquo;s 1890 Spanish grammar exhibit further fragmentation.&lt;/p>
&lt;blockquote>
&lt;p>The student of comparative philology will thus be able to form a correct idea of the structure of the language, and it may serve as a rudimentary handbook to any one who is anxious to read the works of such authors as Mickiewicz and Krasinski in the original.&lt;/p>&lt;/blockquote>
&lt;p>Do note their &amp;ldquo;Hamiltonian&amp;rdquo; interlinear approach:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Morfill-1.png" alt="Interlinear approach">&lt;/p>
&lt;h3 id="platts-1894-grammar">Platts&amp;rsquo; 1894 Grammar&lt;/h3>
&lt;p>Composed from 10 years of lecture material, the author (1830-1904), a professor at Oxford, uses the opposite of Forbes&amp;rsquo; compact, work, perhaps more fully embracing the diachronic philological approach than any other work:&lt;/p>
&lt;blockquote>
&lt;p>The only grammar of Persian that has appeared in England since the year 1860 is that of Forbes; and of that work it may be said, without undue depreciation, that it is now behind the age. &amp;hellip;researches of scholars in Pehlevi, Old Persian, and Zend, has enabled me to correct many notions&lt;/p>&lt;/blockquote>
&lt;p>For example:&lt;/p>
&lt;blockquote>
&lt;p>I have departed entirely from the practice of preceding grammars in endeavouring to treat [the verb&amp;rsquo;s] formation &lt;em>historically&lt;/em>, instead of laying down a number of arbitrary rules&lt;/p>&lt;/blockquote>
&lt;p>For the first time, the audience isn&amp;rsquo;t just the English:&lt;/p>
&lt;blockquote>
&lt;p>To philology I have paid the more attention in the hope that Indian students, whether Hindu or Muhammadan, may be attracted to this study, and realize more fully the intimate relation which exists between their beloved Persian and the sacred language of the Hindus.&lt;/p>&lt;/blockquote>
&lt;p>He handles word building at length:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Platts-3.png" alt="Word building">&lt;/p>
&lt;p>Oddly, he puts vowelled words next to Latin transcriptions, but elsewhere gives undotted words with English translation:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Platts-1.png" alt="Weird">
&lt;img src="https://alexalejandre.com/images/persian-textbooks/Platts-2.png" alt="Weirder">&lt;/p>
&lt;p>His &lt;a href="https://archive.org/details/platts-a-grammar-of-the-hindustani-or-urdu-language-1892/page/n13/mode/2up?view=theater">Hindustrani grammar&lt;/a> sheds further light on his philological project:&lt;/p>
&lt;blockquote>
&lt;p>conclude &amp;ndash; (1) that, much as had been achieved in the field of Urdu Grammar by Europeans (and especially by Englishmen), that field had not been so thoroughly worked but that a great deal might be won from it; (2) that no small portion of the work which had been done was of a kind that afforded room for improvement.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>&amp;hellip;the views propounded are so directly opposed to those maintained by preceding grammarians, that I have felt constrained to support them by foot-notes, remarks, citations from native grammars, and the opinions of native scholars; and thus the work has to some extent assumed a polemical character, for which I consider an apology is due.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>&amp;hellip;succeeded in reducing to rule some constructions which have hitherto been regarded as arbitrary. And here I may be permitted to observe that there is little in the structure of Urdu of the loose and arbitrary character which some recent writers on the grammar of the of the language impute&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>in many instances, native scholars, no doubt, are unable to assign a satisfactory reason for the forms they use; but it is surely inconsequent to conclude from these facts that rules in such cases cannot be discovered, and that native scholars cannot be trusted to compose correctly in their own tongue. That &amp;ldquo;writers are guided by usage rather than by rule, and test the accuracy of a passage by the ear rather than by any recognized law,&amp;rdquo; is, in the main, true. But this practice is by no means confined to Urdu writers&lt;/p>&lt;/blockquote>
&lt;h3 id="st-clair-tisdalls-conversation-grammar---1901">St. Clair-Tisdall&amp;rsquo;s Conversation-Grammar - 1901&lt;/h3>
&lt;p>An Anglican priest, St. Clair-Tisdall published grammars of Persian, Hindustani, Gujarati and Punjabi along with Christian apologetics and essays on Islam.&lt;/p>
&lt;p>Until this point, the best textbook (with lessons, passages and exercises,) his 1902 &lt;a href="https://archive.org/details/modernpersiancon00tisduoft">Modern Persian Conversation-Grammar&lt;/a> employs the &lt;a href="https://www.researchgate.net/publication/338371456_The_Professor_the_Revolutionary_and_the_Schoolmaster_The_origins_of_the_'Method_Gaspey-Otto-Sauer'_for_learning_and_teaching_of_German_English_French_and_other_modern_foreign_language">Gaspey-Otto-Sauer method&lt;/a> and focuses on the Iranian variety:&lt;/p>
&lt;blockquote>
&lt;p>to most Englishmen who have spent any time in India, Persian is known only in its antique form and pronunciation, which are still in large measure retained on the Afghan frontier and in other parts of India. This prevents the student from being intelligible to the natives of Persia&lt;/p>&lt;/blockquote>
&lt;p>The author himself&lt;/p>
&lt;blockquote>
&lt;p>found on endeavouring to enter into conversation with Shirazis in Bombay, that he was almost if not quite unintelligible to them, since many of the words, phrases and idioms he had learnt from the pages of Sa&amp;rsquo;di and other classical Persian authors have been superseded by others in the modern language &amp;hellip; as if a foreigner, having discovered some corner of the world in which English was still spoken by the learned, just as it occurs in the Elizabethan writers and with the pronunciation of that distant day, had learnt the language from them and then tried to converse with the English people of to-day. &amp;hellip; The Civil and Military authorities in England and India now, however, seem to have begun to grasp the fact&lt;/p>&lt;/blockquote>
&lt;p>It has a good selection of handwritten sections in different hands, but employs Latin transcription in vocabularies and grammar sections.&lt;/p>
&lt;p>The 2nd half covers the Arabic element of Persian, along with idioms, polite conversation and Turkishisms.&lt;/p>
&lt;p>The (rather long) exercises look like this:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Clair-Tisdall-1.png" alt="Vocabulary">&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Clair-Tisdall-2.png" alt="Persian text to read">&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Clair-Tisdall-3.png" alt="English to translate into Persian">&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/persian-textbooks/Clair-Tisdall-4.png" alt="Persian dialogue">&lt;/p>
&lt;h3 id="philotts-higher-persian-grammar---1919">Philott&amp;rsquo;s Higher Persian Grammar - 1919&lt;/h3>
&lt;p>Lt Col Dr. Philott (1860-1930) wrote by far the &lt;a href="https://archive.org/details/higherpersiangra032060mbp">most detailed&lt;/a> reference grammar at 900 pages, ever noting differences between Afghan and Modern Persian and featuring 50 pages on rhetoric. I have little to say stands tall on its merits and erudition.&lt;/p>
&lt;p>One sad note:&lt;/p>
&lt;blockquote>
&lt;p>Owing to the War and the consequent loss of manuscript and proofs at sea and to other unfortunate causes, this work has been unduly long in issuing from the Press.&lt;/p>&lt;/blockquote>
&lt;h3 id="elwell-sutton---1941">Elwell-Sutton - 1941&lt;/h3>
&lt;p>Elwell-Sutton&amp;rsquo;s Elementary Persian Grammar and Colloquial Persian are fantastic, condensed books using a Latin transcription to provide a cozy overview of Persian grammar and structure in little more than 100 pages. They introduced me to Persian and I don&amp;rsquo;t know anything more inviting.&lt;/p>
&lt;p>In 1953, right before the coup against Mossadegh, he started Persian Oil: Study in Power Politics (besides our grammars and further books on Persian poetry.) He worked at the Anglo-Persian Oil Company in the 30s (today BP) and wrote about its history from the Knox D&amp;rsquo;Arcy &amp;amp; Reuter concessions on, the history of Britain and Iranian oil. Elwell-Sutton&amp;rsquo;s the first anti-colonialist author, discussing economic exploitation etc. but saw and documented the reaction too, publishing in 1955.&lt;/p>
&lt;h3 id="lambton---1953">Lambton - 1953&lt;/h3>
&lt;p>Lambton played a direct role in that very coup, recommending no compromise with Mossadegh:&lt;/p>
&lt;blockquote>
&lt;p>Professor Lambton, serving as a Foreign Office consultant, advised as early as November 1951 that the British government should persevere in &amp;lsquo;undermining&amp;rsquo; Mossadeq, refuse to reach an agreement with him, and reject American attempts to find a compromise solution. &amp;lsquo;The Americans,&amp;rsquo; She insisted, &amp;lsquo;do not have the experience or the psychological insight to understand Persia.&amp;rsquo; - Khomeinism - Abrahamian&lt;/p>&lt;/blockquote>
&lt;p>She worked on the response too:&lt;/p>
&lt;blockquote>
&lt;p>suggesting &amp;rsquo;effective lines of propaganda&amp;rsquo; that the British might use to turn the Iranian public opinion against Mossadegh. - All the Shah&amp;rsquo;s Men - Kinzer&lt;/p>&lt;/blockquote>
&lt;p>Her Persian grammar is a rigorous guide, covering historical usage in depth, with the occasional historical text about e.g. mongols. As with most, the second half covers Arabic grammar.&lt;/p>
&lt;h3 id="john-mace">John Mace&lt;/h3>
&lt;p>Colonial administration largely replaced by employment in oil companies, like Elwell-Sutton, Mace spent a decade in the Middle East (in Arab countries). In spite of the name, his grammar is less of a reference than Lambton&amp;rsquo;s, but a fair modern introduction to modern, colloquial Persian&amp;rsquo;s grammar and usage.&lt;/p></content:encoded></item><item><title>Favorite Excerpts</title><link>https://alexalejandre.com/poetry/favorite-exerpts/</link><pubDate>Wed, 29 Jan 2025 16:45:14 -0500</pubDate><guid>https://alexalejandre.com/poetry/favorite-exerpts/</guid><description>&lt;h3 id="single-verses">Single Verses&lt;/h3>
&lt;ul>
&lt;li>Tis not too late to seek a newer world&lt;/li>
&lt;li>A death while mist slept over sand &amp;amp; sea&lt;/li>
&lt;li>We live in deeds not years, in thoughts not breaths - &lt;a href="https://en.wikiquote.org/wiki/Philip_James_Bailey">Bailey&lt;/a>&lt;/li>
&lt;li>Can honor&amp;rsquo;s voice provoke the dust?&lt;/li>
&lt;li>Where brooding darkness spreads his jealous wings&lt;/li>
&lt;li>I know that all beneath the moon decays&lt;/li>
&lt;li>To the last syllable of recorded time&lt;/li>
&lt;li>checkerboard of nights &amp;amp; days&lt;/li>
&lt;li>where destiny plays with men as pieces&lt;/li>
&lt;li>that youth&amp;rsquo;s sweet scented manuscript should close&lt;/li>
&lt;li>When in the chronicle of wasted time&lt;/li>
&lt;li>If music be the food of love&lt;/li>
&lt;li>Much to cast down, much to build, much to restore&lt;/li>
&lt;li>How sweet the moonlight sleeps&lt;/li>
&lt;li>Eyes to wonder, but lack tongues to praise&lt;/li>
&lt;li>Only the actions of the dust, smell sweet &amp;amp; blossom in the dust&lt;/li>
&lt;li>What happened to the times where dreams still mattered?&lt;/li>
&lt;li>The fog held its breath, looking on the ruins&lt;/li>
&lt;li>Opportunity knocked, but short for time gave up &amp;amp; left&lt;/li>
&lt;li>trembling shadows running from the hungry dawn&lt;/li>
&lt;li>Dreams are made of you&lt;/li>
&lt;li>If music be the food of love&lt;/li>
&lt;li>This act is as an ancient tale new told,&lt;/li>
&lt;li>When workmen strive to do better than well,&lt;/li>
&lt;li>O mistress mine, where art thou roaming?&lt;/li>
&lt;li>The sad eyed justice&lt;/li>
&lt;li>He jests at scars, that never felt a wound&lt;/li>
&lt;li>Is this a dagger which I see before me?&lt;/li>
&lt;li>Then long eternity shall greet our bliss&lt;/li>
&lt;li>Where brooding darkness spreads his jealous wings&lt;/li>
&lt;li>Where day never shuts his eye&lt;/li>
&lt;li>With leaden foot time creeps along&lt;/li>
&lt;li>Some heart once pregnant with celestial fire&lt;/li>
&lt;li>Some mute inglorious Milton here may rest&lt;/li>
&lt;li>And read their history in a nation&amp;rsquo;s eyes&lt;/li>
&lt;li>And shut the gates of mercy on mankind&lt;/li>
&lt;li>Far from the madding crowd&amp;rsquo;s ignoble strife&lt;/li>
&lt;li>Know, one false step is ne&amp;rsquo;er retrieved&lt;/li>
&lt;li>And mortals the sweets of forgetfulness prove&lt;/li>
&lt;li>By unperceived degrees he wears away&lt;/li>
&lt;li>Farewell! Thou art too dear for my possessing!&lt;/li>
&lt;li>For how do I hold thee, but by thy granting?&lt;/li>
&lt;li>Nor shall death brag thou wanderst in his shade&lt;/li>
&lt;li>When to the sessions of sweet silent thought&lt;/li>
&lt;li>Then can I drown an eye, unused to flow&lt;/li>
&lt;li>By sucking books the wise like bees grow&lt;/li>
&lt;li>Oh my soul, be prepared for the coming of the Stranger&amp;hellip;&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;p>Were I so tall to reach the pole,
Or grasp the ocean with my span
I must be measured by my soul,
the mind&amp;rsquo;s the standard of a man.&lt;/p></description><content:encoded>&lt;h3 id="single-verses">Single Verses&lt;/h3>
&lt;ul>
&lt;li>Tis not too late to seek a newer world&lt;/li>
&lt;li>A death while mist slept over sand &amp;amp; sea&lt;/li>
&lt;li>We live in deeds not years, in thoughts not breaths - &lt;a href="https://en.wikiquote.org/wiki/Philip_James_Bailey">Bailey&lt;/a>&lt;/li>
&lt;li>Can honor&amp;rsquo;s voice provoke the dust?&lt;/li>
&lt;li>Where brooding darkness spreads his jealous wings&lt;/li>
&lt;li>I know that all beneath the moon decays&lt;/li>
&lt;li>To the last syllable of recorded time&lt;/li>
&lt;li>checkerboard of nights &amp;amp; days&lt;/li>
&lt;li>where destiny plays with men as pieces&lt;/li>
&lt;li>that youth&amp;rsquo;s sweet scented manuscript should close&lt;/li>
&lt;li>When in the chronicle of wasted time&lt;/li>
&lt;li>If music be the food of love&lt;/li>
&lt;li>Much to cast down, much to build, much to restore&lt;/li>
&lt;li>How sweet the moonlight sleeps&lt;/li>
&lt;li>Eyes to wonder, but lack tongues to praise&lt;/li>
&lt;li>Only the actions of the dust, smell sweet &amp;amp; blossom in the dust&lt;/li>
&lt;li>What happened to the times where dreams still mattered?&lt;/li>
&lt;li>The fog held its breath, looking on the ruins&lt;/li>
&lt;li>Opportunity knocked, but short for time gave up &amp;amp; left&lt;/li>
&lt;li>trembling shadows running from the hungry dawn&lt;/li>
&lt;li>Dreams are made of you&lt;/li>
&lt;li>If music be the food of love&lt;/li>
&lt;li>This act is as an ancient tale new told,&lt;/li>
&lt;li>When workmen strive to do better than well,&lt;/li>
&lt;li>O mistress mine, where art thou roaming?&lt;/li>
&lt;li>The sad eyed justice&lt;/li>
&lt;li>He jests at scars, that never felt a wound&lt;/li>
&lt;li>Is this a dagger which I see before me?&lt;/li>
&lt;li>Then long eternity shall greet our bliss&lt;/li>
&lt;li>Where brooding darkness spreads his jealous wings&lt;/li>
&lt;li>Where day never shuts his eye&lt;/li>
&lt;li>With leaden foot time creeps along&lt;/li>
&lt;li>Some heart once pregnant with celestial fire&lt;/li>
&lt;li>Some mute inglorious Milton here may rest&lt;/li>
&lt;li>And read their history in a nation&amp;rsquo;s eyes&lt;/li>
&lt;li>And shut the gates of mercy on mankind&lt;/li>
&lt;li>Far from the madding crowd&amp;rsquo;s ignoble strife&lt;/li>
&lt;li>Know, one false step is ne&amp;rsquo;er retrieved&lt;/li>
&lt;li>And mortals the sweets of forgetfulness prove&lt;/li>
&lt;li>By unperceived degrees he wears away&lt;/li>
&lt;li>Farewell! Thou art too dear for my possessing!&lt;/li>
&lt;li>For how do I hold thee, but by thy granting?&lt;/li>
&lt;li>Nor shall death brag thou wanderst in his shade&lt;/li>
&lt;li>When to the sessions of sweet silent thought&lt;/li>
&lt;li>Then can I drown an eye, unused to flow&lt;/li>
&lt;li>By sucking books the wise like bees grow&lt;/li>
&lt;li>Oh my soul, be prepared for the coming of the Stranger&amp;hellip;&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;p>Were I so tall to reach the pole,
Or grasp the ocean with my span
I must be measured by my soul,
the mind&amp;rsquo;s the standard of a man.&lt;/p>
&lt;p>We&amp;rsquo;ve trod the maze of error round,
And now the torch of truth&amp;rsquo;s found&lt;/p>
&lt;p>Though God be free, he works by instruments
And wisely fitteth them to his intents,
A proud unhumbled preacher is unmet
To may proud sinners humbled at Christ&amp;rsquo;s feet
So are the blind to tell men what God saith
And faithless men to propagate the faith.
The dead are unfit means to raise the dead
And enemies to give the children bread.
And utter strangers to the life to come
Are not the best conductors to our home
They that yet never learned to live &amp;amp; die
Will scarcely teach it others feelingly.&lt;/p>
&lt;p>The stars shall fade away, the sun himself
Grow dim with age &amp;amp; nature sink in years,
But thou shalt flourish in immortal youth
Unhurt amidst the war of elements
The wrecks of matter &amp;amp; the crush of worlds&lt;/p>
&lt;ul>
&lt;li>Addison&lt;/li>
&lt;/ul>
&lt;p>The unwearied sun, from day to day,
Does his creator&amp;rsquo;s power display&lt;/p>
&lt;p>Soon as the evening shades prevail
The moon takes up the wondrous tale
And nightly to the listening Earth
Repeats the story of her birth.
Whilst all the stars that round herburn
And all the planets in their turn
Confirm the tidings as they roll
And spread the truth from pole to pole.&lt;/p>
&lt;ul>
&lt;li>Addison&lt;/li>
&lt;/ul>
&lt;p>He many a creature did anatomize
Almost unpeopling water, air &amp;amp; land
Beasts, fishes, birds, snails, caterpillars, flies
Were laid full low by his relentless hand
That oft with gory crimson was disdained.
He many a dog destroyed &amp;amp; many a cat.
Of flees his bead, of frogs the marshes drained,
Could tellen if a mite were lean or fat
And read a lecture over th&amp;rsquo;entrails of a gnat.&lt;/p>
&lt;ul>
&lt;li>Virtuoso - Akenside&lt;/li>
&lt;/ul>
&lt;p>Ah no, the bliss youth dreams is one
For daylight, for the cheerful sun
For feeling nerves &amp;amp; living breath,
Youth dreams a bliss this side of death&lt;/p>
&lt;p>And is a calm like this, in truth,
The crowning end of life &amp;amp; youth?
And when this boon rewards the dead,
Are all debts paid, has all been said?&lt;/p>
&lt;ul>
&lt;li>Matthew Arnold&lt;/li>
&lt;/ul>
&lt;p>We should count time by heart throbs. He most lives
Who thinks most, feels the noblest, acts the best.&lt;/p>
&lt;ul>
&lt;li>Bailey&lt;/li>
&lt;/ul>
&lt;p>Make it mine to feel amid the city&amp;rsquo;s jar
That there&amp;rsquo;s a peace man did not make &amp;amp; cannot mar.&lt;/p>
&lt;p>The soul, secured in her existence, smiles
At the drawn dagger &amp;amp; defies its point&lt;/p>
&lt;p>It must be so, Plato, thou reason&amp;rsquo;st well,
Else whence this pleasing hope, this fond desire,
This long after immortality?
Or whence this secret dread &amp;amp; inward horror
Of falling into naught? Why shirks the soul
Back on herself &amp;amp; startles at destruction?&lt;/p>
&lt;p>Tis the divinity that stirs within us
Tis heaven itself that points out a hereafter
And intimates Eternity to man.&lt;/p>
&lt;p>Eternity? Thou pleasing, dreadful thought!
Through what variety of untried being -
Through what new scenes &amp;amp; changes must we pass!
The wide, th&amp;rsquo;unbounded prospect lies before me,
But shadows, clouds &amp;amp; darkness rest upon it.
How will I hold? If there&amp;rsquo;s a power above us.
(And that there is, all nature cries aloud
Through all her works) he must delight in virtue
And that which he delights in must be happy.
Best when or where? This world was made for Caesar.
I&amp;rsquo;m weary of conjectures; This must end them!&lt;/p>
&lt;ul>
&lt;li>Cato - Addison&lt;/li>
&lt;/ul>
&lt;p>Thus I am doubly armed: my death &amp;amp; life
My bane &amp;amp; antidote are both before me.
This in a moment brings me to an end
But this informs me I shall never die.&lt;/p>
&lt;p>Not all that tempts your wand&amp;rsquo;rinng eyes
And heedless hearts, is lawful prize.&lt;/p>
&lt;p>Clouds of affection from our younger eyes
Conceal that emptiness which age descries&lt;/p>
&lt;p>The soul&amp;rsquo;s dark cottage, battered &amp;amp; decayed
Lets in new light through chinks that time hath made
Stranger by weakness, wiser men become,
As they draw near to their eternal home&lt;/p>
&lt;p>Mutt&amp;rsquo;ring his wayward fancies he would rove
Now drooping, woeful wan, like one forlorn
Full many a flower is born to blush unseen
And waste its sweetness on the desert air&lt;/p>
&lt;p>Let not ambition mock their useful toil
Their homely joys &amp;amp; destiny obscure,
Nor grandeur hear with a disdainful smile
The short &amp;amp; simple annals of the poor&lt;/p>
&lt;p>The boast of heraldry, the pomp of power
And all that beauty, all that wealth e&amp;rsquo;er gave
Awaits alike th&amp;rsquo;inevitable hour
The paths of glory lead but to the grave.&lt;/p>
&lt;p>And though she tempts your wondering eyes,
She&amp;rsquo;s sadly not a lawful prize.&lt;/p>
&lt;p>Others may boast, a single man to kill
But I, the blood of thousands, daily spill.
Let petty kings the names of parties know
Where&amp;rsquo;er I come, I slay both friend &amp;amp; foe.
The swiftest horseman my fierce rage controls
And from their bodies drives their trembling souls.
If they had wings &amp;amp; to the gods could fly
And would pursue &amp;amp; beat them to the sky
And make proud Jove, with all his thunder see,
This single arm more dreadful is, than he.&lt;/p>
&lt;ul>
&lt;li>Rehersal - George Villiers&lt;/li>
&lt;/ul>
&lt;p>If any question why we died,
Tell them, because our fathers lied.&lt;/p>
&lt;ul>
&lt;li>Kipling&lt;/li>
&lt;/ul>
&lt;p>Her voice was ike the wildest, saddest tone
Yet sweet, of some loved voice heard long ago
I wept, shall this fair woman, all alone
Over the sea with that fierce serpant go?
His head is on her heart &amp;amp; who can know
How soon he may devour his feeble pray?
Such were my thoughts when the tide &amp;lsquo;gan to flow
And that strange boat like the moon&amp;rsquo;s shine did sway
Amid reflected stars that in the waters lay.&lt;/p>
&lt;ul>
&lt;li>Revolt of Islam - Shelley&lt;/li>
&lt;/ul>
&lt;p>Tis a checker board of nights &amp;amp; days
where destiny with e as pieces plays
Hither &amp;amp; thither moves, checkmates &amp;amp; slays
And one by one back in the closet lays.&lt;/p>
&lt;p>Indeed, indeed, repentance oft before
I swore, but was I sober when I swore?&lt;/p>
&lt;p>Alas, that spring should vanish with the rose,
That youth&amp;rsquo;s sweet scented manuscript should close&lt;/p>
&lt;p>That place that does contain
My books, the best companions, is to me
A glorious court, where I hourly converse
With the old sages &amp;amp; philosophers
And sometimes, for variety, I confer
With kings &amp;amp; emperors &amp;amp; weigh their councels&lt;/p>
&lt;p>And purple tyrants vainly groan
With pangs unfelt before, unpitied &amp;amp; alone&lt;/p>
&lt;p>The quality of mercy&amp;rsquo;s not streamed,
It dropeth as gentle rain from heaven
Upon the place beneath, it is twice blessed,
It blesseeth him who gives and him who takes.&lt;/p>
&lt;p>To gold refined gold, to paint the lily,
To throw a perfume on the violet,
To smooth the ice or add another hue
Unto the rainbow &amp;hellip;&lt;/p>
&lt;p>When workmen strive to do better than well,
They do confound their skill in covetousness;
And oftentimes excusing of a fault
Doth make the fault the worse by the excuse,&lt;/p>
&lt;p>But if it be a sin to count honor,
I am the most offending soul alive!&lt;/p>
&lt;p>Others may use the ocean as their road
Only English make it their abode.&lt;/p>
&lt;p>Only the actions of the just,
Smell sweet &amp;amp; blossom in the dust.&lt;/p>
&lt;p>When the lamp is shattered,
The light in the dust lies dead.
When the cloud is scattered,
The rainbow&amp;rsquo;s glory is shed.
When the lute is broken,
Sweet tones are remembered not,
When the lips have spoken,
Loved accents are soon forgot.
As music &amp;amp; splendor,
Survive not the lamp &amp;amp; the lute
The heart&amp;rsquo;s echoes render,
No song when the spirit is mute
No song but sad dirges,
Like the wind through a ruined cell
Or the mournful surges,
That ring the dead seaman&amp;rsquo;s knell.&lt;/p>
&lt;p>The glories of our blood &amp;amp; state,
Are shadows, not substantial things.
There is no armor against fate,
Death lays his icy hand on kings,
Sceptre &amp;amp; crown must tumble down
And in the dust be equal made
With the poor crookéd scythe &amp;amp; spade.&lt;/p>
&lt;p>Thus I have had thee, as a dream doth flatter
In sleep asking, but waking, no such matter.&lt;/p>
&lt;p>When in the chronicle of wasted time
I see descriptions of the fairest wights
And beauty making beautiful old rhyme
In praise of ladies dead &amp;amp; lovely knights&lt;/p>
&lt;p>For we, which now behold these present days
Have eyes to wonder, but lack tongues to praise.&lt;/p>
&lt;p>When the will has forgotten its lifelong aim
And the mind can only disagree its fame
And a man is uncertain of his own name
The power of the lord shall fill this frame&lt;/p>
&lt;ul>
&lt;li>Dominus Illuminatio Mea - Blackmore&lt;/li>
&lt;/ul>
&lt;p>The sword&amp;rsquo;s but vain &amp;amp; vain&amp;rsquo;s the bow,
They never can work war&amp;rsquo;s overthrow.
The hermit&amp;rsquo;s prayer &amp;amp; the widow&amp;rsquo;s tear,
Alone can free the world from fear.
For a tear is an intellectual thing
And a sigh is the sword of an angel king
And the bitter groan of a martyr&amp;rsquo;s woe
is an arrow from th&amp;rsquo;almighty&amp;rsquo;s bow.&lt;/p>
&lt;ul>
&lt;li>Blake&lt;/li>
&lt;/ul>
&lt;p>Jesus was sitting in Moses&amp;rsquo; chair,
They brought the trembling woman there.
Moses commands she be stoned to death,
What was the sound of JEsus&amp;rsquo; breath?
He laid his hand on Moses&amp;rsquo; law,
The ancient heavens in silent awe,
Writ with curses from scroll to scroll
All away did roll.&lt;/p>
&lt;ul>
&lt;li>Blake&lt;/li>
&lt;/ul>
&lt;p>Riches I hold in light esteem
And love I laugh to scorn
And lust of fame was but a dream
That vanished with the morn.
Yes as my swift days near their goal
Tis all that I implore,
In life &amp;amp; death a chainless soul
With courage to endure.&lt;/p>
&lt;ul>
&lt;li>E. Brontë&lt;/li>
&lt;/ul>
&lt;p>Stop, Christian passer-by! Stop, child of God,
And read with gentle breast: Beneath this sod
A poet lies or that which seemed to be.
Oh lift one thought in prayer for me,
That he who many a year with toil of breath
Found death in life, may here find life in death!
MErcy for praise, to be forgiven for fame
He asked &amp;amp; hoped through Christ. Do thou the same!&lt;/p>
&lt;ul>
&lt;li>Coleridge&lt;/li>
&lt;/ul>
&lt;p>Who from the busy world retires,
To be more useful to it still
And to no great good aspires,
But only the eschewing ill.
Who with his angle &amp;amp; his books,
Can think the longest day well spent
And praises God when back he looks
And finds that all was innocent.
This man is happier far than he
Whom public business oft betrays
Through labyrinths of policy,
To crooked &amp;amp; forbidden ways.&lt;/p>
&lt;ul>
&lt;li>C. Cotton&lt;/li>
&lt;/ul>
&lt;p>Ages elapsed ere Homer&amp;rsquo;s lamp appeared
And ages ere the Mantuan swan was heard.
To carry nature lengths unknown before
To give a Milton birth, asked ages more.
Thus genius rose &amp;amp; set at ordered times
And shot a dayspring into distant climes
Ennobling every region that he chose
He sent in Greece, in Italy he rose
And tedious years of Gothic darkness passed,
Emerged all splendor in our isle at last&lt;/p>
&lt;p>Thus lovely halcyons dive into the main
Then show far off their shinning plumes again.&lt;/p>
&lt;p>My fainting soul athirst for grace,
I wwandered in a desert place.&lt;/p>
&lt;h3 id="on-transience">On Transience&lt;/h3>
&lt;p>Drink today &amp;amp; drown all sorrow,
You shall perhaps not do it tomorrow
But while you have it, use your breath
There&amp;rsquo;s no drinking after death.&lt;/p>
&lt;p>Think how many rayed bones sleep within this heap of stones,
Here&amp;rsquo;s an acre sour indeed, with the richest, royalest seed.&lt;/p>
&lt;p>Here the bones of earth have cried
Though gods they were, as men they died!&lt;/p>
&lt;p>Life! I know not what thou art,
But know that thou &amp;amp; I must part,
And when, where, even how we met
I own to me&amp;rsquo;s a secret yet&lt;/p>
&lt;p>Still thinking I had little time to live
My fervent heart to win men&amp;rsquo;s souls did strive
I preached as never sure to preach again
Ad as a dying man to dying men.&lt;/p>
&lt;p>Under the wide &amp;amp; starry sky
Dig the grave &amp;amp; let me die.&lt;/p>
&lt;p>With him deceased, she for a little tried
To live without him, liked it not &amp;amp; died.&lt;/p>
&lt;p>&amp;lsquo;Tis time to creep in close about the fire
And tell grey tales of what we were, and dream
Old dreams and faded, and as we may rejoice
In the young life that round us leaps and laughs,
A fountain in the sunshine, in the pride
Of God&amp;rsquo;s best gift that to us twain returns,
Dear Heart, no more — no more.&lt;/p>
&lt;p>For many a flower is born to blush unseen
And waste its sweetness on the desert air&lt;/p>
&lt;p>The soul&amp;rsquo;s dark cottage, battered and decayed
Lets in new light through chinks which time hath made&lt;/p></content:encoded></item><item><title>Mes extraits préférés</title><link>https://alexalejandre.com/poetry/french/mes-extraits-preferes/</link><pubDate>Wed, 29 Jan 2025 16:45:14 -0500</pubDate><guid>https://alexalejandre.com/poetry/french/mes-extraits-preferes/</guid><description>&lt;p>Que me font ces vallons, ces palais, ces chaumières?&lt;br>
Vains objets dont pour moi le charme est envolé;&lt;br>
Fleuves, rochers, forêts, solitudes si chères,&lt;br>
Un seul être vous manque, et tout est dépeuplé.&lt;/p></description><content:encoded>&lt;p>Que me font ces vallons, ces palais, ces chaumières?&lt;br>
Vains objets dont pour moi le charme est envolé;&lt;br>
Fleuves, rochers, forêts, solitudes si chères,&lt;br>
Un seul être vous manque, et tout est dépeuplé.&lt;/p>
&lt;p>Je ne desire rien de tout ce qu’il éclaire,&lt;br>
Je ne demande rien à l’immense univers.&lt;/p>
&lt;p>Borné dans sa nature, infini dans ses vœux,&lt;br>
L&amp;rsquo;homme est un dieu tombé qui se souvient des cieux&lt;/p>
&lt;p>Et devant l&amp;rsquo;infini pour qui tout est pareil,&lt;br>
Il est donc aussi grand d&amp;rsquo;être homme que soleil&lt;/p>
&lt;p>La docte antiquité dans toute sa surée&lt;br>
A l&amp;rsquo;égale de nos jours ne fut point éclaire&lt;/p>
&lt;p>Éternité, néant, passé, sombres abîmes,&lt;br>
Que faites-vous des jours que vous engloutissez?&lt;br>
Parlez : nous rendrez-vous ces extases sublimes&lt;br>
Que vous nous ravissez?&lt;/p>
&lt;p>Je sens des transports inconnus,&lt;br>
Je songe à ceux qui ne sont plus&lt;/p>
&lt;p>Je parcours tous les points de l&amp;rsquo;immense étendue,&lt;br>
Et je dis: &amp;ldquo;Nulle part le bonheur ne m&amp;rsquo;attend.&amp;rdquo;&lt;br>
Cependant, s&amp;rsquo;élançant de la flèche gothique,&lt;br>
Un son religieux se répand dans les airs:&lt;br>
Le voyageur s&amp;rsquo;arrête, et la cloche rustique&lt;br>
Aux derniers bruits du jour mêle de saints concerts.&lt;br>
Mais à ces doux tableaux mon âme indifférente&lt;br>
N&amp;rsquo;éprouve devant eux ni charme ni transports;&lt;br>
Je contemple la terre ainsi qu&amp;rsquo;une ombre errante&lt;br>
Le soleil des vivants n&amp;rsquo;échauffe plus les morts.&lt;/p>
&lt;p>La belle antiquité fut toujours vénérable
Mais je ne crus jamais qu’elle fût adorable.
Je vois les anciens, sans plier les genoux
Ils sont grands, il est vrai, mais hommes comme nous
Et l’on peut comparer, sans craindre d’Être injuste,
Le siècle de Louis au beau siècle d’Auguste.&lt;/p>
&lt;p>Père de tous les arts, à qui du dieu des vers
Les mystères profonds ont été découverts,
Vaste et puissant génie, inimitable Homère,
D’un respect infini ma muse te révère.&lt;/p>
&lt;p>Ménandre, j’en conviens, eut un rare génie,
Et pour plaire au théâtre une adresse infinie.
Virgile, j’y consens, mérite des autels.
Ovide est digne encor des honneurs immortels.
Mais ces rares auteurs, qu’aujourd’hui l’on adore,
Étaient-ils adorés quand ils vivaient encore?
Écoutons Martial Ménandre, esprit charmant,
Fut du théâtre grec applaudi rarement
Virgile vit les vers d’Ennius le bonhomme,
Lus, chéris, estimés des connaisseurs de Rome&lt;/p></content:encoded></item><item><title>A Few Hours Researching Transit</title><link>https://alexalejandre.com/finance/an-hour-researching-transit/</link><pubDate>Thu, 05 Dec 2024 23:33:08 -0800</pubDate><guid>https://alexalejandre.com/finance/an-hour-researching-transit/</guid><description>A curious hour exploring energy economic&amp;rsquo;s impact on the Rust Belt and US industrial migration</description><content:encoded>&lt;p>I had the following exchange:&lt;/p>
&lt;blockquote>
&lt;p>Me: absent government &lt;a href="https://youtu.be/LuBstLZINco?si=4BgjP0JBm5YHTy9l&amp;amp;t=21">government intrusion into free market efficiencies&lt;/a> like the Jones Act. shipping is better than trucking&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Guy: US rail is the best in the world&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Me: Shipping is still more energy efficient (and thus cheaper in isolation.) The Rust Belt along the Great Lakes is suffers from the underutilized Misiissippi. While rail helps bring goods closer to the end user (not limited by geography), the physical efficiencies of shipping would encourage industrial activity along the main waterways if liberated from artificial barriers. (Other issues like dock worker unions preventing automation are also in the way.)&lt;/p>&lt;/blockquote>
&lt;p>For rhetorical effect, I wanted to append &amp;ldquo;why do you think Shenzhen grew from 300k to 20m in 40 years?&amp;rdquo; But how true is that? An actual research question!&lt;/p>
&lt;p>How would I model to what extent physical geography (ignoring proximity to hong kong) played in Shenzhen&amp;rsquo;s growth, taking out factors like:&lt;/p>
&lt;ul>
&lt;li>first SEZ&lt;/li>
&lt;li>not having to go down the mississippi first&lt;/li>
&lt;li>global demographic shifts nearer china&lt;/li>
&lt;li>economic center of gravity shifting&lt;/li>
&lt;li>other socioeconomic factors (e.g. China&amp;rsquo;s pent up potential being liberated by new policy)&lt;/li>
&lt;/ul>
&lt;p>Distance decay with demographic numbers along various models works for china or the us alone, since you can arbitrarily only change location but claim the same policy etc. could happen elsewhere.&lt;/p>
&lt;p>But how do you compare policy factors in both? Is it at some point just arbitrarily ascribing numbers to policy aspects? Well, numerical methods isolating just geography could locate optimal geographic locations at different periods in each country&amp;rsquo;s development (and if they line up to existing growth, that already answered it.) That&amp;rsquo;s something.&lt;/p>
&lt;p>Asking friends, I had to word the question more clearly. This led to quite a few which the same data and methodology would address e.g.:&lt;/p>
&lt;ul>
&lt;li>to what extent did the Jones act etc. kill the Great Lakes economy vs. other factors&lt;/li>
&lt;li>What percentage of regional economic success can be attributed to geographic advantage versus policy design?&lt;/li>
&lt;li>How do artificial barriers (regulatory, infrastructural) modify natural geographic potential?&lt;/li>
&lt;li>How do maritime and inland transportation networks influence industrial complexity?&lt;/li>
&lt;/ul>
&lt;p>But at its core: &lt;strong>To what extent does US policy prevent the Great Lakes from being another Pearl River Delta?&lt;/strong> (I abstracted away issues of timing like &amp;ldquo;did prevent&amp;rdquo; and &amp;ldquo;from staying&amp;rdquo;.)&lt;/p>
&lt;p>A friend and I then wondered &lt;strong>why didn&amp;rsquo;t New Orleans industrialize or keep up?&lt;/strong> The new orleans angle&amp;rsquo;s very good. In 1860, it was the 5th largest city in the country with 2nd highest per capita income and 3rd most active port, flourishing through trade and finance. By 1960, Miami, Houston, Atlanta and Dallas had eclipsed it in the South alone.&lt;/p>
&lt;p>Now, to the data, first of all, just how efficient is each transport method in theory and practice? While Wikipedia &lt;a href="https://en.wikipedia.org/wiki/Energy_efficiency_in_transport">offers&lt;/a> some numbers, Dr. Chris Barken&amp;rsquo;s &lt;a href="https://nonstopsystems.com/radio/pdf-hell/article-hell-bernhard-barkan07.pdf">Railroad Transportation
Energy Efficiency&lt;/a> answers the first question clearly:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/energy/transport-speed-resistance-by-mode-metric.png" alt="Transport Speed and Resistance by Mode">&lt;/p>
&lt;p>Barges are less efficient than rail with any appreciable speed. The extra distance (and time) transiting the Mississippi cancels out potential energy efficiencies of riverine transport from Rust Belt industrial facilities compared to those in the American South and Midwest, which use rail to reach ports and coastal cities. The lower speeds (under ~15km/h) where shallow draft water transportation still wins out, reduce throughput.&lt;/p>
&lt;p>A friend noted that in China, road dominates water transportation volume such that after a recent push for inland waterways, roads still move 4x the volume (40B tons). &lt;strong>What factors lead to such distributions of road : rail : water freight inconsistent with their energy cost?&lt;/strong>&lt;/p>
&lt;p>And &lt;strong>why does no one have both passenger and freight rail?&lt;/strong> Current shared tracks give freight (in the US) or passengers (in Europe) right of way, wasting a lot of time and energy from breaking (even with regenerative braking).&lt;/p></content:encoded></item><item><title>History of Spanish Literacy</title><link>https://alexalejandre.com/other/history-of-spanish-literacy/</link><pubDate>Fri, 06 Dec 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/other/history-of-spanish-literacy/</guid><description>How could Spain have only 30% literacy in 1900?</description><content:encoded>&lt;p>&lt;img src="https://alexalejandre.com/images/literacy-spain-1920-2.png" alt="Spanish literacy in 1920">&lt;/p>
&lt;blockquote>
&lt;p>Language is the perfect instrument of empire - Antonio de Nebrija, 1492, presenting his, &lt;a href="https://en.wikipedia.org/wiki/Gram%C3%A1tica_de_la_lengua_castellana">the first, Spanish grammar&lt;/a> to his sovereigns&lt;/p>&lt;/blockquote>
&lt;p>The Catholic monarchs, Isabella and Ferdinand, elevated Castilian to Spanish, the language of all Spain. Castilian culture displaced Leonese during the Reconquista, driven by Humanism and universities:&lt;/p>
&lt;blockquote>
&lt;p>The Erasmian invasion of Spain is one of the most remarkable events in sixteenth-century Spanish history. In no other country of Europe did the writings of Erasmus enjoy such popularity and so widespread a diffusion. In 1526 the Enchiridion appeared in a Spanish translation, and the translator was able to write proudly to the author: ‘At the Court of the Emperor, in the towns, in the churches, in the monasteries, even in the inns and on the roads, everyone now has the Enchiridion of Erasmus. Hitherto it was only read in Latin by a few scholars, who did not always understand it; now it is read in Spanish by men of all conditions, and those who had previously never heard of Erasmus now know him through this one book.&amp;rsquo; from Elliott&amp;rsquo;s Imperial Spain&lt;/p>&lt;/blockquote>
&lt;p>Aragon, where the Crown exercised little power over the governing &lt;a href="https://en.wikipedia.org/wiki/Cortes_of_Aragon">courts&lt;/a>, could not compete with Castile either, for Catalonia was sparsely populated, with but 278,000 inhabitants in 1497.&lt;/p>
&lt;p>In 1520, Castilian nationalists (comuneros) rebelled against the foreignizing influence of empire - emperor Charles V prefered to live in Germany, leaving Dutch cardinal Adrian of Utrecht to rule. This pattern would persist; Spanish governance neglected local development, such that by 1900 but 1/3 could read. The Spanish intellectual and ruling tradition, fueled by outside rents, prioritized foreign models and (abstract) humanistic subjects like theology and law over concrete pursuits like agriculture, commerce and economic modernization, neglecting the prosperity of their rural subjects. Though spoken Spanish extended to the New World, Latin held preeminence in Spain even while French and English scholars were busy forging their national literatures; &lt;span class="marginnote">Of Course, jewels like Don Quijote, La Araucana etc. appeared.&lt;/span> the Counter-Reformation stressed Latin and even advocates of Castilian-Spanish like Martín de Azpilcueta said:&lt;/p>
&lt;blockquote>
&lt;p>Navarro birthed me, New Castile educated me, France made me a man, Old Castile exalted me in Salamnca, Portugal honored and enlightened me. Finally I came to Italy, the chosen world&amp;rsquo;s most chosen land and reside in Rome, the mother and teacher of the world.&lt;/p>&lt;/blockquote>
&lt;p>280 years later, Juan Bravo Murillo said:&lt;/p>
&lt;blockquote>
&lt;p>Spain does not require educated men but oxen to work&lt;/p>&lt;/blockquote>
&lt;p>This state of affairs, ignoring the local populace and national development, persisted until the 20th century shook things up (by turmoil, revolution and eventual centralization) such that while Germany, the UK (which, with the Netherlands, freeing themselves of Spanish rule in the 80 Years&amp;rsquo; War, surpassed 50% literacy before &lt;a href="https://ourworldindata.org/grapher/estimated-historical-literacy-rates">1600&lt;/a>), the US etc. enjoyed over 80% literacy in 1870, Spain&amp;rsquo;s stayed under 20%. 1857&amp;rsquo;s Moyano Act is representative of the limited attempts to improve this situation, nominally establishing a centralized national education system but in practice leaving funding, curriculums etc. to local communities, which simply continued to do nothing. As a comparison, Italy&amp;rsquo;s centralizing Casati law and Daneo-Credaro reforms improved literacy successfully. On the other hand, religiously inspired Puritan education achieved even better results in the 18th century without any centralization. Observe the state of Spanish and Portuguese immigrants to Brazil:&lt;/p>
&lt;blockquote>
&lt;p>The Portuguese also had one of the highest illiteracy rates among immigrants arriving in Brazil during the early 20th century: 57.5% of them were illiterate. Only the Spaniards had a higher percentage of illiteracy: 72%. (In comparison, only 13.2% of the German immigrants to Brazil were illiterate.) - &lt;a href="https://en.wikipedia.org/wiki/Portuguese_Brazilians">Wiki&lt;/a> based on &lt;a href="https://web.archive.org/web/20080915235211/http://www.unizar.es/eueez/cahe/volpiscott.pdf">this source&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Spain so neglected her people that Spaniards would first experience a truly literate society as immigrants in the New World. Late 19th Century Argeninia&amp;rsquo;s great national project &lt;a href="https://es.wikipedia.org/wiki/Sistema_educativo_de_Argentina#Siglo_XX">built&lt;/a> a mass education system to turn millions of Italian immigrants into (literate, Spanish-speaking) Argentines. Though fewer in number than the Italians, 1.5 million Spaniards also emigrated to Argentina (1897-1947), 70% from Galicia, where in 1900 30% of adults and 50% of children could were literate. In Argentina, their children would approach 100% literacy.&lt;/p>
&lt;p>What does this mean for the habits and styles in Spanish-speaking literary cultures as a whole? (Argentine presidents like Sarmiento tried to implant &lt;a href="https://issuu.com/ccabritanica/docs/libro_100_a__os_ccab">Anglo-Saxon&lt;/a> culture into their nation!) Indeed, what does it mean to see that the Spanish people were the first colonized and among the last liberated from the Spanish elites?&lt;/p>
&lt;h3 id="readings">Readings&lt;/h3>
&lt;ul>
&lt;li>Mercurino di Gattinara and the Creation of the Spanish Empire - Rebecca Ard Boone &lt;span class="marginnote">Responds to Bataillon&amp;rsquo;s Erasme et l&amp;rsquo;Espagne&lt;/span>&lt;/li>
&lt;li>La alfabetización en la España del siglo XVIII - Jacques Soubeyroux&lt;/li>
&lt;li>Literacy and culture in early modern Castile - Sara Nalle&lt;/li>
&lt;li>&lt;a href="https://www.tandfonline.com/doi/full/10.1080/0046760X.2021.1890237">The uneven transition towards universal literacy in Spain 1860-1930&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>Lisp Curriculum</title><link>https://alexalejandre.com/programming/lisp/lisp-curriculum/</link><pubDate>Mon, 02 Sep 2024 23:35:08 -0400</pubDate><guid>https://alexalejandre.com/programming/lisp/lisp-curriculum/</guid><description>Learn Scheme, Common Lisp -&amp;gt;maybe Clojure, with these books.</description><content:encoded>&lt;p>It&amp;rsquo;s easy to waste time oscillating between different Lisps, but it&amp;rsquo;s a waste of time because mastering one makes switching quite easy, but going back and forth stresses the superficial differences. Here&amp;rsquo;s a nice curriculum which does all the different flavors, but in an ordered way:&lt;/p>
&lt;ol>
&lt;li>install with this and be aware it exists (20mins): &lt;a href="https://lispcookbook.github.io/cl-cookbook/">https://lispcookbook.github.io/cl-cookbook/&lt;/a>&lt;/li>
&lt;li>Practical Common Lisp: &lt;a href="https://gigamonkeys.com/book/">https://gigamonkeys.com/book/&lt;/a> - 1 month&lt;/li>
&lt;li>Paradigms of AI programming: &lt;a href="https://norvig.github.io/paip-lisp/">https://norvig.github.io/paip-lisp/&lt;/a> (different from modern neural approaches, but really good work on general software engineering) - 2-3 months&lt;/li>
&lt;li>Beautiful Racket: &lt;a href="https://beautifulracket.com/">https://beautifulracket.com/&lt;/a> (will teach/expand on a very interesting paradigm. The above ends with you writing a minimal Scheme, this uses a bigger Scheme to make new languages) - 1 month&lt;/li>
&lt;li>Structure and Interpretation of Computer Programs: &lt;a href="https://sarabander.github.io/sicp/html/index.xhtml">https://sarabander.github.io/sicp/html/index.xhtml&lt;/a> (perhaps the bible of CS, even giving up half way through, it&amp;rsquo;s really worth it) - 3-6 months&lt;/li>
&lt;/ol>
&lt;p>By the end of 3 you were ready for anything. All that&amp;rsquo;s left is a 1 month detour (or love affair) with Clojure: &lt;a href="https://www.braveclojure.com/clojure-for-the-brave-and-true/">https://www.braveclojure.com/clojure-for-the-brave-and-true/&lt;/a> or more arcane works like Art of the Meta-Object Protocol, Lisp in Small Pieces or Let over Lambda. (By the time you get here, you&amp;rsquo;ll be able to judge which to use for what you want.)&lt;/p>
&lt;p>Esoteric insights mostly come from Common Lisp and Scheme. (Clojurists are mostly seniors who got their Lisp education in others. They are practical and just put everything into nested maps.)&lt;/p>
&lt;p>Professional use mostly happens in Clojure and Common Lisp. (Clojure is more public while CL has more classified projects. The Clojure ecosystem is quite fantastic (if you can ignore the JVM) while CL has warts, which can be overcome (but it&amp;rsquo;s a learning experience.))&lt;/p>
&lt;p>Various Schemes, Fennel or other paradigms &lt;span class="marginnote">The first books in the Little Schemer series are fun and teach good intuitions, but they&amp;rsquo;re not really necessary and you&amp;rsquo;ll pick it up otherwise. The latter ones are special, teaching the&lt;/span> like Prolog have interesting personalities, but haven&amp;rsquo;t reached critical mass, such that you must add features as you go. So while each Clojure, Scheme and Common Lisp have materials from beginner to advanced, this curriculum starts with practical uses of Common Lisp which transition into arcane wisdom through Scheme, which then continues with Common Lisp or goes into a practical direction with Clojure.&lt;/p>
&lt;hr>
&lt;p>N.b. If you go for common lisp, you&amp;rsquo;ll need emacs to use slime. This guide to org mode is the best guide for emacs (understanding where configs are, setting things up etc): &lt;a href="https://orgmode.org/worg/org-tutorials/org4beginners.html">https://orgmode.org/worg/org-tutorials/org4beginners.html&lt;/a> (1 hour, and another 1-2 hours for the emacs hotkey guide which appears when you open it)&lt;/p></content:encoded></item><item><title>To Forge Deeper Thought</title><link>https://alexalejandre.com/programming/forge-deeper-thought/</link><pubDate>Sat, 27 Jul 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/forge-deeper-thought/</guid><description>The curiosity to bravely multisociate insights from all fields breeds innovation.</description><content:encoded>&lt;p>Every now and then, we hear of some miracle material or process which will revolutionize this or that, perhaps solve cancer or replace concrete. Excited, thirsting to drink from the firehose, &lt;a href="https://www.reddit.com/r/tech/">r/tech&lt;/a> has our back (&amp;ldquo;and drinking largely sobers us again.&amp;rdquo;) We never hear of them again, amnesia warding off disappointment. But why does this happen?&lt;/p>
&lt;p>In AI research, papers optimize but one aspect while every other part of their methodology lags a few years. Just using last year&amp;rsquo;s cutting edge approaches everywhere should blow everyone out of the water. It appears &lt;a href="https://arxiv.org/abs/2405.04434">DeepSeek&lt;/a> is actually synthesizing.&lt;/p>
&lt;p>DeepSeek&amp;rsquo;s approach is currently open source state of the art, table stakes for new research. (That other researchers don&amp;rsquo;t pluck these low hanging fruit&amp;rsquo;s a travesty.) Since they focus on bootstrapping (at low cost) ever better models, their papers illustrate a good learning path too! Just this, they surveyed the field, found the Pareto frontier to frontier capabilities, began to blaze a trail down it and &lt;a href="https://arxiv.org/abs/2401.02954">shared&lt;/a> the hollowed path! After a few months they hit and &lt;a href="(https://arxiv.org/abs/2405.04434)">published&lt;/a> their next milestone, which just drove &lt;a href="https://huggingface.co/blog/winning-aimo-progress-prize">victory&lt;/a> in a math olympiad.&lt;/p>
&lt;p>That&amp;rsquo;s fine and good, but how can we apply this methodology elsewhere? The replication crisis infects psychology, medicine, behavioral economics and of course &lt;a href="https://news.ycombinator.com/item?id=20089515">computer science&lt;/a>. How did DeepSeek&amp;rsquo;s researchers cut through the cruft?&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>Git gud.&lt;/em>&lt;/p>&lt;/blockquote>
&lt;p>They listened to their coach and built strong fundamentals. Where &amp;ldquo;shut up and calculate&amp;rdquo; has rendered much recent physics research useless, just being aware of underlying principles puts you above the rest. When everyone misses the forest for their own special tree, forgetting to account for recent developments, simply curating and collating what works yields novel theory, to guide innovation. While &lt;a href="https://danluu.com/p95-skill/">95% isn&amp;rsquo;t that good&lt;/a>, combining 95% in finance, math and geology unlocks many doors. Why?&lt;/p>
&lt;p>Underlying every field, reign the &lt;a href="https://en.wikipedia.org/wiki/Syncretism_(linguistics)">same&lt;/a> very rules, the very grammar and architecture of complexity. It&amp;rsquo;s no wonder Christopher Alexander&amp;rsquo;s &amp;ldquo;design patterns&amp;rdquo; so inspired software developers, jealously crafting ever arcaner tools to navigate and mine ontological veins.&lt;/p>
&lt;p>DeepSeek employs jacks of all trades, knowledgeable in history, languages, chemistry beside the expected mathematicians and computer scientists.Attacking the problem from &lt;a href="https://www.themarginalian.org/2013/05/20/arthur-koestler-creativity-bisociation/">bisociated&lt;/a> angles, they see different branches. While Western academicians and corporate researchers pursue the stale meta, restricted by what their colleagues and superiors, yea investors and grant boards will understand and accept, by what they can quickly publish lest they perish, with courage and curiosity, DeepSeek delves ever deeper.&lt;/p>
&lt;p>Commenting on an &lt;a href="https://www.oschina.net/news/302787">interview&lt;/a> (&lt;a href="https://poe.com/s/H62noI0alsEnBoAUPj9B">trans.&lt;/a>):&lt;/p>
&lt;blockquote>
&lt;p>Innovating on model structure means there&amp;rsquo;s no path to follow, requiring many failures and enormous time and economic costs.&lt;/p>&lt;/blockquote>
&lt;p>As the tortoise beat the hare, duly building out a framework breaks ground faster. Testing each part, you can determine what research (other papers) is chaff, focusing your model-theory.&lt;/p>
&lt;blockquote>
&lt;p>Amidst a clamor that LLM technology will inevitably converge and that following is a smarter shortcut, DeepSeek values the accumulation in &amp;ldquo;detours&amp;rdquo; and believes that Chinese LLM entrepreneurs can join the global technological innovation torrent in addition to application innovation.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>If we can form a complete industry upstream and downstream, we don&amp;rsquo;t need to do applications ourselves.&lt;/p>&lt;/blockquote>
&lt;p>Where in China common wisdom commandeth man make products sitting on the West&amp;rsquo;s giant shoulders, in the US profit commandeth man guard but jealously his knowledge and wallow away from network effects, outside opinions etc From Carpenter&amp;rsquo;s They Became What they Beheld:&lt;/p>
&lt;blockquote>
&lt;p>Specialists don&amp;rsquo;t welcome discovery, only new proofs of what they know. All specialists understand that discoveries are fatal &amp;hellip; Discovery makes the field of the specialist and the expert obsolete.&lt;/p>&lt;/blockquote>
&lt;p>True passion and curiosity cut straight through this wilderness of mirrors, instead of resting on your laurels and retarding advancement, actually thriving is reward in itself. Actual ownership of your ideas and research direction leads you from &lt;a href="https://en.wikipedia.org/wiki/Zero_to_One">zero to one&lt;/a>.&lt;/p>
&lt;blockquote>
&lt;p>Even if OpenAI is closed source, it can&amp;rsquo;t prevent being overtaken by others. So we deposit value in our team, our colleagues grow in this process, accumulate a lot of know-how, form an organization and culture that can innovate, that&amp;rsquo;s our moat. Open source, publishing papers, actually doesn&amp;rsquo;t lose anything. For technical people, being followed is a very fulfilling thing. In fact, open source is more like a cultural behavior than a commercial behavior. Giving is actually an extra honor. A company doing this will also have cultural attractiveness.&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;p>In my own work, I &lt;a href="https://en.wikipedia.org/wiki/Conceptual_blending">blend&lt;/a> a fruit smoothie of diachronic philology, scholastic philosophy, value investing, biomechanical economics and GOFAI. Spending obsessed years with each of these lenses in turn, they rhyme like the music of the spheres and, beholding &lt;a href="https://youtu.be/ha-uagjJQ9k?si=MIIHA21-VN59YDHZ&amp;amp;t=17">the new hotness&lt;/a>, help cut through the chaff.&lt;/p></content:encoded></item><item><title>Lisp Commonplace</title><link>https://alexalejandre.com/programming/lisp/lisp-commonplace/</link><pubDate>Tue, 02 Jul 2024 23:33:32 -0400</pubDate><guid>https://alexalejandre.com/programming/lisp/lisp-commonplace/</guid><description>Racket, Gerbil, Common Lisp&amp;hellip; Too many options!</description><content:encoded>&lt;p>Racket and &lt;a href="https://cons.io/">Gerbil&lt;/a> are the most interesting Schemes (enough batteries to be productive.) Clojure is the most elegant (amazing primitives) but hate the JVM/want static binaries, so I oscillate between Racket and Common Lisp.&lt;/p>
&lt;p>If you could make small, fast static binaries in Clojure, it&amp;rsquo;d be my only language. Others prefer hosted languages like it: Fennel (Lisp in Lua), Joker (Lisp in Go) etc. Babashka tries to solve it, but it&amp;rsquo;s not enough. &lt;a href="https://ciel-lang.org/#/">Ciel&lt;/a> does the same for Common Lisp.&lt;/p>
&lt;p>Reference works:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.scheme.com/tspl4/">Scheme Programming Language&lt;/a> - Dybvig&lt;/li>
&lt;li>Common Lisp &lt;a href="https://novaspec.org/cl/">Nova Spec&lt;/a> is better than the HyperSpec&lt;/li>
&lt;li>&lt;a href="https://docs.racket-lang.org">https://docs.racket-lang.org&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Seminal articles:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Recursive Functions of Symbolic Expressions and Their Computation by Machine - McCarthy 1960 - introduces Lisp&lt;/p>
&lt;/li>
&lt;li>
&lt;p>An Unsolvable Problem of Elementary Number Theory - Church 1935 - presents lambda calculus. With binary IO it &lt;a href="https://tromp.github.io/cl/Binary_lambda_calculus.html">becomes&lt;/a> an untyped programming language&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="http://languagelog.ldc.upenn.edu/myl/llog/jmc.pdf">Roots of Lisp&lt;/a> - Graham&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/">Lisp as the Maxwell&amp;rsquo;s Equations of Software&lt;/a> - Michael Nielsen&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://en.wikisource.org/wiki/Lambda_Papers">Lambda Papers&lt;/a> - Steele &amp;amp; Sussman - which developed Scheme&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-81.html">Implementation of Functional Languages Using Custom Hardware&lt;/a> and an unrelated talk: &lt;a href="https://youtu.be/Z35Tt87pIpg?si=3zvn7DwgQmE8-tk7&amp;amp;t=3031">https://youtu.be/Z35Tt87pIpg?si=3zvn7DwgQmE8-tk7&amp;amp;t=3031&lt;/a>, the Reduceron and &lt;a href="http://www.ulisp.com/">uLisp&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://stopa.io/post/269">What Gödel Discovered&lt;/a> - Parunashvili - explains Gödel&amp;rsquo;s Incompleteness Theorem with Lispy math&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://danielsz.github.io/2019-08-05T21_14.html">Lisp is not Lambda Calculus&lt;/a> - Szmulewicz&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Learn &lt;a href="https://orgmode.org/worg/org-tutorials/org4beginners.html">Emacs&lt;/a> and &lt;a href="https://calva.io/paredit/">Paredit&lt;/a>.&lt;/p>
&lt;p>Lisp offers many paradigms:&lt;/p>
&lt;ul>
&lt;li>Type Driven Development - Common Lisp with Coalton, Racket&amp;rsquo;s higher order dependent &lt;a href="http://docs.racket-lang.org/guide/contracts.html">contracts&lt;/a>&lt;/li>
&lt;li>constraint and logic programming -&lt;a href="https://cs.uwaterloo.ca/~plragde/flaneries/LACI/Introduction.html">Logic and Computation Intertwined&lt;/a>, Little Prover, Little Typer&lt;/li>
&lt;li>Language Driven Development - Beautiful Racket&lt;/li>
&lt;li>Symbolic AI - PAIP, Reasoned Schemer&lt;/li>
&lt;li>Probabilistic Neural Networks - Little Learner&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="https://github.com/naver/lispe">LispE&lt;/a>, &lt;a href="http://lambdaway.fr/workshop/index.php">Lambda Way&lt;/a>, &lt;a href="https://github.com/sybilant/sybilant">Sybilant&lt;/a> are fascinating!&lt;/p>
&lt;h3 id="miscellaneous">Miscellaneous&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="http://practical-scheme.net/">http://practical-scheme.net/&lt;/a> - aggregates material for production scheme&lt;/li>
&lt;li>Herbert Stoyan - Early Lisp History: 1956-1959&lt;/li>
&lt;/ul>
&lt;h3 id="quotes">Quotes&lt;/h3>
&lt;blockquote>
&lt;p>LISP is understood as the model of a functional programming language today. There are people who believe that there once was a clean &amp;ldquo;pure&amp;rdquo; language design in the functional direction which was comprised by AI-programmers in search of efficiency. This view does not take into account, that around the end of the fifties, nobody, including McCarthy himself, seriously based his programming on the concept of mathematical function. It is quite certain that McCarthy for a long time associated programming with the design of stepwise executed &amp;ldquo;algorithms&amp;rdquo;. - Herbert Stoyan&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>On the other side, it was McCarthy who, as the first, seemed to have developed the idea of using funtional terms (in the form of &amp;ldquo;function calls&amp;rdquo; or &amp;ldquo;subroutine calls&amp;rdquo;) for every partial step of a program. This idea emerged more as a stylistic decision, proved to be sound and became the basis for a proper way of programming - functional progamming (or, as I prefer to call it, function-oriented programming). We should mention here that McCarthy at the same time conceived the idea of logic-oriented programming, that is, the idea of using logical formulae to express goals that a program should try to establish and of using the prover as programming language interpreter. To come back to functional programming, it is an important fact that McCarthy as mathematician was familiar with some formal mathematical languages but did not have a deep, intimate understanding of all their details. McCarthy himself has stressed this fact (23). His aim was to use the mathematical formalismus as languages and not as calculi. This is the root of the historical fact that he never took the Lambda-Calculus conversion rules as a sound basis for LISP implementation. We have to bear this in mind if we follow now the sequence of events that led to LISP. It is due to McCarthy&amp;rsquo;s work that functional programming is a usable way of programming today. The main practice of this programming style, done with LISP, still shows his personal mark. - Herbert Stoyan&lt;/p>&lt;/blockquote></content:encoded></item><item><title>Equinox Gold</title><link>https://alexalejandre.com/finance/equinox-gold/</link><pubDate>Mon, 10 Jun 2024 12:11:55 -0400</pubDate><guid>https://alexalejandre.com/finance/equinox-gold/</guid><description>2.2B market cap, 1.4B debt, forward P/E under 2</description><content:encoded>&lt;p>My &lt;a href="https://www.reddit.com/r/RobinHoodPennyStocks/comments/fhgd6j/tup_short_anatomy_of_a_beautiful_play_hopefully/">first DD&lt;/a> went up 30x. Four years later, this is my second.&lt;/p>
&lt;p>I&amp;rsquo;m not a gold bug, I&amp;rsquo;m just a value investor who really likes EQX&amp;rsquo;s story:&lt;/p>
&lt;p>Veteran mining investors believed gold would enter a secular bull market and formed Equinox. Through M&amp;amp;A they bought up rather cheap mines (due to high production costs, uneconomical at prior price levels) producing 500k oz/year. (For example, los filos costs $2600/oz right now, so they&amp;rsquo;re running it with a skeleton crew. They would like to add infrastructure too, but permitting&amp;rsquo;s an issue.) This simulates a highly leveraged bet on gold prices.&lt;/p>
&lt;p>They then had negative to flat earnings for years, while constructing the Greenstone mine. Almost all (150-250 million) per year OCF went into construction. Construction just finished, so this quarter will see ~30m in FCF (and earnings!) freed by completed capex (perhaps 50m with current gold prices.) Upon completion, management bought the other 40% of the mine from a partner. Management also purchased shares on the open market (Ross Beaty added a million shares!) Greenstone will produce 400,000 oz around $1000 each, over half a billion in FCF. At 50% capacity already, Greenstone may give an extra 60m in FCF. Peer mines are valued at 4x the company&amp;rsquo;s current market cap.&lt;/p>
&lt;p>Last quarter saw 120k oz sold at $2000 f0r 240m in revenue with 50m EBITDA. With Greenstone and current gold prices, we may expect 170k oz sold at $2300, for 391m in revenue, with ~220m EBITDA (remember, Greenstone production is cheap.) The quarter after might then see 220k oz ~300m EBITDA.&lt;/p>
&lt;p>I expect ~1.4B in debt, minus whatever they pay off. Specifically, 500m drawn + 500m drawn from a revolver (with 100m still available) and 450m in convertible notes of which 140m&amp;rsquo;s in the money. Even if gold drops 20%, that&amp;rsquo;ll be cut in half in a year. They have about 250m in cash.&lt;/p>
&lt;p>For the future management reiterates they will just operate Greenstone to deleverage and add infrastructure to increase capacity and reduce cost at other mines (however e.g. Castle Mountain permitting is expected to take until 2028, so capex won&amp;rsquo;t be an issue short term.)&lt;/p>
&lt;p>Summary: 2.2B market cap, 1.4B debt, forward P/E under 2.&lt;/p>
&lt;hr>
&lt;p>Notes:&lt;/p>
&lt;ul>
&lt;li>gold financing window is opening with higher prices (some recent announcements didn&amp;rsquo;t even involve warrants)&lt;/li>
&lt;li>gold driven cashflow trade higher (e.g. senior gold miners trade at 3x net present value) (which.. is crazy!)&lt;/li>
&lt;li>gold enjoys the lowest cost of capital in commodities&lt;/li>
&lt;/ul>
&lt;p>Since a deposit declines when mined, the implied cost of equity capital is negative! (I.e. shareholders&amp;rsquo; carry cost is negative.)&lt;/p>
&lt;p>A few quarters of steady operation should see EQX establish itself as a near senior (Greenstone is the only such mine outside of a senior, there is no uncertainty due to exploration etc.) Currently EQX trades at a low p/nav in its peer group, yet has the highest reserve basis and growth profile.&lt;/p>
&lt;p>With Greenstone, it&amp;rsquo;ll move up that value curve, and our implied holding cost is negative. Concretely, with a 20% decrease in gold price (my personal models use $2000/oz) that means a 10B market cap by 2026. (3x NPV would be 38 billion dollars.)&lt;/p>
&lt;p>Concerns:&lt;/p>
&lt;ul>
&lt;li>sensitivity to gold prices : obviously&lt;/li>
&lt;li>acquiring the other 40% of Greenstone, management diluted shareholders : but management also bought shares on the open market, and issuance for an accretive acquisition isn&amp;rsquo;t dilutive (higher EPS after)&lt;/li>
&lt;li>inflation drives gold costs&lt;/li>
&lt;li>many talking heads in commodities (Rick Rule, Ross Beaty et al.) mention it off hand, which made me worry I was caught in the spell of social media charlatans : but people in industry confirm they are respectable and their past performance is amazing&lt;/li>
&lt;li>the other mines&amp;rsquo; AISCs are abysmal, which could be indicative of poor management etc. : they explicitly bought cheap mines, uneconomical assets stranded until a new price cycle, which has come!&lt;/li>
&lt;/ul>
&lt;p>Mines:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>M&amp;amp;I Resources&lt;/th>
&lt;th>Reserves&lt;/th>
&lt;th>2024 Production&lt;/th>
&lt;th>AISC&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Greenstone&lt;/td>
&lt;td>6,868 @ 1.51&lt;/td>
&lt;td>5,539 @ 1.27&lt;/td>
&lt;td>?&lt;/td>
&lt;td>$890&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Castle Mountain&lt;/td>
&lt;td>1,480 @ .62&lt;/td>
&lt;td>4,168 @ .51&lt;/td>
&lt;td>30,000&lt;/td>
&lt;td>$2175&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Los Filos&lt;/td>
&lt;td>800 @ .75&lt;/td>
&lt;td>5,35 @ .86&lt;/td>
&lt;td>160,000&lt;/td>
&lt;td>$2140&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Aurizona&lt;/td>
&lt;td>670 @ 1.5&lt;/td>
&lt;td>1,66 @ 1.6&lt;/td>
&lt;td>115,000&lt;/td>
&lt;td>$1625&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Fazenda&lt;/td>
&lt;td>294 @ 1.77&lt;/td>
&lt;td>315 @ 1.47&lt;/td>
&lt;td>65,000&lt;/td>
&lt;td>$1620&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Santa Luz&lt;/td>
&lt;td>900 @ 1.69&lt;/td>
&lt;td>1,075 @ 1.34&lt;/td>
&lt;td>75,000&lt;/td>
&lt;td>$1770&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>RDM&lt;/td>
&lt;td>132 @ 1.27&lt;/td>
&lt;td>556 @ .99&lt;/td>
&lt;td>55,000&lt;/td>
&lt;td>$1850&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>N.b. M&amp;amp;I and Reserves are Koz @ g/t, prod is oz.&lt;/p>
&lt;p>Mesquite, Fazenda, RDM have shorter life spans and Castle Mountain, Greenstone, Los Filos, Aurizona, Santa Luz expect 10-20 years of continued operation (without further exploration, though the area around Greenstone was last surveyed 70 years ago and they are starting to explore now.) For example, unincluded in those numbers, underground, Greenstone has other known veins:&lt;/p>
&lt;ul>
&lt;li>9.79Mt @ 3.93 g/t or 1.2 Moz indicated&lt;/li>
&lt;li>24.59Mt @ 3.87 g/t or 3.1 Moz inferred&lt;/li>
&lt;/ul>
&lt;p>Materials:&lt;/p>
&lt;p>Actually there&amp;rsquo;s little analysis not from the company itself, which is why I wanted to write this. Unfortunately, I primarily program valuation models and and the numbers mostly just scream &amp;ldquo;BUY ME&amp;rdquo;.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.equinoxgold.com/wp-content/uploads/2024/05/EQX-PPT-20240524-CorpDeck.pdf">Presentation to Shareholders&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.equinoxgold.com/wp-content/uploads/2024/05/2024-Q1-EQX-MDA.pdf">Management&amp;rsquo;s Discussion and Analysis&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>I repeat, I don&amp;rsquo;t actually like gold. There&amp;rsquo;s little industrial consumption, so it&amp;rsquo;s value is purely fiat (whereas USD at least has the government requiring tax payments in USD, requiring organizations to accumulate it.) But&amp;hellip;&lt;/p>
&lt;p>Here are the drivers of gold&amp;rsquo;s price today:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.reddit.com/r/maxjustrisk/comments/1bt250q/april_2024_discussion_thread/kzd0zr6/">sanctions evasion&lt;/a> via gold (note Brazil, Mongolia, Kazakhstan, China etc. who do business with Russia are accumulating to settle USD denominated trade instead of treasuries, Basel III gave physical gold a high RSF)&lt;/li>
&lt;li>regions with cultural affinity to gold (China, India, Middle East) are booming (n.b. poorer Indians tend to save in silver) who often hold considerable assets in gold&lt;/li>
&lt;li>while gold&amp;rsquo;s done well on some time frames (e.g. 10x since 2000) it has barely compared to other asset classes or inflation (when you don&amp;rsquo;t cherry pick the data). Personally, I ascribe this to huge growth from tech, while populations with gold affinity didn&amp;rsquo;t see much wealth accumulation. Nowadays however, the Indian Ocean&amp;rsquo;s the nexus of world growth (see Gavekal.)&lt;/li>
&lt;li>Currently precious metals are ~.5% of total assets, with a 1.5-2% historical average. Mean reversion occurs over longer periods (let&amp;rsquo;s hope we haven&amp;rsquo;t had a regime shift!) You can have a lot of fun comparing corporate earnings or energy costs to gold etc. and everywhere it&amp;rsquo;s extremely low.&lt;/li>
&lt;li>US treasuries destroyed a lot of wealth recently. Even after losing 40%, they were offering yields under half the inflation rate. This challenged the 60/40 equity/bond portfolio because a 40% allocation guarantees a loss substantial enough to not meet fiduciary obligations in 10-15 years, with institutions exploring other options (e.g. 60/40 equity/trend or even 36/64 equity/trend) driving further disintermediation. (N.b. currently, that liquidity is going into big tech, &lt;a href="https://old.reddit.com/r/stocks/comments/1da6j8s/rstocks_daily_discussion_fundamentals_friday_jun/l7iyhb8/">small caps&lt;/a> etc. have seen huge outflows.) And lower rates help gold in the same way they help bonds.&lt;/li>
&lt;/ul></content:encoded></item><item><title>Golang Commonplace Book</title><link>https://alexalejandre.com/programming/go/golang-commonplace/</link><pubDate>Wed, 29 May 2024 13:28:43 +0100</pubDate><guid>https://alexalejandre.com/programming/go/golang-commonplace/</guid><description>My personal Go refresher</description><content:encoded>&lt;h3 id="patterns">Patterns&lt;/h3>
&lt;p>&lt;a href="https://www.reddit.com/r/golang/comments/3rhlyc/language_choice_wrt_go_and_haskell/cwo6new/">Isolate i/o&lt;/a> like Haskell from business logic:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic">// Meh&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> &lt;span style="color:#82aaff">DoA&lt;/span>(c ObjectWithMethodsABCDEFG) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> c.&lt;span style="color:#82aaff">CallMethodA&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic">// Better&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">type&lt;/span> JustMethodA &lt;span style="color:#c099ff">interface&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#82aaff">CallMethodA&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> &lt;span style="color:#82aaff">DoA&lt;/span>(c JustMethodA) { }
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Semantic Typestate&lt;/p>
&lt;p>Base types mean you &amp;ldquo;don&amp;rsquo;t know what this does.&amp;rdquo; Later, when you grok the domain, meaningful &lt;a href="https://www.reddit.com/r/golang/comments/1b8dcxq/struct_data_types_vs_semantic_types/ktp751d/">semantic types&lt;/a> guarantee correctness while obviating error handling, validation etc. because incorrect state is unrepresentable.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">type&lt;/span> Username &lt;span style="color:#4fd6be">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">type&lt;/span> Domain &lt;span style="color:#4fd6be">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">type&lt;/span> Email &lt;span style="color:#c099ff">struct&lt;/span> { &lt;span style="color:#444a73;font-style:italic">// Address&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> user Username
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> domain Domain
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> &lt;span style="color:#82aaff">NewEmail&lt;/span>(user Username, domain Domain) Email {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">return&lt;/span> Email{user, domain}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> (e &lt;span style="color:#c3e88d;font-weight:bold">*&lt;/span>Email) &lt;span style="color:#82aaff">UnmarshalText&lt;/span>(b []&lt;span style="color:#4fd6be">byte&lt;/span>) &lt;span style="color:#4fd6be">error&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> parts &lt;span style="color:#c3e88d;font-weight:bold">:=&lt;/span> bytes.&lt;span style="color:#82aaff">SplitN&lt;/span>(b, []&lt;span style="color:#c3e88d">byte&lt;/span>(&lt;span style="color:#c3e88d">&amp;#34;@&amp;#34;&lt;/span>), &lt;span style="color:#ffc777">2&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">if&lt;/span> &lt;span style="color:#c3e88d">len&lt;/span>(parts) &lt;span style="color:#c3e88d;font-weight:bold">!=&lt;/span> &lt;span style="color:#ffc777">2&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">return&lt;/span> errors.&lt;span style="color:#82aaff">New&lt;/span>(&lt;span style="color:#c3e88d">&amp;#34;invalid email&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> e.user = &lt;span style="color:#82aaff">Username&lt;/span>(&lt;span style="color:#c3e88d">string&lt;/span>(parts[&lt;span style="color:#ffc777">0&lt;/span>]))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> e.domain = &lt;span style="color:#82aaff">Domain&lt;/span>(&lt;span style="color:#c3e88d">string&lt;/span>(parts[&lt;span style="color:#ffc777">1&lt;/span>]))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">return&lt;/span> &lt;span style="color:#ffc777">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;a href="https://www.emoses.org/posts/resolver-resolved-pattern/">Typestate&lt;/a> represents state with interfaces, implemented by the same struct. Performing state transitions only in methods or boundaries renders incorrect state unrepresentable:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">type&lt;/span> Queryer &lt;span style="color:#c099ff">interface&lt;/span> { &lt;span style="color:#444a73;font-style:italic">// start&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#82aaff">AddQuery&lt;/span>(someId &lt;span style="color:#4fd6be">string&lt;/span>, someData &lt;span style="color:#4fd6be">string&lt;/span>) &lt;span style="color:#444a73;font-style:italic">// batch queries&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#82aaff">AddDeadline&lt;/span>(deadline time.Time) &lt;span style="color:#444a73;font-style:italic">// extra info for query&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#82aaff">Perform&lt;/span>(context.Context, Performer) (Result, &lt;span style="color:#4fd6be">error&lt;/span>) &lt;span style="color:#444a73;font-style:italic">// does the query, transitions state&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">type&lt;/span> Result &lt;span style="color:#c099ff">interface&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#82aaff">SeeResult&lt;/span>(id &lt;span style="color:#4fd6be">string&lt;/span>) (&lt;span style="color:#4fd6be">string&lt;/span>, &lt;span style="color:#4fd6be">bool&lt;/span>) &lt;span style="color:#444a73;font-style:italic">// A failure shows (&amp;#34;&amp;#34;, false)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">type&lt;/span> Performer &lt;span style="color:#c099ff">interface&lt;/span> { &lt;span style="color:#444a73;font-style:italic">// performs the query&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#82aaff">doTheQuery&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ctx context.Context,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> idsToResolve &lt;span style="color:#c099ff">map&lt;/span>[&lt;span style="color:#4fd6be">string&lt;/span>][]&lt;span style="color:#4fd6be">string&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> deadline time.Time,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ) ([]results, &lt;span style="color:#4fd6be">error&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#444a73;font-style:italic">// same struct implements Queryer and Performer&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">type&lt;/span> Doer &lt;span style="color:#c099ff">struct&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> queries &lt;span style="color:#c099ff">map&lt;/span>[&lt;span style="color:#4fd6be">string&lt;/span>][]&lt;span style="color:#4fd6be">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> deadline time.Time
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> results &lt;span style="color:#c099ff">map&lt;/span>[&lt;span style="color:#4fd6be">string&lt;/span>]&lt;span style="color:#4fd6be">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> (d &lt;span style="color:#c3e88d;font-weight:bold">*&lt;/span>Doer) &lt;span style="color:#82aaff">AddQuery&lt;/span>(someId &lt;span style="color:#4fd6be">string&lt;/span>, info &lt;span style="color:#4fd6be">string&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> d.queries[info] = &lt;span style="color:#c3e88d">append&lt;/span>(d.queries[info], someId)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> (d &lt;span style="color:#c3e88d;font-weight:bold">*&lt;/span>Doer) &lt;span style="color:#82aaff">AddDeadline&lt;/span>(deadline time.Time) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> d.deadline = deadline
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> (d &lt;span style="color:#c3e88d;font-weight:bold">*&lt;/span>Doer) &lt;span style="color:#82aaff">Perform&lt;/span>(ctx context.Context, performer Performer) (Result, &lt;span style="color:#4fd6be">error&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> result, _ &lt;span style="color:#c3e88d;font-weight:bold">:=&lt;/span> performer.&lt;span style="color:#82aaff">doTheQuery&lt;/span>(ctx, d.queries, d.deadline) &lt;span style="color:#444a73;font-style:italic">// no handle(err)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> d.results = &lt;span style="color:#82aaff">transformResult&lt;/span>(result)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">return&lt;/span> d, &lt;span style="color:#ffc777">nil&lt;/span> &lt;span style="color:#444a73;font-style:italic">// return same struct as different interface&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> (d &lt;span style="color:#c3e88d;font-weight:bold">*&lt;/span>Doer) &lt;span style="color:#82aaff">SeeResult&lt;/span>(id &lt;span style="color:#4fd6be">string&lt;/span>) (&lt;span style="color:#4fd6be">string&lt;/span>, &lt;span style="color:#4fd6be">bool&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> res, ok &lt;span style="color:#c3e88d;font-weight:bold">:=&lt;/span> d.results[id]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">return&lt;/span> result, ok
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;a href="https://arslan.io/2022/12/04/functional-table-driven-tests-in-go/">Functional table driven tests&lt;/a> add valid base cases to test structs, lest they become an &lt;a href="https://quii.gitbook.io/learn-go-with-tests/meta/anti-patterns#complicated-table-tests">antipattern&lt;/a> from &lt;a href="https://github.com/tektoncd/pipeline/blob/f83cd1f63bb216c76a3af46d58614d517113d1c5/pkg/pod/pod_test.go?ref=arslan.io#L78">inputting&lt;/a> &lt;a href="https://github.com/operator-framework/operator-lifecycle-manager/blob/6ffec4d5a1c3245a5302a5ca02deebd1af543e7f/test/e2e/csv_e2e_test.go?ref=arslan.io#L445">huge&lt;/a> &lt;a href="https://github.com/grafana/loki/blob/37b1c0fce035affeb486528c09de8975f5b31d68/operator/internal/manifests/storage/configure_test.go?ref=arslan.io#L189">structs&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> &lt;span style="color:#82aaff">TestIsHuman&lt;/span>(t &lt;span style="color:#c3e88d;font-weight:bold">*&lt;/span>testing.T) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tests: []&lt;span style="color:#c099ff">struct&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> testName &lt;span style="color:#4fd6be">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> person &lt;span style="color:#c099ff">func&lt;/span>(person &lt;span style="color:#c3e88d;font-weight:bold">*&lt;/span>Person) &lt;span style="color:#444a73;font-style:italic">// slot in base cases&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }{{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> testName: &lt;span style="color:#c3e88d">&amp;#34;Robot&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> FirstName: &lt;span style="color:#c3e88d">&amp;#34;R2&amp;#34;&lt;/span>, &lt;span style="color:#444a73;font-style:italic">// tests only change values of interest&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> LastName: &lt;span style="color:#c3e88d">&amp;#34;D2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> testName: &lt;span style="color:#c3e88d">&amp;#34;Too large&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Height: &lt;span style="color:#ffc777">1000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Weight: &lt;span style="color:#ffc777">1000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }, }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">for&lt;/span> _, tt &lt;span style="color:#c3e88d;font-weight:bold">:=&lt;/span> &lt;span style="color:#c099ff">range&lt;/span> tests {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#444a73;font-style:italic">// tt := tt // no longer necessary&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> t.&lt;span style="color:#82aaff">Run&lt;/span>(tt.name, &lt;span style="color:#c099ff">func&lt;/span>(t &lt;span style="color:#c3e88d;font-weight:bold">*&lt;/span>testing.T {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> person &lt;span style="color:#c3e88d;font-weight:bold">:=&lt;/span> &lt;span style="color:#82aaff">testPerson&lt;/span>() &lt;span style="color:#444a73;font-style:italic">// use specific base case, may add more, use flag in test cases&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">if&lt;/span> tt.person &lt;span style="color:#c3e88d;font-weight:bold">!=&lt;/span> &lt;span style="color:#ffc777">nil&lt;/span> { &lt;span style="color:#444a73;font-style:italic">// reset base case on each iterate&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tt.&lt;span style="color:#82aaff">person&lt;/span>(person)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> err &lt;span style="color:#c3e88d;font-weight:bold">:=&lt;/span> &lt;span style="color:#82aaff">IsHuman&lt;/span>(tt.person)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#444a73;font-style:italic">// ...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ))}}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> &lt;span style="color:#82aaff">testPerson&lt;/span>() &lt;span style="color:#c3e88d;font-weight:bold">*&lt;/span>Person {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">return&lt;/span> &lt;span style="color:#c3e88d;font-weight:bold">&amp;amp;&lt;/span>Person{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> FirstName: &lt;span style="color:#c3e88d">&amp;#34;Bob&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> LastName: &lt;span style="color:#c3e88d">&amp;#34;Alain&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Birthday: &lt;span style="color:#c3e88d">&amp;#34;1980-8-9&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Height: &lt;span style="color:#ffc777">175&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Weight: &lt;span style="color:#ffc777">75&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Address: Address{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Number: &lt;span style="color:#ffc777">118&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> StreetName: &lt;span style="color:#c3e88d">&amp;#34;Basil&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> StreetType: &lt;span style="color:#c3e88d">&amp;#34;dr.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> City: &lt;span style="color:#c3e88d">&amp;#34;Parsley&amp;#34;&lt;/span>}}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Write one-off JSON with a &amp;ldquo;&lt;a href="https://akavel.com/go-loose">loose&lt;/a>&amp;rdquo; helper:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">type&lt;/span> loose &lt;span style="color:#c099ff">map&lt;/span>[&lt;span style="color:#4fd6be">string&lt;/span>]&lt;span style="color:#4fd6be">any&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>json.&lt;span style="color:#82aaff">NewEncoder&lt;/span>(os.Stdout).&lt;span style="color:#82aaff">Encode&lt;/span>(loose{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d">&amp;#34;foo&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;go1.18+&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d">&amp;#34;fee&amp;#34;&lt;/span>: loose{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c3e88d">&amp;#34;fum&amp;#34;&lt;/span>: &lt;span style="color:#c3e88d">&amp;#34;baz&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>})
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Emulate pattern matching with a &lt;a href="https://akavel.com/go-tuple-switch">tuple switch&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c099ff">func&lt;/span> &lt;span style="color:#82aaff">f&lt;/span>(foo, bar, baz &lt;span style="color:#4fd6be">bool&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">type&lt;/span> tuple &lt;span style="color:#c099ff">struct&lt;/span>{ foo, bar, baz &lt;span style="color:#4fd6be">bool&lt;/span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">switch&lt;/span> (tuple{foo, bar, baz}) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">case&lt;/span> tuple{&lt;span style="color:#ffc777">true&lt;/span>, &lt;span style="color:#ffc777">true&lt;/span>, &lt;span style="color:#ffc777">true&lt;/span>}:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#444a73;font-style:italic">// ...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">case&lt;/span> tuple{&lt;span style="color:#ffc777">true&lt;/span>, &lt;span style="color:#ffc777">true&lt;/span>, &lt;span style="color:#ffc777">false&lt;/span>}:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#444a73;font-style:italic">// ...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c099ff">case&lt;/span> tuple{&lt;span style="color:#ffc777">true&lt;/span>, &lt;span style="color:#ffc777">false&lt;/span>, &lt;span style="color:#ffc777">true&lt;/span>},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tuple{&lt;span style="color:#ffc777">true&lt;/span>, &lt;span style="color:#ffc777">false&lt;/span>, &lt;span style="color:#ffc777">false&lt;/span>},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tuple{&lt;span style="color:#ffc777">false&lt;/span>, &lt;span style="color:#ffc777">true&lt;/span>, &lt;span style="color:#ffc777">true&lt;/span>}:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#444a73;font-style:italic">// ...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>if err != nil { return err }&lt;/code> is an antipattern. Your errors should hold &lt;a href="https://akavel.com/go-errors">meaning&lt;/a> (to e.g. help debug.)&lt;/p>
&lt;h3 id="tooling">Tooling&lt;/h3>
&lt;ul>
&lt;li>&lt;code>go help mod vendor&lt;/code>&lt;/li>
&lt;li>&lt;code>go mod tidy&lt;/code>&lt;/li>
&lt;li>&lt;code>go doc http Request&lt;/code> // Or &lt;code>http.Request&lt;/code> syntax&lt;/li>
&lt;li>&lt;code>go doc -all http&lt;/code>&lt;/li>
&lt;li>&lt;code>go doc -src http.HandlerFunc&lt;/code> shows source&lt;/li>
&lt;li>&lt;code>go env GOCACHE&lt;/code>&lt;/li>
&lt;li>&lt;code>go test -count=1 -race&lt;/code> // add &lt;code>all&lt;/code> to end for dependencies too&lt;/li>
&lt;li>&lt;code>go test -run=^$ -bench=. -benchmem ./...&lt;/code> to benchmark&lt;/li>
&lt;li>&lt;code>go test -bench=. -cpu=1,2,8 ./...&lt;/code> runs tests with multiple GMAXPROCS settings&lt;/li>
&lt;li>&lt;code>GOOS=freebsd GOARCH=amd64 go build -o=/home/desert/Desktop .&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>VScode&amp;rsquo;s &lt;a href="https://github.com/golang/vscode-go">Go&lt;/a> extension does fmt, vet, lint etc. already. Run, test and build implicitly do a get before.&lt;/p>
&lt;ul>
&lt;li>&lt;code>go list -m all&lt;/code> displays all dependencies (in your dependencies&amp;rsquo; dependencies.)&lt;/li>
&lt;li>&lt;code>go mod why -m github.com/weird/dependency&lt;/code> gives you main&amp;rsquo;s path to this, &lt;a href="https://github.com/golang/go/issues/27900">generally&lt;/a>&lt;/li>
&lt;li>&lt;code>gofmt -d -w -r 'e.Check(err) -&amp;gt; e.Check(err, reqID)' .&lt;/code> // -r makes a rewrite rule replacing code (but e.g. not string contents) -w will actually perform the change, while -d will just show you the dif (to make sure it does what you want first)&lt;/li>
&lt;/ul>
&lt;p>Visual test coverage profiling:&lt;/p>
&lt;ul>
&lt;li>&lt;code>go test -covermode=count -coverprofile=/tmp/profile.out ./...&lt;/code>&lt;/li>
&lt;li>&lt;code>go tool cover -html=/tmp/profile.out&lt;/code> // USe this or below to view&lt;/li>
&lt;li>&lt;code>go tool cover -func=/tmp/profile.out&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Performance profiling:&lt;/p>
&lt;ul>
&lt;li>Add &lt;a href="https://pkg.go.dev/runtime/pprof">code&lt;/a>&lt;/li>
&lt;li>&lt;code>go tool pprof --nodefraction=0.1 -http=:5000 /tmp/cpuprofile.out&lt;/code> shows it. ``&amp;ndash;nodefraction` ignores nodes found in less than 10% of samples.&lt;/li>
&lt;li>&lt;code>go test -run=^$ -bench=^. -trace=/tmp/trace.out .&lt;/code>&lt;/li>
&lt;li>&lt;code>go tool trace /tmp/trace.out&lt;/code> to see&lt;/li>
&lt;li>More on &lt;a href="https://artem.krylysov.com/blog/2017/03/13/profiling-and-optimizing-go-web-applications/and">optimizing&lt;/a> and &lt;a href="https://go.dev/wiki/Performance">performance&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="local-development">Local Development&lt;/h3>
&lt;p>For air-gapped/offline situations:&lt;/p>
&lt;p>Maintain dummy module importing all packages you like/need, write to CD for audit trail, then copypaste its vendor directory into a new module.&lt;/p>
&lt;ul>
&lt;li>&lt;code>go mod vendor&lt;/code> downloads dependencies to vendor directory&lt;/li>
&lt;li>&lt;code>go build -mod=vendor&lt;/code> satisfies dependencies from module&amp;rsquo;s vendor directory&lt;/li>
&lt;/ul>
&lt;p>Manually or for new packages, make a dummy web import:&lt;/p>
&lt;ul>
&lt;li>&lt;code>go mod edit -replace=github.com/some/package=/home/desert/some/package&lt;/code> for local version&lt;/li>
&lt;li>&lt;code>go mod edit -dropreplace=github.com/some/package&lt;/code> would undo this&lt;/li>
&lt;/ul>
&lt;p>Maintain your own package proxy via env &lt;code>GOPROXY&lt;/code>: &lt;a href="https://go.dev/ref/mod#goproxy-protocol">https://go.dev/ref/mod#goproxy-protocol&lt;/a> Use &lt;a href="https://github.com/gomods/athens">featured&lt;/a> + &lt;a href="https://gomods.io/walkthrough/#using-the-athens-proxy">guide&lt;/a> or &lt;a href="https://github.com/goproxy/goproxy">minimal&lt;/a> or &lt;a href="https://jfrog.com/artifactory/">bloated&lt;/a> corporate solution.&lt;/p>
&lt;p>Since Go 1.21, set &lt;code>GOTOOLCHAIN&lt;/code> to &lt;code>local&lt;/code> (or your specific version e.g. &lt;code>1.21&lt;/code>) lest it attempt and fail to download a newer toolchain.&lt;/p>
&lt;h3 id="set-up">Set Up&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://github.com/udhos/update-golang">Streamline Updates/Installation&lt;/a>&lt;/li>
&lt;li>VScode extensions: Go, Go Doc (Minhaz Ahmed Syrus)&lt;/li>
&lt;li>&lt;a href="https://goplay.tools/">Better Playground&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>Deliberate Practice for Developers</title><link>https://alexalejandre.com/programming/deliberate-practice-for-developers/</link><pubDate>Wed, 13 Mar 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/deliberate-practice-for-developers/</guid><description>Athletes and fighters go to the gym, how do zen software monks work out?</description><content:encoded>&lt;h2 id="deliberate-practice">Deliberate practice&lt;/h2>
&lt;p>Deliberate practice involves focusing on a specific task to make directed improvements (e.g. how high your fingers lay at rest on a guitar neck or how we form loops while writing cursive.) It relies on:&lt;/p>
&lt;ul>
&lt;li>understanding what the best do&lt;/li>
&lt;li>breaking goals down into small steps&lt;/li>
&lt;li>regular, focused practice&lt;/li>
&lt;li>immediate feedback&lt;/li>
&lt;/ul>
&lt;p>Most people &lt;a href="https://danluu.com/p95-skill/">put in the absolute minimum&lt;/a> even when they care, so it is easy to excel by thinking about what we&amp;rsquo;re doing and emulating the masters. We can break down their virtuosity into small steps, each taking us slightly outside of our comfort zone. With immediate feedback, we can gain confidence to stay on the right path until we have conquered this area and can begin working on a new technique or optimization.&lt;/p>
&lt;blockquote>
&lt;p>You must avoid at all cost the idea that you can manage learning several skills at a time. You need to develop your powers of concentration, and understand that trying to multitask will be the death of the process. - Robert Greene&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;h2 id="for-developers">For Developers&lt;/h2>
&lt;p>Aggregators like HN, Reddit etc. submit us to a constant stream of distractions. Following the herd with the latest API, library or language clogs our mental bandwidth/mindshare, preventing us from perceiving the deeper, durable structures underlying our field. A historical perspective helps us appreciate the problems and solutions which arose in the past and led us to where we are today (often showing us how new solutions and trends repeat past approaches with the same pitfalls.)&lt;/p>
&lt;p>To improve, refactoring (changing the code representation of behavior between representations) and adding new features/behavior is our bread and butter of leaning. &lt;span class="marginnote">Inspired by the Quora post linked below&lt;/span> Interview type questions/leetcode/katas lead us away from this truth, teaching us to quickly produce (unexamined) rough drafts and nothing more. (For certain problem subsets (e.g. interviews) imprinting CRUD best practices into rote memory may work, but only undergirded by introspection and deep experience.)&lt;/p>
&lt;p>Although we have little physical component, some minor mental parts are equivalent (touch typing, hotkeys (be they Emacs, VSC etc.), knowing our languages&amp;rsquo; core libraries to obviate referring to documentation&amp;hellip;) and can be drilled or integrated into our flashcard regimen.&lt;/p>
&lt;p>Keep these in mind:&lt;/p>
&lt;ul>
&lt;li>selfdiscipline (run through barriers)&lt;/li>
&lt;li>selfconfidence (we create solutions, so we should believe in them and our ability to overcome them)&lt;/li>
&lt;li>break problems down/abstract: just as with deliberate practice itself, we should do this for our problem space, our ticket requirements etc.&lt;/li>
&lt;li>analogies: e.g. if we think of x like a tree, we can use so and so algorithm&lt;/li>
&lt;/ul>
&lt;h2 id="practice-ideas">Practice Ideas:&lt;/h2>
&lt;blockquote>
&lt;p>it’s more valuable to do the same exercise six times with variations than to do &lt;em>everything&lt;/em> once&lt;/p>&lt;/blockquote>
&lt;p>Though I love designing and preplaning, &lt;span class="marginnote">Overcoming such blockers on all levels is good management.&lt;/span> one &lt;a href="https://wiki.c2.com/?ExtremeProgrammingCorePractices">extreme&lt;/a> form of test driven development advocated for programming against an acceptance test all day and if unable to finish, to throw out your code, then refactor or build tooling the next days until you can finish the feature in a day, which is a fine kata indeed! Erlang designer Joe Armstrong even &lt;a href="https://www.hytradboi.com/2025/03580e19-4646-4fba-91c3-17eaba6935b0-throwing-it-all-away---how-extreme-rewriting-changed-the-way-i-build-databases">told&lt;/a> Tyler Neely: &lt;em>to be more productive, throw away anything you can&amp;rsquo;t finish in a day.&lt;/em>&lt;/p>
&lt;p>To get better at a e.g. logging, start with a working program, then introduce a logging component. Then on a second until you&amp;rsquo;ve added it to 10, accounting for differences in their architecture and purpose. After you&amp;rsquo;ve gained some insights, add it again to each of them, profitably appreciating the trade offs and approaches needed. Now do logging in a different paradigm, instead of Go do it in Clojure!&lt;/p>
&lt;p>Batch research and programming; instead of stopping to google, write down your question and why, then continue programming. Only after we can&amp;rsquo;t go further address the group of questions together, noting their answers down and incorporate them into your code (narrowing the scope of practice.) Gradually you&amp;rsquo;ll learn ways to use placeholders or code around unknowns, particularly helpful when we can&amp;rsquo;t simply research the answer!&lt;/p>
&lt;p>Many aspects of engineering don&amp;rsquo;t provide immediate feedback, which is needed to modify your approach. But the &lt;a href="https://matthiasnoback.nl/2021/02/refactoring-the-mikado-method/">Mikado refactoring&lt;/a> method could work for architecture, where you code until hitting a roadblock, then reset it and instead code to fix the roadblock, perhaps hitting another until you start fresh targeting the core problem. This can help you implicitly grok the sources of future problems.&lt;/p>
&lt;p>Just slowly work through SICP, Domain Modeling Made Functional or such, doing a half an hour of an exercise per day.&lt;/p>
&lt;p>Go through leetcode problems and sort them e.g. by array or dynamic programming and explain the approach in words (e.g. use a hash map to check for difference value, add index of last occurrence; make two passes, first in order, then in reverse, to compute products)
so you internalize how to handle the problem type (see this &lt;a href="https://www.youtube.com/redirect?event=video_description&amp;amp;redir_token=QUFFLUhqbnFtWVh3cVlFZkhUcE5MQlRkUW8xc1RaR0FmUXxBQ3Jtc0trUHZPTHp4M3pRc0tFWFVrVUxyTWpvSVB0NlhQNkZ4OEc2NkFwUlMxYWRQV1NPZmRZQ3NndHZKbFk2aVdJOGJDUF90OWNic3RTVzZlMU1vOEpieHFfUGlJVkhRZ2t6d1hjOGVRNjgxVUhKcXA3bjBnTQ&amp;amp;q=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2F1A2PaQKcdwO_lwxz9bAnxXnIQayCouZP6d-ENrBz_NXc%2Fedit%3Fusp%3Dsharing&amp;amp;v=SVvr3ZjtjI8">spreadsheet&lt;/a>.) Automaticity in foundational skills reduces [cognitive load(https://research.unsw.edu.au/people/emeritus-professor-john-sweller/publications?type=journalarticles)], enabling higher order thinking.&lt;/p>
&lt;p>Track bugs, build exercises around avoiding them (like Knuth&amp;rsquo;s error log.) If off-by-one mistakes abound, solve many binary search, parity and boundary-related problems. Is there something that you notice when writing these programs? Do you pay closer attention to boundaries, or reason about them differently?&lt;/p>
&lt;p>More commonly, a codebase will clearly outline holes in its maintainers&amp;rsquo; knowledge. What eggshells do you walk on while closing tickets? Was the team using an ORM as a crutch out of fear of SQL? Learning a bit of SQL, every relevant ticket becomes a drill of migrating from ORM to straight SQL!&lt;/p>
&lt;p>Katas for algorithms etc. Pick a data structure of algorithm. Each day for a week, find a different implementation, look at it, then without looking try to implement it, only looking when you get stuck. At the end of the week, you&amp;rsquo;ll have really learned it and its different varieties.&lt;/p>
&lt;blockquote>
&lt;p>algorithms drill the skill of bug-free coding. Algorithms are hard and frustrating! Subtle off-by-one might not matter for simple tests, but breaks corner cases. But if you practice algorithms, you get better at this particular skill of writing correct small programs, and I think this probably generalizes. - &lt;a href="https://matklad.github.io/2023/08/13/role-of-algorithms.html">Alex Kladov&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Relatedly, &lt;a href="https://mtlynch.io/">Michael Lynch&lt;/a> sometimes watches recordings of himself programming to find time sinks and improve his work flow.
&lt;details id="watch-him-watch-himself">
&lt;summary>Watch him watch himself&lt;/summary>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/07eyKDHjv6U?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video">&lt;/iframe>
&lt;/div>
&lt;/details>&lt;/p>
&lt;p>If you have further ideas, I&amp;rsquo;d love to hear them!&lt;/p>
&lt;h3 id="an-openended-question">An Openended Question:&lt;/h3>
&lt;p>Showcasing competence is difficult. While designers and frontend devs can make portfolios of beautiful or evocative UIs, their architectural decisions and concrete user friendliness aren&amp;rsquo;t obvious. Other developers face this everywhere. While software design skills are universally applicable, how do we display mastery honed through thousands of exercises?&lt;/p>
&lt;p>(Currently we meekly hope to find someone of equal intelligence, taste and skill to vouch for us.)&lt;/p>
&lt;hr>
&lt;h3 id="further-reading">Further reading:&lt;/h3>
&lt;ul>
&lt;li>Peak - Anders Ericsson&lt;/li>
&lt;li>Mastery - Robert Greene: Interprets Ericsson&amp;rsquo;s mental representations and directed focus as key to mastery&lt;/li>
&lt;li>&lt;a href="http://calnewport.com/blog/2010/01/06/the-grandmaster-in-the-corner-office-what-the-study-of-chess-experts-teaches-us-about-building-a-remarkable-life/">http://calnewport.com/blog/2010/01/06/the-grandmaster-in-the-corner-office-what-the-study-of-chess-experts-teaches-us-about-building-a-remarkable-life/&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://calnewport.com/blog/2012/11/27/some-notes-on-deep-working/">http://calnewport.com/blog/2012/11/27/some-notes-on-deep-working/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.quora.com/What-are-some-tips-for-advanced-writers/answer/Venkatesh-Rao?srid=P99r">https://www.quora.com/What-are-some-tips-for-advanced-writers/answer/Venkatesh-Rao?srid=P99r&lt;/a> Paraphrasing: Normal writers spend 10-20% of time rewriting, serious writers spend 50-90% rewriting. Editing both improves the piece and you as a writer.&lt;/li>
&lt;li>Why Greatness Cannot Be Planned: The Myth of the Objective - Kenneth Stanley: Argues for novelty searching surpassing objective driven learning, but poorly written, too wordy, half academic book, half self help book&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=SVvr3ZjtjI8">https://www.youtube.com/watch?v=SVvr3ZjtjI8&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>Investing in Coal</title><link>https://alexalejandre.com/finance/investing-in-coal/</link><pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/finance/investing-in-coal/</guid><description>Bad for the environment, good for our wallets.</description><content:encoded>&lt;p>Fundamentally: Where are we in the cycle? Did the commodity supercycle start 2 years ago with 5-7 years to go? Or might things stay the same? Until November, these assets were priced as if a recession were around the corner, now they&amp;rsquo;re priced as if prices will drop a bit.&lt;/p>
&lt;h2 id="key-factors">Key Factors&lt;/h2>
&lt;p>On the short term, a mine in China just had an accident, dropping production. India and China are both subsidizing infrastructure and steel, requiring more coal. &lt;span class="marginnote">N.b. For US producers like AMR, foreign prices are much higher than domestic.&lt;/span> Medium term, Biden&amp;rsquo;s recent moves to stop new nat gas projects are a betrayal to the EU, whose gas needs the US promised to cover in sanctions negotiations. This adds a lot of uncertainty to new projects around the world, with higher anticipated gas prices. If gas is higher, all coal is more economical. Bad for the world and environment, good for our wallets if we play it right.&lt;/p>
&lt;p>AMR is the most capital disciplined, HCC is half a story of hope (that the cycle continues through 2026 when the new mine starts), but GLNCY (Glencore) is the real opportunity.&lt;/p>
&lt;h3 id="amr">AMR&lt;/h3>
&lt;p>AMR&amp;rsquo;s RoE is over 50% and their FCF yield is 13%, where ARCH&amp;rsquo;s is 8%, HCC is about 5%. They use this for a 20% buyback yield. Even with declining coal prices (still high) their profitability is still amazing.&lt;/p>
&lt;p>Somehow, they are still cheaper than the others, even with amazing management. This is perhaps because of its prodigious growth so far, which also prevents me from fully investing into it (even though its numbers seem much better than anything else I have now.) The risk is India slowing down. China&amp;rsquo;s subsidizing their steel industry right now, causing further coal demand, increasing the price for India, whither much of AMR&amp;rsquo;s product goes. If nothing changes, $800/share makes sense by 2025. While the math makes sense, psychology&amp;rsquo;s weird. If it&amp;rsquo;s gone up so fast, couldn&amp;rsquo;t it drop too? Why hold that risk for only 100% gain, after thousands of % gain? etc. etc. That&amp;rsquo;s just looking at base numbers. It&amp;rsquo;s also been included in the SPX600 which sits at 11.5. Why shouldn&amp;rsquo;t AMR see multiple expansion by 2-4x to be where the rest of the industry is?&lt;/p>
&lt;p>AMR mostly sells abroad. ~80% of revenue from ~70% of product: &lt;span class="marginnote">N.b. These quotes are from different years.&lt;/span>&lt;/p>
&lt;blockquote>
&lt;p>81% is from foreign sales and 19% is from the USA. Specifically, in 2022 they sold their coal in 26 countries, with a strong predominance in Asia (53% of revenue, with India accounting for 33% of the total). All of their sales are in USD$, which eliminates currency risk. They own 65% of Dominion Terminal Associates, a coal export terminal in Virginia,&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>2021, Alpha Metallurgical Resources exported 13.9 million tons of coking coal. This is approximately 69% of the total volume of deliveries.&lt;/p>&lt;/blockquote>
&lt;h3 id="glncy">GLNCY&lt;/h3>
&lt;p>Glencore bought out the #1 and #9 producers&amp;rsquo; coal capacity (merging it will take the rest of the year though) while already being a larger producer. (They are also a big player in copper, zinc, cobalt, lead, nickel etc.), preparing to supply the energy transition. (They also make billions in trading (&amp;ldquo;marketing&amp;rdquo;).) Tesla wanted to buy 20%, which they rejected to increase coal exposure.&lt;/p>
&lt;p>Here&amp;rsquo;s Glencore&amp;rsquo;s 288 page &lt;a href="https://www.glencore.com/.rest/api/v1/documents/ded10fa92974aa388a43aa9f86f483e9/GLEN-2022-Annual-Report.pdf">2022 annual report&lt;/a> covering more than I can, so I&amp;rsquo;ll just point out a few key things: &lt;span class="marginnote">Most of my words concern other sources.&lt;/span>&lt;/p>
&lt;ul>
&lt;li>22% EBITDA from &amp;ldquo;marketing&amp;rdquo; at 8% capex&lt;/li>
&lt;li>45% capex into copper, only 21% into coal&lt;/li>
&lt;li>42% EBITDA from coal, 24% from copper&lt;/li>
&lt;/ul>
&lt;p>Reading between the lines, it seems they expected coal to be a shorter term play and underinvested in future capacity. But now they&amp;rsquo;re increasing longterm capacity through huge acquisitions.&lt;/p>
&lt;p>Publicly, they want to decarbonize. The 2022 report, corporate announcements etc. stress this loudly. After the fact, they began large coal acquisitions, publicly intending to spin them off as a US listed coal company within 2 years. Whether they will actually spin coal out or keep the 40% boost to revenue, is a prickly question.Many believe these statements are intended to quiet ESG concerns. However it could be motivated financially, as conglomerates tend towards lower P/E ratios and more specific tickers let investors concentrate. On the other hand, commodity tend towards lower multiples (until the end of the cycle when they expand and you should get out.)&lt;/p>
&lt;p>GLNCY is a complex conglomerate with 65 facilities producing and processing 60+ resources in 35 countries around the world. They are not US listed and few derivatives exist, keeping many institutional investors away due to inability to hedge. Nevertheless, they do not experience exchange risk:&lt;/p>
&lt;blockquote>
&lt;p>The vast majority of transactions undertaken by the Group’s industrial and marketing activities are denominated in U.S. dollars. However, the Group is exposed to fluctuations in currency exchange rates through its industrial activities, because a large proportion of the operating costs of these assets are denominated in the currency of the country in which each asset is located, including the Australian dollar, the Canadian dollar, the Euro, the Kazakhstani Tenge, the Chilean Peso, the South African Rand, the Argentine Peso,the Colombian Peso and the Peruvian Sol. The Group is also exposed to fluctuations in currency exchange rates through its global office network which are denominated largely in the currency of the country in which each office is located, the largest of such currency exposures being to the Swiss Franc, the pound sterling and the Euro. The Groupis also exposed to fluctuations in currency exchange rates through its marketing activities, although only a small minority of purchase or sale transactions are denominated in currencies other than U.S. dollars.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>In respect of commodity purchase and sale transactions denominated in currencies other than U.S. dollars, the Group’s policy is to hedge the specific future commitment through a forward exchange contract.&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;p>Disclosure: I hold 5% AMR, 20% GLNCY. &lt;span class="marginnote">I was heavily invested in MTL before the war, which led to delisting.&lt;/span>&lt;/p>
&lt;p>Edit 18.3.24: Exited AMR after the rerating ~$440 and entered HCC.&lt;/p></content:encoded></item><item><title>The Pit of Expertise</title><link>https://alexalejandre.com/other/expertise-and-uncertainty/</link><pubDate>Thu, 18 Jan 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/other/expertise-and-uncertainty/</guid><description>&amp;lsquo;It depends.&amp;rsquo; It depends? But everything depends! How does that help?!</description><content:encoded>&lt;p>Recently on /slatestarcodex a poster &lt;a href="https://www.reddit.com/r/slatestarcodex/comments/1abhdim/im_not_confident_in_any_of_my_policy_views_any/">described&lt;/a> his feelings of being unmoored. Sometimes, we don&amp;rsquo;t have the answer. The greater our understanding of a field, its debates and arguments, the less we can confidently believe one wholeheartedly. Each argument is well met by a tried and true counterpoints and we start to understand Socrates&amp;rsquo; &lt;span class="marginnote">Ignore academic questions of attribution&lt;/span> &amp;ldquo;I know I know nothing.&amp;rdquo;&lt;/p>
&lt;ul>
&lt;li>
&lt;details id="45-sec-illustration">
&lt;summary>45 sec illustration&lt;/summary>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/4ZK8Z8hulFg?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video">&lt;/iframe>
&lt;/div>
&lt;/details>&lt;/li>
&lt;/ul>
&lt;p>We have lost perspective overoptimizing. &lt;span class="marginnote">If only we could start with a goal and stop when we reach it&amp;hellip;&lt;/span> Stepping back from the bark, we see a tree. Stepping further back from the trees, we remember we&amp;rsquo;re in a forest. We &lt;em>can&lt;/em> answer many questions. We just forget people ask those questions, because we overestimate what &lt;a href="https://imgs.xkcd.com/comics/average_familiarity.png">everyone knows&lt;/a> about our field&lt;/p>
&lt;p>Going deeper, when distressed we seek answers to bring us peace, but there&amp;rsquo;s nothing there. For example in wars, there are moral dilemmas and many horrors. You can lie to yourself, accept the darkness in human societies or resort to other copying mechanisms, only rarely can you find certainty in truth (and other sides obviously disagree.) (N.b. one failure mode is how many use worry as a tool, trying to predict the future and feel control. It never works.)&lt;/p>
&lt;p>How can we manage uncertainty then? &lt;span class="marginnote">Symbolic AI floundered here.&lt;/span> We can give them probabilities, confidence scores, severity scores (impacts of something being wrong (will it kill this tree, or the whole forest?) akin to risk in value investing). Rationalists flaunting Bayesian reasoning will even just guess numbers, because the proper conditionality framework (what depends on what) yields more explanatory power. Modeling this as a normal distribution &lt;span class="marginnote">Aufhebung&lt;/span>, we can build many-dimensional feasibility fields, overlapping to show us the realm of future possibility. &lt;span class="marginnote">Fate holds us in these rails. We choose what to do with it.&lt;/span> &lt;a href="https://alexalejandre.com/poetry/mine/a-trembling-soul/">Quoting&lt;/a> myself:&lt;/p>
&lt;blockquote>
&lt;p>To spy all time and space, existence too,&lt;br>
As if t’were but a mountain range in view.&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;h3 id="addendum">Addendum&lt;/h3>
&lt;p>Some posit rational discourse doesn&amp;rsquo;t work (seen in glorious flame wars before 2016.) Gödel&amp;rsquo;s first incompleteness theorem shows no system can prove itself, so relying on evidence alone fails to establish consensus. &lt;span class="marginnote">There are outside truths. Approaching them, we&amp;rsquo;re stuck in logical selfreference.&lt;/span> The old hope was that open debate, freed of gatekeepers (e.g. newspaper editors, royal censors), deplatforming, economic costs of correspondence (printing pamphlets, newspapers etc.) etc. would lead to the truth and a new renaissance. Instead, once convinced, politicking, building coalitions and institutions etc. let you force your beliefs on society. They discovered politics:&lt;/p>
&lt;p>All human endeavors form a complex emergent phenomena where every action is a consensus decision, arrived at by many actors for contradictory reasons(nothing has ever happened for but one reason.) We all have different hopes and goals after all. Zero sum power arises from the control asymmetry between agents over relevant outcomes, which they barter into a cohesive society-wide movement. A ship with a thousand propellers in every direction still moves somewhere.&lt;/p>
&lt;p>When someone relegates belief building to another, he surrenders agency. hitching his wagon to a movement, religion, ideology etc. which saves him from thinking for himself.&lt;/p></content:encoded></item><item><title>WIP Math for Non-Mathematicians</title><link>https://alexalejandre.com/other/good-old-math-textbooks/</link><pubDate>Thu, 18 Jan 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/other/good-old-math-textbooks/</guid><description>&lt;p>tl;dr: Mathematicians prefer to start with a structure&amp;rsquo;s most general form, while physicists prefer specific (applicable) cases.&lt;/p></description><content:encoded>&lt;p>tl;dr: Mathematicians prefer to start with a structure&amp;rsquo;s most general form, while physicists prefer specific (applicable) cases.&lt;/p>
&lt;hr>
&lt;p>Here are some brilliant old math textbooks:&lt;/p>
&lt;ul>
&lt;li>
&lt;details id="...for-the-practical-man-j.-e.-thompson">
&lt;summary>&amp;hellip;for the Practical Man - J. E. Thompson&lt;/summary>
&lt;ul>
&lt;li>Calculus &lt;span class="marginnote">Richard Feynman used this.&lt;/span>&lt;/li>
&lt;li>Trigonometry&lt;/li>
&lt;li>Geometry&lt;/li>
&lt;li>Algebra&lt;/li>
&lt;li>Arithmetic&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>Calculus Made Easy - Silvanus P. Thompson&lt;/li>
&lt;/ul>
&lt;p>Here are brilliant modern tomes:&lt;/p>
&lt;ul>
&lt;li>Maths: A Student&amp;rsquo;s Survival Guide: A Self-Help Workbook for Science and Engineering Students - Jenny Olive&lt;/li>
&lt;li>Div, Grad, Curl and All That - H.M. Shey &lt;span class="marginnote">Best Vector Calculus book&lt;/span>&lt;/li>
&lt;li>Principles of Vector Analysis - Jerry B Marion&lt;/li>
&lt;/ul>
&lt;p>German speakers are especially lucky: Papula&lt;/p>
&lt;p>As you see, the common thread emerges from engineers&amp;rsquo; engagement with mathematics. When taught with physics, the traditional mathematical curriculum makes far more sense. Calculus makes more sense when you understand the problems Newton was solving etc.&lt;br>
&lt;details id="click-for-a-video-covering-historical-applications.">
&lt;summary>Click for a video covering historical applications.&lt;/summary>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/5M2RWtD4EzI?si=xy6DvgmqIu4ZQCh9" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen>&lt;/iframe>
&lt;/details>&lt;/p>
&lt;p>Engineering is applied mathematics and science, which explains why books aimed at them are more approchable. Chapters in physics textbooks often start with a phonomena or system, then introduce theory to describe it (you just accept the mathematics.) Modern mathematics instruction &lt;span class="marginnote">Since Bourbaki?&lt;/span> prefers the opposite, building the foundations from which you can derive the theory. &lt;span class="marginnote">&amp;hellip;as an excercise to the reader.&lt;/span>&lt;/p>
&lt;p>This is because mathematics is a &lt;span class="marginnote">2000 year old proofs are still true, unlike 2000 year old medical or alchemical knowledge.&lt;/span> formal science with true, false and undecidable statements, while physics is an empirical science, where concepts emerge from describing experiments. From these statements, mathematicians focus on patterns, structure and the relationships between groups of patterns and structures. In other words: while mathematicians prefer a structure&amp;rsquo;s most general form, physicists prefer specific cases.&lt;/p>
&lt;p>But approaching mathematics this way (without fundementals, from physicists&amp;rsquo; and engineers&amp;rsquo; books) foregoes the intuition etc. required to engage with mathematical literature. A mathematician&amp;rsquo;s development sees him doing countless excercises, constantly referring back to theorems and definitions, to appreciate on an intuitive level how the structures function and combine to construct proofs (the fundemental building block of math.) &lt;span class="marginnote">This practice echoes traditional language learning, combined with understanding different primitive sets.&lt;/span> This work tells him which definitions are key to what kind of problems and which are incidential. Better texts (bulleted lists) avoid intuition (they don&amp;rsquo;t mark facts&amp;rsquo; importance), so our mathematician can discover it himself. Centuries have forged the language and descrioptions of these objects, so wrestling with these dense abstractions takes particular effort. To &amp;ldquo;read&amp;rdquo; math, our mathematician, after reading the introduction, skims to find an interesting result and search for the relevant lemmas &lt;span class="marginnote">Lemma = unimportant result, only used to build a more important result (thoerem), but the key part is how they combine, not the final theorem itself.&lt;/span> to understand it. Mathematicians develop tools without specific applications, which others find later. Most people, however, are interested in applying mathematical tools, not deriving them, whence the mathematical mindset falls on deaf ears. &lt;span class="marginnote">Math&amp;rsquo;s frameworks help construct and manipulate abstract structures, like the primitive sets software engineers design&lt;/span>&lt;/p>
&lt;p>(The graph of facts which rely on which other facts is fertile soil for Good Old Fashioned AI to plow.)&lt;/p>
&lt;p>One alternative is to learn both at the same time:&lt;/p>
&lt;ul>
&lt;li>Road to Reality - Penrose &lt;span class="marginnote">Very hard&lt;/span>&lt;/li>
&lt;li>No Bullshit Guide to Math and Physics - Ivan Savov &lt;span class="marginnote">Very approchable&lt;/span>&lt;/li>
&lt;/ul>
&lt;p>If desirious to get a dose of mathematical intuition, construct proofs etc.&lt;/p>
&lt;ul>
&lt;li>Mathematical Notation: A Guide for Engineers and Scientists - Edward R. Scheinerman&lt;/li>
&lt;li>Some Modern Mathematics for Physicists and Other Outsiders: An Introduction to Algebra, Topology, and Functional Analysis&lt;/li>
&lt;li>How to Think Like a Mathematician: Companion to Undergraduate Mathematics - Kevin Houston&lt;/li>
&lt;li>Mathematical Methods of Classical Mechanics - V. I.&lt;/li>
&lt;/ul>
&lt;p>But it is key to:&lt;/p>
&lt;ul>
&lt;li>know exactly what you want from the subject (&amp;ldquo;how to apply x thoerem to&amp;hellip;&amp;rdquo; or &amp;ldquo;understand y theorem in z paper&amp;rdquo;)&lt;/li>
&lt;/ul>
&lt;p>For programmers:&lt;/p>
&lt;ul>
&lt;li>Programmer&amp;rsquo;s Introduction to Mathematics - Jeremy Kun&lt;/li>
&lt;li>Discrete Math and Functional Programming - Thomas Van Drunen&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;p>Four groups:&lt;/p>
&lt;ul>
&lt;li>mathematicians: &amp;ldquo;What&amp;rsquo;s true?&amp;rdquo;
&lt;ul>
&lt;li>give me the primitives, with which i will built higher level structures&lt;/li>
&lt;li>definition -&amp;gt; theorem -&amp;gt; proof &lt;span class="marginnote">Bulleted lists of them count as a textbook&lt;/span>&lt;/li>
&lt;li>notation driven by succinctness (short yet clear)&lt;/li>
&lt;li>use 1 char vars, because normal equations, structs etc. are known entities&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>physicists: &amp;ldquo;What works?&amp;rdquo;
&lt;ul>
&lt;li>physical problem -&amp;gt; theory -&amp;gt; math&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>programmers
&lt;ul>
&lt;li>name vars (counterpoint: APL) because new functions, structs etc. are created on the fly&lt;/li>
&lt;li>notation driven by &amp;ldquo;how can we change this when needs change?&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>engineers&lt;/li>
&lt;/ul>
&lt;!-- Example
Linear algebra
Introductory linear algebra
- Problem: solving systems of linear equations is hard with Gaussian elimination. Can't we generalize how we solve a single equation?
- Matrix: Yes, generalize the concept of numbers. You can do all the normal operations (and invert the matrix)!
- Reframe problem: We can redeine those systems with our new tools (matrices and vectors), talk about vector spaces and spaces of solutions.
Intermediate
After an introduction, Axler in Linear Algebra Done Right or [lectures](https://www.math.ucdavis.edu/%7Eanne/linear_algebra/mat67_course_notes.pdf) etc. will open your mind to partial differential equations, different vector spaces (Hilnert, Banach) etc.
Advanced
Shilov
-->
&lt;hr>
&lt;p>A few odds and ends:&lt;/p>
&lt;p>Some books teach physics to mathematicians (definition proof theorem style):&lt;/p>
&lt;ul>
&lt;li>General Relativity - Sasane&lt;/li>
&lt;/ul>
&lt;p>The Art of Problem Solving&lt;/p>
&lt;ul>
&lt;li>Prealgebra&lt;/li>
&lt;li>Intro to Algebra&lt;/li>
&lt;li>Intro to Counting &amp;amp; Probability&lt;/li>
&lt;li>Intro to Geometry&lt;/li>
&lt;li>Intro to Number Theory&lt;/li>
&lt;li>Intermediate Algebra&lt;/li>
&lt;li>Intermediate Counting &amp;amp; Probability&lt;/li>
&lt;li>Precalculus&lt;/li>
&lt;li>Calculus&lt;/li>
&lt;li>Vol 1 &amp;amp; 2 The Art of Problem Solving &lt;span class="marginnote">Everything distilled.&lt;/span>&lt;/li>
&lt;/ul>
&lt;p>The series focuses on problem solving, eschewing proofs/formalism, yet don&amp;rsquo;t provide concrete examples of what the techniques are used for.&lt;/p>
&lt;p>N.b. Not a book but Math Academy is well reviewed, more succinct than Khan Academy.&lt;/p></content:encoded></item><item><title>About</title><link>https://alexalejandre.com/about/</link><pubDate>Mon, 15 Jan 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/about/</guid><description>A bit about me</description><content:encoded>&lt;p>&lt;span class="marginnote">I&amp;rsquo;m Alex btw&lt;/span> I earned my first paycheck coding Runescape bots in 2004, quickly graduating to larger projects. I leveraged my network to build industrial and financial projects, eventually managing 70+ ICs. Nowadays, I focus on tooling for commodity companies and value investing.&lt;/p>
&lt;p>&lt;span class="marginnote">A professional dream&amp;rsquo;s to make this HTML 2.0 compliant.&lt;/span> I love simplifying and taming complex systems, because compression is comprehension. In software, this leads to DSLs and disruptive primitive sets (e.g. APL, Plan9, Elixir, Smalltalk) which unlock individual productivity and creativity, where e.g. fault-tolerant systems, observability, CI/CD etc. come automatically.&lt;/p>
&lt;p>In the physical world, this leads to econometrics, value investing, biophysical and energy economics, yea civilizational morphology, combining exotic metrics from peak oilers, &lt;a href="https://en.wikipedia.org/wiki/Material_Product_System">MPS&lt;/a>, &lt;a href="https://en.wikipedia.org/wiki/TRIZ">TRIZ&lt;/a> etc. with traditional macroeconomic indicators drives insight and add precision to the Kardashev scale.&lt;/p>
&lt;p>I have worked with &lt;a href="https://www.glencore.com/">Glencore&lt;/a>, &lt;a href="https://narraduct.com/">Narraduct&lt;/a>, &lt;a href="https://www.disneyplus.com">Disney Streaming&lt;/a>, &lt;a href="https://mechel.com/">Mechel&lt;/a>, &lt;a href="https://dtek.com/en/">D.TEK&lt;/a>, &lt;a href="https://www.americanapparel.com/us/en/">American Apparel&lt;/a>, &lt;a href="https://github.com/BBVA">BBVA&lt;/a>, &lt;a href="https://avallonlabs.com/">Avallon Labs&lt;/a> and &lt;a href="https://pireactor.io">Pireactor&lt;/a> among others.&lt;/p>
&lt;p>I love poetry, history and languages, speak Russian, German, French, Spanish, Persian and read many more. Write me: public@alex&amp;hellip;&lt;/p>
&lt;p>I&amp;rsquo;m curious about:&lt;/p>
&lt;ul>
&lt;li>Lisp (CL, Racket, Guile, &lt;a href="https://github.com/naver/lispe">LispE&lt;/a>, &lt;a href="https://lambdaway.fr/workshop/index.php">Lambda Talk&lt;/a>)&lt;/li>
&lt;li>declarative programming (Prolog, Datalog, &lt;a href="https://www.scallop-lang.org/">Scallop&lt;/a>)&lt;/li>
&lt;li>&lt;a href="https://www.jsoftware.com/papers/">APL&lt;/a>, &lt;a href="https://www.uiua.org/">Uiua&lt;/a>&lt;/li>
&lt;li>Forth, Factor, &lt;a href="http://duskos.org/">DuskOS&lt;/a>&lt;/li>
&lt;li>DSLs, language driven development (Racket), construct programming (cell-lang.net, Winglang, Shuttle.rs, Klo.dev, Pulumi)&lt;/li>
&lt;li>Plan9 (&lt;a href="https://9front.org/">9Front&lt;/a>), &lt;a href="http://www-spin.cs.washington.edu/">SPIN&lt;/a>&lt;/li>
&lt;li>formal methods (&lt;a href="https://www.hillelwayne.com/post/learntla/">TLA+&lt;/a>, &lt;a href="https://leanprover.github.io/theorem_proving_in_lean4/introduction.html">Lean 4&lt;/a>)&lt;/li>
&lt;/ul>
&lt;script>
// if accessed via anchor, have &lt;summary> open
document.addEventListener('DOMContentLoaded', function() {
const anchor = window.location.hash.substring(1).toLowerCase(); //
if (anchor) {
const detailsElement = document.getElementById(anchor);
if (detailsElement &amp;&amp; detailsElement.tagName === 'DETAILS') {
detailsElement.open = true;}}});
&lt;/script>
&lt;h2 id="book-shelf">Book Shelf&lt;/h2>
&lt;ul>
&lt;li>
&lt;details id="comp-sci">
&lt;summary>Comp Sci&lt;/summary>
&lt;ul>
&lt;li>✅ Programmer avec Scheme - Chazarain &lt;span class="marginnote">Hands down the best!&lt;/span>&lt;/li>
&lt;li>✅ SICP (w/ 1986 Lectures) (Structure and Interpretation of Computer Programs)&lt;/li>
&lt;li>✅ PAIP (Paradigms of AI Programming)&lt;/li>
&lt;li>✅ CTM (Concepts, Techniques and Models of Computer Programming)&lt;/li>
&lt;li>✅ Concrete Abstractions - Hailperin, Kaiser, Knight&lt;/li>
&lt;li>✅ Schematics of Computation -Little, Manis&lt;/li>
&lt;li>✅ Art of Prolog&lt;/li>
&lt;li>✅ &lt;a href="https://www.nand2tetris.org/">nand2tetris&lt;/a>&lt;/li>
&lt;li>Computer Science Distilled&lt;/li>
&lt;li>✅ &lt;a href="https://www.jsoftware.com/papers/tot.htm">Notation as a Tool of Thought&lt;/a> - Kenneth Iverson&lt;/li>
&lt;li>&lt;a href="https://felleisen.org/matthias/lp/index.html">Programming Languages&lt;/a>&lt;/li>
&lt;li>Philosophy of Computer Science - William Rapaport&lt;/li>
&lt;li>✅ Elements of Clojure&lt;/li>
&lt;li>From Mathematics to Generic Programming - Stepanov &amp;amp; Rose&lt;/li>
&lt;li>Elements of Programming - Stepanov &amp;amp; McJones&lt;/li>
&lt;li>✅ Actors: A Model of Concurrent Computation in Distributed Systems - Gul Agha&lt;/li>
&lt;li>✅ 7 Concurrency Models in 7 Weeks - Paul Butcher&lt;/li>
&lt;li>Answer Set Programming&lt;/li>
&lt;li>Answer Set Solving in Practice&lt;/li>
&lt;li>The Craft of Prolog&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="software-engineering">
&lt;summary>Software Engineering&lt;/summary>
&lt;ul>
&lt;li>✅ Programming as Theory Building - Peter Naur&lt;/li>
&lt;li>✅ Interpretation, Interaction and Reality Construction in Software Engineering - Kari Rönkkö&lt;/li>
&lt;li>✅ Software Development &amp;amp; Reality Construction - Züllighoven &amp;amp; Budde&lt;/li>
&lt;li>Art of Doing Science and Engineering: Learning to Learn&lt;/li>
&lt;li>Introduction to Information Retrieval&lt;/li>
&lt;li>&lt;a href="https://jimgray.azurewebsites.net/papers/A%20Transaction%20Model%20RJ%202895.pdf">Transaction Model&lt;/a> - Jim Gray&lt;/li>
&lt;li>✅ Toward a New Understanding of Data Modelling - Klein &amp;amp; Lytinen &lt;span class="marginnote">metaphors for data modeling are negotiation and law making&lt;/span>&lt;/li>
&lt;li>✅ Designing Data Intensive Applications&lt;/li>
&lt;li>✅ Learning Domain Driven Design - Vlad Khononov&lt;/li>
&lt;li>✅ Philosophy of Software Design - John Ousterhout&lt;/li>
&lt;li>✅ Web Scalability for Startup Engineers &lt;span class="marginnote">old but gold&lt;/span>&lt;/li>
&lt;li>Software Engineering for Internet Applications&lt;/li>
&lt;li>🔲 The Pragmatic Programmer&lt;/li>
&lt;li>✅ Code Complete - Steve McConnel&lt;/li>
&lt;li>✅ The Practice of Programming&lt;/li>
&lt;li>✅ Etudes for Programmers&lt;/li>
&lt;li>✅ Exercises in Programming Styles - Christina Lops&lt;/li>
&lt;li>Philosophy of Software Design&lt;/li>
&lt;li>&lt;a href="http://gameprogrammingpatterns.com/contents.html">Game Programming Patterns&lt;/a> &lt;span class="marginnote">Cooler than Gang of Four&lt;/span>&lt;/li>
&lt;li>🔲 Continuous Delivery&lt;/li>
&lt;li>✅ &lt;a href="https://www.fuzzingbook.org/">Fuzzing Book&lt;/a>&lt;/li>
&lt;li>✅ Release it! - Michael Nygard&lt;/li>
&lt;li>✅ Pattern Oriented Software Architecture I, III, IV, (🔲 II)&lt;/li>
&lt;li>✅ Fundamentals of Software Architecture: An Engineering Approach&lt;/li>
&lt;li>🔲 Software Engineering at Google&lt;/li>
&lt;li>✅ About Face: Essentials of Interaction Design - Alan Cooper &lt;span class="marginnote">Full of insights. The concepts can be applied to API designs and architecture. Remember, developers are users too!&lt;/span>&lt;/li>
&lt;li>🔲 Practical Object-Oriented Design in Ruby&lt;/li>
&lt;li>🔲 Confident Ruby - Avdi Grimm &lt;span class="marginnote">These Ruby books apparently cover OOP in a very pleasing manner, a paradigm I’ve not been a fan of.&lt;/span>&lt;/li>
&lt;li>A Mentoring Course on Smalltalk - Andres Valloud&lt;/li>
&lt;li>✅ Refactoring: Improving the Design of Existing Code &lt;span class="marginnote">Programming qua mathematical transformation from 1 system to another. But only use the 1st edition because it uses a typed language&lt;/span>&lt;/li>
&lt;li>✅ Grokking Simplicity - Eric Normand&lt;/li>
&lt;li>✅ Go With The Domain&lt;/li>
&lt;li>&lt;a href="https://dabeaz.com/raft.html">Rafting Trip&lt;/a>&lt;/li>
&lt;li>Algorithms for Modern Hardware - Sergey Slotin&lt;/li>
&lt;li>✅ &lt;a href="https://youtube.com/playlist?list=PLSkhUfcCXvqH2sgJa8_gnB41_hO485Lsl&amp;amp;si=HHLHl2T380lpavlT">Fuzz Week&lt;/a> - Gamozolab&lt;/li>
&lt;li>✅ Advanced Software Design - Jimmy Koppel&lt;/li>
&lt;li>✅ Discipline of Programming - Dijkstra &lt;span class="marginnote">Provably solve nontrivial problems, inspiring Dafny&lt;/span>&lt;/li>
&lt;li>Predicate Calculus &amp;amp; Program Semantics - Dijkstra &amp;amp; Scholten&lt;/li>
&lt;li>Computer Power &amp;amp; Human Reason - Joseph Weizenbaum&lt;/li>
&lt;li>✅ Tools for Conviviality - Ivan Illich&lt;/li>
&lt;li>Computation &amp;amp; Human Experience - Phil Agre&lt;/li>
&lt;li>Art of Doing Science and Engineering - Richard Hamming&lt;/li>
&lt;li>Apollo - Murray &amp;amp; Cox&lt;/li>
&lt;li>✅ Skunk Works&lt;/li>
&lt;li>✅ What Engineers Know and How They Know It - Walter Vincenti&lt;/li>
&lt;li>✅ &lt;a href="http://pros.to/wide.pdf">Crawl-Space Computing&lt;/a> - Lawrence J. Dickson&lt;/li>
&lt;li>✅ &lt;a href="https://www.melconway.com/Home/Committees_Paper.html">Do Committees Invent&lt;/a> - Melvin Conway&lt;/li>
&lt;li>✅ Domain Modeling Made Functional&lt;/li>
&lt;li>Working Effectively with Legacy Code&lt;/li>
&lt;li>✅ Your Code as a Crime Scene - Adam Tornhill&lt;/li>
&lt;li>✅ Kill it with Fire: Manage Aging Computer Systems - Bellotti&lt;/li>
&lt;li>✅ The Art of Doing Science &amp;amp; Engineering - Richard Hemmming &lt;span class="marginnote">!&lt;/span>&lt;/li>
&lt;li>✅ 7 Languages in 7 Weeks - Bruce Tate&lt;/li>
&lt;li>✅ 7 More Languages in 7 Weeks - Bruce Tate&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="go">
&lt;summary>Go&lt;/summary>
&lt;ul>
&lt;li>✅ Learn Go with Tests&lt;/li>
&lt;li>✅ Cloud Native Go - Titmus&lt;/li>
&lt;li>✅ Let&amp;rsquo;s Go Further - Alex Edwards&lt;/li>
&lt;li>✅ 101 Go Errors&lt;/li>
&lt;li>✅ Go Programming Language&lt;/li>
&lt;li>✅ Go Design Patterns - Mario Castro Conteras&lt;/li>
&lt;li>✅ Concurrency in Go - Katherine Cox-Buday&lt;/li>
&lt;li>✅ Distributed Services with Go &lt;span class="marginnote">Cool, but tests don’t pass. Becomes pure reading experience or struggle session.&lt;/span>&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="lisp">
&lt;summary>Lisp&lt;/summary>
&lt;ul>
&lt;li>✅ Lisp in Small Pieces&lt;/li>
&lt;li>✅ Little Schemer&lt;/li>
&lt;li>✅ Seasoned Schemer&lt;/li>
&lt;li>✅ Little Typer&lt;/li>
&lt;li>✅ Little Prover&lt;/li>
&lt;li>✅ Little Learner&lt;/li>
&lt;li>✅ Reasoned Schemer&lt;/li>
&lt;li>✅ Intro to Functional Programming through Lambda Calculus - Michaelson&lt;/li>
&lt;li>✅ SICM (Structure and Interpretation of Classical Mechanics)&lt;/li>
&lt;li>✅ Clojure Applied - Alex Miller&lt;/li>
&lt;li>✅ Clojure Programming - Emerick, Carper, Grand&lt;/li>
&lt;li>Art of the Metaobject Protocol - Bobrow, Kiczales, Rivières - &lt;a href="http://www.dreamsongs.com/Files/amop-review.pdf">Gabriel&amp;rsquo;s Review&lt;/a>&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="apl">
&lt;summary>APL&lt;/summary>
&lt;ul>
&lt;li>APL: Design Handbook for Commercial Systems - Adrian Smith&lt;/li>
&lt;li>✅ Elementary Functions - Iverson&lt;/li>
&lt;li>✅ Probability in APL- Alvord&lt;/li>
&lt;li>Computing in Statistical Science with APL - Anscobm&lt;/li>
&lt;li>✅ Applied Linear Algebra with APL - Helzer&lt;/li>
&lt;li>Abstract Algebra: Computation Approach - Sims&lt;/li>
&lt;li>🔲 Applied Mathematics for Programmers - Iverson&lt;/li>
&lt;li>Elementary Analysis - Iverson&lt;/li>
&lt;li>Mathematics &amp;amp; Programming - Iverson&lt;/li>
&lt;li>✅ Intro to College Math with APL - LeCuyer&lt;/li>
&lt;li>APL with a Mathematical Accent - Reiter, Jones&lt;/li>
&lt;li>Neural Networks in APL - Alfonseca &lt;span class="marginnote">Also see Skomorokov&lt;/span>&lt;/li>
&lt;li>Fuzzy Rule Based Expert Systems &amp;amp; Genetic Machine Learning - Geyer-Schulz&lt;/li>
&lt;li>&lt;a href="https://dl.acm.org/doi/10.1145/3315454.3329960">Convolutional Neural Networks in APL&lt;/a> - Šinkarovs, Bernecky, Scholz&lt;/li>
&lt;li>&lt;a href="https://dl.acm.org/doi/10.1145/3589246.3595371">U-Net CNN in APL&lt;/a> - Hsu, Serrao&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="os-dbs">
&lt;summary>OS &amp;amp; DBs&lt;/summary>
&lt;ul>
&lt;li>Linux from Scratch&lt;/li>
&lt;li>✅ &lt;a href="http://doc.cat-v.org/plan_9/9.intro.pdf">Intro to OS Abstractions Using Plan9&lt;/a>&lt;/li>
&lt;li>Operating Systems - Deitel, Deitel &amp;amp; Choffnes&lt;/li>
&lt;li>Linux Kernel Development - Love&lt;/li>
&lt;li>UNIX Systems for Modern Architectures - Schimmel&lt;/li>
&lt;li>✅ Derivability, Redundancy and Consistency of Relations Stored in Large Data Banks - Codd &lt;span class="marginnote">Invented RDMS&lt;/span>&lt;/li>
&lt;li>✅ A Relational Model of Data for Large Shared Data Banks - Codd&lt;/li>
&lt;li>✅ SQL and Relational Theory - Date&lt;/li>
&lt;li>✅ Introduction to Database Systems - Date&lt;/li>
&lt;li>✅ Database Design and Relational Theory - C. J. Date&lt;/li>
&lt;li>✅ Database Design for Mere Mortals - Michael J. Hernandez &lt;span class="marginnote">don’t Google author nor write his name in comments&lt;/span>&lt;/li>
&lt;li>✅ Understanding Relational Databases with Examples &lt;span class="marginnote">same guy&lt;/span>&lt;/li>
&lt;li>Practical Issues in Database Management&lt;/li>
&lt;li>✅ 3rd Manifesto: Databases, Types And the Relational Model&lt;/li>
&lt;li>SQL Performance Explained - Markus Winland&lt;/li>
&lt;li>✅ Database in Depth: Relational Theory for Practitioners - Date&lt;/li>
&lt;li>✅ Relational Theory for Computer Professionals - Date&lt;/li>
&lt;li>Principles of Transaction Processing - Bernstein&lt;/li>
&lt;li>✅ Seven Databases in Seven Weeks&lt;/li>
&lt;li>✅ Thinking Forth - Leo Brodie&lt;/li>
&lt;li>✅ Forth for the Atari - Floegel&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="math-finance">
&lt;summary>Math &amp;amp; Finance&lt;/summary>
&lt;ul>
&lt;li>7 Sketches in Compositionality: &lt;a href="https://arxiv.org/pdf/1803.05316.pdf">Applied Category Theory&lt;/a> - Fong &amp;amp; Spivak&lt;/li>
&lt;li>✅ Alchemy of Finance - Soros, Volcker&lt;/li>
&lt;li>✅ Professional Automated Trading: Theory and Practice &lt;span class="marginnote">in CL&lt;/span>&lt;/li>
&lt;li>✅ Elements of Mathematics for Economics and Finance &lt;span class="marginnote">Good refresher&lt;/span>&lt;/li>
&lt;li>✅ A Programmer&amp;rsquo;s Introduction to Mathematics &lt;span class="marginnote">Teaches intuition and proofs&lt;/span>&lt;/li>
&lt;li>✅ Mind over Markets - Jim Dalton&lt;/li>
&lt;li>✅ &lt;a href="http://www.r-5.org/files/books/trading/charts/market-profile/CBOT-Market_Profile-EN.pdf">Markets in Profile&lt;/a> - Jim Dalton&lt;/li>
&lt;li>&lt;a href="https://julia.quantecon.org/intro.html">Quantitative Economics with Julia&lt;/a>&lt;/li>
&lt;li>Behavioral Finance and Wealth Management - Michael M. Pompian&lt;/li>
&lt;li>Statistics with Julia&lt;/li>
&lt;li>✅ Basic Math Course for Electronics - Henry Jacobowitz&lt;/li>
&lt;li>✅ Non-Random Walk Down Wall Street - Andrew Lo, Craig MacKinlay&lt;/li>
&lt;li>Primer for the Mathematics of Financial Engineering - Dan Stefanica&lt;/li>
&lt;li>✅ Poor Charlie&amp;rsquo;s Almanack - Charlie Munger&lt;/li>
&lt;li>Foundations of Technical Analysis: Computational Algorithms, Statistical
Inference, and Empirical Implementation - Andrew Lo&lt;/li>
&lt;li>✅ Value Investing: From Graham to Buffett 2nd not 3rd Ed. - Greenwald, Kahn et al.&lt;/li>
&lt;li>✅ Acquirer&amp;rsquo;s Multiple - Tobias Carlisle&lt;/li>
&lt;li>✅ Deep Value - Tobias Carlisle&lt;/li>
&lt;li>✅ Intelligent Investor - Benjamin Graham &lt;span class="marginnote">2nd edition’s best&lt;/span>&lt;/li>
&lt;li>✅ Security Analysis - Benjamin Graham, David Dodd&lt;/li>
&lt;li>✅ Smartest Guys in the Room (Enron)&lt;/li>
&lt;li>✅ &lt;a href="https://wealthwatchadvisors.com/wp-content/uploads/2020/03/QAIB_PremiumEdition2020_WWA.pdf">Quantitative Analysis of Investor Behavior&lt;/a> - 2000 QUAIB Report &lt;span class="marginnote">70% of underperformance due to investors withdrawing during market crisis. Then fund fees…&lt;/span>&lt;/li>
&lt;li>✅ Financial Shenanigans: Detect Accounting Gimmicks &amp;amp; Fraud - Howard Schilit&lt;/li>
&lt;li>✅ Asian Financial Statement Analysis: Detecting Irregularities - Chinhwee Tan, Thomas Robinson&lt;/li>
&lt;li>Mechanics - Irodov&lt;/li>
&lt;li>Basic Laws of Electronmagnetism - Irodov&lt;/li>
&lt;li>✅ Mathematics of Financial Modeling and Investment Management - Fabozzi, Focardi &lt;span class="marginnote">Refresher on linear algebra, calculus, PDE to stochastic calculus and methods in financial mathematics.&lt;/span>&lt;/li>
&lt;li>✅ Advanced Algebra &amp;amp; Calculus Made Simple - Gondin-Sohmer&lt;/li>
&lt;li>✅ Detecting Regime Change in Computational Finance - Chen, Tsang &lt;span class="marginnote">Just uses HMM, GMM, Bayes&lt;/span>&lt;/li>
&lt;li>✅ Finding Alphas: Quantitative Approach to Building Trading Strategies - Igor Tulchinsky &lt;span class="marginnote">Best&lt;/span>&lt;/li>
&lt;li>✅ Quantitative Portfolio Management: Art and Science of Statistical Arbitrage - Michael Isichenko&lt;/li>
&lt;li>✅ Optimal Trading Strategies - Robert Kissel, Morton Glantz&lt;/li>
&lt;li>Quantitative Momentum - Gray, Vogel&lt;/li>
&lt;li>Primer for Financial Engineering: Financial Signal Processing and Electronic Trading&lt;/li>
&lt;li>✅ Stochastic Calculus for Finance Vol 2 - Steven Shreve &lt;span class="marginnote">Selfcontained, effective!&lt;/span>&lt;/li>
&lt;li>Accounting Structured in APL - Yuji Ijiri&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="not-yet-named">
&lt;summary>Not yet named&lt;/summary>
&lt;ul>
&lt;li>✅ Medieval Horizons: Why the Middle Ages Matter&lt;/li>
&lt;li>✅ Eastward to Tartary - Robert Kaplan&lt;/li>
&lt;li>✅ New Silk Roads - Frankopan&lt;/li>
&lt;li>✅ Great Chain of Being - Lovejoy&lt;/li>
&lt;li>✅ Air America - Robbins&lt;/li>
&lt;li>✅ Assassin - Robbins&lt;/li>
&lt;li>✅ Coming Anarchy - Robert Kaplan&lt;/li>
&lt;li>✅ International Politics and Foreign Policy - Rosenau &lt;span class="marginnote">Data driven in the 60s&lt;/span>&lt;/li>
&lt;li>✅ Ruling Class - Mosca&lt;/li>
&lt;li>✅ Managerial Revolution - Burnham - Read Owell&amp;rsquo;s &lt;a href="https://www.orwellfoundation.com/the-orwell-foundation/orwell/essays-and-other-works/second-thoughts-on-james-burnham/">review&lt;/a>&lt;/li>
&lt;li>✅ Crisis of Parliamentary Democracy - Schmitt&lt;/li>
&lt;li>✅ Political Parties - Michels&lt;/li>
&lt;li>✅ Mind and Society - Pareto&lt;/li>
&lt;li>✅ Histories - Polybius&lt;/li>
&lt;li>✅ Untergang des Abendlandes - Spengler&lt;/li>
&lt;li>✅ Reflections on the Revolution in France - Burke&lt;/li>
&lt;li>✅ &lt;a href="https://www.orwellfoundation.com/the-orwell-foundation/orwell/essays-and-other-works/shooting-an-elephant/">Shooting an Elephant&lt;/a> - Orwell&lt;/li>
&lt;li>✅ Power Broker - Caro&lt;/li>
&lt;li>✅ &lt;a href="https://www.gutenberg.org/cache/epub/2810/pg2810-images.html">Plunkitt of Tammany Hall&lt;/a> - Plunkitt&lt;/li>
&lt;li>✅ Idea of Decline in Western History - Herman&lt;/li>
&lt;li>The Gutenberg Galaxy - McLuhan&lt;/li>
&lt;li>Hero Projects - Paul Josephson - &lt;a href="https://eh.net/book_reviews/hero-projects-the-russian-empire-and-big-technology-from-lenin-to-putin/">review&lt;/a>&lt;/li>
&lt;li>Great Transformation - Westad, Chen&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="commodities">
&lt;summary>Commodities&lt;/summary>
&lt;ul>
&lt;li>✅ The Quest: Energy, Security, and the Remaking of the Modern World - Yergin&lt;/li>
&lt;li>✅ Energy and Civilization - Vaclav Smil&lt;/li>
&lt;li>✅ Upside of Down - Homer-Dixon&lt;/li>
&lt;li>✅ Oil 101 - Morgan Downey&lt;/li>
&lt;li>✅ Oil A Beginner&amp;rsquo;s Guide - Vaclav Smil&lt;/li>
&lt;li>✅ The Box: How the Shipping Container Made the World - Mark Levinson&lt;/li>
&lt;li>✅ Making the Modern World Materials and Dematerialization - Vaclav Smil&lt;/li>
&lt;li>✅ Growth from Microorganisms to Megacities - Vaclav Smil&lt;/li>
&lt;li>✅ Organic Chemistry Principles in Context: A Story Telling Historical Approach&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="management">
&lt;summary>Management&lt;/summary>
&lt;ul>
&lt;li>Badass: Making Users Awesome - Sierra&lt;/li>
&lt;li>✅ Crossing the Chasm - Geoffrey Moore&lt;/li>
&lt;li>✅ Flawless Consulting - Peter Block&lt;/li>
&lt;li>✅ Managing the Professional Service Firm - David Maister&lt;/li>
&lt;li>✅ The Manager&amp;rsquo;s Path - Camille Forunier&lt;/li>
&lt;li>✅ The Mythical Man Month - Fred Brooks&lt;/li>
&lt;li>Phoenix Project - Gene Kim, Kevin Behr, George Spafford&lt;/li>
&lt;li>✅ Radical Candor - Kim Scott &lt;span class="marginnote">A summary suffices&lt;/span>&lt;/li>
&lt;li>✅ Managing Humans - Michael Lopp&lt;/li>
&lt;li>✅ Extreme Ownership - Jocko Willink, Leif Babin&lt;/li>
&lt;li>✅ Engineering Management for the Rest of Us - Sarah Drasner&lt;/li>
&lt;li>✅ An Elegant Puzzle: Systems of Engineering Management - Will Larson&lt;/li>
&lt;li>Coaching Habit - Bungay, Michael Stanier&lt;/li>
&lt;li>✅ First 90 Days - Michael D. Watkins&lt;/li>
&lt;li>✅ Seeing like a State - James C. Scott&lt;/li>
&lt;li>✅ Law for Computer Scientists - Mireille Hildebrandt &lt;span class="marginnote">Many flaws&lt;/span>&lt;/li>
&lt;li>✅ Planning Extreme Programming - Kent Beck&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="slavic-history">
&lt;summary>Slavic History&lt;/summary>
&lt;ul>
&lt;li>Revenge of the Past: Nationalism, Revolution and the Collapse of the Soviet Union - Ronald Grigor Suny&lt;/li>
&lt;li>Empire of Nations: Ethnographic Knowledge and the Making of the Soviet Union - Francine Hirsch&lt;/li>
&lt;li>USSR as Communal Apartment - Yuri Slezkine&lt;/li>
&lt;li>✅ Biography of No Place - Kate Brown &lt;span class="marginnote">Amazing.&lt;/span>&lt;/li>
&lt;li>✅ Invention of Russia: The Rise of Putin - Arkady Ostrovsky&lt;/li>
&lt;li>✅ Putins People - Catherine Belton&lt;/li>
&lt;li>✅ Reading of Russian Literature in China - Mark Gamsa&lt;/li>
&lt;li>✅ Affirmative Action Empire: Nations and Nationalism in the USSR 1923-1939&lt;/li>
&lt;li>✅ History of Russian Thought - William Leatherbarrow, Derek Offord
Emigration&lt;/li>
&lt;li>✅ Russian Roots of Nazism: White Émigrés and the Making of National Socialism - Michael Kellogg&lt;/li>
&lt;li>Black Sea - Ascherson&lt;/li>
&lt;li>✅ Gates of Europe - Plokhii&lt;/li>
&lt;li>✅ Reconstruction of Nations - Snyder&lt;/li>
&lt;li>✅ Nothing is True - Pomerantsev&lt;/li>
&lt;li>✅ Essays in Modern Ukrainian History - Rudnytskii&lt;/li>
&lt;li>✅ Ukraine: Birth of a Modern Nation - Yekelchyk&lt;/li>
&lt;li>✅ Formation of Muscovy 1304-1613 - Robert Crummey&lt;/li>
&lt;li>✅ Galician Villagers and the Ukrainian National Movement - John-Paul Himka&lt;/li>
&lt;li>Breaking the Tongue - Matthew Pauly&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="american-history">
&lt;summary>American History&lt;/summary>
&lt;ul>
&lt;li>✅ The Southern Dreams of a Confederate Empire&lt;/li>
&lt;li>✅ Knights of the Golden Circle: Secret Empire, Southern Secession, Civil War by David Keehn&lt;/li>
&lt;li>Slavery, Race, and Conquest in the Tropics: Lincoln, Douglas and the Future of Latin America - Robert E. May&lt;/li>
&lt;li>✅ Vast Southern Empire: Slaveholders at the Helm of American Foreign Policy - Matthew Karp&lt;/li>
&lt;li>✅ Our Sister Republics - Caitlin Fitz&lt;/li>
&lt;li>✅ The Cultural Life of the American Colonies - Louis B Wright&lt;/li>
&lt;li>✅ American Scripture - Making the Declaration of Independence - Pauline Maier&lt;/li>
&lt;li>Epic of Latin America - John Crow&lt;/li>
&lt;li>Spain: The Root and the Flowe - John Crow&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="language-history">
&lt;summary>Language History&lt;/summary>
&lt;ul>
&lt;li>Language Planning and National Identity in Croatia - Keith Langston, Anita Peti-Stanti&lt;/li>
&lt;li>✅ The study of foreign languages in the Middle Ages - B.B. Ischoff&lt;/li>
&lt;li>✅ Lingua d’oltremare: Sulle tracce del ‘Levant Italian’ in età preuni-taria - Francesco Bruni&lt;/li>
&lt;li>✅ Lingua franca in the Mediterranean - John Wansbrough&lt;/li>
&lt;li>✅ La lingua di cui si vanta Amore: Scrittori stranieri in lingua italiana dal Medioevoal Novecento - Furio Brugnolo&lt;/li>
&lt;li>Small Books and Pleasant Histories: Popular Fiction and Its Readership in 17th. Century England - Margaret Spufford &lt;span class="marginnote">Literacy was very common already&lt;/span>&lt;/li>
&lt;li>Literacy in the Persianate World&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="mediterannean-boats">
&lt;summary>Mediterannean &amp;amp; Boats&lt;/summary>
&lt;ul>
&lt;li>Braudel Revisted: Mediterranean 16-1800&lt;/li>
&lt;li>✅ The Napoleonic Mediterranean: Enlightenment, Revolution and Empire&lt;/li>
&lt;li>✅ Arabic into Latin - Charles Burnett&lt;/li>
&lt;li>✅ A Crusade from the First: The Norman Conquest of Islamic Sicily 1060–1091 - Chevedden&lt;/li>
&lt;li>Refugees, Exiles, and Other Forced Migrants in the Late Ottoman Empire - Dawn Chatty&lt;/li>
&lt;li>Conversion and Apostasy in the Late Ottoman Empire - Selim Deringil&lt;/li>
&lt;li>The Last Ottoman Generation and the Making of the Modern Middle East - Michael Provence&lt;/li>
&lt;li>✅ Greek Thought, Arabic Culture - Dimitri Gutas&lt;/li>
&lt;li>Shock of the Ancient - Larry F. Norman&lt;/li>
&lt;li>Portuguese Seaborne Empire 1415-1825 - C.R. Boxer&lt;/li>
&lt;li>✅ Foundations of Portuguese Empire 1415-1580 - Diffie, Winius&lt;/li>
&lt;li>✅ Rise of Merchant Empires: Long Distance Trade 1350-1750 - James D. Tracy&lt;/li>
&lt;li>✅ Spain in Italy - Dandelett&lt;/li>
&lt;li>✅ Inheritance of rome - Chris Wickham&lt;/li>
&lt;li>✅ Framing the Early Middle Ages: Europe and the Mediterranean - Chris Wickham&lt;/li>
&lt;li>World of Late Antiquity - Peter Brown&lt;/li>
&lt;li>Some Lesser Officials in Latin Syria - Jonathan Riley-Smith&lt;/li>
&lt;li>✅ Criticism of Crusading 1095–1274 - Elizabeth Sibbery&lt;/li>
&lt;li>Crusades - Thomas Asbridge&lt;/li>
&lt;li>✅ Medieval Muslim Historians and the Franks in the Levant - Alex Mallett&lt;/li>
&lt;li>✅ The French of Outremer: Communities and Communications in the Crusading Mediterranean - Laura Morreale, Nicholas Paul&lt;/li>
&lt;li>✅ Learning in a Crusader City - Jonathan Rubin&lt;/li>
&lt;li>✅ Letters from the East: Crusaders, Pilgrims and Settlers in the 12th-13th Centuries - Malcolm Barber, A.K. Bate&lt;/li>
&lt;li>Twilight of a Military Tradition: Italian Aristocrats and European Conflicts 1560-1800 - Gregory Hanlon&lt;/li>
&lt;li>Mediterranean Emporium - David Abulafia&lt;/li>
&lt;li>✅ Imperial Spain 1469 -1716 - J. H. Eliot&lt;/li>
&lt;li>✅ Merchant Kings: When Companies Ruled the World - Stephan R. Brown&lt;/li>
&lt;li>✅ A History of Venice - John Julius Norwich&lt;/li>
&lt;li>✅ Dutch Ships in Tropical Waters - Robert Parthesius&lt;/li>
&lt;li>Storia dell&amp;rsquo;età barocca in Italia - Benedetto Croce&lt;/li>
&lt;li>Spanish Rome 1500-1700 - Dandelet&lt;/li>
&lt;li>✅ Agents of Empire: Knights, Corsairs, Jesuits and Spies in the Sixteenth-Century Mediterranean World - Noel Malcolm&lt;/li>
&lt;li>Brokering Empire: Trans-Imperial Subjects between Venice and Istanbul - E. Natalie Rothma&lt;/li>
&lt;li>Italy In The Nineteenth Century: 1796-1900 - John A. Davis&lt;/li>
&lt;li>Global City: on the Streets of Renaissance Lisbon&lt;/li>
&lt;li>✅ Dutch Republic - Jonathan Israel&lt;/li>
&lt;li>Embarrassment of Riches: Dutch Culture in the Golden Age - Simon Schama&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="austria-hungary">
&lt;summary>Austria-Hungary&lt;/summary>
&lt;ul>
&lt;li>✅ Requiem für eine Monarchie - François Fejtö&lt;/li>
&lt;li>✅ Der Mann ohne Eigenschaften - Robert Musil&lt;/li>
&lt;li>✅ Embers - Sándor Márai&lt;/li>
&lt;li>✅ Radetzkymarsch - Roth&lt;/li>
&lt;li>✅ Kidnapped Souls: Battle for Children in Bohemian Lands 1900-48 - Tara Zahra&lt;/li>
&lt;li>✅ Hopeless Struggle: Austro-Hungarian Army and Total War - John Schindler&lt;/li>
&lt;li>✅ Collision of Empires: War on the Eastern Front 1914 - Prit Buttar&lt;/li>
&lt;li>✅ Ring of Steel: Germany and Austria-Hungary in WWI - Alexander Watson&lt;/li>
&lt;li>✅ Dualist Character of the 1867 Hungarian Settlement - Laszlo Peter&lt;/li>
&lt;li>✅ Stellung Ungarns in der Monarchie - Peter Hanak&lt;/li>
&lt;li>✅ Balkans - Misha Glenny&lt;/li>
&lt;li>✅ Victims’ State: War and Welfare in Austria 1868-1925 - Ke-Chin Hsia&lt;/li>
&lt;li>✅ Politics of Ethnic Survival: Germans in Prague - Gary B. Cohen&lt;/li>
&lt;li>✅ Budweisers into Czechs and Germans 1848-1948 - Jeremy King&lt;/li>
&lt;li>✅ Forging a Multinational State - John Deak&lt;/li>
&lt;li>✅ Habsburg Empire - Pieter Judson&lt;/li>
&lt;li>✅ Guardians of the Nation: Activists on Language Frontiers of Imperial Austria - John W. Boyer&lt;/li>
&lt;li>✅ Oil Empire: Visions of Prosperity in Austrian Galicia - Alison Frank Johnson&lt;/li>
&lt;li>✅ Habsburg Empire - Paula Sutter Fichtner&lt;/li>
&lt;li>✅ Mad Catastrophe: Outbreak of WWI and Collapse of the Habsburg Empire - Geoffrey Wawro&lt;/li>
&lt;li>✅ History of the Habsburg Empire - Jean Berenger&lt;/li>
&lt;li>✅ Nobles and Nation in Central Europe: Free Imperial Knights 1750-1850 - Willian D. Godsey&lt;/li>
&lt;li>✅ Erzherzog Franz Ferdinand und Conrad von Hötzendorf: Strategien zur Stabilisierung der Donaumonarchie - Birgitt Morgenbrod&lt;/li>
&lt;li>✅ The Afterlife of Austria-Hungary: The Image of the Habsburg Monarchy in Interwar Europe - Adam Kożuchowski&lt;/li>
&lt;li>✅ Decline and Fall of the Habsburg Empire - Alan Sked&lt;/li>
&lt;li>✅ Limits of Loyalty: Symbolism, Allegiance, State Patriotism&lt;/li>
&lt;li>✅ Europe on Trial: The Story of Collaboration, Resistance, and Retribution during World War II - Istvan Deak&lt;/li>
&lt;li>✅ Beyond nationalism: Habsburg Officer Corps - Istvan Deak&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="other-history">
&lt;summary>Other History&lt;/summary>
&lt;ul>
&lt;li>✅ Raj: The Making and Unmaking of British India - Lawrence James&lt;/li>
&lt;li>✅ Nationalsozialismus und die Antike - Johan Chapoutot&lt;/li>
&lt;li>✅ Hitler&amp;rsquo;s Collaborators - Philip Morgan&lt;/li>
&lt;li>Military Experience in the Age of Reason - Christopher Duffy&lt;/li>
&lt;li>✅ The Path to Victory: The Mediterranean Theater in World War II&lt;/li>
&lt;li>✅ Death and Exile: The Ethnic Cleansing of Ottoman Muslims 1821-1922 - Justin McCarthy&lt;/li>
&lt;li>✅ History without Borders: Making of an Asian World Region - Gunn&lt;/li>
&lt;li>Pursuit of Glory: 5 Revolutions that Made Modern Europe&lt;/li>
&lt;li>Campaigs of Napolean - David G. Chandler&lt;/li>
&lt;li>Right Wing in France: From 1815 to de Gaulle&lt;/li>
&lt;li>✅ Konservativerevolution in Deutschland - Armin Mohler&lt;/li>
&lt;li>✅ Too Much to Know: Managing Scholarly Information before the Modern &lt;span class="marginnote">Very pertinent to our struggle today&lt;/span>&lt;/li>
&lt;li>✅ Scribes and Scholars: A Guide to the Transmission of Greek and Latin Literature - Reynolds, Wilson&lt;/li>
&lt;/ul>
&lt;/details>
&lt;details id="misc.-literature">
&lt;summary>Misc. Literature&lt;/summary>
&lt;ul>
&lt;li>✅ Tradition and Individual Talent - Eliot&lt;/li>
&lt;li>✅ Conjectures on Original Composition - Edward Young&lt;/li>
&lt;li>&lt;a href="https://ru.m.wikisource.org/wiki/%D0%9F%D1%91%D1%82%D1%80_%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80%D0%BE%D0%B2%D0%B8%D1%87_%D0%9F%D0%BB%D0%B5%D1%82%D0%BD%D1%91%D0%B2">Плетнёв&lt;/a>&lt;/li>
&lt;li>✅ Russische Literaturgeschichte in Einzelporträts - Alexander Eliasberg&lt;/li>
&lt;li>✅ Pleasures of Literature - Powys John Cowper&lt;/li>
&lt;li>✅ Makamen - Hariri (über. v. Friedrich Rückert)&lt;/li>
&lt;li>Deutsche Geistesgeschichte aus dem Leben der Dichter - Carstensen&lt;/li>
&lt;li>✅ &lt;a href="https://www.gutenberg.org/cache/epub/18827/pg18827-images.html#toc15">Love of Fame&lt;/a> - Edward Young &lt;span class="marginnote">Divine!&lt;/span>&lt;/li>
&lt;li>✅ Essay on Man - Alexander Pope&lt;/li>
&lt;li>✅ Essay on Criticism - Alexander Pope&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="novels">
&lt;summary>Novels&lt;/summary>
&lt;ul>
&lt;li>✅ Prague - Arthur Philipp&lt;/li>
&lt;li>✅ The Count of Monte-Christo - Dumas&lt;/li>
&lt;li>✅ La Tabla de Flandes - Perez Reverte Arturo&lt;/li>
&lt;li>✅ An Artist of the Floating World - ishiguro&lt;/li>
&lt;li>✅ The File on H - Ismail Kadare&lt;/li>
&lt;li>✅ iPhuck 10 - Виктор Пелевин&lt;/li>
&lt;li>✅ &lt;a href="https://unsongbook.com/">Unsong&lt;/a>&lt;/li>
&lt;li>✅ Die verlorene Handschrift&lt;/li>
&lt;li>✅ Die Schrecken des Eises und der Finsternis - Ransmyar&lt;/li>
&lt;li>✅ Демоны - Достоевский&lt;/li>
&lt;li>✅ Дети Арбата - Анатолы Рыбаков&lt;/li>
&lt;li>✅ Обломов - Гончаров&lt;/li>
&lt;li>✅ Taugenichts - von Eichendorff&lt;/li>
&lt;li>✅ Juden auf Wanderschaft - Joseph Roth&lt;/li>
&lt;li>✅ &lt;a href="https://de.wikisource.org/wiki/Idealisten">Die Idealisten&lt;/a> - Rudolf Lavant &lt;span class="marginnote">Wohl mein Lieblingsbuch&lt;/span>&lt;/li>
&lt;li>✅ Scherz, satire und Ironie - Christian Dietrich Grabbe&lt;/li>
&lt;li>✅ Herzog Theodor von Gothland - Christian Dietrich Grabbe&lt;/li>
&lt;li>✅ Catch Me If You Can&lt;/li>
&lt;li>✅ Thais - Anatole France&lt;/li>
&lt;li>✅ Cuore - Edmondo de Amicis&lt;/li>
&lt;li>✅ 3 Musketeers - Alexandre Dumas&lt;/li>
&lt;li>✅ Club Dumas - Perez Reverte Arturo&lt;/li>
&lt;li>✅ Snow Crash - Neal Stephenson&lt;/li>
&lt;li>✅ Горе от Ума - Грибоедов&lt;/li>
&lt;li>✅ 20,000 Leagues under the Sea - Jules Verne&lt;/li>
&lt;li>✅ The Mysterious Island - Jules Verne&lt;/li>
&lt;li>✅ King Solomon&amp;rsquo;s Mines - Sir. Haggard&lt;/li>
&lt;li>✅ Treasure Island - Robert Louis Stevenson&lt;/li>
&lt;li>✅ Pride and Prejudice - Jane Austen&lt;/li>
&lt;li>Sense and Sensibility - Jane Austen&lt;/li>
&lt;li>Emma - Jane Austen&lt;/li>
&lt;li>✅ Мертвые Души - Гоголь&lt;/li>
&lt;li>✅ Primogenitor, Clonelord, Manflayer - Josh Reynolds&lt;/li>
&lt;li>✅ Master of Mankind - Aaron Dembski-Bowden&lt;/li>
&lt;li>✅ Requiem Infernal - Fehervari &lt;span class="marginnote">Darkly sublime!&lt;/span>&lt;/li>
&lt;li>✅ God Eater&amp;rsquo;s Son - Noah Van Nguyen&lt;/li>
&lt;li>✅ A Colder War - Stross &lt;span class="marginnote">Perfect aesthetic&lt;/span>&lt;/li>
&lt;li>✅ Beyond the Black Circle - Robert E Howard&lt;/li>
&lt;li>✅ El renacimiento - Gobineau&lt;/li>
&lt;li>Deepness in the Sky - Vernor Vinge &lt;span class="marginnote">Programmer archaeologist…&lt;/span>&lt;/li>
&lt;li>Ambassadors - Henry James&lt;/li>
&lt;li>Portrait of a Lady - Henry James&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="gothic-literature">
&lt;summary>Gothic Literature&lt;/summary>
&lt;ul>
&lt;li>✅ Adolphe - Benjamin Constant&lt;/li>
&lt;li>✅ Leiden des jungen Werthers - Goethe&lt;/li>
&lt;li>✅ Oberman - Étienne Pivert de Senancour&lt;/li>
&lt;li>✅ Fungi from Yuggoth - H.P. Lovecraft&lt;/li>
&lt;li>✅ Elixiere des Teufels - ETA Hoffman&lt;/li>
&lt;li>✅ Die Serpionsbrüder - ETA Hoffman&lt;/li>
&lt;li>✅ Nachtstücke - ETA Hoffman&lt;/li>
&lt;li>✅ Castle of Otranto - Horace Walpole&lt;/li>
&lt;li>✅ Vathek - William Beckford&lt;/li>
&lt;li>✅ El Estudiante de Salamanca - José de Espronceda&lt;/li>
&lt;li>Mysteries of Udolpho - Anne Radcliffe&lt;/li>
&lt;li>Romance of the Forest - Anne Radcliffe&lt;/li>
&lt;li>Glenarvon - Lady Caroline Lamb&lt;/li>
&lt;li>✅ The Monk - Matthew Lewis&lt;/li>
&lt;li>Old English Baron - Clara Reeve&lt;/li>
&lt;li>The Italian - Anne Radcliffe&lt;/li>
&lt;li>✅ Frankenstein - Mary Shelley&lt;/li>
&lt;li>✅ The Vampyre - Polidori&lt;/li>
&lt;li>Bride of Lammermoor - Sir. Walter Scott&lt;/li>
&lt;li>✅ Melmoth the Wanderer - Charles Maturin&lt;/li>
&lt;li>Siebenkäs - Jean-Paul&lt;/li>
&lt;li>✅ Undine - Fouqué&lt;/li>
&lt;li>Fantôme de l&amp;rsquo;Opéra - Gaston Leroux&lt;/li>
&lt;li>✅ Das Marmorbild - von Eichendorff&lt;/li>
&lt;li>✅ Wuthering Heights - Emily Brontë&lt;/li>
&lt;li>Cathy - Emily Brontë&lt;/li>
&lt;li>✅ Jane Eyre - Charlotte Brontë&lt;/li>
&lt;li>House of the Seven Gables - Nathaniel Hawthorne&lt;/li>
&lt;li>✅ Picture of Dorian Gray - Oscar Wilde&lt;/li>
&lt;li>Strange Case of Dr. Jekyll and Mr. Hyde - Robert Louis Stevenson&lt;/li>
&lt;li>✅ Dracula - Bram Stoker&lt;/li>
&lt;li>✅ King in Yellow - Robert Chambers&lt;/li>
&lt;li>✅ Supernatural Horror in Literature - H.P. Lovecraft&lt;/li>
&lt;li>Rebecca - Daphne du Maurier&lt;/li>
&lt;li>✅ Music of Erich Zann - H.P. Lovecraft&lt;/li>
&lt;li>✅ Call of Cthulhu - H.P. Lovecraft&lt;/li>
&lt;li>✅ Dream-Quest of Unknown Kadath - H.P. Lovecraft&lt;/li>
&lt;li>✅ At the Mountains of Madness - H.P. Lovecraft&lt;/li>
&lt;li>✅ &lt;a href="https://ru.wikisource.org/wiki/%D0%A1%D0%B2%D0%B5%D1%82%D0%BB%D0%B0%D0%BD%D0%B0_(%D0%96%D1%83%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9)">Светлана&lt;/a> - Жуковский&lt;/li>
&lt;li>✅ &lt;a href="https://rvb.ru/18vek/poety1790_1810/01text/39meshevski/289.htm">Лила&lt;/a> - Мещевский&lt;/li>
&lt;li>✅ &lt;a href="https://ru.wikisource.org/wiki/%D0%9E%D0%BB%D1%8C%D0%B3%D0%B0_(%D0%9A%D0%B0%D1%82%D0%B5%D0%BD%D0%B8%D0%BD)">Ольга&lt;/a> - Катенин&lt;/li>
&lt;li>Остров Борнгольм - Карамзин&lt;/li>
&lt;li>✅ Mysteries of London - George Reynolds&lt;/li>
&lt;li>✅ Пиковая дама - Пушкин&lt;/li>
&lt;li>✅ Русские Ночи - &lt;a href="https://fantlab.ru/autor1802">Одоевский&lt;/a> &lt;span class="marginnote">Русский Фауст&lt;/span>&lt;/li>
&lt;li>✅ Миргород - Гоголь &lt;span class="marginnote">Вий!&lt;/span>&lt;/li>
&lt;li>✅ Арабески - Гоголь&lt;/li>
&lt;li>&lt;a href="https://ru.wikisource.org/wiki/%D0%94%D0%B5%D0%BC%D0%BE%D0%BD_(%D0%9B%D0%B5%D1%80%D0%BC%D0%BE%D0%BD%D1%82%D0%BE%D0%B2)">Демон&lt;/a> - Лермонтов&lt;/li>
&lt;li>Дон Корорадо де Геррера - Гнедич &lt;span class="marginnote">His Iliad’s the standard Rus. translation.&lt;/span>&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="deutschtum">
&lt;summary>Deutschtum&lt;/summary>
&lt;ul>
&lt;li>Shakespeare und der deutsche Geist - Gundolf&lt;/li>
&lt;li>Dichter und Helden - Gundolf&lt;/li>
&lt;li>Michelangelo und Leonardo - Gundolf&lt;/li>
&lt;li>Romantiker - Gundolf&lt;/li>
&lt;li>Romantiker Briefe - Gundolf&lt;/li>
&lt;li>✅ Goethe - Gundolf&lt;/li>
&lt;li>✅ The Poet as Cultural Savior: Friedrich Gundolf&amp;rsquo;s Goethe - Osterkamp&lt;/li>
&lt;li>✅ Literary Criticism of Friedrich Gundolf - René Wellek&lt;/li>
&lt;li>✅ Phänomenologie des Geistes - Hegel&lt;/li>
&lt;li>✅ Dritte Reich - Moeller van den Bruck&lt;/li>
&lt;li>✅ Preußentum und Sozialismus - Spengler&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="philosophy">
&lt;summary>Philosophy&lt;/summary>
&lt;ul>
&lt;li>✅ Über die ästethische Erzheiung des Mennschen - Schiller&lt;/li>
&lt;li>✅ The Act of Creation - Arthur Koestler &lt;span class="marginnote">Bisection&lt;/span>&lt;/li>
&lt;li>✅ Die Kunst, Recht zu behalten&lt;/li>
&lt;li>Grundriss der Geschichte der Philosophie - Friedrich Überweg&lt;/li>
&lt;li>✅ Welt als Wille und Vorstellung - Schopenhauer&lt;/li>
&lt;li>✅ Vidas Paralelas - Plutarco&lt;/li>
&lt;li>✅ They Became What They Beheld - Edmund Carpenter&lt;/li>
&lt;li>✅ Great Ideas: A Lexicon of Western Thought - Mortimer Adler &lt;span class="marginnote">Important!&lt;/span>&lt;/li>
&lt;li>✅ Über Sinn und Bedeutung - Gottlob Frege&lt;/li>
&lt;li>✅ Naming and Necessity - Saul Kripke&lt;/li>
&lt;li>✅ Jenseits von Gut und Böse - Nietzsche&lt;/li>
&lt;li>✅ Tractatus Logico-Philosophicus - Wittgenstein&lt;/li>
&lt;li>Wissenschaftslehre - Fichte&lt;/li>
&lt;li>✅ Vorlesungen über die Bestimmung des Gelehrten - Fichte&lt;/li>
&lt;li>✅ Beitrag zur Berichtigung der Urteile des Publikums über die französische Revolution - Fichte&lt;/li>
&lt;li>✅ Sein und Zeit - Heidegger&lt;/li>
&lt;li>✅ Open Society and its Enemies - Karl Popper&lt;/li>
&lt;li>✅ Structure of Scientific Revolutions - Thomas Kuhn&lt;/li>
&lt;li>✅ Kritik der reinen Vernunft - Kant&lt;/li>
&lt;li>✅ Wissenschaft der Logik - Hegel&lt;/li>
&lt;li>✅ Etymologiae - Isidorus Hispalensis&lt;/li>
&lt;li>✅ Consolatio philosophiae - Boethius&lt;/li>
&lt;li>Summa theologica - Thomas Aquinas&lt;/li>
&lt;li>✅ Meditations - Marcus Aurelius&lt;/li>
&lt;li>✅ De Amicitia - Cicero&lt;/li>
&lt;li>✅ Politics - Aristotle&lt;/li>
&lt;li>✅ Categoria - Aristotle&lt;/li>
&lt;li>✅ Nicomachean Ethics - Aristotle&lt;/li>
&lt;li>✅ De Rerum Natura - Lucretius&lt;/li>
&lt;li>✅ Enneads - Plotinus&lt;/li>
&lt;li>✅ &lt;a href="https://www.c82.net/euclid/?utm_medium=website&amp;amp;utm_source=archdaily.com">Elements&lt;/a> - Euclid&lt;/li>
&lt;li>✅ Proclus&amp;rsquo; 6 Books&lt;/li>
&lt;li>✅ 庄子 Zhuāngzi&lt;/li>
&lt;li>抱朴子 Baopuzi&lt;/li>
&lt;li>道德经 Daodejing&lt;/li>
&lt;li>墨子 Mozi&lt;/li>
&lt;li>论语 Analects - Kongzi&lt;/li>
&lt;li>孟子 Mèngzǐ&lt;/li>
&lt;li>中庸 Zhōngyōng - Zǐsī&lt;/li>
&lt;li>大學 Dàxué - Zēngzǐ&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="unsorted">
&lt;summary>Unsorted&lt;/summary>
&lt;ul>
&lt;li>Colloquial French - R.A. Humphrey &lt;span class="marginnote">My favorite French book!&lt;/span>&lt;/li>
&lt;li>Dictionary of Burning Words of Brilliant Writers - Josiah Hotchkiss Gilbert&lt;/li>
&lt;li>✅ Syriac World - Daniel King&lt;/li>
&lt;li>✅ To Train his Soul in Books: Syriac Asceticism&lt;/li>
&lt;li>Students of the Bible in 4-5th Century Syria&lt;/li>
&lt;li>✅ The Scattered Pearls: A History of Syriac Literature and Sciences - Ephrem Barsoum, Matti Moosa&lt;/li>
&lt;li>Empires of the Silk Road - Christopher Beckwith&lt;/li>
&lt;li>✅ Inside central Asia a political and cultural history of Uzbekistan, Turkmenistan, Kazakhstan, Kyrgyzstan, Tajikistan, Turkey and Iran - Dilip Hiro&lt;/li>
&lt;li>✅ Myth of the Andalusian Paradise: Muslims, Christians and Jews under Islamic Rule in Medieval Spain - Dario Fernandez-Morera&lt;/li>
&lt;li>✅ From Hellenism to Islam Cultural and Linguistic Change in the Roman Near East&lt;/li>
&lt;li>✅ The Afterlife of al-Andalus Muslim Iberia in Contemporary Arab and Hispanic Narratives - Christina Civantos&lt;/li>
&lt;li>Medieval Sicily, al-Andalus, and the Maghrib Writing in Times of Turmoil&lt;/li>
&lt;li>✅ The Sultan&amp;rsquo;s Renegades: European Converts and the Ottoman Elite - Graf, Tobias&lt;/li>
&lt;li>✅ Singapore Story: Memoirs of Lee Kuam Yew&lt;/li>
&lt;li>✅ Open Society and its Enemies - Karl Popper&lt;/li>
&lt;li>✅ Coup d&amp;rsquo;État: Practical Handbook - Edward Luttwak&lt;/li>
&lt;li>✅ Im Stahlgewitter - Ernst Jünger&lt;/li>
&lt;li>✅ The Landscape of History - John Lewis Gaddis&lt;/li>
&lt;li>✅ The Politics of Authoritarian Rule - Milan W. Svolik&lt;/li>
&lt;li>✅ Amerika ist an allem schuld - Gerhard Herm&lt;/li>
&lt;li>✅ Verge: Reformation, Renaissance - Patrick Wymann &lt;span class="marginnote">On institutions which fueled the Great Divergence&lt;/span>&lt;/li>
&lt;li>✅ From Dawn to Decadence - Jacques Barzun&lt;/li>
&lt;li>✅ How to Read a Book - Mortimer Adler&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="also-unsorted">
&lt;summary>Also unsorted&lt;/summary>
&lt;ul>
&lt;li>✅ Pageant of Poetry - Leonard&lt;/li>
&lt;li>✅ &lt;a href="https://www.gutenberg.org/cache/epub/2810/pg2810-images.html">Plunkitt of Tammany Hall&lt;/a> &lt;span class="marginnote">Features defense of ‘honest graft’&lt;/span>&lt;/li>
&lt;li>✅ Hugo Swedish in 3 Months (1959)&lt;/li>
&lt;li>✅ Briefe - Stifter&lt;/li>
&lt;li>✅ Caucasian Republics - Margaret Kaeter&lt;/li>
&lt;li>✅ Czechoslovakia, Hungary, Poland - Iván &amp;amp; Mary Völgyes&lt;/li>
&lt;li>✅ Polish August - Neal Ascherson&lt;/li>
&lt;li>✅ Civil Wars - Enzensberger&lt;/li>
&lt;li>✅ Peasants &amp;amp; Peasant Societies - Teodor Shanin&lt;/li>
&lt;li>✅ International Communism in the Era of Lenin - Helmut Grubber&lt;/li>
&lt;li>✅ Revolutions: comparative Study - Lawrence Kaplan&lt;/li>
&lt;li>✅ World Turned Upside Down - Christopher Hill&lt;/li>
&lt;li>✅ Hagestolz Stifter&lt;/li>
&lt;li>✅ Letture Italiane per Straieri (1970)&lt;/li>
&lt;li>✅ Smartest Guys in the Room - McLean, Elking&lt;/li>
&lt;li>✅ Da Vinci: Aspects of Renaissance Genius - Morris Philipson&lt;/li>
&lt;li>✅ Introduccion a la historia del derecho mexicano - Margadaní&lt;/li>
&lt;li>✅ Colloquial Persian - Elwell-Sutton&lt;/li>
&lt;li>✅ Teach Yourself Turkish - G.L. Lewis&lt;/li>
&lt;li>✅ Historia de la literatura latina - Millares Carlo&lt;/li>
&lt;li>✅ Poetas Novohispanos - Méndez Plancarte&lt;/li>
&lt;li>✅ Thrilling Cities - Ian Flemming&lt;/li>
&lt;li>✅ Teufelskreis - Bayer&lt;/li>
&lt;li>✅ Treibhaus - Koeppen&lt;/li>
&lt;li>✅ Begegnung mit Caroline (1979)&lt;/li>
&lt;li>✅ Goethe erzählt sein Leben&lt;/li>
&lt;li>✅ Goethe 0 Friedenthal&lt;/li>
&lt;li>✅ Scientific German - Condoyannis&lt;/li>
&lt;li>✅ Scientific French - Locke&lt;/li>
&lt;li>✅ Scientific Russian - Condoyannis&lt;/li>
&lt;li>✅ Frühlingserwachen - Wedekind&lt;/li>
&lt;li>✅ При билета до Эдвенчер Джеральд Даррелль&lt;/li>
&lt;li>✅ Когда Боги смеются - Александра Маринина&lt;/li>
&lt;li>✅ Qué es el clasicismo? - Peyre&lt;/li>
&lt;li>✅ Greek Civilization &amp;amp; Character - Toynbee&lt;/li>
&lt;li>✅ Carl Maria von Weber - Michael Lenart&lt;/li>
&lt;li>✅ Cities of the Mediterranean - Kolluoğlu, Toksöz&lt;/li>
&lt;li>✅ Девушки со скромными средствами - Мюриэл Спарк&lt;/li>
&lt;li>✅ Глазами человека моего поколения - И.В. Сталине&lt;/li>
&lt;li>✅ Kleine Geschichte Ungarns - István Lázár&lt;/li>
&lt;li>✅ Persian Grammar - Lambton&lt;/li>
&lt;li>✅ Anatomy of Melancholy - Robert Burton&lt;/li>
&lt;li>✅ History of Venice - Norwich&lt;/li>
&lt;li>✅ Rätsel des Silbermodes - Hubert Horstmann&lt;/li>
&lt;li>✅ Unheimliche Erscheinungsformen auf Omega XI - Johanna &amp;amp; Günter Braun&lt;/li>
&lt;li>✅ Intro to Old Norse - Gordon&lt;/li>
&lt;li>✅ Science Fiction Hall of Fame Vol. 1&lt;/li>
&lt;li>✅ Adventura del cine mexicano - Ayala Blanco&lt;/li>
&lt;li>✅ Silla del moro y nuevas escenas andaluzas - Garcia Gómez&lt;/li>
&lt;li>✅ Mediterraneo es un hombre disfrzado de mar - María Gironella&lt;/li>
&lt;li>✅ Personas, ideas, mares - María Gironella&lt;/li>
&lt;li>✅ Istanbul - Orhan Pamuk&lt;/li>
&lt;li>✅ Meurtes a la cour du Roi-Soleil - Arlette Lebirge&lt;/li>
&lt;li>✅ Classical Influences on English Poetry - Thomson&lt;/li>
&lt;li>✅ Classical Influences on English Prose - Thomson&lt;/li>
&lt;li>✅ Early Middle Ages - Brentano&lt;/li>
&lt;li>✅ El Quijote - Cervantes&lt;/li>
&lt;li>✅ Islamic Literature - Najib Ulllah&lt;/li>
&lt;li>✅ Sueños - de Quevedo&lt;/li>
&lt;li>✅ Colloquial Italian (1982) - Flavio Andreis&lt;/li>
&lt;li>✅ Soirées de Saint Pétersbourg - Joseph de Maistre&lt;/li>
&lt;li>✅ Lutrin et l&amp;rsquo;art Poétique - Boileau&lt;/li>
&lt;li>✅ Colloquial Russian (1973) - Clarkson, Harrison, Le Fleming&lt;/li>
&lt;li>✅ Requiem für eine Monarchie - Fejtö&lt;/li>
&lt;li>✅ Ungarische Kulturideale - Kornis&lt;/li>
&lt;li>✅ Complete Intro to Devout Life - de Sales&lt;/li>
&lt;li>✅ Pueblo Abandonado - Maestre Fuentes&lt;/li>
&lt;li>✅ Bright&amp;rsquo;s Old English Grammar &amp;amp; Reader&lt;/li>
&lt;li>✅ Fire &amp;amp; Stone - Christopher Duffs&lt;/li>
&lt;li>✅ Red Mafiya - Friedman&lt;/li>
&lt;li>✅ Shakespeare: Arranged for Moder Reading - Cady, Cartmell&lt;/li>
&lt;li>✅ Towards a Better World - Gorbachev&lt;/li>
&lt;li>✅ Roman des Abendlandes - Meissinger&lt;/li>
&lt;li>✅ Amerika ist an allem Schuld - Gerhard Herm&lt;/li>
&lt;li>✅ Essais - Montaigne&lt;/li>
&lt;li>✅ Nibellungesage - Heinrich Lentz&lt;/li>
&lt;li>✅ Leben auf dem Lande - Duiliu Zampfirescu&lt;/li>
&lt;li>✅ Liebesschule - Heyer&lt;/li>
&lt;li>✅ Führer der deutschen Friedensbewegung - dr. Hans Wehberg&lt;/li>
&lt;li>✅ Томек у истоков амазонки - Шклярский&lt;/li>
&lt;li>✅ Learn Romani - Ronald Lee&lt;/li>
&lt;li>✅ EuroComRom: Sieben Siebe - Horst G. Klein&lt;/li>
&lt;li>✅ Japaese Reader - Miller&lt;/li>
&lt;li>✅ Essential Japanese - Martin&lt;/li>
&lt;li>✅ Historical Geography of the Greek World - Spiridonakis&lt;/li>
&lt;li>✅ Raumfahrt - Hans Barth&lt;/li>
&lt;li>✅ Gedichte - Lenau&lt;/li>
&lt;li>✅ Геополитические стратегия Украины - Дмитрий Базив&lt;/li>
&lt;li>✅ Bel-Ami - Maupassant&lt;/li>
&lt;li>✅ Shorter Novels - Hermann Melville&lt;/li>
&lt;li>✅ Loom of Language - Bodmer&lt;/li>
&lt;li>✅ Teach Yourself Irish - Dillon, Cróinín&lt;/li>
&lt;li>✅ Liaisons dangereuses - Laclos&lt;/li>
&lt;li>✅ Vom Wunder der Seele - Meister Eckehart&lt;/li>
&lt;li>✅ Undine - Fouqué&lt;/li>
&lt;li>✅ Renaissance, Humanismus, Reformation &amp;hellip; reclam&lt;/li>
&lt;li>✅ Griechische Philosophie (3 Bände) - dr. Wilhelm Capelle (Sammlung Göschen)&lt;/li>
&lt;li>✅ Astrophysik: Beschaffenheit der Himmelskörper - Prof. W.F. Wislicenus, dr. H. Ludendorff (Sammlung Göschen)&lt;/li>
&lt;li>✅ Transsibieren Express - Konsalik&lt;/li>
&lt;li>✅ Bewegungslehre, Statik und Festigkeitslehre (1921) - N. Schmitt&lt;/li>
&lt;li>✅ Hugo&amp;rsquo;s Russian Grammar Simplified&lt;/li>
&lt;li>✅ Russian Grammar &amp;amp; Self-Educator (1943) - dr. Louis Segal &lt;span class="marginnote">Special war paper&lt;/span>&lt;/li>
&lt;li>✅ Das bleib vom Doppeladler - Ernst Trost&lt;/li>
&lt;li>✅ Flucht aus dem Alltag - Gustav Shröer&lt;/li>
&lt;li>✅ Teach Yourself Afrikaans - Schalkwyk&lt;/li>
&lt;li>✅ Colloquial Serbo-Croat (1986) - Celia Hawkesworth&lt;/li>
&lt;li>✅ Teach Yourself Latin - Kinchin Smith&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;/ul>
&lt;h2 id="interesting-places">Interesting Places&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://ciechanow.ski">Ciechanowski&lt;/a>&amp;rsquo;s Gorgeous Lessons &lt;span class="marginnote">More enlightening than some above books, but not books&amp;hellip;&lt;/span>&lt;/li>
&lt;li>&lt;a href="https://neocities.org/browse">Neocities&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://codingchallenges.fyi">Write your Own&amp;hellip;&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://search.marginalia.nu/">Marginalia&lt;/a>, &lt;a href="https://blog.kagi.com/small-web">Kagi&lt;/a> and &lt;a href="https://wiby.me/">Wiby&lt;/a> search engines&lt;/li>
&lt;li>&lt;a href="https://theoldnet.com">The Old Net&lt;/a> &lt;span class="marginnote">Set port 1999 with an exclusion for web.archive.org to only receive pages from 1999, dito for other years.&lt;/span> or &lt;a href="https://oldweb.today">Old Web&lt;/a> or &lt;a href="https://protoweb.org/about/">protoweb&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://aartaka.me/">Artyom&amp;rsquo;s Blog&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://explained-from-first-principles.com/">&amp;hellip;explained from first principles&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://news.ycombinator.com/news">HN&lt;/a> &amp;amp; &lt;a href="https://lobste.rs/">Lobsters&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://textfiles.com">Text Files&lt;/a> - Especially /programming&lt;/li>
&lt;li>&lt;a href="https://restofworld.org/">Rest of the World&lt;/a> - news from around the world&lt;/li>
&lt;li>&lt;a href="http://theoildrum.com">Oil Drum&lt;/a> - articles on (peak) oil&lt;/li>
&lt;li>&lt;a href="https://fourbooks.org/">https://fourbooks.org/&lt;/a> - Chinese philosophy, by &lt;a href="https://x.com/Solzi_Sez">Sol&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.hillelwayne.com/">https://www.hillelwayne.com/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/naver/lispe/">https://github.com/naver/lispe/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.johnderbyshire.com/Reviews/page.html">https://www.johnderbyshire.com/Reviews/page.html&lt;/a>&lt;/li>
&lt;li>Bret Victor&amp;rsquo;s &lt;a href="https://worrydream.com/">https://worrydream.com/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://dualn-back.com/">https://dualn-back.com/&lt;/a>&lt;/li>
&lt;li>Energy and Mining Innovation &lt;a href="https://www.youtube.com/@rolandplett">https://www.youtube.com/@rolandplett&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://aosabook.org/en/index.html">https://aosabook.org/en/index.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://ru.algorithmica.org/">https://ru.algorithmica.org/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://yarchive.net/comp/index.html">https://yarchive.net/comp/index.html&lt;/a>&lt;/li>
&lt;li>cs research
&lt;ul>
&lt;li>&lt;a href="https://blog.acolyer.org/">https://blog.acolyer.org/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://neverworkintheory.org/date/">https://neverworkintheory.org/date/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://shape-of-code.com/">https://shape-of-code.com/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.jsoftware.com/papers/">APL reading room&lt;/a> &amp;amp; &lt;a href="https://archive.org/details/APL_books/198503_The%20APL%20Jot%20Dot%20Times/page/112/mode/2up">more Archives&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://railtec.illinois.edu/member/christopher-barkan/">Railway Planning Papers&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.dreamsongs.com/Essays.html">Dreamsongs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/@fullmoonmatinee/videos">Crime Noir Matinee&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="interesting-pieces">Interesting Pieces&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="http://music.hyperreal.org/artists/brian_eno/interviews/detail92.html">Scents and Sensibility&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.yaroslavps.com/weblog/overcomplicated/">Overcomplicated&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.mit.edu/~xela/tao.html">The Tao of Programming (1987)&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://frinklang.org/frinkdata/units.txt">Frink Units&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://lcamtuf.coredump.cx/electronics/">Intro to Electronics&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://html-first.com/">HTML First&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://grugbrain.dev/">grug brained dev&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=pW-SOdj4Kkk">https://www.youtube.com/watch?v=pW-SOdj4Kkk&lt;/a> and the response &lt;a href="https://datagubbe.se/endofciv/">https://datagubbe.se/endofciv/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://amontalenti.com/2020/11/28/definitive-reading-list">https://amontalenti.com/2020/11/28/definitive-reading-list&lt;/a> &lt;span class="marginnote">I hope these overlong lists may one day be the same&lt;/span>&lt;/li>
&lt;li>&lt;a href="https://aosabook.org/en/">Architecture of Open Source Applications&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="fun-data-sources">Fun Data Sources&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://www.eia.gov/opendata/">https://www.eia.gov/opendata/&lt;/a> - U.S. Energy Information Administration&amp;rsquo;s API&lt;/li>
&lt;/ul></content:encoded></item><item><title>Sectors and Economic Structure</title><link>https://alexalejandre.com/finance/sector-breadth/</link><pubDate>Mon, 15 Jan 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/finance/sector-breadth/</guid><description>tl;dr: I struggle to find a golden thread between measuring national priorities and finding profitable insights.</description><content:encoded>&lt;p>Louis-Vincent Gave &lt;a href="https://castbox.fm/episode/Louis-Vincent-Gave%3A-Understanding-China%E2%80%99s-Economy%2C-and-U.S.-Competition-%E2%80%94-50-id4764847-id656423105">called&lt;/a> Hong Kong a &amp;ldquo;Tax Paradise&amp;rdquo; &lt;span class="marginnote">Timestamp at 20:45&lt;/span> because with a blanket 16% rate, corporate and private, there&amp;rsquo;s no need to optimize structures. Bill Gates roommate in Harvard, Andy Braiterman, intimidated Gates away from math into CS. What became of him? &lt;a href="https://news.harvard.edu/gazette/story/2013/09/dawn-of-a-revolution/">Tax Attorney&lt;/a>! The convoluted US tax system (17,000 pages) has bred a large cottage industry (6th largest employer in aggregate) of professionals catering to optimizations other systems don&amp;rsquo;t need. &lt;span class="marginnote">Their economies have better primitives, abstracting away complexity.&lt;/span> (On the other hand, a &lt;a href="https://alexalejandre.com/finance/narcostates/">large cottage industry&lt;/a> of professionals increases &lt;a href="https://atlas.cid.harvard.edu/">economic complexity&lt;/a>. Is this tradeoff (burden on other enterprises) accretive to growth? I think no.) Our system misallocates its best human capital in tax and finance.&lt;/p>
&lt;p>What can we do with this?&lt;/p>
&lt;h3 id="industry-classification-systems">Industry Classification Systems&lt;/h3>
&lt;p>Once upon a time three sector models &lt;span class="marginnote">primary: raw materials&lt;/span>&lt;span class="marginnote">secondary: manufacturing&lt;/span>&lt;span class="marginnote">tertiary: services&lt;/span> &lt;span class="marginnote">quarternary: R&amp;amp;D, knowledge&lt;/span> &lt;span class="marginnote">quinary: lol&lt;/span> were enough, nowadays unifying the myriad taxonomies in use is impossible. These are the most relevant today:&lt;/p>
&lt;ul>
&lt;li>
&lt;details id="market-based">
&lt;summary>Market Based&lt;/summary>
&lt;ul>
&lt;li>GISC Global Industry Classification Standard
&lt;ul>
&lt;li>11 sectors&lt;/li>
&lt;li>25 industry groups&lt;/li>
&lt;li>74 industries&lt;/li>
&lt;li>163 subindustries&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ICB - Industry Classification Benchmark
&lt;ul>
&lt;li>11 industries&lt;/li>
&lt;li>20 supersectors&lt;/li>
&lt;li>45 sectors&lt;/li>
&lt;li>173 subsectors&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>HSICS - Hang Seng Industry Classification System
&lt;ul>
&lt;li>12 industries&lt;/li>
&lt;li>31 sectors&lt;/li>
&lt;li>102 subsectors&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>TRBC - Reuters&amp;rsquo; used in the Refinitiv Indices
&lt;ul>
&lt;li>13 sectors&lt;/li>
&lt;li>33 business sectors&lt;/li>
&lt;li>62 industry groups&lt;/li>
&lt;li>154 industries&lt;/li>
&lt;li>898 activities&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>MGECS - Morningstar Global Equity Classification Structure
&lt;ul>
&lt;li>3 super sectors (cyclical, defensive, sensitive)&lt;/li>
&lt;li>11 sectors&lt;/li>
&lt;li>55 industry groups&lt;/li>
&lt;li>145 industries&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="establishment-based">
&lt;summary>Establishment based&lt;/summary>
&lt;ul>
&lt;li>NAICS - North American Industry Classification System
&lt;ul>
&lt;li>Here each establishment is no larger than a single physical location though different administrative groups in the same location can be separate establishments. The decision is made on its largest output.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>SIC - Standard Industrial Classification
&lt;ul>
&lt;li>Here an establishment is a US headquartered business, based on its largest product lines&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>NACE&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;/ul>
&lt;p>The difficulties of wrangling with their inconsistent mappings &lt;span class="marginnote">This kills naive factor models.&lt;/span> distract us from more important comparative questions. (Although I&amp;rsquo;ll use index weightings like everyone else, there are many problems from mislabelling (CLF has been mislabelled an iron miner for years, stuck in mining ETFs etc.) and poor mapping and I personally hand label everything I analyze (which lead to my own problems, thankfully uncorrelated!)) They are inconsistent because they don&amp;rsquo;t take the ecosystem into account, what role companies play in the economy or in other industries.&lt;/p>
&lt;h3 id="what-role-do-these-sectors-play">What Role do these Sectors Play?&lt;/h3>
&lt;p>In the US, healthcare makes up &lt;a href="https://www.brookings.edu/articles/a-dozen-facts-about-the-economics-of-the-u-s-health-care-system/">~20%&lt;/a> of the US economy, compared to 5% in 1960. In China, &lt;a href="https://eurohealthobservatory.who.int/docs/librariesprovider3/country-health-profiles/chp2023pdf/chp-france2023.pdf?sfvrsn=a15a53aa_3&amp;amp;download=true">France&lt;/a>, the &lt;a href="https://www.ons.gov.uk/peoplepopulationandcommunity/healthandsocialcare/healthcaresystem/bulletins/healthcareexpenditureukhealthaccountsprovisionalestimates/2022">UK&lt;/a> etc. most healthcare is paid through the government and taxes (and &lt;a href="https://ec.europa.eu/eurostat/statistics-explained/index.php?title=Healthcare_expenditure_statistics">at lower GDP&lt;/a>) with much less activity in privately traded companies.&lt;/p>
&lt;p>The Chinese government reports GDP differently, not including state-provided services (healthcare, (non-cram) education). Charles Gave &lt;span class="marginnote">Louis-Vincent&amp;rsquo;s father&lt;/span> once called GDP &lt;a href="https://research.gavekal.com/article/gdp-concept-misleading-if-not-outright-criminal/">&amp;ldquo;misleading if not outright criminal&amp;rdquo;&lt;/a> for measuring private and public sector contributions equally although they&amp;rsquo;re judged by different theories of value (marginal vs. labor/cost theories of value). When university costs the German government &lt;a href="https://www.thelocal.de/20160916/per-student-spending-in-germany-drops-drastically-oecd">$9000&lt;/a> instead of an American consumer $40,000&amp;hellip;&lt;/p>
&lt;p>We have 3 possibilities which ruin econometric research:&lt;/p>
&lt;ul>
&lt;li>healthcare in GDP and equities market (US) &lt;span class="marginnote">It&amp;rsquo;s in all equities markets, but see below.&lt;/span>&lt;/li>
&lt;li>healthcare in GDP (EU)&lt;/li>
&lt;li>healthcare not shown (China)&lt;/li>
&lt;/ul>
&lt;p>We can find many cases where GDP lowers while people&amp;rsquo;s wealth or well-being grows. Lowering the cost of health inputs (through large single payers, be it Singapore or UK style) materially lowers GDP while helping individuals and the overall economy as they can consume more total goods and services. France and Spain have recently grown their GDP through public debt-fueled spending (even debt servicing adds to GDP!)&lt;/p>
&lt;p>&lt;a href="https://www.msci.com/research-and-insights/insights-gallery/sector-performance-and-concentration#sector-performance-and-concentration">Back to weightings&lt;/a>, we see MSCI Europe&amp;rsquo;s energy peak at 11.5 in 2002, shrinking to 5% in 2001. Financials went from 25% to 15%, Utilities from 12% to 3% in the same time frame. MSCI USA has energy peak in 2007 at 12%, crashing to 2% in 2001, which is closer to MSCI World. But if that&amp;rsquo;s so easy, why did I wax wordy?&lt;/p>
&lt;p>MSCI Europe has a (slightly) higher healthcare weight (15%) than MSCI USA. Analyzed more specifically, the composition is very different (Pharmaceuticals, Equipment etc.) but more importantly: world tech monopolies based in the US shrink other industries&amp;rsquo; proportion/weighting dramatically. Why is it that healthcare makes up 20% of GDP and tech only 10%, yet healthcare is half tech&amp;rsquo;s size on the stock market, yet tech profits are more than double healthcare&amp;rsquo;s? Because it&amp;rsquo;s a poor measurement on both sides. Healthcare does not include health insurance, which is in &amp;ldquo;financials&amp;rdquo;.&lt;/p>
&lt;p>With perfect data, we could investigate whether reducing total spending on necessities (health, education, food) results in growth and well being, how it differs in kind etc. but confined to our worldly data the typical analysis constrains itself to cost theory of value although with health specifically there are (politically motivated) indices of outcomes.&lt;/p>
&lt;p>We know multiples differ by industry and country. We often misappreciate precisely what this means and how the differences multiply. I will start with misleading data: EV/EBITDA &lt;span class="marginnote">I don&amp;rsquo;t like EBITDA, but easy data.&lt;/span> in the US: 3 for coal, 20 for med tech or diversified REITs vs. 3.5 and 22 &lt;a href="https://www.kroll.com/en/insights/publications/valuation/industry-multiples-in-europe-q4-2022">in Europe&lt;/a>. Why is this misleading? Because market wide EV/EBITDA in the US is 14.3 vs. 8.2 in Europe (personal data with sample bias of what interests me. This &lt;a href="https://madealplatform.com/news-and-blog/exploring-european-buyout-multiples">source disagrees&lt;/a> with my personal data, showing recent divergence of 15.4 US to 11.2 EU but overall similarity.) A dollar of profit for a European energy company translates to a higher valuation than for an American one (surprising given the poor regulatory environment with &lt;a href="https://www.theguardian.com/world/2023/nov/20/eu-germany-and-denmark-sued-by-oil-firm-over-windfall-tax">windfall taxes&lt;/a> and courts ordered &lt;a href="https://www.aa.com.tr/en/energy/news-from-companies/shell-plans-to-appeal-court-ruling-questioning-its-carbon-emission-goals/32792">decarbonization&lt;/a>) but an American tech dollar in profit increases valuations way higher than a Euro in a consumer defensive. Such distortions lead to beautiful value plays (but also result in structural value traps.)&lt;/p>
&lt;hr>
&lt;p>P.S. Local investor habits and tradition play similar roles:&lt;/p>
&lt;p>In China, real estate is the primary investment instrument, resulting in cheaper stocks (ADRs have further issues due to political fears.)&lt;/p>
&lt;p>In Germany, investors focus on ETFs (A2PKXG is the current &amp;ldquo;holy grail&amp;rdquo; replacing A1JX52.) (Generally Germans are unsophisticated investors, many just use a Sparbuch or follow bank advisors&amp;rsquo; advice to buy products.)&lt;/p>
&lt;p>India and the Middle East love gold!&lt;/p>
&lt;p>Brazil offers fascinating fixed income options (resulting in Yen carry trade) and literal free money.&lt;/p>
&lt;p>Please send me further examples!&lt;/p></content:encoded></item><item><title>Energy Fueled Dreams</title><link>https://alexalejandre.com/finance/more-energy-pls/</link><pubDate>Sat, 13 Jan 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/finance/more-energy-pls/</guid><description>What utopias await us with more energy?</description><content:encoded>&lt;p>J. Storrs Hall in &amp;ldquo;Where Is My Flying Car? A Memoir of Future Past&amp;rdquo; ascribes Western stagnation in innovation and productivity to the high cost of energy. The Henry Adams Curve shows exponential growth in energy production and consumption at an average rate of about 7% per year from the early 19th century until the 1960s.&lt;/p>
&lt;p>Now, Energy has gotten massively cheaper as a percentage of GDP since the 1960s, but we in developped countries aren&amp;rsquo;t using more of it. &lt;span class="marginnote">We have stayed at 80MWh/cap since 1965&lt;/span> Apparently the energy demand is very inelastic. This violates the Jevons paradox?&lt;/p>
&lt;p>(It works out differently when we factor in the cost in energy to produce energy: EROI. But that&amp;rsquo;s a deep and depressing rabbit hole. &lt;span class="marginnote">Politicized, hard to get trustworthy numbers.&lt;/span>&lt;span class="marginnote">EROI of 20:1 to maintain civilization&lt;/span>
)&lt;/p>
&lt;ul>
&lt;li>desalinate: We could stop draining natural aquifers. N.b. aquifer depletion causes localized climate change and sea level rise. In the San Joaquin Valley you see 10m land subsidence&lt;/li>
&lt;li>decarbonize: just suck in air, scrape and &lt;a href="https://stripe.com/climate">store c02&lt;/a>&lt;/li>
&lt;/ul>
&lt;!-- (CO2 is constantly being mineralized. It is a natural process. Principally, calcium and magnesium can react with CO2 to form calcium carbonate and magnesium carbonate.
Basalt is well established in this. Iceland has some extensive testing at their geothermal plants. But their basalt is highly reactive. Similar stuff is done with peridotites. But as you might imagine, capturing CO2, drilling super deep holes, injecting the CO2, and capping it to ensure it all stays put until mineralized (a few years) is quite the task.
Much more interesting to me is work being done to use dissolved calcium in the ocean. Or, crushing up basalt and putting it in soil, letting the dissolved CO2 in rainwater do the work.)
- Every bit of land on earth becomes arable for any plant with greenhouse skyscrapers, heating, cooling, ventilation, desalination, and irrigation, cheap global shipping (and freezing) and mechanical automation. With plant calories practically unlimited and free, raising livestock would become just as cheap, dairy, eggs, and meat all negligible cost -->
&lt;p>&lt;a href="https://ideas.repec.org/a/eee/ecolec/v157y2019icp40-46.html">Steve Keen, Robert U. Ayres, Russell Standish in &amp;ldquo;A Note on the Role of Energy in Production&amp;rdquo;:&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Energy plays no role in the standard Cobb-Douglas Production Function (CDPF), and a trivial role in a three-factor CDPF where it is treated as a third input, independent of labour and capital. Starting from an epistemological perspective, we treat energy as an input to both labour and capital, without which production is impossible. We then derive an energy-based CPDF (EBCDPF) in which energy plays a critical role. We argue for the redefinition and measurement of real GDP in terms of exergy. We conclude that the “Solow Residual” measures the contribution of exergy to growth, and that the exponents in the EBCDPF should be based on cross-country comparative data as suggested by Mankiw (1995) rather than the “cost-share theorem”.&lt;/p>&lt;/blockquote>
&lt;p>N.b. due to conversion limitations especially with Carnot engines, the typical efficiency for transforming thermal energy into mechanical energy is ~30%. Although certain applications like dual cycle steam turbines combined with the utilization of residual thermal heat in cogeneration plants, can achieve higher efficiencies, large scale modeling relies on the 30% benchmark which we see in e.g. Lawrence Livermore Labs&amp;rsquo; energy-flow Sankey charts, wheich assume 30% efficiency without explicit measurement.&lt;/p>
&lt;blockquote>
&lt;p>End-use efficiency is estimated at 65% for the residential sector, 65% for the commercial sector, 21% for the transportation sector, and 49% for the industrial sector, which was updated in 2017 to reflect DOE&amp;rsquo;s analysis of manufacturing.
&lt;a href="https://understand-energy.stanford.edu/current-energy-landscape">https://understand-energy.stanford.edu/current-energy-landscape&lt;/a>&lt;/p>&lt;/blockquote></content:encoded></item><item><title>REVIEW: The Education of Cyrus, by Xenophon</title><link>https://alexalejandre.com/other/cyrus-education/</link><pubDate>Mon, 08 Jan 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/other/cyrus-education/</guid><description>Xenophon teaches us leadership.</description><content:encoded>&lt;p>This review imports the inate sense of leadership, power and education to us better than anything else. Published &lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by">here&lt;/a>, I rehost out of deep love for wisdom, lest it be lost to the vagaries of time.&lt;/p>
&lt;hr>
&lt;blockquote>
&lt;p>It is easier, given his nature, for a human being to rule all the other kinds of animals than to rule human beings. But when we reflected that there was Cyrus, a Persian, who acquired very many people, very many cities, and very many nations, all obedient to himself, we were thus compelled to change our mind to the view that ruling human beings does not belong among those tasks that are impossible… We know that Cyrus, at any rate, was willingly obeyed by some, even though they were distant from him by a journey of many days; by others, distant by a journey even of months; by others, who had never yet seen him; and by others, who knew quite well that they would never see him. Nevertheless, they were willing to submit to him.&lt;/p>&lt;/blockquote>
&lt;p>I am not well-read in the classics. My excuse ultimately boils down to the same argument that all the classicists give for why you &lt;em>should&lt;/em> be well-read in the classics: reading a book that has been widely admired for a very long time isn’t just reading a book, it’s entering into a “great conversation” taking place across the aeons. I feel awkward reading a book like that without knowing something about the commentaries on the book, all the people it has influenced, all the people who influenced it, the commentaries on the commentaries, and so on. It’s exhausting and overwhelming, and when I ignore all that and plunge ahead, I often don’t enjoy the book and then I feel dumb. A “great conversation” sounds nice, but only if you’re one of the participants and you actually get the inside jokes and references. Otherwise it’s as alienating and isolating as showing up to a party where you don’t know anybody, and where everybody else has already been chatting for a few thousand years.&lt;/p>
&lt;p>I don’t remember who recommended Xenophon’s &lt;em>Cyropaedia&lt;/em> to me or how it wound up on my reading list, but when it finally made its way to the top of my stack, I saw it and shuddered. How could I possibly appreciate this semi-fictionalized biography of the founder of the Persian Empire without first being familiar with Xenophon’s &lt;a href="https://en.wikipedia.org/wiki/Anabasis_(Xenophon)">work as a mercenary&lt;/a> for one of Cyrus the Great’s distant descendants? Or with all the ways he was riffing on and responding to the political philosophy of his frenemy Socrates? Or with the complicated politics of the Peloponnesian War, and the way that Xenophon, an Athenian exile and the original Sparta-boo, was actually writing PR for &lt;a href="https://en.wikipedia.org/wiki/Agesilaus_II">King Agesilaus II&lt;/a>, but concealing it within a story about the exotic Persians?&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-1-140066503">1&lt;/a> Or with how this book led to the creation of an entire &lt;a href="https://en.wikipedia.org/wiki/Mirrors_for_princes">major genre of books&lt;/a> in the Middle Ages? Or with the most famous and subversive instance of that genre, Machiavelli’s &lt;em>The Prince&lt;/em>, and with all the hundreds of subsequent works reacting and responding to that one?&lt;/p>
&lt;p>You see the problem? One could very easily conclude that it would be impossible for me to appreciate this book. Fortunately, I ignored all that and read it anyway. No doubt I missed all kinds of subtle layers of meaning and nuance, but even read on a totally superficial level by an ignoramus, this book rocks.&lt;/p>
&lt;p>The title has the word ‘education’ in it, but the book covers Cyrus’s entire life and reign, and only the first section concerns his education in the literal sense. That first section is very important to what comes next, though, so I’m going to dwell on it a bit. Cyrus, along with the other Persian boys of his social class, is being trained to lead. And so their education is centered around having lots of opportunities to judge, instruct, and coerce others; but also opportunities to serve and obey. If you’re old enough, you might remember when the education of the American leadership class worked this way too, but even those of you who are younger have seen vestiges of it in the bizarrely disproportionate weight given to extracurriculars in US college admissions.&lt;/p>
&lt;p>Have you ever wondered about the origins of this? Bear with me for a minute. There’s a saying in the Psmith household, lifted from an &lt;a href="https://www.amazon.com/Noble-House-Season-1/dp/B00P7PA31E">NBC miniseries based on a James Clavell novel&lt;/a>: “some things can only be done Tai-Pan to Tai-Pan.” (‘Tai-Pan’ is early-20th century Cantonese slang for the big boss of a mercantile concern.) There’s a fallacy often made by people not in the business world, where they assume that because the owner of a small company and a middle manager in a large one might command a similar number of people, that they therefore have anything at all in common. Nothing could be further from the truth. Generally speaking these two people could not be more different in their temperaments, worldviews, or values. In fact, the owner of a 10,000-person company has more in common with the owner of a 10-person company than he does with the vice president of a 100,000-person company with 10,000 people under him. The two owners are operating at vastly different scales, but both have experienced the &lt;a href="https://www.thepsmiths.com/p/review-the-cruise-of-the-nona-by">dreadful weight of their own agency&lt;/a>, both have felt the horror of having men under their command without the compensating balance of a superior capable of judging and correcting their actions. And by virtue of these facts and others like them, both are members of a select brotherhood that the middle-manager will never enter, no matter how exalted his title or how genuinely impressive his real-world power. There’s a level on which everybody still quietly knows this. It’s far easier for the founder of a tiny startup to get an audience with Elon Musk than for a senior vice president at Microsoft or Google to do the same. It’s just the &lt;a href="https://www.thepsmiths.com/p/joint-review-who-we-are-and-how-we">Way of the World (TM)&lt;/a>.&lt;/p>
&lt;p>None of this is unique to business, businesses are just the most common examples of monarchical organizations these days. It’s also true of armies and of &lt;a href="https://www.thepsmiths.com/p/review-miti-and-the-japanese-miracle">bureaucracies&lt;/a>, of churches and of whole nations. To lead is an experience like none other, and if you are being groomed to be the Tai-Pan of something great, the only way to get good at it is to practice at being Tai-Pan of something very small. This is not how our society thinks these days, but it’s how it &lt;em>used&lt;/em> to think, and so this is the reason that Harvard has a vestigial interest in your presidency of the Lower Oswego Latinx Chess Confederacy. It was once assumed that having gravely assumed the mantle of the L.O.L.C.C. presidency you had been habituated into command, into rule, into the practice of adjudicating disputes amongst your inferiors, of rewarding the loyal, of forging alliances with other tiny Tai-Pans. Remember that time you struck a deal with the Greater Mackinac Asian Slam Poetry Brigade to beat up the Tarrytown BIPOC-Wargarmer Alliance before recess? The &lt;strong>System&lt;/strong> knew that those were the experiences out of which leaders were forged, and so this whole section of the Common Application flops around, appendix-like, or like how our post-apocalyptic descendants will ritually polish black stones with their thumbs.&lt;/p>
&lt;p>Anyway, young Cyrus is from a culture that gets this, so he and his classmates spend practically every waking moment being little Tai-Pans. They study in classrooms, receive military training,&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-2-140066503">2&lt;/a> and shadow the magistrates in their official duties; but all of these official lessons are just the backdrop against which the &lt;em>real&lt;/em> lessons are taking place. The boys have missions to accomplish, missions which they cannot possibly accomplish individually. So they have to learn to put together a team, to apportion responsibilities, and to judge merit in the aftermath. Anytime one of the boys commits an infraction,&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-3-140066503">3&lt;/a> the adults ensure that he is judged by the others. All of this is carefully monitored, and boys who show partiality or favoritism, or who simply judge poorly, are savagely punished.&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-4-140066503">4&lt;/a>&lt;/p>
&lt;p>The most common sort of mission is a hunt, the boys are constantly going on hunts, because: “it seems to them that hunting is the truest of the exercises that pertain to war.” This is obvious at the level of basic physical skills: while hunting they run, they ride, they follow tracks, they shoot, and they stab. But the military lessons imparted by hunting are not just physical, they’re also mental. They learn to “deceive wild boars with nets and trenches, and… deer with traps and snares.” To battle a lion, a bear, or a leopard on an equal footing would be suicide, and so by necessity the boys learn to surprise them, or exhaust them, or to terrify them with psychological warfare, doing everything in their power to find an unfair advantage or to create one from circumstances.&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-5-140066503">5&lt;/a> As Cyrus’s father tells him years later: “We educated you to deceive and take advantage not among human beings but with wild animals, so that you not harm your friends in these matters either; yet, if ever a war should arise, so that you might not be unpracticed in them.”&lt;/p>
&lt;p>There’s another reason that the boys constantly hunt wild animals, which is that it habituates them to hunger, sleep-deprivation, and extremes of heat and cold. When they depart on a hunt the boys are deliberately given too little food, and what they have is simple and bland (though that’s hardly an issue for those who “regularly use hunger as others use sauce”). Some of this is ascesis in the original Ancient Greek meaning of the word (ἄσκησις - “training”); by getting used to being tired and hungry and cold under controlled circumstances, they will be better at shrugging off these disadvantages when the stakes are higher.&lt;/p>
&lt;p>But the real core of it lies in the phrase: “He did not think it was fitting for anyone to rule who was not better than his subjects.” Later, when they’ve reached manhood, the boys will oftentimes be called upon to share physical hardship with those they have been set over, and in that moment it is vital to this social order that they not be soft. “We must of necessity share with our slaves heat and cold, food and drink, and labor and sleep. In this sharing, however, we need first to try to appear better than they in regard to such.” Better in the sense of physically tougher, but also better in the sense of having achieved the absolute mastery of the will over any and all desires.&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-6-140066503">6&lt;/a>&lt;/p>
&lt;p>Constant exposure to deprivation and hardship isn’t just supposed to improve their endurance, it’s also supposed to make them better at sneering at comforts.&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-7-140066503">7&lt;/a> This is a society which believes that men are more easily destroyed by luxury than by hardship, and that it’s especially important that the leaders be seen to scorn luxury, for “whenever people see that he is moderate for whom it is especially possible to be insolent, then the weaker are more unwilling to do anything insolent in the open.”&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-8-140066503">8&lt;/a> What I love about Xenophon is that unlike many Greek authors, who would deliver that line completely straight, he instead subverts (or at least balances) it with the observation that any kind of suffering is easier to bear when you’re in charge, and &lt;em>even&lt;/em> easier when you’re bearing it in order to be seen to be bearing it.&lt;/p>
&lt;p>This, then, is the education common to all the aristocrats of Persia, but even within this rarefied group, Cyrus is special. He is the son of the king, and the grandson of a neighboring king, and so naturally he receives every sort of favoritism. Fortunately, politics comes naturally to young Cyrus: when he is given extra food, he divides it up and gives it to his friends and his slaves. When he is on a hunt with others, he cheers on his peers, and takes care to recount each of their most impressive acts to the adults upon their return.&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-9-140066503">9&lt;/a> He feels absolutely entitled to rule, but he also recognizes that to be a ruler is to be an artist or a craftsman whose tools are human beings.&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-10-140066503">10&lt;/a>&lt;/p>
&lt;p>Of all Cyrus’s many qualities: willpower, strength, charisma, glibness, intelligence, handsomeness; Xenophon makes a point of emphasizing one in particular, and his choice might strike some readers as strange. It is this: “He did not run from being defeated into the refuge of not doing that in which he had been defeated.” Cyrus learned to love the feeling of failure, because failure means you’re facing a worthy challenge, failure means you haven’t set your sights too low, failure means you’ve encountered a stone hard enough to sharpen your own edge. Yes, it’s the exact opposite of the &lt;a href="https://www.thepsmiths.com/p/review-galois-theory-by-david-cox">curse of the child prodigy&lt;/a>, and it’s the key to Cyrus’s success. He doesn’t flee failure, he seeks it out, hungers for it, rushes towards it again and again, becoming a little scarier every time. He’s found a cognitive meta-tool, one of those secrets of the universe which, if you can actually internalize them, make you better at everything. Failure feels &lt;em>good&lt;/em> to him rather than bad, is it any surprise he goes on to conquer the world?&lt;/p>
&lt;p>And then…the most important single moment in Cyrus’s education, the moment when it becomes clear that he has &lt;em>actually&lt;/em> set his sights appropriately high. &lt;em>He gets bored of the hunts.&lt;/em> Cyrus deduces, correctly, that the hunts he is sent on, and all the other little missions, are contrived. Each is a problem designed to impart a lesson, a little puzzle box constructed by a demiurge with a solution in mind. In this respect, they’re like the problems in your math textbook. And like the problems in your math textbook, getting good at them is very dangerous, because it can mislead and delude you into thinking that you’ve gotten good at math, when actually you’ve gotten good at the sorts of problems that people put in textbooks.&lt;/p>
&lt;p>When you’re taught from textbooks, you quickly learn a set of false lessons that are very useful for completing homework assignments but very bad in the real world. For example: all problems in textbooks are solvable, all problems in textbooks are worth solving (if you care about your grade), all problems in textbooks are solvable by yourself, and all of the problems are solvable using the techniques in the chapter you just read. But in the real world, the most important skills are not solving a quadratic by completing the square or whatever, the most important skills are: recognizing whether it’s possible to solve a given problem, recognizing whether solving it is worthwhile, figuring out who can help you with the task, and figuring out which tools can be brought to bear on it. The all-important meta-skills are not only left undeveloped by textbook problems, they’re actively sabotaged and undermined. This is why so many people who got straight As in school never amount to anything.&lt;/p>
&lt;p>The section covering his childhood and education concludes with a dialogue between Cyrus and his father Cambyses as the two ride together towards the border of Persia. Cambyses recapitulates and summarizes all of the lessons that Cyrus has been taught, and adds one extra super-secret leadership tip. Cyrus wants to know how to attract followers and keep their loyalty, and his father gives him a very good answer which is: just be great. Be the best at what you do. Be phenomenally effective at everything. People aren’t stupid, they want to follow a winner, so be the kind of guy who’s going to win over and over again, and if you aren’t that guy, then maybe choose a different career.&lt;/p>
&lt;p>Cyrus asks and so Cambyses clarifies: no, he doesn’t mean be great at making speeches, or at crafting an image, or at &lt;em>appearing&lt;/em> to be very good at things. He doesn’t mean attending “leadership seminars”, or getting an MBA, or joining a networking organization for “young leaders.” He means getting extremely good at the actual, workaday, object-level tasks of your trade: “There is no shorter road, son…to seeming to be prudent about such things…than becoming prudent about them.” In Cyrus’s case, this means tactics, logistics, personnel selection, drill, all the unglamorous parts of running an ancient army. People aren’t stupid. If they see that he is great at these things, they will flock to his banner. And then, one more ingredient, the final step: make it clear that you care about their welfare. “The road to it is the same as that one should take if he desires to be loved by his friends, for I think one must be evident doing good for them.”&lt;/p>
&lt;p>There you have it. Two simple #lifehacks to winning undying loyalty: be the best in the world at what you do, and actually give a damn about the people under you. &lt;a href="https://www.thepsmiths.com/p/review-scaling-people-by-claire-hughes">Our rulers could learn a thing or two from this book&lt;/a>. So ends the education.&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-11-140066503">11&lt;/a> The rest of this book, and the bulk of it, is Cyrus putting these lessons into practice by very rapidly conquering all of the Ancient Near East. It’s telegraphed well in advance that the final boss of this conquest will be the mighty Neo-Babylonian empire founded by Nebuchadnezzar,&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-12-140066503">12&lt;/a> but before he takes them on Cyrus first has to grind levels by putting down an incipient rebellion by his grandfather’s Armenian vassals,&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-13-140066503">13&lt;/a> then whipping the neighboring Chaldeans into line, then peeling away the allegiance of various Assyrian nobles, then defeating the Babylonians’ Greek allies and Egyptian mercenaries, before finally taking on the Great King in his Great City.&lt;/p>
&lt;p>What I find unutterably charming about this section of the book is that the way Xenophon tracks Cyrus’s growing power level, the way he keeps score through all these conquests, is by the number of friends and lieutenants he picks up along the way.&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-14-140066503">14&lt;/a> In this it resembles the classic Chinese novel &lt;em>&lt;a href="https://en.wikipedia.org/wiki/Water_Margin">Water Margin&lt;/a>&lt;/em>, or perhaps a certain sort of JRPG, where filling out the sprawling ensemble cast &lt;em>is&lt;/em> the benchmark of progress, and the climactic showdown can only occur when the final henchman has been recruited to the hero’s party. In this it’s a little different from the classic Western forms of the &lt;a href="https://en.wikipedia.org/wiki/Hero%27s_journey">hero’s journey&lt;/a>, where allies may be recruited, but the main event is the maturation or reintegration of the hero himself.&lt;/p>
&lt;p>Everywhere Cyrus goes, people are attracted to him: whether childhood friends now in possession of an independent power base, petty chieftains of independent nations, or even defeated enemies. They’re attracted to him because he’s obviously great, and he promptly turns around and showers them in love, riches, honors, and most important of all, his trust. At one point somebody criticizes Cyrus for this generosity and profligacy, pointing out that he has an army to feed and a war to win. Cyrus asks how much money might sit in his treasuries if he’d kept all the loot to himself, and the critic names some impossibly vast sum. Cyrus then smiles, and writes to all of his friends, asking them to send what money they can right away, as he’s fallen on hard times. The replies come back immediately, with many times more gold than the amount named, along with letters asking if he needs any more. Then he turns back to his foolish advisor: “You say I have no treasuries, but I make my friends wealthy, and my friends are my treasuries.”&lt;/p>
&lt;p>So, this is a book about an education, what lessons can we take from it? What about lessons for those of us who have conquered Asia several times in &lt;em>Europa Universalis IV&lt;/em> as practice for the real event? Here the book offers a mixed message. Cyrus is clearly made more effective by his training, his advisors, his meta-skills, and his friends; all things that any sufficiently motivated would-be conqueror could, in principle, acquire. But he is equally clearly the Child of Destiny: born with exceptional natural gifts and with a social position that offers him immense leverage. Everybody wants to be his friend because, as his father puts it, they are prudent men. They can see that he is going places, and that being the friend of Cyrus will bring them advantages. Part of that is his education and actions, yes, but part of it is his beauty, intelligence, physical strength, and royal lineage. Even his enemies recognize it, and it is one of these defeated enemies whose words might hold the key takeaway of this book:&lt;/p>
&lt;blockquote>
&lt;p>“I asked the god what I could do to live out the rest of my life in the happiest way. And he answered me, ‘Knowing yourself, Croesus, you will pass through it happily.’ I was pleased on hearing the oracle, for I believed that he was granting me happiness, having assigned me the easiest thing. […] I believed that every human being knows himself, who he is. […] But when I was persuaded by the Assyrian king to campaign against you, I entered upon every risk. I got off safely, however, and sustained nothing evil…for when I came to know myself not to be competent to do battle with you, I went away safely. […] Then again recently…when all the kings around chose me to be their leader in the war, I undertook the generalship as if I were competent to become greatest, not knowing myself, as we now see, because I thought I was competent to make war against you. […] So not having known these things, I am justly punished. But now, Cyrus, I know myself. But does it seem to you that Apollo’s word will still be true, that knowing myself I will be happy? […]”&lt;/p>
&lt;p>And Cyrus said, “Allow me to deliberate about this, Croesus. When I consider your previous happiness, I pity you and I grant already that you may have again the wife you had, as well as the daughters, the friends, the servants, and meals with which you used to live. But battles and wars I forbid to you.”&lt;/p>
&lt;p>“By Zeus,” said Croesus, “then deliberate no longer to answer about my happiness. I will tell you that if you do for me what you say, I now have and shall lead the very life that others have believed to be most blessedly happy, and on which I agreed with them.”&lt;/p>
&lt;p>And Cyrus said, “Who is it that has this blessedly happy life?”&lt;/p>
&lt;p>“My wife, Cyrus,” he said. “She shared equally in all of my good, refined, and delightful things, but of my cares about how to secure these things, and of war and battle, she did not partake. You seem to be putting me in just the same condition in which I put her whom I loved more than any other human being. Consequently, I think I shall owe other tokens of gratitude to Apollo.”&lt;/p>&lt;/blockquote>
&lt;p>“Know thyself,” the injunction of the Delphic oracle, is practically a cliché these days. But it was Xenophon who finally made me realize what it meant. It isn’t a romantic suggestion that you plumb the depths of your artistic soul like a Faustian hero, or engage in &lt;a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8270443/">“me-search”&lt;/a>, or spend infinite time in therapy. No, it’s actually pretty much the opposite. The original meaning of “know thyself” is: “figure out whether you are the Child of Destiny, and stop trying to act like one if you aren’t.” This directly contradicts much of our modern programming, and that’s a good thing. Nobody should aspire to be an NPC, but it’s &lt;a href="https://www.thepsmiths.com/p/review-medieval-chinese-warfare-300">okay not to be the main character&lt;/a>. Not everybody can conquer the world. Not everybody can be Cyrus. But Cyrus needs and values his friends.&lt;/p>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-1-140066503">1&lt;/a>&lt;/p>
&lt;p>If you’re an American, then you’re already familiar with this trick. Most of our debates about the virtues and vices of other nations are just thinly-veiled attempts to “own” domestic political opponents.&lt;/p>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-2-140066503">2&lt;/a>&lt;/p>
&lt;p>If you’ve ever been a little boy, or the parent of a little boy, you know how true this is:&lt;/p>
&lt;blockquote>
&lt;p>Now the mode of battle that has been shown to us is one that I see all human beings understand by nature, just as also the various other animals each know a certain mode of battle that they learn not from another but from nature. For example, the ox strikes with his horn, the horse with his hoof, the dog with his mouth, the boar with his tusk… Even when I was a boy, I used to seize a sword wherever I saw one, even though I did not learn how one must take hold of it from anywhere else, as I say, than from nature. I used to do this not because I was taught but even though I was opposed, just as there were also other things I was compelled to do by nature, though I was opposed by both my mother and father. And, yes, by Zeus, I used to strike with the sword everything I was able to without getting caught, for it was not only natural, like walking and running, but it also seemed to me to be pleasant in addition to being natural.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-3-140066503">3&lt;/a>&lt;/p>
&lt;p>Not just explicit violations of the rules though: “they also judge cases of ingratitude, an accusation for which human beings hate each other very much but very rarely adjudicate; and they punish severely whomever they judge not to have repaid a favor he was able to repay.”&lt;/p>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-4-140066503">4&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>In one case, I was beaten because I did not judge correctly. The case was like this: A big boy with a little tunic took off the big tunic of a little boy, and he dressed him in his own tunic, while he himself put on that of the other. Now I, in judging it for them, recognized that it was better for both that each have the fitting tunic. Upon this the teacher beat me, saying that whenever I should be appointed judge of the fitting, I must do as I did; but when one must judge to whom the tunic belongs, then one must examine, he said, what is just possession.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-5-140066503">5&lt;/a>&lt;/p>
&lt;p>Players of old-school tabletop role-playing games might be reminded of the distinction between “&lt;a href="https://web.archive.org/web/20130423034030/http://www.enworld.org/forum/showthread.php?317715-Very-Long-Combat-as-Sport-vs-Combat-as-War-a-Key-Difference-in-D-amp-D-Play-Styles">combat as sport” and “combat as war”&lt;/a> or the parable of &lt;a href="https://media.wizards.com/2014/downloads/dnd/TuckersKobolds.pdf">Tucker’s Kobolds&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-6-140066503">6&lt;/a>&lt;/p>
&lt;p>Years later one of Cyrus’s classmates gives a long speech about how falling in love is optional — a real man can make himself love any woman he chooses, and conversely can restrain himself from loving any woman, no matter how desirable. All poetic references to being made a prisoner by love, or forced by love to do certain things, are excuses made by weaklings who wish to give into their desires. This is a message right in line with the &lt;a href="https://www.thepsmiths.com/p/joint-review-origens-revenge-by-brian">most inhuman aspects of Greek philosophy&lt;/a>, and to his credit Xenophon immediately subverts it by having the guy who delivers it immediately fall madly in love with his beautiful female captive.&lt;/p>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-7-140066503">7&lt;/a>&lt;/p>
&lt;p>One of the highest compliments ever paid to Cyrus is when an older mentor remarks of his posse that:&lt;/p>
&lt;blockquote>
&lt;p>I saw them bearing labors and risks with enthusiasm, but now I see them bearing good things moderately. It seems to me, Cyrus, to be more difficult to find a man who bears good things nobly than one who bears evil things nobly, for the former infuse insolence in the many, but the latter infuse moderation in all.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-8-140066503">8&lt;/a>&lt;/p>
&lt;p>Compare this to the American ruling class, which is also weirdly Spartan in its own way. The wealthiest Americans on average work a crazy number of hours, lead highly regimented lives, and avoid drugs. The difference is that whereas the Persian aristocracy does this as an &lt;em>example&lt;/em> for the lower classes, the American aristocracy actively encourages the lower classes to consume themselves in cheap luxury and sensual dissipation.&lt;/p>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-9-140066503">9&lt;/a>&lt;/p>
&lt;p>The passage that recounts this also has this amazing line: “His readiness with words developed. But just as in the case of the body, the youthfulness of those who grow large while still young nevertheless shines through and betrays their few years.”&lt;/p>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-10-140066503">10&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>They then set off for their tents, and as they were going they remarked to each other with what a good memory Cyrus called them by name as he gave commands to all those he was putting into order. Now Cyrus was careful to do this, for it seemed to him to be amazing if each mere mechanic knows the names of the tools of his art, and a doctor knows the names of all the tools and drugs he uses, but a general should be so foolish as not to know the names of the leaders beneath him, and yet necessity compels him to use them as tools when he wishes to take something, guard something, inspire confidence, or cause fear. And if ever he should wish to honor someone, it seemed to him fitting to call him by name. Those who think they are known by their ruler seemed to him both to have a greater yearning to be seen doing something noble and to be more inclined to refrain from doing anything shameful.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-11-140066503">11&lt;/a>&lt;/p>
&lt;p>There’s actually one other noteworthy bit of advice that Cambyses gives:&lt;/p>
&lt;blockquote>
&lt;p>Above all else, remember for me never to delay providing provisions until need compels you; but when you are especially well off, then contrive before you are at a loss, for you will get more from whomever you ask if you do not seem to be in difficulty… be assured that you will be able to speak more persuasive words at just the moment when you are especially able to show that you are competent to do both good and harm.&lt;/p>&lt;/blockquote>
&lt;p>This is decent enough advice, but what makes it especially fun is that Cambyses also applies it to the gods! Maybe it’s his own pagan spin on “God helps those who help themselves”, but Cyrus takes this advice and takes it a step further. He learns to interpret auguries himself so that he will never be at the mercy of priests. Then when he needs an omen, he performs the sacrifices, decides which of the entrails, the weather, the stars, and so on are pointing his way, loudly points them out, and ignores the rest.&lt;/p>
&lt;p>Henrich notes in &lt;em>&lt;a href="https://www.thepsmiths.com/p/review-the-secret-of-our-success">The Secret of our Success&lt;/a>&lt;/em> that divination can be an &lt;a href="https://scholars-stage.org/tradition-is-smarter-than-you-are/">effective randomization strategy&lt;/a> in certain sorts of game theoretic contests. But the true superpower is deciding on a case-by-case basis whether you’re going to act randomly, or just make everybody think you’re acting randomly.&lt;/p>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-12-140066503">12&lt;/a>&lt;/p>
&lt;p>Yes, &lt;em>&lt;a href="https://quod.lib.umich.edu/cgi/k/kjv/kjv-idx?type=DIV1&amp;amp;byte=3297390">that&lt;/a>&lt;/em> Nebuchadnezzar.&lt;/p>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-13-140066503">13&lt;/a>&lt;/p>
&lt;p>Somewhere in the middle of &lt;em>&lt;a href="https://www.thepsmiths.com/p/review-in-xanadu-by-william-dalrymple">In Xanadu&lt;/a>&lt;/em>, Dalrymple recounts an old Arab proverb that goes: “Trust a snake before a Jew, and a Jew before a Greek. But never trust an Armenian.” The tricksy Armenian ruler more than lives up to this reputation. But when Cyrus outwits and captures him, &lt;a href="https://en.wikipedia.org/wiki/Tigranes_(legendary)">his son&lt;/a> shows up to beg for his life, and what follows is one of the more philosophically charged exchanges in the entire book. They go multiple rounds, but by the end of it the Armenian crown prince has put Cyrus in a logical box as deftly as Socrates ever did to one of his interlocutors, and Cyrus lets the king off with a warning. The prince goes on to combat anti-Armenian stereotypes by serving Cyrus faithfully to the end of his days.&lt;/p>
&lt;p>&lt;a href="https://www.thepsmiths.com/p/review-the-education-of-cyrus-by#footnote-anchor-14-140066503">14&lt;/a>&lt;/p>
&lt;p>As any leader of a rapidly-scaling organization, Cyrus at one point has to switch from directly choosing people to choosing people who are good at choosing people.&lt;/p>
&lt;p>He also understands the importance of getting rid of negative influences. Most people aren’t culture creators, they’ll go with the flow whether that leads towards excellence or towards something very dysfunctional, so weeding out the bad produces a double benefit. Or as Cyrus puts it:&lt;/p>
&lt;blockquote>
&lt;p>Men, friends, know well that expunging the bad offers not only the benefit that the bad will be gone but also that, of those who remain, they who have already been filled with evil will be again cleansed of it, while the good, after seeing the bad dishonored, will cling to virtue with much greater heart.&lt;/p>&lt;/blockquote>
&lt;p>The other eerily-relevant to 21st century office culture thing that Cyrus does is go on a rampage against remote work (seriously). He pioneers a “return-to-palace” policy, and gradually turns up the heat by first bestowing honors and communicating state secrets only to those who put in face time, and then eventually demoting or firing those who haven’t gotten the message. I don’t know how much &lt;a href="https://www.thepsmiths.com/p/review-flying-blind-by-peter-robison">process knowledge&lt;/a> it takes to run the Achaemenid Empire, but I’m sure he had a good reason for it.&lt;/p></content:encoded></item><item><title>Software Architecture Today</title><link>https://alexalejandre.com/programming/software-architecture-today/</link><pubDate>Fri, 05 Jan 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/software-architecture-today/</guid><description>tl;dr: Our architecture (software) is about the boundaries between, not the things themselves.</description><content:encoded>&lt;p>Humor me a digression to mold the cognitive landscape/conceptual space: &lt;span class="marginnote">Seniors may skip this. I just describe engineering and abstraction.&lt;/span>&lt;/p>
&lt;p>Engineering is the &amp;ldquo;&lt;a href="https://en.wiktionary.org/wiki/engineering">application of mathematics and [science] to the needs of humanity&lt;/a>.&amp;rdquo; To this end, a &lt;a href="https://en.wikipedia.org/wiki/WEngineering_design_process">design process&lt;/a> presents iterative steps to aid decision making, where engineering solutions optimize multivariate functions for considerations like cost, ethics, environmental impact etc.&lt;/p>
&lt;p>&lt;em>Software engineering&lt;/em> is the art of &lt;span class="marginnote">&amp;hellip;well, systems engineering offers the real guidelines to tackle a large interconnected system&amp;rsquo;s complexity.&lt;/span> taming complexity, for the sake of maintainability. This emerges from software&amp;rsquo;s very nature: Software is automation, performing discrete concrete actions humans would have in the past. &lt;span class="marginnote">When an AI can replace us, our profession&amp;rsquo;ll have reached apotheosis.&lt;/span>&lt;/p>
&lt;p>Developing software is R&amp;amp;D. &lt;span class="marginnote">Well, it was.&lt;/span> We research the problem space and develop a solution. To &lt;em>engineer&lt;/em> a solution, we efficiently and effectively wield the resources at our disposal. Now, this isn&amp;rsquo;t a jab at &amp;ldquo;developers&amp;rdquo; but a reminder that there&amp;rsquo;s more: &lt;span class="marginnote">Fr. &amp;lsquo;suivi&amp;rsquo; combines &amp;lsquo;follow up&amp;rsquo; and &amp;lsquo;monitoring&amp;rsquo;&lt;/span> development, operation and maintenance. Accounting for the whole lifecycle makes it engineering.&lt;/p>
&lt;p>Maintainability&amp;rsquo;s an eternal struggle, for the problem space constantly evolves, users demand ever more features etc. and the solution must keep step with its dance partner. But the solution space changes too. Remember, our software automates tasks, but many tasks have not been automated. Our coworkers, different departments, vendors etc. do them. The entire business context which led to the solution may change.&lt;/p>
&lt;p>We know Turing complete languages are equivalent, yet it&amp;rsquo;s more impactful to use one with the right primitives and features. Architecture&amp;rsquo;s the same way: proper organization tames the problem space, letting you abstract away accidental complexity, arriving at a simpler, clearer problem, thus a simpler, clearer and more maintainable solution.&lt;/p>
&lt;p>All solutions are alike; every problem is problematic in its own way. We can normalize problems into happy solutions with polynomial time reductions and see they&amp;rsquo;re equivalent, merely different representations like &amp;lsquo;2&amp;rsquo;, &amp;lsquo;2+0&amp;rsquo;, &amp;lsquo;2.0&amp;rsquo; etc. Our problems, organizational (office politics) &lt;span class="marginnote">&amp;hellip;microservices!&lt;/span> and organizational (code layout), often behave the same.&lt;/p>
&lt;p>Culture influences the variables engineers optimize for (implementation speed (up front cost), profitability, maintainability and extendability (long term cost), stability, SLAs, coolness for resume driven development, scalability, usability (UIX, documentation), compatibility, reliability, (legal/industrial) compliance etc.)&lt;/p>
&lt;p>With software we build mosaics out of small stones statements like x = y - 1, if x &amp;lt; y etc. &lt;span class="marginnote">Reduce individual components&amp;rsquo; interconnections, complexity&lt;/span> Combining them, ever bigger pictures form as trees turn into forests. Once we have gotten far enough, &lt;span class="marginnote">Sometimes lossy.&lt;/span> we can abstract away previous complexity, offering a set of larger bricks/structures. To return full circle to Wiktionary, Software architecture is &amp;ldquo;&lt;a href="https://en.wiktionary.org/wiki/software_architecture">The set of structures needed to reason about a given software system&lt;/a>.&amp;rdquo; These pieces and primitives should communicate intent, because maintainable code is communication (ordering information for the audience of future developers.)&lt;/p>
&lt;p>Idioms, patterns, traditions should help new contributors get up to speed, without &lt;span class="marginnote">Microservices &amp;amp; Event Driven fail here, requiring you to find the producer/consumer across the whole codebase&lt;/span> requiring inside, tribal knowledge. (mythical &amp;lsquo;self documenting code&amp;rsquo;)&lt;/p>
&lt;p>Building architects have concepts like kitchen which imply a sink, counters, space for a fridge and stove etc. What do we have?&lt;/p>
&lt;h3 id="event-driven-architecture">Event Driven Architecture&lt;/h3>
&lt;p>Components communicate by sending and receiving events (state changes). There are 3 parts: &lt;span class="marginnote">The names are self explanatory.&lt;/span>&lt;/p>
&lt;ul>
&lt;li>producers&lt;/li>
&lt;li>consumers&lt;/li>
&lt;li>event bus/broker&lt;/li>
&lt;/ul>
&lt;p>Some interesting things:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://martinfowler.com/tags/event%20architectures.html">https://martinfowler.com/tags/event%20architectures.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/caos/zitade">https://github.com/caos/zitade&lt;/a> has each projection in its own SQL table, with the &amp;ldquo;current sequence&amp;rdquo; in yet another table, letting you see whether an event&amp;rsquo;s been processed (with multiple replicas)&lt;/li>
&lt;li>&lt;a href="https://temporal.io/">https://temporal.io/&lt;/a> has a high quality codebase with event sourcing. &amp;ldquo;Workflows as code&amp;rdquo; lets you react to specific input events&lt;/li>
&lt;li>&lt;a href="https://watermill.io/">https://watermill.io/&lt;/a> is Go library for event driven apps&lt;/li>
&lt;li>&lt;a href="https://microservices.io/patterns/data/transactional-outbox.html">https://microservices.io/patterns/data/transactional-outbox.html&lt;/a> is a useful pattern&lt;/li>
&lt;/ul>
&lt;p>The Sega pattern&amp;rsquo;s very similar. &lt;span class="marginnote">similar things were common in finance and aerospace in the 90s&lt;/span> An eventual consistency protocol, with Sega you don&amp;rsquo;t need to coordinate transactions across DBs, but create an ordered set of transactions which can be backed out with compensating transactions if business logic rules are violated, by passing events between entities, converging multiple state machines into a consistent state.&lt;/p>
&lt;p>This doesn&amp;rsquo;t exactly address infrastructure, UI or much of anything though. A given set of discrete components a la &amp;ldquo;Kitchen&amp;rdquo;, &amp;ldquo;Bathroom&amp;rdquo; etc. can be analyzed and arranged with this lense, but they aren&amp;rsquo;t named.&lt;/p>
&lt;h3 id="mvc---model-view-controller">MVC - Model View Controller&lt;/h3>
&lt;p>Fine, in its original domain of software with real time read/write views with the same data (e.g. CAD, Blender). But our domains have changed a lot and it e.g. doesn&amp;rsquo;t fit the web, so I will focus on the extended versions &lt;span class="marginnote">Or distorted, no longer really MCV&lt;/span> actually deployed today. Fundamentally:&lt;/p>
&lt;ul>
&lt;li>M: data, business logic&lt;/li>
&lt;li>V: presentation layer&lt;/li>
&lt;li>C: handle user input, update model&lt;/li>
&lt;/ul>
&lt;p>Because this only considers UI, extensions appear to address infra:&lt;/p>
&lt;p>&lt;a href="https://hexdocs.pm/phoenix/overview.html">Phoenix&lt;/a>&amp;rsquo; MVC is extended so: &lt;span class="marginnote">I&amp;rsquo;ve just dabbed with Elixir so far&lt;/span>&lt;/p>
&lt;ul>
&lt;li>M: schema &amp;amp; context, create a data structure and validations (changeset) then define data transformation and persistence&lt;/li>
&lt;li>V: view &amp;amp; template, parse data and show it in template&lt;/li>
&lt;li>C: controller &amp;amp; router, get request then serve with funcs/pipelines from context then make view render it&lt;/li>
&lt;/ul>
&lt;p>Another variation is Controller Service Repository (CSR) which adds layers. The repository and service patterns do make sense and dependency injection aids testing and early development. For example:&lt;/p>
&lt;ul>
&lt;li>C: user input, flow between parts&lt;/li>
&lt;li>S: business logic (not user input, not data storage). intermediary between C and R&lt;/li>
&lt;li>R: interact with data storage (DB, APIs, files)&lt;/li>
&lt;/ul>
&lt;p>Uncle Bob opposes Javaesque controller/model/service directories, prefers &amp;lsquo;Screaming architecture&amp;rsquo;, his term for putting important information in front and burying implementation details, to flatten onboarding and increase discoverability a la literate programming. (Though this naming convention applies everywhere) Here&amp;rsquo;s a lazy sketch with MVC inside 👹:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-golang" data-lang="golang">&lt;span style="display:flex;">&lt;span>.&lt;span style="color:#c3e88d;font-weight:bold">/&lt;/span>screaming_bank
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> loans
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> mortgage
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> controller.&lt;span style="color:#c099ff">go&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> serializer.&lt;span style="color:#c099ff">go&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> models.&lt;span style="color:#c099ff">go&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> car_loan
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> controller.&lt;span style="color:#c099ff">go&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> serializer.&lt;span style="color:#c099ff">go&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> models.&lt;span style="color:#c099ff">go&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>tl;dr: model the domain, use explicit domain names in folder architecture e.g. customer&lt;/p>
&lt;p>MVC and its kin face these problems:&lt;/p>
&lt;ul>
&lt;li>hard to isolate components for unit test&lt;/li>
&lt;li>&lt;span class="marginnote">Cf. Go: &amp;lsquo;accept interfaces, return structs&amp;rsquo; i.e. 1 way communication&lt;/span> tight coupling due to bidirectional communication&lt;/li>
&lt;li>hard to scale&lt;/li>
&lt;li>controllers prone to bloat&lt;/li>
&lt;/ul>
&lt;h3 id="onion-architecture">Onion architecture&lt;/h3>
&lt;p>Use concentric layers with different purposes, inspired by DDD.&lt;/p>
&lt;ul>
&lt;li>core domain: domain entities, business logic = main functionality&lt;/li>
&lt;li>domain services: services supporting logic, often stateless&lt;/li>
&lt;li>application services: orchestrate interactions between domain entities and services &lt;span class="marginnote">Like a controller&lt;/span>&lt;/li>
&lt;li>infrastructure services: DB access, external integrations etc. Implemented as interfaces or abstract classes&lt;/li>
&lt;li>external dependencies: injects dependencies with concrete implementations of infrastructure interfaces/classes, DB, frameworks etc.&lt;/li>
&lt;/ul>
&lt;p>The core principles are:&lt;/p>
&lt;ul>
&lt;li>Dependency Inversion Principle (DIP): the core domain (high level) doesn&amp;rsquo;t depend on low level, both depend on abstractions&lt;/li>
&lt;li>Isolate Concerns: Each layer&amp;rsquo;s isolated &lt;span class="marginnote">Hopefully non leaky abstractions&lt;/span> with dependencies flowing inward&lt;/li>
&lt;/ul>
&lt;p>Optimally, you can unit test domain/business logic ignoring other layers!&lt;/p>
&lt;h3 id="hexagonal-architecture">Hexagonal architecture&lt;/h3>
&lt;p>This focuses on where we define interfaces. If a service layer depends on a repository layer&amp;rsquo;s interfaces, you&amp;rsquo;ll have a bad time. When we define repository interfaces in the service layer, but implement them in the repository, we achieve dependency inversion. We call interfaces ports and implementations adapters. Some just throw the adapters in an infrastructure package and say they&amp;rsquo;re doing hexagonal architecture!&lt;/p>
&lt;p>tl;dr: Put logic in the center, surround it with ports and adapters.&lt;/p>
&lt;ul>
&lt;li>ports and adapters&lt;/li>
&lt;li>separate business logic from external dependencies and infra
&lt;ul>
&lt;li>by organizing code in layers&lt;/li>
&lt;li>logic in center, adapters etc. surround it&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&amp;ldquo;Ok, but why a hexagon?&amp;rdquo; you ask. &lt;span class="marginnote">Graphics use a hexagon for more space, that&amp;rsquo;s all&lt;/span>&lt;/p>
&lt;p>You can have notification concerns which you address with a port &lt;span class="marginnote">Port = interface&lt;/span> and implement outside with a Telegram bot adaptor. You can have 10 more ports with 20 adaptors each. So don&amp;rsquo;t think about it.&lt;/p>
&lt;p>Some issues:&lt;/p>
&lt;ul>
&lt;li>overengineering, ports/adapters introduce boilerplate for small projects&lt;/li>
&lt;li>though test focused, the port/adapter abstractions can make it difficult to test certain interactions, but mocking them is easy!&lt;/li>
&lt;/ul>
&lt;p>&lt;span class="marginnote">Adapter = implementation&lt;/span>
&lt;span class="marginnote">Chorus: Accept interfaces, return structs&lt;/span> &lt;strong>In short, interfaces should be defined where they are going to be used, not where they are going to be implemented.&lt;/strong>&lt;/p>
&lt;p>A layered (onion) architecture + interfaces leads us to:&lt;/p>
&lt;h3 id="clean-architecture">Clean Architecture&lt;/h3>
&lt;p>tl;dr: clean reveals intentions through well named and partitioned code&lt;/p>
&lt;p>This &lt;a href="https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html">post&lt;/a> or this &lt;a href="https://www.youtube.com/watch?v=Nsjsiz2A9mg">lecture&lt;/a> sums up the whole concept succinctly.&lt;/p>
&lt;blockquote>
&lt;p>the circles are schematic. You may find that you need more than
just these four. There’s no rule that says you must always have just
these four. However, The Dependency Rule always applies. Source
code dependencies always point inwards. As you move inwards the level
of abstraction increases. The outermost circle is low level concrete
detail. As you move inwards the software grows more abstract, and
encapsulates higher level policies. The inner most circle is the most
general.&lt;/p>&lt;/blockquote>
&lt;p>Clean architecture is SOLID + dependency inversion.&lt;/p>
&lt;p>In a layered architecture, every layer depends on the one inside. In a clean architecture, there are no layers, but a central domain/core which everything depends on it. The concrete implementation depends on the interfaces defined in the domain. = Services define their input (port) interface, which the adapters implement.&lt;/p>
&lt;h2 id="are-onion-hex-etc-the-same">Are Onion, Hex etc. the Same?&lt;/h2>
&lt;p>They answer two kinds of problems:&lt;/p>
&lt;ul>
&lt;li>How to decouple domain logic from tech stack/infra?&lt;/li>
&lt;li>How to control changes in infra?&lt;/li>
&lt;/ul>
&lt;p>These models all scratch at the same concepts and problems appear when people try to implement every detail where not relevant. When e.g. &amp;ldquo;clean code&amp;rdquo; results in more code, it can still be useful, e.g. allowing you to move logic from a server to CLI quickly. (This also aids testing because it&amp;rsquo;s easier to test domain logic (no mocking), if it&amp;rsquo;s already abstracted.) If this trade off is valuable to your usecase, introducing this architecture early makes sense.&lt;/p>
&lt;p>They do this with one principle: Build layers from high (logic) to low (implementation), without higher levels knowing about the lower.&lt;/p>
&lt;p>The top/inside contains the domain logic, which does not care nor know if output goes to a txt file or web page, if it&amp;rsquo;s stored in a txt file or SQL DB.
The lower layers connect the pure domain logic to the real world (side effects). DIP.&lt;/p>
&lt;h2 id="in-go">In Go&lt;/h2>
&lt;p>So how do you split a Go project into suitable layers? Ben Johnson&amp;rsquo;s &lt;a href="https://www.gobeyond.dev/standard-package-layout/">post&lt;/a> was a good start, but now we finally have an &lt;a href="https://go.dev/doc/modules/layout">official layout&lt;/a>. Further:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://blog.gopheracademy.com/advent-2016/go-and-package-focused-design/">Package Focused Design&lt;/a> compares Ben Johnson&amp;rsquo;s and Bill Kennedy&amp;rsquo;s layouts with Domain Driven Design&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.calhoun.io/moving-towards-domain-driven-design-in-go/">Moving Towards Domain Driven Design in Go&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://changelog.com/gotime/102">Peter Bourgon, Kat Zień &amp;amp; Ben Johnson Discussion&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.ardanlabs.com/blog/2017/02/design-philosophy-on-packaging.html">Design Philosophy on Packaging&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Three Dots Labs on &lt;a href="https://threedots.tech/series/modern-business-software-in-go/?utm_source=about-wild-workouts">Go apps with DDD, CQRS, and Clean Architecture&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.ompluscator.com/article/golang/practical-ddd-domain-repository/?source=post_paged308c9d79ba7">Practical DDD in Go&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Start abstractions from the most generalizable entity, typically the service layer.&lt;/p>
&lt;p>&lt;span class="marginnote">Martin Fowler&amp;rsquo;s Analysis Patterns introduced yet 70 more patterns in 1996.&lt;/span> Many say Go doesn&amp;rsquo;t need architecture at all. They mean SOLID, gang of 4 design patterns etc. were bandaids for missing features in &lt;span class="marginnote">Preemptive classes. &lt;em>shudder&lt;/em>&lt;/span> Java:&lt;/p>
&lt;ul>
&lt;li>Visitor pattern: Implements type switching&lt;/li>
&lt;li>Singleton pattern: implements global variables &lt;span class="marginnote">Go provides exportable package scoped vars&lt;/span>&lt;/li>
&lt;li>Command and strategy patterns: Emulate first class functions with closures&lt;/li>
&lt;li>State pattern: implement state machine with first class functions &lt;span class="marginnote">In Go you just make one function per state&lt;/span>&lt;/li>
&lt;/ul>
&lt;p>Go&amp;rsquo;s primitives elide such complexity and makes best practices/principles easy. The underlying principles still apply and will give you a clean, decoupled, refactorable codebase. Define routes as top level functions, using structs to serialize data or communicate with the frontend.&lt;/p>
&lt;ul>
&lt;li>Declare interfaces in the package that wants to accept the interface as a parameter&lt;/li>
&lt;li>Don&amp;rsquo;t return an interface from a function&lt;/li>
&lt;li>Go packages provide, not contain things - &lt;a href="https://youtu.be/spKM5CyBwJA?si=zLTA_ugjRWLzi4uh&amp;amp;t=99">Bill Kennedy talk&lt;/a>&lt;/li>
&lt;li>Higher level doesn&amp;rsquo;t import from lower level&lt;/li>
&lt;/ul>
&lt;p>The two ends of the idiomatic Go spectrum are &lt;code>go-kit &lt;/code>and &lt;code>upspin&lt;/code>. &lt;code>go-kit&lt;/code> abstracts separate endpoints, transport, service etc. while &lt;code>upspin&lt;/code>&amp;rsquo;s handler funcs are directly attached to endpoints. Both separate domain logic from other concerns. &lt;code>go-kit&lt;/code>&amp;rsquo;s is vertically split in &lt;code>cargo&lt;/code>, &lt;code>voyage&lt;/code>, &lt;code>location&lt;/code>, &lt;code>routing&lt;/code> packages, which the &lt;code>inmem&lt;/code> package implements, all divided into 3 services (&lt;code>tracking&lt;/code>, &lt;code>handling&lt;/code>, &lt;code>booking&lt;/code>). &lt;code>upspin&lt;/code>&amp;rsquo;s logic is in the &lt;code>upspin&lt;/code> package whose abstractions feature packages (&lt;code>cloud&lt;/code>, &lt;code>store&lt;/code>, &lt;code>access&lt;/code>) implement, all divided into handlers.
&lt;code>go-kit&lt;/code> is SOLID, useful for changing requirement spaces while &lt;code>upspin&lt;/code>&amp;rsquo;s is simpler. This simplicity is fine for the stable requirements demanded of public APIs etc.&lt;/p>
&lt;p>Coming from traditional OOP, the simpler approach seems especially valid as DIP seems to demand a bit extra code. Mockable structs depend on interfaces, which means interfaces for data sources, clients, domain logic etc. But if layers require noticeably more code, there&amp;rsquo;s an organizational issue and extra design time can &lt;span class="marginnote">Less code is better&lt;/span> shrink the codebase. Interfaces make dependency injection natural. Define clear interfaces, then implement them elsewhere to tautologically decouple the implementation from your logic. Remember:&lt;/p>
&lt;blockquote>
&lt;p>Accept interfaces, return structs. Amen.&lt;/p>&lt;/blockquote>
&lt;p>Go&amp;rsquo;s favorite refrain is the Dependency Inversion Principle in fewer syllables. Indeed, &amp;ldquo;ports and adapters&amp;rdquo; is an even shorter incantation. &lt;span class="marginnote">Interface climbing: Cast to a more performant type in case it&amp;rsquo;s implemented e.g. io.ReadSeeker, Error to StackTrace().&lt;/span> Appreciate how &lt;code>io.Reader&lt;/code> and &lt;code>io.Writer&lt;/code> are defined in io, just assuming something satisfies one, then build on it (e.g. &lt;code>io.Copy&lt;/code>.)&lt;/p>
&lt;p>A domain, repository (DB) and an API layer or &lt;span class="marginnote">Contract. If with an x-doer, I can&amp;hellip;&lt;/span> interface (remember Hexagonal ports are interfaces, it&amp;rsquo;s all the same for us!) are a good starting point for organic growth. No package straddles them (they connect by interfaces). &lt;span class="marginnote">Cf. Screaming architecture increases discoverability, decreases overengineering.&lt;/span> &lt;a href="https://www.reddit.com/r/golang/comments/16t07zw/architecture_of_your_app/k2ciijs/">Protip&lt;/a>: Avoid the following words in your code: service, controller, repository, util, helper, domain, adapter, port, clean nor design patterns by name.&lt;/p>
&lt;p>Your domain isn&amp;rsquo;t just a package, but the entire application. Domain abstractions should be found (implemented, not defined) everywhere in all your packages, because almost all code is an adapter or port. &lt;a href="https://en.wikipedia.org/wiki/Feature-driven_development">Feature driven development&lt;/a> naturally organizes concerns by usecase. New features expand the domain with new interfaces. (Some like to add a network layer.) SOLID, clean, DDD etc. emerge as a side effect.&lt;/p>
&lt;p>Small, composable interfaces are the UNIX way.&lt;/p>
&lt;p>Keep your package structure shallow.&lt;/p>
&lt;h2 id="big-name-concepts">Big Name Concepts&lt;/h2>
&lt;p>Here are some more ideas and principles:&lt;/p>
&lt;h3 id="imperative-shell-functional-core">Imperative Shell Functional Core&lt;/h3>
&lt;p>Pure, functional do logic code, wrapped in mutable stateful code with side effects. Onion/layered etc. from a functional perspective.&lt;/p>
&lt;h3 id="domain-driven-design-ddd">Domain Driven Design (DDD)&lt;/h3>
&lt;p>Unfortunately wallowing in the OOP mire (basically a pattern book), interesting ideas are approached but covered by too much abstraction and overcomplication. Data/concept modeling as a whole fell victim to UML, consultants etc. I&amp;rsquo;ll preach on this in the next article.&lt;/p>
&lt;ul>
&lt;li>Core: Business logic changes state, makes a record, applies rule applied. No io. Pass data/structs to func&lt;/li>
&lt;li>Build shell to fetch data, apply core logic etc.&lt;/li>
&lt;li>Package by business context (specifically named packages)&lt;/li>
&lt;li>Collaborate with subject matter experts (SME)/domain experts, which forces you to name &lt;span class="marginnote">Valuable. reduces huge source of bugs.&lt;/span> things concretely, no &amp;ldquo;domain&amp;rdquo; folder etc.&lt;/li>
&lt;/ul>
&lt;p>A lot of abstraction:&lt;/p>
&lt;ul>
&lt;li>repository&lt;/li>
&lt;li>object&lt;/li>
&lt;li>entity&lt;/li>
&lt;li>aggregate&lt;/li>
&lt;/ul>
&lt;p>DDD breaks a large model into bounded contexts, explicitly describing how they interact/interface.&lt;/p>
&lt;p>&lt;a href="https://github.com/warrant-dev/warrant">https://github.com/warrant-dev/warrant&lt;/a> follows this. Each domain has its own package, which the same building blocks (handler, spec, service, model, repository) from req to DB&lt;/p>
&lt;h3 id="microservices">Microservices&lt;/h3>
&lt;blockquote>
&lt;p>grug wonder why big brain take hardest problem, factoring system correctly, and introduce network call too&lt;/p>&lt;/blockquote>
&lt;p>Rare in practice, because few actually have a separate DB for each microservice. Most are just distributed monoliths.&lt;/p>
&lt;ul>
&lt;li>Split domains into many groups&lt;/li>
&lt;li>Manage system complexity: Not quite architecture as you can use Hexagonal for the microservices&lt;/li>
&lt;li>Solve organizational problems: From a technical perspective, they just add &lt;span class="marginnote">Complexity is cost.&lt;/span> complexity (at almost every project&amp;rsquo;s scale)&lt;/li>
&lt;/ul>
&lt;p>Requirements change at different speeds, so services solving them have different release velocities. Optimally, this means a team&amp;rsquo;s domain gets its own microservice and release speed. Dependencies become self contained (besides specific relationships like scraper-&amp;gt;DB). Orchestration/&lt;a href="https://alexalejandre.com/programming/anti-kubernetes-propaganda/">K8s&lt;/a> is difficult.&lt;/p>
&lt;h3 id="12-factor-app">12 factor app&lt;/h3>
&lt;p>I charitably generalize outdated specifics in accordance to their use today:&lt;/p>
&lt;ol>
&lt;li>single codebase, many deployments (dev, staging&amp;hellip;)&lt;/li>
&lt;li>declare and isolate dependencies &lt;span class="marginnote">&lt;code>go build&lt;/code>, &lt;code>go test&lt;/code>, &lt;code>go run&lt;/code> should have the same result&lt;/span>&lt;/li>
&lt;li>keep &lt;a href="https://gist.github.com/telent/9742059#gistcomment-2249713">configs outside&lt;/a> of code &lt;span class="marginnote">Originally &amp;lsquo;config in env&amp;rsquo; but practice prefers json, yaml, cmdln flags etc. outside of containers&lt;/span>&lt;/li>
&lt;li>consume dependencies&lt;/li>
&lt;li>automate setup declaratively: create prod with recreatable stages (build, release, run), so you can rollback. Different builds, releases etc. need unique identifiers. Different releases have same build with different configs.&lt;/li>
&lt;li>stateless services, sharing nothing&lt;/li>
&lt;li>isolate services&amp;rsquo; data, share with API&lt;/li>
&lt;li>scale horizontally (without tooling, arch changes)&lt;/li>
&lt;li>disposable services (for elastic scaling)&lt;/li>
&lt;li>minimize difference between dev, staging prod (same stack, code, people)&lt;/li>
&lt;li>logs are event streams, storage, routing logic etc. belong elsewhere&lt;/li>
&lt;li>update with scripts, no manual changes, &lt;span class="marginnote">Unique snowflakes are pets, not cattle&lt;/span> for reproducibility&lt;/li>
&lt;/ol>
&lt;p>This aims at a higher scale, composing different instances and services together. Most tenets are actually followed today.&lt;/p>
&lt;h3 id="solid">SOLID&lt;/h3>
&lt;p>tl;dr: meh&lt;/p>
&lt;ul>
&lt;li>single responsibility principle&lt;/li>
&lt;li>open-closed: extendible, not modifiable&lt;/li>
&lt;li>Liskov substitution: Funcs should use base or derived classes without difference&lt;/li>
&lt;li>interface segregation: Only depend on interfaces you use&lt;/li>
&lt;li>Dependency Inversion Principle / Depend on Abstractions&lt;/li>
&lt;/ul>
&lt;p>This lays bare how &amp;ldquo;design patterns&amp;rdquo; and principles are band aids for missing language features. Go&amp;rsquo;s interface and method design inherently satisfies OLI. Keep them small for S. We have covered D. &lt;a href="https://dave.cheney.net/2016/08/20/solid-go-design">Dave Cheney&lt;/a>&lt;/p>
&lt;p>Uncle Bob on S and when to ignore DRY:&lt;/p>
&lt;blockquote>
&lt;p>Gather together the things that change for the same reasons. Separate those things that change for different reasons.&lt;/p>&lt;/blockquote>
&lt;h3 id="screaming-architecture">Screaming Architecture&lt;/h3>
&lt;p>Name things after their domain (ticketing, not &amp;ldquo;domain&amp;rdquo;). Important information goes in front,implementation details later.&lt;/p>
&lt;h3 id="literate-programming">Literate Programming&lt;/h3>
&lt;p>Holy SICP starts:&lt;/p>
&lt;blockquote>
&lt;p>Programs are meant to be read by humans and only incidentally for computers to execute.&lt;/p>&lt;/blockquote>
&lt;p>Code should express the problem eloquently and succinctly. This rarely works because developers must now be both good programers and good writers. The end product is a list and narrative at the same time.&lt;/p>
&lt;p>This addresses code additions/extensions, otherwise ignored. This historical view helps onboarding (explaining the &amp;ldquo;why?&amp;rdquo;). Comments, specifications and good documentation serve well instead.&lt;/p>
&lt;h2 id="general-principles">General Principles&lt;/h2>
&lt;p>At this point, it&amp;rsquo;s painfully obvious everyone&amp;rsquo;s stretching and struggling to describe the same thing (some better, some worse). It all blurs together. Everything and everyone tries to:&lt;/p>
&lt;ul>
&lt;li>separation of concerns: separating business logic from external dependencies and infrastructure&lt;/li>
&lt;li>make dependencies explicit&lt;/li>
&lt;li>decouple (is also testable) &lt;span class="marginnote">Why should it matter if data&amp;rsquo;s stored on Postgres, Redis or CockroachDB?&lt;/span>
&lt;ul>
&lt;li>single responsibility&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>increase the purity of the system&lt;/li>
&lt;li>stay comprehensible, reduce surprise: so a human mind can comprehend it
&lt;ul>
&lt;li>we do this by constraining possibilities, separating concerns not combining them&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>element of least surprise&lt;/li>
&lt;li>Things that change together should live together
&lt;ul>
&lt;li>DRY - rule of 3, only refactor if reused at least 3+ times&lt;/li>
&lt;li>DRY - rule of 3, only deduplicate if it happens at least 3 times. Even then, beware of coupling&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Even here, smaller systems (the size of your average SaaS codebase) can couple with no problem. It&amp;rsquo;s only an issue when they couple sequentially or between different service&amp;rsquo;s storage layers. The data model is essential complexity, coupling higher and lower layers together. Cohesion is worth it.&lt;/p>
&lt;p>Different applications demand different architectures. Til now, it&amp;rsquo;s all been web.&lt;/p>
&lt;ul>
&lt;li>compilers need stages in a pipeline&lt;/li>
&lt;li>library are public APIs of interfaces, funcs, data structures, privately implemented&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. - Kernighan&lt;/p>&lt;/blockquote>
&lt;p>In software engineering, &amp;ldquo;clever&amp;rdquo; is an accusation. The same applies to refactoring and architecture.&lt;/p>
&lt;h2 id="key-organizational-principles">Key Organizational Principles&lt;/h2>
&lt;p>From: &lt;a href="https://lobste.rs/s/vlcw5q/lessons_learned#c_ke5i1v">https://lobste.rs/s/vlcw5q/lessons_learned#c_ke5i1v&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Don’t try to break dependent things into subparts, like say put the front and backends for the same system into two different repos. People might decompose by language, for example, but really if there is dependency, like an API, that matters more. It’s hard to explain, but if things can’t stand on their own, then you shouldn’t try to force them to.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Disorganization will always be the biggest problem. Organization is a place for everything, everything in its place, and not too many similar things in the same place. That is, if you have something new and you don’t know where to put it, then it is disorganized. It must go somewhere; if that is obvious, then you are okay.&lt;/p>&lt;/blockquote>
&lt;p>Vocabulary - what we have so far:&lt;/p>
&lt;ul>
&lt;li>interface: contract, the boundary &lt;em>between&lt;/em>, port, modular parts connect together through these like plug types&lt;/li>
&lt;li>implementation: satisfies the interface, adaptor&lt;/li>
&lt;li>repository: touches DB etc.&lt;/li>
&lt;li>domain: core business logic, best if functional, should be abstract interfaces&lt;/li>
&lt;li>high and low: general and implementation-specific&lt;/li>
&lt;/ul>
&lt;p>&amp;ldquo;One&amp;rsquo;s good, two&amp;rsquo;s bad&amp;rdquo; is the essence of good design. Immutability: one way flow of state change. Redux/React: one way flow of data. CQS: single purpose, single pass communication. SRP: do one thing. OCP: one direction of code extension.&lt;/p>
&lt;p>Ports &amp;amp; Adapters: one direction flow of design/abstractions. Design flows in, abstractions flow outward (defined in the core).&lt;/p>
&lt;p>There are three types of code, specific to:&lt;/p>
&lt;ul>
&lt;li>tech stack: HTTP framework, Postgres, cloud SDK &lt;span class="marginnote">or implementation&lt;/span>
&lt;ul>
&lt;li>driver: HTTP framework triggering workflows, starts things&lt;/li>
&lt;li>driven: what gets triggered (by the business logic)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>application: MVC&amp;rsquo;s controller&lt;/li>
&lt;li>business: aggregates, entities, value types&lt;/li>
&lt;/ul>
&lt;p>App and business logic sit in the core, going from low/specific to high/generic.&lt;/p>
&lt;hr>
&lt;h2 id="to-add">To Add&lt;/h2>
&lt;p>I hope to address these later: &lt;span class="marginnote">Some address different scopes, unsure how to square that circle.&lt;/span>&lt;/p>
&lt;ul>
&lt;li>cell based architecture &lt;a href="https://github.com/wso2/reference-architecture/blob/master/reference-architecture-cell-based.md">CBA&lt;/a>
&lt;ul>
&lt;li>a cell&amp;rsquo;s a shard of a big service, making a max size&lt;/li>
&lt;li>split workload so failures only ruin sections&lt;/li>
&lt;li>helps migrate&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Command Query Responsibility Segregation
&lt;ul>
&lt;li>separate read and writing concerns (separate DB or just DB contexts)&lt;/li>
&lt;li>big in .net&lt;/li>
&lt;li>too many folders, one per operation&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Functional Reactive Programming
&lt;ul>
&lt;li>handle events declaratively (what to do, not how)&lt;/li>
&lt;li>compose components/functions (unix style)&lt;/li>
&lt;li>hard to debug&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Event Sourcing
&lt;ul>
&lt;li>Massive overhead and complexity &lt;span class="marginnote">All universal fanaticism bites, whether everything&amp;rsquo;s a file, object, event, func&amp;hellip;&lt;/span>&lt;/li>
&lt;li>https://lobste.`rs/s/uahnku/1_year_event_sourcing_cqrs#c_gywlob&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Service Oriented Architecture&lt;/li>
&lt;li>Component-Based Architecture:&lt;/li>
&lt;li>Pipeline Architecture
&lt;ul>
&lt;li>linear processing (like a compiler&amp;rsquo;s steps)&lt;/li>
&lt;li>focus on data flows&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Space based architecture
&lt;ul>
&lt;li>share memory &lt;span class="marginnote">Cf. &amp;lsquo;share memory by communicating&amp;rsquo;&lt;/span>&lt;/li>
&lt;li>components read/write message tuples in tuple space (repository)&lt;/li>
&lt;li>how different from message broker/bus/event driven?&lt;/li>
&lt;li>sharded/partitioned data&lt;/li>
&lt;li>in memory data grids (IMDG) to reduce DB access&lt;/li>
&lt;li>&lt;a href="https://github.com/pSpaces/Programming-with-Spaces">https://github.com/pSpaces/Programming-with-Spaces&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Message-Oriented Middleware&lt;/li>
&lt;li>functional
&lt;ul>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=4NO83wZVT0A">https://www.youtube.com/watch?v=4NO83wZVT0A&lt;/a> Author of practical common lisp compares its architectural patterns with e.g. java&lt;/li>
&lt;li>&lt;a href="https://github.com/graninas/Functional-Design-and-Architecture">https://github.com/graninas/Functional-Design-and-Architecture&lt;/a> in Haskell, about architecture in statically typed functional languages&lt;/li>
&lt;li>Functional Design - Robert Martin&lt;/li>
&lt;li>&lt;a href="https://www.researchgate.net/publication/228576802_Call_with_current_continuation_patterns">https://www.researchgate.net/publication/228576802_Call_with_current_continuation_patterns&lt;/a>&lt;/li>
&lt;li>State/Event, Consequences, Accumulator, MapReduce, Reduce/Combine, Recursive Expansion, pipeline: &lt;a href="https://www.infoq.com/presentations/Clojure-Design-Patterns/">https://www.infoq.com/presentations/Clojure-Design-Patterns/&lt;/a>&lt;/li>
&lt;li>Norbert Wójtowicz on youtube&lt;/li>
&lt;li>domain modeling made functional, primer: &lt;a href="https://increment.com/software-architecture/primer-on-functional-architecture/">https://increment.com/software-architecture/primer-on-functional-architecture/&lt;/a>&lt;/li>
&lt;li>Functional and Reactive Domain Modeling&lt;/li>
&lt;li>Grokking Simplicity - Eric Normand - functional JS instead of MVC&lt;/li>
&lt;li>&lt;a href="https://polylith.gitbook.io/polylith/">Polylith&lt;/a>&lt;/li>
&lt;li>Functional Design - Robert Martin&lt;/li>
&lt;li>Purely Functional Data Structures&lt;/li>
&lt;li>Pearls of Functional Algorithm Design&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=GZPup5Iuaqw">Next Level MTL&lt;/a> - Haskell tools to grow monad transformer stacks&lt;/li>
&lt;li>&lt;a href="https://iohk.io/en/research/library/papers/stretching-the-glasgow-haskell-compiler-nourishing-ghc-with-domain-driven-design/">GHC architecture&lt;/a> and old warts&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>99 Bottles of OOP&lt;/li>
&lt;/ul></content:encoded></item><item><title>Revolt of the Simple</title><link>https://alexalejandre.com/programming/revolt-of-simple/</link><pubDate>Tue, 02 Jan 2024 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/revolt-of-simple/</guid><description>tl;dr: Recklessly adopting tools because big tech uses them is the biggest problem in tech.</description><content:encoded>&lt;p>tl;dr: Recklessly adopting tools because big tech uses them is the biggest problem in tech.&lt;/p>
&lt;hr>
&lt;h2 id="what-scale-do-we-need">What scale do we need?&lt;/h2>
&lt;p>Inefficient technologies drive massive hardware costs. For most usecases, a businesses could run for 1/10th the cost. &lt;a href="https://alexcabal.com/posts/standard-ebooks-and-classic-web-tech">Standard Ebooks&lt;/a> serves 1.2 million req/month,
just under a &lt;span class="marginnote">.5 req/sec&lt;/span> &lt;a href="https://en.wikipedia.org/wiki/FFF_system">microfortnight&lt;/a>, on a 2GB VPS.&lt;/p>
&lt;p>The typical microservice PWA has dozens of internal services pinging each other thousands of times, with no benefit to the end user. With Standard Ebooks, if a request fails, you just refresh with no issue and no struggle for availability. They use PHP with FastCGI, an in memory cache and &lt;a href="https://github.com/standardebooks/web/blob/master/lib/Library.php">search via APCu cache&lt;/a>, which should let them scale 1000x to thousands of requests/second on this same VPS.&lt;/p>
&lt;p>Many personal blogs receive thousands of requests a month, easily hostable on any machine with the most inefficient code imaginable. Actually hugging a site to death (slashdot effect, flashcrowd) seems infeasible today - 300 req/second sustained over a month is a visit from literally every American. (I exaggerate. I believe my hosting will fail after 2 million views/month. If I bothered to CDN my images, that should be ~5 million.) Few actually needs to scale.&lt;/p>
&lt;p>This leads to an interesting gap in offerings. Every provider&amp;rsquo;s optimized towards huge customers with insane throughput (who are so big it&amp;rsquo;s worth running their own infrastructure.) Now imagine a cloud provider giving you limited bandwidth for a month, for $.10. (The closest is Hetzner, &lt;a href="https://www.hetzner.com/cloud/">€3.79&lt;/a> for a shared vCPU and 20 TB of bandwidth.)&lt;/p>
&lt;p>But resume driven development (RDD) is fun and occasionally lucrative! Why else would a company receiving a couple req/sec have a Kubernetes cluster, CI/CD, frameworks on the front and backend and multiple teams of engineers maintaining all those microservices? &lt;span class="marginnote">Answer: Bad CFOs and accountants&lt;/span>&lt;/p>
&lt;p>Coordination issues also occur. As a organization grows, a platform team makes sense. But goals get misaligned. The platform team&amp;rsquo;s manager wants to build more tooling to get promoted. The platform engineers lose sight of developer needs, get distracted by fun problems. &lt;span class="marginnote">Example: Me.&lt;/span> I first saw this complaint lodged at Ruby&amp;rsquo;s development team, who write C, who are more familiar with VMs, interpreters etc. than web development. They do a fine job, but not everyone can.&lt;/p>
&lt;h2 id="the-frontend-revolt">The Frontend Revolt&lt;/h2>
&lt;p>Many of us are tired. &lt;span class="marginnote">Us = People who only want &amp;lsquo;good enough&amp;rsquo; UI, whose differentiators are on the backend or content, not polished interactive frontends.&lt;/span> But a new hypecycle is here. Now the &amp;ldquo;new hotness&amp;rdquo; is htmx. Easily add interactiveness without reloading, without a full framework, just return html from the server! But isn&amp;rsquo;t this just the MPA vs. SPA debate? JS vs J-less? And more!&lt;/p>
&lt;p>Perhaps the urgoal of hyperlinked static pages is a memory and many sites wouldn&amp;rsquo;t work without JS, but why should one tool set solve everything? For many usecases, server rendered HTML is actually optimal. Others e.g. enterprise SPA, Figma thinkorswim etc. do demand other approaches.&lt;/p>
&lt;p>This dissension leads to disparate places. Some speak against all clientside rendering. They want apps to run in the OS, their browser is for HTML alone. A bit extreme. The key is to temper RDD and use the best, &lt;strong>the simplest tool possible&lt;/strong> for the job, a minimal viable product iterated with customer feedback. We best decide by asking whether our interaction needs the network. Lower latency e.g. GoogleDocs where a button makes text bold doesn&amp;rsquo;t belong on the network. Generally, formatting input requires clientside rendering. Simpler solutions require less maintenance, less development time, less hosting costs etc. It&amp;rsquo;s just good engineering.&lt;/p>
&lt;h3 id="how-did-we-get-here">How did we get here?&lt;/h3>
&lt;p>We started with MPAs but struggled with interactivity. Frameworks appeared solving interactivity, but we struggled to integrate them with our templating systems. We made the frameworks template the whole site too, unifying our tooling and birthing SPAs.&lt;/p>
&lt;p>But Google couldn&amp;rsquo;t index them, performance dragged, so we added server side rendering to the frameworks, letting them hydrate HTML to the SPA. &lt;span class="marginnote">&lt;em>shudder&lt;/em> Fell hydration errors&amp;hellip;&lt;/span> Now islands mix approaches. But we got stuck in the framework. To actually deploy these beasts, at scale, around the world, Kubernetes etc. appeared.&lt;/p>
&lt;p>&lt;span class="marginnote">Also see MDI and SDI: Window as application or window(s) written by application&lt;/span> Actually making an SPA work correctly&amp;rsquo;s quite the struggle, the developer works with limited browser support. While the common libraries help, it&amp;rsquo;s obvious this isn&amp;rsquo;t the happy path. The browser provides so much, so why not leverage that? That said, as most tasks are CRUD, our tools should focus on this (with ways to add interactivity.)&lt;/p>
&lt;h2 id="in-conclusion">In Conclusion&lt;/h2>
&lt;p>Ultimately, the simpler it is for anyone to build something, the more democratic the web, weakening social media&amp;rsquo;s stranglehold.&lt;/p>
&lt;hr>
&lt;h2 id="addendum">Addendum&lt;/h2>
&lt;p>To verge away from simple, into megalomaniacal ideas, imagine building server systems on a chip, with a fresh architecture aimed at cloud native workloads, instead of &lt;a href="https://dl.acm.org/doi/pdf/10.1145/3212477.3212479">emulating a PDP-11&lt;/a>&amp;hellip;&lt;/p>
&lt;h2 id="some-examples-of-rdd">Some Examples of RDD&lt;/h2>
&lt;ul>
&lt;li>Deploying a static blog with more ceremony than a shell script. &lt;span class="marginnote">Where are the local first, vendorless CI/CD pipelines?&lt;/span>&lt;/li>
&lt;li>Wordpress on Kubernetes: Give up control compared to headless, for sweet K8s xp! Now you can&amp;rsquo;t control how plugins autoupdate, so deploy and configure caching on prod, copy prod, update content, redeploy on prod for every new article!&lt;/li>
&lt;li>SQL vs. NoSQL: Reading cutting edge blog posts about cool problems, engineers started using MongoDB, Cassandra etc. for CRUD, the wrong tool for their domain.&lt;/li>
&lt;li>SPA vs. MPA: SPA&amp;rsquo;s excel at complex tasks, while SPA&amp;rsquo;s are too easy&amp;hellip;&lt;/li>
&lt;li>Embedded web assets vs. Node dashboards: Admin passages were trivial, but are now separate services (because they scale!)&lt;/li>
&lt;/ul>
&lt;h3 id="other-reading">Other Reading&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://egoless.engineering/">https://egoless.engineering/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://j3s.sh/thought/my-deployment-platform-is-a-shell-script.html">https://j3s.sh/thought/my-deployment-platform-is-a-shell-script.html&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>A Fascinating Subfield of Economics</title><link>https://alexalejandre.com/finance/econ-plus-physics/</link><pubDate>Sat, 07 Oct 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/finance/econ-plus-physics/</guid><description>&lt;p>I&amp;rsquo;m absolutely fascinated by the thoughts of authors like Vaclav Smil, Steve Keen, Anas Alhajji, Rule Rule etc. but would like to really learn more. Unfortunately, their &lt;span class="marginnote">Public figures tend to rehash talking points.&lt;/span> published material repeats itself over and over. There are terms which roughly cover it:&lt;/p></description><content:encoded>&lt;p>I&amp;rsquo;m absolutely fascinated by the thoughts of authors like Vaclav Smil, Steve Keen, Anas Alhajji, Rule Rule etc. but would like to really learn more. Unfortunately, their &lt;span class="marginnote">Public figures tend to rehash talking points.&lt;/span> published material repeats itself over and over. There are terms which roughly cover it:&lt;/p>
&lt;ul>
&lt;li>biophysical economics&lt;/li>
&lt;li>ecological economics&lt;/li>
&lt;li>thermoeconomics&lt;/li>
&lt;li>econophysics&lt;/li>
&lt;li>ecological economics&lt;/li>
&lt;/ul>
&lt;p>However I haven&amp;rsquo;t been able to find e.g. universities which offer reading lists, curricula etc. I&amp;rsquo;m not sure who the practitioners would be beyond these &amp;ldquo;thought leaders&amp;rdquo; (beside commodity investors, the lens through which I found them.)&lt;/p>
&lt;p>(While econodynamics with its kinetic exchange models (of markets) etc. applies physics to the economy, it seems occupied only with money flows, not actual economic activity.)&lt;/p>
&lt;p>(I suppose a lot of this can be waved away by saying the primary economy must grow to support the expanding tertiary, even as its proportion drops. But that&amp;rsquo;s no fun. Besides, insight and complexity lurk in the grey.)&lt;/p>
&lt;p>Concepts:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://wiki.p2pfoundation.net/Catagenesis">Catagenesis&lt;/a>&lt;/li>
&lt;li>EROEI / Energy quality
&lt;ul>
&lt;li>a lot of funny dynamics here, in spite of &lt;a href="http://www.esf.edu/EFB/hall/pdfs/petroleum_drilling.pdf">sketchy beginnings&lt;/a> &lt;span class="marginnote">Hall thought we&amp;rsquo;d reach peak oil in 2000&lt;/span> it is a useful concept&lt;/li>
&lt;li>many counters exist e.g. in a future, we could use kBTUs of sunlight or nuclear fission to generate 1 BTU of oil, uniquely useful for flying or&amp;hellip;&lt;/li>
&lt;li>hard to get reliable numbers due to politics, crazies claiming nuclear&amp;rsquo;s sub 1:1, others saying wind or solar are 100:1&amp;hellip;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Energy accounting - energy as cost of capital &lt;a href="http://theoildrum.com/node/8402">see #11.&lt;/a>&lt;/li>
&lt;li>Emergy / transformity&lt;/li>
&lt;li>Energy theory of value&lt;/li>
&lt;li>Energy intensity&lt;/li>
&lt;li>Energy elasticity - % change in energy consumption to change GDP 1%&lt;/li>
&lt;li>Physical limits of energy (at current 3% energy growth, Earth will boil in 400 years. Thermodynamics.)&lt;/li>
&lt;/ul>
&lt;p>A core struggle&amp;rsquo;s that ERO(E)I is sensitive to inputs, which &lt;a href="https://www.youtube.com/watch?v=XTxPZdeKZgM">vary&lt;/a> for political reasons. Seemingly every researcher approaches it with a different definition resulting in huge differences (recovered embodied energy divided by extraction and transport, secondary energy output, back calculate all extraction input factors?). However, instead of &lt;a href="https://www.youtube.com/watch?v=1KjNBIXr1Y8">tackling&lt;/a> this with better data, many different metrics sprout up like &lt;a href="https://www.sciencedirect.com/science/article/pii/S0301421513006447">Lambert&amp;rsquo;s&lt;/a>. This all obscures an honest exploration of industrial activity. For example, determining the energy expenditure to mine uranium is quite the struggle, because I a lone researcher like me can&amp;rsquo;t determine how much energy goes into its equipment and I&amp;rsquo;m left with data I can&amp;rsquo;t trust: 20-30 MWh/kg U308? Even though refining is clearer, &lt;code>good data x bad data = bad data&lt;/code>. It&amp;rsquo;s easier to find flaws in others&amp;rsquo; political calculations, e.g. including non-necessary lifecycle costs like enrichment (into nuclear weapons) and then processing back.&lt;/p>
&lt;p>Books:&lt;/p>
&lt;ul>
&lt;li>Econodynamics: Theory of Social Production - Vladimir Pokrovskii&lt;/li>
&lt;li>Entropy Law and Economic Process - Nicholas Georgescu-Roegen&lt;/li>
&lt;li>Second Law of Economics: Energy, Entropy and the Origins of Wealth - Reiner Kümmel&lt;/li>
&lt;li>Unity of Science and Economics - Jing Chen&lt;/li>
&lt;li>Energy and the Wealth of Nations - Kent Klitgaard, Charles A.S. Hall&lt;/li>
&lt;li>Boulding, Kenneth E. (1978). Ecodynamics : a new theory of societal evolution&lt;/li>
&lt;li>Keen, Steve (1997). Economic Growth and Financial Instability, Dissertation at the School of Economics&lt;/li>
&lt;li>Nafeez Ahmed (2017). Failing States, Collapsing Systems: BioPhysical Triggers of Political Violence&lt;/li>
&lt;li>Ecological Economics - Herman Daly, Joshua Farley&lt;/li>
&lt;li>Energy and Civilization - Vaclav Smil&lt;/li>
&lt;li>Catastrophe, Creativity and the Renewal of Civilization - Homer-Dixom&lt;/li>
&lt;li>Energy Storage And Civilization - Graham Palmer&lt;/li>
&lt;/ul>
&lt;p>Articles:&lt;/p>
&lt;ul>
&lt;li>Improving calculations of energy return on investment - Palmer, Hall&lt;/li>
&lt;li>Schwartzman, David. (2007). &amp;ldquo;The Limits to Entropy: the Continuing Misuse of Thermodynamics in Environmental and Marxist theory&amp;rdquo;, In Press, Science &amp;amp; Society.&lt;/li>
&lt;li>Sitabhra Sinha, Bikas K Chakrabarti, Towards a physics of economics, Physics News 39(2) 33-46 (April 2009)&lt;/li>
&lt;li>Marcelo Byrro Ribeiro, Income Distribution Dynamics of Economic Systems: An Econophysical Approach, Cambridge University Press (Cambridge, UK, 2020)&lt;/li>
&lt;li>Stern, D. I. (1997). &amp;ldquo;Limits to substitution and irreversibility in production and consumption: A neoclassical interpretation of ecological economics&amp;rdquo;. Ecological Economics 21(3): 197–215.&lt;/li>
&lt;li>On the Energy Theory of Value: Economy and Policies - Peter Stallinga&lt;/li>
&lt;li>Energetic Implications of a Post-industrial Information Economy: The Case Study of Australia - Graham Palmer&lt;/li>
&lt;li>A Framework for Incorporating EROI into Electrical Storage - Graham Palmer&lt;/li>
&lt;/ul>
&lt;p>Organizations:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://bpeinstitute.org/">https://bpeinstitute.org/&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>Narcostates</title><link>https://alexalejandre.com/finance/narcostates/</link><pubDate>Sun, 01 Oct 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/finance/narcostates/</guid><description>The political economy of narcostates</description><content:encoded>&lt;p>&lt;a href="https://www.reddit.com/r/CredibleDefense/comments/1b7z3yt/credibledefense_daily_megathread_march_06_2024/ktnhurj/">https://www.reddit.com/r/CredibleDefense/comments/1b7z3yt/credibledefense_daily_megathread_march_06_2024/ktnhurj/&lt;/a>&lt;/p>
&lt;p>add more thoughts on the essence of the state and mafias as ministates etc.&lt;/p>
&lt;hr>
&lt;p>While the Nixon Tapes showed the war on drugs was engineered to get Nixon reelected, drugs were a serious and growing issue. But politicized medicine made something worse emerge: Organized crime fused with states. The golden triangle featured many groups (most interestingly Chinese nationalist forces). Latin America saw many Narco states emerge. Belize had a coup financed by drug lords. North Korea exports narcotics for profit. Much of Syria&amp;rsquo;s revenues come from narcotic sales (particularly fenethylline.) Myanmar. Belize. Guinea-Bissau. Venezuela. Mexico. The legitimate economies are quickly controlled by the same cartels.&lt;/p>
&lt;p>In terms of political economy, these are not quite failed states. There is a system, an oligarchy with clear centers of power. The primary stakeholders in these nations, that is the wealthy owners of the most economically productive segments of the economy (narcotics) assert their influence to improve the regulatory environment, leveraging state power to enforce conflict resolution mechanisms, guarantee property protection to enable longer term capital investments, both in production and transportation, while allowing cottage industries of legal, tax etc. professionals who make fertile ground for new illicit enterprises to sprout up in, a classical self reinforcing loop. Specializing further in these industries, they face Dutch disease. Politics center around controlling these revenue streams, people forego other opportunities and specialize in this industry digging them deeper and deeper and reducing economic complexity.&lt;/p>
&lt;p>For sanctioned regimes like Syria and North Korea, their preexisting professional class&amp;rsquo; already prepared and experienced at smuggling, avoiding the law, secretly moving money around. While more typical impoverished countries do not enjoy this advantage of knowledge in related areas, the lack of other opportunities makes the opportunity cost of diversifying into narcotics relatively low.&lt;/p>
&lt;p>If China et al. represent a valid intellectual threat to Popper&amp;rsquo;s &amp;ldquo;Open Society&amp;rdquo; (recently: the liberal &amp;ldquo;rules based order&amp;rdquo;, though a term easy to criticize) as political Islam, communism etc. have at different points alongside simpler temptations like military juntas etc., narcostates offer another possible state.&lt;/p>
&lt;p>Transnistria represents another emanation of the concept: the mafia state, like Russia, wherein the holders of power assert dominance over all economic activity stunting growth and innovation.&lt;/p>
&lt;p>I ask: &lt;strong>How can we defend our own nations and friendly states from this? How can police, courts etc. be fortified against this?&lt;/strong>&lt;/p>
&lt;p>The only success story I know is of Romania defeating corruption. Where a decade ago Victor Ponta openly stated his party lost a presidential election because they bought fewer votes, the National Anticorruption Directorate effectively cleaned up the country to the extent that the EU made the Romanian DNA agents instate the same structures as an EU institution, with ex DNA head Laura Codruta Kovesi now the European Chief Prosecutor.&lt;/p>
&lt;p>In Brazil, &lt;a href="https://en.wikipedia.org/wiki/Primeiro_Comando_da_Capital">PCC&lt;/a> runs PT (the Workers&amp;rsquo; Party), Lula and the country. 2/7 Supreme Court justices were PCC layers. PCC funds education for lawyers who become prosecutors and judges. &lt;span class="marginnote">Although Western media used it to attack Bolsonaro&lt;/span>Amazon &lt;a href="https://www.theguardian.com/world/2023/dec/27/mining-on-rise-again-in-amazon-says-yanomami-leader">deforestation&lt;/a> is PCC gold mining. They even &lt;a href="https://www.gp1.com.br/mundo/noticia/2023/11/12/membros-do-pcc-ajudam-hamas-a-construir-tuneis-e-ficam-presos-em-gaza-559457.html">built Hamas tunnels&lt;/a> in Gaza. And yet traditional industry flourishes both through both public and private companies (although PCC is more competitive for mathematicians than big finance.)&lt;/p>
&lt;p>What&amp;rsquo;s the nature of US security funding to other nations like Colombia? How effective is it?&lt;/p>
&lt;hr>
&lt;p>Relevant sources and books:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Air America: The Story of the CIA&amp;rsquo;s Secret Airlines&lt;/p>
&lt;/li>
&lt;li>
&lt;p>From Silver to Cocaine: Latin American Commodity Chains and the Building of the World Economy&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Syrian rebels arrest Italian mafia boss, hand him over to Italy &lt;a href="https://web.archive.org/web/20221206010003/https://english.enabbaladi.net/archives/2022/11/handing-over-italian-mafia-boss-tahrir-al-shams-security-assurances-to-west/">https://web.archive.org/web/20221206010003/https://english.enabbaladi.net/archives/2022/11/handing-over-italian-mafia-boss-tahrir-al-shams-security-assurances-to-west/&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Syria finances government on drugs: &lt;a href="https://web.archive.org/web/20221117081504/https://www.spectator.co.uk/article/how-syria-became-the-worlds-most-profitable-narco-state/">https://web.archive.org/web/20221117081504/https://www.spectator.co.uk/article/how-syria-became-the-worlds-most-profitable-narco-state/&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Netherlands is becoming a narco state: &lt;a href="https://www.bbc.com/news/world-europe-50821542">https://www.bbc.com/news/world-europe-50821542&lt;/a> and &lt;a href="https://unherd.com/2022/03/how-the-netherlands-became-a-narco-state/">https://unherd.com/2022/03/how-the-netherlands-became-a-narco-state/&lt;/a> Primarily seems to be scare-mongering about murder rates and gangs, threatening the state&amp;rsquo;s monopoly on violence. The government doesn&amp;rsquo;t seem to be infiltrated/working together like the typical examples.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Darkness at Dawn: The Rise of the Russian Criminal State&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Angels, Mobsters and Narco-Terrorists: The Rising Menace of Global Criminal Empires&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Opium, State and Society Chinas Narco-Economy and the Guomindang 1924-1937&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Guinea-Bussau: &lt;a href="https://www.theguardian.com/world/2008/mar/09/drugstrade">https://www.theguardian.com/world/2008/mar/09/drugstrade&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The Cuban Connection Drug Trafficking, Smuggling, and Gambling in Cuba from the 1920s to the Revolution&lt;/p>
&lt;/li>
&lt;/ul></content:encoded></item><item><title>The Future of Pro User Software</title><link>https://alexalejandre.com/programming/future-opensource-userland/</link><pubDate>Wed, 27 Sep 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/future-opensource-userland/</guid><description>Better abstractions and simpler environments will free our minds and creativity</description><content:encoded>&lt;p>I recently found &lt;a href="http://www.michaelmcthrow.com/">Michael McThrow&amp;rsquo;s&lt;/a> quote:&lt;/p>
&lt;blockquote>
&lt;p>Alan Kay&amp;rsquo;s Viewpoints Research Institute&amp;rsquo;s STEPS project from over a decade ago, which was a research project that attempted to build a modern desktop from the ground up with just 20,000 lines of code through the pervasive use of domain-specific languages for specifying layers of the system (see &lt;a href="https://tinlizzie.org/VPRIPapers/tr2012001_steps.pdf">https://tinlizzie.org/VPRIPapers/tr2012001_steps.pdf&lt;/a> for the final report). Software would be easier to maintain and extend if it were simpler; this, combined with component-based software design in a manner similar to Apple&amp;rsquo;s OpenDoc vision (&lt;a href="https://www.youtube.com/watch?v=oFJdjk2rq4E)">https://www.youtube.com/watch?v=oFJdjk2rq4E)&lt;/a>, is vital in my opinion for open-source projects that cannot compete directly against the Microsofts and Apples of the world for labor.&lt;/p>&lt;/blockquote>
&lt;p>We can see these ideas coalescing over a few years in his blog, which he actively explores through &lt;a href="https://mallowos.com/">MallowOS&lt;/a> (a Plan9 like) and covered in further detail &lt;a href="http://mmcthrow-musings.blogspot.com/2022/07/some-thoughts-about-future-of-linux.html">here&lt;/a> and &lt;a href="http://mmcthrow-musings.blogspot.com/2020/10/where-did-personal-computing-go-wrong.html">especially&lt;/a> His MallowOS&amp;rsquo;s component software approach is covered &lt;a href="https://mmcthrow-musings.blogspot.com/2020/04/a-proposal-for-flexible-composable.html">here&lt;/a> with similar ideas by &lt;a href="https://deprogrammaticaipsum.com/brad-cox/">Brad Cox&lt;/a> and &lt;a href="http://pchiusano.blogspot.com/2013/05/the-future-of-software-end-of-apps-and.html">Paul Chiusano&lt;/a>&lt;/p>
&lt;p>In another comment about &lt;a href="https://notes.volution.ro/v1/2023/09/remarks/64299f31/">Linux becoming a Windows/OSX clone&lt;/a> he writes:&lt;/p>
&lt;blockquote>
&lt;p>&amp;hellip;software systems become more complex over time, gradually deviating from the vision the original developers had. I believe the modern Linux ecosystem (Linux kernel, systemd, dbus, Wayland, GNOME/KDE, etc.) is almost unrecognizable from the Unix ecosystem of 30 years ago, let alone the quintessential classic v6 and v7 Unix systems from Bell Labs&amp;hellip; any system that isn’t guided by a “keeper of the vision” eventually becomes huge and complex, especially if it gets widespread use. For example, C++23 is far more than “C with classes.” Common Lisp is quite a beast compared to LISP 1.5.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>I think there’s value in a system that technical users could understand from top to bottom. This is what attracts me to small systems like Minix, Scheme, and Standard ML, just to name a few. However, I’m curious about how the complexity of big systems can be tamed.&lt;/p>&lt;/blockquote>
&lt;p>The same attracts me to Scheme, Go and homemade Forths.&lt;/p>
&lt;p>Going through Nand2Tetris, SICP, you feel like a magician, understanding the interactions of complex systems, tamed through beautiful abstractions. Rising further, you can explore Plan9 or various toy OSs but the complexity in modern production environments is seemingly insurmountable. (Just compare Plan9 (or indeed BSD) utilities to GNU, often 1/30th the length! Actually comprehensible!) &lt;span class="marginnote">Wir Moderne empfinden ja eine erbärmliche Geworfenheit&lt;/span> Thrown in the real world &lt;sup>TM&lt;/sup>, wrestling with production complexity (even not YAML), you get beaten down, eventually copypasting from internet guides, desperately taping sad things together, wallowing in our forefather&amp;rsquo;s original sin. &lt;span class="marginnote">Non posse non peccare&lt;/span>&lt;/p>
&lt;p>Seen practically, the crux around which any future User OS rotates is the web browser. Without this, Plan9 is not suitable for day to day use. But the complexity involved in this OS in an OS is beyond that of the OS itself.&lt;/p>
&lt;p>&lt;a href="https://github.com/serenityos/serenity">SerenityOS&amp;rsquo;&lt;/a> &lt;a href="https://ladybird.dev/">Ladybird browser&lt;/a> represents an interesting thrust here (also solidifying/validating the web specifications themselves, just as Go&amp;rsquo;s second implementation makes the spec the source of truth.) This effort represents the best effort at implementing the &lt;a href="https://tc39.es/ecma262/">ECMAScript&lt;/a>, &lt;a href="https://html.spec.whatwg.org/multipage/">HTML&lt;/a> and &lt;a href="https://www.w3.org/Style/CSS/specs.en.html">CSS&lt;/a> specifications more elegantly. Unfortunately, those technologies themselves are far from elegant and comprehensible.&lt;/p>
&lt;p>In their case, they focus on &lt;a href="https://awesomekling.substack.com/p/how-were-building-a-browser-when">vertical slices&lt;/a> instead of particular specs like: &amp;ldquo;let’s get login working on discord.com&amp;rdquo; leveraging the web&amp;rsquo;s graceful degradation: &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Graceful_degradation">https://developer.mozilla.org/en-US/docs/Glossary/Graceful_degradation&lt;/a>&lt;/p>
&lt;p>Potentially, Ladybird could be ported to another elegant OS, reimplementing its overall structure or using simpler utilities or a wine-like model. ???&lt;/p>
&lt;p>This would enable us to really use new Lisp OSs like &lt;a href="https://github.com/froggey/Mezzano">Mezzano&lt;/a>, Smalltalks like &lt;a href="https://github.com/nopsys/CogNOS">CogNOS&lt;/a>, &lt;a href="https://cuis.st/">Cuis&lt;/a> or &lt;a href="https://github.com/michaelengel/crosstalk">Crosstalk&lt;/a>, Oberon, 9Front etc. On the other hand, isn&amp;rsquo;t disconnecting from this JS infested Ad revenue driven hellscape the whole point?&lt;/p>
&lt;p>What are our personal workflows? What are we doing here on this computer anyway?&lt;/p></content:encoded></item><item><title>Open Standards</title><link>https://alexalejandre.com/programming/xmpp-open-messaging-standard/</link><pubDate>Sat, 16 Sep 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/xmpp-open-messaging-standard/</guid><description>Why did XMPP fail?</description><content:encoded>&lt;p>Long ago, the greybeards had an open messaging standard: XMPP. Alas, while big tech implemented it (FB Messenger, WhatsApp, Google Messenger all used XMPP), they locked their services down so you couldn&amp;rsquo;t connect them.&lt;/p>
&lt;p>&lt;a href="https://element.io/blog/interoperability-open-apis-are-a-start-open-standard-is-better-2/">Open APIs and standards are a start&lt;/a> but matter not, when perverse network &lt;span class="marginnote">Anticompetitive behaviors like burning capital to take market share with free offerings distort the ch market&lt;/span> effects drive antimarket outcomes. The current tech ecosystem&amp;rsquo;s a sad song of market failure. An open standard, once hoped, should drive competition, with market participants driving innovation and cost reduction. Alas, a near cartel strongarmed most competition away.&lt;/p>
&lt;p>Can regulation force big tech to open user data, enabling competition for the user&amp;rsquo;s benefit?&lt;/p>
&lt;p>Imagine exporting your contacts from FB, Whatsapp, Telegram in a usable format, you can important to another app (at your choosing!)&lt;/p>
&lt;p>Imagine not being forced to receive messages from FB on Instagram, imagine not being forced to give your phone number everywhere! (How do you feel receiving a text message from an E-Mail address?)&lt;/p>
&lt;p>Imagine a custom UI for Reddit, Twitter etc. (we once had Trillian, Pidgin&amp;hellip; a single app to use MSN, AIM&amp;hellip;) with its own search functions&amp;hellip;&lt;/p>
&lt;p>But do users really want this? &lt;a href="https://nothinghuman.substack.com/p/the-tyranny-of-the-marginal-user">Does Marl want this?&lt;/a>&lt;/p>
&lt;p>According to Google, no one used Google Talk&amp;rsquo;s federation capabilities besides spammers. The masses stay in pruned walled gardens. To Marl, it&amp;rsquo;s just confusing, to Google it was a hightened maintenance and antispam workload for no product benefit.&lt;/p>
&lt;p>Do we hackers overestimate people&amp;rsquo;s desire for open standards, for technology like federated systems? Perhaps. Perhaps it is our burden to force better products on the world, against the kicking and screaming of the masses.&lt;/p>
&lt;p>But perhaps we draw the wrong conclusions and ask the wrong questions. Perhaps standards require more than technical solutions, perhaps they&amp;rsquo;ve lacked the organizational finesse we can learn from the monopolies?&lt;/p>
&lt;p>A more rigid core standard, actively keeping up with new technology may have delivered XMPP&amp;rsquo;s federated dream. In reality, each sever supported a different feature set, while lacking common features every other chat app offered. As mobile technology transformed, XMPP stayed still. Pidgin worked on Google Talk, before an XEP brought (necessary) OIDC authentification and those 3rd-party clients couldn&amp;rsquo;t keep up.&lt;/p>
&lt;p>It seems it&amp;rsquo;s easier to control the app and its feature set, with its profitable tracking and ads. I don&amp;rsquo;t know the solution.&lt;/p>
&lt;hr>
&lt;p>Email too was &lt;a href="https://cfenollosa.com/blog/after-self-hosting-my-email-for-twenty-three-years-i-have-thrown-in-the-towel-the-oligopoly-has-won.html">made proprietary&lt;/a>, with individuals unable to selfhost anymore.&lt;/p>
&lt;p>Also see: &lt;a href="https://www.theregister.com/2018/04/13/apple_google_microsoft_and_mozilla_kick_w3c_to_the_curb/">https://www.theregister.com/2018/04/13/apple_google_microsoft_and_mozilla_kick_w3c_to_the_curb/&lt;/a>&lt;/p></content:encoded></item><item><title>Design Docs</title><link>https://alexalejandre.com/programming/design-docs/</link><pubDate>Tue, 25 Jul 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/design-docs/</guid><description>&lt;h3 id="oxide">Oxide&lt;/h3>
&lt;p>Oxide has very interesting Requests for &lt;a href="https://rfd.shared.oxide.computer/">Discussion&lt;/a> which seem just right.&lt;/p></description><content:encoded>&lt;h3 id="oxide">Oxide&lt;/h3>
&lt;p>Oxide has very interesting Requests for &lt;a href="https://rfd.shared.oxide.computer/">Discussion&lt;/a> which seem just right.&lt;/p>
&lt;h3 id="google">Google&lt;/h3>
&lt;p>Before starting a project, one originally wrote an informal document defining the design, documenting:&lt;/p>
&lt;ul>
&lt;li>implementation strategy (in terms of problem solving, not code!)&lt;/li>
&lt;li>key design decisions (esp. trade offs considered)&lt;/li>
&lt;/ul>
&lt;p>Structure not strict, but can include:&lt;/p>
&lt;ul>
&lt;li>context and scope&lt;/li>
&lt;li>goals, non-goals - what you want it to do, what you explicitly aren&amp;rsquo;t trying to do (e.g. don&amp;rsquo;t care about ACID)&lt;/li>
&lt;li>the design&lt;/li>
&lt;li>system context diagram - shows the system in the overall technical landscape (e.g. what services it context to)&lt;/li>
&lt;li>API, data storage - if it exposes an API, sketch it. Not formal definitions, but parts relevant to the design and trade offs&lt;/li>
&lt;li>constraints&lt;/li>
&lt;li>alternatives considered - which could achieve similar outcomes, focusing on tradeoffs informing the decision&lt;/li>
&lt;li>cross-cutting concerns - security, privacy, observability&amp;hellip;&lt;/li>
&lt;/ul>
&lt;p>Endeavor to challenge and share the doc, getting input until it&amp;rsquo;s stable. Then rapidly iterate the doc while implementing, noting what worked or failed, shortcomings, unaddressed requirements etc.&lt;/p>
&lt;p>Edited 7.5.24 in light of &lt;a href="https://news.ycombinator.com/item?id=40273534">https://news.ycombinator.com/item?id=40273534&lt;/a> : the promotion ecosystem at Google has long since become toxic, with overwrought design docs microoptimizing for promotion (along with the products they describe.) Nevertheless, keeping a good .md in a repo explaining the thought process &lt;em>actually&lt;/em> used is useful. (Issues appear when you performatively add irrelevant or fake details.)&lt;/p>
&lt;h3 id="amazon">Amazon&lt;/h3>
&lt;p>Six-pager and PR/FAQ formats&lt;/p>
&lt;blockquote>
&lt;p>Amazon uses writing to bias for action in meetings. Their culture has DRIs (or dictators) who have authority to make the call, with such authority coming with some level of accountability to the decision made. At Amazon the doc is read, parties discuss, and decision made. At Google the doc is rarely entirely read, mostly commented on, and no decision made until all stakeholders align on a commonly agreed direction.&lt;/p>
&lt;p>The amazon way is much less toxic, but does come with a need for writer to invest heavily on a high quality doc. Personally, the Amazon way is better but only works due to their peculiar culture.&lt;/p>&lt;/blockquote>
&lt;p>From: &lt;a href="https://justingarrison.com/blog/2021-03-15-the-document-culture-of-amazon/">https://justingarrison.com/blog/2021-03-15-the-document-culture-of-amazon/&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>A majority of my meetings start with reading a document. This takes “this meeting could have been…” and flips it upside down. &lt;strong>If there isn’t a doc there isn’t a meeting.&lt;/strong> Depending on the task, the document could be a six-pager, a PR/FAQ, a one-pager about an idea, a narrative to help find a solution to a problem, or even a service review full of charts, graphs and bullet points.&lt;/p>
&lt;p>Reading documents is so ingrained in our culture and process that our scheduling tools have check boxes to automatically create a document. If I’m catching up on a new service or feature launch, I will find the document rather than emailing or calling the product manager.&lt;/p>
&lt;p>The interesting part to me isn’t in the format of the document, but how it is used. Meetings start with reading. Depending on the length of the document, we’ll read anywhere from ten minutes to half an hour. If the meeting has a long document (six-pagers are the longest) and many attendees, the meeting will be scheduled for enough time to read and discuss.&lt;/p>
&lt;p>Reading the doc is part of the scheduled time. You are not expected to retain document information outside of the meeting.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>The discussions in meetings enable faster feedback loops, but the downside is they can limit the potential for asynchronous engagements if notes and questions aren’t captured in the document.&lt;/p>&lt;/blockquote></content:encoded></item><item><title>Colophon</title><link>https://alexalejandre.com/programming/colophon/</link><pubDate>Fri, 23 Jun 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/colophon/</guid><description>I overthought designing this blog.</description><content:encoded>&lt;p>Making a blog carries a lot of decisions. There are many layouts, article lengths etc. around. I overthink about all of them.&lt;/p>
&lt;h3 id="design">Design&lt;/h3>
&lt;p>I dislike modern web design (since ~2005, with minor exceptions like &lt;a href="https://tenorbiel.com/">https://tenorbiel.com/&lt;/a>) but I&amp;rsquo;m yet not transcendent enough to forego CSS like the greybeards nor cyberpunk enough for: &lt;a href="https://sive.rs/">https://sive.rs/&lt;/a> I considered these approaches:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>greybeard HTML 2.0 compliant &lt;span class="marginnote">life goals&lt;/span>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://piumarta.com/software/">https://piumarta.com/software/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://third-bit.com/cv/">https://third-bit.com/cv/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>minimal&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://susam.net">https://susam.net&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.evanmiller.org/">https://www.evanmiller.org/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://sive.rs/">https://sive.rs/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://wilw.dev/">https://wilw.dev/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.shido.info/index_e.php">https://www.shido.info/index_e.php&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://duckrabbit.tech/">https://duckrabbit.tech/&lt;/a> &lt;span class="marginnote">A business page!&lt;/span>&lt;/li>
&lt;li>&lt;a href="https://goodenough.us/">https://goodenough.us/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.quii.dev/My_job_advert_for_2023">https://www.quii.dev/My_job_advert_for_2023&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://simonsafar.com/">https://simonsafar.com/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>early 2000s data heavy&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://superkuh.com/">http://superkuh.com/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.seat61.com/">https://www.seat61.com/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>My current writing is unsuitable for &lt;a href="https://vfoley.xyz/reasonable-use/">greybeard style&lt;/a>. These days, I aim for succinctness, though oft tempted by rhetorical flourishes. I struggle to chain thoughts perfectly, while also skipping transitional phrases. &lt;span class="marginnote">this is why, as a result, indeed&amp;hellip;&lt;/span> Without enough text to fill up paragraphs, that style&amp;rsquo;d appear barren. But with my text size increased and the text field set in a narrow column, I&amp;rsquo;m forced to use even shorter paragraphs. A scaling down the font (particularly with justified text) results in a claustrophobic and blocky view, like a newspaper.&lt;/p>
&lt;p>Navigation is clearly an issue - some tell me the sidebar looks hideous. Considering aesthetics alone, moving the bar further to the left and omitting everything under the social media tags, might look nice, but how would articles be discoverable? The landing page could be a list of all article titles &lt;a href="https://vfoley.xyz/">https://vfoley.xyz/&lt;/a> with topic pages following the same mold. This feels dirty to me (at least for non-tech topics. Alas, a background of foxed, wilted paper wouldn&amp;rsquo;t match chunks of code other.) I worry about this because I always veer into exploratory writing, where collecting thoughts and evidence, coming up with a narrative which I write towards, before the writing process settles on something else, with me left unsure how to present the tangential insights along the way. I&amp;rsquo;ve not yet mastered building the final mosaic out of the gold nuggets I found on the way. I fear limiting myself to a certain form of displaying content creates another hurdle &lt;span class="marginnote">Good primitives and abstractions free you from accidental concerns.&lt;/span> (instead of freeing me from worry.)&lt;/p>
&lt;p>For the landing page, I originally described myself before moving it to an about page. &lt;a href="https://www.noyardstick.com/">https://www.noyardstick.com/&lt;/a> inspired me to forego anything but an article listing.&lt;/p>
&lt;p>I used hugo made my own theme, based on Tufte css, with partials for various features. CSS was a struggle, especially for presenting poetry. I should probably mark poetry pages separately to use their own CSS! (the functionality already exists for language). I totally disregarded mobile but since I like to have 4 windows (narrow columns) on my laptop, I did design for small screens.&lt;/p>
&lt;p>I attempted to use descriptive html/css but used aside for the sidebar with logo inside it, a violation. I also don&amp;rsquo;t use h# elements correctly, mostly defaulting to 3 because of how my Obsidian and vscode are configured. I actually did not utilize hugo&amp;rsquo;s language feature but implemented my own, because hugo seems to expect folders or content file names to define the language. At the moment, I only believe I&amp;rsquo;ll have poetry in other languages (for myself, so discoverability&amp;rsquo;s no issue.)&lt;/p>
&lt;p>I&amp;rsquo;ve used Astro and Gatsby at work and have made my own SSG toys, but opted for Hugo because I&amp;rsquo;m uncomfortable with the JS and Python ecosystems. Haskyll, Haunt, Coleslaw etc. are too fun, I kept it simple. Jamstack is both interesting and horrifying.&lt;/p>
&lt;h3 id="general">General&lt;/h3>
&lt;p>I am not writing towards a specific audience, and have 3/4 main topics which will split them. This is fine. (I reject choosing topics based on current trends, market research etc. as recomended &lt;a href="https://caisy.io/blog/how-to-write-technical-blog">here&lt;/a> and &lt;a href="https://medium.com/quark-works/tips-on-how-to-write-your-first-successful-technical-blog-4cb65e5b4ce4">there&lt;/a>)&lt;/p>
&lt;p>I am intentionally not including pictures, not SEO optimizing etc. I am a proponent of the small web.&lt;/p>
&lt;p>No analytics.&lt;/p>
&lt;p>Bash file CI/CD.&lt;/p>
&lt;p>I&amp;rsquo;m not sure how to deal with links/sources in case of them dying. Gwern clones everything and rehosts himself, which is a bit much. In most cases I just drop links, but a source section on the bottom could be nice. Perhaps it&amp;rsquo;s worth finding a way to add link descriptions with the title from markdown.&lt;/p>
&lt;p>I&amp;rsquo;m not sure how to balance different topics e.g. in the about page of book lists. (About poetic Alex. About software Alex&amp;hellip;?) The list of software books is already huge, let alone chemistry and math&amp;hellip;.&lt;/p>
&lt;p>Now a member of:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://250kb.club/page/2/">https://250kb.club/page/2/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://512kb.club/">https://512kb.club/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://1mb.club/">https://1mb.club/&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="performance">Performance&lt;/h3>
&lt;p>A friend hooked me up. Before any modification/optimization:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://pagespeed.web.dev/analysis/https-alexalejandre-com/zl5p453dbx?form_factor=desktop">https://pagespeed.web.dev/analysis/https-alexalejandre-com/zl5p453dbx?form_factor=desktop&lt;/a>
&lt;ul>
&lt;li>100% performance, 78% accessibility, 100% best practices, 80% seo&lt;/li>
&lt;li>33.5kb logo&lt;/li>
&lt;li>pages without code load 5.5kb of prism &lt;span class="marginnote">At this, I sigh at my friend for pushing me down this rabbit hole.&lt;/span>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Falexalejandre.com%2Fabout%2F">https://validator.w3.org/nu/?doc=https%3A%2F%2Falexalejandre.com%2Fabout%2F&lt;/a>
&lt;ul>
&lt;li>4 errors, 3 warnings and 2 info (apparently very good!)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>I did some minimal optimizations but will not do the following:&lt;/p>
&lt;ul>
&lt;li>logo element will stay in aside, due to css structure, which hurts accessibility. I won&amp;rsquo;t use divs.&lt;/li>
&lt;li>I will not make tap targets bigger for mobile friendly, used for SEO&lt;/li>
&lt;/ul>
&lt;p>This gives me:&lt;/p>
&lt;ul>
&lt;li>100% performance, 97% accessibility, 100% best practices, 87% SEO&lt;/li>
&lt;li>1 error, 2 warnings&lt;/li>
&lt;/ul>
&lt;p>A week later, I am now at 100% everything: &lt;a href="https://pagespeed.web.dev/analysis/https-alexalejandre-com-about/f5r4o19eq6?form_factor=desktop">https://pagespeed.web.dev/analysis/https-alexalejandre-com-about/f5r4o19eq6?form_factor=desktop&lt;/a>&lt;/p>
&lt;p>I found more:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://radar.cloudflare.com/scan/648df73a-9acd-44a4-94e2-63d97f3dc70e/summary">https://radar.cloudflare.com/scan/648df73a-9acd-44a4-94e2-63d97f3dc70e/summary&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://yellowlab.tools/result/gswb1hn8iq/screenshot">https://yellowlab.tools/result/gswb1hn8iq/screenshot&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="future-goals">Future Goals&lt;/h3>
&lt;p>In the future I should:&lt;/p>
&lt;ul>
&lt;li>try something like: &lt;a href="https://volutico.eu/">https://volutico.eu/&lt;/a>&lt;/li>
&lt;li>use h1-3 instead of only h3 for sections?&lt;/li>
&lt;li>weigh and consider: &lt;a href="http://www.rdrop.com/~half/Creations/Writings/Web.patterns/index.html#contentpatterns">http://www.rdrop.com/~half/Creations/Writings/Web.patterns/index.html#contentpatterns&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>Big Open Source</title><link>https://alexalejandre.com/programming/big-open-source-business/</link><pubDate>Tue, 23 May 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/big-open-source-business/</guid><description>&lt;p>tl;dr: Open source is a moat for big tech. &lt;a href="https://alexalejandre.com/programming/saas-propaganda/">SaaS&lt;/a> is the best startups can do right now.&lt;/p></description><content:encoded>&lt;p>tl;dr: Open source is a moat for big tech. &lt;a href="https://alexalejandre.com/programming/saas-propaganda/">SaaS&lt;/a> is the best startups can do right now.&lt;/p>
&lt;hr>
&lt;p>We all love open source (far better than 500 line DLLs with license codes). Our modern ecosystem offers accelerated innovation, transparency, security and all the good stuff. But there are problems today:&lt;/p>
&lt;ul>
&lt;li>Donating is easy, but people don&amp;rsquo;t want to pay &lt;span class="marginnote">The space is still developping. Thanks.dev looks best atm.&lt;/span> (and I criticize big tech when it &lt;a href="https://www.nytimes.com/2005/04/27/technology/open-wallets-for-opensource-software.html">finally&lt;/a> pays.)&lt;/li>
&lt;li>Corporate open source becomes a vendor onramp.&lt;/li>
&lt;li>The community shames selective licenses (AGPL/EUPL/Commons Clause) which limit larger entities from using without contribution. &lt;span class="marginnote">Relatedly, contributors often get brigaded by community entitlement and don&amp;rsquo;t say &amp;lsquo;No&amp;rsquo; enough.&lt;/span>&lt;/li>
&lt;/ul>
&lt;p>Today, profitable companies control decision making (what to add/exclude) in key projects, not the community. This gravity pulls projects towards extreme complexity, specialized for scale beyond what most companies will ever see - with all users paying the complexity burden. (Google&amp;rsquo;s &lt;a href="http://jeremy.zawodny.com/blog/archives/007112.html">code isn&amp;rsquo;t sufficient&lt;/a>.) In effect &lt;a href="https://alexalejandre.com/programming/anti-kubernetes-propaganda/">Kubernetes&lt;/a> et al. are memetic weapons, devouring mindshare and seducing the competition to lower velocity by overengineering and burning capital.&lt;/p>
&lt;p>Interesting dynamics play out between big companies though. While Amazon stripmines open source to make it consumable via AWS products/features, Google champions multicloud (Kubernetes), great for a new cloud provider fighting for marketshare (against platformlocking competition.)&lt;/p>
&lt;p>&lt;a href="https://chicagounbound.uchicago.edu/cgi/viewcontent.cgi?article=5221&amp;amp;context=uclrev">Standards setting&lt;/a> &lt;sup>1&lt;/sup> is another key battlefield. We already saw &lt;a href="https://alexalejandre.com/programming/xmpp-open-messaging-standard/">open standards&lt;/a> fail. Now, open source victors &lt;a href="https://op.europa.eu/en/publication-detail/-/publication/6521f427-01df-11ea-8c1f-01aa75ed71a1/language-en">standardize&lt;/a> &lt;sup>2&lt;/sup> domains on a single framework and API, a new sort of regulatory capture.&lt;/p>
&lt;p>There are some nice developments like EU organs praising open source as source of independence from American vendors or the German government moving to the Libre office suite, but this doesn&amp;rsquo;t result in funding to existing projects. Where we stand, the best a fan of a new company can do is emulate the big guys and try to capture its own space but &lt;a href="https://alexalejandre.com/programming/docker-company-death/">it doesn&amp;rsquo;t always work&lt;/a>.&lt;/p>
&lt;hr>
&lt;p>Update April 11, 2024: Cases like &lt;a href="https://opentofu.org/blog/our-response-to-hashicorps-cease-and-desist/">opentofu&lt;/a> illustrate a different dynamic with even larger startups, where defensive opensourcing leads to a free-beer alternative copypasting features on a 1:1 basis (after their move to business source.). We must wait to see whether this result in a crab bucket situation, dissuading new companies from open source, killing off Hashicorp&amp;rsquo;s investment and development of Terraform etc.
&lt;span class="marginnote">Opentofu issues show a request before HashiCorp&amp;rsquo;s implementation appeared, making this particular case less clear.&lt;/span>&lt;/p>
&lt;p>Updated April 11, 2024: &lt;a href="https://opentofu.org/blog/our-response-to-hashicorps-cease-and-desist/">Opentofu&lt;/a> poses a partial counterexample, where Hashicorp&amp;rsquo;s SaaS offering is scalped by a free-beer alternative emulating it on a 1:1 basis (in response to the move to business source.) If this keeps happening, we&amp;rsquo;ll have a crab bucket situation, dissuading new companies from open source, entirely. (I have no idea what that would do to today&amp;rsquo;s SaaS exosystem though.)
&lt;span class="marginnote">Opentofu issues show a request before HashiCorp&amp;rsquo;s implementation appeared, making this particular case less clear.&lt;/span>&lt;/p>
&lt;p>Updated April 27, 2024: Looking into it deeper, a clear picture&amp;rsquo;s already forming. Besides Hashicorp&amp;rsquo;s move to business source (and IBM buyout), Redis, MongoDB, Cockroach, Sentry etc. moved to source available&amp;hellip; When this happens, open forks appear.&lt;/p>
&lt;p>But who should operate and generate revenue from these open forks?&lt;/p>
&lt;hr>
&lt;h3 id="sources">Sources:&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>The Relationship Between Open Source Software and Standard Setting - Knut Blind, Mirko Böhm&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Standard-Setting Organizations: Patents, Price Fixing, and Per Se Legality - Patrick D. Curran&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://github.com/opentofu/opentofu/issues/299">https://github.com/opentofu/opentofu/issues/299&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul></content:encoded></item><item><title>Architecting Observability</title><link>https://alexalejandre.com/programming/architecting-metrics/</link><pubDate>Sun, 21 May 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/architecting-metrics/</guid><description>&lt;p>tl;dr: 10 construction workers stand and watch one man dig a hole, that&amp;rsquo;s the cloud today!&lt;/p></description><content:encoded>&lt;p>tl;dr: 10 construction workers stand and watch one man dig a hole, that&amp;rsquo;s the cloud today!&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/observability_chart.webp" alt="Peter Bourgon&amp;rsquo;s observability hart">&lt;/p>
&lt;p>&lt;a href="https://peter.bourgon.org/blog/2017/02/21/metrics-tracing-and-logging.html">Peter Bourgon&amp;rsquo;s&lt;/a> chart here defines common vocabulary to reason about observability data. I will only use &amp;ldquo;logging&amp;rdquo; and &amp;ldquo;metrics&amp;rdquo;.&lt;/p>
&lt;h2 id="in-code">In Code&lt;/h2>
&lt;p>When containerized, telemtry goes to stdout/stderr so ops can route it. This decouples it from processors, avoiding vendor lock in (so you can leave Datadog.) It also centralizes the logic, so different services don&amp;rsquo;t handle it (in haphazard ways.) Above all, the user should decide what to do with the logs.&lt;/p>
&lt;h2 id="in-business">In Business&lt;/h2>
&lt;p>Ignoring video streaming, logging operations represent the great majority (I&amp;rsquo;ve seen 80%) of generated data, requests, compute load etc. in a given (online) system.&lt;/p>
&lt;p>Logs make sense when they save more (dev hours etc.) than they cost (including future maitenance risks.) Spending $500 so a developer (paid $1000/day) solves a task in one day instead of two, makes sense. (We developers are a stingy lot, generally unwilling to pay for any tooling, no matter the productivity increase.)&lt;/p>
&lt;p>Logging is expensive. Vended logs are insanely expensive. Imagine millions of tiny requests, which each output multiple lines of logs, each packaged in a json object with their pod name, namespace etc. streamed to CloudWatch, Splunk, SumoLogic. &lt;span class="marginnote">N.b. Loki on EKS with S3 backend is relatively cheap.&lt;/span> &lt;span class="marginnote">Scalyr looks interesting too.&lt;/span>&lt;/p>
&lt;p>We must balance the following equation: &lt;code>(metric cost) = (eng. cost/hr) * (eng. hrs saved)&lt;/code> where &lt;code>(metric cost)&lt;/code> is &lt;code>(hardware cost) + (mateinance hours) * (engineer cost/hr)&lt;/code> and &lt;code>uncertainty + temptation to add features&lt;/code> &lt;span class="marginnote">Uncertainty in future hardware cost, maintenance hours, engineer salary, outages etc.&lt;/span> Mateinance hours are fairly static. Hardware costs are reasonably linear. To simplify this and remove uncertainty and temptation from the equation, SaaS providers higher rates per GB. At small scales, this makes sense (building such a pipeline for a company with 3 engineers won&amp;rsquo;t increase velocity enough) but quickly stops making sense from a purely financial perspective. The latter two impact an organization in contradictory, difficult-to-quantify ways. Instead of spending time on tooling, focusing on your core competency generates edge, but engaging with logs teaches engineers how to get the most out of them and spreads overall perspective into business matters.&lt;/p>
&lt;blockquote>
&lt;p>In 2022, Coinbase had 17 outages, totalling about 12 hours of downtime. The company’s daily average revenue is around $9M/day, based on their 2022 earnings.&lt;/p>&lt;/blockquote>
&lt;p>In Gergely Orosz&amp;rsquo; &lt;a href="https://blog.pragmaticengineer.com/datadog-65m-year-customer-mystery/">example&lt;/a>, assuming Datadog cuts outages in half and helps mitigate them 50% faster, without it these 12 hours&amp;rsquo;d become 36, so Datadog saved them $9M, for $10M.&lt;/p>
&lt;p>There are simpler ways though, e.g. simply aggregating everything into actionable metrics at the point of generation (like edge computing) before centralizing them (while saving historical log samples at different granularities.) Processing them yourself on prem e.g. with Graylog and elastic search clusters. &lt;span class="marginnote">3 nodes each to start&lt;/span> Disc space is cheap; we can ingest and store 1000 GBs for &lt;a href="https://shucks.top/">under $15&lt;/a>. &lt;span class="marginnote">We don&amp;rsquo;t need to back them up or persist for long.&lt;/span> We don&amp;rsquo;t have to wait for $2mm in spend before hiring a team.&lt;/p>
&lt;p>I&amp;rsquo;ve only been talking about developers. But good logs can:&lt;/p>
&lt;ul>
&lt;li>show product managers insights into user behavior&lt;/li>
&lt;li>help operations iagnose production issues&lt;/li>
&lt;li>detect security incidents and access patterns for security teams&lt;/li>
&lt;li>generate KPIs for the board (ROI, forecast budget needs)&lt;/li>
&lt;li>provide data for audits (compliance, data protection etc.)&lt;/li>
&lt;li>shed light on cost patterns in resource utilization&lt;/li>
&lt;li>increase developer velocity (information to fix bugs, spot bottlenecks etc.)&lt;/li>
&lt;/ul>
&lt;p>Turning passive logs into analytics, metrics, yea decisions demands concerted effort and engagement. The juice can be worth the squeeze (if you can keep costs between 5-10%), but beware for cargo culting &lt;a href="https://alexalejandre.com/programming/revolt-of-simple/">haunts our industry&lt;/a>.&lt;/p>
&lt;hr>
&lt;p>P.s. I&amp;rsquo;ll build anyone an on prem solution for 1/10th of what they currently spend, whose yearly cost should be even less than that.&lt;/p>
&lt;hr>
&lt;p>&lt;a href="https://goaccess.io/">https://goaccess.io/&lt;/a>&lt;/p></content:encoded></item><item><title>On Russian Verb Morphology</title><link>https://alexalejandre.com/languages/russian/russian-verbs/</link><pubDate>Thu, 13 Apr 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/russian/russian-verbs/</guid><description>This is for advanced learners.</description><content:encoded>&lt;p>Verbs have 3 stress patterns:&lt;/p>
&lt;ul>
&lt;li>a stem stressed&lt;/li>
&lt;li>b ending stressed&lt;/li>
&lt;li>c infin &amp;amp; first person singular endings stressed, otherwise stem&lt;/li>
&lt;/ul>
&lt;p>If unmarked, a verb is c. Note, as verb pairs may have 2 stems, / will separate the 2nd&amp;rsquo;s conjugation.&lt;/p>
&lt;h3 id="verbs-of-motion">Verbs of Motion&lt;/h3>
&lt;p>Verbs in -ти do not mutate in 1st person (несу́).&lt;/p>
&lt;style>
.flex-grid {
display: grid;
width: 80%;
margin: 1.4em 0;
border-right: none;
}
.flex-grid > div {
font-size: 1.2rem;
word-break: break-word;
padding: 0.2em 1em;
border-right: 1px solid var(--color-border-subtle);
}
.flex-grid > div.is-last-col {
border-right: none;
}
@media screen and (max-width: 760px) {
.flex-grid {
width: 100%;
}
}
&lt;/style>&lt;div class="flex-grid" style="grid-template-columns: 1fr 1fr 1fr;">&lt;div>ходи́ть&lt;/div>&lt;div>идти́&lt;/div>&lt;div class="is-last-col">go by foot&lt;/div>&lt;div>е́здить&lt;/div>&lt;div>е́хать&lt;/div>&lt;div class="is-last-col">go by vehicle&lt;/div>&lt;div>бе́гать&lt;/div>&lt;div>бежать&lt;/div>&lt;div class="is-last-col">run / c егу́, жи́шь&lt;/div>&lt;div>лета́ть&lt;/div>&lt;div>лете́ть&lt;/div>&lt;div class="is-last-col">fly&lt;/div>&lt;div>носи́ть&lt;/div>&lt;div>нести&lt;/div>&lt;div class="is-last-col">carry c&lt;/div>&lt;div>вози́ть&lt;/div>&lt;div>везти́&lt;/div>&lt;div class="is-last-col">transport&lt;/div>&lt;div>води́ть&lt;/div>&lt;div>вести́&lt;/div>&lt;div class="is-last-col">lead c / ду́, дёшь&lt;/div>&lt;div>пла́вать&lt;/div>&lt;div>плыть&lt;/div>&lt;div class="is-last-col">swim / ывёшь&lt;/div>&lt;div>ла́зить&lt;/div>&lt;div>лезть&lt;/div>&lt;div class="is-last-col">climb е́зу, ешь&lt;/div>&lt;div>по́лзать&lt;/div>&lt;div>ползти́&lt;/div>&lt;div class="is-last-col">crawl / зёщь&lt;/div>&lt;div>таска́ть&lt;/div>&lt;div>тащить&lt;/div>&lt;div class="is-last-col">drag / c&lt;/div>&lt;div>ката́ть&lt;/div>&lt;div>кати́ть&lt;/div>&lt;div class="is-last-col">roll / c&lt;/div>&lt;div>гоня́ть&lt;/div>&lt;div>гнать&lt;/div>&lt;div class="is-last-col">chase / c оню́, о́нишь&lt;/div>&lt;div>броди́ть&lt;/div>&lt;div>брести́&lt;/div>&lt;div class="is-last-col">wander еду́, дёшь&lt;/div>&lt;/div>
&lt;p>Motion prefixes
&lt;style>
.flex-grid {
display: grid;
width: 80%;
margin: 1.4em 0;
border-right: none;
}
.flex-grid > div {
font-size: 1.2rem;
word-break: break-word;
padding: 0.2em 1em;
border-right: 1px solid var(--color-border-subtle);
}
.flex-grid > div.is-last-col {
border-right: none;
}
@media screen and (max-width: 760px) {
.flex-grid {
width: 100%;
}
}
&lt;/style>&lt;div class="flex-grid" style="grid-template-columns: 1fr 1fr 1fr;">&lt;div>от&lt;/div>&lt;div>от&lt;/div>&lt;div class="is-last-col">away&lt;/div>&lt;div>у&lt;/div>&lt;div>из/с/от&lt;/div>&lt;div class="is-last-col">leave from&lt;/div>&lt;div>вы&lt;/div>&lt;div>из&lt;/div>&lt;div class="is-last-col">exit/out of&lt;/div>&lt;div>под&lt;/div>&lt;div>к&lt;/div>&lt;div class="is-last-col">approach&lt;/div>&lt;div>при&lt;/div>&lt;div>в/на/к&lt;/div>&lt;div class="is-last-col">arrive&lt;/div>&lt;div>пере&lt;/div>&lt;div>через ̵ cross&lt;/div>&lt;div class="is-last-col">&lt;/div>&lt;div>за&lt;/div>&lt;div>к&lt;/div>&lt;div class="is-last-col">call on, visit, stop by (on the way)&lt;/div>&lt;div>про&lt;/div>&lt;div>через&lt;/div>&lt;div class="is-last-col">go through&lt;/div>&lt;div>‎&lt;/div>&lt;div>мимо&lt;/div>&lt;div class="is-last-col">past&lt;/div>&lt;div>по&lt;/div>&lt;div>along&lt;/div>&lt;div class="is-last-col">&lt;/div>&lt;div>в&lt;/div>&lt;div>в&lt;/div>&lt;div class="is-last-col">enter&lt;/div>&lt;div>до- до&lt;/div>&lt;div>reach/up to/as far as&lt;/div>&lt;div class="is-last-col">&lt;/div>&lt;div>с&lt;/div>&lt;div>с + gen&lt;/div>&lt;div class="is-last-col">down/off (bus)&lt;/div>&lt;div>‎&lt;/div>&lt;div>за + int&lt;/div>&lt;div class="is-last-col">fetch/get and return&lt;/div>&lt;div>об&lt;/div>&lt;div>‎&lt;/div>&lt;div class="is-last-col">around/about&lt;/div>&lt;div>по&lt;/div>&lt;div>в/на&lt;/div>&lt;div class="is-last-col">set off for&lt;/div>&lt;div>в(о)з&lt;/div>&lt;div>в&lt;/div>&lt;div class="is-last-col">upwards&lt;/div>&lt;div>раз (ся)&lt;/div>&lt;div>‎&lt;/div>&lt;div class="is-last-col">out from a spot, disperse&lt;/div>&lt;div>с (ся)&lt;/div>&lt;div>‎&lt;/div>&lt;div class="is-last-col">to a spot/converge&lt;/div>&lt;/div>&lt;/p>
&lt;ul>
&lt;li>здесь столько интересного, что не́когда писать&lt;/li>
&lt;li>он шёл к/на мне/меня&lt;/li>
&lt;li>зайди в комнату - come over here/inside&lt;/li>
&lt;li>я отвёл ее туда - took/dropped off&lt;/li>
&lt;li>я исходил весь город - walked around the whole city&lt;/li>
&lt;li>я наездил 50 км - I covered 50 km&lt;/li>
&lt;li>отлетаемся - depart&lt;/li>
&lt;li>спуска́ться/-усти́ться - descend (more common than с-)&lt;/li>
&lt;li>взбыра́ться/взобраться - climb up&lt;/li>
&lt;li>збыраться/-браться - get in&lt;/li>
&lt;li>пробыраться/-браться - get in secretly/with effort&lt;/li>
&lt;/ul>
&lt;p>N.b.&lt;/p>
&lt;p>unidirectional verb&lt;/p>
&lt;ul>
&lt;li>по + - set off&lt;/li>
&lt;/ul>
&lt;p>multi directional verb&lt;/p>
&lt;ul>
&lt;li>по - a little&lt;/li>
&lt;li>с - one round trip&lt;/li>
&lt;li>из - walk around&lt;/li>
&lt;li>на - cover a distance&lt;/li>
&lt;/ul>
&lt;p>When prefixed, some have different stems:&lt;/p>
&lt;ul>
&lt;li>пла́ва - плы́вать&lt;/li>
&lt;li>ла́зить - лезать&lt;/li>
&lt;li>по́лзать - полза́ть&lt;/li>
&lt;li>таска́ть - та́скивать&lt;/li>
&lt;li>ката́ть - ка́тывать&lt;/li>
&lt;li>броди́ть - бреда́ть&lt;/li>
&lt;/ul>
&lt;h3 id="irregular-verbs">Irregular verbs&lt;/h3>
&lt;p>Some have different stress pattern in the past.&lt;/p>
&lt;p>1st conjugation (-у, -ешь)&lt;/p>
&lt;ul>
&lt;li>лечь - lie down ля́гу, жешь&lt;/li>
&lt;li>жечь - burn - жгу, жжёшь&lt;/li>
&lt;li>начать - начнёшь&lt;/li>
&lt;li>стать ста́ну&lt;/li>
&lt;li>жить живёшь&lt;/li>
&lt;li>прочесть чтёшь&lt;/li>
&lt;li>мять - crumple мну, мнёшь&lt;/li>
&lt;li>(о)деть дене́шь&lt;/li>
&lt;li>отпереть - unlock - отопрёшь&lt;/li>
&lt;li>умибить - hurt/bruise ёшь&lt;/li>
&lt;/ul>
&lt;h3 id="1st-conjugation">1st conjugation&lt;/h3>
&lt;p>Change vowel in pres/imp, past part. in -тый:&lt;/p>
&lt;ul>
&lt;li>ию́, иёшь
&lt;ul>
&lt;li>чить - rest/die&lt;/li>
&lt;li>гнить - rot&lt;/li>
&lt;li>брить - shave -е́ю, ешь&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ою, ешь, a stress pattern
&lt;ul>
&lt;li>петь - b -ёшь&lt;/li>
&lt;li>выть&lt;/li>
&lt;li>крыть&lt;/li>
&lt;li>мыть&lt;/li>
&lt;li>ныть - grieve&lt;/li>
&lt;li>рыть - dig&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ьёшь, с- and в- add о when conjugated: волью
&lt;ul>
&lt;li>шить&lt;/li>
&lt;li>пить&lt;/li>
&lt;li>лить - pour&lt;/li>
&lt;li>вить - twist&lt;/li>
&lt;li>бить&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Weird, imp. is 1st и, past part. in -нный:&lt;/p>
&lt;ul>
&lt;li>здать - build зи́жду&lt;/li>
&lt;li>лгать - lie лгу, лжёшь&lt;/li>
&lt;li>слать - send шлю, шлёшь&lt;/li>
&lt;li>стлать - spread сте́лю, ещь&lt;/li>
&lt;li>ткать - weave тку, ткёшь&lt;/li>
&lt;/ul>
&lt;p>Vowel insertion:&lt;/p>
&lt;ul>
&lt;li>брать - take беру́, ёшь&lt;/li>
&lt;li>звать - call зову́, ёшь&lt;/li>
&lt;li>драть - tear деру́, ёшь&lt;/li>
&lt;li>гнать - chase оню́, о́нешь&lt;/li>
&lt;/ul>
&lt;p>Lose -ать:&lt;/p>
&lt;ul>
&lt;li>ора́ть - plow ёшь&lt;/li>
&lt;li>та́ять - thaw&lt;/li>
&lt;li>се́ять - sow&lt;/li>
&lt;/ul>
&lt;p>Lose -ват, е́шьь:&lt;/p>
&lt;ul>
&lt;li>знава́ть&lt;/li>
&lt;li>дава́ть&lt;/li>
&lt;li>става́ть&lt;/li>
&lt;/ul>
&lt;p>нуть disappears in past&lt;/p>
&lt;ul>
&lt;li>со́хнуть - dry&lt;/li>
&lt;li>бу́хнуть&lt;/li>
&lt;/ul>
&lt;h3 id="2nd-conjugation">2nd conjugation&lt;/h3>
&lt;p>д з к с т ст ск х before -ать become ж ч ш щ:&lt;/p>
&lt;ul>
&lt;li>in all persons:
&lt;ul>
&lt;li>лиза́ть - lick ж&lt;/li>
&lt;li>кли́кать - call ч&lt;/li>
&lt;li>писа́ть - write ш&lt;/li>
&lt;li>топтать - tread чу́, ешь&lt;/li>
&lt;li>искать - search ищу́, ешь&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>only in the first pers (for ить/еть)
&lt;ul>
&lt;li>верте́ть - turn ч&lt;/li>
&lt;li>сиде́ть - ж&lt;/li>
&lt;li>висе́ть - hang ш&lt;/li>
&lt;li>крути́ть - twist ч&lt;/li>
&lt;li>льстиь - flatter щ&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>ереть -&amp;gt; ру, рёшь past in ёр:&lt;/p>
&lt;ul>
&lt;li>тере́ть - rub&lt;/li>
&lt;li>мере́ть - die&lt;/li>
&lt;li>умере́ть - die у́мер&lt;/li>
&lt;/ul>
&lt;h3 id="various-forms">Various forms&lt;/h3>
&lt;p>Collouquial pres gerund in учи not я&lt;/p>
&lt;p>читая or читаючи
пиша́ пи́шучи&lt;/p>
&lt;p>past participle adds -ши in speech
читавши&lt;/p>
&lt;p>Pres active part. 3rd pl. т-&amp;gt;щий
пи́шущий
читающий&lt;/p>
&lt;p>2nd conjugation
стоять бояться
чтить - honor чту, чтишь, чтут (or чтят)&lt;/p>
&lt;p>реве́ть - yell ёшь&lt;/p></content:encoded></item><item><title>Taming Russian Word Stress</title><link>https://alexalejandre.com/languages/taming-russian-word-stress/</link><pubDate>Mon, 20 Mar 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/taming-russian-word-stress/</guid><description>This is for advanced learners.</description><content:encoded>&lt;h3 id="noun-stress-groups">Noun Stress Groups&lt;/h3>
&lt;p>Андрей Зализня́к tamed the Russian stress system into 10 patterns, a-f with 4 variants. In the singular, a, c, e have stem stress, b, d, f ending stress. For the plural, A, b share the singular&amp;rsquo;s, c, d switch, e, f stress the ending, except in nom. pl. Variants stress the sg. ending, except d&amp;rsquo;, f&amp;rsquo; for acc. sg. and b&amp;rsquo;, f&amp;rsquo;&amp;rsquo; for inst. sg.&lt;/p>
&lt;p>Common words are more likely to change, but you can predict stresses from the nominative form for most nouns and &amp;ldquo;simply&amp;rdquo; memorize the few hundred exceptions (where a number of nouns is given below, instead of rules). e has 2/3 of all exceptions. c is half of the rest.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>neut. no e/f&lt;/p>
&lt;ul>
&lt;li>c -мя, 20 nouns&lt;/li>
&lt;li>b 2+ syllable nouns in -ство, -ко, -цо, -ие&lt;/li>
&lt;li>d end stress not in the above + 7 nouns&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>fem. no e/c&lt;/p>
&lt;ul>
&lt;li>a most&lt;/li>
&lt;li>b -ня́, some others (all end stressed)&lt;/li>
&lt;li>d the rest in -а́, all -ота́, ина́ + 3 nouns&lt;/li>
&lt;li>f 15 nouns&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>masc. no d&lt;/p>
&lt;ul>
&lt;li>c а́ plural, 60 1-sylb. nouns&lt;/li>
&lt;li>e 30 nouns&lt;/li>
&lt;li>f 3 nouns&lt;/li>
&lt;li>b 100 nouns, -ец, ́-ч, -ёж, -аш, ́-рь, -у́н, most -ук, -ак, -ик&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>neut&lt;/p>
&lt;ul>
&lt;li>f плечо, крыльцо́&lt;/li>
&lt;li>e о́ко, у́хо&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h5 id="c">C&lt;/h5>
&lt;p>sg. stem, pl. end&lt;/p>
&lt;p>Neuter in -мя
Masc. pl. in -а́
&lt;style>
.vocab-container {
display: grid;
grid-template-columns: 1fr 1fr;
font-size: 1.25rem;
width: 90%
}
.vocab-column:last-child {
border-left: 1px solid #e0e0e0;
}
.vocab-column {
display: grid;
grid-template-columns: 1fr 1fr;
align-content: start;
}
.vocab-term, .vocab-definition {
text-align:left;
padding: 0.05em 0.25em;
word-break: break-word;
display: flex;
align-items: center;
word-break: break-word;
}
@media (min-width: 900px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr;
}
}
@media (min-width: 1300px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
}
&lt;/style>&lt;div id="vocab-328945716" class="vocab-container">
&lt;div class="vocab-column">&lt;div class="vocab-term">войско&lt;/div>&lt;div class="vocab-term">дело&lt;/div>&lt;div class="vocab-term">место&lt;/div>&lt;div class="vocab-term">море&lt;/div>&lt;div class="vocab-term">мыло&lt;/div>&lt;div class="vocab-term">небо&lt;/div>&lt;div class="vocab-term">поле&lt;/div>&lt;div class="vocab-term">право&lt;/div>&lt;div class="vocab-term">серлце&lt;/div>&lt;div class="vocab-term">слово&lt;/div>&lt;div class="vocab-term">стадо&lt;/div>&lt;div class="vocab-term">судно&lt;/div>&lt;div class="vocab-term">тело&lt;/div>&lt;div class="vocab-term">чудо&lt;/div>&lt;div class="vocab-term">зеркало&lt;/div>&lt;div class="vocab-term">деревце&lt;/div>&lt;div class="vocab-term">облако&lt;/div>&lt;div class="vocab-term">облачко&lt;/div>&lt;/div>
&lt;div class="vocab-column">&lt;div class="vocab-definition">army&lt;/div>&lt;div class="vocab-definition">matter&lt;/div>&lt;div class="vocab-definition">place&lt;/div>&lt;div class="vocab-definition">sea&lt;/div>&lt;div class="vocab-definition">soap&lt;/div>&lt;div class="vocab-definition">sky&lt;/div>&lt;div class="vocab-definition">field&lt;/div>&lt;div class="vocab-definition">right&lt;/div>&lt;div class="vocab-definition">heart&lt;/div>&lt;div class="vocab-definition">word&lt;/div>&lt;div class="vocab-definition">herd&lt;/div>&lt;div class="vocab-definition">ship&lt;/div>&lt;div class="vocab-definition">body&lt;/div>&lt;div class="vocab-definition">wonder&lt;/div>&lt;div class="vocab-definition">mirror&lt;/div>&lt;div class="vocab-definition">treelet&lt;/div>&lt;div class="vocab-definition">cloud&lt;/div>&lt;div class="vocab-definition">cloudlet&lt;/div>&lt;/div>
&lt;/div>&lt;script>
(function() {
function alignVocabRows(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const terms = container.querySelectorAll('.vocab-term');
const definitions = container.querySelectorAll('.vocab-definition');
for (let i = 0; i &lt; terms.length; i++) {
if (terms[i]) terms[i].style.minHeight = '0';
if (definitions[i]) definitions[i].style.minHeight = '0';
}
const count = Math.min(terms.length, definitions.length);
for (let i = 0; i &lt; count; i++) {
const termEl = terms[i];
const defEl = definitions[i];
const termHeight = termEl.offsetHeight;
const defHeight = defEl.offsetHeight;
const maxHeight = Math.max(termHeight, defHeight);
termEl.style.minHeight = maxHeight + 'px';
defEl.style.minHeight = maxHeight + 'px';
}
}
function debounce(func, wait = 20, immediate = false) {
let timeout;
return function() {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate &amp;&amp; !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
const containerId = 'vocab-328945716';
document.addEventListener('DOMContentLoaded', function() {
alignVocabRows(containerId);
});
window.addEventListener('resize', debounce(() => alignVocabRows(containerId), 100));
})();
&lt;/script>&lt;/p>
&lt;p>60 masc 1. syllable nouns&lt;/p>
&lt;style>
.vocab-container {
display: grid;
grid-template-columns: 1fr 1fr;
font-size: 1.25rem;
width: 90%
}
.vocab-column:last-child {
border-left: 1px solid #e0e0e0;
}
.vocab-column {
display: grid;
grid-template-columns: 1fr 1fr;
align-content: start;
}
.vocab-term, .vocab-definition {
text-align:left;
padding: 0.05em 0.25em;
word-break: break-word;
display: flex;
align-items: center;
word-break: break-word;
}
@media (min-width: 900px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr;
}
}
@media (min-width: 1300px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
}
&lt;/style>&lt;div id="vocab-256871934" class="vocab-container">
&lt;div class="vocab-column">&lt;div class="vocab-term">бал&lt;/div>&lt;div class="vocab-term">бас&lt;/div>&lt;div class="vocab-term">бой&lt;/div>&lt;div class="vocab-term">бор&lt;/div>&lt;div class="vocab-term">буй&lt;/div>&lt;div class="vocab-term">вал&lt;/div>&lt;div class="vocab-term">верх&lt;/div>&lt;div class="vocab-term">воз&lt;/div>&lt;div class="vocab-term">гол&lt;/div>&lt;div class="vocab-term">гроб&lt;/div>&lt;div class="vocab-term">дар&lt;/div>&lt;div class="vocab-term">долг&lt;/div>&lt;div class="vocab-term">дуб&lt;/div>&lt;div class="vocab-term">дым&lt;/div>&lt;div class="vocab-term">жир&lt;/div>&lt;div class="vocab-term">зад&lt;/div>&lt;div class="vocab-term">зод&lt;/div>&lt;div class="vocab-term">пар&lt;/div>&lt;div class="vocab-term">пай&lt;/div>&lt;div class="vocab-term">паз&lt;/div>&lt;div class="vocab-term">нос&lt;/div>&lt;div class="vocab-term">низ&lt;/div>&lt;div class="vocab-term">муж&lt;/div>&lt;div class="vocab-term">мозг&lt;/div>&lt;div class="vocab-term">мир&lt;/div>&lt;div class="vocab-term">мёд&lt;/div>&lt;div class="vocab-term">мех&lt;/div>&lt;div class="vocab-term">лес&lt;/div>&lt;div class="vocab-term">лад&lt;/div>&lt;div class="vocab-term">кус&lt;/div>&lt;div class="vocab-term">круг&lt;/div>&lt;div class="vocab-term">кон&lt;/div>&lt;div class="vocab-term">квас&lt;/div>&lt;div class="vocab-term">пир&lt;/div>&lt;div class="vocab-term">плуг&lt;/div>&lt;div class="vocab-term">пол&lt;/div>&lt;div class="vocab-term">пот&lt;/div>&lt;div class="vocab-term">приз&lt;/div>&lt;div class="vocab-term">пуд&lt;/div>&lt;div class="vocab-term">пук&lt;/div>&lt;div class="vocab-term">раз&lt;/div>&lt;div class="vocab-term">ряд&lt;/div>&lt;div class="vocab-term">сад&lt;/div>&lt;div class="vocab-term">след&lt;/div>&lt;div class="vocab-term">слой&lt;/div>&lt;div class="vocab-term">спирт&lt;/div>&lt;div class="vocab-term">суп&lt;/div>&lt;div class="vocab-term">сыр&lt;/div>&lt;div class="vocab-term">таз&lt;/div>&lt;div class="vocab-term">торг&lt;/div>&lt;div class="vocab-term">штаб&lt;/div>&lt;div class="vocab-term">шкаф&lt;/div>&lt;div class="vocab-term">шар&lt;/div>&lt;div class="vocab-term">шаг&lt;/div>&lt;div class="vocab-term">чуб&lt;/div>&lt;div class="vocab-term">чин&lt;/div>&lt;div class="vocab-term">чан&lt;/div>&lt;div class="vocab-term">чай&lt;/div>&lt;div class="vocab-term">хор&lt;/div>&lt;div class="vocab-term">харч&lt;/div>&lt;div class="vocab-term">фронт&lt;/div>&lt;div class="vocab-term">форт&lt;/div>&lt;div class="vocab-term">ус&lt;/div>&lt;div class="vocab-term">тыл&lt;/div>&lt;/div>
&lt;div class="vocab-column">&lt;div class="vocab-definition">ball/dance&lt;/div>&lt;div class="vocab-definition">bass (voice/singer)&lt;/div>&lt;div class="vocab-definition">battle/striking&lt;/div>&lt;div class="vocab-definition">pine forest&lt;/div>&lt;div class="vocab-definition">buoy&lt;/div>&lt;div class="vocab-definition">cylinder (roller/shaft), heap&lt;/div>&lt;div class="vocab-definition">top&lt;/div>&lt;div class="vocab-definition">cart&lt;/div>&lt;div class="vocab-definition">goal&lt;/div>&lt;div class="vocab-definition">coffin/grave&lt;/div>&lt;div class="vocab-definition">gift, talent&lt;/div>&lt;div class="vocab-definition">duty, debt&lt;/div>&lt;div class="vocab-definition">oak&lt;/div>&lt;div class="vocab-definition">smoke&lt;/div>&lt;div class="vocab-definition">fat&lt;/div>&lt;div class="vocab-definition">back&lt;/div>&lt;div class="vocab-definition">bird&amp;#39;s mouth pouch&lt;/div>&lt;div class="vocab-definition">steam&lt;/div>&lt;div class="vocab-definition">share/stock&lt;/div>&lt;div class="vocab-definition">grove/slot&lt;/div>&lt;div class="vocab-definition">nose&lt;/div>&lt;div class="vocab-definition">bottom&lt;/div>&lt;div class="vocab-definition">man&lt;/div>&lt;div class="vocab-definition">brain&lt;/div>&lt;div class="vocab-definition">world&lt;/div>&lt;div class="vocab-definition">honey&lt;/div>&lt;div class="vocab-definition">fur/sack&lt;/div>&lt;div class="vocab-definition">forest&lt;/div>&lt;div class="vocab-definition">way/manner, harmony&lt;/div>&lt;div class="vocab-definition">bit/piece&lt;/div>&lt;div class="vocab-definition">circle&lt;/div>&lt;div class="vocab-definition">round (game)&lt;/div>&lt;div class="vocab-definition">kvas&lt;/div>&lt;div class="vocab-definition">feast&lt;/div>&lt;div class="vocab-definition">plow&lt;/div>&lt;div class="vocab-definition">floow&lt;/div>&lt;div class="vocab-definition">sweat&lt;/div>&lt;div class="vocab-definition">prize&lt;/div>&lt;div class="vocab-definition">~16kg, percent&lt;/div>&lt;div class="vocab-definition">bounch&lt;/div>&lt;div class="vocab-definition">a time&lt;/div>&lt;div class="vocab-definition">row/series&lt;/div>&lt;div class="vocab-definition">garden&lt;/div>&lt;div class="vocab-definition">trace/trail&lt;/div>&lt;div class="vocab-definition">layer&lt;/div>&lt;div class="vocab-definition">booze&lt;/div>&lt;div class="vocab-definition">soup&lt;/div>&lt;div class="vocab-definition">cheese&lt;/div>&lt;div class="vocab-definition">basin, pelvis&lt;/div>&lt;div class="vocab-definition">bazar, haggling&lt;/div>&lt;div class="vocab-definition">staff, HQ&lt;/div>&lt;div class="vocab-definition">cupboard, bookcase&lt;/div>&lt;div class="vocab-definition">ball, sphere&lt;/div>&lt;div class="vocab-definition">step&lt;/div>&lt;div class="vocab-definition">bangs&lt;/div>&lt;div class="vocab-definition">rank&lt;/div>&lt;div class="vocab-definition">tub/tank&lt;/div>&lt;div class="vocab-definition">tea&lt;/div>&lt;div class="vocab-definition">chorus&lt;/div>&lt;div class="vocab-definition">grub&lt;/div>&lt;div class="vocab-definition">front (mil.)&lt;/div>&lt;div class="vocab-definition">fort&lt;/div>&lt;div class="vocab-definition">whisker, musstache&lt;/div>&lt;div class="vocab-definition">rear&lt;/div>&lt;/div>
&lt;/div>&lt;script>
(function() {
function alignVocabRows(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const terms = container.querySelectorAll('.vocab-term');
const definitions = container.querySelectorAll('.vocab-definition');
for (let i = 0; i &lt; terms.length; i++) {
if (terms[i]) terms[i].style.minHeight = '0';
if (definitions[i]) definitions[i].style.minHeight = '0';
}
const count = Math.min(terms.length, definitions.length);
for (let i = 0; i &lt; count; i++) {
const termEl = terms[i];
const defEl = definitions[i];
const termHeight = termEl.offsetHeight;
const defHeight = defEl.offsetHeight;
const maxHeight = Math.max(termHeight, defHeight);
termEl.style.minHeight = maxHeight + 'px';
defEl.style.minHeight = maxHeight + 'px';
}
}
function debounce(func, wait = 20, immediate = false) {
let timeout;
return function() {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate &amp;&amp; !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
const containerId = 'vocab-256871934';
document.addEventListener('DOMContentLoaded', function() {
alignVocabRows(containerId);
});
window.addEventListener('resize', debounce(() => alignVocabRows(containerId), 100));
})();
&lt;/script>
&lt;p>n.b. ряд, шаг, шар, час (and полоз) may have gen. sg. in -а́ with the numbers 2,3,4. This is the paucal case.&lt;/p>
&lt;h1 id="d">D&lt;/h1>
&lt;p>Sg. end stress, pl. stem stress&lt;/p>
&lt;p>Fem - most 2-syllables with stressed -а́, all in - о́та, ина́
Neut - end stress not in -ство, ко, цо, ьё, ие (which are b)&lt;/p>
&lt;style>
.vocab-container {
display: grid;
grid-template-columns: 1fr 1fr;
font-size: 1.25rem;
width: 90%
}
.vocab-column:last-child {
border-left: 1px solid #e0e0e0;
}
.vocab-column {
display: grid;
grid-template-columns: 1fr 1fr;
align-content: start;
}
.vocab-term, .vocab-definition {
text-align:left;
padding: 0.05em 0.25em;
word-break: break-word;
display: flex;
align-items: center;
word-break: break-word;
}
@media (min-width: 900px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr;
}
}
@media (min-width: 1300px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
}
&lt;/style>&lt;div id="vocab-932758416" class="vocab-container">
&lt;div class="vocab-column">&lt;div class="vocab-term">колбаса́&lt;/div>&lt;div class="vocab-term">скропула́&lt;/div>&lt;div class="vocab-term">стрекоза́&lt;/div>&lt;div class="vocab-term">дно&lt;/div>&lt;div class="vocab-term">меньшинство́&lt;/div>&lt;div class="vocab-term">лицо́&lt;/div>&lt;div class="vocab-term">кольцо́&lt;/div>&lt;div class="vocab-term">копьё&lt;/div>&lt;div class="vocab-term">ружьё&lt;/div>&lt;div class="vocab-term">яйцо́&lt;/div>&lt;/div>
&lt;div class="vocab-column">&lt;div class="vocab-definition">sausage&lt;/div>&lt;div class="vocab-definition">eggshell&lt;/div>&lt;div class="vocab-definition">dragonfly&lt;/div>&lt;div class="vocab-definition">bottom (pl. до́лья)&lt;/div>&lt;div class="vocab-definition">minority&lt;/div>&lt;div class="vocab-definition">face&lt;/div>&lt;div class="vocab-definition">ring&lt;/div>&lt;div class="vocab-definition">spear&lt;/div>&lt;div class="vocab-definition">gun&lt;/div>&lt;div class="vocab-definition">egg&lt;/div>&lt;/div>
&lt;/div>&lt;script>
(function() {
function alignVocabRows(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const terms = container.querySelectorAll('.vocab-term');
const definitions = container.querySelectorAll('.vocab-definition');
for (let i = 0; i &lt; terms.length; i++) {
if (terms[i]) terms[i].style.minHeight = '0';
if (definitions[i]) definitions[i].style.minHeight = '0';
}
const count = Math.min(terms.length, definitions.length);
for (let i = 0; i &lt; count; i++) {
const termEl = terms[i];
const defEl = definitions[i];
const termHeight = termEl.offsetHeight;
const defHeight = defEl.offsetHeight;
const maxHeight = Math.max(termHeight, defHeight);
termEl.style.minHeight = maxHeight + 'px';
defEl.style.minHeight = maxHeight + 'px';
}
}
function debounce(func, wait = 20, immediate = false) {
let timeout;
return function() {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate &amp;&amp; !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
const containerId = 'vocab-932758416';
document.addEventListener('DOMContentLoaded', function() {
alignVocabRows(containerId);
});
window.addEventListener('resize', debounce(() => alignVocabRows(containerId), 100));
})();
&lt;/script>
&lt;h3 id="f">F&lt;/h3>
&lt;p>end stress except nom. pl.&lt;/p>
&lt;style>
.vocab-container {
display: grid;
grid-template-columns: 1fr 1fr;
font-size: 1.25rem;
width: 90%
}
.vocab-column:last-child {
border-left: 1px solid #e0e0e0;
}
.vocab-column {
display: grid;
grid-template-columns: 1fr 1fr;
align-content: start;
}
.vocab-term, .vocab-definition {
text-align:left;
padding: 0.05em 0.25em;
word-break: break-word;
display: flex;
align-items: center;
word-break: break-word;
}
@media (min-width: 900px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr;
}
}
@media (min-width: 1300px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
}
&lt;/style>&lt;div id="vocab-876915342" class="vocab-container">
&lt;div class="vocab-column">&lt;div class="vocab-term">ярмо́&lt;/div>&lt;div class="vocab-term">тавро&lt;/div>&lt;div class="vocab-term">мудо&lt;/div>&lt;div class="vocab-term">плечо&lt;/div>&lt;div class="vocab-term">крыльцо&lt;/div>&lt;div class="vocab-term">червь&lt;/div>&lt;div class="vocab-term">конь&lt;/div>&lt;div class="vocab-term">гвоздь&lt;/div>&lt;div class="vocab-term">груздь&lt;/div>&lt;div class="vocab-term">щепа&lt;/div>&lt;div class="vocab-term">блоха&lt;/div>&lt;div class="vocab-term">вожжа&lt;/div>&lt;div class="vocab-term">волна&lt;/div>&lt;div class="vocab-term">дежа́&lt;/div>&lt;div class="vocab-term">дрожжи&lt;/div>&lt;div class="vocab-term">железа&lt;/div>&lt;div class="vocab-term">копна&lt;/div>&lt;div class="vocab-term">кошша&lt;/div>&lt;div class="vocab-term">ноздря&lt;/div>&lt;div class="vocab-term">обжа&lt;/div>&lt;div class="vocab-term">простыня&lt;/div>&lt;div class="vocab-term">просвира/просфора&lt;/div>&lt;div class="vocab-term">свеча&lt;/div>&lt;div class="vocab-term">серьга&lt;/div>&lt;div class="vocab-term">скоба&lt;/div>&lt;div class="vocab-term">слега&lt;/div>&lt;div class="vocab-term">слеза&lt;/div>&lt;div class="vocab-term">сопля&lt;/div>&lt;div class="vocab-term">слобода&lt;/div>&lt;div class="vocab-term">софа&lt;/div>&lt;div class="vocab-term">сорвиголова&lt;/div>&lt;div class="vocab-term">строфа&lt;/div>&lt;/div>
&lt;div class="vocab-column">&lt;div class="vocab-definition">yoke/burden&lt;/div>&lt;div class="vocab-definition">brand (on cow)&lt;/div>&lt;div class="vocab-definition">&amp;#34;balls&amp;#34; (dual in -е́!)&lt;/div>&lt;div class="vocab-definition">shoulder (pl. in -и)&lt;/div>&lt;div class="vocab-definition">porch&lt;/div>&lt;div class="vocab-definition">worm (m)&lt;/div>&lt;div class="vocab-definition">steed (m)&lt;/div>&lt;div class="vocab-definition">nail, highlighht (m)&lt;/div>&lt;div class="vocab-definition">some mushroom (m)&lt;/div>&lt;div class="vocab-definition">woodchips/kindling&lt;/div>&lt;div class="vocab-definition">flea (or d)&lt;/div>&lt;div class="vocab-definition">rein&lt;/div>&lt;div class="vocab-definition">wave (or d)&lt;/div>&lt;div class="vocab-definition">huge pot (-ёжи, or b)&lt;/div>&lt;div class="vocab-definition">yeast&lt;/div>&lt;div class="vocab-definition">gland&lt;/div>&lt;div class="vocab-definition">cone-shape&lt;/div>&lt;div class="vocab-definition">felt carpet (sheep)&lt;/div>&lt;div class="vocab-definition">nostril&lt;/div>&lt;div class="vocab-definition">plow handle&lt;/div>&lt;div class="vocab-definition">sheet, textwall&lt;/div>&lt;div class="vocab-definition">Orthodox bread&lt;/div>&lt;div class="vocab-definition">candle&lt;/div>&lt;div class="vocab-definition">earing&lt;/div>&lt;div class="vocab-definition">bracket/shackle&lt;/div>&lt;div class="vocab-definition">long pole (or d)&lt;/div>&lt;div class="vocab-definition">tear (-ёзы)&lt;/div>&lt;div class="vocab-definition">snot&lt;/div>&lt;div class="vocab-definition">free village&lt;/div>&lt;div class="vocab-definition">sofa&lt;/div>&lt;div class="vocab-definition">daredevil (-о́ловы)&lt;/div>&lt;div class="vocab-definition">stanza&lt;/div>&lt;/div>
&lt;/div>&lt;script>
(function() {
function alignVocabRows(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const terms = container.querySelectorAll('.vocab-term');
const definitions = container.querySelectorAll('.vocab-definition');
for (let i = 0; i &lt; terms.length; i++) {
if (terms[i]) terms[i].style.minHeight = '0';
if (definitions[i]) definitions[i].style.minHeight = '0';
}
const count = Math.min(terms.length, definitions.length);
for (let i = 0; i &lt; count; i++) {
const termEl = terms[i];
const defEl = definitions[i];
const termHeight = termEl.offsetHeight;
const defHeight = defEl.offsetHeight;
const maxHeight = Math.max(termHeight, defHeight);
termEl.style.minHeight = maxHeight + 'px';
defEl.style.minHeight = maxHeight + 'px';
}
}
function debounce(func, wait = 20, immediate = false) {
let timeout;
return function() {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate &amp;&amp; !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
const containerId = 'vocab-876915342';
document.addEventListener('DOMContentLoaded', function() {
alignVocabRows(containerId);
});
window.addEventListener('resize', debounce(() => alignVocabRows(containerId), 100));
})();
&lt;/script>
&lt;h3 id="variants">Variants&lt;/h3>
&lt;p>Variants&amp;rsquo; sg. endings are stressed except their variant case.&lt;/p>
&lt;p>d&amp;rsquo;, f&amp;rsquo; are -а́, unstressed -у. b&amp;rsquo;, f&amp;rsquo;&amp;rsquo; are -ь.&lt;/p>
&lt;h3 id="d-1">d'&lt;/h3>
&lt;p>sg. end, pl. stem, but acc sg. stem
&lt;style>
.vocab-container {
display: grid;
grid-template-columns: 1fr 1fr;
font-size: 1.25rem;
width: 90%
}
.vocab-column:last-child {
border-left: 1px solid #e0e0e0;
}
.vocab-column {
display: grid;
grid-template-columns: 1fr 1fr;
align-content: start;
}
.vocab-term, .vocab-definition {
text-align:left;
padding: 0.05em 0.25em;
word-break: break-word;
display: flex;
align-items: center;
word-break: break-word;
}
@media (min-width: 900px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr;
}
}
@media (min-width: 1300px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
}
&lt;/style>&lt;div id="vocab-958617432" class="vocab-container">
&lt;div class="vocab-column">&lt;div class="vocab-term">изба&lt;/div>&lt;div class="vocab-term">вода&lt;/div>&lt;div class="vocab-term">земля&lt;/div>&lt;div class="vocab-term">душа&lt;/div>&lt;div class="vocab-term">зима&lt;/div>&lt;div class="vocab-term">река&lt;/div>&lt;div class="vocab-term">спина&lt;/div>&lt;div class="vocab-term">стена&lt;/div>&lt;div class="vocab-term">цена&lt;/div>&lt;div class="vocab-term">дрога&lt;/div>&lt;/div>
&lt;div class="vocab-column">&lt;div class="vocab-definition">cottage&lt;/div>&lt;div class="vocab-definition">water&lt;/div>&lt;div class="vocab-definition">earth&lt;/div>&lt;div class="vocab-definition">soul&lt;/div>&lt;div class="vocab-definition">winter&lt;/div>&lt;div class="vocab-definition">river&lt;/div>&lt;div class="vocab-definition">back/spine&lt;/div>&lt;div class="vocab-definition">wall&lt;/div>&lt;div class="vocab-definition">price&lt;/div>&lt;div class="vocab-definition">connects cart axels&lt;/div>&lt;/div>
&lt;/div>&lt;script>
(function() {
function alignVocabRows(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const terms = container.querySelectorAll('.vocab-term');
const definitions = container.querySelectorAll('.vocab-definition');
for (let i = 0; i &lt; terms.length; i++) {
if (terms[i]) terms[i].style.minHeight = '0';
if (definitions[i]) definitions[i].style.minHeight = '0';
}
const count = Math.min(terms.length, definitions.length);
for (let i = 0; i &lt; count; i++) {
const termEl = terms[i];
const defEl = definitions[i];
const termHeight = termEl.offsetHeight;
const defHeight = defEl.offsetHeight;
const maxHeight = Math.max(termHeight, defHeight);
termEl.style.minHeight = maxHeight + 'px';
defEl.style.minHeight = maxHeight + 'px';
}
}
function debounce(func, wait = 20, immediate = false) {
let timeout;
return function() {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate &amp;&amp; !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
const containerId = 'vocab-958617432';
document.addEventListener('DOMContentLoaded', function() {
alignVocabRows(containerId);
});
window.addEventListener('resize', debounce(() => alignVocabRows(containerId), 100));
})();
&lt;/script>&lt;/p>
&lt;h3 id="f-1">f'&lt;/h3>
&lt;p>end, except pl. n. and sg. acc.
&lt;style>
.vocab-container {
display: grid;
grid-template-columns: 1fr 1fr;
font-size: 1.25rem;
width: 90%
}
.vocab-column:last-child {
border-left: 1px solid #e0e0e0;
}
.vocab-column {
display: grid;
grid-template-columns: 1fr 1fr;
align-content: start;
}
.vocab-term, .vocab-definition {
text-align:left;
padding: 0.05em 0.25em;
word-break: break-word;
display: flex;
align-items: center;
word-break: break-word;
}
@media (min-width: 900px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr;
}
}
@media (min-width: 1300px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
}
&lt;/style>&lt;div id="vocab-542793681" class="vocab-container">
&lt;div class="vocab-column">&lt;div class="vocab-term">гора&lt;/div>&lt;div class="vocab-term">нога&lt;/div>&lt;div class="vocab-term">пора&lt;/div>&lt;div class="vocab-term">рука&lt;/div>&lt;div class="vocab-term">щека&lt;/div>&lt;div class="vocab-term">доска&lt;/div>&lt;div class="vocab-term">среда&lt;/div>&lt;div class="vocab-term">борода&lt;/div>&lt;div class="vocab-term">сторона&lt;/div>&lt;div class="vocab-term">полоса&lt;/div>&lt;div class="vocab-term">борона&lt;/div>&lt;div class="vocab-term">болона&lt;/div>&lt;div class="vocab-term">строка&lt;/div>&lt;div class="vocab-term">скорода&lt;/div>&lt;div class="vocab-term">горова&lt;/div>&lt;div class="vocab-term">свелка&lt;/div>&lt;div class="vocab-term">дорозда&lt;/div>&lt;/div>
&lt;div class="vocab-column">&lt;div class="vocab-definition">mountain&lt;/div>&lt;div class="vocab-definition">leg/foot&lt;/div>&lt;div class="vocab-definition">time&lt;/div>&lt;div class="vocab-definition">hand&lt;/div>&lt;div class="vocab-definition">cheek&lt;/div>&lt;div class="vocab-definition">board&lt;/div>&lt;div class="vocab-definition">Wednesday&lt;/div>&lt;div class="vocab-definition">beard&lt;/div>&lt;div class="vocab-definition">side&lt;/div>&lt;div class="vocab-definition">strip&lt;/div>&lt;div class="vocab-definition">harrow&lt;/div>&lt;div class="vocab-definition">gall&lt;/div>&lt;div class="vocab-definition">line/row&lt;/div>&lt;div class="vocab-definition">harrow, chive&lt;/div>&lt;div class="vocab-definition">head&lt;/div>&lt;div class="vocab-definition">beet (свёкла is more common)&lt;/div>&lt;div class="vocab-definition">furrow (gardening trench)&lt;/div>&lt;/div>
&lt;/div>&lt;script>
(function() {
function alignVocabRows(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const terms = container.querySelectorAll('.vocab-term');
const definitions = container.querySelectorAll('.vocab-definition');
for (let i = 0; i &lt; terms.length; i++) {
if (terms[i]) terms[i].style.minHeight = '0';
if (definitions[i]) definitions[i].style.minHeight = '0';
}
const count = Math.min(terms.length, definitions.length);
for (let i = 0; i &lt; count; i++) {
const termEl = terms[i];
const defEl = definitions[i];
const termHeight = termEl.offsetHeight;
const defHeight = defEl.offsetHeight;
const maxHeight = Math.max(termHeight, defHeight);
termEl.style.minHeight = maxHeight + 'px';
defEl.style.minHeight = maxHeight + 'px';
}
}
function debounce(func, wait = 20, immediate = false) {
let timeout;
return function() {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate &amp;&amp; !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
const containerId = 'vocab-542793681';
document.addEventListener('DOMContentLoaded', function() {
alignVocabRows(containerId);
});
window.addEventListener('resize', debounce(() => alignVocabRows(containerId), 100));
})();
&lt;/script>&lt;/p>
&lt;p>Some are no longer comprehensible to us moderns:&lt;/p>
&lt;ul>
&lt;li>furrow - trench for planting&lt;/li>
&lt;li>harrow - like a plow&lt;/li>
&lt;li>gall - blister/infection on a tree&lt;/li>
&lt;/ul>
&lt;h3 id="b">b'&lt;/h3>
&lt;p>all end except sg. inst.&lt;/p>
&lt;style>
.vocab-container {
display: grid;
grid-template-columns: 1fr 1fr;
font-size: 1.25rem;
width: 90%
}
.vocab-column:last-child {
border-left: 1px solid #e0e0e0;
}
.vocab-column {
display: grid;
grid-template-columns: 1fr 1fr;
align-content: start;
}
.vocab-term, .vocab-definition {
text-align:left;
padding: 0.05em 0.25em;
word-break: break-word;
display: flex;
align-items: center;
word-break: break-word;
}
@media (min-width: 900px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr;
}
}
@media (min-width: 1300px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
}
&lt;/style>&lt;div id="vocab-459872613" class="vocab-container">
&lt;div class="vocab-column">&lt;div class="vocab-term">вошь&lt;/div>&lt;div class="vocab-term">ложь&lt;/div>&lt;div class="vocab-term">любовь&lt;/div>&lt;div class="vocab-term">рожь&lt;/div>&lt;/div>
&lt;div class="vocab-column">&lt;div class="vocab-definition">louse&lt;/div>&lt;div class="vocab-definition">lie&lt;/div>&lt;div class="vocab-definition">love&lt;/div>&lt;div class="vocab-definition">rye&lt;/div>&lt;/div>
&lt;/div>&lt;script>
(function() {
function alignVocabRows(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const terms = container.querySelectorAll('.vocab-term');
const definitions = container.querySelectorAll('.vocab-definition');
for (let i = 0; i &lt; terms.length; i++) {
if (terms[i]) terms[i].style.minHeight = '0';
if (definitions[i]) definitions[i].style.minHeight = '0';
}
const count = Math.min(terms.length, definitions.length);
for (let i = 0; i &lt; count; i++) {
const termEl = terms[i];
const defEl = definitions[i];
const termHeight = termEl.offsetHeight;
const defHeight = defEl.offsetHeight;
const maxHeight = Math.max(termHeight, defHeight);
termEl.style.minHeight = maxHeight + 'px';
defEl.style.minHeight = maxHeight + 'px';
}
}
function debounce(func, wait = 20, immediate = false) {
let timeout;
return function() {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate &amp;&amp; !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
const containerId = 'vocab-459872613';
document.addEventListener('DOMContentLoaded', function() {
alignVocabRows(containerId);
});
window.addEventListener('resize', debounce(() => alignVocabRows(containerId), 100));
})();
&lt;/script>
&lt;h3 id="f-2">f''&lt;/h3>
&lt;p>all end, except n. pl. and sg. inst.&lt;/p>
&lt;p>These cities or rivers: Русь, Тверь, Томь, Омь, Обь, Пермь&lt;/p>
&lt;style>
.vocab-container {
display: grid;
grid-template-columns: 1fr 1fr;
font-size: 1.25rem;
width: 90%
}
.vocab-column:last-child {
border-left: 1px solid #e0e0e0;
}
.vocab-column {
display: grid;
grid-template-columns: 1fr 1fr;
align-content: start;
}
.vocab-term, .vocab-definition {
text-align:left;
padding: 0.05em 0.25em;
word-break: break-word;
display: flex;
align-items: center;
word-break: break-word;
}
@media (min-width: 900px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr;
}
}
@media (min-width: 1300px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
}
&lt;/style>&lt;div id="vocab-457986132" class="vocab-container">
&lt;div class="vocab-column">&lt;div class="vocab-term">грудь&lt;/div>&lt;div class="vocab-term">ось&lt;/div>&lt;div class="vocab-term">степь&lt;/div>&lt;div class="vocab-term">глушь&lt;/div>&lt;/div>
&lt;div class="vocab-column">&lt;div class="vocab-definition">breast&lt;/div>&lt;div class="vocab-definition">axle/axis, operating system (or e)&lt;/div>&lt;div class="vocab-definition">steppe&lt;/div>&lt;div class="vocab-definition">middle of nowhere&lt;/div>&lt;/div>
&lt;/div>&lt;script>
(function() {
function alignVocabRows(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const terms = container.querySelectorAll('.vocab-term');
const definitions = container.querySelectorAll('.vocab-definition');
for (let i = 0; i &lt; terms.length; i++) {
if (terms[i]) terms[i].style.minHeight = '0';
if (definitions[i]) definitions[i].style.minHeight = '0';
}
const count = Math.min(terms.length, definitions.length);
for (let i = 0; i &lt; count; i++) {
const termEl = terms[i];
const defEl = definitions[i];
const termHeight = termEl.offsetHeight;
const defHeight = defEl.offsetHeight;
const maxHeight = Math.max(termHeight, defHeight);
termEl.style.minHeight = maxHeight + 'px';
defEl.style.minHeight = maxHeight + 'px';
}
}
function debounce(func, wait = 20, immediate = false) {
let timeout;
return function() {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate &amp;&amp; !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
const containerId = 'vocab-457986132';
document.addEventListener('DOMContentLoaded', function() {
alignVocabRows(containerId);
});
window.addEventListener('resize', debounce(() => alignVocabRows(containerId), 100));
})();
&lt;/script>
&lt;h3 id="e">e&lt;/h3>
&lt;p>stem sgg. and n. pl., end for other pl.
If unmarked, ь is fem.&lt;/p>
&lt;p>N.b. words like пол, ход have different patterns for other meanings.
Masc. and 2 neut.
&lt;style>
.vocab-container {
display: grid;
grid-template-columns: 1fr 1fr;
font-size: 1.25rem;
width: 90%
}
.vocab-column:last-child {
border-left: 1px solid #e0e0e0;
}
.vocab-column {
display: grid;
grid-template-columns: 1fr 1fr;
align-content: start;
}
.vocab-term, .vocab-definition {
text-align:left;
padding: 0.05em 0.25em;
word-break: break-word;
display: flex;
align-items: center;
word-break: break-word;
}
@media (min-width: 900px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr;
}
}
@media (min-width: 1300px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
}
&lt;/style>&lt;div id="vocab-796418325" class="vocab-container">
&lt;div class="vocab-column">&lt;div class="vocab-term">ухо&lt;/div>&lt;div class="vocab-term">око&lt;/div>&lt;div class="vocab-term">чёрт&lt;/div>&lt;div class="vocab-term">роль&lt;/div>&lt;div class="vocab-term">порт&lt;/div>&lt;div class="vocab-term">пол&lt;/div>&lt;div class="vocab-term">ход&lt;/div>&lt;div class="vocab-term">род&lt;/div>&lt;div class="vocab-term">тон&lt;/div>&lt;div class="vocab-term">парень&lt;/div>&lt;div class="vocab-term">площадь&lt;/div>&lt;div class="vocab-term">окунь&lt;/div>&lt;div class="vocab-term">овощ&lt;/div>&lt;div class="vocab-term">лось&lt;/div>&lt;div class="vocab-term">лошадь&lt;/div>&lt;div class="vocab-term">локоть&lt;/div>&lt;div class="vocab-term">ломать&lt;/div>&lt;div class="vocab-term">лом&lt;/div>&lt;div class="vocab-term">лапоть&lt;/div>&lt;div class="vocab-term">лебедь&lt;/div>&lt;div class="vocab-term">ко́рень&lt;/div>&lt;div class="vocab-term">обруч&lt;/div>&lt;div class="vocab-term">бог&lt;/div>&lt;div class="vocab-term">боль&lt;/div>&lt;div class="vocab-term">боров&lt;/div>&lt;div class="vocab-term">го́лубь&lt;/div>&lt;div class="vocab-term">гость&lt;/div>&lt;div class="vocab-term">гром&lt;/div>&lt;div class="vocab-term">дол&lt;/div>&lt;div class="vocab-term">ка́мень&lt;/div>&lt;div class="vocab-term">князь&lt;/div>&lt;div class="vocab-term">ко́ндырь&lt;/div>&lt;div class="vocab-term">ко́зирь&lt;/div>&lt;div class="vocab-term">зуб&lt;/div>&lt;div class="vocab-term">зверь&lt;/div>&lt;div class="vocab-term">жёлудь&lt;/div>&lt;div class="vocab-term">вор&lt;/div>&lt;div class="vocab-term">волк&lt;/div>&lt;div class="vocab-term">ветер&lt;/div>&lt;/div>
&lt;div class="vocab-column">&lt;div class="vocab-definition">ear (-ши)&lt;/div>&lt;div class="vocab-definition">eye (-чи)&lt;/div>&lt;div class="vocab-definition">devil&lt;/div>&lt;div class="vocab-definition">role&lt;/div>&lt;div class="vocab-definition">port&lt;/div>&lt;div class="vocab-definition">half/sex (only!)&lt;/div>&lt;div class="vocab-definition">game move (only!)&lt;/div>&lt;div class="vocab-definition">gram. gender, genus&lt;/div>&lt;div class="vocab-definition">musical tone (only!)&lt;/div>&lt;div class="vocab-definition">(boy)friend&lt;/div>&lt;div class="vocab-definition">square&lt;/div>&lt;div class="vocab-definition">bass (fish)&lt;/div>&lt;div class="vocab-definition">vegtable&lt;/div>&lt;div class="vocab-definition">moose/elk&lt;/div>&lt;div class="vocab-definition">horse&lt;/div>&lt;div class="vocab-definition">elbow&lt;/div>&lt;div class="vocab-definition">hunk/slice (or b)&lt;/div>&lt;div class="vocab-definition">crow bar&lt;/div>&lt;div class="vocab-definition">old shoe, old thing&lt;/div>&lt;div class="vocab-definition">swam&lt;/div>&lt;div class="vocab-definition">root&lt;/div>&lt;div class="vocab-definition">hoop&lt;/div>&lt;div class="vocab-definition">God&lt;/div>&lt;div class="vocab-definition">pain&lt;/div>&lt;div class="vocab-definition">fatman, barrow&lt;/div>&lt;div class="vocab-definition">pidgeon&lt;/div>&lt;div class="vocab-definition">guest&lt;/div>&lt;div class="vocab-definition">thunder&lt;/div>&lt;div class="vocab-definition">vale/dale&lt;/div>&lt;div class="vocab-definition">stone&lt;/div>&lt;div class="vocab-definition">prince&lt;/div>&lt;div class="vocab-definition">cuff/colar&lt;/div>&lt;div class="vocab-definition">(card) trump&lt;/div>&lt;div class="vocab-definition">tooth&lt;/div>&lt;div class="vocab-definition">beast&lt;/div>&lt;div class="vocab-definition">acorn&lt;/div>&lt;div class="vocab-definition">thief (or b)&lt;/div>&lt;div class="vocab-definition">wolf&lt;/div>&lt;div class="vocab-definition">wind&lt;/div>&lt;/div>
&lt;/div>&lt;script>
(function() {
function alignVocabRows(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const terms = container.querySelectorAll('.vocab-term');
const definitions = container.querySelectorAll('.vocab-definition');
for (let i = 0; i &lt; terms.length; i++) {
if (terms[i]) terms[i].style.minHeight = '0';
if (definitions[i]) definitions[i].style.minHeight = '0';
}
const count = Math.min(terms.length, definitions.length);
for (let i = 0; i &lt; count; i++) {
const termEl = terms[i];
const defEl = definitions[i];
const termHeight = termEl.offsetHeight;
const defHeight = defEl.offsetHeight;
const maxHeight = Math.max(termHeight, defHeight);
termEl.style.minHeight = maxHeight + 'px';
defEl.style.minHeight = maxHeight + 'px';
}
}
function debounce(func, wait = 20, immediate = false) {
let timeout;
return function() {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate &amp;&amp; !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
const containerId = 'vocab-796418325';
document.addEventListener('DOMContentLoaded', function() {
alignVocabRows(containerId);
});
window.addEventListener('resize', debounce(() => alignVocabRows(containerId), 100));
})();
&lt;/script>&lt;/p>
&lt;p>fem
&lt;style>
.vocab-container {
display: grid;
grid-template-columns: 1fr 1fr;
font-size: 1.25rem;
width: 90%
}
.vocab-column:last-child {
border-left: 1px solid #e0e0e0;
}
.vocab-column {
display: grid;
grid-template-columns: 1fr 1fr;
align-content: start;
}
.vocab-term, .vocab-definition {
text-align:left;
padding: 0.05em 0.25em;
word-break: break-word;
display: flex;
align-items: center;
word-break: break-word;
}
@media (min-width: 900px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr;
}
}
@media (min-width: 1300px) {
.vocab-column {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
}
&lt;/style>&lt;div id="vocab-561739842" class="vocab-container">
&lt;div class="vocab-column">&lt;div class="vocab-term">щёлочь&lt;/div>&lt;div class="vocab-term">шереть&lt;/div>&lt;div class="vocab-term">че́тверть&lt;/div>&lt;div class="vocab-term">че́люсть&lt;/div>&lt;div class="vocab-term">часть&lt;/div>&lt;div class="vocab-term">цепь&lt;/div>&lt;div class="vocab-term">цветь&lt;/div>&lt;div class="vocab-term">тень&lt;/div>&lt;div class="vocab-term">трость&lt;/div>&lt;div class="vocab-term">соль&lt;/div>&lt;div class="vocab-term">сте́б(е)ль&lt;/div>&lt;div class="vocab-term">степень&lt;/div>&lt;div class="vocab-term">слюни&lt;/div>&lt;div class="vocab-term">смерть&lt;/div>&lt;div class="vocab-term">со́боль&lt;/div>&lt;div class="vocab-term">щедрость&lt;/div>&lt;div class="vocab-term">слог&lt;/div>&lt;div class="vocab-term">сласть&lt;/div>&lt;div class="vocab-term">скорость&lt;/div>&lt;div class="vocab-term">скобрь&lt;/div>&lt;div class="vocab-term">скатерть&lt;/div>&lt;div class="vocab-term">сеть&lt;/div>&lt;div class="vocab-term">сень&lt;/div>&lt;div class="vocab-term">сени&lt;/div>&lt;div class="vocab-term">сельдь&lt;/div>&lt;div class="vocab-term">сво́лочь&lt;/div>&lt;div class="vocab-term">санча́сть&lt;/div>&lt;div class="vocab-term">сажень&lt;/div>&lt;div class="vocab-term">росстань&lt;/div>&lt;div class="vocab-term">пядь&lt;/div>&lt;div class="vocab-term">пядень&lt;/div>&lt;div class="vocab-term">речь&lt;/div>&lt;div class="vocab-term">пропасть&lt;/div>&lt;div class="vocab-term">про́рубь&lt;/div>&lt;div class="vocab-term">простынь&lt;/div>&lt;div class="vocab-term">при́стань&lt;/div>&lt;div class="vocab-term">по́хороны&lt;/div>&lt;div class="vocab-term">поршень&lt;/div>&lt;div class="vocab-term">полость&lt;/div>&lt;div class="vocab-term">повесть&lt;/div>&lt;div class="vocab-term">плеть&lt;/div>&lt;div class="vocab-term">плоскость&lt;/div>&lt;div class="vocab-term">пещь/печь&lt;/div>&lt;div class="vocab-term">престень&lt;/div>&lt;div class="vocab-term">отруби&lt;/div>&lt;div class="vocab-term">падь&lt;/div>&lt;div class="vocab-term">очередь&lt;/div>&lt;div class="vocab-term">отрасль&lt;/div>&lt;div class="vocab-term">щель&lt;/div>&lt;div class="vocab-term">ночь/нощь&lt;/div>&lt;div class="vocab-term">область&lt;/div>&lt;div class="vocab-term">ноготь&lt;/div>&lt;div class="vocab-term">новость&lt;/div>&lt;div class="vocab-term">на́ледь&lt;/div>&lt;div class="vocab-term">мышь&lt;/div>&lt;div class="vocab-term">мощи&lt;/div>&lt;div class="vocab-term">мелочь&lt;/div>&lt;div class="vocab-term">мать&lt;/div>&lt;div class="vocab-term">масть&lt;/div>&lt;div class="vocab-term">лопасть&lt;/div>&lt;div class="vocab-term">кровь&lt;/div>&lt;div class="vocab-term">кудри&lt;/div>&lt;div class="vocab-term">крепость&lt;/div>&lt;div class="vocab-term">кре́млядь&lt;/div>&lt;div class="vocab-term">кость&lt;/div>&lt;div class="vocab-term">киещи&lt;/div>&lt;div class="vocab-term">кисть&lt;/div>&lt;div class="vocab-term">зыбь&lt;/div>&lt;div class="vocab-term">запчасть&lt;/div>&lt;div class="vocab-term">жердь&lt;/div>&lt;div class="vocab-term">желвь&lt;/div>&lt;div class="vocab-term">дробь&lt;/div>&lt;div class="vocab-term">дровни&lt;/div>&lt;div class="vocab-term">доля&lt;/div>&lt;div class="vocab-term">должность&lt;/div>&lt;div class="vocab-term">договорённость&lt;/div>&lt;div class="vocab-term">дере́вня&lt;/div>&lt;div class="vocab-term">деньги&lt;/div>&lt;div class="vocab-term">гусь&lt;/div>&lt;div class="vocab-term">гроздь&lt;/div>&lt;div class="vocab-term">горсть&lt;/div>&lt;div class="vocab-term">гачи&lt;/div>&lt;div class="vocab-term">волосы&lt;/div>&lt;div class="vocab-term">волость&lt;/div>&lt;div class="vocab-term">власть&lt;/div>&lt;div class="vocab-term">вещь&lt;/div>&lt;div class="vocab-term">ветвь&lt;/div>&lt;div class="vocab-term">весь&lt;/div>&lt;div class="vocab-term">весть&lt;/div>&lt;div class="vocab-term">бровь&lt;/div>&lt;div class="vocab-term">борть&lt;/div>&lt;div class="vocab-term">блядь&lt;/div>&lt;div class="vocab-term">страсть&lt;/div>&lt;div class="vocab-term">церк(о)вь&lt;/div>&lt;div class="vocab-term">снасть&lt;/div>&lt;/div>
&lt;div class="vocab-column">&lt;div class="vocab-definition">alkali&lt;/div>&lt;div class="vocab-definition">hody hair/fur&lt;/div>&lt;div class="vocab-definition">quarter&lt;/div>&lt;div class="vocab-definition">jaw&lt;/div>&lt;div class="vocab-definition">part&lt;/div>&lt;div class="vocab-definition">chain&lt;/div>&lt;div class="vocab-definition">blossom&lt;/div>&lt;div class="vocab-definition">shade/shadow&lt;/div>&lt;div class="vocab-definition">cane/walking stick&lt;/div>&lt;div class="vocab-definition">salt, &amp;#34;the point&amp;#34;&lt;/div>&lt;div class="vocab-definition">stalk/stem&lt;/div>&lt;div class="vocab-definition">degree/extent&lt;/div>&lt;div class="vocab-definition">drool/sliva&lt;/div>&lt;div class="vocab-definition">death&lt;/div>&lt;div class="vocab-definition">sable&lt;/div>&lt;div class="vocab-definition">largress/generosity&lt;/div>&lt;div class="vocab-definition">syllable&lt;/div>&lt;div class="vocab-definition">sweetness/candy&lt;/div>&lt;div class="vocab-definition">speed&lt;/div>&lt;div class="vocab-definition">grief&lt;/div>&lt;div class="vocab-definition">table cloth&lt;/div>&lt;div class="vocab-definition">network&lt;/div>&lt;div class="vocab-definition">foliage, shelter&lt;/div>&lt;div class="vocab-definition">hall&lt;/div>&lt;div class="vocab-definition">herring&lt;/div>&lt;div class="vocab-definition">riffraff&lt;/div>&lt;div class="vocab-definition">infirmmary&lt;/div>&lt;div class="vocab-definition">2 meters&lt;/div>&lt;div class="vocab-definition">crossroads/dilemna&lt;/div>&lt;div class="vocab-definition">hand&lt;/div>&lt;div class="vocab-definition">hand (or a)&lt;/div>&lt;div class="vocab-definition">speech&lt;/div>&lt;div class="vocab-definition">abyss, a lot&lt;/div>&lt;div class="vocab-definition">ice hole&lt;/div>&lt;div class="vocab-definition">bed sheet&lt;/div>&lt;div class="vocab-definition">pier&lt;/div>&lt;div class="vocab-definition">burrial/funeral&lt;/div>&lt;div class="vocab-definition">plunger/piston&lt;/div>&lt;div class="vocab-definition">body cavity&lt;/div>&lt;div class="vocab-definition">narrative/story&lt;/div>&lt;div class="vocab-definition">whip/lash&lt;/div>&lt;div class="vocab-definition">plane/flatness&lt;/div>&lt;div class="vocab-definition">oven&lt;/div>&lt;div class="vocab-definition">ring&lt;/div>&lt;div class="vocab-definition">bran&lt;/div>&lt;div class="vocab-definition">gorge/riverbank, honeydew&lt;/div>&lt;div class="vocab-definition">line&lt;/div>&lt;div class="vocab-definition">branch, field&lt;/div>&lt;div class="vocab-definition">chink/gap&lt;/div>&lt;div class="vocab-definition">night&lt;/div>&lt;div class="vocab-definition">region&lt;/div>&lt;div class="vocab-definition">(body) nail&lt;/div>&lt;div class="vocab-definition">news&lt;/div>&lt;div class="vocab-definition">layer of ice&lt;/div>&lt;div class="vocab-definition">mouse&lt;/div>&lt;div class="vocab-definition">relics&lt;/div>&lt;div class="vocab-definition">detail&lt;/div>&lt;div class="vocab-definition">mom&lt;/div>&lt;div class="vocab-definition">color, (card) suit&lt;/div>&lt;div class="vocab-definition">blade/fan/propellar&lt;/div>&lt;div class="vocab-definition">blood&lt;/div>&lt;div class="vocab-definition">curls&lt;/div>&lt;div class="vocab-definition">fort&lt;/div>&lt;div class="vocab-definition">Kremlin officials&lt;/div>&lt;div class="vocab-definition">bone&lt;/div>&lt;div class="vocab-definition">clippers&lt;/div>&lt;div class="vocab-definition">paint brush, hand&lt;/div>&lt;div class="vocab-definition">wave, ripple&lt;/div>&lt;div class="vocab-definition">spare part&lt;/div>&lt;div class="vocab-definition">pole/perch&lt;/div>&lt;div class="vocab-definition">tortise&lt;/div>&lt;div class="vocab-definition">fraction, shot&lt;/div>&lt;div class="vocab-definition">sledge&lt;/div>&lt;div class="vocab-definition">part/shore/fate&lt;/div>&lt;div class="vocab-definition">position&lt;/div>&lt;div class="vocab-definition">agreement&lt;/div>&lt;div class="vocab-definition">village&lt;/div>&lt;div class="vocab-definition">money&lt;/div>&lt;div class="vocab-definition">goose&lt;/div>&lt;div class="vocab-definition">bunch (or a)&lt;/div>&lt;div class="vocab-definition">handful&lt;/div>&lt;div class="vocab-definition">loins, pantaloons&lt;/div>&lt;div class="vocab-definition">hair&lt;/div>&lt;div class="vocab-definition">county&lt;/div>&lt;div class="vocab-definition">power, gov&lt;/div>&lt;div class="vocab-definition">thing&lt;/div>&lt;div class="vocab-definition">branch&lt;/div>&lt;div class="vocab-definition">village&lt;/div>&lt;div class="vocab-definition">news&lt;/div>&lt;div class="vocab-definition">brow&lt;/div>&lt;div class="vocab-definition">bee hive in tree&lt;/div>&lt;div class="vocab-definition">whore&lt;/div>&lt;div class="vocab-definition">passion&lt;/div>&lt;div class="vocab-definition">church&lt;/div>&lt;div class="vocab-definition">rope&lt;/div>&lt;/div>
&lt;/div>&lt;script>
(function() {
function alignVocabRows(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const terms = container.querySelectorAll('.vocab-term');
const definitions = container.querySelectorAll('.vocab-definition');
for (let i = 0; i &lt; terms.length; i++) {
if (terms[i]) terms[i].style.minHeight = '0';
if (definitions[i]) definitions[i].style.minHeight = '0';
}
const count = Math.min(terms.length, definitions.length);
for (let i = 0; i &lt; count; i++) {
const termEl = terms[i];
const defEl = definitions[i];
const termHeight = termEl.offsetHeight;
const defHeight = defEl.offsetHeight;
const maxHeight = Math.max(termHeight, defHeight);
termEl.style.minHeight = maxHeight + 'px';
defEl.style.minHeight = maxHeight + 'px';
}
}
function debounce(func, wait = 20, immediate = false) {
let timeout;
return function() {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate &amp;&amp; !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
const containerId = 'vocab-561739842';
document.addEventListener('DOMContentLoaded', function() {
alignVocabRows(containerId);
});
window.addEventListener('resize', debounce(() => alignVocabRows(containerId), 100));
})();
&lt;/script>&lt;/p></content:encoded></item><item><title>Bullish on Developing Macro</title><link>https://alexalejandre.com/finance/bullish-on-developping-market-macro/</link><pubDate>Sat, 18 Mar 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/finance/bullish-on-developping-market-macro/</guid><description>Dedollarization and the Green Transition</description><content:encoded>&lt;p>I am bullish on the developing world, which makes me bullish on commodities.&lt;/p>
&lt;h2 id="emerging-market-boom">Emerging Market Boom&lt;/h2>
&lt;p>Because of cheaper commodities from russia, priced in their own currencies, emerging economies will be able to expand faster. For example, buying commodities in rupees, India can print growth, which even lowers the risk premium on infrastructure.&lt;/p>
&lt;p>But didn&amp;rsquo;t Russia suspend that? Yes: &lt;a href="https://www.reuters.com/markets/currencies/india-russia-suspend-negotiations-settle-trade-rupees-sources-2023-05-04/">&amp;ldquo;Moscow believes it will end up with an annual rupee surplus of over $40 billion [of 50 billion in total exports] if such a mechanism is worked out and feels rupee accumulation is &amp;rsquo;not desirable&amp;rsquo;&amp;rdquo;&lt;/a>&lt;/p>
&lt;p>But I deem this a temporary roadblock. It seems Russia wanted to immediately convert the rupees on the open market due to poor product fit in the Indian export market. But Russia is interested in non-dollar currencies e.g. Yuan or even Baht, which they can spend easier (seeing many Russian tourists, large imports to Russia etc.)&lt;/p>
&lt;p>Thus the parties are exploring higher volume structured bridges / triangle vehicles, e.g. &lt;a href="https://www.livemint.com/economy/russia-suggests-trade-payment-in-via-uae-11680113523754.html">converting Indian rupees in the UAE&lt;/a> which has a large indian expat community and exports many services to russia. To date, some trade has been in Dirham, but this would enable full dedollarization (India in turn has a trade deficit with the UAE, complicating matters.)&lt;/p>
&lt;h2 id="hungry-green-transition">Hungry Green Transition&lt;/h2>
&lt;p>&lt;span class="marginnote">See Vaslav Smil, Mark Mills, Robert Friedland&lt;/span> Decarbonization is commodity heavy, yet ESG concerns limit capacity expansion of mines and environmental regulations place pressure on existing facilities. This gives existing operations extraordinary value as increasing demand will squeeze prices on limited supply.&lt;/p>
&lt;h2 id="commodity-supercycle">Commodity Supercycle&lt;/h2>
&lt;p>We all understand the boom and bust cycle: Since 2008, capital expenditures have at best remained muted, but more commonly decreased. Systemic underinvestment leads to &lt;a href="https://alexalejandre.com/finance/falling-oil-production/">structural undersupply&lt;/a>. Demand slowly increases as world economy expands, until suddenly surpassing world production and digging into industrial stocks, causing prices to rise (60-70s, 2000s). Later, rising prices would lead to capital inflows and capacity expansion, causing prices to collapse again (80-90s, 2014-2020), however this time it&amp;rsquo;s different.&lt;/p>
&lt;p>Policymakers are exploiting elevated price levels to transition away from fossil fuels as governments and financial institutions constrain capital on oil and gas projects, distorting price signals. Even with recent high prices, capital expenditures remain scarce, artificially reducing supply. Unable to balance the market, management teams opt for greater shareholder returns:&lt;/p>
&lt;p>&lt;img src="https://alexalejandre.com/images/oil-shareholder-returns.webp" alt="shareholder returns">&lt;/p>
&lt;blockquote>
&lt;p>Since the 80s, oil production has pretty much followed population growth; using a ratio value of 4 barrels/person/year, one can accurately predict supply level for crude oil plus NGL (C+C+NGL) with an accuracy of +/- 2 Mbpd&lt;/p>&lt;/blockquote>
&lt;ul>
&lt;li>&lt;a href="http://theoildrum.com/node/10163">Sam Foucher&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>With capacity no longer keeping up, we can expect price runs. Inelastic in supply and demand, oil has a steep price curve, so prices form an upward trending sawtooth wave, with flash jumps and collapses. Bad for the world, good for our wallets.&lt;/p>
&lt;h2 id="reading-material">Reading Material&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://desapublications.un.org/file/268/download">Super-cycles of commodity prices since
the mid-nineteenth century&lt;/a> - Bilge Erten, José Antonio Ocampo&lt;/li>
&lt;li>&lt;a href="https://www.mckinsey.com/industries/metals-and-mining/our-insights/through-cycle-investment-in-mining">Through-cycle investment in mining&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>Walmart's Hybdrid Cloud</title><link>https://alexalejandre.com/programming/walmart--hybdrid-cloud-native-platform/</link><pubDate>Tue, 28 Feb 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/walmart--hybdrid-cloud-native-platform/</guid><description>&lt;p>Walmart Cloud Native Platform (WCNP) is an interesting case study (though proliferating buzzwords garner the odd chuckle).&lt;/p></description><content:encoded>&lt;p>Walmart Cloud Native Platform (WCNP) is an interesting case study (though proliferating buzzwords garner the odd chuckle).&lt;/p>
&lt;p>Here are some interesting points:&lt;/p>
&lt;ul>
&lt;li>Abstracts infrastructure differences away, so devs can use various infra types and cloud services with 1 console&lt;/li>
&lt;li>Alternative to &lt;a href="https://www.infoworld.com/article/3611369/how-to-build-an-internal-developer-platform-from-those-who-have-done-it.html">pre-built patterns/golden paths&lt;/a> which lock devs into specific cloud choices to maintain flexibility and avoid the following tradeoff:
&lt;ul>
&lt;li>Opinion vs. abstraction / &lt;a href="https://www.infoworld.com/article/3661817/how-vanguard-and-morgan-stanley-are-balancing-dev-and-ops.html">dev vs. ops&lt;/a> tradeoff: Don&amp;rsquo;t stifle dev&amp;rsquo;s ability to use the best cloud resources&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Triplet Model cloud strategy &lt;a href="https://www.linkedin.com/pulse/blazing-trail-cloud-computing-how-walmart-built-one-/">https://www.linkedin.com/pulse/blazing-trail-cloud-computing-how-walmart-built-one-/&lt;/a> Microsoft uses Azure and Google Cloud, avoiding AWS as most retailers, combining them with Walmart data centers and edge locations. (Wallmart has 10,000 edge cloud nodes at different facilities &lt;a href="https://www.linkedin.com/pulse/blazing-trail-cloud-computing-how-walmart-built-one-/">https://www.linkedin.com/pulse/blazing-trail-cloud-computing-how-walmart-built-one-/&lt;/a> )&lt;/li>
&lt;li>In practice, they orchestrate a huge number of containers with Kubernetes and an OpenStack private cloud for VM workloads&lt;/li>
&lt;li>Walmart can now make 170,000 edits to its web backend each month, a 1,700X increase over what was possible before these changes were made&lt;/li>
&lt;/ul></content:encoded></item><item><title>On Vaclav Smil</title><link>https://alexalejandre.com/finance/vaclav-smil/</link><pubDate>Sun, 15 Jan 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/finance/vaclav-smil/</guid><description>Interesting guy.</description><content:encoded>&lt;p>To Vaclav Smil, all existence balances the equation of energy in and out, as food and fuel, labor and heating. Animals and civilizations alike grapple with Malthus.&lt;/p>
&lt;p>This worldview offers a sobering, hard approach to the world: We can calculate how much energy a field receives from the sun, at what rate it&amp;rsquo;s converted, how much energy we expend to harvest it etc. to know the limits of our cities. We can calculate how much we consume, how much we must collect. Uncertainty emerges when we invest this capital for potential efficiencies like tools and infrastructure.&lt;/p>
&lt;p>We see how our first cities overcame the brutal, short life of nature. For a premodern city, operating on the edge of Malthusian crunch, putting 999 joules in, to get 1000J out of a plant, when that next invention brings 1% efficiency, it cuts the cost to 990J, energy profit rising 1000$ from 1J to 10J, surplus for civilization, specialization, future inventions. Each development pulled us out of the struggling mire.&lt;/p>
&lt;p>Unfortuately, the next 1% efficiency gain cuts our cost to 980.1J, out profit only doubles to 19.9J. Further R&amp;amp;D yields diminished marginal returns. (Increasing efficiency allows us &lt;a href="https://en.wikipedia.org/wiki/Jevons_paradox">exploit even more&lt;/a> inputs as newer tasks are profitable.) &lt;span class="marginnote">A zerosum environment produces zerosum mindsets, chasing efficiency&lt;/span> However, when constrained to a fixed input budget, to chase efficiency a society will grow ever &lt;a href="https://en.wikipedia.org/wiki/Agricultural_Involution">complexer yet no richer&lt;/a>. Stagnation is civilization&amp;rsquo;s optimal failure mode, stuck in a local minimum yet not wiped away. Increasing inputs (e.g. settling new lands) staves this off. &lt;span class="marginnote">More powerful though less efficient, horses and steam engines outcompeted oxen and waterwheels, because they allowed us to increase inputs.&lt;/span> Increasing power to further harness new inputs leads to revolutionary progress like the &lt;a href="https://en.wikipedia.org/wiki/Great_Divergence">great divergence&lt;/a> and &lt;a href="https://en.wikipedia.org/wiki/Convergence_(economics)">great convergence&lt;/a> in spite of reduced efficiency.&lt;/p>
&lt;p>What happens when we run out of new inputs? Without new horizons and vistas to boldly explore, we too will stagnate, &lt;a href="https://en.wikipedia.org/wiki/Universal_monarchy#Vision_of_history">locked at the asymptote forever&lt;/a>. There are limits to growth. On Earth alone, at our historical 3% growth in energy, the planet would literally boil in 400 years. Thankfully we&amp;rsquo;re not there yet. Nuclear offers even higher energy returns, geothermal sources are untapped, our own solar system offers many Earths of material and space.&lt;/p>
&lt;h2 id="why-did-we-stop">Why did we Stop?&lt;/h2>
&lt;p>Then why does our society already preach efficiency, reduction, degrowth? &lt;span class="marginnote">Yes, let&amp;rsquo;s reduce waste.&lt;/span> To forego the &lt;a href="https://alexalejandre.com/finance/more-energy-pls/">promises of energy&lt;/a> is to lock our children on Earth forever.&lt;/p>
&lt;p>Indeed, Vaclav Smil embraces efficiency for political reasons.&lt;/p>
&lt;h2 id="right-or-wrong">Right or Wrong?&lt;/h2>
&lt;h3 id="energy-myths-and-realities">Energy Myths and Realities&lt;/h3>
&lt;p>His deep dive into net zero futures, concluding renewables can&amp;rsquo;t drive modern civilization.&lt;/p>
&lt;p>AEI Press publishes him, a fossil fuel industry mouth piece&lt;/p>
&lt;p>He does believe in climate change, estimating 2.5-3c rise.&lt;/p>
&lt;blockquote>
&lt;p>Climate change resulting from emissions of CO2 (and from releases of other greenhouse gases) will have an indisputably global effect&lt;/p>&lt;/blockquote>
&lt;p>But he is unsure how to model some aspects:&lt;/p>
&lt;blockquote>
&lt;p>Global warming will … lengthen the growing seasons and intensify water cycling (i.e. the overall amount of precipitation will increase) in many regions. This combination will result in higher plant productivity, a trend that was already evident throughout most of the United States during the latter half of the twentieth century. But what the long-term effect of such changes will be is not clear. Will the additional productivity be promptly negated by higher rates of respiration in a warmer world? Will most of its increment be stored in long-lived tissues, such as trunks and major roots, or tissues with rapid turnover, such as foliage and fine roots? And, most fundamentally, will global warming eventually convert forests from carbon sinks to carbon sources?&lt;/p>&lt;/blockquote>
&lt;p>He rejects peak oil:&lt;/p>
&lt;blockquote>
&lt;p>Obviously, there will come a time when global oil extraction will reach its peak, but even that point may be of little practical interest as it could be followed by a prolonged, gentle decline or by an extended output plateau at a somewhat lower level than peak production. At the beginning of 2013, there are no signs that the beginning of this new oil era (regardless of its specific course) is imminent, and forecasting its onset remains an exercise in futility. Only one thing is abundantly clear to me: for the past 15 years I have been quite confident that there is no imminent danger of any sharp peak of global oil extraction followed by an inexorable production slide — and early in 2013 that confidence is greatly strengthened by new facts. Is it too much to hope that even some catastrophists and peak-oil cultists will find it impossible to ignore those numbers?
&lt;a href="https://web.archive.org/web/20190320204528/https://www.aei.org/publication/memories-of-peak-oil/">https://web.archive.org/web/20190320204528/https://www.aei.org/publication/memories-of-peak-oil/&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>On nuclear:&lt;/p>
&lt;blockquote>
&lt;p>Nuclear energy’s discouraging record is even more unfortunate given that nuclear generation is the only low-carbon-footprint energy option readily available on a gigawatt-level scale. This is why nuclear power should be part of any serious attempt to reduce the rate of global warming. At the same time, it would be naïve to think that nuclear power could be (as some suggest) the single most effective tool for combating climate change in the next ten to 30 years. The best hope is for it to offer a modest contribution.
&lt;a href="https://web.archive.org/web/20190320204536/http://www.aei.org/publication/a-realistic-future-for-nuclear-energy/">https://web.archive.org/web/20190320204536/http://www.aei.org/publication/a-realistic-future-for-nuclear-energy/&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Public unease about safety and problems with costs, liability, and permanent storage do not make a flourishing nuclear industry impossible, but they do demonstrate the enormous influence that mistaken public risk perception can have on government policy and reveal the consistently inept bureaucratic handling of the challenge so far
&lt;a href="https://web.archive.org/web/20190320204536/http://www.aei.org/publication/a-realistic-future-for-nuclear-energy/">https://web.archive.org/web/20190320204536/http://www.aei.org/publication/a-realistic-future-for-nuclear-energy/&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Carbon capture makes little sense:&lt;/p>
&lt;blockquote>
&lt;p>Mass balances and cost considerations are enormously challenging. To sequester just 10% of all CO2 emitted from fossil fuel combustion, we would have to develop a new global industry that could handle the same mass of CO2 annually as the global mass of crude oil production. And the process would have to work in the opposite direction by spending huge amounts of money and energy to force billons of tons of supercritical CO2 fluid underground rather than bringing highly profitable oil above ground.
&lt;a href="http://web.archive.org/web/20230710184612/https://vaclavsmil.com/wp-content/uploads/2023/06/VS.PICTET.pdf">http://web.archive.org/web/20230710184612/https://vaclavsmil.com/wp-content/uploads/2023/06/VS.PICTET.pdf&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>carbon capture is itself unrealistic because of the “big numbers” involved. To capture and sequester even a third of global CO2 emissions, Smil argued, the CCS industry would need to grow to the size of the current oil and gas industry within two or three decades. He noted that while the oil and gas industry has been in constant development and growth since the 1860s, creating a comparably sized CCS industrial infrastructure would need to be accomplished by 2050 to align with efforts to reach net zero emissions.
&amp;hellip;
Pressurizing it and forcing it down in the ground, and what? Making sure it will stay there,” he added, noting that just putting it in the ground would not be good enough because it would start leaking on the scale of “eight billion tons of carbon a year, year after year after year.”
&lt;a href="https://www.desmog.com/2023/11/03/vaclav-smil-tells-shell-canada-president-carbon-capture-is-the-stupidest-solution/">https://www.desmog.com/2023/11/03/vaclav-smil-tells-shell-canada-president-carbon-capture-is-the-stupidest-solution/&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Natural gas is key to decarbonization:&lt;/p>
&lt;blockquote>
&lt;p>On the long road to complete decarbonization natural gas remains –when properly produced, transported and distributed– the least carbon-intensive fuel and this advantage is strengthened by its high conversion efficiencies
&lt;a href="https://web.archive.org/web/20230710183029/https://vaclavsmil.com/wp-content/uploads/2022/01/Natural-Gas-in-the-New-Energy-World.pdf">https://web.archive.org/web/20230710183029/https://vaclavsmil.com/wp-content/uploads/2022/01/Natural-Gas-in-the-New-Energy-World.pdf&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>If I were in charge of the planet: The most practical thing to do to reduce the emissions during the last 20 years would have been to rapidly close down as many coal-fired power plants as possible and replace their generation with combined-cycle 60-percent-plus-efficient natural gas plants
&lt;a href="https://www.nytimes.com/interactive/2022/04/25/magazine/vaclav-smil-interview.html">https://www.nytimes.com/interactive/2022/04/25/magazine/vaclav-smil-interview.html&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>although&lt;/p>
&lt;blockquote>
&lt;p>methane leakages during extraction, processing, and transportation do diminish the overall beneficial impact of using more natural gas, but they do not erase it, and they can be substantially reduced
&lt;a href="https://web.archive.org/web/20230710183517/https://vaclavsmil.com/wp-content/uploads/2021/08/Spectrume.June_.pdf">https://web.archive.org/web/20230710183517/https://vaclavsmil.com/wp-content/uploads/2021/08/Spectrume.June_.pdf&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Coal:&lt;/p>
&lt;blockquote>
&lt;p>While fossil fuels remain the very foundation of modern economic growth, spreading prosperity and a decent quality of life, they are no longer seen in that light. Rather, they are perceived as undesirable, outright dangerous, or even immoral, since their continuing use is thought to pose an unprecedented threat to the survival of modern civilization. Growing fears about rapid global warming caused by emissions of CO2 from the combustion of fossil fuels are behind this increasingly stringent judgment, and these fears feed (mostly unrealistic) visions of an accelerated global transition to nonfossil energies.&lt;/p>&lt;/blockquote>
&lt;ul>
&lt;li>Energy Myths and Realities&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Coal has always been more polluting in terms of particulate matter and sulfur oxide emissions than other hydrocarbons, and because it also has the highest CO2 emissions per unit of released energy, it is seen as the most undesirable choice. A closer look at coal’s attributes and the history of its use shows that this judgment is unfair and suggests that if the fuel’s conversion were done with the most efficient techniques available today, we would have no reason to view it so negatively. Crude oil—largely because of the continuing indispensability of refined fuels for the entire transportation sector occupies a more exalted place than coal. Although its considerable environmental impact is a concern, the main worry about oil is that its global extraction may peak in the very near future, and that this peak will not be followed by a prolonged production plateau but, rather, by a steep decline that will bring a multitude of economic and social hardships—in the most extreme versions, the end of modern civilization. That is why the first myth I debunk in this part of the book is the peak oil myth&lt;/p>&lt;/blockquote>
&lt;ul>
&lt;li>Energy Myths and Realities&lt;/li>
&lt;/ul>
&lt;p>More&lt;/p>
&lt;blockquote>
&lt;p>Hydroelectricity is the best, the most sustainable—I hate that word, sustainable. That’s the best form of renewable energy there is today, right? Because it runs all the time. Wind—well, you know, even in Manitoba, it’s not there 75 per cent of the time…. People feel constrained to be publicly correct to build a wind turbine farm…. Why do we do these stupidities, right? Well, because we feel renewable energy is only solar and wind, right? Not hydro apparently. Most people don’t think that way.
&lt;a href="http://web.archive.org/web/20190320154208/http://news.umanitoba.ca/vaclav-smil/">http://web.archive.org/web/20190320154208/http://news.umanitoba.ca/vaclav-smil/&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>shift to nuclear energy or to modern conversions of renewable energy flows was always inevitable. If fuel resources and technical abilities to recover them at affordable price were the only limitations, we could anticipate at least another century or more of coal, oil and gas. Global warming has made the transition to non-carbon energies a matter of some urgency, but we must nevertheless be realistic about the size and speed of such a shift
&lt;a href="http://web.archive.org/web/20190320194549/http://vaclavsmil.com/wp-content/uploads/VaclavSmil_EnergyTransitions_OECDObserver304_November2015_COP21_lowres.pdf">http://web.archive.org/web/20190320194549/http://vaclavsmil.com/wp-content/uploads/VaclavSmil_EnergyTransitions_OECDObserver304_November2015_COP21_lowres.pdf&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>The myth that the future belongs to electric cars is one of the original misconceptions of the modern energy era, dating back to the introduction of the very first passenger vehicles.
&lt;a href="https://web.archive.org/web/20190320204535/http://www.aei.org/publication/myth-the-future-belongs-to-electric-cars/">https://web.archive.org/web/20190320204535/http://www.aei.org/publication/myth-the-future-belongs-to-electric-cars/&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Fossil fuels now supply about 83% of the world’s commercial energy, compared to 86% in the year 2000. The new renewables (wind and solar) now provide (after some two decades of development) still less than 6% of the world’s primary energy, still less than hydroelectricity.
&lt;a href="http://web.archive.org/web/20230710174144/https://www.latimes.com/business/story/2022-09-05/the-energy-historian-who-says-rapid-decarbonization-is-a-fantasy">http://web.archive.org/web/20230710174144/https://www.latimes.com/business/story/2022-09-05/the-energy-historian-who-says-rapid-decarbonization-is-a-fantasy&lt;/a>&lt;/p>&lt;/blockquote>
&lt;h3 id="canadian-deindustrialization">Canadian Deindustrialization&lt;/h3>
&lt;p>Every G7 country and most industrialized countries make glass. Even Venezuela makes glass. Canada has to import it at a cost of $2 billion a year. One would think a market that big would produce someone capable of selling into it but not in Canada.&lt;/p>
&lt;p>I am surprised of how much Canada spends on something so basic like pasta. We export 2.2 billion worth of wheat each year&amp;hellip; yet we spend over 500 million each year to import pasta made from the wheat we sell.&lt;/p></content:encoded></item><item><title>Are "70%" of Bugs Memory Safety Issues?</title><link>https://alexalejandre.com/programming/70-percent-of-security-bugs/</link><pubDate>Thu, 05 Jan 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/70-percent-of-security-bugs/</guid><description>We often hear this 70% number thrown around (in the Rust community in particular). Is it true?</description><content:encoded>&lt;p>We often hear this 70% number thrown around (in the Rust community in particular). Is it accurate?&lt;/p>
&lt;p>In 2019 at BlueHat security, Matt Miller (MS security engineer) &lt;a href="https://github.com/microsoft/MSRC-Security-Research/blob/master/presentations/2019_02_BlueHatIL/2019_01%20-%20BlueHatIL%20-%20Trends%2C%20challenge%2C%20and%20shifts%20in%20software%20vulnerability%20mitigation.pdf">showed&lt;/a> 70% of MS patches (for CVEs) over the previous 12 years fixed memory safety bugs.&lt;/p>
&lt;p>&lt;a href="https://www.chromium.org/Home/chromium-security/memory-safety/">Google&lt;/a> echoed this:&lt;/p>
&lt;blockquote>
&lt;p>Around 70% of our high severity security bugs are memory unsafety problems (that is, mistakes with C/C++ pointers). Half of those are use-after-free bugs.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://hacks.mozilla.org/2019/02/rewriting-a-browser-component-in-rust/">Mozila&lt;/a> too.&lt;/p>
&lt;p>However this isn&amp;rsquo;t universal.&lt;/p>
&lt;p>&lt;a href="https://daniel.haxx.se/blog/2023/12/13/making-it-harder-to-do-wrong/">Curl&lt;/a> claims 40%.&lt;/p>
&lt;blockquote>
&lt;p>In 2010, the reported problems caused by C mistakes were at over 60%. [But today] 40.6% of the vulnerabilities in curl reported so far could have been avoided by using another language.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://www.collicutt.co.uk/notebook/openbsd_bugs">OpenBSD&lt;/a> sees ~30%!&lt;/p></content:encoded></item><item><title>SaaS Propaganda</title><link>https://alexalejandre.com/programming/saas-propaganda/</link><pubDate>Thu, 05 Jan 2023 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/saas-propaganda/</guid><description>I play devil&amp;rsquo;s advocate, steelmanning SaaS&amp;rsquo; business use.</description><content:encoded>&lt;p>tl;dr: SaaS is the best open source business model.&lt;/p>
&lt;p>N.b. Here I play devil&amp;rsquo;s advocate, steelmanning SaaS. I don&amp;rsquo;t do it well, the article needs attention.&lt;/p>
&lt;hr>
&lt;p>SaaS enables clients to outsource IT. (Originally, they&amp;rsquo;d sell the backend to run on prem or run it for monthly fee, with everyone preferring the latter.)&lt;/p>
&lt;p>Open source killed the mid-segment of fixed software sales (products like dBase, Turbo Pascal, Lightwave). Open source dev attention is generally unpaid (in spite of foundations and companies paying engineers to contribute.) The GPL always allowed resale and that won&amp;rsquo;t change. SaaS can be the middlemen-operators of yore. When you open source your product, you become a consultancy/host/maintenance company.&lt;/p>
&lt;p>There are &lt;span class="marginnote">Extreme because this hypothetical client needs it.&lt;/span> extreme usecases like resource intensive software with non-technical clients. Who configure everything there? (This is like selling a plane to someone without a license.)&lt;/p>
&lt;p>Even with an turn-key on prem system, who will maintain the system? &lt;span class="marginnote">Ok, traditional IT consultancies which maintain software and equipment from Cisco, VMWare, Citrix etc. do exist. With planes there are pilots for hire.&lt;/span> You could also sell lifetime licenses with support agreements, but non-technical customers won&amp;rsquo;t understand the delimination of responsibilities.&lt;/p>
&lt;p>From the business side:&lt;/p>
&lt;ul>
&lt;li>investors like subscriptions because it&amp;rsquo;s consistent, recurring, provable revenue, leading to much higher valuations. One off sales makes this harder. (if interest rates are 0.5%, an annual recurring payment of $100 is worth $20,000; but if interest rates are 5%, like in the 90’s, it is only worth $2,000. With the fed increasing rates, maybe we’ll see a return to pay-once software?)&lt;/li>
&lt;li>monthly costs can fall into personal discretion but large one off costs require more company supervision to approve&lt;/li>
&lt;/ul>
&lt;p>Big providers (Stripe, Gmail etc.) can often burn/drop customers with no worry of repercussion. Countless stories of &amp;ldquo;Big X killed my company&amp;rdquo; appear. There is of course no customer service, when the shiny automatic service fails. This is the risk of doing business (With them as a vendor).&lt;/p>
&lt;p>Easing, say commodifying competition in these spaces is one solution. If Gmail or Stripe had a dozen API compatible competitors, bad PR (from killing a business&amp;hellip;) would launch a customer migration. Customer support would be a viable differentator. An world where anti-trust acted would see many SaaS vendors competing in these segments, as paid alternatives. &lt;span class="marginnote">Whether the costs etc. are healthier to the ecosystem as a whole (enabling more SaaS companies to thrive, while costing others more), is uncertain. Some bigtech antimarket effects do subsidize other activity.&lt;/span> Certainly, the world would be more vibrant.&lt;/p>
&lt;p>Contracts (SLAs) force SaaS providers to be direct, accessible and reactive.&lt;/p>
&lt;p>Updated April 11, 2024: &lt;a href="https://opentofu.org/blog/our-response-to-hashicorps-cease-and-desist/">Opentofu&lt;/a> poses a partial counterexample, where Hashicorp&amp;rsquo;s SaaS offering is scalped by a free-beer alternative emulating it on a 1:1 basis (in response to the move to business source.) If this keeps happening, we&amp;rsquo;ll have a crab bucket situation, dissuading new companies from open source, entirely. (I have no idea what that would do to today&amp;rsquo;s SaaS exosystem though.)
&lt;span class="marginnote">Opentofu issues show a request before HashiCorp&amp;rsquo;s implementation appeared, making this particular case less clear.&lt;/span>&lt;/p>
&lt;p>Updated April 27, 2024: Looking into it deeper, we already have a clear picture. Besides Hashicorp&amp;rsquo;s move to business source (and IBM buyout), Redis, MongoDB, Cockroach, Sentry etc. moved to source available&amp;hellip; When this happens, open forks appear.&lt;/p>
&lt;p>But who should operate and generate revenue from these open forks?&lt;/p>
&lt;hr>
&lt;h3 id="sources">Sources:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://github.com/opentofu/opentofu/issues/299">https://github.com/opentofu/opentofu/issues/299&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>Antikubernetes Propaganda</title><link>https://alexalejandre.com/programming/anti-kubernetes-propaganda/</link><pubDate>Fri, 07 Oct 2022 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/anti-kubernetes-propaganda/</guid><description>&lt;p>Once upon a time in a simpler world, there were but system admins. All these middleware, DNS, SMTP, firewall, network and security admins hadn&amp;rsquo;t yet splintered - the sysadmin responsable for all, gluing all teams together, making a system of discrete parts made by engineers and DBAs. Rare is the organization which has reached the scale to benefit from this specifications. More commonly, we poor moderns create systems too complex to wrap our heads around or escape (shackled to the costliest compute known to man).&lt;/p></description><content:encoded>&lt;p>Once upon a time in a simpler world, there were but system admins. All these middleware, DNS, SMTP, firewall, network and security admins hadn&amp;rsquo;t yet splintered - the sysadmin responsable for all, gluing all teams together, making a system of discrete parts made by engineers and DBAs. Rare is the organization which has reached the scale to benefit from this specifications. More commonly, we poor moderns create systems too complex to wrap our heads around or escape (shackled to the costliest compute known to man).&lt;/p>
&lt;p>tl;dr: Kubernetes isn&amp;rsquo;t for everyone. It:&lt;/p>
&lt;ul>
&lt;li>has a questionable cost-benefit ratio at small scale (e.g. the stereotypical resume driven developer running a pair of containers on it&amp;hellip;)&lt;/li>
&lt;li>quickly moves with breaking changes, a clear turn off&lt;/li>
&lt;li>peer pressure encourages overenginering. Gatekeepers encourage service meshes, ingress etc. (which also leads to pushback)&lt;/li>
&lt;li>demands a specific development lifecycle, single images, microservices&amp;hellip; to allow easy EKS management (while most software is legacy), lest the asset be a liability.&lt;/li>
&lt;/ul>
&lt;p>But I am a fair man and can admit to some benefits at scale. EKS:&lt;/p>
&lt;ul>
&lt;li>scales across regions. ECS cannot&lt;/li>
&lt;li>runs 737 pods/instance, ECS &amp;ldquo;only&amp;rdquo; 120 tasks/instance&lt;/li>
&lt;li>provides extended health checks (readiness, startup and liveness probes)&lt;/li>
&lt;li>offers useful metrics (pod restarts, OOM events etc..) while ECS is limited to basic CPU, Mem, #tasks at cluster/task level.&lt;/li>
&lt;li>supports AWS/k8s plugins, pre- and postdeploy jobs helm charts and cron schedulers, helping with data migrations&lt;/li>
&lt;li>delivers higher security with RBAC&lt;/li>
&lt;li>locks you in, atrophying your in-house system admin and operations skills. (EKS can further atrophy your Kubernetes skills, locking you in further!) Remember, it&amp;rsquo;s a complex platform geared towards complex problem spaces. Other cloud native products exist to run containers, with easier set ups, management stories, learning curves&amp;hellip;&lt;/li>
&lt;/ul>
&lt;p>Kubernetes&amp;rsquo; chief benefit is enabling cloud provider agnosticism/multicloud admittedly quite useful &lt;a href="https://alexalejandre.com/programming/anticloud-propaganda/">in this cost enviroment.&lt;/a>.&lt;/p>
&lt;p>Alas, even in the appropriate (massive) contexts&amp;hellip; DevOps itself has sucumbed to enshittification, with many jobs focused on K8s alone, without talking to engineering. How precious few jobs actually involve the engineering, culture etc. (or even just writing code with actual tests) needed to deliver its promises? And aren&amp;rsquo;t just wrangling DSLs/yaml? Matt Rickard&amp;rsquo;s covered this further: &lt;a href="https://matt-rickard.com/advanced-configuration-languages-are-wrong">https://matt-rickard.com/advanced-configuration-languages-are-wrong&lt;/a>&lt;/p>
&lt;p>Yeah, perhaps I&amp;rsquo;m blamming Kubernetes unfairly, but this is propaganda!&lt;/p></content:encoded></item><item><title>Anticloud Propaganda</title><link>https://alexalejandre.com/programming/anticloud-propaganda/</link><pubDate>Fri, 29 Jul 2022 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/anticloud-propaganda/</guid><description>&lt;p>tl;dr: What&amp;rsquo;s your cost per request (cpr)? How much does more monitoring and logging cost for what gain in uptime/reliability/visibility and more importantly, customer satisfaction?&lt;/p></description><content:encoded>&lt;p>tl;dr: What&amp;rsquo;s your cost per request (cpr)? How much does more monitoring and logging cost for what gain in uptime/reliability/visibility and more importantly, customer satisfaction?&lt;/p>
&lt;hr>
&lt;p>At Heztner a dedicated server with 8 hyperthreads, 32 GB RAM, 4 TB HDD is €33. &lt;span class="marginnote">at time of writing&lt;/span> At Amazon, an EC2 with &lt;a href="https://instances.vantage.sh/aws/ec2/t4g.2xlarge">t4g.2xlarge&lt;/a> with 8 cores, 32 GB RAM costs, $194, then add in 2 TB EBS HDD for $30, then add in Amazon traffic charges.&lt;/p>
&lt;p>Of course, it gets even worse. If you want to run &amp;ldquo;serverless&amp;rdquo; you&amp;rsquo;ll need 100 AWS lambdas to serve 1000 requests/sec, while the same node process on fastify.js or hapi.js would handle hundreds, yea thousands of RPS. With AWS you also get to shell out for provisioned concurrency and build workarounds for lambda&amp;rsquo;s inherent limitations.&lt;/p>
&lt;p>Thus cloud spending &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2022-02-09-gartner-says-more-than-half-of-enterprise-it-spending">shall soon account for half of all IT spending.&lt;/a> But how has &lt;a href="https://a16z.com/2021/05/27/cost-of-cloud-paradox-market-cap-cloud-lifecycle-scale-growth-repatriation-optimization/">this money sink&lt;/a> seduced our industry?&lt;/p>
&lt;p>Optimistically, the hallowed cloud/DevOps saves money by removing operations. The story starts: Once upon a time your servers would just sit there, spinning drives idly, waiting, burning cash in underutilization. The cloud&amp;rsquo;s not so bad, it just makes you notice hourly costs more than your own idle hardware&amp;hellip;&lt;/p>
&lt;p>Alas, the typical story sees a hot shot resume driven dev spend his investor&amp;rsquo;s money to build containers 100s of MBs in size (with an OS, Node.js etc.), even being charged to transfer images between data centers, lazily storing the build cache in a multi-region bucket and registry, all to get long cold-start times.&lt;/p>
&lt;p>Cloudfare sounds a bit different, providing special workers and shipping a V8-like runtime for you. While this shockingly efficient offering beats the &amp;ldquo;give me your worst container image&amp;rdquo;, it clips your wings. Imagine you know what you&amp;rsquo;re doing and want to use the &amp;ldquo;cloud native language&amp;rdquo;: Go. Too bad, &lt;a href="https://community.cloudflare.com/t/native-golang-support-for-workers/65896/8">you can&amp;rsquo;t use go with cloudfare workers&lt;/a>. But even if you use JS, you&amp;rsquo;ll wrestle with a litany of idiosyncrasies and incompatibilities in their runtime. To get a first class Go experience, you&amp;rsquo;ll use GCP&amp;rsquo;s cloud functions or AWS lambdas - bringing us full circle.&lt;/p>
&lt;p>To fully leverage the cloud&amp;rsquo;s features, modern organizations turn to tools like &lt;a href="https://alexalejandre.com/programming/anti-kubernetes-propaganda/">Kubernetes&lt;/a>. Alas, Kubernetes is hard and we quickly turn to services, outsourcing orchestration with Amazon&amp;rsquo;s EKS, Microsoft&amp;rsquo;s AKS and Google&amp;rsquo;s GKE, yea GKE Autopilot, EKS Fargate, &lt;a href="https://www.datadoghq.com/container-report/">which see majority adoption&lt;/a> (or Rancher, Red Hat, OpenShift, VMware Tanzu etc.)&lt;/p>
&lt;p>Joe Beda, K8 cofounder in this video: &lt;a href="https://www.infoworld.com/article/3605728/kubernetes-co-creator-joe-beda-answers-2-key-questions.html">“there are very few reasons to &amp;hellip; go &amp;hellip; to open source binaries and [write your] own tooling &amp;hellip; unless you are using Kubernetes in a way that is really unique”&lt;/a> But why should there be very few reasons? You can go at it alone and save!&lt;/p>
&lt;p>Sure, “there are always exceptions for organizations with strong engineering and operations chops to run Kubernetes themselves, but it became clear for most customers that became a daunting task” &lt;a href="https://www.infoworld.com/article/3614850/no-one-wants-to-manage-kubernetes-anymore.html">said&lt;/a> Deepak Singh.&lt;/p>
&lt;p>Well, ok. There is always the &lt;a href="https://alexalejandre.com/programming/saas-propaganda/">promise of SaaS&lt;/a>. Your company may wish to run its operations itself, but any good economist knows you only gain competitive advantage with operations in your core competency, so you give in and turn to specialized vendors who run them better, cheaper&amp;hellip; Wait.&lt;/p>
&lt;p>We price our service tiers according to API calls, data volume etc. so we know how much they cost. Yet unlike every other industry, tech companies don&amp;rsquo;t often care to optimize on cost and increase profit margins. Indeed, many are proudly unprofitable, rushing to scale at all costs, while incinerating capital in a zerosum game. &lt;span class="marginnote">Capital, human and financial, is limited and we allocate to these outlets to the detriment of others.&lt;/span> We can do better. We owe it to ourselves, the world and the future to build profitable, productive organizations.&lt;/p>
&lt;hr>
&lt;p>I leave you with horrific cloud cost stories:&lt;/p>
&lt;blockquote>
&lt;p>We are actively encouraged NOT to spend time finding cost savings, we are a unicorn startup and everything is about growth and pruning old instances is not all a priority right now. If I can spin it that it&amp;rsquo;s for security reasons, it can be a win. we have a two week &amp;lsquo;gap week&amp;rsquo;s un between agile sprints in July where we are encouraged to do work that&amp;rsquo;s not priority, or fun, or even for other teams, and I used that time to convert some storage to lower storage tiers, saving $15000/month on two buckets alone just by changing some IaC lifecycle flags &amp;hellip;I was all like &amp;lsquo;well that&amp;rsquo;s another FTE budget&amp;rsquo; and my manager didn&amp;rsquo;t even want to announce I had done it because it&amp;rsquo;s off mission&lt;/p>&lt;/blockquote>
&lt;p>or&lt;/p>
&lt;blockquote>
&lt;p>Someone was benchmarking the latest VM SKUs to see if it will work better for our application. They had them incorrectly configured where the min and max node count was the same in the VM scale set, to save time so he didn&amp;rsquo;t need to wait for a scaling event. And once he was done, he left them up and forgotten about until after he got back after Christmas vacation, and we saw the 6 digit spend in the subscription. I hope you appreciated our inadvertent Christmas bonus we sent you, you fine folks at M$.&lt;/p>&lt;/blockquote>
&lt;p>or&lt;/p>
&lt;blockquote>
&lt;p>always seems to crop its ugly head is logging costs whether it be DataDog, ELK, Greylog, etc.. is that for some reason (valid or not) a software developer turns up logging on the app/service and forgets about it.&lt;/p>&lt;/blockquote>
&lt;p>or&lt;/p>
&lt;blockquote>
&lt;p>what was generating 3000$ in Cloudwatch logs in one day.. My lambda function was freewheeling for most of the day, because I made a typo.. so the function would error out, causing the EC2 instance to be recreated because of the failed startup function and the same thing happened again and again until I finally fixed the log function properly later that day.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a href="https://www.reddit.com/r/devops/comments/wrrilu/its_sad_to_see_money_get_burned/">https://www.reddit.com/r/devops/comments/wrrilu/its_sad_to_see_money_get_burned/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://www.infoworld.com/article/3562574/7-dark-secrets-of-cloud-costs.html">https://www.infoworld.com/article/3562574/7-dark-secrets-of-cloud-costs.html&lt;/a>&lt;/p></content:encoded></item><item><title>Docker the Company's Death</title><link>https://alexalejandre.com/programming/docker-company-death/</link><pubDate>Thu, 21 Jul 2022 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/docker-company-death/</guid><description>How to commercialize open source?</description><content:encoded>&lt;p>tl;dr: Docker&amp;rsquo;s profit center was an enterprise version of Docker swarm for container orchestration. Kubernetes displaced it for free.&lt;/p>
&lt;hr>
&lt;p>Cloud giants all wanted a piece of the pie but when elephants fight, the grass gets trampled. Each pulled Docker in its own direction.&lt;/p>
&lt;p>Docker tried to build and monetize both the developer and enterprise (for deployment) products, unfocused, but couldn&amp;rsquo;t convert enterprise customers, who instead built their own solutions or worked with established partners. &amp;ldquo;There was a fundamental inability to deliver commercial software&amp;rdquo; said Nick Stinemates, VP of business development. “I would have held off rushing to scale a commercial product and invested more in collecting insight from our community and building a team dedicated to understanding their commercial needs.” Docker had a few misses:&lt;/p>
&lt;p>Pivotal, Red Hat etc. commercialized Docker in their PaaS products (OpenShift, Cloud Foundry) but Docker the company didn&amp;rsquo;t. Early customers like Amadeus turned to Red Hat to fill Docker&amp;rsquo;s enterprise void.&lt;/p>
&lt;p>Docker missed Kubernetes, thinking it was too complicated and Docker Swarm would be more successful. In 2014, Docker could have managed the Kubernetes team with Google to rule the ecosystem but forewent it. Craig McLuckie (Kubernetes cofounder) offered to donate it to Docker. (&lt;a href="https://kubernetes.io/blog/2018/07/20/the-history-of-kubernetes-the-community-behind-it/">https://kubernetes.io/blog/2018/07/20/the-history-of-kubernetes-the-community-behind-it/&lt;/a>)&lt;/p>
&lt;h2 id="how-to-commercialize-open-source">How to commercialize open source?&lt;/h2>
&lt;p>Docker&amp;rsquo;s founder and CEO disagreed on direction. Ben Golub (CEO) wanted to move to business earlier, Soloman (founder) wanted to stay community driven to grow naturally. This made 2 Dockers: Community Edition (CE) and Enterprise Edition (EE), without officially splitting and dividing resources accordingly. CE was a massively popular command line tool and OS project. &amp;ldquo;we determined that Docker had two very distinct and different businesses: one an active developer business, and the other a growing enterprise business. We also found that the product and the financial models were vastly different&amp;rdquo; &lt;a href="https://www.docker.com/press-release/docker-new-direction">said&lt;/a> CEO Rob Bearden.&lt;/p>
&lt;p>Ben Kepes &lt;a href="https://twitter.com/benkepes/status/1166838713063632896">wrote&lt;/a> &amp;ldquo;They thought they could create a walled garden off the back of an OSS project and failed to see there was no obvious way to scale revenue from their model&amp;rdquo; which Krish Subramanian &lt;a href="https://twitter.com/krishnan/status/1166820777477361664">echoed&lt;/a> &amp;ldquo;any orchestration but with our batteries attached&amp;rdquo;.&lt;/p>
&lt;p>Docker failed to build friends in the wider open source community. &amp;ldquo;Docker paid the price for blocking contributions and not having an open community&amp;rdquo; &lt;a href="https://twitter.com/krishnan/status/1166820777477361664">wrote&lt;/a> Krish Subramanian. &amp;ldquo;Docker made no friends at all in the industry. My experience was they were convinced they needed nobody, were better than everybody, and it was essentially fate. Turns out you need friends when the industry turns&amp;rdquo; &lt;a href="https://twitter.com/adamhjk/status/1166845767597707264">wrote&lt;/a> Adam Jacob.&lt;/p>
&lt;p>&amp;ldquo;Open source is non-rivalrous. Figure out a way to monetize that doesn’t set you up in opposition to your community, and people will love you. But if you need to diminish the community in order to be successful, people will treat you as if your product is proprietary&amp;rdquo; &lt;a href="https://twitter.com/VanL/status/1166861829148172289">said&lt;/a> Van Lindberg.&lt;/p>
&lt;p>In 2019 Docker sold the enterprise department to Mirantis, whose product was absorbed into Mirantis&amp;rsquo; Kubernetes engine.&lt;/p></content:encoded></item><item><title>Of Fossils and Rarer Russian Cases</title><link>https://alexalejandre.com/languages/russian/more-russian-cases/</link><pubDate>Wed, 20 Jul 2022 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/russian/more-russian-cases/</guid><description>Russian has more than 6 cases!</description><content:encoded>&lt;p>Textbooks (abroad and in Russia) simplify the grammar a bit. In this case, they hide many &lt;a href="https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D0%B4%D0%B5%D0%B6#%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BF%D0%B0%D0%B4%D0%B5%D0%B6%D0%B8">further&lt;/a> cases which few nouns take.&lt;/p>
&lt;h4 id="locative-with-вна">Locative with в/на&lt;/h4>
&lt;p>местный/второй предложный падеж&lt;/p>
&lt;p>Textbooks do teach this, so most learners know masc. use -у́ like в лесу́. Fem. in -ь use -и́, which explains Pushkin&amp;rsquo;s line:&lt;/p>
&lt;blockquote>
&lt;p>Всё ходит по цепи́ кругом&lt;/p>&lt;/blockquote>
&lt;p>в тени́, на печи́, в крови́, на двери́&lt;/p>
&lt;p>N.b. this is generally for concrete uses, while the prepositional occurs in metaphorical uses: На переднем кра́е науки not краю́. On the other hand, работать на дому́ means &amp;ldquo;work from home&amp;rdquo; while an antenna стоит на до́ме.&lt;/p>
&lt;h4 id="partative">Partative&lt;/h4>
&lt;p>второй родительный, частичный&lt;/p>
&lt;p>Used with amounts, like French use of de. It&amp;rsquo;s not required, genitive and accusative forms can be used instead. Like some Belarusian, Ukrainian or Polish genitives, it takes the form of -у: много чаю, мало сахару, народу, снегу&lt;/p>
&lt;p>Verbs also use it:
налить наю, задать жару, прибавить ходу, выпить кефиру, огоньку не найдется?&lt;/p>
&lt;p>The soup &amp;ldquo;щи&amp;rdquo; exhibits a rather unexpected form: щец&lt;/p>
&lt;h4 id="второй-винительный-with-в">второй винительный with в&lt;/h4>
&lt;p>Превратительный / включительный&lt;/p>
&lt;ul>
&lt;li>баллотиророваться в предиенты&lt;/li>
&lt;li>взять в зятья&lt;/li>
&lt;li>выйти в люди&lt;/li>
&lt;li>я в министры бы пощел&lt;/li>
&lt;li>пойти в сварщики&lt;/li>
&lt;/ul>
&lt;h4 id="vocative--звательный">Vocative / звательный&lt;/h4>
&lt;p>Some fossilized forms like:&lt;/p>
&lt;ul>
&lt;li>Боже&lt;/li>
&lt;li>отче&lt;/li>
&lt;li>человече&lt;/li>
&lt;/ul>
&lt;p>New version removes the final vowel from feminine nouns: Тань, Саш, Петь, мам&lt;/p>
&lt;h4 id="paucative--счётный">Paucative / счётный&lt;/h4>
&lt;p>After 2-4, полтора, оба, we see different stress with the following nouns: шага́, шара́, часа́, ряда́, полоза́. As with normal nouns, this applies to further combinations like 72 and 54.&lt;/p>
&lt;h4 id="ждательный">ждательный&lt;/h4>
&lt;p>This is the genitive ждать, спросить, желать, достичь, опасаться etc. take with non-persons: ждем маму vs. ждем письмо. It expresses something less concrete than an accusative.&lt;/p>
&lt;h4 id="лишительный">лишительный&lt;/h4>
&lt;p>This is the genitive sometimes used with negation when an accusative would be expected.&lt;/p>
&lt;h4 id="unclear">Unclear&lt;/h4>
&lt;p>Some sort of ablative: из дому&lt;/p>
&lt;p>??? до дому, до лесу&lt;/p></content:encoded></item><item><title>How to Learn Go</title><link>https://alexalejandre.com/programming/go/how-to-learn-go/</link><pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/go/how-to-learn-go/</guid><description>&lt;h3 id="first-steps">First Steps&lt;/h3>
&lt;ul>
&lt;li>
&lt;details id="for-new-programmers">
&lt;summary>For new programmers:&lt;/summary>
&lt;br>
Alex Edwards' Let's Go and Let's Go Further teach core patterns, project structure and API development. They're the best introduction for a new programmer.
&lt;br>&lt;br>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="for-experienced-programmers">
&lt;summary>For experienced programmers:&lt;/summary>
&lt;ul>
&lt;li>&lt;a href="https://go.dev/tour/welcome/1">Tour of Go&lt;/a> is the best place to get a feel for the language. &lt;span class="marginnote">A few hours at most.&lt;/span>&lt;/li>
&lt;li>Pick one:
&lt;ul>
&lt;li>Matt Holiday&amp;rsquo;s video &lt;a href="https://www.youtube.com/playlist?list=PLoILbKo9rG3skRCj37Kn5Zj803hhiuRK6">course&lt;/a> is in-depth and covers a lot of ground.&lt;/li>
&lt;li>&lt;a href="https://quii.gitbook.io/learn-go-with-tests/">Learn Go with Tests&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://go.dev/doc/effective_go">Effective Go&lt;/a>&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;/ul>
&lt;h3 id="whats-next">What&amp;rsquo;s next?&lt;/h3>
&lt;ul>
&lt;li>Cloud Native Go - Titmus&lt;/li>
&lt;li>&lt;a href="https://100go.co/">100 Go Mistakes&lt;/a>&lt;/li>
&lt;li>Style guides by &lt;a href="https://github.com/uber-go/guide/blob/master/style.md">Uber&lt;/a> and &lt;a href="https://google.github.io/styleguide/go/decisions">Google&lt;/a>&lt;/li>
&lt;li>Writing an Interpreter in Go &amp;amp; Writing a Compiler in Go - Thorsten Ball&lt;/li>
&lt;/ul>
&lt;p>Make a server, but not some demo thing, go all the way.&lt;/p></description><content:encoded>&lt;h3 id="first-steps">First Steps&lt;/h3>
&lt;ul>
&lt;li>
&lt;details id="for-new-programmers">
&lt;summary>For new programmers:&lt;/summary>
&lt;br>
Alex Edwards' Let's Go and Let's Go Further teach core patterns, project structure and API development. They're the best introduction for a new programmer.
&lt;br>&lt;br>
&lt;/details>&lt;/li>
&lt;li>
&lt;details id="for-experienced-programmers">
&lt;summary>For experienced programmers:&lt;/summary>
&lt;ul>
&lt;li>&lt;a href="https://go.dev/tour/welcome/1">Tour of Go&lt;/a> is the best place to get a feel for the language. &lt;span class="marginnote">A few hours at most.&lt;/span>&lt;/li>
&lt;li>Pick one:
&lt;ul>
&lt;li>Matt Holiday&amp;rsquo;s video &lt;a href="https://www.youtube.com/playlist?list=PLoILbKo9rG3skRCj37Kn5Zj803hhiuRK6">course&lt;/a> is in-depth and covers a lot of ground.&lt;/li>
&lt;li>&lt;a href="https://quii.gitbook.io/learn-go-with-tests/">Learn Go with Tests&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://go.dev/doc/effective_go">Effective Go&lt;/a>&lt;/li>
&lt;/ul>
&lt;/details>&lt;/li>
&lt;/ul>
&lt;h3 id="whats-next">What&amp;rsquo;s next?&lt;/h3>
&lt;ul>
&lt;li>Cloud Native Go - Titmus&lt;/li>
&lt;li>&lt;a href="https://100go.co/">100 Go Mistakes&lt;/a>&lt;/li>
&lt;li>Style guides by &lt;a href="https://github.com/uber-go/guide/blob/master/style.md">Uber&lt;/a> and &lt;a href="https://google.github.io/styleguide/go/decisions">Google&lt;/a>&lt;/li>
&lt;li>Writing an Interpreter in Go &amp;amp; Writing a Compiler in Go - Thorsten Ball&lt;/li>
&lt;/ul>
&lt;p>Make a server, but not some demo thing, go all the way.&lt;/p>
&lt;ul>
&lt;li>unit, integration, e2e tests&lt;/li>
&lt;li>Database&lt;/li>
&lt;li>Integrate with an OAuth provider and use access controls&lt;/li>
&lt;li>Make it horizontally scalable&lt;/li>
&lt;li>Dockerize it and run the service in the cloud&lt;/li>
&lt;li>Secure it with SSL&lt;/li>
&lt;li>Make it auditable and monitorable&lt;/li>
&lt;li>Get a build infrastructure and a release process for it&lt;/li>
&lt;/ul>
&lt;p>In other words, just do the stuff you&amp;rsquo;d be doing if you were working with it professionally.&lt;/p>
&lt;h3 id="advanced">Advanced&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://go.dev/blog/all">Go Blog&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://golangweekly.com/issues">Go Weekly&lt;/a> Newsletter&lt;/li>
&lt;li>&lt;a href="https://github.com/dgryski/go-perfbook/blob/master/performance.md">Go Performance&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blogs.sap.com/2023/11/10/mastering-concurrency-unveiling-the-magic-of-gos-scheduler/#">https://blogs.sap.com/2023/11/10/mastering-concurrency-unveiling-the-magic-of-gos-scheduler/#&lt;/a>&lt;/li>
&lt;li>upcoming go proposals: &lt;a href="https://github.com/golang/go/issues/33502">https://github.com/golang/go/issues/33502&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="also-useful">Also Useful:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://gobyexample.com/">Go by Example&lt;/a> and &lt;a href="https://gowebexamples.com/">Go Web Examples&lt;/a> show typical menial patterns like file handling, environment variables, flags etc.&lt;/li>
&lt;/ul>
&lt;h3 id="difficult-to-recommend">Difficult to Recommend:&lt;/h3>
&lt;ul>
&lt;li>Go Design Patterns - Mario Castro Contreras: The community balks at &amp;ldquo;designs patterns&amp;rdquo; as bandaids over missing features in languages like Java. Go of course has its own patterns, but the community hasn&amp;rsquo;t yet categorized them explicitly. &lt;span class="marginnote">Creational ones like factory, builder, constructor etc. are common.&lt;/span> This best works as a catelogue of antipatterns.&lt;/li>
&lt;li>Functional Programming in Go - Dylan Meeus: Though Go is not functional, many insights do apply. You need enough experience and judgement to identify and avoid antipatterns.&lt;/li>
&lt;/ul></content:encoded></item><item><title>Falling Oil Production</title><link>https://alexalejandre.com/finance/falling-oil-production/</link><pubDate>Tue, 22 Feb 2022 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/finance/falling-oil-production/</guid><description>&lt;p>Brazil is the only country in the world who expects to produce more in 5 or 10 years and is making the required investments. Elsewhere, there has been precious little capital expenditure (outside of fracking) for over a decade beyond what&amp;rsquo;s needed to maintain current production levels. Keeping production even requires a lot of energy and money - which hasn&amp;rsquo;t actually been going in very much. The super majors all plan to reduce production every year from now on. Some national oil companies are aiming at maintaining levels (or in Brazil&amp;rsquo;s case raising). Private US and Canadian companies are also planning to increase.&lt;/p></description><content:encoded>&lt;p>Brazil is the only country in the world who expects to produce more in 5 or 10 years and is making the required investments. Elsewhere, there has been precious little capital expenditure (outside of fracking) for over a decade beyond what&amp;rsquo;s needed to maintain current production levels. Keeping production even requires a lot of energy and money - which hasn&amp;rsquo;t actually been going in very much. The super majors all plan to reduce production every year from now on. Some national oil companies are aiming at maintaining levels (or in Brazil&amp;rsquo;s case raising). Private US and Canadian companies are also planning to increase.&lt;/p>
&lt;p>The past few years have been flush with articles talking about &lt;a href="https://oilprice.com/Energy/Crude-Oil/OPECs-No2-Fails-To-Reach-Oil-Output-Quota.html">declining capacity.&lt;/a> Russia is producing probably as much as it ever will right now, &lt;a href="https://oilprice.com/Latest-Energy-News/World-News/OPEC-Fails-To-Reach-Production-Targets-In-January.html">OPEC has failed&lt;/a> to meet its production targets for months. Saudi Arabia can increase production by a few million barrels per day, and Iran can probably do 2.5 million total (but it&amp;rsquo;s suspected they&amp;rsquo;ve already been at over &lt;a href="https://oilprice.com/Latest-Energy-News/World-News/Iran-Oil-Exports-Jump-Over-1-Million-Bpd.html">1 million/day&lt;/a> for a while, secretly to China, maybe even 1.5 so an extra 1 million barrels won&amp;rsquo;t mean much.) Iraq is about to decline, many smaller producers in Africa and S. America have declined by half in the past few years&amp;hellip;&lt;/p>
&lt;p>That is, a structural capacity gap has caused these exploding prices. Russian fears made a short spike of a few percent, but it&amp;rsquo;s otherwise irrelevant. If Russian capacity actually went offline, massive demand destruction would occur as oil spiked to $200 or so. (Russia can&amp;rsquo;t move most of its capacity East towards China, due to a lack of pipelines and necessary infrastructure. They can move some by rail, and they have limited infrastructure already, but this capacity is already used on long term contracts. It would probably bring 5 million barrels/day offline which can&amp;rsquo;t really be replaced otherwise. But, well, actually sanctioning Russian oil would be economic suicide, so it won&amp;rsquo;t happen.)&lt;/p>
&lt;p>Investments in fracking aren&amp;rsquo;t long lasting either. In the 2014 spike, it just destroyed huge amounts of shareholder value and resulted in perhaps a trillion in nearly stranded (or simply massively mispriced) assets. Frack wells lose most of their productivity within about a year and the fields don&amp;rsquo;t have much life in them either. To reach current production levels, US producers have been exploiting and &lt;a href="https://oilprice.com/Latest-Energy-News/World-News/US-DUC-Count-Drops-48-In-Two-Years.html">draining prepared wells&lt;/a> that have been waiting for years, and have gone from 8000-&amp;gt;4000 of them recently.&lt;/p>
&lt;h3 id="russia">Russia&lt;/h3>
&lt;p>In 2013, OECD estimated Russia needed &lt;a href="https://www.oecd.org/about/publishing/Russia-Modernising-the-Economy-EN.pdf">$100 billion&lt;/a> per year until 2030 to modernize its energy grid, develop new oil and gas production sites etc. The following year saw sanctions imposed (although production did &lt;a href="https://www.oxfordenergy.org/wpcms/wp-content/uploads/2019/09/The-Future-of-Russian-Oil-Production-in-the-Short-Medium-and-Long-Term-Insight-57.pdf">increase&lt;/a>.)&lt;/p>
&lt;p>That is to say, recent oil prices had nearly nothing to do with Russia. The issue&amp;rsquo;s that there has been nearly no capital expenditure (outside of Shale in north America) &lt;span class="marginnote">The first shale boom eviscerated capital, 600B for 500B of oil!&lt;/span> or exploration for new oil fields. Wells have natural rates of decline, so to keep production you have to explore and drill new wells. That has not happened because of underinvestment. OPEC is now unable to increase production, many countries around the world have lower production each year. Russia&amp;rsquo;s own production can&amp;rsquo;t really increase further - and their stores are low due to this colder than average winter. Brazil is the only country with a substantial increase in capacity coming online.&lt;/p>
&lt;p>February 11th: &lt;a href="https://oilprice.com/Energy/Crude-Oil/IEA-Chronic-OPEC-Undersupply-Could-Propel-Oil-Prices-Even-Higher.html">Chronic OPEC+ Undersupply&lt;/a>&lt;/p>
&lt;p>Russia hasn&amp;rsquo;t been &amp;ldquo;limiting&amp;rdquo; gas to Europe. They simply don&amp;rsquo;t produce unlimited amounts and were burning a lot themselves due to the colder winter. Previously, Russia tried to sign long term contracts so they could confidentially make the necessary capital expenditures to maintain specific contractual production levels, but European entities preferred to keep to the spot rates.&lt;/p>
&lt;p>N.b. this article expands my comments &lt;a href="https://www.reddit.com/r/econmonitor/comments/symu4z/russiaukraine_conflict_not_a_global_economic_risk/">here&lt;/a> on February 22nd 2022, 2 days &lt;a href="https://web.archive.org/web/20220415000000*/https://www.reddit.com/r/econmonitor/comments/symu4z/russiaukraine_conflict_not_a_global_economic_risk/">before&lt;/a>&amp;hellip;&lt;/p>
&lt;hr>
&lt;h3 id="additional-reading">Additional Reading&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://hcss.nl/report/russias-unsustainable-business-model/">Russia’s Unsustainable Business Model: Going All In on Oil and Gas&lt;/a>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>For a low case scenario (low oil prices and a continuation of sanctions), a substantial drop of Russia’s oil production in 2035, up to about 30%, could materialize.&lt;/p>&lt;/blockquote>
&lt;ul>
&lt;li>&lt;a href="https://www.upstreamonline.com/production/russia-predicts-decline-in-oil-reserves-replacement/2-1-907703">Russia predicts decline in oil reserves replacement&lt;/a> (2020) - Vladimir Afanasiev&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Russian oil companies will cut spending on appraisal and exploration work by 20% to 250 billion roubles ($3.2 billion) due to low demand and to comply with Opec+ output quotas.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Energy Minister Alexander Novak said the country’s oil and condensate production may fall by 10% to 510 million tonnes (10.3 million barrels per day) this year compared with 2019,&lt;/p>&lt;/blockquote>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://ogst.ifpenergiesnouvelles.fr/articles/ogst/full_html/2019/01/ogst190118/ogst190118.html">Longterm outlook on Russian oil industry facing internal and external changes&lt;/a> (2019) - Nikita Kapustin, Dmitry Grushevenko&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.ft.com/content/6225ff10-ee9d-11e9-a55a-30afa498db1b">Russia makes its oil reserves work harder as output declines&lt;/a> (2019) - Nastassia Astrasheuskaya&lt;/p>
&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Without new technology and state tax incentives, Russia’s crude output risks dropping 40 per cent over the next 15 years to about 6.8m barrels a day in 2035, according to energy ministry forecasts.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>West Siberia, which accounts for more than half the country’s crude, has seen output slide 10 per cent over the past decade because of depleted conventional reserves and rising water levels.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Costs of per-ton production, fighting water levels and drilling have gone up, while average output per well is declining,&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Russia’s 28 per cent oil-extraction factor, the indicator of a field’s efficiency, is far below the US’s 44 per cent and Norway’s 50 per cent, says the energy ministry.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Taxes remain the elephant in the room in Russia, which has some of the heaviest and most complex oil tax burdens in the world. The Russian state’s share in a West Siberian project’s net revenue reaches up to 90 per cent, double the state share in the US&lt;/p>&lt;/blockquote>
&lt;ul>
&lt;li>&lt;a href="https://www.oxfordenergy.org/wpcms/wp-content/uploads/2019/09/The-Future-of-Russian-Oil-Production-in-the-Short-Medium-and-Long-Term-Insight-57.pdf">The Future of Russian Oil Production in the Short, Medium, and Long Term&lt;/a> (2019) -&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>It is now widely accepted, and this paper will assert once more, that Russian oil output is not about to fall and indeed should rise for at least two to three years following the end of any OPEC+ agreement. A more fundamental question is what will happen beyond the early 2020s, when the current pipeline of greenfield projects will be exhausted and new fields will be needed&lt;/p>&lt;/blockquote></content:encoded></item><item><title>The Customer is Always Wrong</title><link>https://alexalejandre.com/programming/customer-is-always-wrong/</link><pubDate>Fri, 25 Jun 2021 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/customer-is-always-wrong/</guid><description>&lt;p>How many times have you thought or heard: &amp;ldquo;What if there were a tool so powerful you could write your specifications in it, it would make them happen?&amp;rdquo;
Well&amp;hellip; That&amp;rsquo;s what a programming languageis! &amp;ldquo;No, no. I mean in human language, for real people!&amp;rdquo; Well, that&amp;rsquo;s &lt;a href="https://en.wikipedia.org/wiki/COBOL#History_and_specification">COBOL&lt;/a>!&lt;/p></description><content:encoded>&lt;p>How many times have you thought or heard: &amp;ldquo;What if there were a tool so powerful you could write your specifications in it, it would make them happen?&amp;rdquo;
Well&amp;hellip; That&amp;rsquo;s what a programming languageis! &amp;ldquo;No, no. I mean in human language, for real people!&amp;rdquo; Well, that&amp;rsquo;s &lt;a href="https://en.wikipedia.org/wiki/COBOL#History_and_specification">COBOL&lt;/a>!&lt;/p>
&lt;p>Every vendor knows your customers can barely articulate what they want - and the clearest parts are invariably mutually exclusive. Just imagine them putting it in a coherent, rule-based structure (software), considering the solution holistically (authentication, security, maintenance etc.)&lt;/p>
&lt;p>&amp;ldquo;But that&amp;rsquo;s what business analysts are for!&amp;rdquo; Indeed, clients and stakeholders need their hands held, because they overwhelm existing BI tools which should allow them to generate the statistical data they&amp;rsquo;re looking for themselves, instead yielding poorly worded disasters.&lt;/p>
&lt;p>&amp;ldquo;AI!&amp;rdquo; Ok. The poor AIs will establish an MVP&amp;rsquo;s scope as departments pose a litany of what if questions at the weekly project meetings and creep. The AI tool will manage creatives&amp;rsquo; and management&amp;rsquo;s worse instincts where leadership has failed. Sounds good!&lt;/p>
&lt;p>This is why we see less code from more senior programmers, with senior engineers starting to forget how. Coding&amp;rsquo;s the easy part. The talented and experienced must face true difficulties: requirements, design, planning.&lt;/p>
&lt;p>This brought us Agile. If specifications are so hard to collect, let&amp;rsquo;s just make rewriting them a weekly habit! (Often, businessmen are too lazy to specify even when they know how.)&lt;/p>
&lt;p>Here are some crumbs of wisdom:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>The art of writing a perfect specification is called programming&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The clearer, more detailed the specifications, the higher the success rate. Flow charts, diagrams and a finite list of requirements equal a job done. (See the specifications &amp;ldquo;manual&amp;rdquo;, formal documents and recomendation to finish architecting before hiring developers in the Mythical Man Month)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>AI&amp;rsquo;s beginning to excel at art, but only because we don&amp;rsquo;t demand precision (though looking at the hands&amp;hellip;) Pretty forests and cities hold endless variation, their visual complexity approaching beauty. Alas, business requirements require precision. Random variant solutions merely resembling vague input requirements won&amp;rsquo;t solve real world problems. You have to reflect through your problem, grey areas, snags, dilemmas, slowly re-re-reiterating through your solution space.&lt;/p>
&lt;/li>
&lt;/ul></content:encoded></item><item><title>Who Wrote the TY Books?</title><link>https://alexalejandre.com/languages/who-wrote-ty-books/</link><pubDate>Fri, 02 Aug 2019 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/who-wrote-ty-books/</guid><description>&lt;p>I have a copy of Teach Yourself Turkish, which was first published in 1919 (see &lt;a href="https://ia601603.us.archive.org/31/items/in.ernet.dli.2015.462820/2015.462820.Teach-Yourself.pdf">page 4&lt;/a>.) Rather perplexing, because the author G.L. Lewis was born in 1920. The publisher itself (English University Press) was founded in 1938. Intriguing. His &lt;a href="https://www.theguardian.com/education/2008/mar/12/turkey.world">obituary&lt;/a> says he only discovered Turkish in 1939. Stranger still, Wikipedia &lt;a href="https://en.wikipedia.org/wiki/Geoffrey_Lewis_(scholar)">gives&lt;/a> 1953.&lt;/p></description><content:encoded>&lt;p>I have a copy of Teach Yourself Turkish, which was first published in 1919 (see &lt;a href="https://ia601603.us.archive.org/31/items/in.ernet.dli.2015.462820/2015.462820.Teach-Yourself.pdf">page 4&lt;/a>.) Rather perplexing, because the author G.L. Lewis was born in 1920. The publisher itself (English University Press) was founded in 1938. Intriguing. His &lt;a href="https://www.theguardian.com/education/2008/mar/12/turkey.world">obituary&lt;/a> says he only discovered Turkish in 1939. Stranger still, Wikipedia &lt;a href="https://en.wikipedia.org/wiki/Geoffrey_Lewis_(scholar)">gives&lt;/a> 1953.&lt;/p>
&lt;p>Diving down the rabbit hole, H.L. Williamson&amp;rsquo;s &lt;a href="https://archive.org/stream/in.ernet.dli.2015.125070/2015.125070.Teach-Yourself-Chinese#page/n15/mode/2up/search/whymant">Teach Yourself Chinese&lt;/a> was first printed in 1923, M.B. Lewis&amp;rsquo; &lt;a href="https://archive.org/details/in.ernet.dli.2015.458644?q=Teach+Yourself+Malay">Teach Yourself Malay&lt;/a> in 1917, A.S. Tritton&amp;rsquo;s &lt;a href="https://archive.org/details/in.ernet.dli.2015.458598">Teach Yourself Arabic&lt;/a> in 1913. What&amp;rsquo;s going on?&lt;/p>
&lt;p>&lt;a href="https://archive.org/details/TeachYourselfGermanBySirJohnAdamsRevised">Teach Yourself German&lt;/a> came out in 1938 with &lt;em>3&lt;/em> authors, one who died in 1934. This book helpfully states it &amp;ldquo;is based on the work by Sir John Adams, completely revised and enlarged&amp;rdquo; by Wells and Jenkins, first printing this enlarged form of his Self Education in German 37 years later in 1938. Such a clear explanation is otherwise missing in the series.&lt;/p>
&lt;p>Might we safely assume these dates refer to some pre-enlarged sources? I have found no Chinese textbook from 1923, no Turkish one from 1919.&lt;/p></content:encoded></item><item><title>Old English and Old Norse</title><link>https://alexalejandre.com/languages/old-english-norse/</link><pubDate>Tue, 26 Feb 2019 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/old-english-norse/</guid><description>Old English and Norse were mutually inteligible, but OE literary culture blossomed centuries earlier with Christianization.</description><content:encoded>&lt;p>Old English played the role of commonly written language much earlier than Old Norse. (There are vanishingly few manuscripts/texts from that time!) The Nordic literary tradition (in Latin too) only truly fired up after Christianization, besides runic inscriptions (which are rather short) there wasn&amp;rsquo;t much until ~1200 AD when e.g. the Icelandic sagas started popping up (though they were most likely already oral) - since the saga age they besing was ~1000 AD.&lt;/p>
&lt;p>More importantly, OE and ON are extremely similar. Having studied OE (and knowing other Germanic languages), I understood ~80% of ON right off the bat. There are many books like Graeme Davis&amp;rsquo; Comparative Syntax of OE and Old Icelandic which go into depth about this and just name them (and to a lesser extant Old High German/Continental Germanic languages) as fully comprehensible parts of a dialect continuum. After a week learning low hanging fruit of noncognate words and a few key differences (namely the middle voice) I felt equally proficient in them. (In speech, this would be a bit worse as their pronunciations didn&amp;rsquo;t coincide, but it&amp;rsquo;s nothing people don&amp;rsquo;t get used to quickly as e.g. Portuguese&amp;rsquo; w i d e pronunciation shows.) (There are also minor issues like different genders in some cognates, which some posit led to the English declension system&amp;rsquo;s collapse, especially combined with vowel reduction in unstressed vowels. &lt;span class="marginnote">The Swedish vowel shift is called the Great Vowel Dance.&lt;/span>)&lt;/p>
&lt;p>Regarding Christianization, David Wilson&amp;rsquo;s paper The Viking Relationship with Christianity in Northern England argues they quickly added the Abrahamic God to their pantheon and respected Christian burial customs. (There&amp;rsquo;s also work on the Christianization of Scandinavia and elsewhere re: Jesus as a war god at first, which seems analogous.)&lt;/p>
&lt;p>Some of the diocese of York&amp;rsquo;s bishops (Oscytel, Oswald) were Danes, indicating that many were indeed educated and Christianized since Guthrum&amp;rsquo;s conversion. Oda, the (was it already arch- at that time?) bishop of Canterbury in the early 900s was even a Dane (and Oswald&amp;rsquo;s uncle)! Unfortunately his chronicler only wrote in OE.&lt;/p>
&lt;p>In spite of these Scandinavian figures, little ON was written in England. Thordr Kolbeinsson wrote some stuff during Cnut&amp;rsquo;s lifetime about him in ON (his patron was involved in taking the English throne). I&amp;rsquo;m not personally aware of anything earlier than that of significant length - although there definitely are some long runic texts. Now, the crux&amp;rsquo;s that Thordr didn&amp;rsquo;t write in England. People sure wrote about Cnut in England in OE, the ON texts are from Scandinavia (and a few centuries later.)&lt;/p>
&lt;p>Interestingly, in Scandinavia Runes disappeared quickly after Christianization, but remained in England (in OE) until the Norman conquest (St. Cuthbert&amp;rsquo;s coffin in 700 AD all the way to the Beagnoth sword, besides various rings etc.) Perhaps due to this, there don&amp;rsquo;t seem to be many Norse runic inscriptions in England - but they are still there, mostly Christian ones (even on crosses), especially on the isle of Mann. In Edinburgh there stands a stone at Princes Street Garden which is thought to have been carved by the same Erik who made more in Sweden.&lt;/p>
&lt;p>Unfortunately, there just aren&amp;rsquo;t any long texts in Latin letters from this time in ON (I think Thordr wrote in runes, which were later written down) although we had very educated men who must have spoken it, writing in other languages. Snorri says Thorgilsson was the first historian in ON which would have been ~1100 AD. I couldn&amp;rsquo;t find any Norse rune stones in England proper - no monks, students or anything carving them, sadly.&lt;/p>
&lt;p>N.b. This was an educated world. Scribes and Scholars details 2 Greek missionaries in England around 700 AD, who Bede relates taught Greek at Canterbury.&lt;/p>
&lt;p>&amp;ndash;&lt;/p>
&lt;h3 id="on-secondary-sources">On Secondary Sources&lt;/h3>
&lt;p>This guy discusses an excerpt where a Norse poet composes Norse poetry for an English king and the writer states that they are 1 tongue: &lt;a href="https://youtu.be/BaWgJq9OVGM?t=521">https://youtu.be/BaWgJq9OVGM?t=521&lt;/a>&lt;/p>
&lt;p>Mathew Townend&amp;rsquo;s Linguistic Relations between Speakers of Old Norse and Old English is the only direct work. Unfortunately the majority of ON texts come from Iceland besinging their adventures&amp;hellip; Everywhere. So there&amp;rsquo;s not the same kind of evidence like ancient authors directly discussing the interaction of Greek and Latin.&lt;/p>
&lt;p>The Oxford Handbook of the History of English around page 500 has some pertinent sections and covers theories on modern English as a Creole of ON and OE (although the Anglicization of Celts seems like a better cause - Townend goes into this a bit) and even contrasts Old French as a prestige language and ON as an &amp;ldquo;adstratal&amp;rdquo; language of equal prestige to English.&lt;/p>
&lt;p>Sara Ponz-Satz&amp;rsquo; Norse-Derived Vocabulary in late Old English Texts may hold insights but the format is rather&amp;hellip; strange, ultimately focusing on each individual loan word used by a bishop.&lt;/p></content:encoded></item><item><title>About the Go Compiler</title><link>https://alexalejandre.com/programming/go/go-compiler-unoptimized/</link><pubDate>Thu, 11 Jan 2018 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/programming/go/go-compiler-unoptimized/</guid><description>&lt;p>edit: a recent discussion which will shed much more light on this &lt;a href="https://www.reddit.com/r/golang/comments/1994ols/the_go_compiler_needs_to_be_smarter_2020/">https://www.reddit.com/r/golang/comments/1994ols/the_go_compiler_needs_to_be_smarter_2020/&lt;/a>&lt;/p></description><content:encoded>&lt;p>edit: a recent discussion which will shed much more light on this &lt;a href="https://www.reddit.com/r/golang/comments/1994ols/the_go_compiler_needs_to_be_smarter_2020/">https://www.reddit.com/r/golang/comments/1994ols/the_go_compiler_needs_to_be_smarter_2020/&lt;/a>&lt;/p>
&lt;p>N.b. the following makes a mountain out of a molehill, as Go&amp;rsquo;s close enough &lt;span class="marginnote">2x slower than C&lt;/span> to optimal performance to require significant effort optimizing before the compiler blocks you. As it stands, most optimizations are a question of diminishing returns. It&amp;rsquo;s primarily a note to myself.&lt;/p>
&lt;hr>
&lt;p>To avoid complexity and enable faster iterations, the Go team went with their own optimizer and code generator (and Plan 9 based assembler). Without investing much time in them, they&amp;rsquo;re now behind both LLVM and mature JITs. &lt;code>gccgo&lt;/code> can sometimes &lt;a href="https://dev.to/parmcoder/optimizing-go-code-with-gccgo-for-improved-performance-2d3d">optimize better&lt;/a> than &lt;code>go&lt;/code>, although &lt;a href="https://go.googlesource.com/gollvm/">gollvm&lt;/a> is now dead.&lt;/p>
&lt;p>While Go doesn&amp;rsquo;t focus on CPU-bound performance, it&amp;rsquo;s acceptable for IO-bound tasks. However the stdlib JSON decoder and regex engine are CPU-bound due to poor implementations (&lt;a href="https://github.com/BurntSushi/rebar#summary-of-search-time-benchmarks">5x slower than JS&lt;/a>).&lt;/p>
&lt;p>Go does optimize for quick compile times, where further passes would only reduce the developer experience. (However the lack of expessive types, lifetimes or generics &lt;span class="marginnote">methods, type embedding, aliases switches,&lt;/span> more than makes up for small possible changes like agressive inlining and constant detection.)&lt;/p>
&lt;h3 id="benefits-of-standard-approach">Benefits of Standard Approach&lt;/h3>
&lt;p>Go does not have different levels of optimization, lest bugs appear in a single version. A whole pathology of flags and versions could sprout, with patterns optimized for a single version. In practice, the optimal version will receive most developer attention.&lt;/p>
&lt;p>Above all, the current compiler is simple, allowing quicker rewrites or modifications when they offer significant improvements outweighing the increased complexity. Vectorization has not passed this hurdle (libraries would benefit the most, but already use inline assembly.)&lt;/p>
&lt;h3 id="the-spec">The Spec&lt;/h3>
&lt;p>The Go spec promises certain behaviors which fundementally prevent various optimizations. (Heavy use of interfaces also prevents inlining, which could theoretically allow for some optimizations, while JITs can devirtualize them live.)&lt;/p>
&lt;p>Slice aliasing: In C (but not C++), &lt;code>restrict&lt;/code> tells the compiler a memory range won&amp;rsquo;t overlap with others. Because only one pointer can write to the memory, the compiler can run wild with optimizations. In Rust, this is proven for non-cell slices (&amp;ldquo;mutable or shared but not both&amp;rdquo;) with no keyword needed. In Go, we can&amp;rsquo;t prove such things.&lt;/p>
&lt;p>Null pointers: In C (and C++), to deref a null pointer&amp;rsquo;s undefined behavior. In Rust, to compile, code must prove dereferences aren&amp;rsquo;t null. As a result, compilers can optimize without considering this possibility. In Go, a program must panic &lt;span class="marginnote">&amp;lsquo;address operators&amp;rsquo; in the spec&lt;/span> so the compiler inserts checks wherever pointers are found, while unable to remove pointer indirections or reorder things.&lt;/p>
&lt;h3 id="currently-implemented-optimizations">Currently Implemented Optimizations&lt;/h3>
&lt;p>&lt;span class="marginnote">Engineering a Compiler - Torczon &amp;amp; Cooper&lt;/span>
&lt;span class="marginnote">Kent Dybvig&amp;rsquo;s Chez Scheme&lt;/span>
&lt;span class="marginnote">Catalogue of Optimizing Transformations - Allen, Cocke&lt;/span>
The following came out very early in Go&amp;rsquo;s life. Anyone who&amp;rsquo;s looked into optimizing compilers would be (and was) horrified.&lt;/p>
&lt;ul>
&lt;li>don&amp;rsquo;t scan underlying buffers for slices, channels and maps (unless there are pointers) helping GC&lt;/li>
&lt;li>loops where you 0 everything in a slice use &lt;code>memclr&lt;/code>&lt;/li>
&lt;li>short, simple funcs are inlined if:
&lt;ul>
&lt;li>less than 80 AST nodes&lt;/li>
&lt;li>nothing complex like closure, defer, recover, select etc.&lt;/li>
&lt;li>neither &lt;code>go:noinline&lt;/code> nor &lt;code>go:uintptrescapes&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>gives up on escape analysis with e.g.: &lt;span class="marginnote">Not quite an optimization&amp;hellip;&lt;/span>
&lt;ul>
&lt;li>indirection like &lt;code>*p =&lt;/code>&lt;/li>
&lt;li>func calls&lt;/li>
&lt;li>package boundaries&lt;/li>
&lt;li>slice literals&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>don&amp;rsquo;t allocate when
&lt;ul>
&lt;li>converting &lt;code>[]byte&lt;/code> into &lt;code>string&lt;/code> when comparing&lt;/li>
&lt;li>converting &lt;code>string&lt;/code> into &lt;code>[]byte&lt;/code> when ranging over&lt;/li>
&lt;li>incl. when in maps&lt;/li>
&lt;li>putting 0 width type in interface&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Of course, many things came shortly thereafter.&lt;/p>
&lt;p>The nature of packages fixes most of the Link Time Optimization problem (no cyclical dependencies). The linker generates &lt;a href="https://pkg.go.dev/cmd/internal/dwarf">DWARF&lt;/a> info and removes deadcode. &lt;a href="https://docs.google.com/document/d/1D13QhciikbdLtaI67U6Ble5d_1nsI4befEd6_k1z91U/view">Here&lt;/a> is a great article detailing the linker pre-Covid.&lt;/p>
&lt;p>Now we functionally have a -o flag, wherein we pass a pprof profile which informs the compiler about realworld usage, enabling JIT-like optimizations based on real usage patterns. This however requires slight &lt;a href="https://go.dev/doc/pgo#collecting-profiles">extra engineering&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://dev.to/segflow/my-journey-optimizing-the-go-compiler-46jc">My journey optimizing the Go compiler&lt;/a>&lt;/p>
&lt;h3 id="what-to-work-on">What to Work On&lt;/h3>
&lt;p>In practice, the &lt;em>runtime&lt;/em> dominates your typical program&amp;rsquo;s profile.&lt;/p>
&lt;p>&lt;span class="marginnote">Since added in 1.20&lt;/span> &lt;del>Profile guided optimization outclasses most optimizations, but requires special tooling. Once the tooling appears, we should see significant gains.&lt;/del>&lt;/p>
&lt;h3 id="other-compilers">Other Compilers&lt;/h3>
&lt;p>I believe &lt;a href="https://www.remobjects.com/elements/gold/">this&lt;/a> is a proprietary compiler.&lt;/p>
&lt;p>TinyGo
llgo
GCCGo&lt;/p>
&lt;h3 id="see-also">See also:&lt;/h3>
&lt;p>Learn &lt;a href="http://davidwong.fr/goasm/">Go Assembly by Example&lt;/a>
Go uses its own Assembly, a quirk of its heritage, due to the implementor&amp;rsquo;s familiarity with the Plan 9 toolchain. The assembly language isn&amp;rsquo;t directly platform independent, because it has &lt;a href="https://github.com/golang/go/tree/master/src/hash/crc32">different .s files for different architectures&lt;/a> with a .go file for the independent version.&lt;/p>
&lt;p>From &lt;a href="https://www.youtube.com/watch?v=KINIAgRpkDA">Rob Pike talking about Go Assembler&lt;/a> the Go assembly allows them to &lt;a href="https://talks.golang.org/2016/asm.slide#39">feed in PDFs&lt;/a> to support a given platform, still abstracting platforms away!&lt;/p>
&lt;p>&lt;a href="https://go.godbolt.org/">Interactive Go compiler&lt;/a> which lets you play with the generated assembly.&lt;/p></content:encoded></item><item><title>Germanic Ablaut</title><link>https://alexalejandre.com/languages/germanic-ablaut/</link><pubDate>Wed, 12 Jul 2017 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/germanic-ablaut/</guid><description>Strong verbs are cool.</description><content:encoded>&lt;p>In Germanic languages, few verbs are truly irregular. Instead, they are &amp;ldquo;strong&amp;rdquo;. Strong verbs decline by changing the vowel (sing sang sung) instead of adding a dental (t/d) sound at the end (breathe breathed).&lt;/p>
&lt;h3 id="german">German&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Number&lt;/th>
&lt;th>Infinitive&lt;/th>
&lt;th>Imperfect&lt;/th>
&lt;th>Participle&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1&lt;/td>
&lt;td>ei&lt;/td>
&lt;td>i(e)&lt;/td>
&lt;td>i(e)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2&lt;/td>
&lt;td>ie/au&lt;/td>
&lt;td>o&lt;/td>
&lt;td>o&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3&lt;/td>
&lt;td>e/i&lt;/td>
&lt;td>a&lt;/td>
&lt;td>o/u&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4&lt;/td>
&lt;td>e&lt;/td>
&lt;td>a&lt;/td>
&lt;td>o&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5&lt;/td>
&lt;td>e/i&lt;/td>
&lt;td>a&lt;/td>
&lt;td>e&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>6&lt;/td>
&lt;td>a&lt;/td>
&lt;td>u&lt;/td>
&lt;td>a&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7&lt;/td>
&lt;td>a&lt;/td>
&lt;td>ie&lt;/td>
&lt;td>a&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>In detail:&lt;/p>
&lt;ol>
&lt;li>long vowels in bleiben, blieb, but short in beissen biss.&lt;/li>
&lt;li>long o in bieten, short in gießen, goß, gegossen. Saugen, saufen&lt;/li>
&lt;li>some i have u, finden gefunden, binden gebunden. Most e.g. helfen and beginnen have o&lt;/li>
&lt;li>long in stehlen, but short in sprechen&lt;/li>
&lt;li>also ö-o-o: schwören&lt;/li>
&lt;li>also u-ie-u: riefen, o-ie-o: stoßen, au-ie-au: hauen, laufen&lt;/li>
&lt;/ol>
&lt;p>Jessia Nowak notes the 2nd pattern has spread to others by analogy (heben-hob-gehoben, Dutch binden-bond-gebonden.)&lt;/p>
&lt;h3 id="swedish">Swedish&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Number&lt;/th>
&lt;th>Infinitive&lt;/th>
&lt;th>Imperfect&lt;/th>
&lt;th>Participle&lt;/th>
&lt;th>Examples:&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1&lt;/td>
&lt;td>i&lt;/td>
&lt;td>e&lt;/td>
&lt;td>i&lt;/td>
&lt;td>skriva, driva, kliva, vina&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2&lt;/td>
&lt;td>y/u&lt;/td>
&lt;td>ö&lt;/td>
&lt;td>u&lt;/td>
&lt;td>flyga, sluta, stryka, suga&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3&lt;/td>
&lt;td>i/ä&lt;/td>
&lt;td>a&lt;/td>
&lt;td>u&lt;/td>
&lt;td>binda, finna, vinna, singa, svälta&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4&lt;/td>
&lt;td>ä&lt;/td>
&lt;td>a&lt;/td>
&lt;td>u&lt;/td>
&lt;td>bära, komma, skära, svära&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5a&lt;/td>
&lt;td>e/i&lt;/td>
&lt;td>a/å&lt;/td>
&lt;td>e/i&lt;/td>
&lt;td>ge, bise&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5b&lt;/td>
&lt;td>ä&lt;/td>
&lt;td>a/å&lt;/td>
&lt;td>ä&lt;/td>
&lt;td>se, säga&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>6&lt;/td>
&lt;td>a/å&lt;/td>
&lt;td>o&lt;/td>
&lt;td>a&lt;/td>
&lt;td>fara, stå, slå, ta, slå, dra&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7a&lt;/td>
&lt;td>å&lt;/td>
&lt;td>ä&lt;/td>
&lt;td>å&lt;/td>
&lt;td>hålla, gråta, låta&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7b&lt;/td>
&lt;td>a/å&lt;/td>
&lt;td>ö&lt;/td>
&lt;td>a/å&lt;/td>
&lt;td>falla&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ol start="3">
&lt;li>archaic subjunctive/past plural in u: vi bundo&lt;/li>
&lt;li>archaic subjunctive/past plural in u or å e.g. vi buro&lt;/li>
&lt;li>Archaically dräpa - drap - dräpen, but past pl. dråpo. Likewise kväda. Vräka&amp;rsquo;s archaic strong past was spelled vrok.&lt;/li>
&lt;li>archaically: häva hov, väva vov. Växa&amp;rsquo;s vox is never used, but vuxen exists as an adjective.&lt;/li>
&lt;li>archaically löpa lopp (gr. laufen)&lt;/li>
&lt;/ol>
&lt;h3 id="dutch">Dutch&lt;/h3>
&lt;p>1 ij ee e - grijpen
2 ie/ui oo o - sluiten, bedriegen
3 i/e o o - bergen, helpen, beginnen
4 e a o - breken, nemen, stelen
5 e/i a e - geven, bidden, eten, lezen, treden
6 a oe a - graven, dragen, slaan, varen
7 o/a ie o/a - lopen, blazen, laten, roepen, slapen, hangen&lt;/p>
&lt;ol start="3">
&lt;li>some have impf. ie (bederven, helpen, sterven, werpen, zwerven)&lt;/li>
&lt;li>vowel length distinguished&lt;/li>
&lt;li>ie impf: heffen, scheppen, zweren. Jagen, fragen have weak participle.&lt;/li>
&lt;li>vowel length loenliep, hangen hing, houden hield (note l)&lt;/li>
&lt;/ol>
&lt;h3 id="english">English&lt;/h3>
&lt;p>This largely collapsed in modern English. (81 verbs became weak and the groupings combined.) We still preserve:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Number&lt;/th>
&lt;th>Infinitive&lt;/th>
&lt;th>Imperfect&lt;/th>
&lt;th>Participle&lt;/th>
&lt;th>Examples:&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1&lt;/td>
&lt;td>i&lt;/td>
&lt;td>o(u)&lt;/td>
&lt;td>i&lt;/td>
&lt;td>ride, write, shine, drive, dive, fight, bind&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3&lt;/td>
&lt;td>i&lt;/td>
&lt;td>a&lt;/td>
&lt;td>u&lt;/td>
&lt;td>swim, ring, sing, stink, drink, shrink&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4&lt;/td>
&lt;td>e(a)&lt;/td>
&lt;td>o&lt;/td>
&lt;td>o&lt;/td>
&lt;td>break, bear, shear, speak, steal, tear, wake&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>6&lt;/td>
&lt;td>a&lt;/td>
&lt;td>oo&lt;/td>
&lt;td>a/oo&lt;/td>
&lt;td>shake, stand, draw, slay, take&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7&lt;/td>
&lt;td>ow&lt;/td>
&lt;td>ew&lt;/td>
&lt;td>own&lt;/td>
&lt;td>throw, know, grow, blow, hew&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>?&lt;/td>
&lt;td>ee&lt;/td>
&lt;td>e&lt;/td>
&lt;td>e&lt;/td>
&lt;td>bleed, breed, meet, feed&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>
&lt;ol start="2">
&lt;li>fly, cleave, dive, freeze, choose were in this group, but are no longer coherent&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;ol start="4">
&lt;li>many from class 5 and 6 joined this (swear, speak, tread)&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;ol start="5">
&lt;li>collapsed: eat, give, lie, see, sit, bid&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;ol start="6">
&lt;li>spelling collapsed but the pattern holds. laden, shapen, shaven are remnant participles.&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;ol start="7">
&lt;li>otherwise collapsed: hold, hang, fall, beat (slit?)&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>?) these form nouns with oo (blood, food)&lt;/li>
&lt;/ul>
&lt;p>N.b note reduplication logic: tip top, flip flop&lt;/p>
&lt;h3 id="origins">Origins&lt;/h3>
&lt;p>Originally, the patterns had this logic:&lt;/p>
&lt;ol>
&lt;li>vowel + y&lt;/li>
&lt;li>vowel + w&lt;/li>
&lt;li>vowel + consonant cluster&lt;/li>
&lt;li>vowel + m/n/l/r&lt;/li>
&lt;li>vowel + other consonant&lt;/li>
&lt;li>?&lt;/li>
&lt;li>past reduplicated&lt;/li>
&lt;/ol>
&lt;h3 id="reading">Reading:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://www.jstor.org/stable/2935767?seq=6">The Ablaut in English&lt;/a> - Benjamin Wells: Discusses how OE verbs developed into todays&lt;/li>
&lt;li>On the Emergence of an Eighth Ablaut Class in German and Dutch - Jessia Nowak&lt;/li>
&lt;/ul></content:encoded></item><item><title>How to Learn Languages</title><link>https://alexalejandre.com/languages/how-to-learn-languages/</link><pubDate>Mon, 15 May 2017 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/how-to-learn-languages/</guid><description>&lt;p>Here&amp;rsquo;s a rough sketch of my approach to language learning:&lt;/p></description><content:encoded>&lt;p>Here&amp;rsquo;s a rough sketch of my approach to language learning:&lt;/p>
&lt;ul>
&lt;li>learn the phonology&lt;/li>
&lt;li>learn the grammar
&lt;ul>
&lt;li>read a grammar book like a novel, quickly through&lt;/li>
&lt;li>read the grammar taking notes, ignoring overly complicated matters. Your notes will be but a few pages long!&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>go through a textbook to internalize the grammar, build a core vocabulary and Sprachgefühl
&lt;ul>
&lt;li>read a &lt;a href="https://alexalejandre.com/languages/good-old-language-books/">good textbook&lt;/a> (Assimil, good old Colloquial or Teach Yourself) rereading the dialogues and until you remember their vocabularies&lt;/li>
&lt;li>memorize choice dialogues, songs and poems. Some techniques:
&lt;ul>
&lt;li>just just say just say the just say the whole just say the whole sentence just say the whole sentence like just say the whole sentence like this, to memorize a whole page of text in&lt;/li>
&lt;li>write the first letter of each word: &amp;ldquo;w t f l o e w&amp;rdquo; to use as a crutch when reciting an entire page you learned a few days ago, but remember it&amp;rsquo;s not important to remember it after, just memorizing for a single recital already etches the words and grammar in your mind forever&lt;/li>
&lt;li>simply repeat a new word (or better yet, it&amp;rsquo;s whole context/clause) 30+ times quickly to chisel it into you brain. At 30 seconds a word, you can learn over 100 words per hour, keeping most with you afterwards!&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>read
&lt;ul>
&lt;li>we can read significantly faster than people can speak, so reading gives us far higher input for our time&lt;/li>
&lt;li>read &lt;a href="https://en.wikipedia.org/wiki/Extensive_reading">widely&lt;/a>, forums, novels, friends&amp;rsquo; chat logs, subtitles etc. only looking up words you encounter often or which stick with you, your Sprachgefühl should often give you an inkling&lt;/li>
&lt;li>&lt;a href="https://web.archive.org/web/20170814192053/http://how-to-learn-any-language.com/forum/forum_posts.asp?TID=6366">Listening-Reading&lt;/a> method - the overall fastest way to language mastery at this point, just listen to an audiobook in your target language while reading along to the same book in a language you understand (Dostoevsky, Dumas, Verne and Rowling are easy to find) The longer you can do a sitting, the better. A single 12 hour session will turn your brain to mush, but gift you a huge leap in fluency! The &lt;a href="https://web.archive.org/web/20180810120152/http://users.bestweb.net/~siom/martian_mountain/!%20L-R%20the%20most%20important%20passages.htm">full system&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Overall, you want to stay just out of your comfort zone on comprehensible input. Good textbooks are the best way to do this, then reading&amp;rsquo;s the fastest way to continue progressing. You can start with a textbook before reading a dedicated grammar but I like groking the system early. Phonology is important early on, to develop an inner voice and Sprachgefühl.&lt;/p>
&lt;p>Most importantly, an educated native knows tens of thousands of words, idioms etc. Compared to that, learning some conjugations or declensions, some 30 letters of a new alphabet etc. are nothing, a day&amp;rsquo;s work really. I optimize for the slog of vocabulary acquisition.&lt;/p>
&lt;hr>
&lt;h3 id="other">Other&lt;/h3>
&lt;ul>
&lt;li>traslate text, then translate it back and compare&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>proper time for him to read some short and easy chapter in this work, and to translate it into his native language with the utmost exactness; let him then lay aside the original, and after a proper interval let him turn the same chapter back into Persian by the assistance of the grammar and dictionary: let him afterwards compare his second translation witht he original, and correct its faults according to that model. This is the exercise so often recommended by the old rhetoricians, by which a student will gradually acquire the style and manner of any author, whom e desires to imitate, and by which almost any language may be learned in six months with ease and pleasure. - Willian Jones&amp;rsquo; Grammar of the Persian Language&lt;/p>&lt;/blockquote>
&lt;p>Critial period is fake.&lt;/p>
&lt;blockquote>
&lt;p>children actually take several years to function in a language, which is often much longer than an adult that knows what he&amp;rsquo;s doing. The Michel Thomas style tapes which I alluded to above are good at giving an adult a passable diving-board for a language in about 8 hours. It can be done. You can also give an adult a crash-course in phonology and articulatory phonetics that will make it easy to understand and with practice produce the sounds children take years to master.&lt;/p>
&lt;p>The motivation of a child and adult are utterly different. A language-less child has lots of reasons to invest most of his mental life in attention to language. Apathetic adults don&amp;rsquo;t.&lt;/p>
&lt;p>What I really get sick of is doomer adults who cope with their laziness by talking about how hard it is to learn a language as an adult. Many adults still learn languages all the time. There is some circumstantial evidence that infants cue into some acoustic cues and other things quicker than adults, but I think in most cases we&amp;rsquo;re just looking at infants semi-consciously honing in on what details they&amp;rsquo;ve acknowledged to be linguistically relevant. In reality, developed humans have huge institutional and intellectual advantages to learn.&lt;/p>&lt;/blockquote>
&lt;p>Learn vocab after grammar structure&lt;/p>
&lt;blockquote>
&lt;p>This is hard for people to understand because monolingual people think that languages are just different word lists that people use. As a result, 101 students will manually look up every word in the dictionary to translate. This actually increases the mental load of learning a language because people have the idea that to speak it, they have to think of something in English, then translate the sentence word by word, then say that. What a pain.&lt;/p>
&lt;p>So what is a language if not words? It really is a set of constraints as to how words can go together: what order they go in when modifying each other, but also languages are morphology. Verb endings and tenses and such are literally the most important part of a sentence. If you don&amp;rsquo;t have a productive and reflexive use of verbs, you are literally just going to be reciting nouns you know like a monkey.&lt;/p>
&lt;p>This is actually why I recommend people learning Romance languages or German to &lt;a href="https://lukesmith.xyz/articles/notes-on-learning-languages/learning-european-languages-michel-thomas.html">use Michel Thomas&amp;rsquo;s audio&lt;/a>. Thomas doesn&amp;rsquo;t lecture at all about what he&amp;rsquo;s doing, but he focused only on using verbs and building up basic expressions from the bottom up until it&amp;rsquo;s understood reflexively by students. To actually learn any language, this is more or less what you are going to have to mentally do anyway in the process.&lt;/p>
&lt;p>&lt;strong>You can fluently speak a language knowing only about 50 words.&lt;/strong> If you understand the &amp;ldquo;grammar&amp;rdquo; of a language, you can basically get by anywhere anytime with a couple dozen words only. What words you don&amp;rsquo;t know can easily be figured out, but you &lt;em>can&amp;rsquo;t&lt;/em> wing it with grammar and you &lt;em>can&amp;rsquo;t&lt;/em> wing it with morphology.&lt;/p>&lt;/blockquote></content:encoded></item><item><title>Uniquely Russian Terms</title><link>https://alexalejandre.com/languages/russian/unique-russian-words/</link><pubDate>Thu, 13 Aug 2015 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/russian/unique-russian-words/</guid><description>A list of &amp;lsquo;untranslatable&amp;rsquo; words and idioms.</description><content:encoded>&lt;h3 id="difficult-to-translate-concepts">Difficult to Translate Concepts&lt;/h3>
&lt;ul>
&lt;li>Выспался? Наелся? - how are you? (from someone who really cares about you)&lt;/li>
&lt;li>таракн - mental issue/quirk&lt;/li>
&lt;li>(по)любоваться - feast your eyes on&amp;hellip; (natural beauty)&lt;/li>
&lt;li>мелкий - small/fine, petty/shallow, small in all parts like rain or sand (крупный is the opposite)&lt;/li>
&lt;li>мировоззрение - Weltanschauung, worldview, more systematic than outlook&lt;/li>
&lt;li>ненаглядный - can&amp;rsquo;t take your eyes of, implies любоваться&lt;/li>
&lt;li>новостройка - newly erected building, implies postwar rapid urban development&lt;/li>
&lt;li>мещанин - narrow minded person without social interests&lt;/li>
&lt;li>обыватель - average man on the street, philistine&lt;/li>
&lt;li>однолюб - person with 1 love in life, or can only love one at a time&lt;/li>
&lt;li>отходчивый - loses temper easily without harboring resentment later&lt;/li>
&lt;li>очередный - periodic/recurrent/usual&lt;/li>
&lt;li>подвиг - feat/dead, heroism done for public good&lt;/li>
&lt;li>пошлый - morally low/tasteless/vulgar of people/things, tacky&lt;/li>
&lt;li>простор/раздолье - space/expanse/freedom/elbow room, evoking wide open spaces and infinity of Russian landscape&lt;/li>
&lt;li>размах - range,scope, spain, scale (of character), admired generosity and depth&lt;/li>
&lt;li>гибель - destruction/ruin/wreck&lt;/li>
&lt;li>разруха - ruin, collapse, detestation&lt;/li>
&lt;li>самородок/дный - natural gifts but w/o systematic education&lt;/li>
&lt;li>сплотной - unbroken/continuous/complete/entire, literacy, satisfaction, -fence&lt;/li>
&lt;li>стройный - well proportioned/elegant, pleasing to the eye&lt;/li>
&lt;li>азартный - adventurous/passionate, gets carried away, ready to stake a lot on&lt;/li>
&lt;li>бездорожье - absence of roads/bad ones/time when they&amp;rsquo;re impassible (melting snow)&lt;/li>
&lt;li>белоручка - person with white hands who shirks at dirty/work softie&lt;/li>
&lt;li>быт - daily life, routine, material world and static material/existence&lt;/li>
&lt;li>воля - freedom, freewill, natural without constraint&lt;/li>
&lt;li>выступа/ить - make a public statement/appearance (interview, speech)&lt;/li>
&lt;li>дежурный - person who keeps watch/on duty&lt;/li>
&lt;li>душевный - heartfelt&lt;/li>
&lt;li>подлый - prone to underhanded, treacherous, dishonesty, base&lt;/li>
&lt;/ul>
&lt;h3 id="interesting-wordsexpressions">Interesting Words/Expressions&lt;/h3>
&lt;ul>
&lt;li>закномерный - natural/bound to happen/natural order of things/according to pattern&lt;/li>
&lt;li>застой - stagnation (e.g. Brezhnev&amp;rsquo;s time)&lt;/li>
&lt;li>земляк - fellow country/townsman&lt;/li>
&lt;li>командировка - business trip/mission/posting&lt;/li>
&lt;li>крупа - grain you can make kasha from&lt;/li>
&lt;li>лицо - person (like деятель) должностне лицо - official, духовное лицо - clergyman&lt;/li>
&lt;li>деятель - person who does something, needs an adjective e.g. государственный&lt;/li>
&lt;li>беспредел - unacceptable occurance (social/political character)&lt;/li>
&lt;li>разлучница - homewrecker&lt;/li>
&lt;li>с переподвыподвертом - doing something in complex and incomprehensible way&lt;/li>
&lt;li>халява - something you get for free through luck&lt;/li>
&lt;li>ломать голову над - wrack one&amp;rsquo;s brains&lt;/li>
&lt;li>глазом не моргнуть - without batting an eyelid&lt;/li>
&lt;li>искать вчерашнего дня - go on a wild goose chase/waste time futilely&lt;/li>
&lt;li>стреляный воробей - an old hand/alter Hase/worldly wise man&lt;/li>
&lt;li>выводить на чистую воду - show true colors/expose&lt;/li>
&lt;li>как в воду кануть - vanish in thin air&lt;/li>
&lt;li>и концы в воду - and no one&amp;rsquo;ll be the wiser&lt;/li>
&lt;li>щелкунчик - nutcracker (in ballet)&lt;/li>
&lt;li>спать без задных ног - sleep deeply, unable to wake up&lt;/li>
&lt;li>чувствовать себе как огурчик - feel great&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Ведь нездорово сидеть дома. Вон вы какие нехорошие стали. Прежде вы были, как огручик а теперь как сидите, бог знает на что похожи. - Гончаров&lt;/p>&lt;/blockquote>
&lt;ul>
&lt;li>открыть Америку - discover the obvious&lt;/li>
&lt;li>знать вдоль и поперёк - know inside out&lt;/li>
&lt;li>вилами по воде писано - not written in stone/be up in the air&lt;/li>
&lt;li>ты мне &lt;a href="https://www.youtube.com/watch?app=desktop&amp;amp;v=YvNUDeVzSDY">втрираешь лютую дичь&lt;/a> - (что за хуйно ты несёшь?)&lt;/li>
&lt;/ul></content:encoded></item><item><title>Good Language Books</title><link>https://alexalejandre.com/languages/good-old-language-books/</link><pubDate>Wed, 29 Apr 2015 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/good-old-language-books/</guid><description>List of books</description><content:encoded>&lt;h3 id="professor-arguelles-taxonomy">Professor Arguelles&amp;rsquo; &lt;a href="https://www.youtube.com/embed/tgqNbwpiJzg?si=UcyjwtgpRgS7EKPN">Taxonomy&lt;/a>:&lt;/h3>
&lt;ul>
&lt;li>Text based: present you with a dialogue or text, you build an intuition on (Assimil, Linguaphone, the better Colloquials)&lt;/li>
&lt;li>Grammar &amp;amp; Excercise: Lessons arranged by grammar point (Hugo, Teach Yourself, Langenscheidt)&lt;/li>
&lt;li>Model &amp;amp; Drill: (Berlitz, FSI)&lt;/li>
&lt;li>Phrasebook: Arranged by topic (shopping etc.), no useful exercises (Modern style)&lt;/li>
&lt;/ul>
&lt;p>re&lt;/p>
&lt;ul>
&lt;li>
&lt;details id="teach-yourself">
&lt;summary>Teach Yourself&lt;/summary>
&lt;p>The older books squeeze everything in 200 pages. For the most part this works extremely well, however sometimes they really drop the ball. Here&amp;rsquo;s a list of the older ones:&lt;/p>
&lt;ul>
&lt;li>Turkish - G. L. Lewis?&lt;/li>
&lt;li>Chinese - H.R. Williamson?&lt;/li>
&lt;li>❤️ Gaelic - Roderick Mackinnon &lt;span class="marginnote">Best book for the language, by far.&lt;/span>&lt;/li>
&lt;li>❤️ Serbo-Croat - Vera Javarek, Miroslava Sudjić &lt;span class="marginnote">Lovely. The first few pages teach cases beautifully.&lt;/span>&lt;/li>
&lt;li>German - Wells, Jenkins, Adams? &lt;span class="marginnote">Shows that German plurals are regular.&lt;/span>&lt;/li>
&lt;li>Cantonese - R. Bruce&lt;/li>
&lt;li>Portuguese - J.W. Barker&lt;/li>
&lt;li>Danish - H.A. Koefoed&lt;/li>
&lt;li>Swahili - D.V. Perrott&lt;/li>
&lt;li>Old English - Leslie Blakeley&lt;/li>
&lt;li>Russian - Maximilian Fourman&lt;/li>
&lt;li>Russian - Michael Frewin &lt;span class="marginnote">These are different books.&lt;/span>&lt;/li>
&lt;li>Maltese - Joseph Aquilina&lt;/li>
&lt;li>Welsh - John T. Bowen, T.J. Rhys Jones&lt;/li>
&lt;li>Arabic - A.S. Tritton?&lt;/li>
&lt;li>Malay - E.B. Lewis&lt;/li>
&lt;li>Italian - Katherine Speight&lt;/li>
&lt;li>Hausa - C.H. Kraft, A.H.M Kirk-Greene&lt;/li>
&lt;li>Icelandic - P.J.T. Glendening&lt;/li>
&lt;li>Romanian - M. Murrell, V. Ștefănescu-Drăgănești&lt;/li>
&lt;li>Ancient Greek - F. Kinchin Smith&lt;/li>
&lt;li>Modern Greek (pre-1982 polytonic script) - S.A. Sofroniou&lt;/li>
&lt;li>Polish - M. Corbridge-Patkaniowska&lt;/li>
&lt;li>Urdu - T. Grahame Bailey&lt;/li>
&lt;li>Afrikaans - M.P.G. Burgers&lt;/li>
&lt;li>Dutch - H. Koolhoven&lt;/li>
&lt;li>French - Norman Wilson, John Adams&lt;/li>
&lt;li>Norwegian - A. Sommerfelt, I. Marm&lt;/li>
&lt;li>Spanish - N. Scarlyn Wilson&lt;/li>
&lt;li>Swedish - R.J. McClean&lt;/li>
&lt;li>(Biblical) Hebrew - R.K. Harrison&lt;/li>
&lt;li>Colloquial Arabic - T.F. Mitchell&lt;/li>
&lt;li>Latin - F. Kinchin Smith&lt;/li>
&lt;li>Bengali - D.F. Hudson&lt;/li>
&lt;li>Jifunze Kiingereza: English for Swahili-Speaking People-D.V. Perrott&lt;/li>
&lt;li>Esperanto - John Cresswell, John Hartley&lt;/li>
&lt;li>Finnish - Arthur H. Whitney&lt;/li>
&lt;li>New Testament Greek - D.F. Hudson&lt;/li>
&lt;li>Indonesian - John B. Kwee&lt;/li>
&lt;li>Japanese - C.J. Dunn and S. Yanada&lt;/li>
&lt;li>Latvian - Tereza Budina Lazdina&lt;/li>
&lt;li>Maltese - Joseph Aquilina&lt;/li>
&lt;li>Samoan - C.C. Marsack&lt;/li>
&lt;/ul>
&lt;p>&amp;ldquo;What are those question marks?&amp;rdquo; you may ask. I found a cute &lt;a href="https://alexalejandre.com/languages/who-wrote-ty-books/">mystery&lt;/a> about their authors.&lt;/p>
&lt;p>&lt;a href="https://nelsonwynn.wixsite.com/pinnerps/language-titles">More detail here&lt;/a>&lt;/p>
&lt;p>The newer Teach Yourself books aren&amp;rsquo;t good for much. While in the older chapters focus on a grammatical feature, then apply them, the newer series presents a theme like &amp;ldquo;greetings&amp;rdquo; with little relation to the language structure itself, haphazardly handling grammar etc.&lt;/p>
&lt;/details>
&lt;/li>
&lt;li>
&lt;details id="colloquial">
&lt;summary>Colloquial&lt;/summary>
&lt;p>Overall my favorite series, these books built my foundation for many languages.&lt;/p>
&lt;ul>
&lt;li>Spanish - William Robert Patterson&lt;/li>
&lt;li>German - P.F. Dory&lt;/li>
&lt;li>Italian - A.L. Hayward&lt;/li>
&lt;li>❤️ French - William Robert Patterson &lt;span class="marginnote">This taught me French.&lt;/span>&lt;/li>
&lt;li>❤️ Persian - Lawrence P. Elwell-Sutton&lt;/li>
&lt;li>Japanese (romanised) - William Montgomery
McGovern&lt;/li>
&lt;li>Arabic (romanised) - De Lacy O&amp;rsquo;Leary&lt;/li>
&lt;li>Hindustani (romanised) - A.H. Harley&lt;/li>
&lt;li>Hungarian - Arthur H. Whitney&lt;/li>
&lt;li>Czech - J. Schwartz&lt;/li>
&lt;li>Rumanian - Grigore Nandriș&lt;/li>
&lt;li>Turkish - Yusif Mardin&lt;/li>
&lt;li>Portuguese - Maria Emília de Alvelos Naar&lt;/li>
&lt;li>❤️ Russian - William Harrison, Yelena Clarkson,
and Stephen Le Fleming &lt;span class="marginnote">This taught me Russian.&lt;/span>&lt;/li>
&lt;li>Modern Greek (pre-1982 polytonic script) -
Katerina Harris&lt;/li>
&lt;li>Chinese (Northern) - A. Neville J. Whymant&lt;/li>
&lt;li>❤️ Coloquial Serbo-Croat - Cecilia Hawkesworth &lt;span class="marginnote">This taught me ‘our language.’&lt;/span>&lt;/li>
&lt;/ul>
&lt;/details>
&lt;/li>
&lt;li>
&lt;details id="assimil">
&lt;summary>Assimil&lt;/summary>
&lt;p>My next favorite series.&lt;/p>
&lt;ul>
&lt;li>French&lt;/li>
&lt;li>❤️ Hungarian &lt;span class="marginnote">Best Hungarian course.&lt;/span>&lt;/li>
&lt;li>Dutch &lt;span class="marginnote">Their best course.&lt;/span>&lt;/li>
&lt;/ul>
&lt;p>This shines with Standard European languages (the Dutch course is particularly loved.) Non-Indo-European languages are generally handled poorly, although Hungarian is especially fantastic. The Slavic courses are also quite poor.&lt;/p>
&lt;/details>
&lt;/li>
&lt;li>
&lt;details id="hugo">
&lt;summary>Hugo&lt;/summary>
&lt;ul>
&lt;li>Swedish (new and old, I learned from the new one)&lt;/li>
&lt;/ul>
&lt;p>The older and newer are both good. The old versions had an interesting style of interwoven text while the newer versions are similar to Colloquial.&lt;/p>
&lt;/details>
&lt;/li>
&lt;/ul>
&lt;details id="">
&lt;summary>&lt;/summary>
&lt;/details>
&lt;h3 id="stand-alones">Stand Alones&lt;/h3>
&lt;ul>
&lt;li>Langue et Civilization Françaises - Mauger&lt;/li>
&lt;/ul>
&lt;h3 id="textbooks-teaching-multiple-languages-at-once">Textbooks teaching multiple languages at once.&lt;/h3>
&lt;ul>
&lt;li>Heatwole - Span, French, Ital. grammar&lt;/li>
&lt;li>Notley - comp. gram. Fr. It. Sp. Port. - 1868&lt;/li>
&lt;li>Mikhail Petrunin - Comp. Gram. Span, Port, Ital, Fr. - recent.&lt;/li>
&lt;li>Horst G. Klein - EuroComRom - die Sieben Siebe - Romantische - Germanische&lt;/li>
&lt;li>Elisabetta Bonvino - Read and Understand 5 Romance Languages - with nice website&lt;/li>
&lt;li>Paul Teyssier - comprendre les langues romanes (includes Ro!)&lt;/li>
&lt;li>Bodmer - Frederick Bodmer - The Loom of Language&lt;/li>
&lt;/ul></content:encoded></item><item><title>Features of Archaic English</title><link>https://alexalejandre.com/languages/archaic-english/</link><pubDate>Fri, 21 Feb 2014 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/archaic-english/</guid><description>&lt;p>Much of this applies to poetry, the Graveyard poets, Romantics, Restoration era poets etc. drank of this same fount.&lt;/p></description><content:encoded>&lt;p>Much of this applies to poetry, the Graveyard poets, Romantics, Restoration era poets etc. drank of this same fount.&lt;/p>
&lt;ul>
&lt;li>My and thy -&amp;gt; mine and thine (like a/an): Mine eyes&lt;/li>
&lt;li>-en plural: eggen, eyen&lt;/li>
&lt;li>2nd person pronouns:
&lt;ul>
&lt;li>Formal/plural: Ye/you as subject and object&lt;/li>
&lt;li>Informal: Thou/thee, with -st verb endings (but thou art): Lovest thou me?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>-th 3rd person singular verb ending: He hath a cat. What sayeth he?&lt;/li>
&lt;li>v2, verb is always the 2nd part of a sentence &lt;span class="marginnote">Preserved: Never have I&amp;hellip; So can I&lt;/span>&lt;/li>
&lt;li>kennen/wissen, connaitre/savoir distinction: We preserve ken &amp;ldquo;beyond my ken&amp;rdquo; and wit, but both are verbs too.&lt;/li>
&lt;li>here/there/where:
&lt;ul>
&lt;li>direction:
&lt;ul>
&lt;li>hence - from here, whence - from where, thence - from there&lt;/li>
&lt;li>hither - to here, wither - where to, thither - to there&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>with prepositions:
&lt;ul>
&lt;li>thereof, hereby, wherein etc.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>contractions:
&lt;ul>
&lt;li>contract v: o&amp;rsquo;er, (n)e&amp;rsquo;er&lt;/li>
&lt;li>&amp;rsquo;tis&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>?: thereof&lt;/li>
&lt;li>here, there, yonder: yonder means out of sight, even further (like German jenner, Spanish aquello, which are getting obsolete themselves)&lt;/li>
&lt;/ul>
&lt;h3 id="vocabulary">Vocabulary&lt;/h3>
&lt;ul>
&lt;li>kemp - strive, a kemper is like a knight errant&lt;/li>
&lt;li>cark - worry&lt;/li>
&lt;li>hight - be named (cf. Gr. heißen)&lt;/li>
&lt;li>main - sea&lt;/li>
&lt;li>kith - friends, acquaintances&lt;/li>
&lt;li>tale - tongue, language&lt;/li>
&lt;li>ween - suppose&lt;/li>
&lt;li>smart - hurt&lt;/li>
&lt;li>fen - marsh, bog&lt;/li>
&lt;li>bower - farmer&lt;/li>
&lt;li>design - plan&lt;/li>
&lt;li>frig, swive - fuck &lt;span class="marginnote">17th century restoration literature was rather vulgar&lt;/span>&lt;/li>
&lt;li>thew - muscle/sinew, virtue, attractive attribute&lt;/li>
&lt;li>ken - know (person, be familiar with)&lt;/li>
&lt;li>wit - know (fact)&lt;/li>
&lt;li>ere - before (Cf. Gr. ehe)&lt;/li>
&lt;li>be wont to - like/prefer&lt;/li>
&lt;li>meseems - it seems to me&lt;/li>
&lt;li>me lists - it pleases me&lt;/li>
&lt;/ul>
&lt;h3 id="funny-false-archaisms">Funny False Archaisms&lt;/h3>
&lt;ul>
&lt;li>hice - 1 house, 2 hice like mice&lt;/li>
&lt;li>melikes - I like it&lt;/li>
&lt;/ul></content:encoded></item><item><title>Archaic Swedish Features</title><link>https://alexalejandre.com/languages/archaic-swedish/</link><pubDate>Thu, 13 Feb 2014 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/languages/archaic-swedish/</guid><description>&lt;h3 id="archaic-conjugations">Archaic Conjugations&lt;/h3>
&lt;ul>
&lt;li>All verbs would take -en with I: I ären, I voren, I haden varit, I skolen vara, I måsten, I tror&lt;/li>
&lt;li>In the present, plurals are like the infinitive, except vi äro: vi hafva&lt;/li>
&lt;li>In the past, weak verbs had one form, while strong plurals would take -o, some with a different stem vowel (det fanns, de funnos) shared by the subjunctive.&lt;/li>
&lt;li>1st. pl. imperative with -om: låtom oss tro&lt;/li>
&lt;li>2nd pl. imperative with n: tron&lt;/li>
&lt;li>vara form perfect past with intransitive verbs: jag är uppstigen&lt;/li>
&lt;li>present subjunctive replaces infinitive&amp;rsquo;s a with -e (if not -a, same as infinitive)&lt;/li>
&lt;li>past subjunctive only exists with strong verbs, adding -e (to plural past stem)&lt;/li>
&lt;/ul>
&lt;p>Note verbs themselves were often spelled differently: hafva, blifva, skrifva etc.&lt;/p></description><content:encoded>&lt;h3 id="archaic-conjugations">Archaic Conjugations&lt;/h3>
&lt;ul>
&lt;li>All verbs would take -en with I: I ären, I voren, I haden varit, I skolen vara, I måsten, I tror&lt;/li>
&lt;li>In the present, plurals are like the infinitive, except vi äro: vi hafva&lt;/li>
&lt;li>In the past, weak verbs had one form, while strong plurals would take -o, some with a different stem vowel (det fanns, de funnos) shared by the subjunctive.&lt;/li>
&lt;li>1st. pl. imperative with -om: låtom oss tro&lt;/li>
&lt;li>2nd pl. imperative with n: tron&lt;/li>
&lt;li>vara form perfect past with intransitive verbs: jag är uppstigen&lt;/li>
&lt;li>present subjunctive replaces infinitive&amp;rsquo;s a with -e (if not -a, same as infinitive)&lt;/li>
&lt;li>past subjunctive only exists with strong verbs, adding -e (to plural past stem)&lt;/li>
&lt;/ul>
&lt;p>Note verbs themselves were often spelled differently: hafva, blifva, skrifva etc.&lt;/p>
&lt;ul>
&lt;li>skall has vi skola, i skolen&lt;/li>
&lt;li>Lär in the present: han lära vara he is said to be&lt;/li>
&lt;li>Må for subjunctive: det må du icke göra you mustn&amp;rsquo;t do this&lt;/li>
&lt;li>Månne/månde: Hvad månde det betyda? What might this mean?&lt;/li>
&lt;/ul>
&lt;h3 id="fossilized-cases">Fossilized Cases&lt;/h3>
&lt;p>The genitives complicate word building, as words can&amp;rsquo;t be compounded willy-nilly.&lt;/p>
&lt;h4 id="genitive-singular">Genitive singular:&lt;/h4>
&lt;ul>
&lt;li>hos prästens - at the minister&amp;rsquo;s&lt;/li>
&lt;li>hos grannas - at the neighbor&amp;rsquo;s&lt;/li>
&lt;li>till lands - by and&lt;/li>
&lt;li>till fots - by foot&lt;/li>
&lt;li>till sjös, havs - by/at sea&lt;/li>
&lt;li>till sängs - to bed&lt;/li>
&lt;li>till skogs - to the forest&lt;/li>
&lt;li>tills mans - everyone&lt;/li>
&lt;li>ättartal - genealogy&lt;/li>
&lt;li>giftermål - marriage&lt;/li>
&lt;li>varubyte - barter&lt;/li>
&lt;li>läroverk - school&lt;/li>
&lt;li>till spillo - to ruin&lt;/li>
&lt;/ul>
&lt;p>Also consider the time construction e.g. i middags, i söndags, dagsens, lifsens, riksens.&lt;/p>
&lt;p>Latin/Greek genitives: Kristi, Jesu, Messie, Anne, Marie, musei, kollegii.&lt;/p>
&lt;h4 id="genitive-plural">Genitive plural:&lt;/h4>
&lt;ul>
&lt;li>herravälde - power/dominion&lt;/li>
&lt;li>mannamod - manly courage&lt;/li>
&lt;li>konungaval - election of kings&lt;/li>
&lt;li>kola mörkret - pitch dark&lt;/li>
&lt;li>till handa - at hand&lt;/li>
&lt;li>tillbaka, till rygga - back&lt;/li>
&lt;li>till hopa - together&lt;/li>
&lt;li>bringa till väga - bring about&lt;/li>
&lt;/ul>
&lt;h4 id="dative-singular">Dative singular:&lt;/h4>
&lt;ul>
&lt;li>å sido - aside&lt;/li>
&lt;li>i ty fall, i så målto - in such case(s)&lt;/li>
&lt;li>i förmågo av - by the power/virtue of&lt;/li>
&lt;li>i min ägo - in my possession&lt;/li>
&lt;li>i delo med - in disagreement with&lt;/li>
&lt;li>meds Guds nåde - by the grace of God&lt;/li>
&lt;li>för visso - surely&lt;/li>
&lt;li>på färde - going on&lt;/li>
&lt;li>gå man ur huse - take to the streets&lt;/li>
&lt;li>gammal i gårde&lt;/li>
&lt;li>skämt åsido - jokes aside&lt;/li>
&lt;li>vara av godo/ondo - be good/evil&lt;/li>
&lt;li>se i syne - have visions&lt;/li>
&lt;li>på sistone - lately&lt;/li>
&lt;li>i allt i allo&lt;/li>
&lt;li>famla i blindo&lt;/li>
&lt;li>i huru&lt;/li>
&lt;li>varg i veum&lt;/li>
&lt;/ul>
&lt;h4 id="dative-plural">Dative plural:&lt;/h4>
&lt;ul>
&lt;li>i handom - in hand&lt;/li>
&lt;li>i löndom - in secret&lt;/li>
&lt;li>lagom - just right&lt;/li>
&lt;li>i sinom tid - in due time&lt;/li>
&lt;li>stundom - once in a while/sometimes&lt;/li>
&lt;li>tusen sinom tusen - thousands upon thousands&lt;/li>
&lt;li>allom bekant&lt;/li>
&lt;li>androm till skräck och varnagel&lt;/li>
&lt;li>i andanom&lt;/li>
&lt;/ul>
&lt;h4 id="accusative">Accusative:&lt;/h4>
&lt;ul>
&lt;li>i rättan tid - at the right time&lt;/li>
&lt;li>skrita i högan sky - scream loudly&lt;/li>
&lt;li>i ljusan låga&lt;/li>
&lt;li>i godan ro&lt;/li>
&lt;li>ana argan list&lt;/li>
&lt;/ul></content:encoded></item><item><title>A trembling soul</title><link>https://alexalejandre.com/poetry/mine/a-trembling-soul/</link><pubDate>Fri, 17 May 2013 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/mine/a-trembling-soul/</guid><description>&lt;p>As laughing wavelets pull the cleansing dawn&lt;br>
Across our souls to life long woebegone,&lt;br>
Our poet grins and flirts on with his muse,&lt;br>
Their lovedrunk dreams seducing truth&amp;rsquo;s long snooze,&lt;br>
Away from bed and other forms of art,&lt;br>
The ink sleeps true, the poet&amp;rsquo;s pretty part,&lt;br>
A happy hand, true from hope&amp;rsquo;s booze and song,&lt;br>
Draws well the world with words so used to wrong.&lt;br>
Our burning calm and sleeping furry race&lt;br>
As brothers born across the mirror&amp;rsquo;s face,&lt;br>
And fight til growing tired, we shift our gaze&lt;br>
There on the sea of days unsailed we graze,&lt;br>
The lovers look to extasy and age,&lt;br>
Great castles floating in the soul off stage&lt;br>
The flowers flee the fall and coming storm,&lt;br>
The hero all he knows just to conform,&lt;br>
To fit the story, he hears the call and song,&lt;br>
And follows true the hero&amp;rsquo;s path to wrongs,&lt;/p></description><content:encoded>&lt;p>As laughing wavelets pull the cleansing dawn&lt;br>
Across our souls to life long woebegone,&lt;br>
Our poet grins and flirts on with his muse,&lt;br>
Their lovedrunk dreams seducing truth&amp;rsquo;s long snooze,&lt;br>
Away from bed and other forms of art,&lt;br>
The ink sleeps true, the poet&amp;rsquo;s pretty part,&lt;br>
A happy hand, true from hope&amp;rsquo;s booze and song,&lt;br>
Draws well the world with words so used to wrong.&lt;br>
Our burning calm and sleeping furry race&lt;br>
As brothers born across the mirror&amp;rsquo;s face,&lt;br>
And fight til growing tired, we shift our gaze&lt;br>
There on the sea of days unsailed we graze,&lt;br>
The lovers look to extasy and age,&lt;br>
Great castles floating in the soul off stage&lt;br>
The flowers flee the fall and coming storm,&lt;br>
The hero all he knows just to conform,&lt;br>
To fit the story, he hears the call and song,&lt;br>
And follows true the hero&amp;rsquo;s path to wrongs,&lt;/p>
&lt;p>Since man first raised his head and saw the stars,&lt;br>
His story&amp;rsquo;s been of heros from afar,&lt;br>
Both martial in their victories and wrongs,&lt;br>
As wells profoundly filled by muses&amp;rsquo; songs.&lt;br>
In emulating them we take our place&lt;br>
And find the path to fame &amp;amp; hollowed grace.&lt;/p>
&lt;p>His trembling soul athrist for meaning lost,&lt;br>
He wandered through man&amp;rsquo;s follies &amp;amp; their cost&lt;br>
And learned success &amp;amp; failure die together,&lt;br>
But one short flash in the windy nether.&lt;br>
The only thing worth doing&amp;rsquo;s acting well&lt;br>
As brooks make rivers, deeds make tales to tell.&lt;br>
But what is he, without a dream to foster,&lt;br>
A character in search of an author?&lt;br>
He is a man without a context, lost,&lt;br>
Who seeks true harmony at any cost.&lt;br>
To be a God, a craftsman forming truth,&lt;br>
For others lost, is how he&amp;rsquo;d spend his youth,&lt;br>
Were but his feeble body not so wry,&lt;br>
So insignificant, with but two eyes,&lt;br>
In no way enough to spot the splendored might,&lt;br>
The majesty and fire out of sight.&lt;br>
To spy all time and space, existence too,&lt;br>
As if t&amp;rsquo;were but a mountain range in view.&lt;br>
The universe&amp;rsquo;s grandeur&amp;rsquo;s too divine&lt;br>
For man so meek to properly design,&lt;br>
Or even dare to know or do but pine,&lt;br>
At knowing how man measures with his senses,&lt;br>
And fosters boundlessly those due pretenses&lt;br>
Which lock his mind in comfort&amp;rsquo;s arms and sealed&lt;br>
Him from the truth, how blind he is, revealed.&lt;br>
Blind to so much, which must all be translated&lt;br>
To sight, sound or some other sense unsated,&lt;br>
He found himself in search of meaning sought,&lt;br>
But never understood it&amp;rsquo;s fleeting naught,&lt;br>
Naught but a fancy, fleeting thought and folly,&lt;br>
But he escaped the cave and allegory&lt;br>
And found the sweet, sweet taste of absent glory,&lt;br>
Which feeds the empty world a yawning void&lt;br>
And vainly makes the rakes most overjoyed&lt;br>
To know they swive away their lives in truth,&lt;br>
While no great men escape time&amp;rsquo;s mighty tooth.&lt;/p></content:encoded></item><item><title>How long it has been</title><link>https://alexalejandre.com/poetry/mine/how-long-its-been/</link><pubDate>Fri, 25 May 2012 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/mine/how-long-its-been/</guid><description>&lt;p>How long it&amp;rsquo;s been, since I have played my part,&lt;br>
And graced my muse with hollow verse &amp;amp; art,&lt;br>
How long I&amp;rsquo;ve slacked &amp;amp; left my pen alone,&lt;br>
For want of verse my paper&amp;rsquo;s screamed and moaned,&lt;br>
Called back, I write, compose and bawl,&lt;br>
For lack of topics, better or at all.&lt;br>
And yet, this muse shall work, though I forgot,&lt;br>
This topic - just as graecian, as I&amp;rsquo;ve sought -&lt;br>
Suffices, works and is my subject now,&lt;br>
Congratulations Clam, you&amp;rsquo;re like new snow,&lt;br>
As Alexander Pope once wrote, let&amp;rsquo;s go!&lt;br>
&amp;ldquo;In beauty, faults conspicuous grow;&lt;br>
the smallest speck is seen on snow&amp;rdquo;&lt;br>
A long, long time ago, I saw you play,&lt;br>
Your fingers danced on piano keys like fey,&lt;br>
And thank the lord I do, I do not sail,&lt;br>
Or else I would have struck some rocky gale,&lt;br>
And lost my life, though but another sailor,&lt;br>
Life taken by a Siren&amp;rsquo;s song, a whaler,&lt;br>
A fisherman or pirate could be but a corpse,&lt;br>
Strewn all over the rocky shores and warfs.&lt;br>
Although my vapid verse grows weaker here,&lt;br>
Please do not fear, but please persevere!&lt;br>
For want of aim, of topics, words to write,&lt;br>
I&amp;rsquo;ll compliment you as is true and right:&lt;br>
Your golden locks could never be replaced,&lt;br>
Less I were to follow Jason&amp;rsquo;s pace&lt;br>
And find the golden fleece, or else like Loki,&lt;br>
I could find some dwarves and gold and form some gnocchi,&lt;br>
But no, for pasta&amp;rsquo;s not as pretty, no,&lt;br>
It&amp;rsquo;s hard to write these things, when I don&amp;rsquo;t know,&lt;br>
Just how you move and smile or gaze at things,&lt;br>
Those little idiosyncracies,&lt;br>
They make a person&amp;rsquo;s beauty breathe, you see,&lt;br>
And well, I don&amp;rsquo;t know how you are,&lt;br>
But your mind, that&amp;rsquo;s what I know, it&amp;rsquo;s now the star!&lt;br>
I like the way you like good things and stuff,&lt;br>
So rarely, seldomly I hear enough,&lt;br>
Of music, see nice paintings talked about&lt;br>
Or love of books, if still by quacks called out.&lt;br>
I like your taste, lament how little we speak,&lt;br>
You&amp;rsquo;re far too busy, you could fix and tweak&lt;br>
Your schedual for when your school starts up,&lt;br>
And do it all like me, in a few hours,&lt;br>
Mind numbing, but quite short and roll in flowers,&lt;br>
Lay down in meadows, see the clourds and stars,&lt;br>
Make note of how much smarter you are,&lt;br>
Compared to all your brethren stars above&lt;br>
And have enough free time the world to love.&lt;br>
But either way, I&amp;rsquo;ll live, because&amp;hellip; why not?&lt;br>
As I&amp;rsquo;ve written of the sea, I&amp;rsquo;ll write of yachts,&lt;br>
Of diving seas for pearls white in my youth,&lt;br>
Those good old days, of salty water, truth,&lt;br>
And jewelry to be, how I miss them!&lt;br>
Oh wait! I call you Clam, and whence that stems,&lt;br>
I&amp;rsquo;ll tell you now, instead of yachts, you see&amp;hellip;&lt;br>
Your poodle, Perla, she&amp;rsquo;s a pearl, I&amp;rsquo;ll be!&lt;br>
I&amp;rsquo;ll dive for her, just like those good, old times,&lt;br>
And look at that! This whole thing even rhymes!&lt;/p></description><content:encoded>&lt;p>How long it&amp;rsquo;s been, since I have played my part,&lt;br>
And graced my muse with hollow verse &amp;amp; art,&lt;br>
How long I&amp;rsquo;ve slacked &amp;amp; left my pen alone,&lt;br>
For want of verse my paper&amp;rsquo;s screamed and moaned,&lt;br>
Called back, I write, compose and bawl,&lt;br>
For lack of topics, better or at all.&lt;br>
And yet, this muse shall work, though I forgot,&lt;br>
This topic - just as graecian, as I&amp;rsquo;ve sought -&lt;br>
Suffices, works and is my subject now,&lt;br>
Congratulations Clam, you&amp;rsquo;re like new snow,&lt;br>
As Alexander Pope once wrote, let&amp;rsquo;s go!&lt;br>
&amp;ldquo;In beauty, faults conspicuous grow;&lt;br>
the smallest speck is seen on snow&amp;rdquo;&lt;br>
A long, long time ago, I saw you play,&lt;br>
Your fingers danced on piano keys like fey,&lt;br>
And thank the lord I do, I do not sail,&lt;br>
Or else I would have struck some rocky gale,&lt;br>
And lost my life, though but another sailor,&lt;br>
Life taken by a Siren&amp;rsquo;s song, a whaler,&lt;br>
A fisherman or pirate could be but a corpse,&lt;br>
Strewn all over the rocky shores and warfs.&lt;br>
Although my vapid verse grows weaker here,&lt;br>
Please do not fear, but please persevere!&lt;br>
For want of aim, of topics, words to write,&lt;br>
I&amp;rsquo;ll compliment you as is true and right:&lt;br>
Your golden locks could never be replaced,&lt;br>
Less I were to follow Jason&amp;rsquo;s pace&lt;br>
And find the golden fleece, or else like Loki,&lt;br>
I could find some dwarves and gold and form some gnocchi,&lt;br>
But no, for pasta&amp;rsquo;s not as pretty, no,&lt;br>
It&amp;rsquo;s hard to write these things, when I don&amp;rsquo;t know,&lt;br>
Just how you move and smile or gaze at things,&lt;br>
Those little idiosyncracies,&lt;br>
They make a person&amp;rsquo;s beauty breathe, you see,&lt;br>
And well, I don&amp;rsquo;t know how you are,&lt;br>
But your mind, that&amp;rsquo;s what I know, it&amp;rsquo;s now the star!&lt;br>
I like the way you like good things and stuff,&lt;br>
So rarely, seldomly I hear enough,&lt;br>
Of music, see nice paintings talked about&lt;br>
Or love of books, if still by quacks called out.&lt;br>
I like your taste, lament how little we speak,&lt;br>
You&amp;rsquo;re far too busy, you could fix and tweak&lt;br>
Your schedual for when your school starts up,&lt;br>
And do it all like me, in a few hours,&lt;br>
Mind numbing, but quite short and roll in flowers,&lt;br>
Lay down in meadows, see the clourds and stars,&lt;br>
Make note of how much smarter you are,&lt;br>
Compared to all your brethren stars above&lt;br>
And have enough free time the world to love.&lt;br>
But either way, I&amp;rsquo;ll live, because&amp;hellip; why not?&lt;br>
As I&amp;rsquo;ve written of the sea, I&amp;rsquo;ll write of yachts,&lt;br>
Of diving seas for pearls white in my youth,&lt;br>
Those good old days, of salty water, truth,&lt;br>
And jewelry to be, how I miss them!&lt;br>
Oh wait! I call you Clam, and whence that stems,&lt;br>
I&amp;rsquo;ll tell you now, instead of yachts, you see&amp;hellip;&lt;br>
Your poodle, Perla, she&amp;rsquo;s a pearl, I&amp;rsquo;ll be!&lt;br>
I&amp;rsquo;ll dive for her, just like those good, old times,&lt;br>
And look at that! This whole thing even rhymes!&lt;/p></content:encoded></item><item><title>Of mist</title><link>https://alexalejandre.com/poetry/mine/of-mist/</link><pubDate>Thu, 12 Apr 2007 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/mine/of-mist/</guid><description>&lt;p>In ethereal veil of mist,&lt;br>
Clouded to hide from all she is,&lt;br>
Life has she to grief forlorn,&lt;br>
Abandoned cries life on her&amp;rsquo;n mourn.&lt;br>
Hopelessness comes upon the light,&lt;br>
Consuming all in sorrowed might.&lt;br>
In despair&amp;rsquo;s jaws is she taken,&lt;br>
The beast descends with all forsaken.&lt;/p></description><content:encoded>&lt;p>In ethereal veil of mist,&lt;br>
Clouded to hide from all she is,&lt;br>
Life has she to grief forlorn,&lt;br>
Abandoned cries life on her&amp;rsquo;n mourn.&lt;br>
Hopelessness comes upon the light,&lt;br>
Consuming all in sorrowed might.&lt;br>
In despair&amp;rsquo;s jaws is she taken,&lt;br>
The beast descends with all forsaken.&lt;/p></content:encoded></item><item><title>Arabian National Bank of Hedjaz</title><link>https://alexalejandre.com/finance/nat-bank-hedjaz/</link><pubDate>Wed, 15 Jun 2005 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/finance/nat-bank-hedjaz/</guid><description>The bank of Hejaz printed, but never issued notes, which featured scenes from other countries.</description><content:encoded>&lt;p>N.b. The author &lt;a href="https://web.archive.org/web/20110216005653/http://www.pjsymes.com.au/articles/Hedjaz.htm">Peter Symes&lt;/a>&amp;rsquo; website is long gone, so I&amp;rsquo;m rehosting it.&lt;/p>
&lt;hr>
&lt;h2 id="the-mystery">The Mystery&lt;/h2>
&lt;p>The banknotes of the Hedjaz &lt;span class="marginnote">Transliterating from Arabic into English is not always easy and often depends on the area in which the Arabic is spoken. The name ‘Hedjaz’ can also be transliterated as ‘Hejaz’ and ‘Hijaz’. The last spelling is probably more accurate, as Arabic does not have a letter equivalent to ‘e’. However, for this study, the spelling ‘Hedjaz’ is used, as this is the spelling that appears on the banknotes.&lt;/span> first came to the notice of the international collecting community in 1954 when four notes were offered for sale in the auction of King Farouk’s numismatic collection. These notes were included in a 350-piece lot of paper money that sold for about US$160.00. While this brief mention of the notes was probably overlooked by many people at the time, the notes prepared for the Arabian National Bank of Hedjaz soon became an enigma amongst collectors.&lt;/p>
&lt;p>The notes are an enigma for a number of reasons. Firstly, the notes were never issued, with only unissued and specimen notes being known. Secondly, there had been nothing reported of the issuing authority, which appeared never to have existed. Finally, the illustrations on the banknotes include decorations and illustrations of scenes that are not in, or of, the Hedjaz. Why would someone prepare notes for issue in the Hedjaz and then place scenes from Lebanon, Syria, and Iraq on the notes?&lt;/p>
&lt;p>The mystery surrounding these notes has in part been due to their infrequent appearance on the collector market. One of the few recorded sales of a note was during the 1980s when the American dealer Ted Uhl sold a 100-pound note without serial numbers. During the 1990s copies of unissued notes were offered for sale in the United States of America. The set consisted of the five denominations of 1, 5, 10, 50 and 100 pounds.&lt;/p>
&lt;p>&lt;img src="https://web.archive.org/web/20110216005653im_/http://www.pjsymes.com.au/articles/hedjaz/lotfallah.jpg" alt="The Signature of H. Habib Lotfallah" title="The Signature of H. Habib Lotfallah">&lt;/p>
&lt;p>Like so many enigmas, once the truth is told about these notes, all becomes so clear that it can only be wondered why the reason for the existence of these notes has remained obfuscated for so long. As it transpires, the story of the banknotes revolves around the ambitions of one man and once his story has been told the history of the notes will be revealed. The gentleman responsible for establishing ‘The Arabian National Bank of Hedjaz’ and for preparing its banknotes was H. Habib Lotfallah, and his signature is apparent on the banknotes prepared for the bank. The banknotes were his, the issuing authority was his, and this is his story.&lt;/p>
&lt;h3 id="habib-lotfallah">Habib Lotfallah&lt;/h3>
&lt;p>The Lotfallah family were Syrians of the Greek Orthodox Church and the modern history of the family begins with Habib Lotfallah, who was born in Beirut on 5 May 1826. Habib Lotfallah, who is not the hero of this story, was nevertheless a most remarkable man and he lay the foundation for this story. Educated in Beirut he traveled to Egypt in 1852 to make his way in life. Backed by substantial capital, he and his brother Mikhail commenced commercial enterprises that steadily grew until they encompassed interests in Egypt, Sudan and India. Their enterprises in Sudan became considerable and their wealth steadily increased. However, Mikhail Lotfallah died and Habib Lotfallah decided to forgo the commercial world and turned instead to agriculture.&lt;/p>
&lt;p>Purchasing substantial land holdings in the Nile valley, he developed them so that their productivity increased and over time he acquired more land, which ultimately made him one of the greatest landowners in the Nile valley. By 1905, when he retired from business, he was one of the wealthiest men in Egypt. Not only was he wealthy, but he had won the respect of the government, which made him a ‘Pasha’, and he had become renown for his beneficence and charitable deeds.&lt;/p>
&lt;p>Habib Lotfallah Pasha had three sons: Michel, Habib and George. In 1905, after their father’s retirement, the three sons took over the family business, but their father remained the head of the family and he continued to be active in many fields. In 1920 Habib Lotfallah Pasha was created an Amir by King Hussein of the Hedjaz. The award of the title ‘Amir’ to Habib Lotfallah Pasha was due to a number of factors, but importantly it demonstrated a link between the Lotfallah family and the Hashimite King of the Hedjaz and his family. When the Hedjaz was freed from the suzerainty of the Ottoman Empire after the Great War, King Hussein found himself an independent monarch (albeit under the protection of the British). Hussein decided to introduce his own orders and decorations and to suppress the Ottoman titles—such as ‘Effendi’, ‘Bey’ and ‘Pasha’. Two of the orders he created were the ‘Nahda’ (awakening) and the ‘Istklal’ (independence). The honorary title that he chose to ennoble the most distinguished recipients of his awards was ‘Amir’. Hussein was reasonably generous with his honours and awards, presenting orders and decorations to a number of Syrian, Egyptian, Italian and British recipients.&lt;/p>
&lt;p>In the official gazette of Mecca, published on 16 Ramadan 1338 (3 June 1920), the following grant was announced:&lt;/p>
&lt;blockquote>
&lt;p>‘The title of Amir is granted to El-Sayed Habib Lotfallah. Here is a copy of the pertinent Royal Edict:&lt;/p>
&lt;p>‘In view of the antiquity of the Lotfallah family and in view that We know of the consideration that he enjoys among his fellow countrymen, grant the title Amir to El-Sayed Habib Lotfallah, which is transferable to his progeny from father to son until it pleases God.’&lt;/p>&lt;/blockquote>
&lt;p>The title was recognition for the support that Habib Lotfallah Pasha had given to charitable projects; of the support the family had given to Syrian nationalist and independence movements; for the hospitality that the family had shown to Abdullah, the son of Hussein, on a visit to Egypt; and because of the distinguished character of the recipient.&lt;/p>
&lt;p>Habib Lotfallah Pasha died on 28 December 1920 at the age of ninety four. At his funeral the King of the Hedjaz was represented by Nuri al-Said, who later became Prime Minister of Iraq. Following Habib Lotfallah’s death, the estate of the family was managed by his three sons. Of the three sons, it is the fortunes of his second son, H. Habib Lotfallah &lt;span class="marginnote">So that he might not be confused with his father it appears that the son often used the initial ‘H’ before his name, to represent himself as ‘H. Habib Lotfallah’. However, it is not known what the initial ‘H’ represented.&lt;/span>, which are of singular interest to this history.&lt;/p>
&lt;p>&lt;span class="marginnote">In Sarkis (1926) it is stated that Habib Lotfallah entered the military academy and attained the rank of mulazim tani or sub-lieutenant of cavalry. In an undated biographical sketch, typed in French and held in the British National Archives (CO732/85/19), it is stated that in 1907 Lotfallah was a sub-lieutenant in the ‘Coast Guard’.&lt;/span> H. Habib Lotfallah was born in Cairo in 1882. After completing some schooling in Egypt, he went to France for three years to complete his studies; after which he visited various European cities before returning to Cairo. He attended the Military Academy and in 1907 he was commissioned as a sub-lieutenant in the cavalry of the Egyptian Army&lt;span class="marginnote">In Sarkis (1926) it is stated that Habib Lotfallah entered the military academy and attained the rank of mulazim tani or sub-lieutenant of cavalry. In an undated biographical sketch, typed in French and held in the British National Archives (CO732/85/19), it is stated that in 1907 Lotfallah was a sub-lieutenant in the ‘Coast Guard’.&lt;/span>. However, he was not satisfied with a military life and in 1908 Habib Lotfallah sought a career as a diplomat in the Ottoman Empire. In pursuing this aim, he visited the Balkan states before continuing to Austria, Germany, Italy, France and Spain. In 1911 he was appointed Treasurer to the authority that supervised the injured of Beirut following attacks on that city during the Italo-Turkish war. In 1912 Habib Lotfallah was appointed an inspector of the Red Crescent so that he might investigate matters relating to the injured during the war that took place in the Balkans in that year. In 1913 he was appointed Attaché to the Embassy of Turkey in London when Tewfik Pasha was the Turkish Ambassador. However, he did not take up the appointment due to the war in the Balkans and he remained in Constantinople, working in the Foreign Office. The following year he became Attaché to the Grand Vizier Prince Saïd Halim in Constantinople and later he became deputy envoy to the Wali &lt;span class="marginnote">A ‘Wali’ or ‘Vali’ was a governor in charge of a vilayet, which was a province of the Ottoman Empire. ‘Wali’ is the Arabic word and ‘Vali’ is the Turkish word.&lt;/span> of Beirut, Békir Samy Bey.&lt;/p>
&lt;p>Some time after the outbreak of the Great War, when Habib Lotfallah returned to Cairo, he was advised by the British General Sir John Maxwell that it would be sensible to go quietly to neutral Spain and stay there until the war was over. Ostensibly Habib Lotfallah was still a diplomat in the employment of the Ottoman Empire, but it seems that by 1916 he had resolved that the days of the Ottoman Empire were over. Consequently, H. Habib Lotfallah spent the duration of the war in Madrid, where he associated with a number of notables who were similarly seeking to wait out the war. Once the Great War had ended, Habib Lotfallah returned to diplomatic duties. The Party of Syrian Union, in which his brother Michel was active, asked him to become its representative in Paris and London.&lt;/p>
&lt;p>So successful was the work of H. Habib Lotfallah perceived to be, in representing the Party of Syrian Union, that, on his return to Cairo, he was asked by King Hussein of the Hedjaz to work for his family. In 1920 he was appointed adviser to Amir Faisal, a son of the King, and in the following year he was nominated as the head of mission and envoy for King Hussein to Paris and London. On 27 December 1920 (27 Safar 1339), Habib Lotfallah was awarded the Order of the Nahda for his services, loyalty and devotion to the King. In 1922 he became the foreign affairs adviser to the Kingdom of Arabia and then Chief aide-de-camp to King Hussein, with the rank of General. In 1923 he became Minister Plenipotentiary for the Hedjaz and Envoy Extraordinary to the King of Italy in Rome. The following year, in 1924, Habib Lotfallah led the Hedjazi mission to the League of the Nations in Geneva and was also appointed Minister to Moscow and Rome.&lt;/p>
&lt;p>From the activities of Habib Lotfallah, from 1912 to 1924, it can be seen that he spent much of his time in Europe and he increasingly became a confidant of King Hussein. Because his father had been given the title of ‘Amir’, Habib Lotfallah used the title ‘Prince’ when moving amongst the diplomatic and social circles of Europe. The use of the title was perhaps not quite correct, but in Europe where princes were common, it appears to have been accepted without question.&lt;/p>
&lt;p>&lt;img src="https://web.archive.org/web/20110216005653im_/http://www.pjsymes.com.au/articles/hedjaz/hussein.jpg" alt="Hussein ibn Ali, King of the Hedjaz" title="Hussein ibn Ali, King of the Hedjaz">&lt;/p>
&lt;h2 id="king-hussein-and-the-hedjaz">King Hussein and the Hedjaz&lt;/h2>
&lt;p>The story of King Hussein is important to this story for a number of reasons. Firstly, his ideal of an Arab nation was shared by many people, including Habib Lotfallah. The divisions wrought on the Arab people by the colonial powers after the Great War were considered by many to have destroyed an opportunity to unite the Arabs under one nation or in a confederation. Secondly, it was under the administration of King Hussein’s son that the Arabian National Bank of the Hedjaz was formed. Thirdly, it is because of the actions of King Hussein that the notes of the Bank were never released into circulation. Finally, for a number of years Habib Lotfallah had linked his fortunes to the Hashimite dynasty and it is therefore worth noting a few details of the history of King Hussein and the Hedjaz.&lt;/p>
&lt;p>When the Ottoman Empire held the Hedjaz, they ruled it in a similar manner to their other vilayets (provinces). There was however a significant difference. Unlike other vilayets, the Hedjaz had a temporal leader in the form of the Ottoman Vali, who was usually stationed at Medina, and the spiritual leader of Mecca, who was the Sharif. However, the lines between the spiritual and temporal powers of the Sharif of Mecca were often blurred and the Sharif occasionally sought more temporal control than he was allowed.&lt;/p>
&lt;p>The Sharifs of Mecca were descendants of Hashim ibn ‘Abd Manaf, the grandfather of the Prophet Mohammed (peace be upon him), whose daughter Fatima had two sons, Hussein and Hasan. Descendants of the two clans competed for control of areas in the Hedjaz but, from 968 until 1925, Mecca was controlled by the Hasan clan, with competition within the clan for the positions of Amir and Sharif &lt;span class="marginnote">The word sharif (plural ashraf) is an honorific title given to descendants of Hashim ibn ‘Ali Manaf.&lt;/span> (or Grand Sharif) of Mecca. During the rule of the Ottomans, selection of the Sharif of Mecca was controlled through the central administration in Constantinople. Although his grandfather and uncle had been Sharifs of Mecca, there was no certainty that Hussein would attain the position. However, circumstances and successful intrigues at the court in Constantinople saw Hussein appointed as Sharif in November 1908. Hussein was an ambitious if ineffective ruler. From the time he became Sharif, he conspired to gain powers from the Ottoman Vali; he moved to wrest control of Asir (to the south of the Hedjaz) from the Idrisi; and he sought to expand his influence into the Nejd, which was controlled by ‘Abd al-Aziz ibn Sa’ud.&lt;/p>
&lt;p>The aspirations of Sharif Hussein were tempered by many factors until the outbreak of World War I. It was then that the British sought to encourage Hussein to raise the tribes under his control against the Ottomans. This resulted in the Arab Revolt which has been immortalized in the activities of Colonel T. E. Lawrence—Lawrence of Arabia. However, the Arab Revolt was a success because of Hussein’s sons, particularly Faisal, rather than any participation by Hussein. Indeed, Hussein’s ineptitude and narrow focus on his own ambitions often put the Revolt in jeopardy.&lt;/p>
&lt;p>The British were responsible for financing the Revolt and poured gold into Hussein’s coffers so that he could buy the allegiance of Arab tribesmen. This money replaced the subsidies that had previously been supplied by the Ottomans, who had supported the Sharif of Mecca because of the unique position Mecca held in the religion of Islam. In dealing with the British, Hussein sought to confirm his own ambitions, which were to unite the Arab world under his control, once the Ottomans had been defeated. To many Arabs, there was a nationalist ideal that all Arabs, from Aden to Gaza to northern Mesopotamia, should unite as a single nation—an Arab nation. Hussein nurtured an ambition that he should rule over such a nation or, as he perceived it, a kingdom. To this end he proclaimed himself King in 1917, but not just ‘King of the Hedjaz’ as most observers might have expected, rather he announced his grand intentions by adopting the title of ‘King of the Arab Countries’. He attempted to gain British support for his claim to this title but the British were extremely reluctant to support his ambitions because they were supporting many other Arab leaders and they did not wish to push the claims of one leader against another. Hussein’s claim necessarily caused concern amongst states in the Arabian Peninsula, such as the Nejd, Asir, Jebel Shammar, Kuwait, Oman, and Yemen, as they feared an expansionist policy of King Hussein. &lt;span class="marginnote">The Times 7 October 1924.&lt;/span> Hussein did harbour dreams of expanding his influence over Asir and into the Nejd and he probably dreamed of greater ambitions. Perhaps his ambition in 1917 had some substance, as his son Faisal, after an abortive attempt to make him the King of Syria, was appointed King of Iraq in 1921 under the British mandate and another son, Abdullah, was recognized as Amir of Transjordan by the British in 1923. Therefore, the possibility of uniting all Arab countries under one family was not altogether out of the question. However, in 1917 Hussein chose not to revoke his self-proclaimed title of ‘King of the Arab Countries’, which was ultimately ignored by friend and enemy alike, although it was given filial support by the future leaders of Transjordan and Iraq.&lt;/p>
&lt;p>There was yet another title that Hussein coveted, the title of Caliph. The Caliph was recognized by many Muslims as the temporal and spiritual leader of the Muslim community and for many years the title had been claimed by the Ottoman Sultans. Hussein believed that the title should belong to him, as the Sharif of Mecca, and as the Great War proceeded he eyed the prize with barely concealed ambition. However, although Hussein and his supporters intrigued for recognition of this ambition, the British only ever recognized him as King of the Hedjaz. Some years after the War, in 1924, Kemal Atatürk abolished the Ottoman Caliphate and, shortly after this announcement, Hussein declared himself the Caliph—although his claim was far from universally recognized.&lt;/p>
&lt;p>Habib Lotfallah’s representation of the King of the Hedjaz at the meeting of the League of Nations in Geneva in 1924 is another significant event in the ambitions of King Hussein. It was Hussein’s desire to be seen as the only real power in Arabia and, as the Hedjaz had been one of the twenty-seven ‘Allied and Associated Powers’ listed in the Treaty of Versailles as having concluded the war, &lt;span class="marginnote">Although the Hedjaz was represented at the Versailles peace conference by the King’s son Faisal, King Hussein refused to ratify the treaty in protest at the mandates being forced upon the Arab people.&lt;/span>, attendance at the conference in 1924 aided his bid for legitimacy. Such a move was contrary to the previous conferences of the League of Nations, which were boycotted by Hussein because the European powers had not given the Arabs the independence they craved. However, by 1924 the tide was turning against King Hussein and it was more important that he be represented amongst the European powers, than protest against their encroachment on Arab ambitions.&lt;/p>
&lt;p>In the years following the Great War, the British tired of King Hussein’s truculent ways and did not support him against his opponent ‘Abd al-Aziz ibn Sa’ud, who was becoming stronger as the months passed. Britain had been a strong supporter of ibn Sa’ud while he was in control of the Nejd and, now that ibn Sa’ud was pushing his way into the Hedjaz, they chose to withdraw support from King Hussein and let him fight his own battles. However, not only had Hussein alienated the British, he had also lost the confidence of the notables and merchants of Mecca. Under threat from an advancing ibn Sa’ud, Hussein first withdrew to Jeddah and then, on 6 October 1924, under pressure from ibn Sa’ud and demands from his own people, Hussein was forced to abdicate in favour of his son ‘Ali. Mecca fell to ibn Sa’ud on 18 October and ‘Ali became isolated in Jeddah. In as much a move of diplomacy as of strategy, ibn Sa’ud did not press his advantage over ‘Ali and he remained distant from Jeddah.&lt;/p>
&lt;p>In October 1924 Habib Lotfallah was in Moscow as a guest of the government of the Soviet Union. His mission to Moscow was to establish regular economic and political relations between the Hedjaz and the Soviet Union. While he was in Moscow news of King Hussein’s abdication became known. For several days Habib Lotfallah refused to admit that the event had occurred, but ultimately he substantiated the facts and was able to confirm that his credentials as Minister Plenipotentiary were valid under King ‘Ali.&lt;/p>
&lt;p>The numerous positions held by Habib Lotfallah from 1920 to 1924 and the missions he accomplished in serving his King in Europe appear to have left little time for him to attend the Hedjaz or to appreciate fully the circumstances as they were developing in the Arabian Peninsula. Whether, following the abdication of King Hussein, Habib Lotfallah fully understood the critical position in which King ‘Ali found himself, it is difficult to say. With three Hashimite kings in Arabia—‘Ali in the Hedjaz, Abdullah in Transjordan, and Faisal in Iraq—it may have seemed strange to Habib Lotfallah that any one of the Kingdoms was under threat. However, having fixed his allegiances and fortunes to the Kings of the Hedjaz, he stuck by their resolve to survive.&lt;/p>
&lt;h2 id="the-banknotes">The Banknotes&lt;/h2>
&lt;p>Returning to the Hedjaz in 1925, Habib Lotfallah decided to pursue his Arab nationalist ambition of establishing a bank that would issue money throughout the Arab countries and his first target was the Hedjaz. There was no uniform currency in the Hedjaz and inept attempts at introducing a national coinage by King Hussein had not improved the situation. As one who had spent much of his adult life in Europe, Habib Lotfallah had come into daily contact with paper money and he would have understood the utility of such instruments. He should also have recognized that the lack of a modern currency in the Hedjaz was detrimental to the development of the economy, although he might also have realized that the introduction paper money was no panacea for the economic ills of the Hedjaz. However, before addressing the banknotes prepared by Habib Lotfallah, it is worth considering the currency circulating in the Hedjaz prior to his initiative.&lt;/p>
&lt;p>Under the Ottomans, currency of the Empire circulated in the Hedjaz but, while coins are known to have circulated widely, it is not known to what extent the banknotes issued in Constantinople circulated in Arabia. Certainly the notes circulated, but the Arabs believed in currency that had intrinsic value and not paper that was backed by reserves and promises. For this reason, the Arabs preferred full-bodied coins of gold and silver; although Ottoman notes probably found favour amongst the merchants, traders and government officials. In coastal ports merchants and traders had come into contact with foreign currency, as had the many residents involved in supporting pilgrims with food, accommodation and guides during the annual Hajj to Mecca. This exposure to foreign currency included banknotes and, by the reign of King Hussein, Indian rupees and Egyptian pounds were in common use by merchants, traders and pilgrims.&lt;/p>
&lt;p>However, the subsidy that Hussein had received from the Ottomans, as the Sharif of Mecca, was in gold and he needed this gold to dispense to tribal chieftains, as was his responsibility. When the British proposed that he forgo the Ottomans and rise against them in revolt, Hussein demanded that he be paid in gold by the British so that he could pay the tribes, just as he had done under the Ottomans. The British, locked in a war against the Ottoman Empire, agreed.&lt;/p>
&lt;p>Although the British had secured the interests of King Hussein, they faced competition from their allies the French. The French were seeking to stake claims in the Arab world and they lost no opportunity to promote their own interests in the Hedjaz. In February 1917 the head of the French mission to the Hedjaz, Colonel Brémond, proposed to King Hussein that the French might mint coins for the Hedjaz, with the coins to be in a metric system, rather than based on the English pound. This proposal was rejected by Hussein, who preferred to follow the traditional use of full-bodied coins.&lt;/p>
&lt;p>However, by June 1917 the British had paid out so much gold to Hussein from the Egyptian treasury, that they asked Hussein if he might take payment in silver and paper money in the form of Egyptian pounds and Indian rupees. In reply to the suggestion, an official in King Hussein’s government wrote: ‘Paper money will assuredly cause bad effect, make people attribute to us worse things than they attribute to Turks and our enemies will thus find a way of saying all sorts of thing against us.’ &lt;span class="marginnote">The Hashimite Kingdom of Arabia page 158.&lt;/span> The tribesmen wanted only gold and their preference was for British sovereigns. In October 1917 the British pursued the issue of paper money, due to the dwindling reserves of available gold, and insisted that Hussein take part payment of his subsidy in Indian rupee notes. They argued that he could sell the rupees to the merchants for gold, as they needed rupees with which to trade. The British even offered to provide the rupees at a rate advantageous to Hussein so that he might make a profit in selling the notes to the merchants.&lt;/p>
&lt;p>By September 1919 the availability of gold and silver had deteriorated to such an extent that the British were forced to provide the complete subsidy in Indian rupees. Although Hussein initially balked at this proposal, he turned the problem around so that, in January 1920, Hussein imposed the Indian rupee as the only legal tender in the Hedjaz. The merchants in Jeddah were not pleased with the rate of exchange that Hussein set between the rupee to the pound but, after some negotiation, an agreement was made and a rate set. Hussein then demanded that the merchants write to the British, stating that they agree to trade only in rupees—both in notes and silver. Although the Indian rupee had been declared the official currency, gold remained the measure of all currencies and pilgrims coming to Mecca were instructed to bring gold and silver as the medium of payment.&lt;/p>
&lt;p>As time passed Hussein was convinced of the need to introduce his own currency. He began by overstriking Maria Theresa thalers with &lt;em>al-Hedjaz&lt;/em> but in September 1923 he introduced his own coins. These coins ranged in value from one-eighth to one piastre, minted in bronze, 5-, 10- and 20-piastre coins, minted in silver, and a one-dinar coin minted in gold. These coins were intended to replace the Turkish coins, which were still the dominant coins in circulation. (Many of the Turkish coins had been counter-stamped with ‘Hedjaz’.) However, the gold and silver content of Hussein’s high value coins was questionable and insufficient coins had been minted. Therefore, after a short period most of the coins disappeared from circulation.&lt;/p>
&lt;p>By the time Hussein abdicated in favour of ‘Ali, in October 1924, the situation had not improved and the Hedjaz remained burdened with multiple currencies in circulation. It was into this confusion of currencies that Habib Lotfallah arrived in 1925 with his proposal to establish a bank of issue. By the time he submitted his proposal to ‘Ali there was sufficient expectation that paper money could be used with some success in the Hedjaz, due to the earlier circulation of Ottoman paper money and the later use of Egyptian and Indian banknotes. Lotfallah convinced King ‘Ali and his advisers that he could establish a bank that would operate from Jeddah and benefit the kingdom. On 22 Shawwal 1343 (6 May 1925) ‘Ali and his advisors considered Lotfallah’s proposal and on the following day signed the decree that gave Lotfallah his right to operate a bank in the Hedjaz. The decree is as follows:&lt;/p>
&lt;blockquote>
&lt;h3 id="royal-edict">Royal Edict&lt;/h3>
&lt;p>We, Ali-ibn Hussein, King of Hedjaz, having studied the report of Prince Habib Lotfallah, submitted to us on 22 Shawwal 1343, with a view to the constitution of the National Bank of Hedjaz and Arabia and on the proposal of Our Prime Minister and the Minister of Finance.&lt;/p>
&lt;h3 id="decree">Decree&lt;/h3>
&lt;h4 id="first-article">First Article&lt;/h4>
&lt;p>Prince Habib Lotfallah has the right of constituting a National Bank of Hedjaz without any responsibility falling to the Arabian Government, and of constituting an Arabian company under the name: The National Bank of Hedjaz and Arabia.&lt;/p>
&lt;h4 id="article-2">Article 2&lt;/h4>
&lt;p>The National Bank of Hedjaz and Arabia will have the privilege of issuing notes to the bearer or on sight; the said privilege will not be granted to any other establishment during the existence of the Company.&lt;/p>
&lt;h4 id="article-3">Article 3&lt;/h4>
&lt;p>Our Prime Minister and the Minister of Finance are charged with the implementation of this Decree:&lt;br>
Made the 23 Shawwal 1343&lt;br>
Ali-ibn-Hussein&lt;/p>&lt;/blockquote>
&lt;p>The Royal Edict was followed by this Ministerial Order:&lt;/p>
&lt;blockquote>
&lt;h3 id="ministerial-order">Ministerial Order&lt;/h3>
&lt;p>The Council of the Ministers assembled at the Royal Palace on Saturday 23 Shawwal 1343 at 9 a.m. and discussed the report submitted to His Majesty the King by Prince Habib Lotfallah, soliciting the right of constituting a company, which will take the form of a National Bank of Hedjaz and Arabia, subject to the law of the Arabian Government, with headquarters in Jeddah.&lt;/p>
&lt;p>Having viewed the laws of the aforementioned Company, the Council grants to Prince Habib Lotfallah the privilege of constituting the aforesaid Bank for a period of one hundred and one years from the date of the Royal Edict.&lt;/p>
&lt;p>If the constitution of the aforesaid Company does not take place within six months of the date of the Royal Edict, this privilege will be regarded as null and void.&lt;/p>
&lt;p>Submitted to His Majesty the King for approval.&lt;/p>
&lt;p>The Ministerial Order was signed by seven of the King’s Ministers.&lt;/p>&lt;/blockquote>
&lt;p>A subsequent Hedjazi decree of 3 Dhu’l Qa’dah (26 May 1925) confirmed the articles of the Bank and the directors of the bank. One of the conditions of the ratifying decree was that Habib Lotfallah was to be the Managing Director for the first ten years of the Bank’s life and that one of his brothers, Michel or George, was similarly to be the Assistant Director for the first ten years. Printed in French, the statutes of the Bank were published in Cairo and entitled: &lt;em>Statuts de la Banque Nationale du Hedjaz et Arabie (Société Anonyme)&lt;/em>&lt;/p>
&lt;p>It is obvious from the concession sought by Habib Lotfallah, and granted by ‘Ali, that he intended the issuance of currency to be one of the principal activities of his Bank. So, it is no surprise to learn that during 1925 he approached a printing company in France with a request to print notes for his bank. The notes were printed, but presumably not made available for delivery until very late that year, or possibly not until 1926. The reason for supposing this is that King ‘Ali had finally been overthrown by ibn Sa’ud and had fled Jeddah on 19 December 1925—ending the Hashimite rule of the Hedjaz. Ibn Sa’ud then became King of the Hedjaz and Sultan of the Nejd. By the time the banknotes were ready for delivery, there was no Hashimite government in the Hedjaz under which they could be authorized to circulate. Consequently, the banknotes were packed into cash boxes owned by Habib Lotfallah and placed in storage (believed to be in France).&lt;/p>
&lt;p>The banknotes prepared for Habib Lotfallah are an interesting set of notes, all the more for not usually being seen in colour. The first thing that strikes the observer is the coloured patterns of rich and subdued hues, with the back of each note being particularly colourful. One intriguing aspect to these notes is the use of the title ‘The Arabian National Bank of Hedjaz’ to designate the issuing authority. The statutes of Habib Lotfallah’s bank had declared his bank to be the ‘National Bank of the Hedjaz and of Arabia’ (i.e. &lt;em>Banque Nationale du Hedjaz et d’Arabie&lt;/em>) and it is not known whether the form of the title adopted for the banknotes was due to a misunderstanding, an error in translation, or whether Habib Lotfallah made a deliberate change to the name of the issuing authority on the banknotes.&lt;/p>
&lt;p>There were five denominations prepared for issue, in the values of: 1, 5, 10, 50 and 100 Arabian pounds &lt;span class="marginnote">The Standard Catalog of World Paper Money also lists a half-pound note as part of the issue. However, no image of this note has been seen and it is believed that the report of this note’s existence is an error. The description in the Standard Catalog of World Paper Money states that the half-pound note is red with an illustration of the Ka’aba (in the courtyard of the Holy Mosque in Mecca) on the front and an Indian coin depicted on the back. As all other notes prepared for the Arabian National Bank of Hedjaz have a common back, it is unlikely that a half-pound note, should it exist, would have a different design on its back. Similarly, as all notes have a different illustration on their front, it is unlikely that the Ka’aba and the Holy Mosque, which appear on the 1-pound note, would be illustrated on two notes. In addition, La Patrie (a French-language newspaper published in Egypt) reported in their edition for 25 November 1929 the seizure of banknotes prepared for the Arabian National Bank of Hedjaz by Egyptian Customs, stating that notes in the denominations of 1, 5, 10, 50 and 100 pounds were seized. If the half-pound note had been prepared, it is probable that notes of this denomination would have been amongst the seized notes.&lt;/span>, which, incidentally, were intended to be equivalent in value to Egyptian pounds. There is much common text on each denomination, which is written in both Arabic and English. The choice of these languages is obvious, as Arabic was the first language of the inhabitants of the Hedjaz and English was the language of the empire that protected the kingdom.&lt;/p>
&lt;p>The English text at the top of each note reads:&lt;/p>
&lt;blockquote>
&lt;p>The Arabian National Bank of Hedjaz&lt;br>
Issued under decree dated 23 Shawal 1343&lt;br>
Immediately below is Arabic text which states&lt;br>
The Arabian National Bank of Hedjaz&lt;br>
I promise to pay on demand a sum of Five Hedjazi Pounds to the bearer&lt;br>
This note issued under decree dated 23 Shawal 1343&lt;/p>&lt;/blockquote>
&lt;p>(The use of the phrase ‘Hedjazi Pounds’ in this text, as opposed to ‘Arabian Pounds’ is discussed below.) To the lower left on each note is written the denomination in English, for example ‘One Arabian Pound’, while the following are written in English and Arabic:&lt;/p>
&lt;ul>
&lt;li>the place of issue, which is ‘Djeddah’&lt;/li>
&lt;li>the date of the decree, which is ‘23 Shawal 1343’&lt;/li>
&lt;/ul>
&lt;p>To the right-hand side of each note is the following text, once again in English and Arabic:&lt;/p>
&lt;ul>
&lt;li>‘For the Arabian National Bank of the Hedjaz’&lt;/li>
&lt;li>the signature of H. Habib Lotfallah (signed in Latin and Arabic scripts)&lt;/li>
&lt;li>the word ‘Governor’&lt;/li>
&lt;/ul>
&lt;p>On each note the denomination is written in western and Arabic numerals. Above or beside the western numerals are the letters ‘L.A.’, which represent ‘Arabian Pounds’ &lt;span class="marginnote">The ‘L’ in ‘L.A.’ represents ‘Libra’, which is the Latin word for ‘Pound’.&lt;/span>. Over the Arabic numerals is written the value of the note in Arabic text, with the Arabic word ‘Junaih’ being used for ‘Pound’. The serial numbers appear on the notes in the top right and bottom left, except for the 100-pound note, where they appear in the top left and bottom right. Interestingly, on the unissued and specimen notes observed for this study, there is a prefix of the Latin letter ‘A’ for the serial numbers on the 1- and 10-pound notes, but not for the other denominations.&lt;/p>
&lt;p>Several of the illustrations on the banknotes at first appear incongruous, as why would illustrations of places outside the Hedjaz be illustrated on banknotes intended to circulate in the Hedjaz? The illustrations used on each note are:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://web.archive.org/web/20110216005653/http://www.pjsymes.com.au/articles/hedjaz/1-pound.htm">1 pound&lt;/a> &amp;ndash; The Ka’aba and the courtyard of the Holy Mosque in Mecca&lt;/li>
&lt;li>&lt;a href="https://web.archive.org/web/20110216005653/http://www.pjsymes.com.au/articles/hedjaz/5-pounds.htm">5 pounds&lt;/a> &amp;ndash; The fountain and the treasury (at the left) within the courtyard of the Great Mosque in Damascus.&lt;/li>
&lt;li>&lt;a href="https://web.archive.org/web/20110216005653/http://www.pjsymes.com.au/articles/hedjaz/10-pounds.htm">10 pounds&lt;/a> &amp;ndash; An artist’s depiction of King Solomon’s Temple in Jerusalem, with the pillars of ‘Jachin’ and ‘Boaz’ depicted to either side of the illustration.&lt;/li>
&lt;li>&lt;a href="https://web.archive.org/web/20110216005653/http://www.pjsymes.com.au/articles/hedjaz/50-pounds.htm">50 pounds&lt;/a> &amp;ndash; The Roman ruins at Baalbek in modern-day Lebanon, with a cedar of Lebanon in the left foreground.&lt;/li>
&lt;li>&lt;a href="https://web.archive.org/web/20110216005653/http://www.pjsymes.com.au/articles/hedjaz/100-pounds.htm">100 pounds&lt;/a> &amp;ndash; Two winged bulls with human heads frame a scene of a river, which is probably the Tigris. The winged bulls are copied from decorations found at Sargon’s Palace at Khorsabad. (The carvings of the winged bulls, on which the drawings are based, are now in the Louvre, in Paris.) In the top corners of the note are depictions of winged suns. During the Assyrian reign of Mesopotamia these devices symbolized the god Ashur.&lt;/li>
&lt;/ul>
&lt;p>The simple reason for the use of these illustrations, that included buildings and scenes outside the Hedjaz, is that Habib Lotfallah was an Arab nationalist and he anticipated that, one day, his notes would circulate not just in the Hedjaz but in all Arab countries. This is why the title of his bank, no matter in which form, always used the words ‘National’ and ‘Arabia’ (or ‘Arabian’) and why illustrations from Lebanon, Syria and Iraq are used on the notes.&lt;/p>
&lt;p>The use of King Solomon’s Temple on the 10-pound note may at first appear incongruous &lt;span class="marginnote">It is not certain that the building depicted is King Solomon’s temple. There have been many depictions of the temple over the years and this illustration matches one artists impression of the temple. In support of the claim that this is the temple of King Solomon, are the two pillars of Jachin and Boaz which are described in 1 Kings 15:20.&lt;/span>, however it matches the ambitions of Habib Lotfallah. Firstly, Lotfallah was a Christian and he shared the beliefs of the Old Testament. Secondly, in his Arab nationalist beliefs, he expected Christian, Jew and Muslim to live in harmony in Arabia as, at this time, there was so little of the tension that has disturbed the region in recent years.&lt;/p>
&lt;p>To the left, on the front of each note, is a circle that holds a watermark in a white area. The watermark is the head of a bearded man wearing a headdress. While it is difficult to be certain, it is probable that the watermark is a depiction of King Hussein, the former ruler of the Hedjaz.&lt;/p>
&lt;p>The back of each note has the name of the issuing authority in Arabic and the numerals for the denominations in western and Arabic numerals. In the same manner as on the front of the notes, the letters ‘L.A.’ appear above the western numerals at the centre left and the Arabic text stating the value of the note appears above the Arabic numerals at the centre right. The Arabic text for the 1-pound note reads simply as ‘Arabic Pound’, while the text on the 5-pound note states ‘Five Arabic Pounds’ and the 10-pound note states ‘Ten Arabic Pounds’. Significantly, on the 50- and 100-pound notes, instead of having ‘L.A’ above the western numerals, these notes have the letters ‘L.H.A.’. This presumably represents ‘Hedjazi Arabian Pounds’, as the Arabic text above the denominations on the back of the notes states ‘Fifty Hedjazi Pounds’ and ‘One Hundred Hedjazi Pounds’ respectively. That this alternative text appears on the back of these two denominations and not on the front, where the text denominates the notes as ‘Fifty Arabian Pounds’ and ‘One Hundred Arabian Pounds’, suggests that Habib Lotfallah made a late change to the notes and that these changes were not incorporated on the back of these two notes. That a change was made during the preparation of the banknotes is supported by the fact that the promissory clause in Arabic text on front of the notes refers to ‘Hedjazi Pounds’ and not ‘Arabian Pounds’. The error suggests Lotfallah originally intended the notes to circulate only in the Hedjaz, by denominating his notes as ‘Hedjazi Pounds’, but then decided that this denomination of currency may limit the wider use of the currency at a later date. Therefore he changed the name of the currency to ‘Arabian Pounds’, but not all references to ‘Hedjazi Pounds’ were altered on the banknotes. The change in the name of the currency unit may have been made at the same time that the title of the issuing authority was reconsidered, if indeed it was altered to ‘Arabian National Bank of Hedjaz’ from ‘National Bank of the Hedjaz and of Arabia’. Ultimately, it is not know whether the tardy retention of the old values on the back of the two high denomination notes was due to an oversight by Habib Lotfallah or due to an error by the printer. In either case, the errors suggest a rather amateurish endeavour in producing the banknotes.&lt;/p>
&lt;p>In the centre, on the back of each note, is a coat of arms in a circle, while the rest of the note is filled with coloured arabesques, except for a white area reserved for viewing the watermark. The name of the issuing authority is written in Arabic in a panel at the top of the note, held within a border that encompasses the entire design on the back.&lt;/p>
&lt;p>The coat of arms on the back of each note is distinctly European, but elements are pertinent to the Hedjaz. In the centre of the arms is a shield that appears to hold a sabre standing on its end, over which are crossed two lances and to either side are Arab swords. The shield is surmounted by two daggers, above which is a type of hat or crown, all of which are covered by a cape that has ermine on the inside and red on the outside. Above the cape at the top of the arms is a building of a palace or a castle. To either side of the shield, but outside the red cape, are two palm trees and above each palm tree is the flag the Hedjaz. The flag is three horizontal stripes, of black, white and green, with a red chevron on the hoist. (This flag was later used by the &lt;em>Ba’ath&lt;/em> Party in Syria and is currently used as the Palestinian flag.)&lt;/p>
&lt;p>On the back of each note, printed in very small letters, just within the lower border of the notes, is the printer’s imprint, which reads: GRAVÉ ET IMPRIMÉ PAR DRAEGER, PARIS. This phrase translates as ‘Engraved and printed by Draeger, Paris’. The Draeger family were master printers and publishers with a long tradition. Nicolas Draeger (born 1813) began the family tradition by learning the printer’s trade and settling in Paris. His son Charles (1844–1899) established a typographic shop at 118 rue de Vaugirard in Paris. He became renowned for his quality printing using typography, wood engraving, and chromotypography, and for adopting the modern printing processes of the era, such as half-tone and three-colour process engraving. His three sons, Georges (1869–1945), Maurice (1872–1942) and Robert (1876–1947) continued the family business, ultimately shifting their printing works to Montrouge. Here they incorporated new printing techniques, such as photo-engraving, stereo-typing, electrotyping, and using photogravure for colour printing, as well as establishing a type foundry.&lt;/p>
&lt;p>By the 1920s, the Draeger Brothers (&lt;em>Draeger Freres&lt;/em>) were printing fine artwork, photographs and quality books. Well known in France for their first-class work, they also became celebrated for preparing high quality advertising posters, often prepared by leading artists. When Habib Lotfallah approached the Draeger Brothers to print his notes, he would have been aware that he was acquiring the services of one of Paris’s premier printers. However, the Draeger Brothers are not known to have printed any other banknotes and this was probably their only commission in this line of work.&lt;/p>
&lt;h2 id="the-pursuit-of-further-ambitions">The Pursuit of Further Ambitions&lt;/h2>
&lt;p>Having had his notes printed, Habib Lotfallah saw that there was no possibility of the Hashimite kings being restored to the throne of the Hedjaz and his notes remained in storage. In 1926 he approached ‘Abd al-Aziz ibn Sa’ud and sought permission to operate the Arabian National Bank of Hedjaz in the territories now under his control. A reply from Sheikh Hafez Wahba, Counsellor to ibn Sa’ud, stated that the Bank could operate as a commercial entity until the new government had consolidated its control in the Hedjaz. Ibn Sa’ud also agreed that the Arabian National Bank of Hedjaz could operate as a state bank, on condition that the Bank loan ibn Sa’ud 100,000 pounds, repayable over ten years with interest. Habib Lotfallah and his directors considered ibn Sa’ud’s proposal in 1927 and deliberated whether they should realize part of the Bank’s capital, to satisfy the demand. Agreement was made to follow this policy and by 1928 a portion of the bank’s capital had been liquidated to meet ibn Sa’ud’s demand. However, it was then recognized that it was not possible to realize sufficient capital and the project to raise 100,000 pounds foundered. (Many years later Habib Lotfallah stated that he was unwilling to give the loan to ibn Sa’ud ‘on principle’.)&lt;/p>
&lt;p>Although his banknotes had not been released into circulation, Habib Lotfallah claimed that his bank did commence operations. According to correspondence sent to the British Colonial Office by Habib Lotfallah, the Arabian National Bank of Hedjaz operated from Djeddah, Suez, Cairo and Port Said, although he does note in one letter that the transactions were very limited. Evidence that his bank actually operated from any location is absent, apart from the claims by the Prince. If the bank did operate in any form from any one of the four nominated locations, then it is not known when the bank began operations and when it ceased. However, there is evidence that steps were taken to open a branch of the bank in Aden.&lt;/p>
&lt;p>In 1928 Hassan Anis Pasha sought, through the British Colonial Office, to open a branch of the Arabian National Bank in Aden. He was advised that no special authorization was required to open a bank in Aden and that he should approach the local authorities with his request. However, he was also informed that the local authorities felt there was insufficient business for another bank in Aden. It is probable that Habib Lotfallah had negotiated with Hassan Anis Pasha to open a branch of the Bank in Aden but, as the activities of the Bank were curtailed in the Hedjaz, Hassan Anis Pasha did not pursue the matter and nothing further came of the request.&lt;/p>
&lt;p>The notes of the Arabian National Bank of Hedjaz languished in storage for some years. However, in 1929 Habib Lotfallah was stirred into action due to activities in Transjordan and Iraq. In August 1921 King Faisal, the son of King Hussein of the Hedjaz, was placed on the throne of Iraq by the British, who were administering the territory under a mandate of the League of Nations. Indian rupees were circulating in Iraq but there arose a strong nationalist movement seeking to implement a national currency for Iraq. The British sent Sir E. Hilton-Young to Baghdad in 1925 to study the situation and he recommended the introduction of a currency board, with the board based in London but which would issue banknotes on behalf of the Government of Iraq. When presented with this proposal in 1926 the Iraqis objected strongly, as the currency was to be under the control of the British, and the matter was not resolved. At the same time, similar issues arose in Transjordan where the British had installed Abdullah, another son of King Hussein, as the Amir. In Transjordan, the notes of the Palestine Currency Board were circulating and there were similar nationalist sentiments that sought Transjordan’s own currency.&lt;/p>
&lt;p>It was into this turmoil that Prince Habib Lotfallah stepped in 1929, with a vision of establishing his bank in Transjordan and Iraq. Lotfallah initially discussed his proposal with Faisal and Abdullah and even submitted a plan of his proposal to Abdullah. Lotfallah’s proposal for establishing his ‘National Arabic Bank’ in Amman was conditional on the government of Transjordan making Lotfallah’s bank the government’s official bank. Lotfallah’s proposal also referred to the issuance of banknotes, backed by English sovereigns, to replace the notes of the Palestine Currency Board; as well as indicating that loans could be made to the Agricultural Bank (which was in financial difficulties).&lt;/p>
&lt;p>Apparently unsuccessful in his direct approach to Amir Abdullah and his government, Habib Lotfallah determined that he should seek British approval for his scheme. To this end he enlisted the assistance of Cecil L’Estrange Malone, a member of the British Parliament and a friend of the Prince. Habib Lotfallah was not adept at writing English and his spoken English was imperfect. Therefore he enlisted Malone M.P. to translate and submit his proposal to the appropriate government authorities. Approaches were made to the Colonial Office and the Foreign Office, with the object of gaining official British sanction for opening his bank in Iraq and Transjordan and be given the right to issue banknotes in both territories.&lt;/p>
&lt;p>Following the receipt of their correspondence, Prince Lotfallah and Cecil Malone were given the courtesy of an interview and met with William Lunn Esquire M.P. an Under-Secretary of State in the Colonial Office. Although he was given the interview, Prince Lotfallah failed to impress anyone in the Colonial Office. His dubious title of ‘Prince’ made some people wary of him and his scheme and his objectives were not always lucid. He wanted British support, but he was unable to be specific in the support he was seeking. He apparently didn’t understand that licences for opening banks in both territories, i.e. Iraq and Transjordan, were the responsibility of local authorities and not the authorities based in London. His desire to obtain the British Government’s sanction for issuing his notes seems to have been a major objective, in which he failed. He also wished to receive introductions to the leading bankers in England, in the hope that they would finance his project. Lotfallah claimed to have been in discussion with Barclays Bank, but it is doubtful they intended to support his project. Claims by Lotfallah that his bank had its head office at Jeddah and branches at Cairo, Suez and Port Said, which had ‘been working quietly for four years’, appeared to the Colonial Office to be lies, as they found no evidence of any activity of his bank; and unsupported claims such as this could not have helped his cause. (Later evidence would show that the bank had been operating as a private concern in a very narrow manner.)&lt;/p>
&lt;p>Shortly after Lotfallah and Malone opened their discussions with Mr. Lunn, the Under-Secretary was replaced by Dr. Drummond Shiels, who began to deflect further correspondence from the co-conspirators. Whether or not it became obvious to Lotfallah and Malone that the British Government was not going to support their proposal, it is not known. However, support was not forthcoming and it was never going to be forthcoming. The official British position remained that Habib Lotfallah should seek a banking licence in each territory in the usual manner and that currency arrangements in Iraq and Transjordan were satisfactory.&lt;/p>
&lt;p>In early 1930 Lotfallah returned to Egypt en route to Iraq, having received communication from one of his brothers that he should come to the Kingdom. While in Egypt on his way to Baghdad he paid a call on the British High Commissioner, Percy Loraine. While extolling the plans he had already placed before Mr. Lunn and Dr. Shiels, he also addressed his plans for the Arabian Peninsula. Lotfallah now proposed to issue his banknotes in a manner similar to traveller’s cheques issued by Thomas Cook, in anticipation that the Hedjazi government of ibn Sa’ud might be convinced of the importance of his bank. This might then lead to the bank being established in the Hedjaz and the banknotes being recognized as legal tender. Lotfallah also expressed an ambition that ultimately there would be three currencies in the Near and Middle East—the Egyptian pound, the Indian rupee, and his Arabian pound, which would be the currency of all Arab-speaking countries in Asia.&lt;/p>
&lt;p>However, Lotfallah’s immediate ambitions had been thwarted in November 1929 by Egyptian customs authorities, who impounded a consignment of £200,000 of his banknotes. Evidently, in anticipation that his plans for establishing his Arabian National Bank in Iraq and Transjordan were nearing fruition, he had arranged for the banknotes stored in France to be sent to Egypt. Unexpectedly, the banknotes were seized and held by Egyptian authorities who stated that the notes would be released if the Arabian National Bank of Hedjaz commenced business, otherwise they would be destroyed. It is likely that Habib Lotfallah’s visit to the British Resident on his return to Egypt was in part to seek intercession for the release of his banknotes, although this request is not recorded in any correspondence.&lt;/p>
&lt;p>Habib Lotfallah continued to Iraq and joined his brother. After making himself familiar with the ambition of the Iraqis to form a National Bank and to issue their own currency, he dropped the idea of opening a branch of the National Bank of Arabia and set his mind on establishing the National Bank that Iraq was seeking to establish. To this end he submitted a proposal to the Minister of Finance in the Iraqi government, outlining his intentions. The proposal indicated that he and his brothers, as well as a group of English financiers, intend to establish a company with the name of the ‘National Bank of Iraq’ with the capital of one million pounds sterling. Lotfallah was presumptuous enough to state that, of this sum, £500,000 had already been subscribed. Unless he and his brothers were the subscribers of the half-million pounds, it is difficult to know how the amount could have been subscribed so soon and it is probable that the statement was a lie, made in an effort to sway the Iraqi government into accepting the proposal.&lt;/p>
&lt;p>While promising that his bank would provide facilities for the economic and financial development of Iraq, Lotfallah did seek some concessions. He wanted exclusive rights to the government’s business and he wanted the bank to have the sole right to issue banknotes in Iraq for a period of one hundred and one years. He promised to back the banknotes issued by his bank with gold bullion, gold coins, English Treasury Bonds, War Loans and any other securities (preferably English). As to the profits of the Bank and the participation of the government in these profits, Habib Lotfallah asked that this matter might be discussed at a later date.&lt;/p>
&lt;p>Returning to Paris, Habib Lotfallah enlisted Cecil Malone’s assistance in approaching the Colonial Office with the aim of gaining approval for his new venture in Iraq. The reply from the Colonial Office to Cecil Malone was succinct but comprehensive. The British Government felt that there were adequate banking facilities in Iraq and Transjordan and did not feel that there was room for another bank. Additionally they felt that the currency requirements of Transjordan and Iraq were being adequately met. However, they encouraged Habib Lotfallah to make formal applications to gain banking licences in both countries. In making this suggestion, they pointed out that Habib Lotfallah would need to provide documentation that would satisfy the authorities of his Bank’s financial standing before approving any application. The Colonial Office believed that the Arabian National Bank of Hedjaz was nothing but a façade and by noting this prerequisite they would likely deter any application. Their estimation of the situation proved correct, as Habib Lotfallah’s proposal progressed no further.&lt;/p>
&lt;p>Lotfallah’s initial proposal to open a branch of the Arabian National Bank in Iraq and Transjordan, and subsequent proposal to open the National Bank of Iraq under his control, appear to have suffered from several problems. Firstly, his proposals were not being seriously considered by the British, who were not actively discouraging Lotfallah, but who were determined to frustrate his ambitions should it look as if his projects were nearing fruition. Habib Lotfallah was considered by several government officials to be completely untrustworthy and his schemes a sham. Secondly, in the matter of the National Bank of Iraq, Lotfallah was just a little too late on the scene. His proposal to the Iraqi Minister of Finance was dated 19 March 1930, but on 17 March 1930 a proposal to create the Iraq Currency Board was approved by the Iraqi Cabinet following a recommendation by the Minister of Finance to implement Britain’s proposal of 1926. Although the Currency Board was in no way a National Bank, it was established to issue currency in Iraq. Thus, by the Iraqi government accepting the introduction of a Currency Board, they had no need of Habib Lotfallah’s bank of issue.&lt;/p>
&lt;h2 id="in-search-of-ambitions-unfulfilled">In Search of Ambitions Unfulfilled&lt;/h2>
&lt;p>Habib Lotfallah’s efforts to gain support from ibn Sa’ud in 1926 and 1927 had faltered in 1928, after a failed attempt to raise the required £100,000 by realizing part of the capital of the Arabian National Bank of Hedjaz. Why the decision to raise the cash and supply it to ibn Sa’ud was not carried through is not clear. However, in 1932 Prince Lotfallah again sought to establish his bank in Arabia. Evidently, at the same time a gentleman by the name of Abdul Hamid Shedid was negotiating with ibn Sa’ud with the same objective of establishing a national bank in Arabia. Abdul Hamid Shedid was representing the former Khedive of Egypt and his scheme, although ultimately unsuccessful, seems to have been preferred to that proposed by Lotfallah. Nevertheless, in 1934 Habib Lotfallah was invited by ibn Sa’ud to meet him in Taif near Mecca in order to investigate the possibility of establishing his bank in the Arabian Peninsula.&lt;/p>
&lt;p>Ibn Sa’ud had been concerned for a number of years at the problem of money supply and exchange rates during the annual pilgrimage to Mecca and he sought solutions to alleviate the problem. It is probable that he entertained the proposals by Habib Lotfallah and Abdul Hamid Shedid as possible solutions to the problem. Evidently Prince Lotfallah’s proposal was unsuccessful, although correspondence by Lotfallah from a later period indicates that ibn Sa’ud agreed to let the Arabian National Bank of Hedjaz operate on the condition that the Bank could show strong financial backing. It is possible that the Prince sought support from British financial institutions at this time, which was not forthcoming, and that this was a contributing factor to the failure of the bid.&lt;/p>
&lt;p>Around this time the Arabian National Bank of Hedjaz was all but wound up, probably due to the failure of the bid to win ibn Sa’ud’s approval. Whether Lotfallah and his brothers simply wished to wind up affairs or whether they wished to realize the remaining assets of the bank is unclear, but it seems that there was an intent to cease what little activity the bank was undertaking. It might also be assumed that, at this stage, Habib Lotfallah felt his ambitions for his bank would never be realized.&lt;/p>
&lt;p>However, as the world drifted toward war in 1939, Habib Lotfallah re-opened his correspondence with the British Colonial Office. Once again enlisting the services of Cecil L’Estrange Malone as an intermediary, Lotfallah contacted the Secretary of State for the Colonies, Malcolm MacDonald, who replied to Malone offering the Prince an interview. Malone made known MacDonald’s response to Habib Lotfallah and in a reply to his confidant, Lotfallah shed some illumination on the activities of his bank.&lt;/p>
&lt;p>Lotfallah claimed that he had in the past used the services of a Mr. Foa, a director of the former Anglo-Egyptian Bank, to make representations on his behalf to financial institutions such as Lloyd’s Bank, Barclay’s Bank and the Imperial Indian Bank. He indicated that communication with these institutions invariably stalled when it became known that support from the British government was not forthcoming. Exactly what was raised with the financial institutions is not known, but with the knowledge of Lotfallah’s correspondence with the Colonial Office, it is probable that the tenor of any discussion centred around the Arabian National Bank of Hedjaz operating as a bank of issue, rather than a commercial banking venture. As such, it is not surprising that the commercial banks failed to acquiesce to any plans if support from the British government was not forthcoming.&lt;/p>
&lt;p>Lotfallah also claims at this point that 500,000 pounds of his banknotes were printed and that the plates for printing the notes were still in tact and could be used to produce further banknotes. This is a tantalizing statement. If only 200,000 pounds of banknotes were seized in Egypt in 1929, then 300,000 pounds must, at this point in time, still have been in storage. Was Lotfallah exaggerating the number of notes printed, or were there in fact notes still available to the Prince?&lt;/p>
&lt;p>As to the status of his bank, Lotfallah admits that the bank had gone into voluntary liquidation around 1934 following his failure to secure an opportunity to operate his bank. However, he assures Malone that within two months he can arrange for the creation of the state of United Arabia and that his bank will be the link between the west and the new state. &lt;span class="marginnote">The claim that he could invoke the creation of a united Arab state appears outlandish and is an indication of delusions of power and influence that Habib Lotfallah appeared to be developing.&lt;/span>&lt;/p>
&lt;p>Habib Lotfallah’s subsequent interview at the Colonial Office, arranged through the auspices of Malcolm MacDonald, was with Sir John Shuckburgh, to whom the Prince explained his scheme for uniting the Arab countries and establishing his bank. During the cordial interview the obvious difficulties, in seeking the co-operation of various independent states where Britain had little influence, was observed by Sir John. Habib Lotfallah recognized the problem and suggested that he might commence with Saudi Arabia and Yemen before proceeding further. Sir John did not believe the proposal would succeed but he did offer to approach Sir John Caulcutt of Barclays Bank to sound him out, as Habib Lotfallah had indicated that he wished to include some of Britain’s financial institutions in his scheme.&lt;/p>
&lt;p>Prince Lotfallah subsequently received an interview with Sir John Caulcutt and although the interview achieved little, he was well received. Sir John, like others with whom Lotfallah had dealt with at the Colonial Office, found it difficult to understand what Lotfallah was seeking of him. However, Lotfallah did seek greater liquidity for his Arabian National Bank of Hedjaz and he suggested that Barclays Bank could acquire fifty percent of his bank. Sir John indicated that if Barclays was to take an interest, they would acquire the whole concern, to which the Prince admitted he was ready to consider such an option. A balance sheet for the Arabian National Bank of Hedjaz from 1934 was made available to Sir John and he noted that a large number of debts owing to the bank were loans made to the Lotfallah family. Despite suggesting that Barclays could get involved in the Prince’s bank, it became evident that they would not. During the interview, Sir John also raised the matter of an advance made by Barclays Bank to the Prince some years ago, which had not been repaid.&lt;/p>
&lt;p>Sir John reported the outcome of his interview with Habib Lotfallah to Sir John Shuckburgh and offered to request a current financial statement from the Prince, with the object of establishing that the Prince did not have the wherewithal to continue with his proposed scheme.&lt;/p>
&lt;p>At this stage, a new player entered the arena, Mr. A. C. Bossom M. P. Mr. Bossom had befriended Prince Lotfallah and sought to assist him in his schemes. Following meetings with Mr. MacDonald at the Colonial Office and Mr. Bagallay at the Foreign Office, Mr. Bossom managed to gain an interview for Prince Lotfallah at the Foreign Office on the condition that the Prince could show that his proposed bank was financially viable.&lt;/p>
&lt;p>A letter from Prince Lotfallah to Mr. Bossom attempted to represent his bank in favourable light by stating that the capital of the bank was £200,000 and that the accounts of the bank were audited by Price Waterhouse and Company. He again declared that banknotes to the value of £500,000 had been prepared, although nothing was mentioned of the notes seized by the Egyptian authorities in 1929. He also stated that he had no concerns in recruiting staff and that he intended to commence his bank in a small way, prior to expanding to all Arab countries.&lt;/p>
&lt;p>Mr. Bossom, on the strength of Habib Lotfallah’s reply, obtained an interview with Mr. Bagallay. At this meeting Habib Lotfallah simply requested that the British Government guarantee his bank note issue to the value of £200,000 (not the £500,000 mentioned in his correspondence to Mr. Bossom), so that he could establish his bank in Saudi Arabia. Lotfallah was still clinging to the promise made by ibn Sa’ud some years earlier, that he could establish his bank in ibn Sa’ud’s realm if it was backed by the British. Prince Lotfallah emphasized the point that he was not asking the British Government to provide capital for the bank, but simply to provide a guarantee for the note issue.&lt;/p>
&lt;p>Around the time that Mr. Bossom was making representations on behalf of the Prince, Cecil Malone resumed his activities and wrote to the Colonial Office seeking to promote the interests of the Prince. With several appeals being made to the Colonial Office and the Foreign Office on behalf of the Prince, it was decided, in an effort to bring the matters concerning the Prince to a conclusion, to accept Sir John Caulcutt’s offer of asking Habib Lotfallah to present his financial position with the supposed intention of Barclays Bank considering his proposals.&lt;/p>
&lt;p>A meeting was subsequently held on 8 March 1940 at the Colonial Office. In attendance were Sir John Shuckburgh and Mr. Downie of the Colonial Office, Mr. Coverly-Price of the Foreign Office and Sir John Caulcutt and Mr. Jones of Barclays Bank. Sir John Caulcutt had received an interim report from Barclays Bank in Cairo, which indicated that Prince Lotfallah’s bank had not been functioning since 1934 and that the business of the bank had seemed to consist of loans and discounts to family members. There also appeared to be a loss of £18,000 showing on the books, which was not immediately understood. The status and financial position of the Prince’s bank did not present it as a vehicle by which a national bank of Arabia could be established. Sir John Caulcutt was expecting a detailed report from Cairo, showing the situation of the Bank in 1934, and until this report was received it was decided to leave the matter in abeyance.&lt;/p>
&lt;p>On 1 April Prince Lotfallah met with Sir John Caulcutt and Mr. John of Price Waterhouse. A this meeting, Sir John acknowledged that the Prince’s scheme seemed sound but, due to the war, it was not an opportune time to initiate the scheme and Barclays would find it a difficult proposal to support in the current climate. The matter might, Sir John suggested, be revisited after the war.&lt;/p>
&lt;p>Habib Lotfallah saw that he was being fobbed off by Barclays Bank, but he clung to the hope that the British Government might still support him. He wrote to the Secretary of State, Lord Lloyd, requesting an interview, but none was offered. By April 1940 the British had learnt that ibn Sa’ud had the lowest opinion of Habib Lotfallah and would not trust him with the formation of the bank unless the British Government took a lead in the project. The various officials who had dealt with the Prince also had no faith in his personal capabilities. While admitting him to be a charming man, his lack of banking experience and his inability to be an instrument of policy in the Middle East almost made him an object of derision in government circles.&lt;/p>
&lt;p>On 24 May Habib Lotfallah was given his last interview with Mr Bagallay of the Foreign Office. The interview became slightly acrimonious as Mr. Bagallay made it quite clear that the proposals of the Prince would not be entertained by the British Government. Ultimately, the Prince was dismissed with no room left to doubt the failure of his schemes. However, several interesting claims were made during this final interview. On being reminded that the British Government would not support his bank or guarantee his banknotes, the Prince declared that this did not matter, as the single issue at hand was really the political situation in the Arab countries. He raised the matter of the failure of the British to maintain the Arab nation as a single entity after the First World War and indicated that the current war offered an opportunity to reverse the mistake. He wanted to unite all Semitic races of the Middle East, including Jews, Christians and Moslems. To achieve this, the personal influence of the Lotfallah family would be used. The Prince claimed to be the leading power amongst the Freemasons of the Middle East and he averred that, if it were not for the French, his brother George would have been universally acclaimed as the King of Syria. The Prince declared his dislike of ibn Sa’ud and of the late King Faisal of Iraq and he sought the British Government’s assistance in overthrowing the incumbent administrations in various Arab countries, to be replaced by the Lotfallah family in supreme command. &lt;span class="marginnote">This is the second example of Lotfallah’s delusions of power being expressed.&lt;/span>&lt;/p>
&lt;p>Not surprisingly, Mr. Bagallay took the Prince’s declarations lightly, and indicated that Great Britain would not support his schemes against countries with which the Government had existing treaties. The Prince then threatened to take his scheme for a bank (which he had just declared to be immaterial) to the Americans, suggesting that the British would not appreciate the interference of the Americans in Saudi Arabia. He also complained that, at the time ibn Sa’ud was threatening King ‘Ali in Jeddah in 1925, he had raised mercenaries to fight ibn Sa’ud but was not allowed to engage ibn Sa’ud because the British would not permit him. Had he had his way then, it was insinuated, the current state of affairs would never have eventuated. However, all the threats and theatrics of the Prince did not impress Mr. Bagallay and the end of this interview appears to have marked the end of the Prince’s aspirations for his bank in the Arab countries and, from this point, his project faded and all initiative was lost.&lt;/p>
&lt;p>Habib Lotfallah saw out the war in Great Britain, in much the same manner that he had sought refuge in Madrid during the First World War. The possibility cannot be overlooked that the final proposal for his Arabian National Bank of Hedjaz was little more than a scheme to find his way to Britain simply to escape the war on the continent and in Egypt. If this was not his original intent, it was certainly the final outcome.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>The story of Prince H. Habib Lotfallah and his Arabian National Bank of Hedjaz spans some fifteen years, from the decree made by King ‘Ali in 1925 to his last bid to the British Government in 1940.&lt;/p>
&lt;p>What drove him to establish his bank and, having his immediate objective thwarted in the Hedjaz, why did he seek to launch his bank in Aden, Transjordan, Iraq and then in Arabia? From correspondence generated by Habib Lotfallah, he certainly expressed a desire to use his bank to promote Arab nationalism and he had the ultimate goal of uniting all Arab nations as one country or under one federation. In looking at the original incarnation of the Arabian National Bank of Hedjaz, it appears that Arab nationalism was not his prime objective, although Arab nationalism was an ideal that he shared with King Hussein. Perhaps Habib Lotfallah saw his bank being given a wider audience under the Hashimite kings, but there is always a suspicion that the objectives of Prince Lotfallah were more mercenary.&lt;/p>
&lt;p>Despite his declared nationalist intentions, a concession sought by Habib Lotfallah from Amir Abdullah and King Faisal was the entire business of their respective governments. This concession, if given, would have been a financial benefit that would have secured the future of the bank. It is thus difficult to see that the intent behind this concession was anything but financial.&lt;/p>
&lt;p>The happenstance of history that saw Habib Lotfallah’s ambitions dashed before him in 1925, at the point of their achievement, must have been a bitter disappointment to the Prince. He spent much of the rest of his life trying to resurrect the opportunity which he had lost. However, while he was able to ingratiate himself with King Hussein and King ‘Ali, it appears that he was similarly alienated over time from Ibn Sa’ud and King Faisal of Iraq.&lt;/p>
&lt;p>Although originally on familiar terms with kings, rulers, diplomats and politicians, he was unable to make any real difference in the areas he sought to exploit. Certainly, his quixotic attempts to establish his bank after its initial failure were handled without any real acumen. He seems to have been living in a world where matters were achieved entirely by influence and association and he could not understand that his plans had to be backed by substance, not just by his promises. It is also apparent that, as he grew older, he became an anachronism who was not always well regarded.&lt;/p>
&lt;p>The movements of Habib Lotfallah after he left Britain, following the end of World War II, are uncertain. It is known that at some stage he made his way to Lebanon and, after living there for a number of years, he finally passed away in Beirut. Ultimately, his legacy and the legacy of the Arabian National Bank of Hedjaz are several unissued sets of his banknotes. It is assumed that the Egyptian authorities destroyed the notes they impounded in 1929. It can also be assumed that the later claims by Habib Lotfallah that £500,000 of his notes were printed, rather than the £200,000 indicated earlier, is an exaggeration and that no notes of the Arabian National Bank of Hedjaz exist, apart from unissued and specimen notes. Thus ends the story of H. Habib Lotfallah and the Arabian National Bank of Hedjaz.&lt;/p>
&lt;h2 id="bibliography">Bibliography&lt;/h2>
&lt;ul>
&lt;li>Crampton, William &lt;em>The World of Flags, A pictorial history&lt;/em> Studio Editions, London 1990.&lt;/li>
&lt;li>D’Amat, Roman and R. Limouzin-Lamothe &lt;em>Dictionnaire de Biographie Française&lt;/em> Librrairie Letouzey et Ané, Paris, 1967.&lt;/li>
&lt;li>Kedourie, Elie &lt;em>In the Anglo-Arab Labyrinth, The McMahon-Husayn Correspondence and its Interpretations 1914-1939&lt;/em> Cambridge University Press, Cambridge, 1976.&lt;/li>
&lt;li>Matthew, H.C.G. and Brian Harrison [Editors] &lt;em>Oxford Dictionary of National Biography&lt;/em>, Oxford University Press, Oxford, 2004.&lt;/li>
&lt;li>National Archives (Britain) CO 732/41/21, CO 732/43/9, CO 732/85/19, CO 732/86/20, T 231/1307.&lt;/li>
&lt;li>Sarkis, Selim [Translated to the French by Marius Schemeil] &lt;em>Les Princes de la Famille Lotfallah&lt;/em> Printed privately, Cairo, 1926.&lt;/li>
&lt;li>Shafer, Neil &lt;em>Bank Note Reporter&lt;/em> ‘Farouk sale held lots of paper’, Krause Publications, Iola, Wisconsin, May 2002.&lt;/li>
&lt;li>Stenton, Michael and Stephen Lees &lt;em>Who’s Who of British Parliament Members, Volume III 1919–1945&lt;/em>, The Harvester Press, Sussex, 1979.&lt;/li>
&lt;li>Symes, Peter. Murray Hanewich and Layth al-Muderis &lt;em>International Bank Note Society Journal, Volume 40, No.3, 2001&lt;/em> ‘The Bank Notes of the Iraq Currency Board’, Cedar Rapids, USA, 2001.&lt;/li>
&lt;li>Teitelbaum, Joshua &lt;em>The Rise and Fall of the Hashimite Kingdom of Arabia&lt;/em> Hurst &amp;amp; Company, London 2001.&lt;/li>
&lt;/ul>
&lt;h3 id="acknowledgements">Acknowledgements&lt;/h3>
&lt;p>The following people have assisted in this study and their input is appreciated:&lt;/p>
&lt;ul>
&lt;li>Murray Hanewich&lt;/li>
&lt;li>Venetia Porter&lt;/li>
&lt;li>Haider Al Saffar&lt;/li>
&lt;li>Garry Saint&lt;/li>
&lt;li>Neil Shafer&lt;/li>
&lt;li>Sylvana Sursock-Khouri&lt;/li>
&lt;li>David White&lt;/li>
&lt;/ul>
&lt;p>This article was completed in June 2005&lt;br>
© &lt;a href="https://web.archive.org/web/20110216005653/http://www.pjsymes.com.au/articles/Hedjaz.htm">Peter Symes&lt;/a>&lt;/p></content:encoded></item><item><title>Gulf Rupees - A History</title><link>https://alexalejandre.com/finance/gulf-ruppee/</link><pubDate>Mon, 30 Jun 2003 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/finance/gulf-ruppee/</guid><description>Gulf Arab countries used the Indian Rupee, until independent India issued them a new Gulf rupee.</description><content:encoded>&lt;p>N.b. The author &lt;a href="https://web.archive.org/web/20030630072004/http://www.islamicbanknotes.com/gulfrupees%20(article).htm">Peter Symes&lt;/a>&amp;rsquo; website is long gone, so I&amp;rsquo;m rehosting it.&lt;/p>
&lt;hr>
&lt;p>For many years the Indian rupee was the official currency in several areas that were controlled by the British and governed from India; areas such as East Africa, Southern Arabia and the Persian Gulf. While the Indian rupee was replaced in East Africa by the Rupee of the Government of the East African Protectorate in 1905 (and later by the Florin, and then the Shilling, of the East African Currency Board) and again by the Shilling of the East African Currency Board in Southern Arabia in 1951, within the states of the Persian Gulf the Indian rupee was still the official currency in 1959. &lt;span class="marginnote">India was short on foreign reserves due to infrastructure spending. The 2nd 5 year plan started in 1956.&lt;/span>&lt;/p>
&lt;p>The rupees that were circulating in the Persian Gulf had been bought by the various Gulf states from the Reserve Bank of India and were no liability to the Reserve Bank, as it held the sterling reserves by which the rupees had originally been purchased. However, Indian rupees were being smuggled from India to the states of the Persian Gulf, where they were readily accepted in exchange for gold, which was in turn smuggled back into India. Gold has long been a medium of exchange in India and it was estimated in 1959 that the total amount of gold in private hands in India was about $US1.75 to 2 billion&amp;ndash;roughly two thirds of the value of paper money in circulation. While it was legal to own and to trade in gold within India, it was illegal to import or export gold.&lt;/p>
&lt;p>As the smuggled rupees, used to purchase the gold, were excess to the currency required for circulation within the Gulf states, they were repatriated to India through official channels and exchanged for pounds sterling. This meant that India was paying for the illegal importation of gold through its reserves of foreign exchange. For while the Reserve Bank held sterling reserves with which the Gulf states had purchased the rupees used for circulation, the smuggled rupees being repatriated were a liability for which no foreign reserves had been allocated.&lt;/p>
&lt;p>While the smuggling had been a problem for many years, in 1957 and 1958 the problem rose to alarming proportions and took a large toll on India&amp;rsquo;s reserves of foreign exchange. It was estimated that, in the eight years to 1956, $US245.7 million worth of rupees were smuggled out of India to the Persian Gulf, and in 1957 India paid out $US92.4 million in sterling to banks in the Persian Gulf.&lt;/p>
&lt;p>The Indian government, in consultation with the governments of the states in the Persian Gulf and the Bank of England, decided to address the problem by introducing special currency notes for circulation in the Persian Gulf. These notes were introduced in 1959 and became known as &amp;lsquo;External rupees&amp;rsquo; or &amp;lsquo;Gulf rupees&amp;rsquo;. The following extract from the Reserve Bank of India Bulletin, May 1959, explains the measures taken by the Reserve Bank of India.&lt;/p>
&lt;blockquote>
&lt;p>&amp;lsquo;The Reserve Bank of India (Amendment) Act 1959, providing the issue of special notes of the Reserve Bank and the Government of India (one rupee notes), which are intended for circulation in certain territories outside India, was passed by the Lok Sabha on April 29, 1959 and the Rajya Sabha on April 30 and received the President&amp;rsquo;s assent on May 1, 1959.&lt;/p>
&lt;p>&amp;lsquo;The Indian rupee has been serving as the traditional medium of exchange in the Gulf States of Kuwait, Bahrain, Qatar, the Trucial States and in parts of Muscat, for a long time, and by custom the Government of India and the Reserve Bank of India have been providing the currency for this circulation. Facilities have been provided to banks operating in the Gulf States to exchange Indian currency notes collected by them for sterling. However, this currency arrangement has, in the last few years, facilitated the conversion into sterling of large amounts of Indian notes smuggled out, representing proceeds of smuggled imports of gold and other commodities into India, which entailed a substantial drain on India&amp;rsquo;s foreign exchange reserves. The notes were transferred through various channels to banks in the Gulf area, who tendered them to the Reserve Bank for redemption into sterling. There was no means of distinguishing currency taken out for legitimate trade transactions from currency taken out illegally for financing unauthorised transactions, chiefly gold imports.&lt;/p>
&lt;p>&amp;lsquo;Until 1956, the volume of smuggling activity and the redemption of Indian currency into sterling was not large, but in 1957 and 1958, the return of notes and the resulting loss of foreign exchange assumed large proportions. In recent months, smuggling operations appeared to have subsided somewhat, but it was felt that if the present arrangement continued, there would be no safeguard against a resumption of the drain of foreign exchange arising out of increased smuggling.&lt;/p>
&lt;p>&amp;lsquo;For these reasons, the Government of India decided to introduce a special series of India notes in replacement of the India notes now in circulation in the area. The amendment to the Reserve Bank of India Act was necessary, since the existing provisions did not provide for the issue of special notes which are not legal tender in India.&lt;/p>
&lt;p>&amp;lsquo;The new series of special notes will be identical with the existing series except for their colour and for a slight modification of the legend on the obverse, indicating they are payable &amp;ldquo;at the office of Issue at Bombay&amp;rdquo; instead of &amp;ldquo;at any office of issue&amp;rdquo; as in the case of the existing notes. The special issue will be in the denominations of Rs. 5, Rs. 10 and Rs. 100, besides one rupee notes of the Government of India. There will be no change in the value of the rupee and the special notes will be as much a liability of the Reserve Bank of India and the Government of India as the notes issued for circulation in India. The special notes will be freely convertible into Indian rupees. They will also be freely convertible into sterling under the existing procedure, under which Gulf banks presented Indian currency notes in their possession to the Reserve Bank for redemption in sterling. The special notes will not be legal tender in India. There will also be no restriction on Indian rupee notes being brought into India by travellers.&lt;/p>
&lt;p>&amp;lsquo;The initial stage of the operations is the exchange of existing Indian currency into the new notes. For this, a period of six weeks from May 11, 1959 to June 21, 1959 has been allowed. The Reserve Bank has provided adequate exchange facilities for the exchange of existing notes into special notes at all the banks functioning in the Gulf States and Muscat. Once the initial exchange is completed, further supplies of special notes will be obtainable by the Gulf banks under the existing arrangements for obtaining notes from India, namely, through payment of sterling. The facilities for the exchange of Indian currency notes into sterling provided prior to the issue of the special notes will be withdrawn with effect from June 22, 1959 and the redemption into sterling will be limited only to special notes issued in exchange for those now in circulation plus future issues against which sterling will be received. The issue of special notes will not involve any additional liability because they replace notes already in circulation, while future issues will not involve any uncovered liability as each rupee will be issued only against equivalent receipt in sterling.&amp;rsquo;&lt;/p>&lt;/blockquote>
&lt;p>The introduction of the amendment to the Reserve Bank of India Act, to the Indian parliament, caused some consternation to the members of parliament, as it was proposed without any warning. The Government of India had tried to introduce the amendment with a degree of haste so that they could reduce the window of opportunity for people who might take advantage of the proposed issue of special notes, and increase the smuggling activity in the immediate future. However, following a delay of a day or so in which the opposition was allowed to review the measures, the amendment to the Act was passed with little difficulty.&lt;/p>
&lt;p>The process of exchange appears to have been completed in the Gulf States with little trouble. It was estimated, at the time that the special notes were introduced, that the number of rupees circulating in the Gulf was between 300 to 500 million rupees, or $US63 to 105 million.&lt;/p>
&lt;p>The &amp;lsquo;special&amp;rsquo; notes, which came to be known as &amp;lsquo;Gulf rupees&amp;rsquo; or &amp;lsquo;External rupees&amp;rsquo;, were in most details the same as the notes then circulating in India. However, there were, as mentioned in the Reserve Bank of India Bulletin, several differences: the notes were different colours; they were payable only at Bomaby (rather than &amp;lsquo;at any office of issue&amp;rsquo;); and they carried a special serial number prefix of &amp;lsquo;Z&amp;rsquo; over a number. Details of the notes are as follows. (The notes and the patterns on which they were designed are referred to by their reference number in the Standard Catalog of World Paper Money (SCWPM) published by Krause Publications.)&lt;/p>
&lt;p>Denomination: 1 rupee.&lt;br>
Colour: Red.&lt;br>
SCWPM number: India No. R1.&lt;br>
Pattern of: India No. 75d.&lt;br>
First issued: 11 May 1959.&lt;br>
Signature: A. K. Roy (Secretary, Ministry of Finance).&lt;br>
Serial numbers: Serial number prefix in the range of Z/0 to Z/11, followed by a six digit number.&lt;/p>
&lt;p>Denomination: 5 rupees.&lt;br>
Colour: Orange.&lt;br>
SCWPM number: India No. R2.&lt;br>
Pattern of: India No. 35a.&lt;br>
First issued: 11 May 1959.&lt;br>
Signature: H. V. R. Iyengar (Governor, Reserve Bank of India).&lt;br>
Serial numbers: Serial number prefix in the range of Z/0 to Z/3, followed by a six digit number.&lt;/p>
&lt;p>Denomination: 10 rupees.&lt;br>
Colour: Red.&lt;br>
SCWPM number: India No. R3.&lt;br>
Pattern of: India No. 39c.&lt;br>
First issued: 11 May 1959.&lt;br>
Signature: H. V. R. Iyengar (Governor, Reserve Bank of India).&lt;br>
Serial numbers: Serial number prefix in the range of Z/0 to Z/14, followed by a six digit number.&lt;/p>
&lt;p>Denomination: 100 rupees.&lt;br>
Colour: Green.&lt;br>
SCWPM number: India No. R4.&lt;br>
Pattern of: India No. 43b.&lt;br>
First issued: 11 May 1959.&lt;br>
Signature: H. V. R. Iyengar (Governor, Reserve Bank of India).&lt;br>
Serial numbers: Serial number prefix in the range of Z/0 to Z/4, followed by a six digit number.&lt;/p>
&lt;p>Note: The range of serial number prefixes indicated for each denomination is not necessarily complete, it is simply the range observed to date.&lt;/p>
&lt;p>In his book, Indian Paper Money Since 1950 (published in 1997), Kishore Jhunjhunwalla asserts that the 1-rupee note also occurs with the signatures of: H. M. Patel (pattern of SCWPM No.75c) and L. K. Jha (pattern of SCWPM Nos.75f and 75g); however, these varieties had not been reported prior to the publication of his book.&lt;/p>
&lt;p>At the time the &amp;lsquo;special&amp;rsquo; notes were introduced, the Reserve Bank of India realized that, while many notes were being returned from the Gulf States, a great number of Indian rupees were being repatriated from Saudi Arabia. The rupees were being taken to Saudi Arabia each year by Haj pilgrims and exchanged for Saudi Arabian riyals. Under arrangements in place with banks in Saudi Arabia, Indian rupees could be repatriated to the Reserve Bank of India in Bombay for conversion into pounds sterling. To ensure that no smuggled rupees could be returned from the Persian Gulf via the Saudi Arabian banks, the Reserve Bank of India introduced two special &amp;lsquo;Haj notes&amp;rsquo; at the same time that the Gulf rupees were introduced.&lt;/p>
&lt;p>The two notes specially prepared for the Haj pilgrims were 10- and 100-rupee notes. These notes were not legal tender in India, but could be converted at Bombay into Indian rupees or into pounds sterling under agreements in place with the Saudi Arabian banks. They were in most respects similar to the Indian notes then in circulation, but they had several differences&lt;/p>
&lt;ul>
&lt;li>The notes were different colours: blue for the 10-rupee note instead of violet and red for the 100-rupee note instead of purple.&lt;/li>
&lt;li>The word &amp;lsquo;HAJ&amp;rsquo; appears to the left and right of &amp;lsquo;The Reserve Bank of India&amp;rsquo; at the top of the notes.&lt;/li>
&lt;li>The notes are payable &amp;lsquo;At the office of issue at Bombay&amp;rsquo; rather than &amp;lsquo;At any office of issue&amp;rsquo;.&lt;/li>
&lt;li>The serial numbers all begin with the prefix &amp;lsquo;HA&amp;rsquo;.&lt;/li>
&lt;/ul>
&lt;p>The following text is the remainder of the extract from the Reserve Bank of India Bulletin, May 1959, which describes the introduction of these notes:&lt;/p>
&lt;blockquote>
&lt;p>The Government of India have also arranged for the special issue by the Reserve Bank of special Haj Notes for supply to pilgrims proceeding on Haj to Saudi Arabia. It has been the practice to permit Haj pilgrims to take the quota of currency allowed to them in the form of Reserve Bank notes and Government of India one rupee notes for meeting expenses in Saudi Arabia. Indian notes, it may be mentioned, do not circulate in Saudi Arabia but they are exchanged in Saudi Arabia for local currency, and holders of Indian notes in Saudi Arabia send the currency back to India for conversion into foreign exchange. The issue of special Haj notes will ensure against the transfer of Indian notes now circulating in the Gulf areas and their presentation to the Reserve Bank through Saudi Arabia. These special Haj notes will be in denominations of Rs. 10 and Rs. 100. They will not be legal tender in India but will be convertible in Bombay into Indian rupees and also into sterling under the exchange procedure under which the Saudi Arabian banks collect and present these notes for redemption at the Reserve Bank of India, Bombay. The Haj notes will be distinguishable by their colour and the word &amp;ldquo;Haj&amp;rdquo; printed on them. They are payable &amp;ldquo;at the office of Issue at Bombay.&amp;rdquo;&lt;/p>&lt;/blockquote>
&lt;p>The special Haj notes were first issued to Haj pilgrims on 3 May 1959 at the Mohamed Haji Saboo Siddick Musafirkhana in Bombay. (The &amp;lsquo;Musafirkhana&amp;rsquo;, literally a &amp;lsquo;house for travellers&amp;rsquo;, was a hostel for pilgrims waiting to catch boats from Bombay to Saudi Arabia.) From 6 May 1959 pilgrims were not permitted to carry Indian currency notes on their pilgrimage to Saudi Arabia, they had to carry Haj notes. The amount of money permitted to be carried by pilgrims on their journey to Saudi Arabia varied depending on their mode of travel. In 1959 Haj pilgrims travelling by boat were permitted to carry 1,200 rupees if travelling &amp;lsquo;deck class&amp;rsquo; and 1,800 rupees if travelling &amp;lsquo;first class&amp;rsquo;. Pilgrims travelling by air could take 1,700 rupees.&lt;/p>
&lt;p>The details of the Haj notes are as follows.&lt;/p>
&lt;p>Denomination: 10 rupees.&lt;br>
Colour: Blue.&lt;br>
SCWPM number: India No. R5.&lt;br>
Pattern of: India No. 39c.&lt;br>
First issued: 3 May 1959.&lt;br>
Signature: H. V. R. Iyengar (Governor, Reserve Bank of India).&lt;br>
Serial numbers: &amp;lsquo;HA&amp;rsquo; followed by a six digit number.&lt;/p>
&lt;p>Denomination: 100 rupees.&lt;br>
Colour: Red.&lt;br>
SCWPM number: India No. R6.&lt;br>
Pattern of: India No. 43b.&lt;br>
First issued: 3 May 1959.&lt;br>
Signature: H. V. R. Iyengar (Governor, Reserve Bank of India).&lt;br>
Serial numbers: &amp;lsquo;HA&amp;rsquo; followed by a six digit number.&lt;/p>
&lt;p>It appears that the Indian Haj notes were used only during the first year in which the Gulf rupees were introduced. This is deduced simply from the small number issued, or rather the small number available in the modern collector market, and the limited serial number range possible by the use of &amp;lsquo;HA&amp;rsquo; as the sole prefix. Once the Gulf rupees had been put into circulation it would become harder for smugglers to purchase gold in the Gulf states with Indian rupees, which were no longer readily accepted by the banks. This would in turn mean that Indian rupees could be taken to Saudi Arabia in the following years, and the need for special Haj notes would no longer be necessary.&lt;/p>
&lt;p>The Gulf rupees were used in the states of the Persian Gulf for a number of years before becoming redundant. The first Gulf state to introduce their own currency was Kuwait, which introduced the Kuwaiti Dinar on 1 April 1961 (two years after the Gulf rupees had been introduced). Four years later, on 16 October 1965, Bahrain introduced its own currency. Shortly after Bahrain had introduced its own currency, the Reserve Bank of India announced that they were withdrawing the established facilities for the conversion into sterling of Indian coins repatriated from the Gulf states. In order that the Gulf states, which had yet to introduce their own coins, might have a standard coinage to fill the vacuum caused by the withdrawal of the Indian coinage, the Government of Bahrain made their coinage available to the Gulf states. The coins were made available from the middle of January 1966.&lt;/p>
&lt;p>Despite the official status of the &amp;lsquo;External rupee&amp;rsquo; in the Gulf states, it would appear that transactions continued to be undertaken for many years in bullion coins&amp;ndash;particularly the Maria Theresa dollars and British gold sovereigns. Following Bahrain&amp;rsquo;s announcement that it intended to introduce its own currency, the following report appeared in The Economist (1 August, 1964):&lt;/p>
&lt;blockquote>
&lt;p>With its own currency, Bahrain hopes to acquire a fuller control over its money supply and avoid any possibility of being pulled into a forced devaluation by India. What is questionable is the extent to which the new measure can succeed in weaning residents of the area from their attachment to gold. The Gulf rupee, theoretically the local currency, and valued at 13.33 to the pound, circulates only in the form of small change and can be refused in payment. For all practical purposes, most private transactions are still based on gold in the form of British sovereigns and Maria Theresa thalers. This is true even in Kuwait, its dinar notwithstanding.&lt;/p>&lt;/blockquote>
&lt;p>In 1966 a monetary union between Qatar and Dubai saw the introduction of the Qatar &amp;amp; Dubai riyal on 18 September. However, due to problems with the devaluation of the Indian rupee in June 1966, the Gulf rupees had been withdrawn from circulation in Qatar and Dubai in the days following the devaluation, and replaced with Saudi Riyals&amp;ndash;which circulated until the Qatar &amp;amp; Dubai riyals could be introduced. The remaining emirates of the Trucial States, with the exception of Abu Dhabi, followed the lead set by Qatar and Dubai in response to the devaluation of the Indian rupee, and temporarily introduced Saudi riyals&amp;ndash;subsequently adopting the use of the riyal of the Qatar &amp;amp; Dubai Currency Board.&lt;/p>
&lt;p>Abu Dhabi declined to introduce the Saudi riyal, due to a long-standing boundary dispute with the Saudi Arabia. Instead, Abu Dhabi, the largest of the Trucial states, chose to adopt the Bahraini dinar as its sole legal tender. While there were different measures taken by different states, following the devaluation of the Indian rupee, it was this action by the Government of India that led to the end of the use of the Gulf rupee in the Persian Gulf. By the end of 1966 the Gulf rupee had ceased to be legal currency in all states of the Persian Gulf, with Muscat and Oman being the only country maintaining it as an official currency.&lt;/p>
&lt;p>In Muscat and Oman, a national currency was not introduced until 7 May 1970. Until this time, various currencies circulated in Muscat and Oman, including: the dinars of Kuwait and Bahrain; local baizas of Muscat, Dhofar and Oman; Maria Theresa dollars; and Gulf rupees&amp;ndash;although the Gulf rupees circulated principally in Muscat and the sea ports, and not to any great extent in Oman. However, while a myriad of currencies circulated throughout Muscat and Oman, it was the Gulf rupee of India that was referred to in most official documents and which was used as the principal currency in trade. Muscat had continued to use Gulf rupees, following the devaluation of the Indian rupee in 1966, because of the great amount of trade conducted with India. The Gulf rupees, still circulating in Muscat and Oman in 1970, were exchanged for the new &amp;lsquo;Rials Saidi&amp;rsquo; of Muscat and Oman in a fourteen day period to 21 May 1970, following the introduction of the new currency. Therefore, Muscat and Oman was the last place where Gulf rupees circulated.&lt;/p>
&lt;p>One of the interesting problems, associated with the discontinuation of the Gulf rupee as a circulating currency, was the claim by various Gulf states for the sterling with which the rupees were originally bought. In June 1965, four months before they introduced their own currency, a delegation from the Government of Bahrain met with officials of the Government of India in New Delhi to discuss the redemption of Gulf rupees to be withdrawn from circulation in Bahrain. The Indian Government undertook to redeem the rupees in sterling at the exchange rate current at the time the rupees were returned to the Reserve Bank of India in Bombay. India agreed to pay one third of the liability or £2 million, whichever was the less, to the Government of Bahrain by 30 April 1966. The balance of the liability was to be paid to the Government of Bahrain over a ten year period.&lt;/p>
&lt;p>When reports began to circulate, in early 1966, that India was going to devalue the rupee, the Gulf states still using Gulf rupees became apprehensive of the economic consequences of a possible devaluation. Under the shadow of a possible devaluation, the leaders of the Gulf states began to look for some protection for the Gulf rupee. They suggested that a guarantee be sought from India, that the integrity of the Gulf rupee be maintained if the Indian rupee was devalued. The leaders of the Gulf states saw the responsibility of obtaining this guarantee lying with Britain. The ruler of Qatar openly stated that the onus was on Britain to take responsibility for the situation, as it was Britain who was responsible for the area&amp;rsquo;s reliance on the rupee. It was suggested at this time that Britain all too often shied away from these difficult situations and, since the states stood to collectively lose around £4 million if the anticipated devaluation took place, it was thought that Britain should be prepared to foot the deficit should the Gulf states be disadvantaged. When the devaluation finally occurred, Britain did not step in to save the day. Consequently, following the introduction of the Qatar and Dubai riyal, the Qatar and Dubai Currency Board made a claim to the Reserve Bank of India for the total amount of sterling originally sent to cover the rupees held by Qatar and Dubai, and not the lesser value of what the Gulf rupees were actually worth.&lt;/p>
&lt;p>Introduced as a measure to halt the illegal flow of currency from India to the Gulf region, the Gulf rupees are now part of the intriguing tapestry of currencies that have circulated in the Arabian Peninsula. In circulation for just over ten years, they are now difficult to obtain in high grades for all notes. The highest denomination, the 100-rupee note, is particularly difficult to obtain and, in light of the comment concerning &amp;lsquo;small change&amp;rsquo; in the report by The Economist (see above), it is perhaps not surprising that these notes are now difficult to acquire. However, for those who aspire to collect all the notes that circulated in the Arabian Peninsula, the Gulf rupees are essential to their collection.&lt;/p>
&lt;h2 id="bibliography">Bibliography&lt;/h2>
&lt;ul>
&lt;li>Reserve Bank of India Bulletin, Vol. XIII Number 5, May 1959, Bombay, 1959.&lt;/li>
&lt;li>The Times of India, Bombay &amp;ndash; 1959: 29 April, 30 April, 1 May, 3 May, 21 May, 25 May.&lt;/li>
&lt;li>Financial Times, London &amp;ndash; 1959: 29 April, 30 April.&lt;/li>
&lt;li>New York Times, New York &amp;ndash; 1959: 30 April.&lt;/li>
&lt;li>The Times, London &amp;ndash; 1965: 8 July, 9 July; 1966: 21 February, 7 June, 20 June.&lt;/li>
&lt;li>The Economist, London &amp;ndash; 1964: 1 August; 1966: 4 June, 11 June.&lt;/li>
&lt;li>Pick, Albert, Edited by Colin R. Bruce II and Neil Shafer Standard Catalog of World Paper Money &amp;ndash; General Issues (Volume 2, Eighth edition), Iola, USA.&lt;/li>
&lt;/ul>
&lt;p>© &lt;a href="https://web.archive.org/web/20030630072004/http://www.islamicbanknotes.com/gulfrupees%20(article).htm">Peter Symes&lt;/a>&lt;/p></content:encoded></item><item><title>Fliegergedicht</title><link>https://alexalejandre.com/poetry/german/fliegergedicht/</link><pubDate>Mon, 14 Jun 1926 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/fliegergedicht/</guid><description>&lt;p>Wir träumen den uralten, seltsamen Traum:&lt;br>
mit Flügeln am Arm in unendlichem Raum&amp;hellip;&lt;br>
die Sehnsucht ist groß, und wir möchten so gern&lt;br>
zur Sonne so weit, zu den Sternen so fern.&lt;/p></description><content:encoded>&lt;p>Wir träumen den uralten, seltsamen Traum:&lt;br>
mit Flügeln am Arm in unendlichem Raum&amp;hellip;&lt;br>
die Sehnsucht ist groß, und wir möchten so gern&lt;br>
zur Sonne so weit, zu den Sternen so fern.&lt;/p>
&lt;p>Wir wachsen durch Kampf mit Sturm und Braus&lt;br>
von selbst über Kleinmut und Schwächen hinaus&lt;br>
und trinken in Herzen, berauscht und gebannt,&lt;br>
das himmlische Licht über irdischem Land.&lt;/p>
&lt;p>Wir sind unseres Schicksals Schmied,&lt;br>
wir singen ein leuchtendes trutziges Lied;&lt;br>
wir fühlen beglückt über Wolken und Höh&amp;rsquo;n:&lt;br>
das Leben, es glüht, sollt&amp;rsquo; die Welt auch vergehn!&lt;/p>
&lt;p>Wir treiben kein leichtes, vermessenes Spiel,&lt;br>
wir haben ein stolzes, ein köstliches Ziel:&lt;br>
wir weisen den Weg aus Taumel und Tanz&lt;br>
in einsamen, ewigen, silbernen Glanz!&lt;/p></content:encoded></item><item><title>Le Mal</title><link>https://alexalejandre.com/poetry/french/le-mal-rimbaud/</link><pubDate>Mon, 15 Aug 1870 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/french/le-mal-rimbaud/</guid><description>&lt;p>Tandis que les crachats rouges de la mitraille&lt;br>
Sifflent tout le jour par l’infini du ciel bleu;&lt;br>
Qu’écarlates ou verts, près du Roi qui les raille,&lt;br>
Croulent les bataillons en masse dans le feu;&lt;/p></description><content:encoded>&lt;p>Tandis que les crachats rouges de la mitraille&lt;br>
Sifflent tout le jour par l’infini du ciel bleu;&lt;br>
Qu’écarlates ou verts, près du Roi qui les raille,&lt;br>
Croulent les bataillons en masse dans le feu;&lt;/p>
&lt;p>Tandis qu’une folie épouvantable broie&lt;br>
Et fait de cent milliers d’hommes un tas fumant;&lt;br>
– Pauvres morts ! dans l’été, dans l’herbe, dans ta joie,&lt;br>
Nature ! ô toi qui fis ces hommes saintement!&lt;/p>
&lt;p>– Il est un Dieu, qui rit aux nappes damassées&lt;br>
Des autels, à l’encens, aux grands calices d’or;&lt;br>
Qui dans le bercement des hosannah s’endort,&lt;/p>
&lt;p>Et se réveille, quand des mères, ramassées&lt;br>
Dans l’angoisse, et pleurant sous leur vieux bonnet noir,&lt;br>
Lui donnent un gros sou lié dans leur mouchoir!&lt;/p></content:encoded></item><item><title>Beobachtung</title><link>https://alexalejandre.com/poetry/german/beobachtung-bodenstedt/</link><pubDate>Thu, 17 May 1849 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/beobachtung-bodenstedt/</guid><description>&lt;p>Seh&amp;rsquo; ich das wüste Treiben dieser Tage,&lt;br>
Wo alles Höchste auf den Kopf gestellt,&lt;br>
Und auf der Zeitgunst trügerischer Wage&lt;br>
Rasch die Verblendung steigt, die Wahrheit fällt,&lt;br>
So schüttl&amp;rsquo; ich traurig oft das Haupt und frage:&lt;br>
Giebt&amp;rsquo;s wirklich einen Fortschritt in der Welt?&lt;br>
Nicht solchen mein&amp;rsquo; ich, der durch Draht und Schienen&lt;br>
Die Zeit abkürzt, gemeinem Zweck zu dienen.&lt;/p></description><content:encoded>&lt;p>Seh&amp;rsquo; ich das wüste Treiben dieser Tage,&lt;br>
Wo alles Höchste auf den Kopf gestellt,&lt;br>
Und auf der Zeitgunst trügerischer Wage&lt;br>
Rasch die Verblendung steigt, die Wahrheit fällt,&lt;br>
So schüttl&amp;rsquo; ich traurig oft das Haupt und frage:&lt;br>
Giebt&amp;rsquo;s wirklich einen Fortschritt in der Welt?&lt;br>
Nicht solchen mein&amp;rsquo; ich, der durch Draht und Schienen&lt;br>
Die Zeit abkürzt, gemeinem Zweck zu dienen.&lt;/p>
&lt;p>Jahrtausende vergeh&amp;rsquo;n eh&amp;rsquo; sich gestaltet&lt;br>
Was dunkel keimt und webt im Volksgemüthe;&lt;br>
Nur langsam wird&amp;rsquo;s empor zum Licht entfaltet,&lt;br>
Und kaum erreicht es seine höchste Blüte,&lt;br>
So gilt es schon den Spöttern als veraltet;&lt;br>
Bald herrschen, wo das reinste Feuer glühte,&lt;br>
Gedanken aus zersetzendem Gehirne,&lt;br>
Kalt und unfruchtbar wie das Eis der Firne.&lt;/p>
&lt;p>Ehrwürd&amp;rsquo;ge Heiligthümer stürmt man nieder —&lt;br>
Als wechsle mit der Hülle auch das Wesen —&lt;br>
Um nach Jahrtausenden mühselig wieder&lt;br>
Die weit zerstreuten Trümmer aufzulesen;&lt;br>
Des einst lebendigen Leib&amp;rsquo;s zerstörte Glieder,&lt;br>
Sie werden nimmermehr was sie gewesen,&lt;br>
Doch selbst die Trümmer dienen noch als Zeugen&lt;br>
Von einem Geist, werth, sich davor zu beugen.&lt;/p>
&lt;p>Wo ist das Neue, und wo sind die Neu&amp;rsquo;rer,&lt;br>
Die Bess&amp;rsquo;res boten, als was sie zerstörten&lt;br>
Im Reich der Kunst, und — was dem Volk noch theurer —&lt;br>
Im Reich des Glaubens? — Wehe den Bethörten,&lt;br>
Die urtheilslos dem philosoph&amp;rsquo;schen Steu&amp;rsquo;rer&lt;br>
Sich anvertrau&amp;rsquo;n, weil sie ihn rühmen hörten&lt;br>
Als großen Geist, des; wundersames Grübeln&lt;br>
Die Welt erlöst von allen Glaubensübeln!&lt;/p>
&lt;p>&amp;ldquo;Aus Nichts in Nichts, aus Nacht in Finsterniß&amp;rdquo;,&lt;br>
Das ist der Weisheit Schluß, seit man im Tempel&lt;br>
Den Vorhang und damit sich selbst zerriß.&lt;br>
Zerrissenheit&amp;rsquo; galt nun als Weisheitsstempel&lt;br>
Und nur das Ungewisse als gewiß —&lt;br>
Den Gläubigen ein warnendes Exempel:&lt;br>
Der Neu&amp;rsquo;rer äußerste Beflissenheit&lt;br>
Bringt&amp;rsquo;s bis zu innerster Zerrissenheit!&lt;/p>
&lt;p>Nun denkt Euch unsre Philosophen selber,&lt;br>
Versuchte man sie ganz so zu entkleiden&lt;br>
Wie sie den Glauben! Würden sie nicht gelber&lt;br>
Vor Zorn, so nackt der Menschen Blick zu weiden,&lt;br>
Als Israels verpönte goldne Kälber?&lt;br>
Sie würden Widder um ihr Vließ beneiden,&lt;br>
Denn selbst die Kinder würden auf den Straßen&lt;br>
Mit ihnen, wie sie mit dem Glauben, spaßen.&lt;/p>
&lt;p>Kein schlimm&amp;rsquo;res kenn&amp;rsquo; ich unter allen Uebeln&lt;br>
Der unfruchtbaren Büchermacherei,&lt;br>
Als wenn unschöpferische Geister grübeln&lt;br>
Und lösen alten unverdauten Brei&lt;br>
Sophistisch auf in neuen Wasserkübeln&lt;br>
Als neu&amp;rsquo;sten Fund — uneingedenk dabei&lt;br>
Des Spruchs, daß zwar durch Wasser hohl der Stein wird,&lt;br>
Doch durch Sophismen Wasser nicht zu Wein wird.&lt;/p></content:encoded></item><item><title>Das neue Reich</title><link>https://alexalejandre.com/poetry/german/das-neue-reich-bodenstedt/</link><pubDate>Thu, 17 May 1849 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/das-neue-reich-bodenstedt/</guid><description>&lt;p>Vollendet steht — Dank unsern Schlachtgewinnern —&lt;br>
Und festgegründet schaut in Herrlichkeit&lt;br>
Das Reich nach außen friedlich, — doch im Innern&lt;br>
Weckt neu von Rom geschürter Glaubensstreit&lt;br>
An finstre Zeit ein mahnendes Erinnern.&lt;br>
Wohl ragt der Baum der Einheit hoch und weit,&lt;br>
Und wetterfest, wie sehr der Sturm auch wüthe,&lt;br>
Doch schmückt ihn noch kein Laub und keine Blüte.&lt;/p></description><content:encoded>&lt;p>Vollendet steht — Dank unsern Schlachtgewinnern —&lt;br>
Und festgegründet schaut in Herrlichkeit&lt;br>
Das Reich nach außen friedlich, — doch im Innern&lt;br>
Weckt neu von Rom geschürter Glaubensstreit&lt;br>
An finstre Zeit ein mahnendes Erinnern.&lt;br>
Wohl ragt der Baum der Einheit hoch und weit,&lt;br>
Und wetterfest, wie sehr der Sturm auch wüthe,&lt;br>
Doch schmückt ihn noch kein Laub und keine Blüte.&lt;/p>
&lt;p>Nichts Großes — außer neuem Schlachtenruhme —&lt;br>
Enthüllt er uns, als was wir längst schon hatten:&lt;br>
Zu seinen Füßen sproßt manch&amp;rsquo; schöne Blume,&lt;br>
Die Krone giebt ihr weder Licht noch Schatten;&lt;br>
Rings reift das Korn ans fetter Ackerkrume,&lt;br>
Das Gras wächst hoch auf wohlgepflegten Matten —&lt;br>
So ist es heute und so war es immer,&lt;br>
Es ward damit nicht besser und nicht schlimmer.&lt;/p>
&lt;p>Schön steht der Heldenstirn der Lorbeerkranz,&lt;br>
Doch was das Schwert gewann, kann es verlieren,&lt;br>
Und einem großen Reich geziemt&amp;rsquo;s, mit Glanz&lt;br>
Der unvergänglich, seine Macht zu zieren.&lt;br>
Manch&amp;rsquo; hochbegabter Sohn des Vaterlands&lt;br>
Muß harmvoll um sein täglich Brod hantieren,&lt;br>
Der, sorglos, an den rechten Platz gestellt,&lt;br>
Ein Stolz des Reiches würde und der Welt.&lt;/p>
&lt;p>Doch für Genies ist noch kein Platz gefunden,&lt;br>
Zu hohem Ziel sie fördernd zu vereinen;&lt;br>
An Rang und Titel bleibt, was gilt, gebunden,&lt;br>
Am meisten gelten, die am meisten scheinen,&lt;br>
Und so von Ehrenflittern gleich umwunden,&lt;br>
Gesellt sich leicht das Hohe dem Gemeinen;&lt;br>
Der Genius wird höchstens nur geduldet&lt;br>
Und durch ein Band im Knopfloch angehuldet.&lt;/p>
&lt;p>Im Felde siegten große Schlachtenmeister&lt;br>
Durch Einheitskraft und überlegnen Plan;&lt;br>
Zum Sieg des Schönen eint kein Bund die Geister,&lt;br>
Ein Jeder kämpft sich durch auf eig&amp;rsquo;ner Bahn;&lt;br>
Die Einzelkraft versagt, wo immer dreister&lt;br>
Die Schwärme geistiger Verwild&amp;rsquo;rung nah&amp;rsquo;n;&lt;br>
Manch&amp;rsquo; edler Geist verfällt — weil nicht gehalten —&lt;br>
Wehrlos dem Zug dämonischer Gewalten.&lt;/p>
&lt;p>Hier krankt das deutsche Reich. Mög&amp;rsquo;s bald gesunden?&lt;br>
Daß Schönheit seinem Glänze sich vermähle —&lt;br>
Wenn echt, ist sie der Wahrheit eng verbunden,&lt;br>
Die allem Großen Leben giebt und Seele;&lt;br>
Sie scheucht den Trug, hat Balsam für die Wunden,&lt;br>
Und macht, daß nicht dem Baum die Blüte fehle,&lt;br>
Die wunderthät&amp;rsquo;ge Frucht enthüllt, vom Bösen,&lt;br>
Das Deutschland noch bedrängt, uns zu erlösen.&lt;/p></content:encoded></item><item><title>Erneuerung</title><link>https://alexalejandre.com/poetry/german/erneuerung-bodenstedt/</link><pubDate>Thu, 17 May 1849 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/erneuerung-bodenstedt/</guid><description>&lt;p>Nach langen, schweren Winterträumen&lt;br>
Die mich bedrückt wie Schnee und Eis die Flur,&lt;br>
Froh wandl&amp;rsquo; ich wieder unter Blütenbäumen&lt;br>
Und fühle mich erneut wie die Natur.&lt;br>
Wohl bringt sie mir nicht wieder was sie raubte,&lt;br>
Wie diesem Wald, dem sie mit rauher Hand&lt;br>
Das Kleid vom Leib, die Krone riß vom Haupte,&lt;br>
Daß er im Eissturm nackt und zitterud stand,&lt;br>
Und ihn mm schöner schmückte als zuvor: -&lt;br>
Verloren bleibt, was ich durch sie verlor,&lt;br>
Auf immer, doch nach Anßen nur: im Innern&lt;br>
Ließ Alles mir ein leuchtendes Erinnern&lt;br>
Was Schönes mir auf rauhem Pfad begegnet,&lt;br>
Und jede gute Stunde ward gesegnet.&lt;/p></description><content:encoded>&lt;p>Nach langen, schweren Winterträumen&lt;br>
Die mich bedrückt wie Schnee und Eis die Flur,&lt;br>
Froh wandl&amp;rsquo; ich wieder unter Blütenbäumen&lt;br>
Und fühle mich erneut wie die Natur.&lt;br>
Wohl bringt sie mir nicht wieder was sie raubte,&lt;br>
Wie diesem Wald, dem sie mit rauher Hand&lt;br>
Das Kleid vom Leib, die Krone riß vom Haupte,&lt;br>
Daß er im Eissturm nackt und zitterud stand,&lt;br>
Und ihn mm schöner schmückte als zuvor: -&lt;br>
Verloren bleibt, was ich durch sie verlor,&lt;br>
Auf immer, doch nach Anßen nur: im Innern&lt;br>
Ließ Alles mir ein leuchtendes Erinnern&lt;br>
Was Schönes mir auf rauhem Pfad begegnet,&lt;br>
Und jede gute Stunde ward gesegnet.&lt;/p>
&lt;p>Ach, wohl gab&amp;rsquo;s meist der bösen Stunden mehr!&lt;br>
Denn früh schon traf des Lebens Fluch mich schwer,&lt;br>
Und grauenvoll Erinnerungen blieben&lt;br>
Zurück, die oft mich bis zum Wahnsinn trieben.&lt;br>
Doch wie ein Wandrer im Gebirg vom Rand&lt;br>
Des Abgrunds der ihm wild zu Füßen klafft,&lt;br>
Entsetzt sich abkehrt und mit letzter Kraft&lt;br>
Emporklimmt au der steilen Felsenwand,&lt;br>
Um nicht mit dem zerbröckelnden Gerölle&lt;br>
Hinabzustürzen in des Abgrunds Hölle:&lt;br>
So sucht&amp;rsquo; ich mich dem Unheil zu entwinden&lt;br>
Und zu den Höh&amp;rsquo;n des Lichts die Bahn zu finden.&lt;br>
Ein sonniger Maientag im Blütenhage&lt;br>
Verklärt selbst die Erinnrung trüber Tage,&lt;br>
Und nur bewährte Liebe beut hienieden&lt;br>
Noch schönern Trost als heiliger Waldesfrieden.&lt;/p>
&lt;p>Wenn&amp;rsquo;s knistert, summt und singt in Baum und Strauch,&lt;br>
Die Brust sich hebt bei frischem Blütenhauch,&lt;br>
Zu Häupten Fink und Amsel, und zu Füßen&lt;br>
Die Blumen mich wie alte Freunde grüßen,&lt;br>
Die Sonnenstrahlen durch das helle Grün&lt;br>
Gedämpft wie durch bemalte Scheiben glühn,&lt;br>
Und wo sie frei durch lichte Räume dringen,&lt;br>
Wie Elfen über Busch und Rasen springen:&lt;br>
Dann ist&amp;rsquo;s als ob zu einem Fest im Haine&lt;br>
Sich aller Zauber der Natur vereine,&lt;br>
Befreit von Allem was sie Schlimmes beut,&lt;br>
Und voll von Allem was das Herz erfreut:&lt;br>
Licht taucht in Schatten, Schatten taucht in Licht,&lt;br>
Doch jener trübt und dieses blendet nicht,&lt;br>
Als ob im goldig grünen Zaubernetze&lt;br>
Versöhnt sich lösten alle Gegensätze.&lt;/p>
&lt;p>Ich weiß, es ist nur Täuschung, flücht&amp;rsquo;ger Schein,&lt;br>
Wie jenes Gold im blauen Himmelsgrunde&lt;br>
Doch holde Täuschung ist das höchste Sein,&lt;br>
Die reinste Blüte jeder guten Stunde.&lt;/p></content:encoded></item><item><title>In einem Schlussstein</title><link>https://alexalejandre.com/poetry/german/in-einem-schlussstein/</link><pubDate>Thu, 17 May 1849 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/in-einem-schlussstein/</guid><description>&lt;p>Sohn einer Zeit, die unsre Zeit nicht kennt,&lt;br>
Entfaltest Du dies graue Pergament,&lt;br>
Ist von der Hand, die diesen Spruch geschrieben,&lt;br>
Vielleicht noch kaum ein flücht‘ger Staub geblieben.&lt;br>
Das Haupt, das nach Unsterblichkeit getrachtet,&lt;br>
Ging namenlos dahin und unbeachtet.&lt;br>
Das Schicksal dessen, der Dir dieses weiht,&lt;br>
Ermahne Dich an eigne Sterblichkeit.&lt;br>
Genieß das Leben, wie der Schreiber dieses,&lt;br>
So nur erlangst Du Glück des Paradieses.&lt;br>
Sei mit den Guten gut, mit Frohen froh,&lt;br>
Bis Dir der Hauch des Erdenlebens floh.&lt;br>
Wenn Dich mein wohlgemeinter Spruch nicht wundert,&lt;br>
Sind Brüder wir, aus zweierlei Jahrhundert:&lt;br>
Wo meine Hand lag, fass des Blattes Rände&lt;br>
So reichen wir uns brüderlich die Hände!&lt;/p></description><content:encoded>&lt;p>Sohn einer Zeit, die unsre Zeit nicht kennt,&lt;br>
Entfaltest Du dies graue Pergament,&lt;br>
Ist von der Hand, die diesen Spruch geschrieben,&lt;br>
Vielleicht noch kaum ein flücht‘ger Staub geblieben.&lt;br>
Das Haupt, das nach Unsterblichkeit getrachtet,&lt;br>
Ging namenlos dahin und unbeachtet.&lt;br>
Das Schicksal dessen, der Dir dieses weiht,&lt;br>
Ermahne Dich an eigne Sterblichkeit.&lt;br>
Genieß das Leben, wie der Schreiber dieses,&lt;br>
So nur erlangst Du Glück des Paradieses.&lt;br>
Sei mit den Guten gut, mit Frohen froh,&lt;br>
Bis Dir der Hauch des Erdenlebens floh.&lt;br>
Wenn Dich mein wohlgemeinter Spruch nicht wundert,&lt;br>
Sind Brüder wir, aus zweierlei Jahrhundert:&lt;br>
Wo meine Hand lag, fass des Blattes Rände&lt;br>
So reichen wir uns brüderlich die Hände!&lt;/p></content:encoded></item><item><title>Mahnung</title><link>https://alexalejandre.com/poetry/german/mahnung-bodenstedt/</link><pubDate>Thu, 17 May 1849 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/mahnung-bodenstedt/</guid><description>&lt;p>Seh&amp;rsquo; ich der Völker wechselnde Geschicke,&lt;br>
Der großen Reiche Auf- und Niedergang&lt;br>
Vorüberzieh&amp;rsquo;n an meinem innern Blicke&lt;br>
In mächt&amp;rsquo;gem Werdens- und Zerstörungsdrang,&lt;br>
So ist&amp;rsquo;s als säh&amp;rsquo; ich sich die Meerflut thürmen&lt;br>
Zu Wogenbergen, die weitschimmernd nahn,&lt;br>
So rasch erhoben von gewalt&amp;rsquo;gen Stürmen,&lt;br>
Wie rasch zerstoben auf der schwanken Bahn.&lt;/p></description><content:encoded>&lt;p>Seh&amp;rsquo; ich der Völker wechselnde Geschicke,&lt;br>
Der großen Reiche Auf- und Niedergang&lt;br>
Vorüberzieh&amp;rsquo;n an meinem innern Blicke&lt;br>
In mächt&amp;rsquo;gem Werdens- und Zerstörungsdrang,&lt;br>
So ist&amp;rsquo;s als säh&amp;rsquo; ich sich die Meerflut thürmen&lt;br>
Zu Wogenbergen, die weitschimmernd nahn,&lt;br>
So rasch erhoben von gewalt&amp;rsquo;gen Stürmen,&lt;br>
Wie rasch zerstoben auf der schwanken Bahn.&lt;/p>
&lt;p>Des einen Wiege wird zum Grab des andern,&lt;br>
Doch spur- und namenlos im weiten Reich&lt;br>
Des Meer&amp;rsquo;s versinken sie nach flücht&amp;rsquo;gem Wandern,&lt;br>
Im Werden und Vergeh&amp;rsquo;n einander gleich.&lt;br>
Nicht so die Völker: ihre Namen bleiben&lt;br>
Und künden, welches groß war, welches klein;&lt;br>
Durch That und Wort, mit Schwert und Griffel schreiben&lt;br>
Sie sich in&amp;rsquo;s Merkbuch der Geschichte ein.&lt;/p>
&lt;p>Mein deutsches Volk, wie lang&amp;rsquo; im Büßerhemde&lt;br>
Gingst Du, ein Spott der andern, durch die Welt!&lt;br>
Jetzt rühmt man Dich daheim und in der Fremde&lt;br>
Als größtes Volk, weil Du gesiegt im Feld.&lt;br>
Du schlugst den äußern Feind — : schlag auch den innen:&lt;br>
Zu Boden, und erneue Dich im Geist,&lt;br>
Daß nicht allein nach Deinen Schlachtgewinnern&lt;br>
Als großes Volk Dich die Geschichte preist.&lt;/p>
&lt;p>Es nagt manch gift&amp;rsquo;ger Wurm an Deiner Blüte,&lt;br>
Aus Lastersümpfen steigt der Fäulniß Hauch;&lt;br>
Die Fackel Deines Genius versprühte&lt;br>
Viel edle Glut, erstickt in Dunst und Rauch.&lt;br>
Empor! mein Volk, daß Du in alter Reinheit&lt;br>
Die Tiefe Deines Geistes offenbarst,&lt;br>
Und Dich im Glanze Deiner neuen Einheit&lt;br>
Nicht schlechter zeigst als Du zersplittert warst.&lt;/p></content:encoded></item><item><title>Traum</title><link>https://alexalejandre.com/poetry/german/traum-boettger/</link><pubDate>Thu, 17 May 1849 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/traum-boettger/</guid><description>&lt;p>Jüngst hielt ein wunderlieblich’ Traumgesicht&lt;br>
Mit stillem Ernst die Seele mir umsponnen,&lt;br>
Ich schalt erwacht das helle Tageslicht,&lt;br>
Vor dem so rasch der süße Traum zerronnen.&lt;/p></description><content:encoded>&lt;p>Jüngst hielt ein wunderlieblich’ Traumgesicht&lt;br>
Mit stillem Ernst die Seele mir umsponnen,&lt;br>
Ich schalt erwacht das helle Tageslicht,&lt;br>
Vor dem so rasch der süße Traum zerronnen.&lt;/p>
&lt;p>Geführt ward ich in einen Säulengang,&lt;br>
Wo sich Girlanden um die Pfeiler schlangen,&lt;br>
Wo Wohlgeruch den hohen Raum durchdrang,&lt;br>
Und Vögel Lieder ew’gen Ruhmes sangen.&lt;/p>
&lt;p>Auf hohen Stufen saß ein ernster Greis,&lt;br>
Schlicht wie sein Kleid und fromm wie seine Mimen,&lt;br>
Ihm scholl der Jubel, ihm des Tages Preis.&lt;br>
Ihm suchten Männer rings und Frau’n zu dienen.&lt;/p>
&lt;p>In gold’nen Schalen reichten Jene Wein&lt;br>
Und Früchte dar in silbernen Geschirren,&lt;br>
Hier brachten ihm der Sklaven bunte Reih’n&lt;br>
Der Wünsche Weihrauch und des Segens Myrrhen.&lt;/p>
&lt;p>Und freundlich lächelnd nahm der Greis es hin,&lt;br>
Dank auf der Lippe, Tränen auf der Wange,&lt;br>
Ihm schmolz das Herz von diesem Liebessinn,&lt;br>
Und sein Gefühl verhaucht im Harfenklange.&lt;/p>
&lt;p>Ein Knabe nur lag anteillos am Thron,&lt;br>
Sein Auge schwelgt in himmelblauen Fernen,&lt;br>
Er hörte wohl des Festes Liederton,&lt;br>
Doch seine Seele spielte mit den Sternen.&lt;/p>
&lt;p>Als eine tiefe Pause ward im Saal,&lt;br>
Da sprang er rasch empor und zu dem Alten:&lt;br>
„Herr! der Du mich gesegnet tausendmal,&lt;br>
Der Du zur Weisheit streng mich angehalten —&lt;/p>
&lt;p>Ich habe nicht, womit ich dieses Fest,&lt;br>
Das schönste, weile Dich feiert, kann begrüßen -&lt;br>
Nimm Alles, meiner Güter ganzen Rest“ —&lt;br>
Und eine Rose legt er ihm zu Füßen.&lt;/p>
&lt;p>Der Alte drauf — da schwand der holde Traum,&lt;br>
Und einsam fand ich mich auf meinem Lager,&lt;br>
Und auf mich nieder sah im engen Raum&lt;br>
Die kalte Wirklichkeit so blass und hager.&lt;/p></content:encoded></item><item><title>Vor Ruinen</title><link>https://alexalejandre.com/poetry/german/vor-ruinen/</link><pubDate>Thu, 17 May 1849 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/vor-ruinen/</guid><description>&lt;p>Glorreicher Anblick, wo aus der Zerstörung,&lt;br>
Wo über Tempelschutt und Säulenknauf,&lt;br>
Gestürzt vom Sturm der Zeit und der Empörung&lt;br>
Das Leben blüht im vollsten Zauber auf,&lt;br>
Wo aus dem Moder grüne Halme schießen&lt;br>
Und aus Ruinen junge Rosen sprießen.&lt;br>
Gleich jenen Trümmern liegt auch das Geschlecht,&lt;br>
Das drin gelebt, geliebelt und gezecht;&lt;br>
Doch starb der Mensch auch, blieb die Menschheit doch,&lt;br>
Sie grünt auf ihrer Eltern Gräbern noch&lt;br>
Als ein ermahnend Denkmal künftger Zeit,&lt;br>
Daß Alles der Vergänglichkeit gewecht.&lt;/p></description><content:encoded>&lt;p>Glorreicher Anblick, wo aus der Zerstörung,&lt;br>
Wo über Tempelschutt und Säulenknauf,&lt;br>
Gestürzt vom Sturm der Zeit und der Empörung&lt;br>
Das Leben blüht im vollsten Zauber auf,&lt;br>
Wo aus dem Moder grüne Halme schießen&lt;br>
Und aus Ruinen junge Rosen sprießen.&lt;br>
Gleich jenen Trümmern liegt auch das Geschlecht,&lt;br>
Das drin gelebt, geliebelt und gezecht;&lt;br>
Doch starb der Mensch auch, blieb die Menschheit doch,&lt;br>
Sie grünt auf ihrer Eltern Gräbern noch&lt;br>
Als ein ermahnend Denkmal künftger Zeit,&lt;br>
Daß Alles der Vergänglichkeit gewecht.&lt;/p>
&lt;p>Wo ihre Väter modern, auf dem Schaft&lt;br>
Der moos’gen Säule sitzt in schönster Kraft&lt;br>
Die junge Mutter jetzt, und herzt und hält&lt;br>
An ihrer Brust den größten Schatz der Welt.&lt;br>
Sie säugt und stillt des Kindes lautes Schrein&lt;br>
Und wiegt mit Schlummerliedern sanft es ein;&lt;br>
Erkennt mit Lächeln dann in jedem Zug,&lt;br>
Daß ihres Vaters Antlitz schon ihn trug;&lt;br>
So fühlt im Herzen sie der Mutter Recht,&lt;br>
Den größten Stolz vom weiblichen Geschlecht.&lt;/p>
&lt;p>Und Er — der jetzt in ihrem Schoße liegt,&lt;br>
Voll Lebensluft sich schlummernd an sie schmiegt,&lt;br>
Was wird aus ihm? — Erblickt ihr Auge noch,&lt;br>
Wie er geläutert aus der Leiden Joch&lt;br>
Als Held, als Dichter, tatenkräft’ger Mann&lt;br>
Sich kühn emporschwingt, wie’s ihr Träumen sann?&lt;br>
Wie er die Muttersorgen ihr belohnt,&lt;br>
Vor jedem bittern Leid ihr Alter schont?&lt;br>
O eitles Fragen ! — Sieh die Rose hier,&lt;br>
Sie schlingt sich dankbar um den Knauf als Zier,&lt;br>
Ob auch die Säule selbst vom Sturm zerschmettert&lt;br>
In Trümmern liegt, zerbröckelt und verwettert;&lt;br>
Es blüht im Ruhm des Sohnes dankdurchlodert&lt;br>
Der Mutter Lohn, wenn lang ihr Herz vermodert.&lt;/p></content:encoded></item><item><title>Zwischen Ruinen</title><link>https://alexalejandre.com/poetry/german/zwischen-ruinen-bodenstedt/</link><pubDate>Thu, 17 May 1849 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/zwischen-ruinen-bodenstedt/</guid><description>&lt;p>Ach wandle zwischen alten Burgruinen&lt;br>
Roth von der Abendsonne Glut beschienen,&lt;br>
Die weitum noch auf Wald- und Berghöh&amp;rsquo;n funkelt,&lt;br>
Derweil es unten in der Schlucht schon dunkelt.&lt;/p></description><content:encoded>&lt;p>Ach wandle zwischen alten Burgruinen&lt;br>
Roth von der Abendsonne Glut beschienen,&lt;br>
Die weitum noch auf Wald- und Berghöh&amp;rsquo;n funkelt,&lt;br>
Derweil es unten in der Schlucht schon dunkelt.&lt;/p>
&lt;p>Dort eben pfeilschnell schoß ein Habicht nieder —&lt;br>
Ich sah ihn vorhin hoch die Flügel breiten,&lt;br>
Nach Raub ausspähend — wie in alten Zeiten&lt;br>
Die Ritter dieser Burg — da steigt er wieder&lt;br>
Empor mit seiner Beute, und verschwindet&lt;br>
Fern, wo der Bergwald um die Schlucht sich windet.&lt;/p>
&lt;p>Ich klimme aufwärts über das Gemäuer,&lt;br>
Da sproßt durch morsch Gebröckel frisches Grün,&lt;br>
Und Blumen sprossen aus den Mauerritzen&lt;br>
So glühend roth, als wollten sie das Feuer&lt;br>
Des Abendroths erneu&amp;rsquo;n in ihrem Blühn.&lt;br>
Noch spielt es auf der schlanken Föhren Spitzen&lt;br>
Zum Abschiedsgruß, und schon im Silberkahn&lt;br>
Wiegt sich der Mond im Himmelsocean,&lt;br>
Der Welt zu leuchten wenn der Tag vollbracht.&lt;/p>
&lt;p>Wie feierlich und friedlich naht die Nacht!&lt;br>
Kein Lüftchen regt der Bäume Wipfel — still&lt;br>
Ruht Alles wie im Schlummer schon. Ich will&lt;br>
Nun heimwärts meine Schritte lenken, doch&lt;br>
Mit Geisterhänden bannt mich&amp;rsquo;s immer noch&lt;br>
An diese Mauern, die ein grün Geranke&lt;br>
Umspinnt, wie jetzt mein grübelnder Gedanke.&lt;/p>
&lt;p>Wo sind nun die Geschlechter die hier hausten&lt;br>
Bei Schwertgeklirr und schäumendem Pokale?&lt;br>
Wie viel Jahrhunderte vorüberbrausten,&lt;br>
Die Mauern stehn noch dort vom Rittersaale,&lt;br>
Und auch vom Frauengemach und Burgverließ:&lt;br>
Doch der die starken Mauern gründen hieß,&lt;br>
Wo ist er, und wo sind die nach ihm kamen?&lt;br>
Verweht zu Staub, verschollen selbst die Namen!&lt;/p>
&lt;p>Von Staube kommt der Stein und wird zu Staube&lt;br>
Gleichwie der Mensch, und wird der Zeit zum Raube&lt;br>
Gleichwie der Mensch. Doch fügt sich Stein an Stein&lt;br>
Im Mauerwerk durch Menschenhand allein&lt;br>
Zu festem Bau. Und dennoch überdauern&lt;br>
Den Menschen die von ihm gefügten Mauern,&lt;br>
Als wäre mehr der Topf werth als der Töpfer,&lt;br>
Und das Geschaffne stärker als der Schöpfer.&lt;/p>
&lt;p>Doch nur aus Steinen die des Menschen Odem&lt;br>
Und Geist belebt hat, haucht geweihter Brodem.&lt;br>
Ein Zauber webt um den verlass&amp;rsquo;nen Ort&lt;br>
Wo Menschen wohnten, und wirkt mächtig fort.&lt;/p>
&lt;p>Es eilt der Mensch in unruhvoller Hast&lt;br>
Durch diese Welt von Staub zur Grabesrast.&lt;br>
Das ihm zur Leuchte dient, das Licht im Hirne,&lt;br>
Erkennt und mißt die Bahnen der Gestirne:&lt;br>
Die eig&amp;rsquo;ne Bahn nur kann es nicht erkennen,&lt;br>
Und als des Lebens Ziel den Tod nur nennen.&lt;/p>
&lt;p>Es kommt ein Tag: das Licht wird ausgeblasen&lt;br>
Und seine Hülle deckt der feuchte Rasen.&lt;br>
Woher? wohin? wozu? Du fragst vergebens:&lt;br>
Der Tod erst löst die Räthsel dieses Lebens.&lt;br>
Leb&amp;rsquo; mit Dir selbst und mit der Welt in Frieden,&lt;br>
Und frage nicht was jenseits Dir beschieden!&lt;/p></content:encoded></item><item><title>Es sehnt sich ewig dieser Geist ins Weite</title><link>https://alexalejandre.com/poetry/german/es-sehnt-sich-ewig/</link><pubDate>Wed, 17 May 1837 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/es-sehnt-sich-ewig/</guid><description>&lt;p>Es sehnt sich ewig dieser Geist ins Weite,&lt;br>
Und möchte fürder, immer fürder streben:&lt;br>
Nie könnt ich lang an einer Scholle kleben,&lt;br>
Und hätt ein Eden ich an jeder Seite.&lt;br>
Mein Geist, bewegt von innerlichem Streite,&lt;br>
Empfand so sehr in diesem kurzen Leben,&lt;br>
Wie leicht es ist, die Heimat aufzugeben,&lt;br>
Allein wie schwer, zu finden eine zweite.&lt;br>
Doch wer aus voller Seele haßt das Schlechte,&lt;br>
Auch aus der Heimat wird es ihn verjagen,&lt;br>
Wenn dort verehrt es wird vom Volk der Knechte.&lt;br>
Weit klüger ist&amp;rsquo;s, dem Vaterland entsagen,&lt;br>
Als unter einem kindischen Geschlechte&lt;br>
Das Joch des blinden Pöbelhasses tragen.&lt;/p></description><content:encoded>&lt;p>Es sehnt sich ewig dieser Geist ins Weite,&lt;br>
Und möchte fürder, immer fürder streben:&lt;br>
Nie könnt ich lang an einer Scholle kleben,&lt;br>
Und hätt ein Eden ich an jeder Seite.&lt;br>
Mein Geist, bewegt von innerlichem Streite,&lt;br>
Empfand so sehr in diesem kurzen Leben,&lt;br>
Wie leicht es ist, die Heimat aufzugeben,&lt;br>
Allein wie schwer, zu finden eine zweite.&lt;br>
Doch wer aus voller Seele haßt das Schlechte,&lt;br>
Auch aus der Heimat wird es ihn verjagen,&lt;br>
Wenn dort verehrt es wird vom Volk der Knechte.&lt;br>
Weit klüger ist&amp;rsquo;s, dem Vaterland entsagen,&lt;br>
Als unter einem kindischen Geschlechte&lt;br>
Das Joch des blinden Pöbelhasses tragen.&lt;/p></content:encoded></item><item><title>Sophokles</title><link>https://alexalejandre.com/poetry/german/sophokles/</link><pubDate>Tue, 14 Feb 1826 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/sophokles/</guid><description>&lt;p>Dir ist&amp;rsquo;s, o frommer Sophokles, gelungen,&lt;br>
Den Punkt zu schaun, wo Mensch und Gott sich scheidet,&lt;br>
Und was in ird&amp;rsquo;sche Worte du gekleidet,&lt;br>
Das ward, vom Himmel aus, dir vorgesungen!&lt;/p></description><content:encoded>&lt;p>Dir ist&amp;rsquo;s, o frommer Sophokles, gelungen,&lt;br>
Den Punkt zu schaun, wo Mensch und Gott sich scheidet,&lt;br>
Und was in ird&amp;rsquo;sche Worte du gekleidet,&lt;br>
Das ward, vom Himmel aus, dir vorgesungen!&lt;/p>
&lt;p>Du bist ins Innre dieser Welt gedrungen&lt;br>
Und kennst zugleich, was auf der Fläche weidet:&lt;br>
Was nur ein Menschenbusen hofft und leidet,&lt;br>
Du sprachst es aus mit deinen tausend Zungen!&lt;/p>
&lt;p>Nie bist du kühl zur Nüchternheit versunken,&lt;br>
Du sprühtest in erhabener Verschwendung&lt;br>
Der goldnen Flammen lichte, dichte Funken!&lt;/p>
&lt;p>An dich erging die heil&amp;rsquo;ge, große Sendung,&lt;br>
Du hast den Rausch der Poesie getrunken,&lt;br>
Und schimmerst nun in strahlender Vollendung.&lt;/p></content:encoded></item><item><title>Wer wußte je das Leben recht zu fassen</title><link>https://alexalejandre.com/poetry/german/wer-wusste-je-das-leben/</link><pubDate>Tue, 14 Feb 1826 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/wer-wusste-je-das-leben/</guid><description>&lt;p>Wer wußte je das Leben recht zu fassen,&lt;br>
Wer hat die Hälfte nicht davon verloren&lt;br>
Im Traum, im Fieber, im Gespräch mit Toren,&lt;br>
In Liebesqual, im leeren Zeitverprassen?&lt;/p></description><content:encoded>&lt;p>Wer wußte je das Leben recht zu fassen,&lt;br>
Wer hat die Hälfte nicht davon verloren&lt;br>
Im Traum, im Fieber, im Gespräch mit Toren,&lt;br>
In Liebesqual, im leeren Zeitverprassen?&lt;/p>
&lt;p>Ja, der sogar, der ruhig und gelassen,&lt;br>
Mit dem Bewußtsein, was er soll, geboren,&lt;br>
Frühzeitig einen Lebensgang erkoren,&lt;br>
Muß vor des Lebens Widerspruch erblassen.&lt;/p>
&lt;p>Denn jeder hofft doch, daß das Glück ihm lache,&lt;br>
Allein das Glück, wenn’s wirklich kommt, ertragen,&lt;br>
Ist keines Menschen, wäre Gottes Sache.&lt;/p>
&lt;p>Auch kommt es nie, wir wünschen bloß und wagen:&lt;br>
Dem Schläfer fällt es nimmermehr vom Dache,&lt;br>
Und auch der Läufer wird es nicht erjagen.&lt;/p></content:encoded></item><item><title>Ozymandias</title><link>https://alexalejandre.com/poetry/english/ozymandias/</link><pubDate>Wed, 11 Jan 1826 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/english/ozymandias/</guid><description>&lt;p>I met a traveller from an antique land&lt;br>
Who said: Two vast &amp;amp; trunkless legs of stone&lt;br>
Stand in the desert, near them on the sand&lt;br>
Half sunk, a shattered visage lies, whose frown&lt;br>
And wrinkled lip &amp;amp; sneer of cold command&lt;br>
Tell that its sculptor well those passions read&lt;br>
Which yet survive, stamped on these lifeless things,&lt;br>
The hand that mocked them &amp;amp; the heart that fed&lt;br>
And on the pedestal these words appear:&lt;br>
&amp;ldquo;My name is Ozymandias, King of Kings,&lt;br>
Look on my works, ye Mighty and despair!&amp;rdquo;&lt;br>
No thing beside remains round the decay&lt;br>
Of that colossal wreck, boundless &amp;amp; bare&lt;br>
The lone &amp;amp; level sands stretch far away.&lt;/p></description><content:encoded>&lt;p>I met a traveller from an antique land&lt;br>
Who said: Two vast &amp;amp; trunkless legs of stone&lt;br>
Stand in the desert, near them on the sand&lt;br>
Half sunk, a shattered visage lies, whose frown&lt;br>
And wrinkled lip &amp;amp; sneer of cold command&lt;br>
Tell that its sculptor well those passions read&lt;br>
Which yet survive, stamped on these lifeless things,&lt;br>
The hand that mocked them &amp;amp; the heart that fed&lt;br>
And on the pedestal these words appear:&lt;br>
&amp;ldquo;My name is Ozymandias, King of Kings,&lt;br>
Look on my works, ye Mighty and despair!&amp;rdquo;&lt;br>
No thing beside remains round the decay&lt;br>
Of that colossal wreck, boundless &amp;amp; bare&lt;br>
The lone &amp;amp; level sands stretch far away.&lt;/p></content:encoded></item><item><title>К А. С. Пушкину</title><link>https://alexalejandre.com/poetry/russian/pushkin-pletnyov/</link><pubDate>Tue, 15 Oct 1822 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/russian/pushkin-pletnyov/</guid><description>&lt;p>Я не сержусь на едкий твой упрек:&lt;br>
На нём печать твоей открытой силы;&lt;br>
И, может быть, взыскательный урок&lt;br>
Ослабшие мои возбудит крылы.&lt;br>
Твой гордый гнев, скажу без лишних слов,&lt;br>
Утешнее хвалы простонародной:&lt;br>
Я узнаю судью моих стихов,&lt;br>
А не льстеца с улыбкою холодной.&lt;/p></description><content:encoded>&lt;p>Я не сержусь на едкий твой упрек:&lt;br>
На нём печать твоей открытой силы;&lt;br>
И, может быть, взыскательный урок&lt;br>
Ослабшие мои возбудит крылы.&lt;br>
Твой гордый гнев, скажу без лишних слов,&lt;br>
Утешнее хвалы простонародной:&lt;br>
Я узнаю судью моих стихов,&lt;br>
А не льстеца с улыбкою холодной.&lt;/p>
&lt;p>Притворство прочь: на поприще моем&lt;br>
Я не свершил достойное поэта.&lt;br>
Но мысль моя божественным огнем&lt;br>
В минуты дум не раз была согрета.&lt;br>
В набросанных с небрежностью стихах&lt;br>
Ты не ищи любимых мной созданий:&lt;br>
Они живут в несказанных мечтах;&lt;br>
Я их храню в толпе моих желаний.&lt;/p>
&lt;p>Не вырвешь вдруг из сердца вон забот,&lt;br>
Снедающих бездейственные годы;&lt;br>
Не упредишь судьбы могущей ход,&lt;br>
И до поры не обоймешь свободы:&lt;br>
На мне лежит властительная цепь&lt;br>
Суровых нужд, желаний безнадежных;&lt;br>
Я прохожу уныло жизни степь,&lt;br>
И радуюсь средь радостей ничтожных.&lt;br>
Так вырастет случайно дикий цвет&lt;br>
Под сумраком бессолнечной дубровы&lt;br>
И, теплотой отрадной не согрет,&lt;br>
Не распустись, свой лист роняет новый.&lt;/p>
&lt;p>Минет ли срок изнеможенья сил?&lt;br>
Минет ли срок забот моих унылых?&lt;br>
С каким бы я веселием вступил&lt;br>
На путь трудов, для сердца вечно милых!&lt;br>
Всю жизнь мою я им бы отдал в дар:&lt;br>
Я обнял бы мелькнувшие мне тени,&lt;br>
Их оживил, в них пролил бы свой жар&lt;br>
И кончил дни средь чистых наслаждений.&lt;/p>
&lt;p>Но жизни цепь (ты хладно скажешь мне)&lt;br>
Презрительна для гордого поэта:&lt;br>
Он духом царь в забвенной стороне,&lt;br>
Он сердцем муж в младенческие лета.&lt;br>
Я б думал так; но пренеси меня&lt;br>
В тот край, где всё живет одушевленьем,&lt;br>
Где мыслью, исполненной огня,&lt;br>
Все делятся, как лучшим наслажденьем,&lt;br>
Где верный вкус торжественно взял власть&lt;br>
Над мнением невежества и лести,&lt;br>
Где перед ним молчит слепая страсть,&lt;br>
И дар один идет дорогой чести!&lt;br>
Там рубище и хижина певца&lt;br>
Бесценнее вельможеского злата:&lt;br>
Там из оков для славного венца&lt;br>
Зовут во храм гонимого Торквата.&lt;br>
Но здесь, как здесь бороться с жизнью нам&lt;br>
И пламенно предаться страсти милой,&lt;br>
Где хлад в сердцах к пленительным мечтам,&lt;br>
И дар убит невежеством и силой!&lt;br>
Ужасно зреть, когда сражен судьбой&lt;br>
Любимец Муз и, вместо состраданья,&lt;br>
Коварный смех встречает пред собой,&lt;br>
Торжественный упрек и поруганья.&lt;/p>
&lt;p>Еще бы я в душе бесчувствен был&lt;br>
К ничтожному невежества презренью,&lt;br>
Когда б вполне с друзьями Муз делил&lt;br>
И жребий мой и жажду к песнопенью.&lt;br>
Но я вотще стремлюся к ним душой,&lt;br>
Напрасно жду сердечного участья:&lt;br>
Вдали от них поставлен я судьбой&lt;br>
И волею враждебного мне счастья.&lt;br>
Меж тем, как вслед за днем проходит день,&lt;br>
Мой труд на них следов не налагает,&lt;br>
И медленно с ступени на ступень&lt;br>
В бессилии мой дар переступает.&lt;br>
Невольник дум, невольник гордых Муз&lt;br>
И страстью объятый неразлучной,&lt;br>
Я б утомил взыскательный их вкус&lt;br>
Беседою доверчивости скучной.&lt;br>
К кому прийти от жизни отдохнуть,&lt;br>
Оправиться среди дороги зыбкой,&lt;br>
Без робости вокруг себя взглянуть&lt;br>
И передать с надежною улыбкой&lt;br>
Простую песнь, первоначальный звук&lt;br>
Младой души, согретой первым чувством,&lt;br>
И по струнам движенье робких рук,&lt;br>
Не правимых доверчивым искусством?&lt;br>
Кому сказать: «Искусства в общий круг,&lt;br>
Как братьев, нас навек соединили;&lt;br>
Друг с другом мы и труд свой, и досуг,&lt;br>
И жребий наш с любовью делили;&lt;br>
Их счастьем я счастлив был равно;&lt;br>
В моей тоске я видел их унылых;&lt;br>
Мне в славе их участие дано;&lt;br>
Я буду жить бессмертием мне милых?»&lt;br>
Напрасно жду. С любовью моей&lt;br>
К поэзии, в душе с тоской глубокой,&lt;br>
Быть может, я под бурей грозных дней&lt;br>
Склонюсь к земле, как тополь одинокий.&lt;/p></content:encoded></item><item><title>К Гнедичу</title><link>https://alexalejandre.com/poetry/russian/k-gnedichu/</link><pubDate>Tue, 01 Jan 1822 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/russian/k-gnedichu/</guid><description>&lt;p>Служитель муз и древнего Омера,&lt;br>
Судья и друг поэтов молодых!&lt;br>
К твоим словам в отважном сердце их&lt;br>
Есть тайная, особенная вера.&lt;br>
Она к тебе зовет меня, поэт!&lt;br>
О Гнедич, дай спасительный совет:&lt;br>
Как жить тому, кто любит Аполлона?&lt;br>
Завиден мне счастливый жребий твой:&lt;br>
С какою ты спокойною душой&lt;br>
На высоте опасной Геликона!&lt;/p></description><content:encoded>&lt;p>Служитель муз и древнего Омера,&lt;br>
Судья и друг поэтов молодых!&lt;br>
К твоим словам в отважном сердце их&lt;br>
Есть тайная, особенная вера.&lt;br>
Она к тебе зовет меня, поэт!&lt;br>
О Гнедич, дай спасительный совет:&lt;br>
Как жить тому, кто любит Аполлона?&lt;br>
Завиден мне счастливый жребий твой:&lt;br>
С какою ты спокойною душой&lt;br>
На высоте опасной Геликона!&lt;/p>
&lt;p>Прекрасного поклонник сам и жрец,&lt;br>
Пред божеством своим в мольбе смиренной&lt;br>
Забыл ты свет и суд его пременный,&lt;br>
Ты пренебрег минутный в нём венец,&lt;br>
И отдал труд и жизнь свою потомству.&lt;br>
А я, слепец, всё ощупью брожу&lt;br>
И, рабствуя, страстям моим служу:&lt;br>
То, похвалой плененный, вероломству&lt;br>
Младенчески, как дружбе, отдаюсь,&lt;br>
И милые делю с ним сердца тайны;&lt;br>
То, получив в труде успех случайный,&lt;br>
С отважностью за славою стремлюсь,&lt;br>
И падаю, другой Икар, в пучину;&lt;br>
То, изменив бессмертия мечте,&lt;br>
Ищу любви в бездушной красоте,&lt;br>
И в Грации записываю Фрину.&lt;/p>
&lt;p>Зачем скрывать? В поэзии моей&lt;br>
Останется лишь повесть заблуждений,&lt;br>
Постыдная уму игра страстей,&lt;br>
А не огонь небесных вдохновений.&lt;/p>
&lt;p>Бессилен я владеть своей душой&lt;br>
И с Музою согласно жить одной:&lt;br>
Мне нравится то гул трубы военной,&lt;br>
То нежный звук свирели пастухов,&lt;br>
То лиры звук, в тиши уединенной,&lt;br>
Ласкающий стыдливую любовь.&lt;br>
Решусь с утра Омерова Ахилла&lt;br>
Весь день следить в живых твоих стихах;&lt;br>
Но вдруг Омер забыт: в моих мечтах&lt;br>
Герой Руслан и резвая Людмила.&lt;/p>
&lt;p>Так поутру на пурпурный восток,&lt;br>
Где царь светил является прекрасный,&lt;br>
Порой дитя глядит с улыбкой ясной.&lt;br>
От золота лучей горит поток,&lt;br>
Окрестный лес и дальних гор вершины;&lt;br>
В его глазах чудесные картины:&lt;br>
Но долго ли займет его сей вид?&lt;br>
Невольник чувств, уж он давно бежит&lt;br>
За мотыльком, над ближними цветами&lt;br>
Мелькающим блестящими крылами.&lt;/p>
&lt;p>И Музы мстят неверностью мне&lt;br>
За резвые мои в любви измены.&lt;br>
Как часто глас невидимой Сирены&lt;br>
Мне слышится в безмолвной тишине!&lt;br>
Склоняю слух к пленительному звуку,&lt;br>
И в радости накладываю руку,&lt;br>
Чтоб голос струн с ее мне пеньем слить:&lt;br>
Коварная мгновенно умолкает;&lt;br>
Восторга звук на лире умирает,&lt;br>
И я готов бездушную разбить.&lt;/p>
&lt;p>О, сладкое, святое вдохновенье,&lt;br>
Огонь души и сердца упоенье!&lt;br>
Я чувствовал, я помню этот жар,&lt;br>
Как Муза мне с улыбкой мысль внушала:&lt;br>
Передо мной теперь одни начала,&lt;br>
Погибнувший небесной девы дар.&lt;/p>
&lt;p>Поверишь ли: я часто в грусти тайной&lt;br>
Завидую тому, кто, чуждый Муз,&lt;br>
С беспечностью одной хранит союз,&lt;br>
И век не знал беседы их случайной.&lt;br>
Когда младой художник посетит&lt;br>
Развалины разрушенного града,&lt;br>
Он плачет там: он горестного взгляда&lt;br>
В страдании души не отвратит&lt;br>
От славных сих разбросанных обломков,&lt;br>
Где в каждой он возвышенной черте&lt;br>
Находит дань небесной красоте,&lt;br>
Или урок, священный для потомков:&lt;br>
Так я в немом унынии сижу&lt;br>
Над мыслью, счастливо мне внушенной&lt;br>
И в пламенном стихе изображенной;&lt;br>
Прикованный, я на нее гляжу,&lt;br>
Как на кусок разбитого кумира:&lt;br>
Отброшена безжизненная лира;&lt;br>
Не уловить исчезнувшей мечты,&lt;br>
И не видать мне полной красоты!&lt;/p>
&lt;p>Доступный друг веселью и страданью!&lt;br>
Я всё свое принес к тебе на суд,&lt;br>
Всё, что сулил мне благотворный труд,&lt;br>
Что я вверял немому упованью;&lt;br>
Я разделил все радости с тобой&lt;br>
И муки все в моей суровой доле:&lt;br>
Скажи, еще ль бороться мне с судьбой,&lt;br>
Иль позабыть обманов сладких поле?&lt;br>
Быть может, я вступил средь детских лет&lt;br>
На поприще поэзии ошибкой:&lt;br>
Как друг, скажи мне с тихою улыбкой:&lt;br>
«Сними себя венок, ты не поэт!»&lt;/p></content:encoded></item><item><title>Батюшков из Рима</title><link>https://alexalejandre.com/poetry/russian/batyushkov-iz-rima/</link><pubDate>Mon, 01 Jan 1821 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/russian/batyushkov-iz-rima/</guid><description>&lt;p>Напрасно — ветреный поэт —&lt;br>
Я вас покинул, други,&lt;br>
Забыв утехи юных лет&lt;br>
И милые досуги!&lt;br>
Напрасно из страны отцов&lt;br>
Летел мечтой крылатой&lt;br>
В отчизну пламенных певцов&lt;br>
Петрарки и Торквато!&lt;/p></description><content:encoded>&lt;p>Напрасно — ветреный поэт —&lt;br>
Я вас покинул, други,&lt;br>
Забыв утехи юных лет&lt;br>
И милые досуги!&lt;br>
Напрасно из страны отцов&lt;br>
Летел мечтой крылатой&lt;br>
В отчизну пламенных певцов&lt;br>
Петрарки и Торквато!&lt;/p>
&lt;p>Напрасно по лугам и брожу&lt;br>
Авзонии прелестной&lt;br>
И в сердце радости бужу,&lt;br>
Смотря на свод небесный!&lt;br>
Ах! неба чуждого красы&lt;br>
Для странника не милы;&lt;br>
Не веселы забав часы,&lt;br>
И радости унылы!&lt;/p>
&lt;p>Я слышу нежный звук речей&lt;br>
И милые приветы;&lt;br>
Я вижу голубых очей&lt;br>
Знакомые обеты:&lt;br>
Напрасно нега и любовь&lt;br>
Сулят мне упоенья—&lt;br>
Хладеет пламенная кровь&lt;br>
И вянут наслажденья.&lt;/p>
&lt;p>Веселья и любви певец,&lt;br>
Я позабыл забавы;&lt;br>
Я снял свой миртовый венец&lt;br>
И дни влачу без славы.&lt;br>
Порой на Тибр склонивши взор,&lt;br>
Иль встретив Капитолий,&lt;br>
Я слышу дружеский укор,&lt;br>
Стыжусь забвенной доли&amp;hellip;&lt;/p>
&lt;p>Забьется сердце для войны,&lt;br>
Для прежней славной жизни—&lt;br>
И я из дальней стороны&lt;br>
Лечу в края отчизны!&lt;br>
Когда я возвращуся к вам,&lt;br>
Отечески Пенаты,&lt;br>
И снова жрец ваш, фимиам&lt;br>
Зажгу средь низкой хаты?&lt;/p>
&lt;p>Храните меч забвенный мой&lt;br>
С цевницей одинокой!&lt;br>
Я весь дышу еще войной&lt;br>
И жизнью высокой.&lt;br>
А вы, о милые друзья,&lt;br>
Простите ли поэта?&lt;br>
Он видит чуждые поля&lt;br>
И бродит без привета.&lt;/p>
&lt;p>Как петь ему в стране чужой?&lt;br>
Узрит поля родные—&lt;br>
И тронет в радости немой&lt;br>
Он струны золотые.&lt;/p></content:encoded></item><item><title>Руслан и Людмила</title><link>https://alexalejandre.com/poetry/russian/ruslan-i-lyudmila/</link><pubDate>Wed, 12 Apr 1820 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/russian/ruslan-i-lyudmila/</guid><description>&lt;h3 id="посвящение">Посвящение&lt;/h3>
&lt;p>&lt;em>Для вас, души моей царицы,&lt;br>
Красавицы, для вас одних&lt;br>
Времён минувших небылицы,&lt;br>
В часы досугов золотых,&lt;br>
Под шёпот старины болтливой,&lt;br>
Рукою верной я писал;&lt;br>
Примите ж вы мой труд игривый!&lt;br>
Ничьих не требуя похвал,&lt;br>
Счастлив уж я надеждой сладкой,&lt;br>
Что дева с трепетом любви&lt;br>
Посмотрит, может быть украдкой,&lt;br>
На песни грешные мои.&lt;/em>&lt;/p></description><content:encoded>&lt;h3 id="посвящение">Посвящение&lt;/h3>
&lt;p>&lt;em>Для вас, души моей царицы,&lt;br>
Красавицы, для вас одних&lt;br>
Времён минувших небылицы,&lt;br>
В часы досугов золотых,&lt;br>
Под шёпот старины болтливой,&lt;br>
Рукою верной я писал;&lt;br>
Примите ж вы мой труд игривый!&lt;br>
Ничьих не требуя похвал,&lt;br>
Счастлив уж я надеждой сладкой,&lt;br>
Что дева с трепетом любви&lt;br>
Посмотрит, может быть украдкой,&lt;br>
На песни грешные мои.&lt;/em>&lt;/p>
&lt;h3 id="песнь-первая">Песнь первая&lt;/h3>
&lt;p>У лукоморья дуб зелёный;&lt;br>
Златая цепь на дубе том:&lt;br>
И днём и ночью кот учёный&lt;br>
Всё ходит по цепи кругом;&lt;br>
Идёт направо — песнь заводит,&lt;br>
Налево — сказку говорит.&lt;/p>
&lt;p>Там чудеса: там леший бродит,&lt;br>
Русалка на ветвях сидит;&lt;br>
Там на неведомых дорожках&lt;br>
Следы невиданных зверей;&lt;br>
Избушка там на курьих ножках&lt;br>
Стоит без окон, без дверей;&lt;br>
Там лес и дол видений полны;&lt;br>
Там о заре прихлынут волны&lt;br>
На брег песчаный и пустой,&lt;br>
И тридцать витязей прекрасных&lt;br>
Чредой из вод выходят ясных,&lt;br>
И с ними дядька их морской;&lt;br>
Там королевич мимоходом&lt;br>
Пленяет грозного царя;&lt;br>
Там в облаках перед народом&lt;br>
Через леса, через моря&lt;br>
Колдун несёт богатыря;&lt;br>
В темнице там царевна тужит,&lt;br>
А бурый волк ей верно служит;&lt;br>
Там ступа с Бабою Ягой&lt;br>
Идёт, бредёт сама собой;&lt;br>
Там царь Кащей над златом чахнет;&lt;br>
Там русский дух… там Русью пахнет!&lt;br>
И там я был, и мёд я пил;&lt;br>
У моря видел дуб зелёный;&lt;br>
Под ним сидел, и кот учёный&lt;br>
Свои мне сказки говорил.&lt;br>
Одну я помню: сказку эту&lt;br>
Поведаю теперь я свету…&lt;/p>
&lt;p>Дела давно минувших дней,&lt;br>
Преданья старины глубокой.&lt;/p>
&lt;p>В толпе могучих сыновей,&lt;br>
С друзьями, в гриднице высокой&lt;br>
Владимир-солнце пировал;&lt;br>
Меньшую дочь он выдавал&lt;br>
За князя храброго Руслана&lt;br>
И мёд из тяжкого стакана&lt;br>
За их здоровье выпивал.&lt;br>
Не скоро ели предки наши,&lt;br>
Не скоро двигались кругом&lt;br>
Ковши, серебряные чаши&lt;br>
С кипящим пивом и вином.&lt;br>
Они веселье в сердце лили,&lt;br>
Шипела пена по краям,&lt;br>
Их важно чашники носили&lt;br>
И низко кланялись гостям.&lt;/p>
&lt;p>Слилися речи в шум невнятный;&lt;br>
Жужжит гостей весёлый круг;&lt;br>
Но вдруг раздался глас приятный&lt;br>
И звонких гуслей беглый звук;&lt;br>
Все смолкли, слушают Баяна:&lt;br>
И славит сладостный певец&lt;br>
Людмилу-прелесть, и Руслана,&lt;br>
И Лелем свитый им венец.&lt;/p>
&lt;p>Но, страстью пылкой утомлённый,&lt;br>
Не ест, не пьёт Руслан влюблённый;&lt;br>
На друга милого глядит,&lt;br>
Вздыхает, сердится, горит&lt;br>
И, щипля ус от нетерпенья,&lt;br>
Считает каждые мгновенья.&lt;br>
В унынье, с пасмурным челом,&lt;br>
За шумным, свадебным столом&lt;br>
Сидят три витязя младые;&lt;br>
Безмолвны, за ковшом пустым,&lt;br>
Забыты кубки круговые,&lt;br>
И брашна неприятны им;&lt;br>
Не слышат вещего Баяна;&lt;br>
Потупили смущённый взгляд:&lt;br>
То три соперника Руслана;&lt;br>
В душе несчастные таят&lt;br>
Любви и ненависти яд.&lt;br>
Один — Рогдай, воитель смелый,&lt;br>
Мечом раздвинувший пределы&lt;br>
Богатых киевских полей;&lt;br>
Другой — Фарлаф, крикун надменный,&lt;br>
В пирах никем не побежденный,&lt;br>
Но воин скромный средь мечей;&lt;br>
Последний, полный страстной думы,&lt;br>
Младой хазарский хан Ратмир:&lt;br>
Все трое бледны и угрюмы,&lt;br>
И пир весёлый им не в пир.&lt;/p>
&lt;p>Вот кончен он; встают рядами,&lt;br>
Смешались шумными толпами,&lt;br>
И все глядят на молодых:&lt;br>
Невеста очи опустила,&lt;br>
Как будто сердцем приуныла,&lt;br>
И светел радостный жених.&lt;br>
Но тень объемлет всю природу,&lt;br>
Уж близко к полночи глухой;&lt;br>
Бояре, задремав от мёду,&lt;br>
С поклоном убрались домой.&lt;br>
Жених в восторге, в упоенье:&lt;br>
Ласкает он в воображенье&lt;br>
Стыдливой девы красоту;&lt;br>
Но с тайным, грустным умиленьем&lt;br>
Великий князь благословеньем&lt;br>
Дарует юную чету.&lt;/p>
&lt;p>И вот невесту молодую&lt;br>
Ведут на брачную постель;&lt;br>
Огни погасли… и ночную&lt;br>
Лампаду зажигает Лель.&lt;br>
Свершились милые надежды,&lt;br>
Любви готовятся дары;&lt;br>
Падут ревнивые одежды&lt;br>
На цареградские ковры…&lt;br>
Вы слышите ль влюбленный шёпот,&lt;br>
И поцелуев сладкий звук,&lt;br>
И прерывающийся ропот&lt;br>
Последней робости?.. Супруг&lt;br>
Восторги чувствует заране;&lt;br>
И вот они настали… Вдруг&lt;br>
Гром грянул, свет блеснул в тумане,&lt;br>
Лампада гаснет, дым бежит,&lt;br>
Кругом всё смерклось, всё дрожит,&lt;br>
И замерла душа в Руслане…&lt;br>
Всё смолкло. В грозной тишине&lt;br>
Раздался дважды голос странный,&lt;br>
И кто-то в дымной глубине&lt;br>
Взвился чернее мглы туманной…&lt;br>
И снова терем пуст и тих;&lt;br>
Встаёт испуганный жених,&lt;br>
С лица катится пот остылый;&lt;br>
Трепеща, хладною рукой&lt;br>
Он вопрошает мрак немой…&lt;br>
О горе: нет подруги милой!&lt;br>
Хватает воздух он пустой;&lt;br>
Людмилы нет во тьме густой,&lt;br>
Похищена безвестной силой.&lt;/p>
&lt;p>Ах, если мученик любви&lt;br>
Страдает страстью безнадежно,&lt;br>
Хоть грустно жить, друзья мои,&lt;br>
Однако жить еще возможно.&lt;br>
Но после долгих, долгих лет&lt;br>
Обнять влюбленную подругу,&lt;br>
Желаний, слез, тоски предмет,&lt;br>
И вдруг минутную супругу&lt;br>
Навек утратить… о друзья,&lt;br>
Конечно лучше б умер я!&lt;/p>
&lt;p>Однако жив Руслан несчастный.&lt;br>
Но что сказал великий князь?&lt;br>
Сраженный вдруг молвой ужасной,&lt;br>
На зятя гневом распалясь,&lt;br>
Его и двор он созывает:&lt;br>
«Где, где Людмила?» — вопрошает&lt;br>
С ужасным, пламенным челом.&lt;br>
Руслан не слышит. «Дети, други!&lt;br>
Я помню прежние заслуги:&lt;br>
О, сжальтесь вы над стариком!&lt;br>
Скажите, кто из вас согласен&lt;br>
Скакать за дочерью моей?&lt;br>
Чей подвиг будет не напрасен,&lt;br>
Тому — терзайся, плачь, злодей!&lt;br>
Не мог сберечь жены своей! —&lt;br>
Тому я дам ее в супруги&lt;br>
С полцарством прадедов моих.&lt;br>
Кто ж вызовется, дети, други?..»&lt;br>
«Я!» — молвил горестный жених.&lt;br>
«Я! я!» — воскликнули с Рогдаем&lt;br>
Фарлаф и радостный Ратмир:&lt;br>
«Сейчас коней своих седлаем;&lt;br>
Мы рады весь изъездить мир.&lt;br>
Отец наш, не продлим разлуки;&lt;br>
Не бойся: едем за княжной».&lt;br>
И с благодарностью немой&lt;br>
В слезах к ним простирает руки&lt;br>
Старик, измученный тоской.&lt;/p>
&lt;p>Все четверо выходят вместе;&lt;br>
Руслан уныньем как убит;&lt;br>
Мысль о потерянной невесте&lt;br>
Его терзает и мертвит.&lt;br>
Садятся на коней ретивых;&lt;br>
Вдоль берегов Днепра счастливых&lt;br>
Летят в клубящейся пыли;&lt;br>
Уже скрываются вдали;&lt;br>
Уж всадников не видно боле…&lt;br>
Но долго всё еще глядит&lt;br>
Великий князь в пустое поле&lt;br>
И думой им вослед летит.&lt;/p>
&lt;p>Руслан томился молчаливо,&lt;br>
И смысл и память потеряв.&lt;br>
Через плечо глядя спесиво&lt;br>
И важно подбочась, Фарлаф,&lt;br>
Надувшись, ехал за Русланом.&lt;br>
Он говорит: «Насилу я&lt;br>
На волю вырвался, друзья!&lt;br>
Ну, скоро ль встречусь с великаном?&lt;br>
Уж то-то крови будет течь,&lt;br>
Уж то-то жертв любви ревнивой!&lt;br>
Повеселись, мой верный меч,&lt;br>
Повеселись, мой конь ретивый!»&lt;/p>
&lt;p>Хазарский хан, в уме своем&lt;br>
Уже Людмилу обнимая,&lt;br>
Едва не пляшет над седлом;&lt;br>
В нем кровь играет молодая,&lt;br>
Огня надежды полон взор:&lt;br>
То скачет он во весь опор,&lt;br>
То дразнит бегуна лихого,&lt;br>
Кружит, подъемлет на дыбы&lt;br>
Иль дерзко мчит на холмы снова.&lt;/p>
&lt;p>Рогдай угрюм, молчит — ни слова…&lt;br>
Страшась неведомой судьбы&lt;br>
И мучась ревностью напрасной,&lt;br>
Всех больше беспокоен он,&lt;br>
И часто взор его ужасный&lt;br>
На князя мрачно устремлен.&lt;/p>
&lt;p>Соперники одной дорогой&lt;br>
Все вместе едут целый день.&lt;br>
Днепра стал темен брег отлогий;&lt;br>
С востока льется ночи тень;&lt;br>
Туманы над Днепром глубоким;&lt;br>
Пора коням их отдохнуть.&lt;br>
Вот под горой путем широким&lt;br>
Широкий пересекся путь.&lt;br>
«Разъедемся, пора! — сказали, —&lt;br>
Безвестной вверимся судьбе».&lt;br>
И каждый конь, не чуя стали,&lt;br>
По воле путь избрал себе.&lt;/p>
&lt;p>Что делаешь, Руслан несчастный,&lt;br>
Один в пустынной тишине?&lt;br>
Людмилу, свадьбы день ужасный,&lt;br>
Всё, мнится, видел ты во сне.&lt;br>
На брови медный шлем надвинув,&lt;br>
Из мощных рук узду покинув,&lt;br>
Ты шагом едешь меж полей,&lt;br>
И медленно в душе твоей&lt;br>
Надежда гибнет, гаснет вера.&lt;/p>
&lt;p>Но вдруг пред витязем пещера;&lt;br>
В пещере свет. Он прямо к ней&lt;br>
Идет под дремлющие своды,&lt;br>
Ровесники самой природы.&lt;br>
Вошел с уныньем: что же зрит?&lt;br>
В пещере старец; ясный вид,&lt;br>
Спокойный взор, брада седая;&lt;br>
Лампада перед ним горит;&lt;br>
За древней книгой он сидит,&lt;br>
Ее внимательно читая.&lt;br>
«Добро пожаловать, мой сын! —&lt;br>
Сказал с улыбкой он Руслану. —&lt;br>
Уж двадцать лет я здесь один&lt;br>
Во мраке старой жизни вяну;&lt;br>
Но наконец дождался дня,&lt;br>
Давно предвиденного мною.&lt;br>
Мы вместе сведены судьбою;&lt;br>
Садись и выслушай меня.&lt;br>
Руслан, лишился ты Людмилы;&lt;br>
Твой твердый дух теряет силы;&lt;br>
Но зла промчится быстрый миг:&lt;br>
На время рок тебя постиг.&lt;br>
С надеждой, верою веселой&lt;br>
Иди на всё, не унывай;&lt;br>
Вперед! мечом и грудью смелой&lt;br>
Свой путь на полночь пробивай.&lt;/p>
&lt;p>Узнай, Руслан: твой оскорбитель&lt;br>
Волшебник страшный Черномор,&lt;br>
Красавиц давний похититель,&lt;br>
Полнощных обладатель гор.&lt;br>
Еще ничей в его обитель&lt;br>
Не проникал доныне взор;&lt;br>
Но ты, злых козней истребитель,&lt;br>
В нее ты вступишь, и злодей&lt;br>
Погибнет от руки твоей.&lt;br>
Тебе сказать не должен боле:&lt;br>
Судьба твоих грядущих дней,&lt;br>
Мой сын, в твоей отныне воле».&lt;/p>
&lt;p>Наш витязь старцу пал к ногам&lt;br>
И в радости лобзает руку.&lt;br>
Светлеет мир его очам,&lt;br>
И сердце позабыло муку.&lt;br>
Вновь ожил он; и вдруг опять&lt;br>
На вспыхнувшем лице кручина…&lt;br>
«Ясна тоски твоей причина;&lt;br>
Но грусть не трудно разогнать, —&lt;br>
Сказал старик, — тебе ужасна&lt;br>
Любовь седого колдуна;&lt;br>
Спокойся, знай: она напрасна&lt;br>
И юной деве не страшна.&lt;br>
Он звезды сводит с небосклона,&lt;br>
Он свистнет — задрожит луна;&lt;br>
Но против времени закона&lt;br>
Его наука не сильна.&lt;br>
Ревнивый, трепетный хранитель&lt;br>
Замков безжалостных дверей,&lt;br>
Он только немощный мучитель&lt;br>
Прелестной пленницы своей.&lt;br>
Вокруг нее он молча бродит,&lt;br>
Клянет жестокий жребий свой…&lt;br>
Но, добрый витязь, день проходит,&lt;br>
А нужен для тебя покой».&lt;/p>
&lt;p>Руслан на мягкий мох ложится&lt;br>
Пред умирающим огнем;&lt;br>
Он ищет позабыться сном,&lt;br>
Вздыхает, медленно вертится…&lt;br>
Напрасно! Витязь наконец:&lt;br>
«Не спится что-то, мой отец!&lt;br>
Что делать: болен я душою,&lt;br>
И сон не в сон, как тошно жить.&lt;br>
Позволь мне сердце освежить&lt;br>
Твоей беседою святою.&lt;br>
Прости мне дерзостный вопрос.&lt;br>
Откройся: кто ты, благодатный,&lt;br>
Судьбы наперсник непонятный?&lt;br>
В пустыню кто тебя занес?»&lt;/p>
&lt;p>Вздохнув с улыбкою печальной,&lt;br>
Старик в ответ: «Любезный сын,&lt;br>
Уж я забыл отчизны дальной&lt;br>
Угрюмый край. Природный финн,&lt;br>
В долинах, нам одним известных,&lt;br>
Гоняя стадо сел окрестных,&lt;br>
В беспечной юности я знал&lt;br>
Одни дремучие дубравы,&lt;br>
Ручьи, пещеры наших скал&lt;br>
Да дикой бедности забавы.&lt;br>
Но жить в отрадной тишине&lt;br>
Дано не долго было мне.&lt;/p>
&lt;p>Тогда близ нашего селенья,&lt;br>
Как милый цвет уединенья,&lt;br>
Жила Наина. Меж подруг&lt;br>
Она гремела красотою.&lt;br>
Однажды утренней порою&lt;br>
Свои стада на темный луг&lt;br>
Я гнал, волынку надувая;&lt;br>
Передо мной шумел поток.&lt;br>
Одна, красавица младая&lt;br>
На берегу плела венок.&lt;br>
Меня влекла моя судьбина…&lt;br>
Ах, витязь, то была Наина!&lt;br>
Я к ней — и пламень роковой&lt;br>
За дерзкий взор мне был наградой,&lt;br>
И я любовь узнал душой&lt;br>
С ее небесною отрадой,&lt;br>
С ее мучительной тоской.&lt;/p>
&lt;p>Умчалась года половина;&lt;br>
Я с трепетом открылся ей,&lt;br>
Сказал: люблю тебя, Наина.&lt;br>
Но робкой горести моей&lt;br>
Наина с гордостью внимала,&lt;br>
Лишь прелести свои любя,&lt;br>
И равнодушно отвечала:&lt;br>
„Пастух, я не люблю тебя!“&lt;/p>
&lt;p>И всё мне дико, мрачно стало:&lt;br>
Родная куща, тень дубров,&lt;br>
Веселы игры пастухов —&lt;br>
Ничто тоски не утешало.&lt;br>
В уныньи сердце сохло, вяло.&lt;br>
И наконец задумал я&lt;br>
Оставить финские поля;&lt;br>
Морей неверные пучины&lt;br>
С дружиной братской переплыть&lt;br>
И бранной славой заслужить&lt;br>
Вниманье гордое Наины.&lt;br>
Я вызвал смелых рыбаков&lt;br>
Искать опасностей и злата.&lt;br>
Впервые тихий край отцов&lt;br>
Услышал бранный звук булата&lt;br>
И шум немирных челноков.&lt;br>
Я вдаль уплыл, надежды полный,&lt;br>
С толпой бесстрашных земляков;&lt;br>
Мы десять лет снега и волны&lt;br>
Багрили кровию врагов.&lt;br>
Молва неслась: цари чужбины&lt;br>
Страшились дерзости моей;&lt;br>
Их горделивые дружины&lt;br>
Бежали северных мечей.&lt;br>
Мы весело, мы грозно бились,&lt;br>
Делили дани и дары,&lt;br>
И с побежденными садились&lt;br>
За дружелюбные пиры.&lt;br>
Но сердце, полное Наиной,&lt;br>
Под шумом битвы и пиров,&lt;br>
Томилось тайною кручиной,&lt;br>
Искало финских берегов.&lt;br>
Пора домой, сказал я, други!&lt;br>
Повесим праздные кольчуги&lt;br>
Под сенью хижины родной.&lt;br>
Сказал — и весла зашумели;&lt;br>
И, страх оставя за собой,&lt;br>
В залив отчизны дорогой&lt;br>
Мы с гордой радостью влетели.&lt;/p>
&lt;p>Сбылись давнишние мечты,&lt;br>
Сбылися пылкие желанья!&lt;br>
Минута сладкого свиданья,&lt;br>
И для меня блеснула ты!&lt;br>
К ногам красавицы надменной&lt;br>
Принес я меч окровавленный,&lt;br>
Кораллы, злато и жемчуг;&lt;br>
Пред нею, страстью упоенный,&lt;br>
Безмолвным роем окруженный&lt;br>
Ее завистливых подруг,&lt;br>
Стоял я пленником послушным;&lt;br>
Но дева скрылась от меня,&lt;br>
Примолвя с видом равнодушным:&lt;br>
„Герой, я не люблю тебя!“&lt;/p>
&lt;p>К чему рассказывать, мой сын,&lt;br>
Чего пересказать нет силы?&lt;br>
Ах, и теперь один, один,&lt;br>
Душой уснув, в дверях могилы,&lt;br>
Я помню горесть, и порой,&lt;br>
Как о минувшем мысль родится,&lt;br>
По бороде моей седой&lt;br>
Слеза тяжелая катится.&lt;/p>
&lt;p>Но слушай: в родине моей&lt;br>
Между пустынных рыбарей&lt;br>
Наука дивная таится.&lt;br>
Под кровом вечной тишины,&lt;br>
Среди лесов, в глуши далекой&lt;br>
Живут седые колдуны;&lt;br>
К предметам мудрости высокой&lt;br>
Все мысли их устремлены;&lt;br>
Все слышит голос их ужасный,&lt;br>
Что было и что будет вновь,&lt;br>
И грозной воле их подвластны&lt;br>
И гроб и самая любовь.&lt;/p>
&lt;p>И я, любви искатель жадный,&lt;br>
Решился в грусти безотрадной&lt;br>
Наину чарами привлечь&lt;br>
И в гордом сердце девы хладной&lt;br>
Любовь волшебствами зажечь.&lt;br>
Спешил в объятия свободы,&lt;br>
В уединенный мрак лесов;&lt;br>
И там, в ученье колдунов,&lt;br>
Провел невидимые годы.&lt;br>
Настал давно желанный миг,&lt;br>
И тайну страшную природы&lt;br>
Я светлой мыслию постиг:&lt;br>
Узнал я силу заклинаньям.&lt;br>
Венец любви, венец желаньям!&lt;br>
Теперь, Наина, ты моя!&lt;br>
Победа наша, думал я.&lt;br>
Но в самом деле победитель&lt;br>
Был рок, упорный мой гонитель.&lt;/p>
&lt;p>В мечтах надежды молодой,&lt;br>
В восторге пылкого желанья,&lt;br>
Творю поспешно заклинанья,&lt;br>
Зову духов — и в тьме лесной&lt;br>
Стрела промчалась громовая,&lt;br>
Волшебный вихорь поднял вой,&lt;br>
Земля вздрогнула под ногой…&lt;br>
И вдруг сидит передо мной&lt;br>
Старушка дряхлая, седая,&lt;br>
Глазами впалыми сверкая,&lt;br>
С горбом, с трясучей головой,&lt;br>
Печальной ветхости картина.&lt;br>
Ах, витязь, то была Наина!..&lt;br>
Я ужаснулся и молчал,&lt;br>
Глазами страшный призрак мерил,&lt;br>
В сомненье всё еще не верил&lt;br>
И вдруг заплакал, закричал:&lt;br>
„Возможно ль! ах, Наина, ты ли!&lt;br>
Наина, где твоя краса?&lt;br>
Скажи, ужели небеса&lt;br>
Тебя так страшно изменили?&lt;br>
Скажи, давно ль, оставя свет,&lt;br>
Расстался я с душой и с милой?&lt;br>
Давно ли?..“ „Ровно сорок лет, —&lt;br>
Был девы роковой ответ, —&lt;br>
Сегодня семьдесят мне било.&lt;br>
Что делать, — мне пищит она, —&lt;br>
Толпою годы пролетели.&lt;br>
Прошла моя, твоя весна —&lt;br>
Мы оба постареть успели.&lt;br>
Но, друг, послушай: не беда&lt;br>
Неверной младости утрата.&lt;br>
Конечно, я теперь седа,&lt;br>
Немножко, может быть, горбата;&lt;br>
Не то, что в старину была,&lt;br>
Не так жива, не так мила;&lt;br>
Зато (прибавила болтунья)&lt;br>
Открою тайну: я колдунья!“&lt;/p>
&lt;p>И было в самом деле так.&lt;br>
Немой, недвижный перед нею,&lt;br>
Я совершенный был дурак&lt;br>
Со всей премудростью моею.&lt;/p>
&lt;p>Но вот ужасно: колдовство&lt;br>
Вполне свершилось по несчастью.&lt;br>
Мое седое божество&lt;br>
Ко мне пылало новой страстью.&lt;br>
Скривив улыбкой страшный рот,&lt;br>
Могильным голосом урод&lt;br>
Бормочет мне любви признанье.&lt;br>
Вообрази мое страданье!&lt;br>
Я трепетал, потупя взор;&lt;br>
Она сквозь кашель продолжала&lt;br>
Тяжелый, страстный разговор:&lt;br>
„Так, сердце я теперь узнала;&lt;br>
Я вижу, верный друг, оно&lt;br>
Для нежной страсти рождено;&lt;br>
Проснулись чувства, я сгораю,&lt;br>
Томлюсь желаньями любви…&lt;br>
Приди в объятия мои…&lt;br>
О милый, милый! умираю…“&lt;/p>
&lt;p>И между тем она, Руслан,&lt;br>
Мигала томными глазами;&lt;br>
И между тем за мой кафтан&lt;br>
Держалась тощими руками;&lt;br>
И между тем — я обмирал,&lt;br>
От ужаса зажмуря очи;&lt;br>
И вдруг терпеть не стало мочи;&lt;br>
Я с криком вырвался, бежал.&lt;br>
Она вослед: „О, недостойный!&lt;br>
Ты возмутил мой век спокойный,&lt;br>
Невинной девы ясны дни!&lt;br>
Добился ты любви Наины,&lt;br>
И презираешь — вот мужчины!&lt;br>
Изменой дышат все они!&lt;br>
Увы, сама себя вини;&lt;br>
Он обольстил меня, несчастный!&lt;br>
Я отдалась любови страстной…&lt;br>
Изменник, изверг! о позор!&lt;br>
Но трепещи, девичий вор!“&lt;/p>
&lt;p>Так мы расстались. С этих пор&lt;br>
Живу в моем уединенье&lt;br>
С разочарованной душой;&lt;br>
И в мире старцу утешенье&lt;br>
Природа, мудрость и покой.&lt;br>
Уже зовет меня могила;&lt;br>
Но чувства прежние свои&lt;br>
Еще старушка не забыла&lt;br>
И пламя поздное любви&lt;br>
С досады в злобу превратила.&lt;br>
Душою черной зло любя,&lt;br>
Колдунья старая, конечно,&lt;br>
Возненавидит и тебя;&lt;br>
Но горе на земле не вечно».&lt;/p>
&lt;p>Наш витязь с жадностью внимал&lt;br>
Рассказы старца; ясны очи&lt;br>
Дремотой легкой не смыкал&lt;br>
И тихого полета ночи&lt;br>
В глубокой думе не слыхал.&lt;br>
Но день блистает лучезарный…&lt;br>
Со вздохом витязь благодарный&lt;br>
Объемлет старца-колдуна;&lt;br>
Душа надеждою полна;&lt;br>
Выходит вон. Ногами стиснул&lt;br>
Руслан заржавшего коня,&lt;br>
В седле оправился, присвистнул.&lt;br>
«Отец мой, не оставь меня».&lt;br>
И скачет по пустому лугу.&lt;br>
Седой мудрец младому другу&lt;br>
Кричит вослед: «Счастливый путь!&lt;br>
Прости, люби свою супругу,&lt;br>
Советов старца не забудь!»&lt;/p>
&lt;h3 id="песнь-вторая">Песнь вторая&lt;/h3>
&lt;p>Соперники в искусстве брани,&lt;br>
Не знайте мира меж собой;&lt;br>
Несите мрачной славе дани&lt;br>
И упивайтеся враждой!&lt;br>
Пусть мир пред вами цепенеет,&lt;br>
Дивяся грозным торжествам:&lt;br>
Никто о вас не пожалеет,&lt;br>
Никто не помешает вам.&lt;br>
Соперники другого рода,&lt;br>
Вы, рыцари парнасских гор,&lt;br>
Старайтесь не смешить народа&lt;br>
Нескромным шумом ваших ссор;&lt;br>
Бранитесь — только осторожно.&lt;br>
Но вы, соперники в любви,&lt;br>
Живите дружно, если можно!&lt;br>
Поверьте мне, друзья мои:&lt;br>
Кому судьбою непременной&lt;br>
Девичье сердце суждено,&lt;br>
Тот будет мил назло вселенной;&lt;br>
Сердиться глупо и грешно.&lt;/p>
&lt;p>Когда Рогдай неукротимый,&lt;br>
Глухим предчувствием томимый,&lt;br>
Оставя спутников своих,&lt;br>
Пустился в край уединенный&lt;br>
И ехал меж пустынь лесных,&lt;br>
В глубоку думу погруженный —&lt;br>
Злой дух тревожил и смущал&lt;br>
Его тоскующую душу,&lt;br>
И витязь пасмурный шептал:&lt;br>
«Убью!.. преграды все разрушу…&lt;br>
Руслан!.. узнаешь ты меня…&lt;br>
Теперь-то девица поплачет…»&lt;br>
И вдруг, поворотив коня,&lt;br>
Во весь опор назад он скачет.&lt;/p>
&lt;p>В то время доблестный Фарлаф,&lt;br>
Всё утро сладко продремав,&lt;br>
Укрывшись от лучей полдневных,&lt;br>
У ручейка, наедине,&lt;br>
Для подкрепленья сил душевных,&lt;br>
Обедал в мирной тишине.&lt;br>
Как вдруг он видит: кто-то в поле,&lt;br>
Как буря, мчится на коне;&lt;br>
И, времени не тратя боле,&lt;br>
Фарлаф, покинув свой обед,&lt;br>
Копье, кольчугу, шлем, перчатки,&lt;br>
Вскочил в седло и без оглядки&lt;br>
Летит — а тот за ним вослед.&lt;br>
«Остановись, беглец бесчестный! —&lt;br>
Кричит Фарлафу неизвестный. —&lt;br>
Презренный, дай себя догнать!&lt;br>
Дай голову с тебя сорвать!»&lt;br>
Фарлаф, узнавши глас Рогдая,&lt;br>
Со страха скорчась, обмирал&lt;br>
И, верной смерти ожидая,&lt;br>
Коня еще быстрее гнал.&lt;br>
Так точно заяц торопливый,&lt;br>
Прижавши уши боязливо,&lt;br>
По кочкам, полем, сквозь леса&lt;br>
Скачками мчится ото пса.&lt;br>
На месте славного побега&lt;br>
Весной растопленного снега&lt;br>
Потоки мутные текли&lt;br>
И рыли влажну грудь земли.&lt;br>
Ко рву примчался конь ретивый,&lt;br>
Взмахнул хвостом и белой гривой,&lt;br>
Бразды стальные закусил&lt;br>
И через ров перескочил;&lt;br>
Но робкий всадник вверх ногами&lt;br>
Свалился тяжко в грязный ров,&lt;br>
Земли не взвидел с небесами&lt;br>
И смерть принять уж был готов.&lt;br>
Рогдай к оврагу подлетает;&lt;br>
Жестокий меч уж занесен;&lt;br>
«Погибни, трус! умри!» — вещает…&lt;br>
Вдруг узнает Фарлафа он;&lt;br>
Глядит, и руки опустились;&lt;br>
Досада, изумленье, гнев&lt;br>
В его чертах изобразились;&lt;br>
Скрыпя зубами, онемев,&lt;br>
Герой, с поникшею главою&lt;br>
Скорей отъехав ото рва,&lt;br>
Бесился… но едва, едва&lt;br>
Сам не смеялся над собою.&lt;/p>
&lt;p>Тогда он встретил под горой&lt;br>
Старушечку чуть-чуть живую,&lt;br>
Горбатую, совсем седую.&lt;br>
Она дорожною клюкой&lt;br>
Ему на север указала.&lt;br>
«Ты там найдешь его», — сказала.&lt;br>
Рогдай весельем закипел&lt;br>
И к верной смерти полетел.&lt;/p>
&lt;p>А наш Фарлаф? Во рву остался,&lt;br>
Дохнуть не смея; про себя&lt;br>
Он, лежа, думал: жив ли я?&lt;br>
Куда соперник злой девался?&lt;br>
Вдруг слышит прямо над собой&lt;br>
Старухи голос гробовой:&lt;br>
«Встань, молодец: все тихо в поле;&lt;br>
Ты никого не встретишь боле;&lt;br>
Я привела тебе коня;&lt;br>
Вставай, послушайся меня».&lt;/p>
&lt;p>Смущенный витязь поневоле&lt;br>
Ползком оставил грязный ров;&lt;br>
Окрестность робко озирая,&lt;br>
Вздохнул и молвил оживая:&lt;br>
«Ну, слава богу, я здоров!»&lt;/p>
&lt;p>«Поверь! — старуха продолжала, —&lt;br>
Людмилу мудрено сыскать;&lt;br>
Она далеко забежала;&lt;br>
Не нам с тобой ее достать.&lt;br>
Опасно разъезжать по свету;&lt;br>
Ты, право, будешь сам не рад.&lt;br>
Последуй моему совету,&lt;br>
Ступай тихохонько назад.&lt;br>
Под Киевом, в уединенье,&lt;br>
В своем наследственном селенье&lt;br>
Останься лучше без забот:&lt;br>
От нас Людмила не уйдет&amp;quot;.&lt;/p>
&lt;p>Сказав, исчезла. В нетерпенье&lt;br>
Благоразумный наш герой&lt;br>
Тотчас отправился домой,&lt;br>
Сердечно позабыв о славе&lt;br>
И даже о княжне младой;&lt;br>
И шум малейший по дубраве,&lt;br>
Полет синицы, ропот вод&lt;br>
Его бросали в жар и в пот.&lt;/p>
&lt;p>Меж тем Руслан далёко мчится;&lt;br>
В глуши лесов, в глуши полей&lt;br>
Привычной думою стремится&lt;br>
К Людмиле, радости своей,&lt;br>
И говорит: «Найду ли друга?&lt;br>
Где ты, души моей супруга?&lt;br>
Увижу ль я твой светлый взор?&lt;br>
Услышу ль нежный разговор?&lt;br>
Иль суждено, чтоб чародея&lt;br>
Ты вечной пленницей была&lt;br>
И, скорбной девою старея,&lt;br>
В темнице мрачной отцвела?&lt;br>
Или соперник дерзновенный&lt;br>
Придет?.. Нет, нет, мой друг бесценный:&lt;br>
Еще при мне мой верный меч,&lt;br>
Еще глава не пала с плеч».&lt;/p>
&lt;p>Однажды, темною порою,&lt;br>
По камням берегом крутым&lt;br>
Наш витязь ехал над рекою.&lt;br>
Всё утихало. Вдруг за ним&lt;br>
Стрелы мгновенное жужжанье,&lt;br>
Кольчуги звон, и крик, и ржанье,&lt;br>
И топот по полю глухой.&lt;br>
«Стой!» — грянул голос громовой.&lt;br>
Он оглянулся: в поле чистом,&lt;br>
Подняв копье, летит со свистом&lt;br>
Свирепый всадник, и грозой&lt;br>
Помчался князь ему навстречу.&lt;br>
«Ага! догнал тебя! постой! —&lt;br>
Кричит наездник удалой, —&lt;br>
Готовься, друг, на смертну сечу;&lt;br>
Теперь ложись средь здешних мест;&lt;br>
А там ищи своих невест».&lt;br>
Руслан вспылал, вздрогнул от гнева;&lt;br>
Он узнает сей буйный глас…&lt;/p>
&lt;p>Друзья мои! а наша дева?&lt;br>
Оставим витязей на час;&lt;br>
О них опять я вспомню вскоре.&lt;br>
А то давно пора бы мне&lt;br>
Подумать о младой княжне&lt;br>
И об ужасном Черноморе.&lt;/p>
&lt;p>Моей причудливой мечты&lt;br>
Наперсник иногда нескромный,&lt;br>
Я рассказал, как ночью темной&lt;br>
Людмилы нежной красоты&lt;br>
От воспаленного Руслана&lt;br>
Сокрылись вдруг среди тумана.&lt;br>
Несчастная! когда злодей,&lt;br>
Рукою мощною своей&lt;br>
Тебя сорвав с постели брачной,&lt;br>
Взвился, как вихорь, к облакам&lt;br>
Сквозь тяжкий дым и воздух мрачный&lt;br>
И вдруг умчал к своим горам —&lt;br>
Ты чувств и памяти лишилась&lt;br>
И в страшном замке колдуна,&lt;br>
Безмолвна, трепетна, бледна,&lt;br>
В одно мгновенье очутилась.&lt;/p>
&lt;p>С порога хижины моей&lt;br>
Так видел я, средь летних дней,&lt;br>
Когда за курицей трусливой&lt;br>
Султан курятника спесивый,&lt;br>
Петух мой по двору бежал&lt;br>
И сладострастными крылами&lt;br>
Уже подругу обнимал;&lt;br>
Над ними хитрыми кругами&lt;br>
Цыплят селенья старый вор,&lt;br>
Прияв губительные меры,&lt;br>
Носился, плавал коршун серый&lt;br>
И пал как молния на двор.&lt;br>
Взвился, летит. В когтях ужасных&lt;br>
Во тьму расселин безопасных&lt;br>
Уносит бедную злодей.&lt;br>
Напрасно, горестью своей&lt;br>
И хладным страхом пораженный,&lt;br>
Зовет любовницу петух…&lt;br>
Он видит лишь летучий пух,&lt;br>
Летучим ветром занесенный.&lt;/p>
&lt;p>До утра юная княжна&lt;br>
Лежала, тягостным забвеньем,&lt;br>
Как будто страшным сновиденьем,&lt;br>
Объята — наконец она&lt;br>
Очнулась, пламенным волненьем&lt;br>
И смутным ужасом полна;&lt;br>
Душой летит за наслажденьем,&lt;br>
Кого-то ищет с упоеньем;&lt;br>
«Где ж милый, — шепчет, — где супруг?»&lt;br>
Зовет и помертвела вдруг.&lt;br>
Глядит с боязнию вокруг.&lt;br>
Людмила, где твоя светлица?&lt;br>
Лежит несчастная девица&lt;br>
Среди подушек пуховых,&lt;br>
Под гордой сенью балдахина;&lt;br>
Завесы, пышная перина&lt;br>
В кистях, в узорах дорогих;&lt;br>
Повсюду ткани парчевые;&lt;br>
Играют яхонты, как жар;&lt;br>
Кругом курильницы златые&lt;br>
Подъемлют ароматный пар;&lt;br>
Довольно… благо мне не надо&lt;br>
Описывать волшебный дом:&lt;br>
Уже давно Шехеразада&lt;br>
Меня предупредила в том.&lt;br>
Но светлый терем не отрада,&lt;br>
Когда не видим друга в нем.&lt;/p>
&lt;p>Три девы, красоты чудесной,&lt;br>
В одежде легкой и прелестной&lt;br>
Княжне явились, подошли&lt;br>
И поклонились до земли.&lt;br>
Тогда неслышными шагами&lt;br>
Одна поближе подошла;&lt;br>
Княжне воздушными перстами&lt;br>
Златую косу заплела&lt;br>
С искусством, в наши дни не новым,&lt;br>
И обвила венцом перловым&lt;br>
Окружность бледного чела.&lt;br>
За нею, скромно взор склоняя,&lt;br>
Потом приближилась другая;&lt;br>
Лазурный, пышный сарафан&lt;br>
Одел Людмилы стройный стан;&lt;br>
Покрылись кудри золотые,&lt;br>
И грудь, и плечи молодые&lt;br>
Фатой, прозрачной, как туман.&lt;br>
Покров завистливый лобзает&lt;br>
Красы, достойные небес,&lt;br>
И обувь легкая сжимает&lt;br>
Две ножки, чудо из чудес.&lt;br>
Княжне последняя девица&lt;br>
Жемчужный пояс подает.&lt;br>
Меж тем незримая певица&lt;br>
Веселы песни ей поет.&lt;br>
Увы, ни камни ожерелья,&lt;br>
Ни сарафан, ни перлов ряд,&lt;br>
Ни песни лести и веселья&lt;br>
Ее души не веселят;&lt;br>
Напрасно зеркало рисует&lt;br>
Ее красы, ее наряд:&lt;br>
Потупя неподвижный взгляд,&lt;br>
Она молчит, она тоскует.&lt;/p>
&lt;p>Те, кои, правду возлюбя,&lt;br>
На темном сердца дне читали,&lt;br>
Конечно знают про себя,&lt;br>
Что если женщина в печали&lt;br>
Сквозь слез, украдкой, как-нибудь,&lt;br>
Назло привычке и рассудку,&lt;br>
Забудет в зеркало взглянуть, —&lt;br>
То грустно ей уж не на шутку.&lt;/p>
&lt;p>Но вот Людмила вновь одна.&lt;br>
Не зная, что начать, она&lt;br>
К окну решетчату подходит,&lt;br>
И взор ее печально бродит&lt;br>
В пространстве пасмурной дали.&lt;br>
Всё мертво. Снежные равнины&lt;br>
Коврами яркими легли;&lt;br>
Стоят угрюмых гор вершины&lt;br>
В однообразной белизне&lt;br>
И дремлют в вечной тишине;&lt;br>
Кругом не видно дымной кровли,&lt;br>
Не видно путника в снегах,&lt;br>
И звонкий рог веселой ловли&lt;br>
В пустынных не трубит горах;&lt;br>
Лишь изредка с унылым свистом&lt;br>
Бунтует вихорь в поле чистом&lt;br>
И на краю седых небес&lt;br>
Качает обнаженный лес.&lt;/p>
&lt;p>В слезах отчаянья, Людмила&lt;br>
От ужаса лицо закрыла.&lt;br>
Увы, что ждет ее теперь!&lt;br>
Бежит в серебряную дверь;&lt;br>
Она с музыкой отворилась,&lt;br>
И наша дева очутилась&lt;br>
В саду. Пленительный предел:&lt;br>
Прекраснее садов Армиды&lt;br>
И тех, которыми владел&lt;br>
Царь Соломон иль князь Тавриды.&lt;br>
Пред нею зыблются, шумят&lt;br>
Великолепные дубровы;&lt;br>
Аллеи пальм, и лес лавровый,&lt;br>
И благовонных миртов ряд,&lt;br>
И кедров гордые вершины,&lt;br>
И золотые апельсины&lt;br>
Зерцалом вод отражены;&lt;br>
Пригорки, рощи и долины&lt;br>
Весны огнем оживлены;&lt;br>
С прохладой вьется ветер майский&lt;br>
Средь очарованных полей,&lt;br>
И свищет соловей китайский&lt;br>
Во мраке трепетных ветвей;&lt;br>
Летят алмазные фонтаны&lt;br>
С веселым шумом к облакам:&lt;br>
Под ними блещут истуканы&lt;br>
И, мнится, живы; Фидий сам,&lt;br>
Питомец Феба и Паллады,&lt;br>
Любуясь ими, наконец,&lt;br>
Свой очарованный резец&lt;br>
Из рук бы выронил с досады.&lt;br>
Дробясь о мраморны преграды,&lt;br>
Жемчужной, огненной дугой&lt;br>
Валятся, плещут водопады;&lt;br>
И ручейки в тени лесной&lt;br>
Чуть вьются сонною волной.&lt;br>
Приют покоя и прохлады,&lt;br>
Сквозь вечну зелень здесь и там&lt;br>
Мелькают светлые беседки;&lt;br>
Повсюду роз живые ветки&lt;br>
Цветут и дышат по тропам.&lt;br>
Но безутешная Людмила&lt;br>
Идет, идет и не глядит;&lt;br>
Волшебства роскошь ей постыла,&lt;br>
Ей грустен неги светлый вид;&lt;br>
Куда, сама не зная, бродит,&lt;br>
Волшебный сад кругом обходит,&lt;br>
Свободу горьким дав слезам,&lt;br>
И взоры мрачные возводит&lt;br>
К неумолимым небесам.&lt;br>
Вдруг осветился взор прекрасный:&lt;br>
К устам она прижала перст;&lt;br>
Казалось, умысел ужасный&lt;br>
Рождался… Страшный путь отверст:&lt;br>
Высокий мостик над потоком&lt;br>
Пред ней висит на двух скалах;&lt;br>
В унынье тяжком и глубоком&lt;br>
Она подходит — и в слезах&lt;br>
На воды шумные взглянула,&lt;br>
Ударила, рыдая, в грудь,&lt;br>
В волнах решилась утонуть —&lt;br>
Однако в воды не прыгнула&lt;br>
И дале продолжала путь.&lt;/p>
&lt;p>Моя прекрасная Людмила,&lt;br>
По солнцу бегая с утра,&lt;br>
Устала, слезы осушила,&lt;br>
В душе подумала: пора!&lt;br>
На травку села, оглянулась —&lt;br>
И вдруг над нею сень шатра,&lt;br>
Шумя, с прохладой развернулась;&lt;br>
Обед роскошный перед ней;&lt;br>
Прибор из яркого кристалла;&lt;br>
И в тишине из-за ветвей&lt;br>
Незрима арфа заиграла.&lt;br>
Дивится пленная княжна,&lt;br>
Но втайне думает она:&lt;br>
«Вдали от милого, в неволе,&lt;br>
Зачем мне жить на свете боле?&lt;br>
О ты, чья гибельная страсть&lt;br>
Меня терзает и лелеет,&lt;br>
Мне не страшна злодея власть:&lt;br>
Людмила умереть умеет!&lt;br>
Не нужно мне твоих шатров,&lt;br>
Ни скучных песен, ни пиров —&lt;br>
Не стану есть, не буду слушать,&lt;br>
Умру среди твоих садов!»&lt;br>
Подумала — и стала кушать.&lt;/p>
&lt;p>Княжна встает, и вмиг шатер,&lt;br>
И пышной роскоши прибор,&lt;br>
И звуки арфы… все пропало;&lt;br>
По-прежнему все тихо стало;&lt;br>
Людмила вновь одна в садах&lt;br>
Скитается из рощи в рощи;&lt;br>
Меж тем в лазурных небесах&lt;br>
Плывет луна, царица нощи,&lt;br>
Находит мгла со всех сторон&lt;br>
И тихо на холмах почила;&lt;br>
Княжну невольно клонит сон,&lt;br>
И вдруг неведомая сила&lt;br>
Нежней, чем вешний ветерок,&lt;br>
Ее на воздух поднимает,&lt;br>
Несет по воздуху в чертог&lt;br>
И осторожно опускает&lt;br>
Сквозь фимиам вечерних роз&lt;br>
На ложе грусти, ложе слез.&lt;br>
Три девы вмиг опять явились&lt;br>
И вкруг нее засуетились,&lt;br>
Чтоб на ночь пышный снять убор;&lt;br>
Но их унылый, смутный взор&lt;br>
И принужденное молчанье&lt;br>
Являли втайне состраданье&lt;br>
И немощный судьбам укор.&lt;br>
Но поспешим: рукой их нежной&lt;br>
Раздета сонная княжна;&lt;br>
Прелестна прелестью небрежной,&lt;br>
В одной сорочке белоснежной&lt;br>
Ложится почивать она.&lt;br>
Со вздохом девы поклонились,&lt;br>
Скорей как можно удалились&lt;br>
И тихо притворили дверь.&lt;br>
Что ж наша пленница теперь!&lt;br>
Дрожит как лист, дохнуть не смеет;&lt;br>
Хладеют перси, взор темнеет;&lt;br>
Мгновенный сон от глаз бежит;&lt;br>
Не спит, удвоила вниманье,&lt;br>
Недвижно в темноту глядит…&lt;br>
Всё мрачно, мертвое молчанье!&lt;br>
Лишь сердца слышит трепетанье…&lt;br>
И мнится… шепчет тишина,&lt;br>
Идут — идут к ее постели;&lt;br>
В подушки прячется княжна —&lt;br>
И вдруг… о страх!.. и в самом деле&lt;br>
Раздался шум; озарена&lt;br>
Мгновенным блеском тьма ночная,&lt;br>
Мгновенно дверь отворена;&lt;br>
Безмолвно, гордо выступая,&lt;br>
Нагими саблями сверкая,&lt;br>
Арапов длинный ряд идет&lt;br>
Попарно, чинно, сколь возможно,&lt;br>
И на подушках осторожно&lt;br>
Седую бороду несет;&lt;br>
И входит с важностью за нею,&lt;br>
Подъяв величественно шею,&lt;br>
Горбатый карлик из дверей:&lt;br>
Его-то голове обритой,&lt;br>
Высоким колпаком покрытой,&lt;br>
Принадлежала борода.&lt;br>
Уж он приближился: тогда&lt;br>
Княжна с постели соскочила,&lt;br>
Седого карлу за колпак&lt;br>
Рукою быстрой ухватила,&lt;br>
Дрожащий занесла кулак&lt;br>
И в страхе завизжала так,&lt;br>
Что всех арапов оглушила.&lt;br>
Трепеща, скорчился бедняк,&lt;br>
Княжны испуганной бледнее;&lt;br>
Зажавши уши поскорее,&lt;br>
Хотел бежать, но в бороде&lt;br>
Запутался, упал и бьется;&lt;br>
Встает, упал; в такой беде&lt;br>
Арапов черный рой мятется;&lt;br>
Шумят, толкаются, бегут,&lt;br>
Хватают колдуна в охапку&lt;br>
И вон распутывать несут,&lt;br>
Оставя у Людмилы шапку.&lt;/p>
&lt;p>Но что-то добрый витязь наш?&lt;br>
Вы помните ль нежданну встречу?&lt;br>
Бери свой быстрый карандаш,&lt;br>
Рисуй, Орловский, ночь и сечу!&lt;br>
При свете трепетном луны&lt;br>
Сразились витязи жестоко;&lt;br>
Сердца их гневом стеснены,&lt;br>
Уж копья брошены далеко,&lt;br>
Уже мечи раздроблены,&lt;br>
Кольчуги кровию покрыты,&lt;br>
Щиты трещат, в куски разбиты…&lt;br>
Они схватились на конях;&lt;br>
Взрывая к небу черный прах,&lt;br>
Под ними борзы кони бьются;&lt;br>
Борцы, недвижно сплетены,&lt;br>
Друг друга стиснув, остаются,&lt;br>
Как бы к седлу пригвождены;&lt;br>
Их члены злобой сведены;&lt;br>
Переплелись и костенеют;&lt;br>
По жилам быстрый огнь бежит;&lt;br>
На вражьей груди грудь дрожит —&lt;br>
И вот колеблются, слабеют —&lt;br>
Кому-то пасть… вдруг витязь мой,&lt;br>
Вскипев, железною рукой&lt;br>
С седла наездника срывает,&lt;br>
Подъемлет, держит над собой&lt;br>
И в волны с берега бросает.&lt;br>
«Погибни! — грозно восклицает; —&lt;br>
Умри, завистник злобный мой!»&lt;/p>
&lt;p>Ты догадался, мой читатель,&lt;br>
С кем бился доблестный Руслан:&lt;br>
То был кровавых битв искатель,&lt;br>
Рогдай, надежда киевлян,&lt;br>
Людмилы мрачный обожатель.&lt;br>
Он вдоль днепровских берегов&lt;br>
Искал соперника следов;&lt;br>
Нашел, настиг, но прежня сила&lt;br>
Питомцу битвы изменила,&lt;br>
И Руси древний удалец&lt;br>
В пустыне свой нашел конец.&lt;br>
И слышно было, что Рогдая&lt;br>
Тех вод русалка молодая&lt;br>
На хладны перси приняла&lt;br>
И, жадно витязя лобзая,&lt;br>
На дно со смехом увлекла,&lt;br>
И долго после, ночью темной&lt;br>
Бродя близ тихих берегов,&lt;br>
Богатыря призрак огромный&lt;br>
Пугал пустынных рыбаков.&lt;/p>
&lt;h3 id="песнь-третия">Песнь третия&lt;/h3>
&lt;p>Напрасно вы в тени таились&lt;br>
Для мирных, счастливых друзей,&lt;br>
Стихи мои! Вы не сокрылись&lt;br>
От гневных зависти очей.&lt;br>
Уж бледный критик, ей в услугу,&lt;br>
Вопрос мне сделал роковой:&lt;br>
Зачем Русланову подругу,&lt;br>
Как бы на смех ее супругу,&lt;br>
Зову и девой и княжной?&lt;br>
Ты видишь, добрый мой читатель,&lt;br>
Тут злобы черную печать!&lt;br>
Скажи, Зоил, скажи, предатель,&lt;br>
Ну как и что мне отвечать?&lt;br>
Красней, несчастный, бог с тобою!&lt;br>
Красней, я спорить не хочу;&lt;br>
Довольный тем, что прав душою,&lt;br>
В смиренной кротости молчу.&lt;br>
Но ты поймешь меня, Климена,&lt;br>
Потупишь томные глаза,&lt;br>
Ты, жертва скучного Гимена…&lt;br>
Я вижу: тайная слеза&lt;br>
Падет на стих мой, сердцу внятный;&lt;br>
Ты покраснела, взор погас;&lt;br>
Вздохнула молча… вздох понятный!&lt;br>
Ревнивец: бойся, близок час;&lt;br>
Амур с Досадой своенравной&lt;br>
Вступили в смелый заговор,&lt;br>
И для главы твоей бесславной&lt;br>
Готов уж мстительный убор.&lt;/p>
&lt;p>Уж утро хладное сияло&lt;br>
На темени полнощных гор;&lt;br>
Но в дивном замке всё молчало.&lt;br>
В досаде скрытой Черномор,&lt;br>
Без шапки, в утреннем халате,&lt;br>
Зевал сердито на кровати.&lt;br>
Вокруг брады его седой&lt;br>
Рабы толпились молчаливы,&lt;br>
И нежно гребень костяной&lt;br>
Расчесывал ее извивы;&lt;br>
Меж тем, для пользы и красы,&lt;br>
На бесконечные усы&lt;br>
Лились восточны ароматы,&lt;br>
И кудри хитрые вились;&lt;br>
Как вдруг, откуда ни возьмись,&lt;br>
В окно влетает змий крылатый;&lt;br>
Гремя железной чешуей,&lt;br>
Он в кольца быстрые согнулся&lt;br>
И вдруг Наиной обернулся&lt;br>
Пред изумленною толпой.&lt;br>
«Приветствую тебя, — сказала, —&lt;br>
Собрат, издавна чтимый мной!&lt;br>
Досель я Черномора знала&lt;br>
Одною громкою молвой;&lt;br>
Но тайный рок соединяет&lt;br>
Теперь нас общею враждой;&lt;br>
Тебе опасность угрожает,&lt;br>
Нависла туча над тобой;&lt;br>
И голос оскорбленной чести&lt;br>
Меня к отмщению зовет».&lt;/p>
&lt;p>Со взором, полным хитрой лести,&lt;br>
Ей карла руку подает,&lt;br>
Вещая: «Дивная Наина!&lt;br>
Мне драгоценен твой союз.&lt;br>
Мы посрамим коварство Финна;&lt;br>
Но мрачных козней не боюсь:&lt;br>
Противник слабый мне не страшен;&lt;br>
Узнай чудесный жребий мой:&lt;br>
Сей благодатной бородой&lt;br>
Недаром Черномор украшен.&lt;br>
Доколь власов ее седых&lt;br>
Враждебный меч не перерубит,&lt;br>
Никто из витязей лихих,&lt;br>
Никто из смертных не погубит&lt;br>
Малейших замыслов моих;&lt;br>
Моею будет век Людмила,&lt;br>
Руслан же гробу обречен!»&lt;br>
И мрачно ведьма повторила:&lt;br>
«Погибнет он! погибнет он!»&lt;br>
Потом три раза прошипела,&lt;br>
Три раза топнула ногой&lt;br>
И черным змием улетела.&lt;/p>
&lt;p>Блистая в ризе парчевой,&lt;br>
Колдун, колдуньей ободренный,&lt;br>
Развеселясь, решился вновь&lt;br>
Нести к ногам девицы пленной&lt;br>
Усы, покорность и любовь.&lt;br>
Разряжен карлик бородатый,&lt;br>
Опять идет в ее палаты;&lt;br>
Проходит длинный комнат ряд:&lt;br>
Княжны в них нет. Он дале, в сад,&lt;br>
В лавровый лес, к решетке сада,&lt;br>
Вдоль озера, вкруг водопада,&lt;br>
Под мостики, в беседки… нет!&lt;br>
Княжна ушла, пропал и след!&lt;br>
Кто выразит его смущенье,&lt;br>
И рев, и трепет исступленья?&lt;br>
С досады дня не взвидел он.&lt;br>
Раздался карлы дикий стон:&lt;br>
«Сюда, невольники, бегите!&lt;br>
Сюда, надеюсь я на вас!&lt;br>
Сейчас Людмилу мне сыщите!&lt;br>
Скорее, слышите ль? сейчас!&lt;br>
Не то — шутите вы со мною —&lt;br>
Всех удавлю вас бородою!»&lt;/p>
&lt;p>Читатель, расскажу ль тебе,&lt;br>
Куда красавица девалась?&lt;br>
Всю ночь она своей судьбе&lt;br>
В слезах дивилась и — смеялась.&lt;br>
Ее пугала борода,&lt;br>
Но Черномор уж был известен,&lt;br>
И был смешон, а никогда&lt;br>
Со смехом ужас несовместен.&lt;br>
Навстречу утренним лучам&lt;br>
Постель оставила Людмила&lt;br>
И взор невольный обратила&lt;br>
К высоким, чистым зеркалам;&lt;br>
Невольно кудри золотые&lt;br>
С лилейных плеч приподняла;&lt;br>
Невольно волосы густые&lt;br>
Рукой небрежной заплела;&lt;br>
Свои вчерашние наряды&lt;br>
Нечаянно в углу нашла;&lt;br>
Вздохнув, оделась и с досады&lt;br>
Тихонько плакать начала;&lt;br>
Однако с верного стекла,&lt;br>
Вздыхая, не сводила взора,&lt;br>
И девице пришло на ум,&lt;br>
В волненье своенравных дум,&lt;br>
Примерить шапку Черномора.&lt;br>
Всё тихо, никого здесь нет;&lt;br>
Никто на девушку не взглянет…&lt;br>
А девушке в семнадцать лет&lt;br>
Какая шапка не пристанет!&lt;br>
Рядиться никогда не лень!&lt;br>
Людмила шапкой завертела;&lt;br>
На брови, прямо, набекрень&lt;br>
И задом наперед надела.&lt;br>
И что ж? о чудо старых дней!&lt;br>
Людмила в зеркале пропала;&lt;br>
Перевернула — перед ней&lt;br>
Людмила прежняя предстала;&lt;br>
Назад надела — снова нет;&lt;br>
Сняла — и в зеркале! «Прекрасно!&lt;br>
Добро, колдун, добро, мой свет!&lt;br>
Теперь мне здесь уж безопасно;&lt;br>
Теперь избавлюсь от хлопот!»&lt;br>
И шапку старого злодея&lt;br>
Княжна, от радости краснея,&lt;br>
Надела задом наперед.&lt;/p>
&lt;p>Но возвратимся же к герою.&lt;br>
Не стыдно ль заниматься нам&lt;br>
Так долго шапкой, бородою,&lt;br>
Руслана поруча судьбам?&lt;br>
Свершив с Рогдаем бой жестокий,&lt;br>
Проехал он дремучий лес;&lt;br>
Пред ним открылся дол широкий&lt;br>
При блеске утренних небес.&lt;br>
Трепещет витязь поневоле:&lt;br>
Он видит старой битвы поле.&lt;br>
Вдали всё пусто; здесь и там&lt;br>
Желтеют кости; по холмам&lt;br>
Разбросаны колчаны, латы;&lt;br>
Где сбруя, где заржавый щит;&lt;br>
В костях руки здесь меч лежит;&lt;br>
Травой оброс там шлем косматый&lt;br>
И старый череп тлеет в нем;&lt;br>
Богатыря там остов целый&lt;br>
С его поверженным конем&lt;br>
Лежит недвижный; копья, стрелы&lt;br>
В сырую землю вонзены,&lt;br>
И мирный плющ их обвивает…&lt;br>
Ничто безмолвной тишины&lt;br>
Пустыни сей не возмущает,&lt;br>
И солнце с ясной вышины&lt;br>
Долину смерти озаряет.&lt;/p>
&lt;p>Со вздохом витязь вкруг себя&lt;br>
Взирает грустными очами.&lt;br>
«О поле, поле, кто тебя&lt;br>
Усеял мертвыми костями?&lt;br>
Чей борзый конь тебя топтал&lt;br>
В последний час кровавой битвы?&lt;br>
Кто на тебе со славой пал?&lt;br>
Чьи небо слышало молитвы?&lt;br>
Зачем же, поле, смолкло ты&lt;br>
И поросло травой забвенья?..&lt;br>
Времен от вечной темноты,&lt;br>
Быть может, нет и мне спасенья!&lt;br>
Быть может, на холме немом&lt;br>
Поставят тихий гроб Русланов,&lt;br>
И струны громкие Баянов&lt;br>
Не будут говорить о нем!»&lt;/p>
&lt;p>Но вскоре вспомнил витязь мой,&lt;br>
Что добрый меч герою нужен&lt;br>
И даже панцырь; а герой&lt;br>
С последней битвы безоружен.&lt;br>
Обходит поле он вокруг;&lt;br>
В кустах, среди костей забвенных,&lt;br>
В громаде тлеющих кольчуг,&lt;br>
Мечей и шлемов раздробленных&lt;br>
Себе доспехов ищет он.&lt;br>
Проснулись гул и степь немая,&lt;br>
Поднялся в поле треск и звон;&lt;br>
Он поднял щит, не выбирая,&lt;br>
Нашел и шлем и звонкий рог;&lt;br>
Но лишь меча сыскать не мог.&lt;br>
Долину брани объезжая,&lt;br>
Он видит множество мечей,&lt;br>
Но все легки, да слишком малы,&lt;br>
А князь красавец был не вялый,&lt;br>
Не то, что витязь наших дней.&lt;br>
Чтоб чем-нибудь играть от скуки,&lt;br>
Копье стальное взял он в руки,&lt;br>
Кольчугу он надел на грудь&lt;br>
И далее пустился в путь.&lt;/p>
&lt;p>Уж побледнел закат румяный&lt;br>
Над усыпленною землей;&lt;br>
Дымятся синие туманы,&lt;br>
И всходит месяц золотой;&lt;br>
Померкла степь. Тропою темной&lt;br>
Задумчив едет наш Руслан&lt;br>
И видит: сквозь ночной туман&lt;br>
Вдали чернеет холм огромный,&lt;br>
И что-то страшное храпит.&lt;br>
Он ближе к холму, ближе — слышит:&lt;br>
Чудесный холм как будто дышит.&lt;br>
Руслан внимает и глядит&lt;br>
Бестрепетно, с покойным духом;&lt;br>
Но, шевеля пугливым ухом,&lt;br>
Конь упирается, дрожит,&lt;br>
Трясет упрямой головою,&lt;br>
И грива дыбом поднялась.&lt;br>
Вдруг холм, безоблачной луною&lt;br>
В тумане бледно озарясь,&lt;br>
Яснеет; смотрит храбрый князь —&lt;br>
И чудо видит пред собою.&lt;br>
Найду ли краски и слова?&lt;br>
Пред ним живая голова.&lt;br>
Огромны очи сном объяты;&lt;br>
Храпит, качая шлем пернатый,&lt;br>
И перья в темной высоте,&lt;br>
Как тени, ходят, развеваясь.&lt;br>
В своей ужасной красоте&lt;br>
Над мрачной степью возвышаясь,&lt;br>
Безмолвием окружена,&lt;br>
Пустыни сторож безымянной,&lt;br>
Руслану предстоит она&lt;br>
Громадой грозной и туманной.&lt;br>
В недоуменье хочет он&lt;br>
Таинственный разрушить сон.&lt;br>
Вблизи осматривая диво,&lt;br>
Объехал голову кругом&lt;br>
И стал пред носом молчаливо;&lt;br>
Щекотит ноздри копием,&lt;br>
И, сморщась, голова зевнула,&lt;br>
Глаза открыла и чихнула…&lt;br>
Поднялся вихорь, степь дрогнула,&lt;br>
Взвилася пыль; с ресниц, с усов,&lt;br>
С бровей слетела стая сов;&lt;br>
Проснулись рощи молчаливы,&lt;br>
Чихнуло эхо — конь ретивый&lt;br>
Заржал, запрыгал, отлетел,&lt;br>
Едва сам витязь усидел,&lt;br>
И вслед раздался голос шумный:&lt;br>
«Куда ты, витязь неразумный?&lt;br>
Ступай назад, я не шучу!&lt;br>
Как раз нахала проглочу!»&lt;br>
Руслан с презреньем оглянулся,&lt;br>
Браздами удержал коня&lt;br>
И с гордым видом усмехнулся.&lt;br>
«Чего ты хочешь от меня? —&lt;br>
Нахмурясь, голова вскричала. —&lt;br>
Вот гостя мне судьба послала!&lt;br>
Послушай, убирайся прочь!&lt;br>
Я спать хочу, теперь уж ночь,&lt;br>
Прощай!» Но витязь знаменитый,&lt;br>
Услыша грубые слова,&lt;br>
Воскликнул с важностью сердитой:&lt;br>
«Молчи, пустая голова!&lt;br>
Слыхал я истину, бывало:&lt;br>
Хоть лоб широк, да мозгу мало!&lt;br>
Я еду, еду, не свищу,&lt;br>
А как наеду, не спущу!»&lt;/p>
&lt;p>Тогда, от ярости немея,&lt;br>
Стесненной злобой пламенея,&lt;br>
Надулась голова; как жар,&lt;br>
Кровавы очи засверкали;&lt;br>
Напенясь, губы задрожали,&lt;br>
Из уст, ушей поднялся пар —&lt;br>
И вдруг она, что было мочи,&lt;br>
Навстречу князю стала дуть;&lt;br>
Напрасно конь, зажмуря очи,&lt;br>
Склонив главу, натужа грудь,&lt;br>
Сквозь вихорь, дождь и сумрак ночи&lt;br>
Неверный продолжает путь;&lt;br>
Объятый страхом, ослепленный,&lt;br>
Он мчится вновь, изнеможенный,&lt;br>
Далече в поле отдохнуть.&lt;br>
Вновь обратиться витязь хочет —&lt;br>
Вновь отражен, надежды нет!&lt;br>
А голова ему вослед,&lt;br>
Как сумасшедшая, хохочет,&lt;br>
Гремит: «Ай, витязь! ай, герой!&lt;br>
Куда ты? тише, тише, стой!&lt;br>
Эй, витязь, шею сломишь даром;&lt;br>
Не трусь, наездник, и меня&lt;br>
Порадуй хоть одним ударом,&lt;br>
Пока не заморил коня».&lt;br>
И между тем она героя&lt;br>
Дразнила страшным языком.&lt;br>
Руслан, досаду в сердце кроя,&lt;br>
Грозит ей молча копием,&lt;br>
Трясет его рукой свободной,&lt;br>
И, задрожав, булат холодный&lt;br>
Вонзился в дерзостный язык.&lt;br>
И кровь из бешеного зева&lt;br>
Рекою побежала вмиг.&lt;br>
От удивленья, боли, гнева,&lt;br>
В минуту дерзости лишась,&lt;br>
На князя голова глядела,&lt;br>
Железо грызла и бледнела&lt;br>
В спокойном духе горячась,&lt;br>
Так иногда средь нашей сцены&lt;br>
Плохой питомец Мельпомены,&lt;br>
Внезапным свистом оглушен,&lt;br>
Уж ничего не видит он,&lt;br>
Бледнеет, ролю забывает,&lt;br>
Дрожит, поникнув головой,&lt;br>
И, заикаясь, умолкает&lt;br>
Перед насмешливой толпой.&lt;br>
Счастливым пользуясь мгновеньем,&lt;br>
К объятой голове смущеньем,&lt;br>
Как ястреб, богатырь летит&lt;br>
С подъятой, грозною десницей&lt;br>
И в щеку тяжкой рукавицей&lt;br>
С размаха голову разит;&lt;br>
И степь ударом огласилась;&lt;br>
Кругом росистая трава&lt;br>
Кровавой пеной обагрилась,&lt;br>
И, зашатавшись, голова&lt;br>
Перевернулась, покатилась,&lt;br>
И шлем чугунный застучал.&lt;br>
Тогда на месте опустелом&lt;br>
Меч богатырский засверкал.&lt;br>
Наш витязь в трепете веселом&lt;br>
Его схватил и к голове&lt;br>
По окровавленной траве&lt;br>
Бежит с намереньем жестоким&lt;br>
Ей нос и уши обрубить;&lt;br>
Уже Руслан готов разить,&lt;br>
Уже взмахнул мечом широким —&lt;br>
Вдруг, изумленный, внемлет он&lt;br>
Главы молящей жалкий стон…&lt;br>
И тихо меч он опускает,&lt;br>
В нем гнев свирепый умирает,&lt;br>
И мщенье бурное падет&lt;br>
В душе, моленьем усмиренной:&lt;br>
Так на долине тает лед,&lt;br>
Лучом полудня пораженный.&lt;/p>
&lt;p>«Ты вразумил меня, герой, —&lt;br>
Со вздохом голова сказала, —&lt;br>
Твоя десница доказала,&lt;br>
Что я виновен пред тобой;&lt;br>
Отныне я тебе послушен;&lt;br>
Но, витязь, будь великодушен!&lt;br>
Достоин плача жребий мой.&lt;br>
И я был витязь удалой!&lt;br>
В кровавых битвах супостата&lt;br>
Себе я равного не зрел;&lt;br>
Счастлив, когда бы не имел&lt;br>
Соперником меньшого брата!&lt;br>
Коварный, злобный Черномор,&lt;br>
Ты, ты всех бед моих виною!&lt;br>
Семейства нашего позор,&lt;br>
Рожденный карлой, с бородою,&lt;br>
Мой дивный рост от юных дней&lt;br>
Не мог он без досады видеть&lt;br>
И стал за то в душе своей&lt;br>
Меня, жестокий, ненавидеть.&lt;br>
Я был всегда немного прост,&lt;br>
Хотя высок; а сей несчастный,&lt;br>
Имея самый глупый рост,&lt;br>
Умен как бес — и зол ужасно.&lt;br>
Притом же, знай, к моей беде,&lt;br>
В его чудесной бороде&lt;br>
Таится сила роковая,&lt;br>
И, всё на свете презирая,&lt;br>
Доколе борода цела —&lt;br>
Изменник не страшится зла.&lt;br>
Вот он однажды с видом дружбы&lt;br>
„Послушай, — хитро мне сказал, —&lt;br>
Не откажись от важной службы:&lt;br>
Я в черных книгах отыскал,&lt;br>
Что за восточными горами,&lt;br>
На тихих моря берегах,&lt;br>
В глухом подвале, под замками&lt;br>
Хранится меч — и что же? страх!&lt;br>
Я разобрал во тьме волшебной,&lt;br>
Что волею судьбы враждебной&lt;br>
Сей меч известен будет нам;&lt;br>
Что нас он обоих погубит:&lt;br>
Мне бороду мою отрубит,&lt;br>
Тебе главу; суди же сам,&lt;br>
Сколь важно нам приобретенье&lt;br>
Сего созданья злых духов!“&lt;br>
„Ну, что же? где тут затрудненье? —&lt;br>
Сказал я карле, — я готов;&lt;br>
Иду, хоть за пределы света“.&lt;br>
И сосну на плечо взвалил,&lt;br>
А на другое для совета&lt;br>
Злодея брата посадил;&lt;br>
Пустился в дальную дорогу,&lt;br>
Шагал, шагал и, слава богу,&lt;br>
Как бы пророчеству назло,&lt;br>
Всё счастливо сначало шло.&lt;br>
За отдаленными горами&lt;br>
Нашли мы роковой подвал;&lt;br>
Я разметал его руками&lt;br>
И потаенный меч достал.&lt;br>
Но нет! судьба того хотела:&lt;br>
Меж нами ссора закипела —&lt;br>
И было, признаюсь, о чем!&lt;br>
Вопрос: кому владеть мечом?&lt;br>
Я спорил, карла горячился;&lt;br>
Бранились долго; наконец&lt;br>
Уловку выдумал хитрец,&lt;br>
Притих и будто бы смягчился.&lt;br>
„Оставим бесполезный спор, —&lt;br>
Сказал мне важно Черномор, —&lt;br>
Мы тем союз наш обесславим;&lt;br>
Рассудок в мире жить велит;&lt;br>
Судьбе решить мы предоставим,&lt;br>
Кому сей меч принадлежит.&lt;br>
К земле приникнем ухом оба&lt;br>
(Чего не выдумает злоба!),&lt;br>
И кто услышит первый звон,&lt;br>
Тот и владей мечом до гроба“.&lt;br>
Сказал и лег на землю он.&lt;br>
Я сдуру также растянулся;&lt;br>
Лежу, не слышу ничего,&lt;br>
Смекая: обману его!&lt;br>
Но сам жестоко обманулся.&lt;br>
Злодей в глубокой тишине,&lt;br>
Привстав, на цыпочках ко мне&lt;br>
Подкрался сзади, размахнулся;&lt;br>
Как вихорь свистнул острый меч,&lt;br>
И прежде, чем я оглянулся,&lt;br>
Уж голова слетела с плеч —&lt;br>
И сверхъестественная сила&lt;br>
В ней жизни дух остановила.&lt;br>
Мой остов тернием оброс;&lt;br>
Вдали, в стране, людьми забвенной,&lt;br>
Истлел мой прах непогребенный;&lt;br>
Но злобный карла перенес&lt;br>
Меня в сей край уединенный,&lt;br>
Где вечно должен был стеречь&lt;br>
Тобой сегодня взятый меч.&lt;br>
О витязь! Ты храним судьбою,&lt;br>
Возьми его, и бог с тобою!&lt;br>
Быть может, на своем пути&lt;br>
Ты карлу-чародея встретишь —&lt;br>
Ах, если ты его заметишь,&lt;br>
Коварству, злобе отомсти!&lt;br>
И наконец я счастлив буду,&lt;br>
Спокойно мир оставлю сей —&lt;br>
И в благодарности моей&lt;br>
Твою пощечину забуду».&lt;/p>
&lt;h3 id="песнь-четвертая">Песнь четвертая&lt;/h3>
&lt;p>Я каждый день, восстав от сна,&lt;br>
Благодарю сердечно бога&lt;br>
За то, что в наши времена&lt;br>
Волшебников не так уж много.&lt;br>
К тому же — честь и слава им! —&lt;br>
Женитьбы наши безопасны…&lt;br>
Их замыслы не так ужасны&lt;br>
Мужьям, девицам молодым.&lt;br>
Но есть волшебники другие,&lt;br>
Которых ненавижу я:&lt;br>
Улыбка, очи голубые&lt;br>
И голос милый — о друзья!&lt;br>
Не верьте им: они лукавы!&lt;br>
Страшитесь, подражая мне,&lt;br>
Их упоительной отравы&lt;br>
И почивайте в тишине.&lt;/p>
&lt;p>Поэзии чудесный гений,&lt;br>
Певец таинственных видений,&lt;br>
Любви, мечтаний и чертей,&lt;br>
Могил и рая верный житель,&lt;br>
И музы ветреной моей&lt;br>
Наперсник, пестун и хранитель!&lt;br>
Прости мне, северный Орфей,&lt;br>
Что в повести моей забавной&lt;br>
Теперь вослед тебе лечу&lt;br>
И лиру музы своенравной&lt;br>
Во лжи прелестной обличу.&lt;/p>
&lt;p>Друзья мои, вы все слыхали,&lt;br>
Как бесу в древни дни злодей&lt;br>
Предал сперва себя с печали,&lt;br>
А там и души дочерей;&lt;br>
Как после щедрым подаяньем,&lt;br>
Молитвой, верой, и постом,&lt;br>
И непритворным покаяньем&lt;br>
Снискал заступника в святом;&lt;br>
Как умер он и как заснули&lt;br>
Его двенадцать дочерей:&lt;br>
И нас пленили, ужаснули&lt;br>
Картины тайных сих ночей,&lt;br>
Сии чудесные виденья,&lt;br>
Сей мрачный бес, сей божий гнев,&lt;br>
Живые грешника мученья&lt;br>
И прелесть непорочных дев.&lt;br>
Мы с ними плакали, бродили&lt;br>
Вокруг зубчатых замка стен,&lt;br>
И сердцем тронутым любили&lt;br>
Их тихий сон, их тихий плен;&lt;br>
Душой Вадима призывали,&lt;br>
И пробужденье зрели их,&lt;br>
И часто инокинь святых&lt;br>
На гроб отцовский провожали.&lt;br>
И что ж, возможно ль?.. нам солгали!&lt;br>
Но правду возвещу ли я?..&lt;/p>
&lt;p>Младой Ратмир, направя к югу&lt;br>
Нетерпеливый бег коня,&lt;br>
Уж думал пред закатом дня&lt;br>
Нагнать Русланову супругу.&lt;br>
Но день багряный вечерел;&lt;br>
Напрасно витязь пред собою&lt;br>
В туманы дальние смотрел:&lt;br>
Всё было пусто над рекою.&lt;br>
Зари последний луч горел&lt;br>
Над ярко позлащенным бором.&lt;br>
Наш витязь мимо черных скал&lt;br>
Тихонько проезжал и взором&lt;br>
Ночлега меж дерев искал.&lt;br>
Он на долину выезжает&lt;br>
И видит: замок на скалах&lt;br>
Зубчаты стены возвышает;&lt;br>
Чернеют башни на углах;&lt;br>
И дева по стене высокой,&lt;br>
Как в море лебедь одинокий,&lt;br>
Идет, зарей освещена;&lt;br>
И девы песнь едва слышна&lt;br>
Долины в тишине глубокой.&lt;/p>
&lt;p>«Ложится в поле мрак ночной;&lt;br>
От волн поднялся ветер хладный.&lt;br>
Уж поздно, путник молодой!&lt;br>
Укройся в терем наш отрадный.&lt;/p>
&lt;p>Здесь ночью нега и покой,&lt;br>
А днем и шум и пированье.&lt;br>
Приди на дружное призванье,&lt;br>
Приди, о путник молодой!&lt;/p>
&lt;p>У нас найдешь красавиц рой;&lt;br>
Их нежны речи и лобзанье.&lt;br>
Приди на тайное призванье,&lt;br>
Приди, о путник молодой!&lt;/p>
&lt;p>Тебе мы с утренней зарей&lt;br>
Наполним кубок на прощанье.&lt;br>
Приди на мирное призванье,&lt;br>
Приди, о путник молодой!&lt;/p>
&lt;p>Ложится в поле мрак ночной;&lt;br>
От волн поднялся ветер хладный.&lt;br>
Уж поздно, путник молодой!&lt;br>
Укройся в терем наш отрадный».&lt;/p>
&lt;p>Она манит, она поет;&lt;br>
И юный хан уж под стеною;&lt;br>
Его встречают у ворот&lt;br>
Девицы красные толпою;&lt;br>
При шуме ласковых речей&lt;br>
Он окружен; с него не сводят&lt;br>
Они пленительных очей;&lt;br>
Две девицы коня уводят;&lt;br>
В чертоги входит хан младой,&lt;br>
За ним отшельниц милых рой;&lt;br>
Одна снимает шлем крылатый,&lt;br>
Другая кованые латы,&lt;br>
Та меч берет, та пыльный щит;&lt;br>
Одежда неги заменит&lt;br>
Железные доспехи брани.&lt;br>
Но прежде юношу ведут&lt;br>
К великолепной русской бане.&lt;br>
Уж волны дымные текут&lt;br>
В ее серебряные чаны,&lt;br>
И брызжут хладные фонтаны;&lt;br>
Разостлан роскошью ковер;&lt;br>
На нем усталый хан ложится;&lt;br>
Прозрачный пар над ним клубится;&lt;br>
Потупя неги полный взор,&lt;br>
Прелестные, полунагие,&lt;br>
В заботе нежной и немой,&lt;br>
Вкруг хана девы молодые&lt;br>
Теснятся резвою толпой.&lt;br>
Над рыцарем иная машет&lt;br>
Ветвями молодых берез,&lt;br>
И жар от них душистый пашет;&lt;br>
Другая соком вешних роз&lt;br>
Усталы члены прохлаждает&lt;br>
И в ароматах потопляет&lt;br>
Темнокудрявые власы.&lt;br>
Восторгом витязь упоенный&lt;br>
Уже забыл Людмилы пленной&lt;br>
Недавно милые красы;&lt;br>
Томится сладостным желаньем;&lt;br>
Бродящий взор его блестит,&lt;br>
И, полный страстным ожиданьем,&lt;br>
Он тает сердцем, он горит.&lt;/p>
&lt;p>Но вот выходит он из бани.&lt;br>
Одетый в бархатные ткани,&lt;br>
В кругу прелестных дев, Ратмир&lt;br>
Садится за богатый пир.&lt;br>
Я не Омер: в стихах высоких&lt;br>
Он может воспевать один&lt;br>
Обеды греческих дружин,&lt;br>
И звон, и пену чаш глубоких,&lt;br>
Милее, по следам Парни,&lt;br>
Мне славить лирою небрежной&lt;br>
И наготу в ночной тени,&lt;br>
И поцелуй любови нежной!&lt;br>
Луною замок озарен;&lt;br>
Я вижу терем отдаленный,&lt;br>
Где витязь томный, воспаленный&lt;br>
Вкушает одинокий сон;&lt;br>
Его чело, его ланиты&lt;br>
Мгновенным пламенем горят;&lt;br>
Его уста полуоткрыты&lt;br>
Лобзанье тайное манят;&lt;br>
Он страстно, медленно вздыхает,&lt;br>
Он видит их — и в пылком сне&lt;br>
Покровы к сердцу прижимает.&lt;br>
Но вот в глубокой тишине&lt;br>
Дверь отворилась; пол ревнивый&lt;br>
Скрыпит под ножкой торопливой,&lt;br>
И при серебряной луне&lt;br>
Мелькнула дева. Сны крылаты,&lt;br>
Сокройтесь, отлетите прочь!&lt;br>
Проснись — твоя настала ночь!&lt;br>
Проснися — дорог миг утраты!..&lt;br>
Она подходит, он лежит&lt;br>
И в сладострастной неге дремлет;&lt;br>
Покров его с одра скользит,&lt;br>
И жаркий пух чело объемлет.&lt;br>
В молчанье дева перед ним&lt;br>
Стоит недвижно, бездыханна,&lt;br>
Как лицемерная Диана&lt;br>
Пред милым пастырем своим;&lt;br>
И вот она, на ложе хана&lt;br>
Коленом опершись одним,&lt;br>
Вздохнув, лицо к нему склоняет&lt;br>
С томленьем, с трепетом живым,&lt;br>
И сон счастливца прерывает&lt;br>
Лобзаньем страстным и немым…&lt;/p>
&lt;p>Но, други, девственная лира&lt;br>
Умолкла под моей рукой;&lt;br>
Слабеет робкий голос мой —&lt;br>
Оставим юного Ратмира;&lt;br>
Не смею песней продолжать:&lt;br>
Руслан нас должен занимать,&lt;br>
Руслан, сей витязь беспримерный,&lt;br>
В душе герой, любовник верный.&lt;br>
Упорным боем утомлен,&lt;br>
Под богатырской головою&lt;br>
Он сладостный вкушает сон.&lt;br>
Но вот уж раннею зарею&lt;br>
Сияет тихий небосклон;&lt;br>
Всё ясно; утра луч игривый&lt;br>
Главы косматый лоб златит.&lt;br>
Руслан встает, и конь ретивый&lt;br>
Уж витязя стрелою мчит.&lt;/p>
&lt;p>И дни бегут; желтеют нивы;&lt;br>
С дерев спадает дряхлый лист;&lt;br>
В лесах осенний ветра свист&lt;br>
Певиц пернатых заглушает;&lt;br>
Тяжелый, пасмурный туман&lt;br>
Нагие холмы обвивает;&lt;br>
Зима приближилась — Руслан&lt;br>
Свой путь отважно продолжает&lt;br>
На дальный север; с каждым днем&lt;br>
Преграды новые встречает:&lt;br>
То бьется он с богатырем,&lt;br>
То с ведьмою, то с великаном,&lt;br>
То лунной ночью видит он,&lt;br>
Как будто сквозь волшебный сон,&lt;br>
Окружены седым туманом,&lt;br>
Русалки, тихо на ветвях&lt;br>
Качаясь, витязя младого&lt;br>
С улыбкой хитрой на устах&lt;br>
Манят, не говоря ни слова…&lt;br>
Но, тайным промыслом храним,&lt;br>
Бесстрашный витязь невредим;&lt;br>
В его душе желанье дремлет,&lt;br>
Он их не видит, им не внемлет,&lt;br>
Одна Людмила всюду с ним.&lt;/p>
&lt;p>Но между тем, никем не зрима,&lt;br>
От нападений колдуна&lt;br>
Волшебной шапкою хранима,&lt;br>
Что делает моя княжна,&lt;br>
Моя прекрасная Людмила?&lt;br>
Она, безмолвна и уныла,&lt;br>
Одна гуляет по садам,&lt;br>
О друге мыслит и вздыхает,&lt;br>
Иль, волю дав своим мечтам,&lt;br>
К родимым киевским полям&lt;br>
В забвенье сердца улетает;&lt;br>
Отца и братьев обнимает,&lt;br>
Подружек видит молодых&lt;br>
И старых мамушек своих —&lt;br>
Забыты плен и разлученье!&lt;br>
Но вскоре бедная княжна&lt;br>
Свое теряет заблужденье&lt;br>
И вновь уныла и одна.&lt;br>
Рабы влюбленного злодея,&lt;br>
И день и ночь, сидеть не смея,&lt;br>
Меж тем по замку, по садам&lt;br>
Прелестной пленницы искали,&lt;br>
Метались, громко призывали,&lt;br>
Однако всё по пустякам.&lt;br>
Людмила ими забавлялась:&lt;br>
В волшебных рощах иногда&lt;br>
Без шапки вдруг она являлась&lt;br>
И кликала: «Сюда, сюда!»&lt;br>
И все бросались к ней толпою;&lt;br>
Но в сторону — незрима вдруг —&lt;br>
Она неслышною стопою&lt;br>
От хищных убегала рук.&lt;br>
Везде всечасно замечали&lt;br>
Ее минутные следы:&lt;br>
То позлащенные плоды&lt;br>
На шумных ветвях исчезали,&lt;br>
То капли ключевой воды&lt;br>
На луг измятый упадали:&lt;br>
Тогда наверно в замке знали,&lt;br>
Что пьет иль кушает княжна.&lt;br>
На ветвях кедра иль березы&lt;br>
Скрываясь по ночам, она&lt;br>
Минутного искала сна —&lt;br>
Но только проливала слезы,&lt;br>
Звала супруга и покой,&lt;br>
Томилась грустью и зевотой,&lt;br>
И редко, редко пред зарей,&lt;br>
Склонясь ко древу головой,&lt;br>
Дремала тонкою дремотой;&lt;br>
Едва редела ночи мгла,&lt;br>
Людмила к водопаду шла&lt;br>
Умыться хладною струею:&lt;br>
Сам карла утренней порою&lt;br>
Однажды видел из палат,&lt;br>
Как под невидимой рукою&lt;br>
Плескал и брызгал водопад.&lt;br>
С своей обычною тоскою&lt;br>
До новой ночи, здесь и там,&lt;br>
Она бродила по садам:&lt;br>
Нередко под вечер слыхали&lt;br>
Ее приятный голосок;&lt;br>
Нередко в рощах поднимали&lt;br>
Иль ею брошенный венок,&lt;br>
Или клочки персидской шали,&lt;br>
Или заплаканный платок.&lt;/p>
&lt;p>Жестокой страстью уязвленный,&lt;br>
Досадой, злобой омраченный,&lt;br>
Колдун решился наконец&lt;br>
Поймать Людмилу непременно.&lt;br>
Так Лемноса хромой кузнец,&lt;br>
Прияв супружеский венец&lt;br>
Из рук прелестной Цитереи,&lt;br>
Раскинул сеть ее красам,&lt;br>
Открыв насмешливым богам&lt;br>
Киприды нежные затеи…&lt;/p>
&lt;p>Скучая, бедная княжна&lt;br>
В прохладе мраморной беседки&lt;br>
Сидела тихо близ окна&lt;br>
И сквозь колеблемые ветки&lt;br>
Смотрела на цветущий луг.&lt;br>
Вдруг слышит — кличут: «Милый друг!»&lt;br>
И видит верного Руслана.&lt;br>
Его черты, походка, стан;&lt;br>
Но бледен он, в очах туман,&lt;br>
И на бедре живая рана —&lt;br>
В ней сердце дрогнуло. «Руслан!&lt;br>
Руслан!.. он точно!» И стрелою&lt;br>
К супругу пленница летит,&lt;br>
В слезах, трепеща, говорит:&lt;br>
«Ты здесь… ты ранен… что с тобою?»&lt;br>
Уже достигла, обняла:&lt;br>
О ужас… призрак исчезает!&lt;br>
Княжна в сетях; с ее чела&lt;br>
На землю шапка упадает.&lt;br>
Хладея, слышит грозный крик:&lt;br>
«Она моя!» — и в тот же миг&lt;br>
Зрит колдуна перед очами.&lt;br>
Раздался девы жалкий стон,&lt;br>
Падет без чувств — и дивный сон&lt;br>
Объял несчастную крылами.&lt;/p>
&lt;p>Что будет с бедною княжной!&lt;br>
О страшный вид: волшебник хилый&lt;br>
Ласкает дерзостной рукой&lt;br>
Младые прелести Людмилы!&lt;br>
Ужели счастлив будет он?&lt;br>
Чу… вдруг раздался рога звон,&lt;br>
И кто-то карлу вызывает.&lt;br>
В смятенье, бледный чародей&lt;br>
На деву шапку надевает;&lt;br>
Трубят опять; звучней, звучней!&lt;br>
И он летит к безвестной встрече,&lt;br>
Закинув бороду за плечи.&lt;/p>
&lt;h3 id="песнь-пятая">Песнь пятая&lt;/h3>
&lt;p>Ах, как мила моя княжна!&lt;br>
Мне нрав ее всего дороже:&lt;br>
Она чувствительна, скромна,&lt;br>
Любви супружеской верна,&lt;br>
Немножко ветрена… так что же?&lt;br>
Еще милее тем она.&lt;br>
Всечасно прелестию новой&lt;br>
Умеет нас она пленить;&lt;br>
Скажите: можно ли сравнить&lt;br>
Ее с Дельфирою суровой?&lt;br>
Одной — судьба послала дар&lt;br>
Обворожать сердца и взоры;&lt;br>
Ее улыбка, разговоры&lt;br>
Во мне любви рождают жар.&lt;br>
А та — под юбкою гусар,&lt;br>
Лишь дайте ей усы да шпоры!&lt;br>
Блажен, кого под вечерок&lt;br>
В уединенный уголок&lt;br>
Моя Людмила поджидает&lt;br>
И другом сердца назовет;&lt;br>
Но, верьте мне, блажен и тот,&lt;br>
Кто от Дельфиры убегает&lt;br>
И даже с нею незнаком.&lt;br>
Да, впрочем, дело не о том!&lt;br>
Но кто трубил? Кто чародея&lt;br>
На сечу грозну вызывал?&lt;br>
Кто колдуна перепугал?&lt;br>
Руслан. Он, местью пламенея,&lt;br>
Достиг обители злодея.&lt;br>
Уж витязь под горой стоит,&lt;br>
Призывный рог, как буря, воет,&lt;br>
Нетерпеливый конь кипит&lt;br>
И снег копытом мочным роет.&lt;br>
Князь карлу ждет. Внезапно он&lt;br>
По шлему крепкому стальному&lt;br>
Рукой незримой поражен;&lt;br>
Удар упал подобно грому;&lt;br>
Руслан подъемлет смутный взор&lt;br>
И видит — прямо над главою —&lt;br>
С подъятой, страшной булавою&lt;br>
Летает карла Черномор.&lt;br>
Щитом покрывшись, он нагнулся,&lt;br>
Мечом потряс и замахнулся;&lt;br>
Но тот взвился под облака;&lt;br>
На миг исчез — и свысока&lt;br>
Шумя летит на князя снова.&lt;br>
Проворный витязь отлетел,&lt;br>
И в снег с размаха рокового&lt;br>
Колдун упал — да там и сел;&lt;br>
Руслан, не говоря ни слова,&lt;br>
С коня долой, к нему спешит,&lt;br>
Поймал, за бороду хватает,&lt;br>
Волшебник силится, кряхтит&lt;br>
И вдруг с Русланом улетает…&lt;br>
Ретивый конь вослед глядит;&lt;br>
Уже колдун под облаками;&lt;br>
На бороде герой висит;&lt;br>
Летят над мрачными лесами,&lt;br>
Летят над дикими горами,&lt;br>
Летят над бездною морской;&lt;br>
От напряженья костенея,&lt;br>
Руслан за бороду злодея&lt;br>
Упорной держится рукой.&lt;br>
Меж тем, на воздухе слабея&lt;br>
И силе русской изумясь,&lt;br>
Волшебник гордому Руслану&lt;br>
Коварно молвит: «Слушай, князь!&lt;br>
Тебе вредить я перестану;&lt;br>
Младое мужество любя,&lt;br>
Забуду всё, прощу тебя,&lt;br>
Спущусь — но только с уговором…»&lt;br>
«Молчи, коварный чародей! —&lt;br>
Прервал наш витязь: — с Черномором,&lt;br>
С мучителем жены своей,&lt;br>
Руслан не знает договора!&lt;br>
Сей грозный меч накажет вора.&lt;br>
Лети хоть до ночной звезды,&lt;br>
А быть тебе без бороды!»&lt;br>
Боязнь объемлет Черномора;&lt;br>
В досаде, в горести немой,&lt;br>
Напрасно длинной бородой&lt;br>
Усталый карла потрясает:&lt;br>
Руслан ее не выпускает&lt;br>
И щиплет волосы порой.&lt;br>
Два дни колдун героя носит,&lt;br>
На третий он пощады просит:&lt;br>
«О рыцарь, сжалься надо мной;&lt;br>
Едва дышу; нет мочи боле;&lt;br>
Оставь мне жизнь, в твоей я воле;&lt;br>
Скажи — спущусь, куда велишь…»&lt;br>
«Теперь ты наш: ага, дрожишь!&lt;br>
Смирись, покорствуй русской силе!&lt;br>
Неси меня к моей Людмиле».&lt;/p>
&lt;p>Смиренно внемлет Черномор;&lt;br>
Домой он с витязем пустился;&lt;br>
Летит — и мигом очутился&lt;br>
Среди своих ужасных гор.&lt;br>
Тогда Руслан одной рукою&lt;br>
Взял меч сраженной головы&lt;br>
И, бороду схватив другою,&lt;br>
Отсек ее, как горсть травы.&lt;br>
«Знай наших! — молвил он жестоко, —&lt;br>
Что, хищник, где твоя краса?&lt;br>
Где сила?» — и на шлем высокий&lt;br>
Седые вяжет волоса;&lt;br>
Свистя зовет коня лихого;&lt;br>
Веселый конь летит и ржет;&lt;br>
Наш витязь карлу чуть живого&lt;br>
В котомку за седло кладет,&lt;br>
А сам, боясь мгновенья траты,&lt;br>
Спешит на верх горы крутой,&lt;br>
Достиг, и с радостной душой&lt;br>
Летит в волшебные палаты.&lt;br>
Вдали завидя шлем брадатый,&lt;br>
Залог победы роковой,&lt;br>
Пред ним арапов чудный рой,&lt;br>
Толпы невольниц боязливых,&lt;br>
Как призраки, со всех сторон&lt;br>
Бегут — и скрылись. Ходит он&lt;br>
Один средь храмин горделивых,&lt;br>
Супругу милую зовет —&lt;br>
Лишь эхо сводов молчаливых&lt;br>
Руслану голос подает;&lt;br>
В волненье чувств нетерпеливых&lt;br>
Он отворяет двери в сад —&lt;br>
Идет, идет — и не находит;&lt;br>
Кругом смущенный взор обводит —&lt;br>
Всё мертво: рощицы молчат,&lt;br>
Беседки пусты; на стремнинах,&lt;br>
Вдоль берегов ручья, в долинах,&lt;br>
Нигде Людмилы следу нет,&lt;br>
И ухо ничего не внемлет.&lt;br>
Внезапный князя хлад объемлет,&lt;br>
В очах его темнеет свет,&lt;br>
В уме возникли мрачны думы…&lt;br>
«Быть может, горесть… плен угрюмый…&lt;br>
Минута… волны…» В сих мечтах&lt;br>
Он погружен. С немой тоскою&lt;br>
Поникнул витязь головою;&lt;br>
Его томит невольный страх;&lt;br>
Недвижим он, как мертвый камень;&lt;br>
Мрачится разум; дикий пламень&lt;br>
И яд отчаянной любви&lt;br>
Уже текут в его крови.&lt;br>
Казалось — тень княжны прекрасной&lt;br>
Коснулась трепетным устам…&lt;br>
И вдруг, неистовый, ужасный,&lt;br>
Стремится витязь по садам;&lt;br>
Людмилу с воплем призывает,&lt;br>
С холмов утесы отрывает,&lt;br>
Всё рушит, всё крушит мечом —&lt;br>
Беседки, рощи упадают,&lt;br>
Древа, мосты в волнах ныряют,&lt;br>
Степь обнажается кругом!&lt;br>
Далеко гулы повторяют&lt;br>
И рев, и треск, и шум, и гром;&lt;br>
Повсюду меч звенит и свищет,&lt;br>
Прелестный край опустошен —&lt;br>
Безумный витязь жертвы ищет,&lt;br>
С размаха вправо, влево он&lt;br>
Пустынный воздух рассекает…&lt;br>
И вдруг — нечаянный удар&lt;br>
С княжны невидимой сбивает&lt;br>
Прощальный Черномора дар…&lt;br>
Волшебства вмиг исчезла сила:&lt;br>
В сетях открылася Людмила!&lt;br>
Не веря сам своим очам,&lt;br>
Нежданным счастьем упоенный,&lt;br>
Наш витязь падает к ногам&lt;br>
Подруги верной, незабвенной,&lt;br>
Целует руки, сети рвет,&lt;br>
Любви, восторга слезы льет,&lt;br>
Зовет ее — но дева дремлет,&lt;br>
Сомкнуты очи и уста,&lt;br>
И сладострастная мечта&lt;br>
Младую грудь ее подъемлет.&lt;br>
Руслан с нее не сводит глаз,&lt;br>
Его терзает вновь кручина…&lt;br>
Но вдруг знакомый слышит глас,&lt;br>
Глас добродетельного Финна:&lt;/p>
&lt;p>«Мужайся, князь! В обратный путь&lt;br>
Ступай со спящею Людмилой;&lt;br>
Наполни сердце новой силой,&lt;br>
Любви и чести верен будь.&lt;br>
Небесный гром на злобу грянет,&lt;br>
И воцарится тишина —&lt;br>
И в светлом Киеве княжна&lt;br>
Перед Владимиром восстанет&lt;br>
От очарованного сна».&lt;/p>
&lt;p>Руслан, сим гласом оживленный,&lt;br>
Берет в объятия жену,&lt;br>
И тихо с ношей драгоценной&lt;br>
Он оставляет вышину&lt;br>
И сходит в дол уединенный.&lt;/p>
&lt;p>В молчанье, с карлой за седлом,&lt;br>
Поехал он своим путем;&lt;br>
В его руках лежит Людмила,&lt;br>
Свежа, как вешняя заря,&lt;br>
И на плечо богатыря&lt;br>
Лицо спокойное склонила.&lt;br>
Власами, свитыми в кольцо,&lt;br>
Пустынный ветерок играет;&lt;br>
Как часто грудь ее вздыхает!&lt;br>
Как часто тихое лицо&lt;br>
Мгновенной розою пылает!&lt;br>
Любовь и тайная мечта&lt;br>
Русланов образ ей приносят,&lt;br>
И с томным шопотом уста&lt;br>
Супруга имя произносят…&lt;br>
В забвенье сладком ловит он&lt;br>
Ее волшебное дыханье,&lt;br>
Улыбку, слезы, нежный стон&lt;br>
И сонных персей волнованье…&lt;/p>
&lt;p>Меж тем, по долам, по горам,&lt;br>
И в белый день, и по ночам,&lt;br>
Наш витязь едет непрестанно.&lt;br>
Еще далек предел желанный,&lt;br>
А дева спит. Но юный князь,&lt;br>
Бесплодным пламенем томясь,&lt;br>
Ужель, страдалец постоянный,&lt;br>
Супругу только сторожил&lt;br>
И в целомудренном мечтанье,&lt;br>
Смирив нескромное желанье,&lt;br>
Свое блаженство находил?&lt;br>
Монах, который сохранил&lt;br>
Потомству верное преданье&lt;br>
О славном витязе моем,&lt;br>
Нас уверяет смело в том:&lt;br>
И верю я! Без разделенья&lt;br>
Унылы, грубы наслажденья:&lt;br>
Мы прямо счастливы вдвоем.&lt;br>
Пастушки, сон княжны прелестной&lt;br>
Не походил на ваши сны,&lt;br>
Порой томительной весны,&lt;br>
На мураве, в тени древесной.&lt;br>
Я помню маленький лужок&lt;br>
Среди березовой дубравы,&lt;br>
Я помню темный вечерок,&lt;br>
Я помню Лиды сон лукавый…&lt;br>
Ах, первый поцелуй любви,&lt;br>
Дрожащий, легкий, торопливый,&lt;br>
Не разогнал, друзья мои,&lt;br>
Ее дремоты терпеливой…&lt;br>
Но полно, я болтаю вздор!&lt;br>
К чему любви воспоминанье?&lt;br>
Ее утеха и страданье&lt;br>
Забыты мною с давних пор;&lt;br>
Теперь влекут мое вниманье&lt;br>
Княжна, Руслан и Черномор.&lt;/p>
&lt;p>Пред ними стелется равнина,&lt;br>
Где ели изредка взошли;&lt;br>
И грозного холма вдали&lt;br>
Чернеет круглая вершина&lt;br>
Небес на яркой синеве.&lt;br>
Руслан глядит — и догадался,&lt;br>
Что подъезжает к голове;&lt;br>
Быстрее борзый конь помчался;&lt;br>
Уж видно чудо из чудес;&lt;br>
Она глядит недвижным оком;&lt;br>
Власы ее как черный лес,&lt;br>
Поросший на челе высоком;&lt;br>
Ланиты жизни лишены,&lt;br>
Свинцовой бледностью покрыты;&lt;br>
Уста огромные открыты,&lt;br>
Огромны зубы стеснены …&lt;br>
Над полумертвой головою&lt;br>
Последний день уж тяготел.&lt;br>
К ней храбрый витязь прилетел&lt;br>
С Людмилой, с карлой за спиною.&lt;br>
Он крикнул: «Здравствуй, голова!&lt;br>
Я здесь! наказан твой изменник!&lt;br>
Гляди: вот он, злодей наш пленник!»&lt;br>
И князя гордые слова&lt;br>
Ее внезапно оживили,&lt;br>
На миг в ней чувство разбудили,&lt;br>
Очнулась будто ото сна,&lt;br>
Взглянула, страшно застонала…&lt;br>
Узнала витязя она&lt;br>
И брата с ужасом узнала.&lt;br>
Надулись ноздри; на щеках&lt;br>
Багровый огнь еще родился,&lt;br>
И в умирающих глазах&lt;br>
Последний гнев изобразился.&lt;br>
В смятенье, в бешенстве немом&lt;br>
Она зубами скрежетала&lt;br>
И брату хладным языком&lt;br>
Укор невнятный лепетала…&lt;br>
Уже ее в тот самый час&lt;br>
Кончалось долгое страданье:&lt;br>
Чела мгновенный пламень гас,&lt;br>
Слабело тяжкое дыханье,&lt;br>
Огромный закатился взор,&lt;br>
И вскоре князь и Черномор&lt;br>
Узрели смерти содроганье…&lt;br>
Она почила вечным сном.&lt;br>
В молчанье витязь удалился;&lt;br>
Дрожащий карлик за седлом&lt;br>
Не смел дышать, не шевелился&lt;br>
И чернокнижным языком&lt;br>
Усердно демонам молился.&lt;/p>
&lt;p>На склоне темных берегов&lt;br>
Какой-то речки безымянной,&lt;br>
В прохладном сумраке лесов,&lt;br>
Стоял поникшей хаты кров,&lt;br>
Густыми соснами венчанный.&lt;br>
В теченье медленном река&lt;br>
Вблизи плетень из тростника&lt;br>
Волною сонной омывала&lt;br>
И вкруг него едва журчала&lt;br>
При легком шуме ветерка.&lt;br>
Долина в сих местах таилась,&lt;br>
Уединенна и темна;&lt;br>
И там, казалось, тишина&lt;br>
С начала мира воцарилась.&lt;br>
Руслан остановил коня.&lt;br>
Всё было тихо, безмятежно;&lt;br>
От рассветающего дня&lt;br>
Долина с рощею прибрежной&lt;br>
Сквозь утренний сияла дым.&lt;br>
Руслан на луг жену слагает,&lt;br>
Садится близ нее, вздыхает&lt;br>
С уныньем сладким и немым;&lt;br>
И вдруг он видит пред собою&lt;br>
Смиренный парус челнока&lt;br>
И слышит песню рыбака&lt;br>
Над тихоструйною рекою.&lt;br>
Раскинув невод по волнам,&lt;br>
Рыбак, на весла наклоненный,&lt;br>
Плывет к лесистым берегам,&lt;br>
К порогу хижины смиренной.&lt;br>
И видит добрый князь Руслан:&lt;br>
Челнок ко брегу приплывает;&lt;br>
Из темной хаты выбегает&lt;br>
Младая дева; стройный стан,&lt;br>
Власы, небрежно распущенны,&lt;br>
Улыбка, тихий взор очей,&lt;br>
И грудь, и плечи обнаженны,&lt;br>
Всё мило, всё пленяет в ней.&lt;br>
И вот они, обняв друг друга,&lt;br>
Садятся у прохладных вод,&lt;br>
И час беспечного досуга&lt;br>
Для них с любовью настает.&lt;br>
Но в изумленье молчаливом&lt;br>
Кого же в рыбаке счастливом&lt;br>
Наш юный витязь узнает?&lt;br>
Хазарский хан, избранный славой,&lt;br>
Ратмир, в любви, в войне кровавой&lt;br>
Его соперник молодой,&lt;br>
Ратмир в пустыне безмятежной&lt;br>
Людмилу, славу позабыл&lt;br>
И им навеки изменил&lt;br>
В объятиях подруги нежной.&lt;/p>
&lt;p>Герой приближился, и вмиг&lt;br>
Отшельник узнает Руслана,&lt;br>
Встает, летит. Раздался крик…&lt;br>
И обнял князь младого хана.&lt;br>
«Что вижу я? — спросил герой, —&lt;br>
Зачем ты здесь, зачем оставил&lt;br>
Тревоги жизни боевой&lt;br>
И меч, который ты прославил?»&lt;br>
«Мой друг, — ответствовал рыбак, —&lt;br>
Душе наскучил бранной славы&lt;br>
Пустой и гибельный призрак.&lt;br>
Поверь: невинные забавы,&lt;br>
Любовь и мирные дубравы&lt;br>
Милее сердцу во сто крат.&lt;br>
Теперь, утратив жажду брани,&lt;br>
Престал платить безумству дани,&lt;br>
И, верным счастием богат,&lt;br>
Я всё забыл, товарищ милый,&lt;br>
Всё, даже прелести Людмилы».&lt;br>
«Любезный хан, я очень рад! —&lt;br>
Сказал Руслан, — она со мною».&lt;br>
«Возможно ли, какой судьбою?&lt;br>
Что слышу? Русская княжна…&lt;br>
Она с тобою, где ж она?&lt;br>
Позволь… но нет, боюсь измены;&lt;br>
Моя подруга мне мила;&lt;br>
Моей счастливой перемены&lt;br>
Она виновницей была;&lt;br>
Она мне жизнь, она мне радость!&lt;br>
Она мне возвратила вновь&lt;br>
Мою утраченную младость,&lt;br>
И мир, и чистую любовь.&lt;br>
Напрасно счастье мне сулили&lt;br>
Уста волшебниц молодых;&lt;br>
Двенадцать дев меня любили:&lt;br>
Я для нее покинул их;&lt;br>
Оставил терем их веселый,&lt;br>
В тени хранительных дубров;&lt;br>
Сложил и меч и шлем тяжелый,&lt;br>
Забыл и славу и врагов.&lt;br>
Отшельник, мирный и безвестный,&lt;br>
Остался в счастливой глуши,&lt;br>
С тобой, друг милый, друг прелестный,&lt;br>
С тобою, свет моей души!»&lt;/p>
&lt;p>Пастушка милая внимала&lt;br>
Друзей открытый разговор&lt;br>
И, устремив на хана взор,&lt;br>
И улыбалась и вздыхала.&lt;/p>
&lt;p>Рыбак и витязь на брегах&lt;br>
До темной ночи просидели&lt;br>
С душой и сердцем на устах —&lt;br>
Часы невидимо летели.&lt;br>
Чернеет лес, темна гора;&lt;br>
Встает луна — всё тихо стало;&lt;br>
Герою в путь давно пора.&lt;br>
Накинув тихо покрывало&lt;br>
На деву спящую, Руслан&lt;br>
Идет и на коня садится;&lt;br>
Задумчиво безмолвный хан&lt;br>
Душой вослед ему стремится,&lt;br>
Руслану счастия, побед,&lt;br>
И славы, и любви желает…&lt;br>
И думы гордых, юных лет&lt;br>
Невольной грустью оживляет…&lt;/p>
&lt;p>Зачем судьбой не суждено&lt;br>
Моей непостоянной лире&lt;br>
Геройство воспевать одно&lt;br>
И с ним (незнаемые в мире)&lt;br>
Любовь и дружбу старых лет?&lt;br>
Печальной истины поэт,&lt;br>
Зачем я должен для потомства&lt;br>
Порок и злобу обнажать&lt;br>
И тайны козни вероломства&lt;br>
В правдивых песнях обличать?&lt;/p>
&lt;p>Княжны искатель недостойный,&lt;br>
Охоту к славе потеряв,&lt;br>
Никем не знаемый, Фарлаф&lt;br>
В пустыне дальней и спокойной&lt;br>
Скрывался и Наины ждал.&lt;br>
И час торжественный настал.&lt;br>
К нему волшебница явилась,&lt;br>
Вещая: «Знаешь ли меня?&lt;br>
Ступай за мной; седлай коня!»&lt;br>
И ведьма кошкой обратилась;&lt;br>
Оседлан конь, она пустилась;&lt;br>
Тропами мрачными дубрав&lt;br>
За нею следует Фарлаф.&lt;/p>
&lt;p>Долина тихая дремала,&lt;br>
В ночной одетая туман,&lt;br>
Луна во мгле перебегала&lt;br>
Из тучи в тучу и курган&lt;br>
Мгновенным блеском озаряла.&lt;br>
Под ним в безмолвии Руслан&lt;br>
Сидел с обычною тоскою&lt;br>
Пред усыпленною княжною.&lt;br>
Глубоку думу думал он,&lt;br>
Мечты летели за мечтами,&lt;br>
И неприметно веял сон&lt;br>
Над ним холодными крылами.&lt;br>
На деву смутными очами&lt;br>
В дремоте томной он взглянул&lt;br>
И, утомленною главою&lt;br>
Склонясь к ногам ее, заснул.&lt;/p>
&lt;p>И снится вещий сон герою:&lt;br>
Он видит, будто бы княжна&lt;br>
Над страшной бездны глубиною&lt;br>
Стоит недвижна и бледна…&lt;br>
И вдруг Людмила исчезает,&lt;br>
Стоит один над бездной он…&lt;br>
Знакомый глас, призывный стон&lt;br>
Из тихой бездны вылетает…&lt;br>
Руслан стремится за женой;&lt;br>
Стремглав летит во тьме глубокой…&lt;br>
И видит вдруг перед собой:&lt;br>
Владимир, в гриднице высокой,&lt;br>
В кругу седых богатырей,&lt;br>
Между двенадцатью сынами,&lt;br>
С толпою названных гостей&lt;br>
Сидит за браными столами.&lt;br>
И так же гневен старый князь,&lt;br>
Как в день ужасный расставанья,&lt;br>
И все сидят не шевелясь,&lt;br>
Не смея перервать молчанья.&lt;br>
Утих веселый шум гостей,&lt;br>
Не ходит чаша круговая…&lt;br>
И видит он среди гостей&lt;br>
В бою сраженного Рогдая:&lt;br>
Убитый как живой сидит;&lt;br>
Из опененного стакана&lt;br>
Он, весел, пьет и не глядит&lt;br>
На изумленного Руслана.&lt;br>
Князь видит и младого хана,&lt;br>
Друзей и недругов… и вдруг&lt;br>
Раздался гуслей беглый звук&lt;br>
И голос вещего Баяна,&lt;br>
Певца героев и забав.&lt;br>
Вступает в гридницу Фарлаф,&lt;br>
Ведет он за руку Людмилу;&lt;br>
Но старец, с места не привстав,&lt;br>
Молчит, склонив главу унылу,&lt;br>
Князья, бояре — все молчат,&lt;br>
Душевные движенья кроя.&lt;br>
И всё исчезло — смертный хлад&lt;br>
Объемлет спящего героя.&lt;br>
В дремоту тяжко погружен,&lt;br>
Он льет мучительные слезы,&lt;br>
В волненьи мыслит: это сон!&lt;br>
Томится, но зловещей грезы,&lt;br>
Увы, прервать не в силах он.&lt;/p>
&lt;p>Луна чуть светит над горою;&lt;br>
Объяты рощи темнотою,&lt;br>
Долина в мертвой тишине…&lt;br>
Изменник едет на коне.&lt;/p>
&lt;p>Пред ним открылася поляна;&lt;br>
Он видит сумрачный курган;&lt;br>
У ног Людмилы спит Руслан,&lt;br>
И ходит конь кругом кургана.&lt;br>
Фарлаф с боязнию глядит;&lt;br>
В тумане ведьма исчезает,&lt;br>
В нем сердце замерло, дрожит,&lt;br>
Из хладных рук узду роняет,&lt;br>
Тихонько обнажает меч,&lt;br>
Готовясь витязя без боя&lt;br>
С размаха надвое рассечь…&lt;br>
К нему подъехал. Конь героя,&lt;br>
Врага почуя, закипел,&lt;br>
Заржал и топнул. Знак напрасный!&lt;br>
Руслан не внемлет; сон ужасный,&lt;br>
Как груз, над ним отяготел!..&lt;br>
Изменник, ведьмой ободренный,&lt;br>
Герою в грудь рукой презренной&lt;br>
Вонзает трижды хладну сталь…&lt;br>
И мчится боязливо вдаль&lt;br>
С своей добычей драгоценной.&lt;/p>
&lt;p>Всю ночь бесчувственный Руслан&lt;br>
Лежал во мраке под горою.&lt;br>
Часы летели. Кровь рекою&lt;br>
Текла из воспаленных ран.&lt;br>
Поутру, взор открыв туманный,&lt;br>
Пуская тяжкий, слабый стон,&lt;br>
С усильем приподнялся он,&lt;br>
Взглянул, поник главою бранной —&lt;br>
И пал недвижный, бездыханный.&lt;/p>
&lt;h3 id="песнь-шестая">Песнь шестая&lt;/h3>
&lt;p>Ты мне велишь, о друг мой нежный,&lt;br>
На лире легкой и небрежной&lt;br>
Старинны были напевать&lt;br>
И музе верной посвящать&lt;br>
Часы бесценного досуга…&lt;br>
Ты знаешь, милая подруга:&lt;br>
Поссорясь с ветреной молвой,&lt;br>
Твой друг, блаженством упоенный,&lt;br>
Забыл и труд уединенный,&lt;br>
И звуки лиры дорогой.&lt;br>
От гармонической забавы&lt;br>
Я, негой упоен, отвык…&lt;br>
Дышу тобой — и гордой славы&lt;br>
Невнятен мне призывный клик!&lt;br>
Меня покинул тайный гений&lt;br>
И вымыслов, и сладких дум;&lt;br>
Любовь и жажда наслаждений&lt;br>
Одни преследуют мой ум.&lt;br>
Но ты велишь, но ты любила&lt;br>
Рассказы прежние мои,&lt;br>
Преданья славы и любви;&lt;br>
Мой богатырь, моя Людмила,&lt;br>
Владимир, ведьма, Черномор&lt;br>
И Финна верные печали&lt;br>
Твое мечтанье занимали;&lt;br>
Ты, слушая мой легкий вздор,&lt;br>
С улыбкой иногда дремала;&lt;br>
Но иногда свой нежный взор&lt;br>
Нежнее на певца бросала…&lt;br>
Решусь: влюбленный говорун,&lt;br>
Касаюсь вновь ленивых струн;&lt;br>
Сажусь у ног твоих и снова&lt;br>
Бренчу про витязя младого.&lt;/p>
&lt;p>Но что сказал я? Где Руслан?&lt;br>
Лежит он мертвый в чистом поле:&lt;br>
Уж кровь его не льется боле,&lt;br>
Над ним летает жадный вран,&lt;br>
Безгласен рог, недвижны латы,&lt;br>
Не шевелится шлем косматый!&lt;/p>
&lt;p>Вокруг Руслана ходит конь,&lt;br>
Поникнув гордой головою,&lt;br>
В его глазах исчез огонь!&lt;br>
Не машет гривой золотою,&lt;br>
Не тешится, не скачет он&lt;br>
И ждет, когда Руслан воспрянет…&lt;br>
Но князя крепок хладный сон,&lt;br>
И долго щит его не грянет.&lt;/p>
&lt;p>А Черномор? Он за седлом,&lt;br>
В котомке, ведьмою забытый,&lt;br>
Еще не знает ни о чем;&lt;br>
Усталый, сонный и сердитый&lt;br>
Княжну, героя моего&lt;br>
Бранил от скуки молчаливо;&lt;br>
Не слыша долго ничего,&lt;br>
Волшебник выглянул — о диво!&lt;br>
Он видит, богатырь убит;&lt;br>
В крови потопленный лежит;&lt;br>
Людмилы нет, всё пусто в поле;&lt;br>
Злодей от радости дрожит&lt;br>
И мнит: свершилось, я на воле!&lt;br>
Но старый карла был неправ.&lt;/p>
&lt;p>Меж тем, Наиной осененный,&lt;br>
С Людмилой, тихо усыпленной,&lt;br>
Стремится к Киеву Фарлаф:&lt;br>
Летит, надежды, страха полный;&lt;br>
Пред ним уже днепровски волны&lt;br>
В знакомых пажитях шумят;&lt;br>
Уж видит златоверхий град;&lt;br>
Уже Фарлаф по граду мчится,&lt;br>
И шум на стогнах восстает;&lt;br>
В волненье радостном народ&lt;br>
Валит за всадником, теснится;&lt;br>
Бегут обрадовать отца:&lt;br>
И вот изменник у крыльца.&lt;/p>
&lt;p>Влача в душе печали бремя,&lt;br>
Владимир-солнышко в то время&lt;br>
В высоком тереме своем&lt;br>
Сидел, томясь привычной думой.&lt;br>
Бояре, витязи кругом&lt;br>
Сидели с важностью угрюмой.&lt;br>
Вдруг внемлет он: перед крыльцом&lt;br>
Волненье, крики, шум чудесный;&lt;br>
Дверь отворилась; перед ним&lt;br>
Явился воин неизвестный;&lt;br>
Все встали с шепотом глухим&lt;br>
И вдруг смутились, зашумели:&lt;br>
«Людмила здесь! Фарлаф… ужели?»&lt;br>
В лице печальном изменясь,&lt;br>
Встает со стула старый князь,&lt;br>
Спешит тяжелыми шагами&lt;br>
К несчастной дочери своей,&lt;br>
Подходит; отчими руками&lt;br>
Он хочет прикоснуться к ней;&lt;br>
Но дева милая не внемлет,&lt;br>
И очарованная дремлет&lt;br>
В руках убийцы — все глядят&lt;br>
На князя в смутном ожиданье;&lt;br>
И старец беспокойный взгляд&lt;br>
Вперил на витязя в молчанье.&lt;br>
Но, хитро перст к устам прижав,&lt;br>
«Людмила спит, — сказал Фарлаф, —&lt;br>
Я так нашел ее недавно&lt;br>
В пустынных муромских лесах&lt;br>
У злого лешего в руках;&lt;br>
Там совершилось дело славно;&lt;br>
Три дня мы билися; луна&lt;br>
Над боем трижды подымалась;&lt;br>
Он пал, а юная княжна&lt;br>
Мне в руки сонною досталась;&lt;br>
И кто прервет сей дивный сон?&lt;br>
Когда настанет пробужденье?&lt;br>
Не знаю — скрыт судьбы закон!&lt;br>
А нам надежда и терпенье&lt;br>
Одни остались в утешенье».&lt;/p>
&lt;p>И вскоре с вестью роковой&lt;br>
Молва по граду полетела;&lt;br>
Народа пестрою толпой&lt;br>
Градская площадь закипела;&lt;br>
Печальный терем всем открыт;&lt;br>
Толпа волнуется, валит&lt;br>
Туда, где на одре высоком,&lt;br>
На одеяле парчевом&lt;br>
Княжна лежит во сне глубоком;&lt;br>
Князья и витязи кругом&lt;br>
Стоят унылы; гласы трубны,&lt;br>
Рога, тимпаны, гусли, бубны&lt;br>
Гремят над нею; старый князь,&lt;br>
Тоской тяжелой изнурясь,&lt;br>
К ногам Людмилы сединами&lt;br>
Приник с безмолвными слезами;&lt;br>
И бледный близ него Фарлаф,&lt;br>
В немом раскаянье, в досаде&lt;br>
Трепещет, дерзость потеряв.&lt;/p>
&lt;p>Настала ночь. Никто во граде&lt;br>
Очей бессонных не смыкал&lt;br>
Шумя, теснились все друг к другу:&lt;br>
О чуде всякий толковал;&lt;br>
Младой супруг свою супругу&lt;br>
В светлице скромной забывал.&lt;br>
Но только свет луны двурогой&lt;br>
Исчез пред утренней зарей,&lt;br>
Весь Киев новою тревогой&lt;br>
Смутился! Клики, шум и вой&lt;br>
Возникли всюду. Киевляне&lt;br>
Толпятся на стене градской…&lt;br>
И видят: в утреннем тумане&lt;br>
Шатры белеют за рекой;&lt;br>
Щиты, как зарево, блистают,&lt;br>
В полях наездники мелькают,&lt;br>
Вдали подъемля черный прах;&lt;br>
Идут походные телеги,&lt;br>
Костры пылают на холмах.&lt;br>
Беда: восстали печенеги!&lt;/p>
&lt;p>Но в это время вещий Финн,&lt;br>
Духов могучий властелин,&lt;br>
В своей пустыне безмятежной,&lt;br>
С спокойным сердцем ожидал,&lt;br>
Чтоб день судьбины неизбежной,&lt;br>
Давно предвиденный, восстал.&lt;/p>
&lt;p>В немой глуши степей горючих&lt;br>
За дальней цепью диких гор,&lt;br>
Жилища ветров, бурь гремучих,&lt;br>
Куда и ведьмы смелый взор&lt;br>
Проникнуть в поздний час боится,&lt;br>
Долина чудная таится,&lt;br>
И в той долине два ключа:&lt;br>
Один течет волной живою,&lt;br>
По камням весело журча,&lt;br>
Тот льется мертвою водою;&lt;br>
Кругом всё тихо, ветры спят,&lt;br>
Прохлада вешняя не веет,&lt;br>
Столетни сосны не шумят,&lt;br>
Не вьются птицы, лань не смеет&lt;br>
В жар летний пить из тайных вод;&lt;br>
Чета духов с начала мира,&lt;br>
Безмолвная на лоне мира,&lt;br>
Дремучий берег стережет …&lt;br>
С двумя кувшинами пустыми&lt;br>
Предстал отшельник перед ними;&lt;br>
Прервали духи давний сон&lt;br>
И удалились страха полны.&lt;br>
Склонившись, погружает он&lt;br>
Сосуды в девственные волны;&lt;br>
Наполнил, в воздухе пропал&lt;br>
И очутился в два мгновенья&lt;br>
В долине, где Руслан лежал&lt;br>
В крови, безгласный, без движенья;&lt;br>
И стал над рыцарем старик,&lt;br>
И вспрыснул мертвою водою,&lt;br>
И раны засияли вмиг,&lt;br>
И труп чудесной красотою&lt;br>
Процвел; тогда водой живою&lt;br>
Героя старец окропил,&lt;br>
И бодрый, полный новых сил,&lt;br>
Трепеща жизнью молодою,&lt;br>
Встает Руслан, на ясный день&lt;br>
Очами жадными взирает,&lt;br>
Как безобразный сон, как тень,&lt;br>
Пред ним минувшее мелькает.&lt;br>
Но где Людмила? Он один!&lt;br>
В нем сердце, вспыхнув, замирает.&lt;br>
Вдруг витязь вспрянул; вещий Финн&lt;br>
Его зовет и обнимает:&lt;br>
«Судьба свершилась, о мой сын!&lt;br>
Тебя блаженство ожидает;&lt;br>
Тебя зовет кровавый пир;&lt;br>
Твой грозный меч бедою грянет;&lt;br>
На Киев снидет кроткий мир,&lt;br>
И там она тебе предстанет.&lt;br>
Возьми заветное кольцо,&lt;br>
Коснися им чела Людмилы,&lt;br>
И тайных чар исчезнут силы,&lt;br>
Врагов смутит твое лицо,&lt;br>
Настанет мир, погибнет злоба.&lt;br>
Достойны счастья будьте оба!&lt;br>
Прости надолго, витязь мой!&lt;br>
Дай руку… там, за дверью гроба —&lt;br>
Не прежде — свидимся с тобой!»&lt;br>
Сказал, исчезнул. Упоенный&lt;br>
Восторгом пылким и немым,&lt;br>
Руслан, для жизни пробужденный,&lt;br>
Подъемлет руки вслед за ним.&lt;br>
Но ничего не слышно боле!&lt;br>
Руслан один в пустынном поле;&lt;br>
Запрыгав, с карлой за седлом,&lt;br>
Русланов конь нетерпеливый&lt;br>
Бежит и ржет, махая гривой;&lt;br>
Уж князь готов, уж он верхом,&lt;br>
Уж он летит живой и здравый&lt;br>
Через поля, через дубравы.&lt;/p>
&lt;p>Но между тем какой позор&lt;br>
Являет Киев осажденный?&lt;br>
Там, устремив на нивы взор,&lt;br>
Народ, уныньем пораженный,&lt;br>
Стоит на башнях и стенах&lt;br>
И в страхе ждет небесной казни;&lt;br>
Стенанья робкие в домах,&lt;br>
На стогнах тишина боязни;&lt;br>
Один, близ дочери своей,&lt;br>
Владимир в горестной молитве;&lt;br>
И храбрый сонм богатырей&lt;br>
С дружиной верною князей&lt;br>
Готовится к кровавой битве.&lt;/p>
&lt;p>И день настал. Толпы врагов&lt;br>
С зарею двинулись с холмов;&lt;br>
Неукротимые дружины,&lt;br>
Волнуясь, хлынули с равнины&lt;br>
И потекли к стене градской;&lt;br>
Во граде трубы загремели,&lt;br>
Бойцы сомкнулись, полетели&lt;br>
Навстречу рати удалой,&lt;br>
Сошлись — и заварился бой.&lt;br>
Почуя смерть, взыграли кони,&lt;br>
Пошли стучать мечи о брони;&lt;br>
Со свистом туча стрел взвилась,&lt;br>
Равнина кровью залилась;&lt;br>
Стремглав наездники помчались,&lt;br>
Дружины конные смешались;&lt;br>
Сомкнутой, дружною стеной&lt;br>
Там рубится со строем строй;&lt;br>
Со всадником там пеший бьется;&lt;br>
Там конь испуганный несется;&lt;br>
Там клики битвы, там побег;&lt;br>
Там русский пал, там печенег;&lt;br>
Тот опрокинут булавою;&lt;br>
Тот легкой поражен стрелою;&lt;br>
Другой, придавленный щитом,&lt;br>
Растоптан бешеным конем…&lt;br>
И длился бой до темной ночи;&lt;br>
Ни враг, ни наш не одолел!&lt;br>
За грудами кровавых тел&lt;br>
Бойцы сомкнули томны очи,&lt;br>
И крепок был их бранный сон;&lt;br>
Лишь изредка на поле битвы&lt;br>
Был слышен падших скорбный стон&lt;br>
И русских витязей молитвы.&lt;/p>
&lt;p>Бледнела утренняя тень,&lt;br>
Волна сребрилася в потоке,&lt;br>
Сомнительный рождался день&lt;br>
На отуманенном востоке.&lt;br>
Яснели холмы и леса,&lt;br>
И просыпались небеса.&lt;br>
Еще в бездейственном покое&lt;br>
Дремало поле боевое;&lt;br>
Вдруг сон прервался: вражий стан&lt;br>
С тревогой шумною воспрянул,&lt;br>
Внезапный крик сражений грянул;&lt;br>
Смутилось сердце киевлян;&lt;br>
Бегут нестройными толпами&lt;br>
И видят: в поле меж врагами,&lt;br>
Блистая в латах, как в огне,&lt;br>
Чудесный воин на коне&lt;br>
Грозой несется, колет, рубит,&lt;br>
В ревущий рог, летая, трубит…&lt;br>
То был Руслан. Как божий гром,&lt;br>
Наш витязь пал на басурмана;&lt;br>
Он рыщет с карлой за седлом&lt;br>
Среди испуганного стана.&lt;br>
Где ни просвищет грозный меч,&lt;br>
Где конь сердитый ни промчится,&lt;br>
Везде главы слетают с плеч&lt;br>
И с воплем строй на строй валится;&lt;br>
В одно мгновенье бранный луг&lt;br>
Покрыт холмами тел кровавых,&lt;br>
Живых, раздавленных, безглавых,&lt;br>
Громадой копий, стрел, кольчуг.&lt;br>
На трубный звук, на голос боя&lt;br>
Дружины конные славян&lt;br>
Помчались по следам героя,&lt;br>
Сразились… гибни, басурман!&lt;br>
Объемлет ужас печенегов;&lt;br>
Питомцы бурные набегов&lt;br>
Зовут рассеянных коней,&lt;br>
Противиться не смеют боле&lt;br>
И с диким воплем в пыльном поле&lt;br>
Бегут от киевских мечей,&lt;br>
Обречены на жертву аду;&lt;br>
Их сонмы русский меч казнит;&lt;br>
Ликует Киев… Но по граду&lt;br>
Могучий богатырь летит;&lt;br>
В деснице держит меч победный;&lt;br>
Копье сияет как звезда;&lt;br>
Струится кровь с кольчуги медной;&lt;br>
На шлеме вьется борода;&lt;br>
Летит, надеждой окриленный,&lt;br>
По стогнам шумным в княжий дом.&lt;br>
Народ, восторгом упоенный,&lt;br>
Толпится с кликами кругом,&lt;br>
И князя радость оживила.&lt;br>
В безмолвный терем входит он,&lt;br>
Где дремлет чудным сном Людмила;&lt;br>
Владимир, в думу погружен,&lt;br>
У ног ее стоял унылый.&lt;br>
Он был один. Его друзей&lt;br>
Война влекла в поля кровавы.&lt;br>
Но с ним Фарлаф, чуждаясь славы,&lt;br>
Вдали от вражеских мечей,&lt;br>
В душе презрев тревоги стана,&lt;br>
Стоял на страже у дверей.&lt;br>
Едва злодей узнал Руслана,&lt;br>
В нем кровь остыла, взор погас,&lt;br>
В устах открытых замер глас,&lt;br>
И пал без чувств он на колена…&lt;br>
Достойной казни ждет измена!&lt;br>
Но, помня тайный дар кольца,&lt;br>
Руслан летит к Людмиле спящей,&lt;br>
Ее спокойного лица&lt;br>
Касается рукой дрожащей…&lt;br>
И чудо: юная княжна,&lt;br>
Вздохнув, открыла светлы очи!&lt;br>
Казалось, будто бы она&lt;br>
Дивилася столь долгой ночи;&lt;br>
Казалось, что какой-то сон&lt;br>
Ее томил мечтой неясной,&lt;br>
И вдруг узнала — это он!&lt;br>
И князь в объятиях прекрасной.&lt;br>
Воскреснув пламенной душой,&lt;br>
Руслан не видит, не внимает,&lt;br>
И старец в радости немой,&lt;br>
Рыдая, милых обнимает.&lt;/p>
&lt;p>Чем кончу длинный мой рассказ?&lt;br>
Ты угадаешь, друг мой милый!&lt;br>
Неправый старца гнев погас;&lt;br>
Фарлаф пред ним и пред Людмилой&lt;br>
У ног Руслана объявил&lt;br>
Свой стыд и мрачное злодейство;&lt;br>
Счастливый князь ему простил;&lt;br>
Лишенный силы чародейства,&lt;br>
Был принят карла во дворец;&lt;br>
И, бедствий празднуя конец,&lt;br>
Владимир в гриднице высокой&lt;br>
Запировал в семье своей.&lt;/p>
&lt;p>Дела давно минувших дней,&lt;br>
Преданья старины глубокой.&lt;/p>
&lt;h3 id="эпилог">Эпилог&lt;/h3>
&lt;p>Так, мира житель равнодушный,&lt;br>
На лоне праздной тишины,&lt;br>
Я славил лирою послушной&lt;br>
Преданья темной старины.&lt;br>
Я пел — и забывал обиды&lt;br>
Слепого счастья и врагов,&lt;br>
Измены ветреной Дориды&lt;br>
И сплетни шумные глупцов.&lt;br>
На крыльях вымысла носимый,&lt;br>
Ум улетал за край земной;&lt;br>
И между тем грозы незримой&lt;br>
Сбиралась туча надо мной!..&lt;br>
Я погибал… Святой хранитель&lt;br>
Первоначальных, бурных дней,&lt;br>
О дружба, нежный утешитель&lt;br>
Болезненной души моей!&lt;br>
Ты умолила непогоду;&lt;br>
Ты сердцу возвратила мир;&lt;br>
Ты сохранила мне свободу,&lt;br>
Кипящей младости кумир!&lt;br>
Забытый светом и молвою,&lt;br>
Далече от брегов Невы,&lt;br>
Теперь я вижу пред собою&lt;br>
Кавказа гордые главы.&lt;br>
Над их вершинами крутыми,&lt;br>
На скате каменных стремнин,&lt;br>
Питаюсь чувствами немыми&lt;br>
И чудной прелестью картин&lt;br>
Природы дикой и угрюмой;&lt;br>
Душа, как прежде, каждый час&lt;br>
Полна томительною думой —&lt;br>
Но огнь поэзии погас.&lt;br>
Ищу напрасно впечатлений:&lt;br>
Она прошла, пора стихов,&lt;br>
Пора любви, веселых снов,&lt;br>
Пора сердечных вдохновений!&lt;br>
Восторгов краткий день протек —&lt;br>
И скрылась от меня навек&lt;br>
Богиня тихих песнопений…&lt;/p></content:encoded></item><item><title>Ломоносов</title><link>https://alexalejandre.com/poetry/russian/lomonosov/</link><pubDate>Sat, 01 Jan 1820 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/russian/lomonosov/</guid><description>&lt;p>В стране угрюмой и пустой,&lt;br>
Где только дикой красотой&lt;br>
Природа поражает взоры;&lt;br>
Где в грозной прелести своей&lt;br>
Растут из бездн морских зыбей&lt;br>
И носятся в волнах льдяные горы;&lt;br>
Где обнаженные стоят кругом леса&lt;br>
И солнце хладное сияет,&lt;br>
Где ночь на полгода скрывает&lt;br>
Под мрачную завесу небеса, —&lt;/p></description><content:encoded>&lt;p>В стране угрюмой и пустой,&lt;br>
Где только дикой красотой&lt;br>
Природа поражает взоры;&lt;br>
Где в грозной прелести своей&lt;br>
Растут из бездн морских зыбей&lt;br>
И носятся в волнах льдяные горы;&lt;br>
Где обнаженные стоят кругом леса&lt;br>
И солнце хладное сияет,&lt;br>
Где ночь на полгода скрывает&lt;br>
Под мрачную завесу небеса, —&lt;/p>
&lt;p>Там юноша, сын дикой сей природы,&lt;br>
Склонивши взор с гранитных скал&lt;br>
На льды, на пенистые воды,&lt;br>
Мечтою темною искал&lt;br>
За таинственной далью&lt;br>
Счастливых берегов:&lt;br>
И всё сливалося с его печалью,&lt;br>
Беседуя без слов,&lt;br>
И скалы, мнилось, в край неведомый смотрели,&lt;br>
Куда мечты его летели&amp;hellip;.&lt;/p>
&lt;p>Покинув кущи рыбарей,&lt;br>
Приют своих первоначальных дней,&lt;br>
С душою, полной упованья,&lt;br>
На голос тайного призванья,&lt;br>
Он в край незнаемый пошел.&lt;br>
Куда же рок его привел?&lt;br>
О сердца верные обеты!&lt;br>
О светлый на природу взор!&lt;br>
Сей юноша, пришлец из Холмогор,&lt;br>
Прославил век Елисаветы!&lt;/p></content:encoded></item><item><title>Das neue Reich</title><link>https://alexalejandre.com/poetry/german/koenige-sind-nur-sklaven/</link><pubDate>Sat, 14 Jun 1800 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/koenige-sind-nur-sklaven/</guid><description>&lt;p>Aus dem schauspiel Maria Stuart&lt;/p>
&lt;p>Die Könige sind nur Sklaven ihres Standes,&lt;br>
Dem eignen Herzen dürfen sie nicht folgen.&lt;br>
Mein Wunsch wars immer, unvermählt zu sterben,&lt;br>
Und meinen Ruhm hätt ich darein gesetzt,&lt;br>
Daß man dereinst auf meinem Grabstein läse:&lt;br>
»Hier ruht die jungfräuliche Königin.«&lt;br>
Doch meine Untertanen wollens nicht,&lt;br>
Sie denken jetzt schon fleißig an die Zeit,&lt;br>
Wo ich dahinsein werde – Nicht genug,&lt;br>
Daß jetzt der Segen dieses Land beglückt,&lt;br>
Auch ihrem künftgen Wohl soll ich mich opfern,&lt;br>
Auch meine jungfräuliche Freiheit soll ich,&lt;br>
Mein höchstes Gut, hingeben für mein Volk,&lt;br>
Und der Gebieter wird mir aufgedrungen.&lt;br>
Er zeigt mir dadurch an, daß ich ihm nur&lt;br>
Ein Weib bin, und ich meinte doch, regiert&lt;br>
Zu haben, wie ein Mann und wie ein König.&lt;br>
Wohl weiß ich, daß man Gott nicht dient, wenn man&lt;br>
Die Ordnung der Natur verläßt, und Lob&lt;br>
Verdienen sie, die vor mir hier gewaltet,&lt;br>
Daß sie die Klöster aufgetan, und tausend&lt;br>
Schlachtopfer einer falschverstandnen Andacht&lt;br>
Den Pflichten der Natur zurückgegeben.&lt;br>
Doch eine Königin, die ihre Tage&lt;br>
Nicht ungenützt in müßiger Beschauung&lt;br>
Verbringt, die unverdrossen, unermüdet,&lt;br>
Die schwerste aller Pflichten übt, die sollte&lt;br>
Von dem Naturzweck ausgenommen sein,&lt;br>
Der eine Hälfte des Geschlechts der Menschen&lt;br>
Der andern unterwürfig macht&lt;/p></description><content:encoded>&lt;p>Aus dem schauspiel Maria Stuart&lt;/p>
&lt;p>Die Könige sind nur Sklaven ihres Standes,&lt;br>
Dem eignen Herzen dürfen sie nicht folgen.&lt;br>
Mein Wunsch wars immer, unvermählt zu sterben,&lt;br>
Und meinen Ruhm hätt ich darein gesetzt,&lt;br>
Daß man dereinst auf meinem Grabstein läse:&lt;br>
»Hier ruht die jungfräuliche Königin.«&lt;br>
Doch meine Untertanen wollens nicht,&lt;br>
Sie denken jetzt schon fleißig an die Zeit,&lt;br>
Wo ich dahinsein werde – Nicht genug,&lt;br>
Daß jetzt der Segen dieses Land beglückt,&lt;br>
Auch ihrem künftgen Wohl soll ich mich opfern,&lt;br>
Auch meine jungfräuliche Freiheit soll ich,&lt;br>
Mein höchstes Gut, hingeben für mein Volk,&lt;br>
Und der Gebieter wird mir aufgedrungen.&lt;br>
Er zeigt mir dadurch an, daß ich ihm nur&lt;br>
Ein Weib bin, und ich meinte doch, regiert&lt;br>
Zu haben, wie ein Mann und wie ein König.&lt;br>
Wohl weiß ich, daß man Gott nicht dient, wenn man&lt;br>
Die Ordnung der Natur verläßt, und Lob&lt;br>
Verdienen sie, die vor mir hier gewaltet,&lt;br>
Daß sie die Klöster aufgetan, und tausend&lt;br>
Schlachtopfer einer falschverstandnen Andacht&lt;br>
Den Pflichten der Natur zurückgegeben.&lt;br>
Doch eine Königin, die ihre Tage&lt;br>
Nicht ungenützt in müßiger Beschauung&lt;br>
Verbringt, die unverdrossen, unermüdet,&lt;br>
Die schwerste aller Pflichten übt, die sollte&lt;br>
Von dem Naturzweck ausgenommen sein,&lt;br>
Der eine Hälfte des Geschlechts der Menschen&lt;br>
Der andern unterwürfig macht&lt;/p></content:encoded></item><item><title>Élégie faite dans un cimetière de campagne</title><link>https://alexalejandre.com/poetry/french/elegie-faite-dans-un-cimetiere/</link><pubDate>Sun, 17 May 1750 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/french/elegie-faite-dans-un-cimetiere/</guid><description>&lt;p>Une imitation de &lt;a href="https://alexalejandre.com/poetry/english/elegy-church-graveyard-english/">Elegy Written in a Country Churchyard&lt;/a>&lt;/p>
&lt;p>La cloche du soir sonne et plaint la mort du jour.&lt;br>
Les troupeaux, à pas lents, regagnent leur séjour&lt;br>
Le laboureur pensif rentre dans sa chaumière&lt;br>
Le deuil s’étend sur moi comme sur la lumière,&lt;br>
Ces plaines, ces lointains s’effacent à mes yeux&lt;br>
La lune roule en paix son char silencieux&lt;br>
À peine dans les airs quelque insecte bourdonne:&lt;br>
Tout se tait l’Univers au sommeil s’abandonne.&lt;br>
Seulement le hibou, triste enfant de la nuit,&lt;br>
Sous le lierre rampant, retiré loin du bruit,&lt;br>
Se plaint de l’importun que le hasard amène&lt;br>
Au pied de cette tour, son antique domaine&lt;br>
Là, parmi les monceaux de ces gazons nombreux&lt;br>
Où l’if funèbre épand ses rameaux ténébreux,&lt;br>
Reposent renfermés dans leurs tombes modestes,&lt;br>
Des pères du hameau les vénérables restes.&lt;br>
Ni le coq glapissant, le cor ni ses échos&lt;br>
Ne viennent les troubler dans ce dernier repos&lt;br>
Le vent frais du matin, le cri de l’hirondelle,&lt;br>
Rien de leur toit rustique aux champs ne les rappelle.&lt;br>
Le soir ne les rend plus à l’objet de leurs vœux&lt;br>
La flamme du foyer ne brille plus pour eux&lt;br>
Ils ne reverront plus leur famille si chère&lt;br>
Lutter innocemment pour les baisers d’un père.&lt;br>
Ils ont su maîtriser par l’effort de leurs bras&lt;br>
Une glèbe profonde et des sillons ingrats&lt;br>
Souvent à leurs sueurs la moisson s’est donnée.&lt;br>
Toujours d’utiles soins remplissaient leur journée,&lt;br>
Tantôt d’un air joyeux guidant leurs chars pesans,&lt;br>
Tantôt frappant un chêne endurci par les ans.&lt;/p></description><content:encoded>&lt;p>Une imitation de &lt;a href="https://alexalejandre.com/poetry/english/elegy-church-graveyard-english/">Elegy Written in a Country Churchyard&lt;/a>&lt;/p>
&lt;p>La cloche du soir sonne et plaint la mort du jour.&lt;br>
Les troupeaux, à pas lents, regagnent leur séjour&lt;br>
Le laboureur pensif rentre dans sa chaumière&lt;br>
Le deuil s’étend sur moi comme sur la lumière,&lt;br>
Ces plaines, ces lointains s’effacent à mes yeux&lt;br>
La lune roule en paix son char silencieux&lt;br>
À peine dans les airs quelque insecte bourdonne:&lt;br>
Tout se tait l’Univers au sommeil s’abandonne.&lt;br>
Seulement le hibou, triste enfant de la nuit,&lt;br>
Sous le lierre rampant, retiré loin du bruit,&lt;br>
Se plaint de l’importun que le hasard amène&lt;br>
Au pied de cette tour, son antique domaine&lt;br>
Là, parmi les monceaux de ces gazons nombreux&lt;br>
Où l’if funèbre épand ses rameaux ténébreux,&lt;br>
Reposent renfermés dans leurs tombes modestes,&lt;br>
Des pères du hameau les vénérables restes.&lt;br>
Ni le coq glapissant, le cor ni ses échos&lt;br>
Ne viennent les troubler dans ce dernier repos&lt;br>
Le vent frais du matin, le cri de l’hirondelle,&lt;br>
Rien de leur toit rustique aux champs ne les rappelle.&lt;br>
Le soir ne les rend plus à l’objet de leurs vœux&lt;br>
La flamme du foyer ne brille plus pour eux&lt;br>
Ils ne reverront plus leur famille si chère&lt;br>
Lutter innocemment pour les baisers d’un père.&lt;br>
Ils ont su maîtriser par l’effort de leurs bras&lt;br>
Une glèbe profonde et des sillons ingrats&lt;br>
Souvent à leurs sueurs la moisson s’est donnée.&lt;br>
Toujours d’utiles soins remplissaient leur journée,&lt;br>
Tantôt d’un air joyeux guidant leurs chars pesans,&lt;br>
Tantôt frappant un chêne endurci par les ans.&lt;/p>
&lt;p>Que la fausse grandeur, que l’orgueil qui s’admire&lt;br>
Accueillent ces détails d’un dédaigneux sourire&lt;br>
Ici, rien n’éblouit de titres fastueux&lt;br>
Mais on peut être pauvre, obscur et vertueux.&lt;br>
Eh! qu’importe d’un nom l’éclatante mémoire?&lt;br>
Que servent la beauté, la fortune, la gloire?&lt;br>
Tous attendent la mort le destin le plus beau&lt;br>
N’est jamais qu’un sentier qui nous mène au tombeau.&lt;br>
Si le pauvre est caché sous une pierre obscure,&lt;br>
Au moins de nos mépris épargnons-lui l’injure&lt;br>
S’il n’a point ces tombeaux de splendeurs revêtus,&lt;br>
C’est la faute du sort, et non de ses vertus.&lt;br>
Voit-on qu’à ces honneurs notre cendre s’éveille,&lt;br>
Que l’éloge d’un mort chatouille son oreille,&lt;br>
Que rien à son séjour l’appelle désormais&lt;br>
Ce souffle de la vie exhalé pour jamais?&lt;br>
Peut-être ce gazon où ce saule s’incline&lt;br>
Couvre un cœur qui brûla d’une flamme divine,&lt;br>
Qui d’un peuple régi par d’équitables lois&lt;br>
Eût soutenu la gloire et conservé les droits.&lt;br>
Mais la scène des tems à leurs regards voilée&lt;br>
Pour eux, dans ses trésors ne s’est point déroulée&lt;br>
La peine, le besoin, le souci dévorant&lt;br>
De leur noble génie ont glacé le torrent.&lt;br>
L’Océan nous dérobe en ses grottes profondes,&lt;br>
Des perles d’un grand prix, vain trésor de ses ondes&lt;br>
Une charmante fleur dont le parfum se perd&lt;br>
Brille sans être vue, et meurt dans un désert.&lt;br>
Que sais-je? Ici peut-être est la tombe ignorée&lt;br>
D’un Hambden de village, appui de sa contrée,&lt;br>
D’un Milton dont la lyre eût ravi les humains,&lt;br>
D’un Cromwell qui de sang n’eût point rougi ses mains.&lt;br>
La tribune jamais n’entendit leur menace&lt;br>
Ils n’ont point des tyrans déconcerté l’audace,&lt;br>
Ni lu dans les regards des peuples satisfaits,&lt;br>
L’histoire de leurs jours marqués par leurs bienfaits.&lt;br>
Le sort qui réprima leurs transports légitimes,&lt;br>
En gênant leurs vertus, leur épargna des crimes&lt;br>
L’ambition, peut-être, en eût fait des pervers&lt;br>
Dont le trône sanglant eût foulé l’Univers.&lt;br>
Leur ame eût étouffé la pudeur ingénue&lt;br>
De la vérité sainte, et par eux méconnue&lt;/p>
&lt;p>Et leur muse vénale, aux gages des méchans,&lt;br>
De noms déshonorés eût avili ses chants.&lt;br>
Jamais dans les erreurs d’une foule insensée&lt;br>
La fureur des désirs n’entraina leur pensée&lt;br>
Disciples d’un instinct par la raison conduit,&lt;br>
Dans les champs de la vie ils ont passé sans bruit.&lt;br>
Une muse rustique, autour de leur image,&lt;br>
Traça d’une main pure, et leur nom et leur âge&lt;br>
Et le texte sacré venant la secourir,&lt;br>
Ce Socrate des champs nous apprend à mourir.&lt;br>
Ainsi la piété consacre à leur mémoire&lt;br>
Ce frêle monument qui s’élève sans gloire&lt;br>
Interprète muet de leur dernier désir,&lt;br>
Il demande aux passans le tribut d’un soupir.&lt;br>
Eh! quel cœur approchant du terme de la vie&lt;br>
Ne souffre de l’oubli dont sa perte est suivie!&lt;br>
Quel stoïque mortel, au moment du départ,&lt;br>
Sur ce jour qui le fuit ne prolonge un regard?&lt;br>
Ses yeux, en se fermant, cherchent une ame tendre,&lt;br>
Qui d’une larme au moins daigne mouiller sa cendre&lt;br>
Et du sein de la tombe où l’homme est enfermé,&lt;br>
S’élève encor ce feu dont il fut animé.&lt;br>
Pour moi qui d’une voix de douleur affaiblie,&lt;br>
Ai célébré sans art, ces morts que l’on oublie,&lt;br>
Si jamais un ami s’informait de mes jours,&lt;br>
Quelque homme du hameau lui tiendrait ce discours:&lt;br>
»Souvent nos yeux l’ont vu, dès la première aurore,&lt;br>
»Tandis que la rosée aux champs brillait encore,&lt;br>
»Sur les sommets voisins, chercher, en gravissant,&lt;br>
»Du lever du soleil le spectacle innocent.&lt;br>
»Vers midi, ce ruisseau dont les eaux paresseuses,&lt;br>
»Baignent de ce vieux tronc les racines noueuses,&lt;br>
»Le voyait, languissant, sur sa rive couché,&lt;br>
»Le front pâle, l’œil fixe, à ses flots attaché.&lt;br>
»Tantôt, aux bords d’un bois, de chagrins poursuivie&lt;br>
»Son ame, avec dédain, souriait à la vie.&lt;br>
»L’infortuné pleurait sur les peines du jour,&lt;br>
»Ou sur l’espoir trompé d’un malheureux amour.&lt;br>
»Un matin, retournant aux soins de ma charrue,&lt;br>
»L’arbre ni le ruisseau ne l’offrît à ma vue&lt;br>
»Le lendemain, je passe, et mes yeux alarmés&lt;br>
»Le cherchent, mais en vain, aux lieux accoutumés&lt;/p>
&lt;p>»Le jour d’après, j’entends de funèbres cantiques&lt;br>
»J’aperçois d’un convoi les pas mélancoliques&lt;br>
»C’était lui qu’on portait tu sais lire, parcours&lt;br>
»Ces traits qui t’apprendront l’histoire de ses jours.»&lt;/p>
&lt;h3 id="épitaphe">Épitaphe&lt;/h3>
&lt;p>Ici repose, au sein de la mère commune,&lt;br>
Un jeune homme inconnu, sans gloire, sans fortune&lt;br>
À son humble berceau les Muses ont souri&lt;br>
Mais de ses noirs poisons le chagrin l’a nourri.&lt;br>
Son cœur fut bon, sensible, et son ame sincère,&lt;br>
Il en obtint du ciel le plus digne salaire&lt;br>
Pauvre, il ne put donner qu’une larme au malheur&lt;br>
Mais il eut un ami c’était tout pour son cœur.&lt;br>
Ah! crains de rechercher dans ce dernier asyle,&lt;br>
Parmi quelques vertus, les torts d’un cœur fragile&lt;br>
Tout repose en espoir, dans ce terrible lieu,&lt;br>
Sous les regards d’un père et dans le sein d’un Dieu.&lt;/p></content:encoded></item><item><title>Elegie geschrieben in einem Landkirchhof</title><link>https://alexalejandre.com/poetry/german/elegy-church-graveyard-deutsch/</link><pubDate>Sun, 17 May 1750 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/elegy-church-graveyard-deutsch/</guid><description>&lt;p>Übersetzung von &lt;a href="https://alexalejandre.com/poetry/english/elegy-church-graveyard-english/">Elegy Written in a Country Churchyard&lt;/a>&lt;/p>
&lt;p>Die Abendglocke grüßt den Tag zum Gottbefohlen,&lt;br>
das Herdenvieh zieht blökend übers Weideland,&lt;br>
der Landmann kehrt ermüdet heim auf schweren Sohlen&lt;br>
und lässt die Welt nun mir und in der Schatten Hand.&lt;/p></description><content:encoded>&lt;p>Übersetzung von &lt;a href="https://alexalejandre.com/poetry/english/elegy-church-graveyard-english/">Elegy Written in a Country Churchyard&lt;/a>&lt;/p>
&lt;p>Die Abendglocke grüßt den Tag zum Gottbefohlen,&lt;br>
das Herdenvieh zieht blökend übers Weideland,&lt;br>
der Landmann kehrt ermüdet heim auf schweren Sohlen&lt;br>
und lässt die Welt nun mir und in der Schatten Hand.&lt;/p>
&lt;p>Der letzte Glanz des Landes schwindet unterm Himmel,&lt;br>
den eine feierliche Stille überzieht,&lt;br>
leis untermalt von Käfersummen und Gebimmel&lt;br>
aus Herdenglocken, sachte wie ein Schlummerlied.&lt;/p>
&lt;p>Vom alten Wehrturm steigt aus dichten Efeuranken&lt;br>
das Klagen einer Eule hoch zum blassen Mond,&lt;br>
dass eines Wandrers Tritt die hehren Schranken&lt;br>
des alten Reichs missachte, wo sie horstend thront.&lt;/p>
&lt;p>Beschirmt von Ulmen und der Eiben Schattenhände&lt;br>
verbuckelt sich die Erde, wölbt sich moderschwer,&lt;br>
dort liegt für sich allein bis zu der Zeiten Ende&lt;br>
ein jeder raue Ahn des Dorfs von Alters her.&lt;/p>
&lt;p>Kein Duft von einer jungen, frischen Morgenbrise,&lt;br>
kein frohes Schwalbenzwitschern aus dem Nest von Lehm,&lt;br>
kein Jagdhornklang, kein früher Hahnenruf lässt diese&lt;br>
aus stiller Ruh im engen Bett je wieder auferstehn.&lt;/p>
&lt;p>Kein Funkenknistern wird je ihren Schlaf versüßen,&lt;br>
des Abends keine Frauenhand die Last abnimmt,&lt;br>
kein Kind wird seinen Vater lispelnd mehr begrüßen,&lt;br>
und keines das zum Kuß des Vaters Knie erklimmt.&lt;/p>
&lt;p>Wie viele Halme ihre Sichelsensen spürten,&lt;br>
wie brach die Pflugschar Furchen durch das schwere Land,&lt;br>
wenn fröhlich sie Gespanne durch die Fluren führten,&lt;br>
wie fiel der Wald einst vor den Hieben ihrer Hand.&lt;/p>
&lt;p>Lasst Hochmut nicht ihr Mühen wertlos machen,&lt;br>
noch ihre simplen Freuden, kaum gerühmten Stand,&lt;br>
wehrt der Herablassung, die nur mit kaltem Lachen&lt;br>
der Armen Leben für zu kurz, zu fad befand.&lt;/p>
&lt;p>Den Glanz der Macht, den Stolz des hehren Ritterstandes&lt;br>
mit all der Schönheit, allem Reichtum den er gab,&lt;br>
erwartet - allen gleich- der Riss des Lebensbandes:-&lt;br>
Der Weg führt auch die Mächtigen nur an ihr Grab.&lt;/p>
&lt;p>Such nicht in deinem Stolz die Schuld bei ihnen,&lt;br>
wenn das Erinnern überm Grab kein Bauwerk türmt&lt;br>
dem Kapitelle nur und edle Fresken dienen,&lt;br>
dem stolze Marschmusik durch Säulenhallen stürmt.&lt;/p>
&lt;p>Hat je die Urne, je die allerschönste Büste&lt;br>
den Odem, der entschwand, ins Heim zurück bewegt?&lt;br>
Hat Ehre, Schmeichelei den Staub aus seiner Wüste&lt;br>
erweckt, das taube Ohr des Todes je erregt?&lt;/p>
&lt;p>Vielleicht birgt dieser Ort, wo wir Zerfall nur spüren,&lt;br>
ein Herz, das unerwecktes Himmelsfeuer trug,&lt;br>
und Hände - Reichsapfel und Szepter wert zu führen,&lt;br>
die goldne Leier gar , die einstens Orpheus schlug?&lt;/p>
&lt;p>Doch Weisheit hat den reichen Wissensschatz verborgen,&lt;br>
der Blick der Augen blieb erkenntnislos verwaist,&lt;br>
der edle Geist verkümmerte in schwersten Sorgen,&lt;br>
der Seelenflug erstarrte und erstarb darin vereist.&lt;/p>
&lt;p>Wie viel Juwelen in den Meerestiefen glühen ,&lt;br>
die keine Hand je aus dem Unerforschten hebt,&lt;br>
wie viele Blumen, die nur ins Vergessen blühen,&lt;br>
ihr Duft ein Hauch, der nur den Wüstenwind belebt?&lt;/p>
&lt;p>Ein Hampden mag hier ruhen, der mit Mut im Herzen&lt;br>
der Willkür auf der eignen Scholle widerstand,&lt;br>
ein Milton ohne Paradies , der Hölle Schmerzen,&lt;br>
ein Cromwell ohne Bruderblut an seiner Hand.&lt;/p>
&lt;p>Der Ratsherrn Beifall als Geburtsrecht zu verlangen,&lt;br>
Zerfall und Schmerzen zu verachten alle Zeit,&lt;br>
mit reichen Gaben eines Landes Liebe einzufangen,&lt;br>
zu sehn, wie es als eine Nation gedeiht,&lt;/p>
&lt;p>verweigerte das Los, sie kannten nur Entsagen&lt;br>
selbst noch Versuchung, Fall und Schande blieb verwehrt ,&lt;br>
kein Mord half ihnen, Kronen blutbespritzt zu tragen,&lt;br>
so schloss, damit kein Hauch ihr Ansehen entehrt,&lt;br>
das Tor der Gnade vor den Kämpfen der Gewissen,&lt;br>
vor Schamesröten sich den Augen dieser Welt,&lt;br>
dass nicht der Weihrauch – einer Muse Schrein entrissen –&lt;br>
den Bau des Stolzes und der Prahlerei erhellt.&lt;/p>
&lt;p>Fern von der Menschenmenge wüstem Treiben&lt;br>
kam all ihr Wünschen niemals ab von Pfad und Steg,&lt;br>
ins Buch der Abgeschiedenheit ihr Lebenswerk zu schreiben,&lt;br>
blieb Richtschnur und das rechte Maß auf auf ihrem Weg.&lt;/p>
&lt;p>Selbst solche Knochen nicht mit Missachtung zu strafen,&lt;br>
reckt ein Memento sich, zerbrechlich schwach, versehrt.&lt;br>
Mit kruder Steinmetzkunst und krausen Epitaphen&lt;br>
verlangts des Wandres Seufzer , der die Toten ehrt.&lt;/p>
&lt;p>Die Namen und die Jahre, unkundiger Muse Krakel ,&lt;br>
hat Ort und Zeit für eine Elegie gezeugt,&lt;br>
und mancher Bibelvers verweist auf manchen Makel,&lt;br>
belehrt den Spötter, wie man vor dem Tod sich beugt.&lt;/p>
&lt;p>Noch keiner, dem Vergessensein je preisgegeben,&lt;br>
ließ diesen Lebens Süße willig, Stück für Stück,&lt;br>
gab auf die warme Welt, zu lieben und zu leben,&lt;br>
und warf nicht einen langen Sehnsuchtsblick zurück.&lt;/p>
&lt;p>Auf warmes Angedenken hofft doch jede Seele,&lt;br>
darauf dass Tränen fließen, wenn der Tod sich zeigt,&lt;br>
so fleht Natur selbst noch aus dumpfer Grabeshöhle&lt;br>
darum, dass ihre Asche noch ein Feuer zeugt.&lt;/p>
&lt;p>Für dich, der sich der vielen ungerühmten Toten&lt;br>
in diesen Zeilen annimmt und ihr Los erzählt;&lt;br>
Vielleicht spielt einst der Zufall dann den Boten&lt;br>
bringt Kunde einem Sinnenden, den er erwählt:-&lt;br>
kann einen wüsten Sauhirt zu dem Wort bewegen:&lt;br>
„Oft sah man vor dem Morgenrot schon seinen Gang&lt;br>
den Tau mit schnellem Schritt von Gräsern fegen,&lt;br>
die Sonne zu begrüßen auf dem hohen Hang.&lt;/p>
&lt;p>Er streckte stets sich an dem Fuß der hohen Birke,&lt;br>
die ihre Wurzeln märchenhaft verdreht und spinnt,&lt;br>
erschöpft zur Mittagszeit nach morgigem Gewirke&lt;br>
dem Bach zu lauschen, wie er plappernd talwärts rinnt.&lt;/p>
&lt;p>Am Waldrand ging er oft, als lächle er verachtend,&lt;br>
wohl Fantasien nach, ganz ohne festes Ziel,&lt;br>
bald so, als ob ihn aussichtslose Lieb umnachtend&lt;br>
dort hielt, bald so als ob ihn Sorgenlast befiel.&lt;/p>
&lt;p>Dann eines Tages blieb verwaist der Hügelkamm,&lt;br>
die Heide menschenleer, sein Platz am Baum allein,&lt;br>
ein andrer kam, man sah noch nicht am Birkenstamm,&lt;br>
noch auf der Alm, noch nah am Bach im Einsamsein.&lt;/p>
&lt;p>Den Nächsten, all sein Mühen trauervoll gerichtet,&lt;br>
trug man den Friedhofspfad herauf zum letzten Raum:&lt;br>
Tritt näher, lies (das kannst du) was man hier berichtet,&lt;br>
graviert in grauem Stein, beschirmt vom Schwarzdornbaum.&lt;/p>
&lt;h3 id="zum-gedenken">Zum Gedenken&lt;/h3>
&lt;p>Hier ruht ein junges Haupt im stillen Schoß der Erde,&lt;br>
ein junger Mensch, dem Glück, dem Ruhm noch unbekannt,&lt;br>
die Weisheit unterließ abschätzige Gebärden,&lt;br>
Melancholie hat als Gefolgsmann ihn erkannt.&lt;/p>
&lt;p>Sein Erbe war sehr groß, die Seele konnte rein sich zeigen,&lt;br>
der Himmel hat zum Ausgleich gleicherweis beschert,&lt;br>
dem Leid gab er die eine Zähre, ihm zu eigen,&lt;br>
der Himmel hat (sein einzger Wunsch) als Freund sich ihm erklärt.&lt;/p>
&lt;p>Versuch nicht weiter, nach Verdiensten auszuschauen,&lt;br>
such nicht nach seinen Fehlern denn in fernem Land&lt;br>
(dort ruhen alle zitternd und doch voll Vertrauen)&lt;br>
hält gut geborgen ihn nun Gottes Vaterhand.&lt;/p></content:encoded></item><item><title>Elegy Written in a Country Churchyard</title><link>https://alexalejandre.com/poetry/english/elegy-church-graveyard-english/</link><pubDate>Sun, 17 May 1750 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/english/elegy-church-graveyard-english/</guid><description>&lt;p>The curfew tolls the knell of parting day,&lt;br>
The lowing herd winds slowly o&amp;rsquo;er the lea,&lt;br>
The ploughman homeward plods his weary way,&lt;br>
And leaves the world to darkness and to me.&lt;/p></description><content:encoded>&lt;p>The curfew tolls the knell of parting day,&lt;br>
The lowing herd winds slowly o&amp;rsquo;er the lea,&lt;br>
The ploughman homeward plods his weary way,&lt;br>
And leaves the world to darkness and to me.&lt;/p>
&lt;p>Now fades the glimmering landscape on the sight,&lt;br>
And all the air a solemn stillness holds,&lt;br>
Save where the beetle wheels his droning flight,&lt;br>
And drowsy tinklings lull the distant folds:&lt;/p>
&lt;p>Save that from yonder ivy-mantled tower&lt;br>
The moping owl does to the moon complain&lt;br>
Of such as, wandering near her secret bower,&lt;br>
Molest her ancient solitary reign.&lt;/p>
&lt;p>Beneath those rugged elms, that yew-tree&amp;rsquo;s shade,&lt;br>
Where heaves the turf in many a mouldering heap,&lt;br>
Each in his narrow cell for ever laid,&lt;br>
The rude Forefathers of the hamlet sleep.&lt;/p>
&lt;p>The breezy call of incense-breathing morn,&lt;br>
The swallow twittering from the straw-built shed,&lt;br>
The cock&amp;rsquo;s shrill clarion, or the echoing horn,&lt;br>
No more shall rouse them from their lowly bed.&lt;/p>
&lt;p>For them no more the blazing hearth shall burn,&lt;br>
Or busy housewife ply her evening care:&lt;br>
No children run to lisp their sire&amp;rsquo;s return,&lt;br>
Or climb his knees the envied kiss to share,&lt;/p>
&lt;p>Oft did the harvest to their sickle yield,&lt;br>
Their furrow oft the stubborn glebe has broke;&lt;br>
How jocund did they drive their team afield!&lt;br>
How bow&amp;rsquo;d the woods beneath their sturdy stroke!&lt;/p>
&lt;p>Let not Ambition mock their useful toil,&lt;br>
Their homely joys, and destiny obscure;&lt;br>
Nor Grandeur hear with a disdainful smile&lt;br>
The short and simple annals of the Poor.&lt;/p>
&lt;p>The boast of heraldry, the pomp of power,&lt;br>
And all that beauty, all that wealth e&amp;rsquo;er gave,&lt;br>
Awaits alike th&amp;rsquo; inevitable hour:-&lt;br>
The paths of glory lead but to the grave.&lt;/p>
&lt;p>Nor you, ye Proud, impute to these the fault&lt;br>
If Memory o&amp;rsquo;er their tomb no trophies raise,&lt;br>
Where through the long-drawn aisle and fretted vault&lt;br>
The pealing anthem swells the note of praise.&lt;/p>
&lt;p>Can storied urn or animated bust&lt;br>
Back to its mansion call the fleeting breath?&lt;br>
Can Honour&amp;rsquo;s voice provoke the silent dust,&lt;br>
Or Flattery soothe the dull cold ear of Death?&lt;/p>
&lt;p>Perhaps in this neglected spot is laid&lt;br>
Some heart once pregnant with celestial fire;&lt;br>
Hands, that the rod of empire might have sway&amp;rsquo;d,&lt;br>
Or waked to ecstasy the living lyre:&lt;/p>
&lt;p>But Knowledge to their eyes her ample page,&lt;br>
Rich with the spoils of time, did ne&amp;rsquo;er unroll;&lt;br>
Chill Penury repress&amp;rsquo;d their noble rage,&lt;br>
And froze the genial current of the soul.&lt;/p>
&lt;p>Full many a gem of purest ray serene&lt;br>
The dark unfathom&amp;rsquo;d caves of ocean bear:&lt;br>
Full many a flower is born to blush unseen,&lt;br>
And waste its sweetness on the desert air.&lt;/p>
&lt;p>Some village-Hampden, that with dauntless breast&lt;br>
The little tyrant of his fields withstood,&lt;br>
Some mute inglorious Milton here may rest,&lt;br>
Some Cromwell, guiltless of his country&amp;rsquo;s blood.&lt;/p>
&lt;p>Th&amp;rsquo; applause of list&amp;rsquo;ning senates to command,&lt;br>
The threats of pain and ruin to despise,&lt;br>
To scatter plenty o&amp;rsquo;er a smiling land,&lt;br>
And read their history in a nation&amp;rsquo;s eyes,&lt;/p>
&lt;p>Their lot forbad: nor circumscribed alone&lt;br>
Their growing virtues, but their crimes confined;&lt;br>
Forbad to wade through slaughter to a throne,&lt;br>
And shut the gates of mercy on mankind,&lt;/p>
&lt;p>The struggling pangs of conscious truth to hide,&lt;br>
To quench the blushes of ingenuous shame,&lt;br>
Or heap the shrine of Luxury and Pride&lt;br>
With incense kindled at the Muse&amp;rsquo;s flame.&lt;/p>
&lt;p>Far from the madding crowd&amp;rsquo;s ignoble strife,&lt;br>
Their sober wishes never learn&amp;rsquo;d to stray;&lt;br>
Along the cool sequester&amp;rsquo;d vale of life&lt;br>
They kept the noiseless tenour of their way.&lt;/p>
&lt;p>Yet e&amp;rsquo;en these bones from insult to protect&lt;br>
Some frail memorial still erected nigh,&lt;br>
With uncouth rhymes and shapeless sculpture deck&amp;rsquo;d,&lt;br>
Implores the passing tribute of a sigh.&lt;/p>
&lt;p>Their name, their years, spelt by th&amp;rsquo; unletter&amp;rsquo;d Muse,&lt;br>
The place of fame and elegy supply:&lt;br>
And many a holy text around she strews,&lt;br>
That teach the rustic moralist to die.&lt;/p>
&lt;p>For who, to dumb forgetfulness a prey,&lt;br>
This pleasing anxious being e&amp;rsquo;er resign&amp;rsquo;d,&lt;br>
Left the warm precincts of the cheerful day,&lt;br>
Nor cast one longing lingering look behind?&lt;/p>
&lt;p>On some fond breast the parting soul relies,&lt;br>
Some pious drops the closing eye requires;&lt;br>
E&amp;rsquo;en from the tomb the voice of Nature cries,&lt;br>
E&amp;rsquo;en in our ashes live their wonted fires.&lt;/p>
&lt;p>For thee, who, mindful of th&amp;rsquo; unhonour&amp;rsquo;d dead,&lt;br>
Dost in these lines their artless tale relate;&lt;br>
If chance, by lonely contemplation led,&lt;br>
Some kindred spirit shall inquire thy fate, &amp;ndash;&lt;/p>
&lt;p>Haply some hoary-headed swain may say,&lt;br>
Oft have we seen him at the peep of dawn&lt;br>
Brushing with hasty steps the dews away,&lt;br>
To meet the sun upon the upland lawn;&lt;/p>
&lt;p>&amp;lsquo;There at the foot of yonder nodding beech&lt;br>
That wreathes its old fantastic roots so high.&lt;br>
His listless length at noontide would he stretch,&lt;br>
And pore upon the brook that babbles by.&lt;/p>
&lt;p>&amp;lsquo;Hard by yon wood, now smiling as in scorn,&lt;br>
Muttering his wayward fancies he would rove;&lt;br>
Now drooping, woeful wan, like one forlorn,&lt;br>
Or crazed with care, or cross&amp;rsquo;d in hopeless love.&lt;/p>
&lt;p>&amp;lsquo;One morn I miss&amp;rsquo;d him on the custom&amp;rsquo;d hill,&lt;br>
Along the heath, and near his favourite tree;&lt;br>
Another came; nor yet beside the rill,&lt;br>
Nor up the lawn, nor at the wood was he;&lt;/p>
&lt;p>&amp;lsquo;The next with dirges due in sad array&lt;br>
Slow through the church-way path we saw him borne,-&lt;br>
Approach and read (for thou canst read) the lay&lt;br>
Graved on the stone beneath yon aged thorn.&amp;rsquo;&lt;/p>
&lt;h3 id="the-epitaph">The Epitaph&lt;/h3>
&lt;p>Here rests his head upon the lap of Earth&lt;br>
A youth to Fortune and to Fame unknown.&lt;br>
Fair Science frowned not on his humble birth,&lt;br>
And Melacholy marked him for her own.&lt;/p>
&lt;p>Large was his bounty, and his soul sincere,&lt;br>
Heaven did a recompense as largely send:&lt;br>
He gave to Misery all he had, a tear,&lt;br>
He gained from Heaven (&amp;rsquo;twas all he wish&amp;rsquo;d) a friend.&lt;/p>
&lt;p>No farther seek his merits to disclose,&lt;br>
Or draw his frailties from their dread abode&lt;br>
(There they alike in trembling hope repose),&lt;br>
The bosom of his Father and his God&lt;/p></content:encoded></item><item><title>Сельское кладбище</title><link>https://alexalejandre.com/poetry/russian/elegy-church-graveyard-ruski/</link><pubDate>Sun, 17 May 1750 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/russian/elegy-church-graveyard-ruski/</guid><description>&lt;p>Перевод от &lt;a href="https://alexalejandre.com/poetry/english/elegy-church-graveyard-english/">Elegy Written in a Country Churchyard&lt;/a>&lt;/p>
&lt;p>Колокол поздний кончину отшедшего дня возвещает;&lt;br>
С тихим блеяньем бредет через поле усталое стадо;&lt;br>
Медленным шагом домой возвращается пахарь, уснувший&lt;br>
Мир уступая молчанью и мне. Уж бледнеет окрестность,&lt;br>
Мало-помалу теряясь во мраке, и воздух наполнен&lt;br>
Весь тишиною торжественной: изредка только промчится&lt;br>
Жук с усыпительно-тяжким жужжаньем да рог отдаленный,&lt;br>
Сон наводя на стада, порою невнятно раздастся;&lt;br>
Только с вершины той пышно плюшем украшенной башни&lt;br>
Жалобным криком сова пред тихой луной обвиняет&lt;br>
Тех, кто, случайно зашедши к ее гробовому жилищу,&lt;br>
Мир нарушают ее безмолвного древнего царства.&lt;br>
Здесь под навесом нагнувшихся вязов, под свежею тенью&lt;br>
Ив, где зеленым дерном могильные холмы покрыты,&lt;br>
Каждый навек затворяся в свою одинокую келью,&lt;br>
Спят непробудно смиренные предки села. Ни веселый&lt;br>
Голос прохладно-душистого утра, ни ласточки ранней&lt;br>
С кровли соломенной трель, ни труба петуха, ни отзывный&lt;br>
Рог, ничто не подымет их боле с их бедной постели.&lt;br>
Яркий огонь очага уж для них не зажжется: не будет&lt;br>
Их вечеров услаждать хлопотливость хозяйки; не будут&lt;br>
Дети тайком к дверям подбегать, чтоб подслушать, нейдут ли&lt;br>
С поля отцы, и к ним на колена тянуться, чтоб первый&lt;br>
Прежде других схватить поцелуй. Как часто серпам их&lt;br>
Нива богатство свое отдавала; как часто их острый&lt;br>
Плуг побеждал упорную глыбу; как весело в поле&lt;br>
К трудной работе они выходили; как звучно топор их&lt;br>
В лесе густом раздавался, рубя вековые деревья!&lt;br>
Пусть издевается гордость над их полезною жизнью,&lt;br>
Низкий удел и семейственный мир поселян презирая;&lt;br>
Пусть величие с хладной насмешкой читает простую&lt;br>
Летопись бедного; знатность породы, могущества пышность,&lt;br>
Все, чем блестит красота, чем богатство пленяет, все будет&lt;br>
Жертвой последнего часа: ко гробу ведет нас и слава.&lt;br>
Кто обвинит их за то, что над прахом смиренным их память&lt;br>
Пышных гробниц не воздвигла; что в храмах, по сводам высоким,&lt;br>
В блеске торжественном свеч, в благовонном дыму фимиама,&lt;br>
Им похвала не гремит, повторенная звучным органом?&lt;br>
Надпись на урне иль дышащий в мраморе лик не воротят&lt;br>
В прежнюю область ее отлетевшую жизнь, и хвалебный&lt;br>
Голос не тронет безмолвного праха, и в хладно-немое&lt;br>
Ухо смерти не вкра́дется сладкий ласкательства лепет.&lt;br>
Может быть, здесь, в могиле, ничем не заметной, истлело&lt;br>
Сердце, огнем небесным некогда полное; стала&lt;br>
Прахом рука, рожденная скипетр носить иль восторга&lt;br>
Пламень в живые струны вливать. Но наука пред ними&lt;br>
Свитков своих, богатых добычей веков, не раскрыла,&lt;br>
Холод нужды умертвил благородный их пламень, и сила&lt;br>
Гением полной души их бесплодно погибла навеки.&lt;br>
О! как много чистых, прекрасных жемчужин сокрыто&lt;br>
В темных, неведомых нам глубинах океана! Как часто&lt;br>
Цвет родится на то, чтоб цвести незаметно и сладкий&lt;br>
Запах терять в беспредельной пустыне! Быть может,&lt;br>
Здесь погребен какой-нибудь Гампден незнаемый, грозный&lt;br>
Мелким тиранам села, иль Мильтон немой и неславный,&lt;br>
Или Кромвель, неповинный в крови сограждан. Всемогущим&lt;br>
Словом сенат покорять, бороться с судьбою, обилье&lt;br>
Щедрою сыпать рукой на цветущую область и в громких&lt;br>
Плесках отечества жизнь свою слышать — то рок запретил им;&lt;br>
Но, ограничив в добре их, равно и во зле ограничил:&lt;br>
Не дал им воли стремиться к престолу стезею убийства,&lt;br>
Иль затворять милосердия двери пред страждущим братом,&lt;br>
Или, коварствуя, правду таить, иль стыда на ланитах&lt;br>
Чистую краску терять, иль срамить вдохновенье святое,&lt;br>
Гласом поэзии славя могучий разврат и фортуну.&lt;br>
Чуждые смут и волнений безумной толпы, из-за тесной&lt;br>
Грани желаньям своим выходить запрещая, вдоль свежей,&lt;br>
Сладко-бесшумной долины жизни они тихомолком&lt;br>
Шли по тропинке своей, и здесь их приют безмятежен.&lt;br>
Кажется, слышишь, как дышит кругом их спокойствие неба,&lt;br>
Все тревоги земные смиряя, и, мнится, какой-то&lt;br>
Сердце объемлющий голос, из тихих могил подымаясь,&lt;br>
Здесь разливает предчувствие вечного мира. Чтоб праха&lt;br>
Мертвых никто не обидел, надгробные камни с простою&lt;br>
Надписью, с грубой резьбою прохожего молят почтить их&lt;br>
Вздохом минутным; на камнях рука неграмотной музы&lt;br>
Их имена и лета написала, кругом начертавши,&lt;br>
Вместо надгробий, слова из святого писанья, чтоб скромный&lt;br>
Сельский мудрец по ним умирать научался. И кто же,&lt;br>
Кто в добычу немому забвению эту земную,&lt;br>
Милую, смутную жизнь предавал и с цветущим пределом&lt;br>
Радостно-светлого дня расставался, назад не бросая&lt;br>
Долгого, томного, грустного взгляда? Душа, удаляясь,&lt;br>
Хочет на нежной груди отдохнуть, и очи, темнея,&lt;br>
Ищут прощальной слезы; из могилы нам слышен знакомый&lt;br>
Голос, и в нашем прахе живет бывалое пламя.&lt;br>
Ты же, заботливый друг погребенных без славы, простую&lt;br>
Повесть об них рассказавший, быть может кто-нибудь, сердцем&lt;br>
Близкий тебе, одинокой мечтою сюда приведенный,&lt;br>
Знать пожелает о том, что случилось с тобой, и, быть может,&lt;br>
Вот что расскажет ему о тебе старожил поседелый:&lt;br>
«Часто видали его мы, как он на рассвете поспешным&lt;br>
Шагом, росу отряхая с травы, всходил на пригорок&lt;br>
Встретить солнце; там, на мшистом, изгибистом корне&lt;br>
Старого вяза, к земле приклонившего ветви, лежал он&lt;br>
В полдень и слушал, как ближний ручей журчит, извиваясь;&lt;br>
Вечером часто, окончив дневную работу, случалось&lt;br>
Нам видать, как у входа в долину стоял он, за солнцем&lt;br>
Следуя взором и слушая зяблицы позднюю песню;&lt;br>
Также не раз мы видали, как шел он вдоль леса с какой-то&lt;br>
Грустной улыбкой и что-то шептал про себя, наклонивши&lt;br>
Голову, бледный лицом, как будто оставленный целым&lt;br>
Светом и мучимый тяжкою думой или безнадежным&lt;br>
Горем любви. Но однажды поутру его я не встретил,&lt;br>
Как бывало, на хо́лме, и в полдень его не нашел я&lt;br>
Подле ручья, ни после, в долине; прошло и другое&lt;br>
Утро и третье; но он не встречался нигде, ни на хо́лме&lt;br>
Рано, ни в полдень подле ручья, ни в долине&lt;br>
Вечером. Вот мы однажды поутру печальное пенье&lt;br>
Слышим: его на кладби́ще несли. Подойди; здесь на камне,&lt;br>
Если умеешь, прочтешь, что о нем тогда написали:&lt;br>
Юноша здесь погребен, неведомый счастью и славе;&lt;br>
Но при рожденье он был небесною музой присвоен,&lt;br>
И меланхолия знаки свои на него положила.&lt;br>
Был он душой откровенен и добр, его наградило&lt;br>
Небо: несчастным давал, что имел он, — слезу; и в награду&lt;br>
Он получил от неба самое лучшее — друга.&lt;br>
Путник, не трогай покоя могилы: здесь все, что в нем было&lt;br>
Некогда доброго, все его слабости робкой надеждой&lt;br>
Преданы в лоно благого отца, правосудного бога».&lt;/p></description><content:encoded>&lt;p>Перевод от &lt;a href="https://alexalejandre.com/poetry/english/elegy-church-graveyard-english/">Elegy Written in a Country Churchyard&lt;/a>&lt;/p>
&lt;p>Колокол поздний кончину отшедшего дня возвещает;&lt;br>
С тихим блеяньем бредет через поле усталое стадо;&lt;br>
Медленным шагом домой возвращается пахарь, уснувший&lt;br>
Мир уступая молчанью и мне. Уж бледнеет окрестность,&lt;br>
Мало-помалу теряясь во мраке, и воздух наполнен&lt;br>
Весь тишиною торжественной: изредка только промчится&lt;br>
Жук с усыпительно-тяжким жужжаньем да рог отдаленный,&lt;br>
Сон наводя на стада, порою невнятно раздастся;&lt;br>
Только с вершины той пышно плюшем украшенной башни&lt;br>
Жалобным криком сова пред тихой луной обвиняет&lt;br>
Тех, кто, случайно зашедши к ее гробовому жилищу,&lt;br>
Мир нарушают ее безмолвного древнего царства.&lt;br>
Здесь под навесом нагнувшихся вязов, под свежею тенью&lt;br>
Ив, где зеленым дерном могильные холмы покрыты,&lt;br>
Каждый навек затворяся в свою одинокую келью,&lt;br>
Спят непробудно смиренные предки села. Ни веселый&lt;br>
Голос прохладно-душистого утра, ни ласточки ранней&lt;br>
С кровли соломенной трель, ни труба петуха, ни отзывный&lt;br>
Рог, ничто не подымет их боле с их бедной постели.&lt;br>
Яркий огонь очага уж для них не зажжется: не будет&lt;br>
Их вечеров услаждать хлопотливость хозяйки; не будут&lt;br>
Дети тайком к дверям подбегать, чтоб подслушать, нейдут ли&lt;br>
С поля отцы, и к ним на колена тянуться, чтоб первый&lt;br>
Прежде других схватить поцелуй. Как часто серпам их&lt;br>
Нива богатство свое отдавала; как часто их острый&lt;br>
Плуг побеждал упорную глыбу; как весело в поле&lt;br>
К трудной работе они выходили; как звучно топор их&lt;br>
В лесе густом раздавался, рубя вековые деревья!&lt;br>
Пусть издевается гордость над их полезною жизнью,&lt;br>
Низкий удел и семейственный мир поселян презирая;&lt;br>
Пусть величие с хладной насмешкой читает простую&lt;br>
Летопись бедного; знатность породы, могущества пышность,&lt;br>
Все, чем блестит красота, чем богатство пленяет, все будет&lt;br>
Жертвой последнего часа: ко гробу ведет нас и слава.&lt;br>
Кто обвинит их за то, что над прахом смиренным их память&lt;br>
Пышных гробниц не воздвигла; что в храмах, по сводам высоким,&lt;br>
В блеске торжественном свеч, в благовонном дыму фимиама,&lt;br>
Им похвала не гремит, повторенная звучным органом?&lt;br>
Надпись на урне иль дышащий в мраморе лик не воротят&lt;br>
В прежнюю область ее отлетевшую жизнь, и хвалебный&lt;br>
Голос не тронет безмолвного праха, и в хладно-немое&lt;br>
Ухо смерти не вкра́дется сладкий ласкательства лепет.&lt;br>
Может быть, здесь, в могиле, ничем не заметной, истлело&lt;br>
Сердце, огнем небесным некогда полное; стала&lt;br>
Прахом рука, рожденная скипетр носить иль восторга&lt;br>
Пламень в живые струны вливать. Но наука пред ними&lt;br>
Свитков своих, богатых добычей веков, не раскрыла,&lt;br>
Холод нужды умертвил благородный их пламень, и сила&lt;br>
Гением полной души их бесплодно погибла навеки.&lt;br>
О! как много чистых, прекрасных жемчужин сокрыто&lt;br>
В темных, неведомых нам глубинах океана! Как часто&lt;br>
Цвет родится на то, чтоб цвести незаметно и сладкий&lt;br>
Запах терять в беспредельной пустыне! Быть может,&lt;br>
Здесь погребен какой-нибудь Гампден незнаемый, грозный&lt;br>
Мелким тиранам села, иль Мильтон немой и неславный,&lt;br>
Или Кромвель, неповинный в крови сограждан. Всемогущим&lt;br>
Словом сенат покорять, бороться с судьбою, обилье&lt;br>
Щедрою сыпать рукой на цветущую область и в громких&lt;br>
Плесках отечества жизнь свою слышать — то рок запретил им;&lt;br>
Но, ограничив в добре их, равно и во зле ограничил:&lt;br>
Не дал им воли стремиться к престолу стезею убийства,&lt;br>
Иль затворять милосердия двери пред страждущим братом,&lt;br>
Или, коварствуя, правду таить, иль стыда на ланитах&lt;br>
Чистую краску терять, иль срамить вдохновенье святое,&lt;br>
Гласом поэзии славя могучий разврат и фортуну.&lt;br>
Чуждые смут и волнений безумной толпы, из-за тесной&lt;br>
Грани желаньям своим выходить запрещая, вдоль свежей,&lt;br>
Сладко-бесшумной долины жизни они тихомолком&lt;br>
Шли по тропинке своей, и здесь их приют безмятежен.&lt;br>
Кажется, слышишь, как дышит кругом их спокойствие неба,&lt;br>
Все тревоги земные смиряя, и, мнится, какой-то&lt;br>
Сердце объемлющий голос, из тихих могил подымаясь,&lt;br>
Здесь разливает предчувствие вечного мира. Чтоб праха&lt;br>
Мертвых никто не обидел, надгробные камни с простою&lt;br>
Надписью, с грубой резьбою прохожего молят почтить их&lt;br>
Вздохом минутным; на камнях рука неграмотной музы&lt;br>
Их имена и лета написала, кругом начертавши,&lt;br>
Вместо надгробий, слова из святого писанья, чтоб скромный&lt;br>
Сельский мудрец по ним умирать научался. И кто же,&lt;br>
Кто в добычу немому забвению эту земную,&lt;br>
Милую, смутную жизнь предавал и с цветущим пределом&lt;br>
Радостно-светлого дня расставался, назад не бросая&lt;br>
Долгого, томного, грустного взгляда? Душа, удаляясь,&lt;br>
Хочет на нежной груди отдохнуть, и очи, темнея,&lt;br>
Ищут прощальной слезы; из могилы нам слышен знакомый&lt;br>
Голос, и в нашем прахе живет бывалое пламя.&lt;br>
Ты же, заботливый друг погребенных без славы, простую&lt;br>
Повесть об них рассказавший, быть может кто-нибудь, сердцем&lt;br>
Близкий тебе, одинокой мечтою сюда приведенный,&lt;br>
Знать пожелает о том, что случилось с тобой, и, быть может,&lt;br>
Вот что расскажет ему о тебе старожил поседелый:&lt;br>
«Часто видали его мы, как он на рассвете поспешным&lt;br>
Шагом, росу отряхая с травы, всходил на пригорок&lt;br>
Встретить солнце; там, на мшистом, изгибистом корне&lt;br>
Старого вяза, к земле приклонившего ветви, лежал он&lt;br>
В полдень и слушал, как ближний ручей журчит, извиваясь;&lt;br>
Вечером часто, окончив дневную работу, случалось&lt;br>
Нам видать, как у входа в долину стоял он, за солнцем&lt;br>
Следуя взором и слушая зяблицы позднюю песню;&lt;br>
Также не раз мы видали, как шел он вдоль леса с какой-то&lt;br>
Грустной улыбкой и что-то шептал про себя, наклонивши&lt;br>
Голову, бледный лицом, как будто оставленный целым&lt;br>
Светом и мучимый тяжкою думой или безнадежным&lt;br>
Горем любви. Но однажды поутру его я не встретил,&lt;br>
Как бывало, на хо́лме, и в полдень его не нашел я&lt;br>
Подле ручья, ни после, в долине; прошло и другое&lt;br>
Утро и третье; но он не встречался нигде, ни на хо́лме&lt;br>
Рано, ни в полдень подле ручья, ни в долине&lt;br>
Вечером. Вот мы однажды поутру печальное пенье&lt;br>
Слышим: его на кладби́ще несли. Подойди; здесь на камне,&lt;br>
Если умеешь, прочтешь, что о нем тогда написали:&lt;br>
Юноша здесь погребен, неведомый счастью и славе;&lt;br>
Но при рожденье он был небесною музой присвоен,&lt;br>
И меланхолия знаки свои на него положила.&lt;br>
Был он душой откровенен и добр, его наградило&lt;br>
Небо: несчастным давал, что имел он, — слезу; и в награду&lt;br>
Он получил от неба самое лучшее — друга.&lt;br>
Путник, не трогай покоя могилы: здесь все, что в нем было&lt;br>
Некогда доброго, все его слабости робкой надеждой&lt;br>
Преданы в лоно благого отца, правосудного бога».&lt;/p></content:encoded></item><item><title>Essay on Criticism</title><link>https://alexalejandre.com/poetry/english/essay-on-criticism/</link><pubDate>Thu, 21 May 1711 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/english/essay-on-criticism/</guid><description>&lt;p>&amp;lsquo;Tis hard to say, if greater want of skill&lt;br>
Appear in writing or in judging ill,&lt;br>
But, of the two, less dang&amp;rsquo;rous is th&amp;rsquo; offence&lt;br>
To tire our patience, than mislead our sense.&lt;br>
Some few in that, but numbers err in this,&lt;br>
Ten censure wrong for one who writes amiss,&lt;br>
A fool might once himself alone expose,&lt;br>
Now one in verse makes many more in prose.&lt;/p></description><content:encoded>&lt;p>&amp;lsquo;Tis hard to say, if greater want of skill&lt;br>
Appear in writing or in judging ill,&lt;br>
But, of the two, less dang&amp;rsquo;rous is th&amp;rsquo; offence&lt;br>
To tire our patience, than mislead our sense.&lt;br>
Some few in that, but numbers err in this,&lt;br>
Ten censure wrong for one who writes amiss,&lt;br>
A fool might once himself alone expose,&lt;br>
Now one in verse makes many more in prose.&lt;/p>
&lt;p>&amp;lsquo;Tis with our judgments as our watches, none&lt;br>
Go just alike, yet each believes his own.&lt;br>
In poets as true genius is but rare,&lt;br>
True taste as seldom is the critic&amp;rsquo;s share,&lt;br>
Both must alike from Heav&amp;rsquo;n derive their light,&lt;br>
These born to judge, as well as those to write.&lt;br>
Let such teach others who themselves excel,&lt;br>
And censure freely who have written well.&lt;br>
Authors are partial to their wit, &amp;rsquo;tis true,&lt;br>
But are not critics to their judgment too?&lt;/p>
&lt;p>Yet if we look more closely we shall find&lt;br>
Most have the seeds of judgment in their mind,&lt;br>
Nature affords at least a glimm&amp;rsquo;ring light,&lt;br>
The lines, tho&amp;rsquo; touch&amp;rsquo;d but faintly, are drawn right.&lt;br>
But as the slightest sketch, if justly trac&amp;rsquo;d,&lt;br>
Is by ill colouring but the more disgrac&amp;rsquo;d,&lt;br>
So by false learning is good sense defac&amp;rsquo;d,&lt;br>
Some are bewilder&amp;rsquo;d in the maze of schools,&lt;br>
And some made coxcombs Nature meant but fools.&lt;br>
In search of wit these lose their common sense,&lt;br>
And then turn critics in their own defence:&lt;br>
Each burns alike, who can, or cannot write,&lt;br>
Or with a rival&amp;rsquo;s, or an eunuch&amp;rsquo;s spite.&lt;br>
All fools have still an itching to deride,&lt;br>
And fain would be upon the laughing side.&lt;br>
If Mævius scribble in Apollo&amp;rsquo;s spite,&lt;br>
There are, who judge still worse than he can write.&lt;/p>
&lt;p>Some have at first for wits, then poets pass&amp;rsquo;d,&lt;br>
Turn&amp;rsquo;d critics next, and prov&amp;rsquo;d plain fools at last,&lt;br>
Some neither can for wits nor critics pass,&lt;br>
As heavy mules are neither horse nor ass.&lt;br>
Those half-learn&amp;rsquo;d witlings, num&amp;rsquo;rous in our isle&lt;br>
As half-form&amp;rsquo;d insects on the banks of Nile,&lt;br>
Unfinish&amp;rsquo;d things, one knows not what to call,&lt;br>
Their generation&amp;rsquo;s so equivocal:&lt;br>
To tell &amp;rsquo;em, would a hundred tongues require,&lt;br>
Or one vain wit&amp;rsquo;s, that might a hundred tire.&lt;/p>
&lt;p>But you who seek to give and merit fame,&lt;br>
And justly bear a critic&amp;rsquo;s noble name,&lt;br>
Be sure your self and your own reach to know,&lt;br>
How far your genius, taste, and learning go,&lt;br>
Launch not beyond your depth, but be discreet,&lt;br>
And mark that point where sense and dulness meet.&lt;/p>
&lt;p>Nature to all things fix&amp;rsquo;d the limits fit,&lt;br>
And wisely curb&amp;rsquo;d proud man&amp;rsquo;s pretending wit:&lt;br>
As on the land while here the ocean gains,&lt;br>
In other parts it leaves wide sandy plains,&lt;br>
Thus in the soul while memory prevails,&lt;br>
The solid pow&amp;rsquo;r of understanding fails,&lt;br>
Where beams of warm imagination play,&lt;br>
The memory&amp;rsquo;s soft figures melt away.&lt;br>
One science only will one genius fit,&lt;br>
So vast is art, so narrow human wit:&lt;br>
Not only bounded to peculiar arts,&lt;br>
But oft in those, confin&amp;rsquo;d to single parts.&lt;br>
Like kings we lose the conquests gain&amp;rsquo;d before,&lt;br>
By vain ambition still to make them more,&lt;br>
Each might his sev&amp;rsquo;ral province well command,&lt;br>
Would all but stoop to what they understand.&lt;/p>
&lt;p>First follow NATURE, and your judgment frame&lt;br>
By her just standard, which is still the same:&lt;br>
Unerring Nature, still divinely bright,&lt;br>
One clear, unchang&amp;rsquo;d, and universal light,&lt;br>
Life, force, and beauty, must to all impart,&lt;br>
At once the source, and end, and test of art.&lt;br>
Art from that fund each just supply provides,&lt;br>
Works without show, and without pomp presides:&lt;br>
In some fair body thus th&amp;rsquo; informing soul&lt;br>
With spirits feeds, with vigour fills the whole,&lt;br>
Each motion guides, and ev&amp;rsquo;ry nerve sustains,&lt;br>
Itself unseen, but in th&amp;rsquo; effects, remains.&lt;br>
Some, to whom Heav&amp;rsquo;n in wit has been profuse,&lt;br>
Want as much more, to turn it to its use,&lt;br>
For wit and judgment often are at strife,&lt;br>
Though meant each other&amp;rsquo;s aid, like man and wife.&lt;br>
&amp;lsquo;Tis more to guide, than spur the Muse&amp;rsquo;s steed,&lt;br>
Restrain his fury, than provoke his speed,&lt;br>
The winged courser, like a gen&amp;rsquo;rous horse,&lt;br>
Shows most true mettle when you check his course.&lt;/p>
&lt;p>Those RULES of old discover&amp;rsquo;d, not devis&amp;rsquo;d,&lt;br>
Are Nature still, but Nature methodis&amp;rsquo;d,&lt;br>
Nature, like liberty, is but restrain&amp;rsquo;d&lt;br>
By the same laws which first herself ordain&amp;rsquo;d.&lt;/p>
&lt;p>Hear how learn&amp;rsquo;d Greece her useful rules indites,&lt;br>
When to repress, and when indulge our flights:&lt;br>
High on Parnassus&amp;rsquo; top her sons she show&amp;rsquo;d,&lt;br>
And pointed out those arduous paths they trod,&lt;br>
Held from afar, aloft, th&amp;rsquo; immortal prize,&lt;br>
And urg&amp;rsquo;d the rest by equal steps to rise.&lt;br>
Just precepts thus from great examples giv&amp;rsquo;n,&lt;br>
She drew from them what they deriv&amp;rsquo;d from Heav&amp;rsquo;n.&lt;br>
The gen&amp;rsquo;rous critic fann&amp;rsquo;d the poet&amp;rsquo;s fire,&lt;br>
And taught the world with reason to admire.&lt;br>
Then criticism the Muse&amp;rsquo;s handmaid prov&amp;rsquo;d,&lt;br>
To dress her charms, and make her more belov&amp;rsquo;d,&lt;br>
But following wits from that intention stray&amp;rsquo;d,&lt;br>
Who could not win the mistress, woo&amp;rsquo;d the maid,&lt;br>
Against the poets their own arms they turn&amp;rsquo;d,&lt;br>
Sure to hate most the men from whom they learn&amp;rsquo;d.&lt;br>
So modern &amp;lsquo;pothecaries, taught the art&lt;br>
By doctor&amp;rsquo;s bills to play the doctor&amp;rsquo;s part,&lt;br>
Bold in the practice of mistaken rules,&lt;br>
Prescribe, apply, and call their masters fools.&lt;br>
Some on the leaves of ancient authors prey,&lt;br>
Nor time nor moths e&amp;rsquo;er spoil&amp;rsquo;d so much as they:&lt;br>
Some drily plain, without invention&amp;rsquo;s aid,&lt;br>
Write dull receipts how poems may be made:&lt;br>
These leave the sense, their learning to display,&lt;br>
And those explain the meaning quite away.&lt;/p>
&lt;p>You then whose judgment the right course would steer,&lt;br>
Know well each ANCIENT&amp;rsquo;S proper character,&lt;br>
His fable, subject, scope in ev&amp;rsquo;ry page,&lt;br>
Religion, country, genius of his age:&lt;br>
Without all these at once before your eyes,&lt;br>
Cavil you may, but never criticise.&lt;br>
Be Homer&amp;rsquo;s works your study and delight,&lt;br>
Read them by day, and meditate by night,&lt;br>
Thence form your judgment, thence your maxims bring,&lt;br>
And trace the Muses upward to their spring,&lt;br>
Still with itself compar&amp;rsquo;d, his text peruse,&lt;br>
And let your comment be the Mantuan Muse.&lt;/p>
&lt;p>When first young Maro in his boundless mind&lt;br>
A work t&amp;rsquo; outlast immortal Rome design&amp;rsquo;d,&lt;br>
Perhaps he seem&amp;rsquo;d above the critic&amp;rsquo;s law,&lt;br>
And but from Nature&amp;rsquo;s fountains scorn&amp;rsquo;d to draw:&lt;br>
But when t&amp;rsquo; examine ev&amp;rsquo;ry part he came,&lt;br>
Nature and Homer were, he found, the same.&lt;br>
Convinc&amp;rsquo;d, amaz&amp;rsquo;d, he checks the bold design,&lt;br>
And rules as strict his labour&amp;rsquo;d work confine,&lt;br>
As if the Stagirite o&amp;rsquo;erlook&amp;rsquo;d each line.&lt;br>
Learn hence for ancient rules a just esteem,&lt;br>
To copy nature is to copy them.&lt;/p>
&lt;p>Some beauties yet, no precepts can declare,&lt;br>
For there&amp;rsquo;s a happiness as well as care.&lt;br>
Music resembles poetry, in each&lt;br>
Are nameless graces which no methods teach,&lt;br>
And which a master-hand alone can reach.&lt;br>
If, where the rules not far enough extend,&lt;br>
(Since rules were made but to promote their end)&lt;br>
Some lucky LICENCE answers to the full&lt;br>
Th&amp;rsquo; intent propos&amp;rsquo;d, that licence is a rule.&lt;br>
Thus Pegasus, a nearer way to take,&lt;br>
May boldly deviate from the common track.&lt;br>
Great wits sometimes may gloriously offend,&lt;br>
And rise to faults true critics dare not mend,&lt;br>
From vulgar bounds with brave disorder part,&lt;br>
And snatch a grace beyond the reach of art,&lt;br>
Which, without passing through the judgment, gains&lt;br>
The heart, and all its end at once attains.&lt;br>
In prospects, thus, some objects please our eyes,&lt;br>
Which out of nature&amp;rsquo;s common order rise,&lt;br>
The shapeless rock, or hanging precipice.&lt;br>
But tho&amp;rsquo; the ancients thus their rules invade,&lt;br>
(As kings dispense with laws themselves have made)&lt;br>
Moderns, beware! or if you must offend&lt;br>
Against the precept, ne&amp;rsquo;er transgress its end,&lt;br>
Let it be seldom, and compell&amp;rsquo;d by need,&lt;br>
And have, at least, their precedent to plead.&lt;br>
The critic else proceeds without remorse,&lt;br>
Seizes your fame, and puts his laws in force.&lt;/p>
&lt;p>I know there are, to whose presumptuous thoughts&lt;br>
Those freer beauties, ev&amp;rsquo;n in them, seem faults.&lt;br>
Some figures monstrous and misshap&amp;rsquo;d appear,&lt;br>
Consider&amp;rsquo;d singly, or beheld too near,&lt;br>
Which, but proportion&amp;rsquo;d to their light, or place,&lt;br>
Due distance reconciles to form and grace.&lt;br>
A prudent chief not always must display&lt;br>
His pow&amp;rsquo;rs in equal ranks, and fair array,&lt;br>
But with th&amp;rsquo; occasion and the place comply,&lt;br>
Conceal his force, nay seem sometimes to fly.&lt;br>
Those oft are stratagems which errors seem,&lt;br>
Nor is it Homer nods, but we that dream.&lt;/p>
&lt;p>Still green with bays each ancient altar stands,&lt;br>
Above the reach of sacrilegious hands,&lt;br>
Secure from flames, from envy&amp;rsquo;s fiercer rage,&lt;br>
Destructive war, and all-involving age.&lt;br>
See, from each clime the learn&amp;rsquo;d their incense bring!&lt;br>
Hear, in all tongues consenting pæans ring!&lt;br>
In praise so just let ev&amp;rsquo;ry voice be join&amp;rsquo;d,&lt;br>
And fill the gen&amp;rsquo;ral chorus of mankind!&lt;br>
Hail, bards triumphant! born in happier days,&lt;br>
Immortal heirs of universal praise!&lt;br>
Whose honours with increase of ages grow,&lt;br>
As streams roll down, enlarging as they flow!&lt;br>
Nations unborn your mighty names shall sound,&lt;br>
And worlds applaud that must not yet be found!&lt;br>
Oh may some spark of your celestial fire&lt;br>
The last, the meanest of your sons inspire,&lt;br>
(That on weak wings, from far, pursues your flights,&lt;br>
Glows while he reads, but trembles as he writes)&lt;br>
To teach vain wits a science little known,&lt;br>
T&amp;rsquo; admire superior sense, and doubt their own!&lt;/p>
&lt;p>Of all the causes which conspire to blind&lt;br>
Man&amp;rsquo;s erring judgment, and misguide the mind,&lt;br>
What the weak head with strongest bias rules,&lt;br>
Is pride, the never-failing vice of fools.&lt;br>
Whatever Nature has in worth denied,&lt;br>
She gives in large recruits of needful pride,&lt;br>
For as in bodies, thus in souls, we find&lt;br>
What wants in blood and spirits, swell&amp;rsquo;d with wind,&lt;br>
Pride, where wit fails, steps in to our defence,&lt;br>
And fills up all the mighty void of sense!&lt;br>
If once right reason drives that cloud away,&lt;br>
Truth breaks upon us with resistless day,&lt;br>
Trust not yourself, but your defects to know,&lt;br>
Make use of ev&amp;rsquo;ry friend—and ev&amp;rsquo;ry foe.&lt;/p>
&lt;p>wwA little learning is a dang&amp;rsquo;rous thing,&lt;br>
Drink deep, or taste not the Pierian spring:&lt;br>
There shallow draughts intoxicate the brain,&lt;br>
And drinking largely sobers us again.&lt;br>
Fir&amp;rsquo;d at first sight with what the Muse imparts,&lt;br>
In fearless youth we tempt the heights of arts,&lt;br>
While from the bounded level of our mind,&lt;br>
Short views we take, nor see the lengths behind,&lt;br>
But more advanc&amp;rsquo;d, behold with strange surprise&lt;br>
New, distant scenes of endless science rise!&lt;br>
So pleas&amp;rsquo;d at first, the tow&amp;rsquo;ring Alps we try,&lt;br>
Mount o&amp;rsquo;er the vales, and seem to tread the sky,&lt;br>
Th&amp;rsquo; eternal snows appear already past,&lt;br>
And the first clouds and mountains seem the last,&lt;br>
But those attain&amp;rsquo;d, we tremble to survey&lt;br>
The growing labours of the lengthen&amp;rsquo;d way,&lt;br>
Th&amp;rsquo; increasing prospect tires our wand&amp;rsquo;ring eyes,&lt;br>
Hills peep o&amp;rsquo;er hills, and Alps on Alps arise!&lt;/p>
&lt;p>A perfect judge will read each work of wit&lt;br>
With the same spirit that its author writ,&lt;br>
Survey the whole, nor seek slight faults to find,&lt;br>
Where nature moves, and rapture warms the mind,&lt;br>
Nor lose, for that malignant dull delight,&lt;br>
The gen&amp;rsquo;rous pleasure to be charm&amp;rsquo;d with wit.&lt;br>
But in such lays as neither ebb, nor flow,&lt;br>
Correctly cold, and regularly low,&lt;br>
That shunning faults, one quiet tenour keep,&lt;br>
We cannot blame indeed—but we may sleep.&lt;br>
In wit, as nature, what affects our hearts&lt;br>
Is not th&amp;rsquo; exactness of peculiar parts,&lt;br>
&amp;lsquo;Tis not a lip, or eye, we beauty call,&lt;br>
But the joint force and full result of all.&lt;br>
Thus when we view some well-proportion&amp;rsquo;d dome,&lt;br>
The world&amp;rsquo;s just wonder, and ev&amp;rsquo;n thine, O Rome!&amp;rsquo;&lt;br>
No single parts unequally surprise,&lt;br>
All comes united to th&amp;rsquo; admiring eyes,&lt;br>
No monstrous height, or breadth, or length appear,&lt;br>
The whole at once is bold, and regular.&lt;/p>
&lt;p>Whoever thinks a faultless piece to see,&lt;br>
Thinks what ne&amp;rsquo;er was, nor is, nor e&amp;rsquo;er shall be.&lt;br>
In ev&amp;rsquo;ry work regard the writer&amp;rsquo;s end,&lt;br>
Since none can compass more than they intend,&lt;br>
And if the means be just, the conduct true,&lt;br>
Applause, in spite of trivial faults, is due.&lt;br>
As men of breeding, sometimes men of wit,&lt;br>
T&amp;rsquo; avoid great errors, must the less commit:&lt;br>
Neglect the rules each verbal critic lays,&lt;br>
For not to know such trifles, is a praise.&lt;br>
Most critics, fond of some subservient art,&lt;br>
Still make the whole depend upon a part:&lt;br>
They talk of principles, but notions prize,&lt;br>
And all to one lov&amp;rsquo;d folly sacrifice.&lt;/p>
&lt;p>Once on a time, La Mancha&amp;rsquo;s knight, they say,&lt;br>
A certain bard encount&amp;rsquo;ring on the way,&lt;br>
Discours&amp;rsquo;d in terms as just, with looks as sage,&lt;br>
As e&amp;rsquo;er could Dennis of the Grecian stage,&lt;br>
Concluding all were desp&amp;rsquo;rate sots and fools,&lt;br>
Who durst depart from Aristotle&amp;rsquo;s rules.&lt;br>
Our author, happy in a judge so nice,&lt;br>
Produc&amp;rsquo;d his play, and begg&amp;rsquo;d the knight&amp;rsquo;s advice,&lt;br>
Made him observe the subject and the plot,&lt;br>
The manners, passions, unities, what not?&lt;br>
All which, exact to rule, were brought about,&lt;br>
Were but a combat in the lists left out.&lt;br>
&amp;ldquo;What! leave the combat out?&amp;rdquo; exclaims the knight,&lt;br>
&amp;ldquo;Yes, or we must renounce the Stagirite.&amp;rdquo;&lt;br>
&amp;ldquo;Not so by Heav&amp;rsquo;n&amp;rdquo; (he answers in a rage)&lt;br>
&amp;ldquo;Knights, squires, and steeds, must enter on the stage.&amp;rdquo;&lt;br>
So vast a throng the stage can ne&amp;rsquo;er contain.&lt;br>
&amp;ldquo;Then build a new, or act it in a plain.&amp;rdquo;&lt;/p>
&lt;p>Thus critics, of less judgment than caprice,&lt;br>
Curious not knowing, not exact but nice,&lt;br>
Form short ideas, and offend in arts&lt;br>
(As most in manners) by a love to parts.&lt;/p>
&lt;p>Some to conceit alone their taste confine,&lt;br>
And glitt&amp;rsquo;ring thoughts struck out at ev&amp;rsquo;ry line,&lt;br>
Pleas&amp;rsquo;d with a work where nothing&amp;rsquo;s just or fit,&lt;br>
One glaring chaos and wild heap of wit.&lt;br>
Poets, like painters, thus, unskill&amp;rsquo;d to trace&lt;br>
The naked nature and the living grace,&lt;br>
With gold and jewels cover ev&amp;rsquo;ry part,&lt;br>
And hide with ornaments their want of art.&lt;br>
True wit is nature to advantage dress&amp;rsquo;d,&lt;br>
What oft was thought, but ne&amp;rsquo;er so well express&amp;rsquo;d,&lt;br>
Something, whose truth convinc&amp;rsquo;d at sight we find,&lt;br>
That gives us back the image of our mind.&lt;br>
As shades more sweetly recommend the light,&lt;br>
So modest plainness sets off sprightly wit.&lt;br>
For works may have more wit than does &amp;rsquo;em good,&lt;br>
As bodies perish through excess of blood.&lt;/p>
&lt;p>Others for language all their care express,&lt;br>
And value books, as women men, for dress:&lt;br>
Their praise is still—&amp;ldquo;the style is excellent&amp;rdquo;:&lt;br>
The sense, they humbly take upon content.&lt;br>
Words are like leaves, and where they most abound,&lt;br>
Much fruit of sense beneath is rarely found.&lt;br>
False eloquence, like the prismatic glass,&lt;br>
Its gaudy colours spreads on ev&amp;rsquo;ry place,&lt;br>
The face of Nature we no more survey,&lt;br>
All glares alike, without distinction gay:&lt;br>
But true expression, like th&amp;rsquo; unchanging sun,&lt;br>
Clears, and improves whate&amp;rsquo;er it shines upon,&lt;br>
It gilds all objects, but it alters none.&lt;br>
Expression is the dress of thought, and still&lt;br>
Appears more decent, as more suitable,&lt;br>
A vile conceit in pompous words express&amp;rsquo;d,&lt;br>
Is like a clown in regal purple dress&amp;rsquo;d:&lt;br>
For diff&amp;rsquo;rent styles with diff&amp;rsquo;rent subjects sort,&lt;br>
As several garbs with country, town, and court.&lt;br>
Some by old words to fame have made pretence,&lt;br>
Ancients in phrase, mere moderns in their sense,&lt;br>
Such labour&amp;rsquo;d nothings, in so strange a style,&lt;br>
Amaze th&amp;rsquo; unlearn&amp;rsquo;d, and make the learned smile.&lt;br>
Unlucky, as Fungoso in the play,&lt;br>
These sparks with awkward vanity display&lt;br>
What the fine gentleman wore yesterday!&lt;br>
And but so mimic ancient wits at best,&lt;br>
As apes our grandsires, in their doublets dress&amp;rsquo;d.&lt;br>
In words, as fashions, the same rule will hold,&lt;br>
Alike fantastic, if too new, or old,&lt;br>
Be not the first by whom the new are tried,&lt;br>
Not yet the last to lay the old aside.&lt;/p>
&lt;p>But most by numbers judge a poet&amp;rsquo;s song,&lt;br>
And smooth or rough, with them is right or wrong:&lt;br>
In the bright Muse though thousand charms conspire,&lt;br>
Her voice is all these tuneful fools admire,&lt;br>
Who haunt Parnassus but to please their ear,&lt;br>
Not mend their minds, as some to church repair,&lt;br>
Not for the doctrine, but the music there.&lt;br>
These equal syllables alone require,&lt;br>
Tho&amp;rsquo; oft the ear the open vowels tire,&lt;br>
While expletives their feeble aid do join,&lt;br>
And ten low words oft creep in one dull line,&lt;br>
While they ring round the same unvaried chimes,&lt;br>
With sure returns of still expected rhymes.&lt;br>
Where&amp;rsquo;er you find &amp;ldquo;the cooling western breeze&amp;rdquo;,&lt;br>
In the next line, it &amp;ldquo;whispers through the trees&amp;rdquo;:&lt;br>
If &amp;ldquo;crystal streams with pleasing murmurs creep&amp;rdquo;,&lt;br>
The reader&amp;rsquo;s threaten&amp;rsquo;d (not in vain) with &amp;ldquo;sleep&amp;rdquo;.&lt;br>
Then, at the last and only couplet fraught&lt;br>
With some unmeaning thing they call a thought,&lt;br>
A needless Alexandrine ends the song,&lt;br>
That, like a wounded snake, drags its slow length along.&lt;br>
Leave such to tune their own dull rhymes, and know&lt;br>
What&amp;rsquo;s roundly smooth, or languishingly slow,&lt;br>
And praise the easy vigour of a line,&lt;br>
Where Denham&amp;rsquo;s strength, and Waller&amp;rsquo;s sweetness join.&lt;br>
True ease in writing comes from art, not chance,&lt;br>
As those move easiest who have learn&amp;rsquo;d to dance.&lt;br>
&amp;lsquo;Tis not enough no harshness gives offence,&lt;br>
The sound must seem an echo to the sense.&lt;br>
Soft is the strain when Zephyr gently blows,&lt;br>
And the smooth stream in smoother numbers flows,&lt;br>
But when loud surges lash the sounding shore,&lt;br>
The hoarse, rough verse should like the torrent roar.&lt;br>
When Ajax strives some rock&amp;rsquo;s vast weight to throw,&lt;br>
The line too labours, and the words move slow,&lt;br>
Not so, when swift Camilla scours the plain,&lt;br>
Flies o&amp;rsquo;er th&amp;rsquo; unbending corn, and skims along the main.&lt;br>
Hear how Timotheus&amp;rsquo; varied lays surprise,&lt;br>
And bid alternate passions fall and rise!&lt;br>
While, at each change, the son of Libyan Jove&lt;br>
Now burns with glory, and then melts with love,&lt;br>
Now his fierce eyes with sparkling fury glow,&lt;br>
Now sighs steal out, and tears begin to flow:&lt;br>
Persians and Greeks like turns of nature found,&lt;br>
And the world&amp;rsquo;s victor stood subdu&amp;rsquo;d by sound!&lt;br>
The pow&amp;rsquo;r of music all our hearts allow,&lt;br>
And what Timotheus was, is Dryden now.&lt;/p>
&lt;p>Avoid extremes, and shun the fault of such,&lt;br>
Who still are pleas&amp;rsquo;d too little or too much.&lt;br>
At ev&amp;rsquo;ry trifle scorn to take offence,&lt;br>
That always shows great pride, or little sense,&lt;br>
Those heads, as stomachs, are not sure the best,&lt;br>
Which nauseate all, and nothing can digest.&lt;br>
Yet let not each gay turn thy rapture move,&lt;br>
For fools admire, but men of sense approve,&lt;br>
As things seem large which we through mists descry,&lt;br>
Dulness is ever apt to magnify.&lt;/p>
&lt;p>Some foreign writers, some our own despise,&lt;br>
The ancients only, or the moderns prize.&lt;br>
Thus wit, like faith, by each man is applied&lt;br>
To one small sect, and all are damn&amp;rsquo;d beside.&lt;br>
Meanly they seek the blessing to confine,&lt;br>
And force that sun but on a part to shine,&lt;br>
Which not alone the southern wit sublimes,&lt;br>
But ripens spirits in cold northern climes,&lt;br>
Which from the first has shone on ages past,&lt;br>
Enlights the present, and shall warm the last,&lt;br>
(Though each may feel increases and decays,&lt;br>
And see now clearer and now darker days.)&lt;br>
Regard not then if wit be old or new,&lt;br>
But blame the false, and value still the true.&lt;br>
Some ne&amp;rsquo;er advance a judgment of their own,&lt;br>
But catch the spreading notion of the town,&lt;br>
They reason and conclude by precedent,&lt;br>
And own stale nonsense which they ne&amp;rsquo;er invent.&lt;br>
Some judge of authors&amp;rsquo; names, not works, and then&lt;br>
Nor praise nor blame the writings, but the men.&lt;br>
Of all this servile herd, the worst is he&lt;br>
That in proud dulness joins with quality,&lt;br>
A constant critic at the great man&amp;rsquo;s board,&lt;br>
To fetch and carry nonsense for my Lord.&lt;br>
What woeful stuff this madrigal would be,&lt;br>
In some starv&amp;rsquo;d hackney sonneteer, or me?&lt;br>
But let a Lord once own the happy lines,&lt;br>
How the wit brightens! how the style refines!&lt;br>
Before his sacred name flies every fault,&lt;br>
And each exalted stanza teems with thought!&lt;/p>
&lt;p>The vulgar thus through imitation err,&lt;br>
As oft the learn&amp;rsquo;d by being singular,&lt;br>
So much they scorn the crowd, that if the throng&lt;br>
By chance go right, they purposely go wrong:&lt;br>
So Schismatics the plain believers quit,&lt;br>
And are but damn&amp;rsquo;d for having too much wit.&lt;/p>
&lt;p>Some praise at morning what they blame at night,&lt;br>
But always think the last opinion right.&lt;br>
A Muse by these is like a mistress us&amp;rsquo;d,&lt;br>
This hour she&amp;rsquo;s idoliz&amp;rsquo;d, the next abus&amp;rsquo;d,&lt;br>
While their weak heads, like towns unfortified,&lt;br>
Twixt sense and nonsense daily change their side.&lt;br>
Ask them the cause, they&amp;rsquo;re wiser still, they say,&lt;br>
And still tomorrow&amp;rsquo;s wiser than today.&lt;br>
We think our fathers fools, so wise we grow,&lt;br>
Our wiser sons, no doubt, will think us so.&lt;br>
Once school divines this zealous isle o&amp;rsquo;erspread,&lt;br>
Who knew most Sentences, was deepest read,&lt;br>
Faith, Gospel, all, seem&amp;rsquo;d made to be disputed,&lt;br>
And none had sense enough to be confuted:&lt;br>
Scotists and Thomists, now, in peace remain,&lt;br>
Amidst their kindred cobwebs in Duck Lane.&lt;br>
If Faith itself has different dresses worn,&lt;br>
What wonder modes in wit should take their turn?&lt;br>
Oft, leaving what is natural and fit,&lt;br>
The current folly proves the ready wit,&lt;br>
And authors think their reputation safe&lt;br>
Which lives as long as fools are pleased to laugh.&lt;/p>
&lt;p>Some valuing those of their own side or mind,&lt;br>
Still make themselves the measure of mankind,&lt;br>
Fondly we think we honour merit then,&lt;br>
When we but praise ourselves in other men.&lt;br>
Parties in wit attend on those of state,&lt;br>
And public faction doubles private hate.&lt;br>
Pride, Malice, Folly, against Dryden rose,&lt;br>
In various shapes of Parsons, Critics, Beaus,&lt;br>
But sense surviv&amp;rsquo;d, when merry jests were past,&lt;br>
For rising merit will buoy up at last.&lt;br>
Might he return, and bless once more our eyes,&lt;br>
New Blackmores and new Milbourns must arise,&lt;br>
Nay should great Homer lift his awful head,&lt;br>
Zoilus again would start up from the dead.&lt;br>
Envy will merit, as its shade, pursue,&lt;br>
But like a shadow, proves the substance true,&lt;br>
For envied wit, like Sol eclips&amp;rsquo;d, makes known&lt;br>
Th&amp;rsquo; opposing body&amp;rsquo;s grossness, not its own.&lt;br>
When first that sun too powerful beams displays,&lt;br>
It draws up vapours which obscure its rays,&lt;br>
But ev&amp;rsquo;n those clouds at last adorn its way,&lt;br>
Reflect new glories, and augment the day.&lt;/p>
&lt;p>Be thou the first true merit to befriend,&lt;br>
His praise is lost, who stays till all commend.&lt;br>
Short is the date, alas, of modern rhymes,&lt;br>
And &amp;rsquo;tis but just to let &amp;rsquo;em live betimes.&lt;br>
No longer now that golden age appears,&lt;br>
When patriarch wits surviv&amp;rsquo;d a thousand years:&lt;br>
Now length of Fame (our second life) is lost,&lt;br>
And bare threescore is all ev&amp;rsquo;n that can boast,&lt;br>
Our sons their fathers&amp;rsquo; failing language see,&lt;br>
And such as Chaucer is, shall Dryden be.&lt;br>
So when the faithful pencil has design&amp;rsquo;d&lt;br>
Some bright idea of the master&amp;rsquo;s mind,&lt;br>
Where a new world leaps out at his command,&lt;br>
And ready Nature waits upon his hand,&lt;br>
When the ripe colours soften and unite,&lt;br>
And sweetly melt into just shade and light,&lt;br>
When mellowing years their full perfection give,&lt;br>
And each bold figure just begins to live,&lt;br>
The treacherous colours the fair art betray,&lt;br>
And all the bright creation fades away!&lt;/p>
&lt;p>Unhappy wit, like most mistaken things,&lt;br>
Atones not for that envy which it brings.&lt;br>
In youth alone its empty praise we boast,&lt;br>
But soon the short-liv&amp;rsquo;d vanity is lost:&lt;br>
Like some fair flow&amp;rsquo;r the early spring supplies,&lt;br>
That gaily blooms, but ev&amp;rsquo;n in blooming dies.&lt;br>
What is this wit, which must our cares employ?&lt;br>
The owner&amp;rsquo;s wife, that other men enjoy,&lt;br>
Then most our trouble still when most admir&amp;rsquo;d,&lt;br>
And still the more we give, the more requir&amp;rsquo;d,&lt;br>
Whose fame with pains we guard, but lose with ease,&lt;br>
Sure some to vex, but never all to please,&lt;br>
&amp;lsquo;Tis what the vicious fear, the virtuous shun,&lt;br>
By fools &amp;rsquo;tis hated, and by knaves undone!&lt;/p>
&lt;p>If wit so much from ign&amp;rsquo;rance undergo,&lt;br>
Ah let not learning too commence its foe!&lt;br>
Of old, those met rewards who could excel,&lt;br>
And such were prais&amp;rsquo;d who but endeavour&amp;rsquo;d well:&lt;br>
Though triumphs were to gen&amp;rsquo;rals only due,&lt;br>
Crowns were reserv&amp;rsquo;d to grace the soldiers too.&lt;br>
Now, they who reach Parnassus&amp;rsquo; lofty crown,&lt;br>
Employ their pains to spurn some others down,&lt;/p>
&lt;p>And while self-love each jealous writer rules,&lt;br>
Contending wits become the sport of fools:&lt;br>
But still the worst with most regret commend,&lt;br>
For each ill author is as bad a friend.&lt;br>
To what base ends, and by what abject ways,&lt;br>
Are mortals urg&amp;rsquo;d through sacred lust of praise!&lt;br>
Ah ne&amp;rsquo;er so dire a thirst of glory boast,&lt;br>
Nor in the critic let the man be lost!&lt;br>
Good nature and good sense must ever join,&lt;br>
To err is human, to forgive, divine.&lt;/p>
&lt;p>But if in noble minds some dregs remain,&lt;br>
Not yet purg&amp;rsquo;d off, of spleen and sour disdain,&lt;br>
Discharge that rage on more provoking crimes,&lt;br>
Nor fear a dearth in these flagitious times.&lt;br>
No pardon vile obscenity should find,&lt;br>
Though wit and art conspire to move your mind,&lt;br>
But dulness with obscenity must prove&lt;br>
As shameful sure as impotence in love.&lt;br>
In the fat age of pleasure, wealth, and ease,&lt;br>
Sprung the rank weed, and thriv&amp;rsquo;d with large increase:&lt;br>
When love was all an easy monarch&amp;rsquo;s care,&lt;br>
Seldom at council, never in a war:&lt;br>
Jilts ruled the state, and statesmen farces writ,&lt;br>
Nay wits had pensions, and young Lords had wit:&lt;br>
The fair sat panting at a courtier&amp;rsquo;s play,&lt;br>
And not a mask went unimprov&amp;rsquo;d away:&lt;br>
The modest fan was lifted up no more,&lt;br>
And virgins smil&amp;rsquo;d at what they blush&amp;rsquo;d before.&lt;br>
The following licence of a foreign reign&lt;br>
Did all the dregs of bold Socinus drain,&lt;br>
Then unbelieving priests reform&amp;rsquo;d the nation,&lt;br>
And taught more pleasant methods of salvation,&lt;br>
Where Heav&amp;rsquo;n&amp;rsquo;s free subjects might their rights dispute,&lt;br>
Lest God himself should seem too absolute:&lt;br>
Pulpits their sacred satire learned to spare,&lt;br>
And Vice admired to find a flatt&amp;rsquo;rer there!&lt;br>
Encourag&amp;rsquo;d thus, wit&amp;rsquo;s Titans brav&amp;rsquo;d the skies,&lt;br>
And the press groan&amp;rsquo;d with licenc&amp;rsquo;d blasphemies.&lt;br>
These monsters, critics! with your darts engage,&lt;br>
Here point your thunder, and exhaust your rage!&lt;br>
Yet shun their fault, who, scandalously nice,&lt;br>
Will needs mistake an author into vice,&lt;br>
All seems infected that th&amp;rsquo; infected spy,&lt;br>
As all looks yellow to the jaundic&amp;rsquo;d eye.&lt;/p>
&lt;p>Part 3&lt;/p>
&lt;p>Learn then what morals critics ought to show,&lt;br>
For &amp;rsquo;tis but half a judge&amp;rsquo;s task, to know.&lt;br>
&amp;lsquo;Tis not enough, taste, judgment, learning, join,&lt;br>
In all you speak, let truth and candour shine:&lt;br>
That not alone what to your sense is due,&lt;br>
All may allow, but seek your friendship too.&lt;/p>
&lt;p>Be silent always when you doubt your sense,&lt;br>
And speak, though sure, with seeming diffidence:&lt;br>
Some positive, persisting fops we know,&lt;br>
Who, if once wrong, will needs be always so,&lt;br>
But you, with pleasure own your errors past,&lt;br>
And make each day a critic on the last.&lt;/p>
&lt;p>&amp;lsquo;Tis not enough, your counsel still be true,&lt;br>
Blunt truths more mischief than nice falsehoods do,&lt;br>
Men must be taught as if you taught them not,&lt;br>
And things unknown proposed as things forgot.&lt;br>
Without good breeding, truth is disapprov&amp;rsquo;d,&lt;br>
That only makes superior sense belov&amp;rsquo;d.&lt;/p>
&lt;p>Be niggards of advice on no pretence,&lt;br>
For the worst avarice is that of sense.&lt;br>
With mean complacence ne&amp;rsquo;er betray your trust,&lt;br>
Nor be so civil as to prove unjust.&lt;br>
Fear not the anger of the wise to raise,&lt;br>
Those best can bear reproof, who merit praise.&lt;/p>
&lt;p>&amp;lsquo;Twere well might critics still this freedom take,&lt;br>
But Appius reddens at each word you speak,&lt;br>
And stares, Tremendous ! with a threatening eye,&lt;br>
Like some fierce tyrant in old tapestry!&lt;br>
Fear most to tax an honourable fool,&lt;br>
Whose right it is, uncensur&amp;rsquo;d, to be dull,&lt;br>
Such, without wit, are poets when they please,&lt;br>
As without learning they can take degrees.&lt;br>
Leave dangerous truths to unsuccessful satires,&lt;br>
And flattery to fulsome dedicators,&lt;br>
Whom, when they praise, the world believes no more,&lt;br>
Than when they promise to give scribbling o&amp;rsquo;er.&lt;br>
&amp;lsquo;Tis best sometimes your censure to restrain,&lt;br>
And charitably let the dull be vain:&lt;br>
Your silence there is better than your spite,&lt;br>
For who can rail so long as they can write?&lt;br>
Still humming on, their drowsy course they keep,&lt;br>
And lash&amp;rsquo;d so long, like tops, are lash&amp;rsquo;d asleep.&lt;br>
False steps but help them to renew the race,&lt;br>
As after stumbling, jades will mend their pace.&lt;br>
What crowds of these, impenitently bold,&lt;br>
In sounds and jingling syllables grown old,&lt;br>
Still run on poets, in a raging vein,&lt;br>
Even to the dregs and squeezings of the brain,&lt;br>
Strain out the last, dull droppings of their sense,&lt;br>
And rhyme with all the rage of impotence!&lt;/p>
&lt;p>Such shameless bards we have, and yet &amp;rsquo;tis true,&lt;br>
There are as mad, abandon&amp;rsquo;d critics too.&lt;br>
The bookful blockhead, ignorantly read,&lt;br>
With loads of learned lumber in his head,&lt;br>
With his own tongue still edifies his ears,&lt;br>
And always list&amp;rsquo;ning to himself appears.&lt;br>
All books he reads, and all he reads assails,&lt;br>
From Dryden&amp;rsquo;s Fables down to Durfey&amp;rsquo;s Tales.&lt;br>
With him, most authors steal their works, or buy,&lt;br>
Garth did not write his own Dispensary .&lt;br>
Name a new play, and he&amp;rsquo;s the poet&amp;rsquo;s friend,&lt;br>
Nay show&amp;rsquo;d his faults—but when would poets mend?&lt;br>
No place so sacred from such fops is barr&amp;rsquo;d,&lt;br>
Nor is Paul&amp;rsquo;s church more safe than Paul&amp;rsquo;s churchyard:&lt;br>
Nay, fly to altars, there they&amp;rsquo;ll talk you dead:&lt;br>
For fools rush in where angels fear to tread.&lt;br>
Distrustful sense with modest caution speaks,&lt;br>
It still looks home, and short excursions makes,&lt;br>
But rattling nonsense in full volleys breaks,&lt;br>
And never shock&amp;rsquo;d, and never turn&amp;rsquo;d aside,&lt;br>
Bursts out, resistless, with a thund&amp;rsquo;ring tide.&lt;/p>
&lt;p>But where&amp;rsquo;s the man, who counsel can bestow,&lt;br>
Still pleas&amp;rsquo;d to teach, and yet not proud to know?&lt;br>
Unbias&amp;rsquo;d, or by favour or by spite,&lt;br>
Not dully prepossess&amp;rsquo;d, nor blindly right,&lt;br>
Though learn&amp;rsquo;d, well-bred, and though well-bred, sincere,&lt;br>
Modestly bold, and humanly severe?&lt;br>
Who to a friend his faults can freely show,&lt;br>
And gladly praise the merit of a foe?&lt;br>
Blest with a taste exact, yet unconfin&amp;rsquo;d,&lt;br>
A knowledge both of books and human kind,&lt;br>
Gen&amp;rsquo;rous converse, a soul exempt from pride,&lt;br>
And love to praise, with reason on his side?&lt;/p>
&lt;p>Such once were critics, such the happy few,&lt;br>
Athens and Rome in better ages knew.&lt;br>
The mighty Stagirite first left the shore,&lt;br>
Spread all his sails, and durst the deeps explore:&lt;br>
He steer&amp;rsquo;d securely, and discover&amp;rsquo;d far,&lt;br>
Led by the light of the Mæonian Star.&lt;br>
Poets, a race long unconfin&amp;rsquo;d and free,&lt;br>
Still fond and proud of savage liberty,&lt;br>
Receiv&amp;rsquo;d his laws, and stood convinc&amp;rsquo;d &amp;rsquo;twas fit,&lt;br>
Who conquer&amp;rsquo;d nature, should preside o&amp;rsquo;er wit.&lt;/p>
&lt;p>Horace still charms with graceful negligence,&lt;br>
And without methods talks us into sense,&lt;br>
Will, like a friend, familiarly convey&lt;br>
The truest notions in the easiest way.&lt;br>
He, who supreme in judgment, as in wit,&lt;br>
Might boldly censure, as he boldly writ,&lt;br>
Yet judg&amp;rsquo;d with coolness, though he sung with fire,&lt;br>
His precepts teach but what his works inspire.&lt;br>
Our critics take a contrary extreme,&lt;br>
They judge with fury, but they write with fle&amp;rsquo;me:&lt;br>
Nor suffers Horace more in wrong translations&lt;br>
By wits, than critics in as wrong quotations.&lt;/p>
&lt;p>See Dionysius Homer&amp;rsquo;s thoughts refine,&lt;br>
And call new beauties forth from ev&amp;rsquo;ry line!&lt;br>
Fancy and art in gay Petronius please,&lt;br>
The scholar&amp;rsquo;s learning, with the courtier&amp;rsquo;s ease.&lt;/p>
&lt;p>In grave Quintilian&amp;rsquo;s copious work we find&lt;br>
The justest rules, and clearest method join&amp;rsquo;d,&lt;br>
Thus useful arms in magazines we place,&lt;br>
All rang&amp;rsquo;d in order, and dispos&amp;rsquo;d with grace,&lt;br>
But less to please the eye, than arm the hand,&lt;br>
Still fit for use, and ready at command.&lt;/p>
&lt;p>Thee, bold Longinus! all the Nine inspire,&lt;br>
And bless their critic with a poet&amp;rsquo;s fire.&lt;br>
An ardent judge, who zealous in his trust,&lt;br>
With warmth gives sentence, yet is always just,&lt;br>
Whose own example strengthens all his laws,&lt;br>
And is himself that great sublime he draws.&lt;/p>
&lt;p>Thus long succeeding critics justly reign&amp;rsquo;d,&lt;br>
Licence repress&amp;rsquo;d, and useful laws ordain&amp;rsquo;d,&lt;br>
Learning and Rome alike in empire grew,&lt;br>
And arts still follow&amp;rsquo;d where her eagles flew,&lt;br>
From the same foes, at last, both felt their doom,&lt;br>
And the same age saw learning fall, and Rome.&lt;br>
With tyranny, then superstition join&amp;rsquo;d,&lt;br>
As that the body, this enslav&amp;rsquo;d the mind,&lt;br>
Much was believ&amp;rsquo;d, but little understood,&lt;br>
And to be dull was constru&amp;rsquo;d to be good,&lt;br>
A second deluge learning thus o&amp;rsquo;er-run,&lt;br>
And the monks finish&amp;rsquo;d what the Goths begun.&lt;/p>
&lt;p>At length Erasmus, that great, injur&amp;rsquo;d name,&lt;br>
(The glory of the priesthood, and the shame!)&lt;br>
Stemm&amp;rsquo;d the wild torrent of a barb&amp;rsquo;rous age,&lt;br>
And drove those holy Vandals off the stage.&lt;/p>
&lt;p>But see! each Muse, in Leo&amp;rsquo;s golden days,&lt;br>
Starts from her trance, and trims her wither&amp;rsquo;d bays!&lt;br>
Rome&amp;rsquo;s ancient genius, o&amp;rsquo;er its ruins spread,&lt;br>
Shakes off the dust, and rears his rev&amp;rsquo;rend head!&lt;br>
Then sculpture and her sister-arts revive,&lt;br>
Stones leap&amp;rsquo;d to form, and rocks began to live,&lt;br>
With sweeter notes each rising temple rung,&lt;br>
A Raphael painted, and a Vida sung.&lt;br>
Immortal Vida! on whose honour&amp;rsquo;d brow&lt;br>
The poet&amp;rsquo;s bays and critic&amp;rsquo;s ivy grow:&lt;br>
Cremona now shall ever boast thy name,&lt;br>
As next in place to Mantua, next in fame!&lt;/p>
&lt;p>But soon by impious arms from Latium chas&amp;rsquo;d,&lt;br>
Their ancient bounds the banished Muses pass&amp;rsquo;d,&lt;br>
Thence arts o&amp;rsquo;er all the northern world advance,&lt;br>
But critic-learning flourish&amp;rsquo;d most in France.&lt;br>
The rules a nation born to serve, obeys,&lt;br>
And Boileau still in right of Horace sways.&lt;br>
But we, brave Britons, foreign laws despis&amp;rsquo;d,&lt;br>
And kept unconquer&amp;rsquo;d, and uncivilis&amp;rsquo;d,&lt;br>
Fierce for the liberties of wit, and bold,&lt;br>
We still defied the Romans, as of old.&lt;br>
Yet some there were, among the sounder few&lt;br>
Of those who less presum&amp;rsquo;d, and better knew,&lt;br>
Who durst assert the juster ancient cause,&lt;br>
And here restor&amp;rsquo;d wit&amp;rsquo;s fundamental laws.&lt;br>
Such was the Muse, whose rules and practice tell&lt;br>
&amp;ldquo;Nature&amp;rsquo;s chief master-piece is writing well.&amp;rdquo;&lt;br>
Such was Roscommon—not more learn&amp;rsquo;d than good,&lt;br>
With manners gen&amp;rsquo;rous as his noble blood,&lt;br>
To him the wit of Greece and Rome was known,&lt;br>
And ev&amp;rsquo;ry author&amp;rsquo;s merit, but his own.&lt;br>
Such late was Walsh—the Muse&amp;rsquo;s judge and friend,&lt;br>
Who justly knew to blame or to commend,&lt;br>
To failings mild, but zealous for desert,&lt;br>
The clearest head, and the sincerest heart.&lt;br>
This humble praise, lamented shade! receive,&lt;br>
This praise at least a grateful Muse may give:&lt;br>
The Muse, whose early voice you taught to sing,&lt;br>
Prescrib&amp;rsquo;d her heights, and prun&amp;rsquo;d her tender wing,&lt;br>
(Her guide now lost) no more attempts to rise,&lt;br>
But in low numbers short excursions tries:&lt;br>
Content, if hence th&amp;rsquo; unlearn&amp;rsquo;d their wants may view,&lt;br>
The learn&amp;rsquo;d reflect on what before they knew:&lt;br>
Careless of censure, nor too fond of fame,&lt;br>
Still pleas&amp;rsquo;d to praise, yet not afraid to blame,&lt;br>
Averse alike to flatter, or offend,&lt;br>
Not free from faults, nor yet too vain to mend.&lt;/p></content:encoded></item><item><title>Apologie des Femmes</title><link>https://alexalejandre.com/poetry/french/apologie-des-femmes/</link><pubDate>Tue, 03 Aug 1694 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/french/apologie-des-femmes/</guid><description>&lt;p>Ce petit poëme parut à l’occasion de la satire de Boileau, sur les Femmes, à laquelle on sait que Regnard a répondu aussi par la satire des Maris. Perrault a publié, en tête de son Apologie des Femmes, sous le titre de Préface, une critique plus précise et assez détaillée de la satire de Boileau : cette critique aurait peu de sel ici, mais le commentateurs de Boileau pourraient y puiser des remarques utiles.&lt;/p></description><content:encoded>&lt;p>Ce petit poëme parut à l’occasion de la satire de Boileau, sur les Femmes, à laquelle on sait que Regnard a répondu aussi par la satire des Maris. Perrault a publié, en tête de son Apologie des Femmes, sous le titre de Préface, une critique plus précise et assez détaillée de la satire de Boileau : cette critique aurait peu de sel ici, mais le commentateurs de Boileau pourraient y puiser des remarques utiles.&lt;/p>
&lt;hr>
&lt;p>Timandre avait un fils, triste, fâcheux, colère,&lt;br>
Des misantropes noirs le plus atrabilaire,&lt;br>
Qui, mortel ennemi de tout le genre humain,&lt;br>
D’une maligne dent déchirait le prochain,&lt;br>
Et sur le sexe même, emporté par sa bile,&lt;br>
Exerçait sans pitié l’âcreté de son style.&lt;br>
Le père, qui voulait qu’une suite d’enfans&lt;br>
Pût transmettre son nom dans les siècles suivans,&lt;br>
Cent fois l’avait pressé, pour en avoir lignée,&lt;br>
De vouloir se soumettre aux lois de l’hyménée&lt;br>
Et cent fois par ce fils, de chagrins hérissé,&lt;br>
Se vit, avec douleur, vivement repoussé.&lt;/p>
&lt;p>﻿Un jour, qu’il le trouva d’une humeur moins sauvage,&lt;br>
Le tirant à l’écart, il lui tint ce langage :&lt;br>
Ce qui plaît, ce qui charme et qu’on aime en tous lieux,&lt;br>
Te sera-t-il toujours un objet odieux?&lt;br>
Ne saurai-je espérer que ton dédain se passe,&lt;/p>
&lt;p>Et qu’enfin le beau sexe avec toi rentre en grâce?&lt;br>
Si tu t’en éloignais par un saint mouvement,&lt;br>
Et pour ne regarder que le ciel seulement,&lt;br>
Te blâmer, sur ce point, serait une injustice,&lt;br>
Et je t’applaudirais d’un si grand sacrifice;&lt;br>
Mais ce qui t’a jeté hors du chemin battu,&lt;br>
Ce n’est que le caprice, et non pas la vertu.&lt;/p>
&lt;p>﻿C’est un ordre éternel, qu’encore toute pure,&lt;br>
Au fond de tous les cœurs imprime la nature,&lt;br>
De rendre à ses enfants le dépôt précieux&lt;br>
De la clarté du jour qu’on tient de ses aïeux.&lt;br>
Heureux! qui, révérant cette sainte conduite,&lt;br>
N’arrête pas en soi, de soi-même la suite,&lt;br>
Mais se rend immortel au gré de son désir.&lt;br>
Serais-tu bien, mon fils, insensible au plaisir&lt;br>
De voir un jour de toi naître un autre toi-même,&lt;br>
Qui serve l’Éternel, qui l’adore, qui l’aime?&lt;br>
Qui, lorsque le trépas aura fermé tes yeux,&lt;br>
Après toi, rende hommage à son nom glorieux,&lt;br>
Et d’où puisse sortir une féconde race&lt;br>
Qui, jusqu’au dernier jour, le bénisse en ta place?&lt;/p>
&lt;p>﻿Tu sais, je te l’ai dit, à quoi tendent mes vœux,&lt;br>
Et ce qui peut nous rendre et l’un et l’autre heureux!&lt;br>
Il est, j’en suis d’accord, des femmes infidèles,&lt;br>
Et dignes du mépris que ton cœur a pour elles;&lt;br>
Mais, si de deux ou trois le crime est avéré,&lt;br>
Faut-il que tout le sexe en soit déshonoré?&lt;br>
Dans une grande ville, où tout est innombrable,&lt;br>
Comme il est naturel de chercher son semblable,&lt;br>
D’aimer à le connaître, et d’en être connu,&lt;/p>
&lt;p>Selon les divers goûts dont on est prévenu,&lt;br>
Chacun, en quelqu’endroit que le hasard le porte,&lt;br>
Ne rencontre et ne voit que des gens de sa sorte.&lt;br>
Ceux qui, par le savoir se sont rendus fameux,&lt;br>
Ne trouvent, sur leurs pas, que des savants comme eux.&lt;br>
Ceux qui, cherchant toujours la pierre bien-aimée,&lt;br>
Ont l’art de convertir leur argent en fumée,&lt;br>
Ne trouvent que des gens, qui fondant le métal,&lt;br>
Par le même chemin courent à l’hôpital.&lt;br>
L’homme de symphonie et de fine musique,&lt;br>
Abordera toujours un homme qui s’en pique;&lt;br>
Et ceux, qui de rubis se bourgeonnent le nez,&lt;br>
En rencontrent partout d’encor plus bourgeonnés.&lt;br>
Ceux qu’à le bien servir le Tout-Puissant appelle,&lt;br>
Ne trouvent que des saints brulants du même zèle,&lt;br>
Que des cœurs où le ciel ses dons a répandus;&lt;br>
Faut-il donc s’étonner si des hommes perdus,&lt;br>
Jugeant du sexe entier par celles qu’ils ont vues,&lt;br>
Assurent qu’il n’est plus que des femmes perdues!&lt;br>
Pour six qui, sans cervelle avec un peu d’appas,&lt;br>
Feront de tous côtés du bruit et du fracas,&lt;br>
Par leur danse, leur jeu, leurs folles mascarades,&lt;br>
Leurs cadeaux indiscrets, leurs sombres promenades,&lt;br>
Sans peine on trouvera mille femmes de bien,&lt;br>
Qui vivent en repos, et dont on ne dit rien.&lt;/p>
&lt;p>﻿À toute heure, en tous lieux, la coquette se montre;&lt;br>
Il n’est point de plaisirs où l’on ne la rencontre :&lt;br>
Allez au cours, au bal, allez à l’Opéra,&lt;br>
À la foire, il est sûr qu’elle s’y trouvera.&lt;br>
Il semble, à regarder l’essor de sa folie,&lt;br>
Que pour être partout elle se multiplie.&lt;/p>
&lt;p>Pour des femmes d’honneur, dans ces lieux hasardeux,&lt;br>
De cent que l’on connait, on n’en verra pas deux.&lt;/p>
&lt;p>﻿Rejette donc, mon fils, cette fausse maxime :&lt;br>
Qu’on trouve rarement une femme sans crime;&lt;br>
C’est seulement ainsi que parle un suborneur,&lt;br>
Qui, de femmes sans foi, sans honte et sans honneur,&lt;br>
Fait près de son Iris, une liste bien ample,&lt;br>
Pour la faire tomber par le mauvais exemple.&lt;/p>
&lt;p>﻿Au lieu d’être toujours dans des lieux de plaisir,&lt;br>
À repaître tes yeux, à charmer ton loisir,&lt;br>
À regarder sans cesse aux cours, aux Tuileries,&lt;br>
Du fard et du brocard chargé de pierreries,&lt;br>
Va dans les hôpitaux, où l’on voit de longs rangs&lt;br>
De malades plaintifs, de morts et de mourants.&lt;br>
Là, tu rencontreras en tout temps, à toute heure,&lt;br>
Malgré l’air infecté de leur triste demeure,&lt;br>
Mille femmes d’honneur, dont souvent la beauté,&lt;br>
Que cache et qu’amortit leur humble piété,&lt;br>
A de plus doux appas, pour des âmes bien faites,&lt;br>
Que tout le vain éclat des plus vives coquettes.&lt;br>
Descends dans des caveaux, monte dans des greniers,&lt;br>
Où des pauvres obscurs fourmillent à milliers,&lt;br>
Tu n’y verras pas moins de dames vertueuses&lt;br>
Fréquenter, sans dégoût, ces retraites affreuses,&lt;br>
Et par leur zèle ardent, leurs aumônes, leurs soins,&lt;br>
Soulager tous leurs maux, remplir tous leurs besoins.&lt;br>
Entre dans les réduits des honnêtes familles,&lt;br>
Et vois y travailler les mères et les filles,&lt;br>
Ne songeant qu’à leur tâche et qu’à bien recevoir&lt;br>
Leur père ou leur époux quand il revient le soir.&lt;/p>
&lt;p>Charmé de leur conduite, et si simple et si sage,&lt;br>
Tu te verras contraint de changer de langage.&lt;/p>
&lt;p>﻿Peux-tu ne savoir pas que la civilité,&lt;br>
Chez les femmes naquit avec l’honnêteté,&lt;br>
Que chez elles se prend la fine politesse,&lt;br>
Le bon air, le bon gout et la délicatesse?&lt;br>
Regarde un peu de près celui qui, loup-garou,&lt;br>
Loin du sexe a vécu renfermé dans son trou,&lt;br>
Tu le verras, crasseux, maladroit et sauvage,&lt;br>
Farouche dans ses mœurs et rude en son langage.&lt;/p>
&lt;p>﻿Quand le sexe s’oublie, et de tant de façons&lt;br>
Sert de folle matière à de folles chansons,&lt;br>
N’as-tu pas remarqué que de tout ce scandale,&lt;br>
Les maris sont souvent la cause principale,&lt;br>
Soit par le dur excès de leur sévérité,&lt;br>
Soit par leur indolence et leur trop de bonté?&lt;br>
S’il arrive qu’un jour aux nœuds du mariage,&lt;br>
En suivant mes désirs, ton heureux sort t’engage,&lt;br>
Ne t’avise jamais d’affecter la rigueur.&lt;br>
De vivre en pédagogue, avec trop de hauteur;&lt;br>
Témoigne de l’amour, du respect, de l’estime,&lt;br>
En mari, toutefois, qui conduit et qui prime.&lt;br>
On a beau publier et prôner en tous lieux&lt;br>
Que le sexe est hautain, qu’il est impérieux,&lt;br>
La femme, en son époux, aime à trouver son maitre,&lt;br>
Lorsque, par ses vertus, il mérite de l’être;&lt;br>
Si l’on la voit souvent résoudre et décider,&lt;br>
C’est que le faible époux ne sait pas commander.&lt;/p>
&lt;p>﻿Il en est, il est vrai, qui, dans leurs mariages,&lt;/p>
&lt;p>N’ont pas toujours trouvé des épouses bien sages;&lt;br>
Mais auraient-ils le front d’en oser murmurer?&lt;br>
Ont-ils, en épousant, tâché d’en rencontrer?&lt;br>
Eux, et leurs vieux parents, n’ont avec leurs bésicles,&lt;br>
Pendant des mois entiers, lu, relu des articles,&lt;br>
Qu’afin de parvenir, par leur soin diligent,&lt;br>
À bien appareiller deux tas d’or et d’argent,&lt;br>
Sans regarder plus loin, sans voir si les parties,&lt;br>
D’esprit, d’âge et d’humeur seraient bien assorties.&lt;br>
Ils ne comprennent point que pour vivre content,&lt;br>
Le choix de la personne est le plus important;&lt;br>
C’est une vérité qui leur semble bizarre,&lt;br>
Et qui n’entra jamais dans le cœur d’un avare.&lt;/p>
&lt;p>﻿Quand le premier mortel fut mis dans l’univers,&lt;br>
Pour commander lui seul à tant d’êtres divers,&lt;br>
Son œil, n’en doutons point, vit avec complaisance,&lt;br>
Ses richesses sans nombre, et sa vaste puissance;&lt;br>
Mais, lorsque dégagé de son premier sommeil,&lt;br>
Le Seigneur lui montra la femme à son réveil,&lt;br>
La femme, sa moitié, sa compagne fidèle,&lt;br>
Quittant tout, il tourna tous ses regards sur elle,&lt;br>
Et, charmé de la voir, trouva moins de douceur&lt;br>
À régir l’univers, qu’à régner dans son cœur.&lt;/p>
&lt;p>﻿La gloire nous ravit par sa beauté suprême,&lt;br>
L’or nous rend tout-puissants et nous charme de même,&lt;br>
Mais, malgré tout l’éclat dont il frappe nos yeux,&lt;br>
Des biens, le plus solide et le plus précieux,&lt;br>
Est de voir pour jamais unir sa destinée&lt;br>
Avec une moitié sage, douce et bien née,&lt;br>
Qui couronne sa dot d’une chaste pudeur,&lt;/p>
&lt;p>D’une vertu sincère et d’une tendre ardeur.&lt;br>
À ces dons précieux, si le ciel favorable,&lt;br>
Se plaisant à former un chef-d’œuvre admirable,&lt;br>
D’une beauté parfaite a joint tous les attraits,&lt;br>
Le vif éclat du teint, la finesse des traits;&lt;br>
Si ses beaux yeux, ornés d’une brune paupière,&lt;br>
Jettent, sans y penser, de longs traits de lumière;&lt;br>
Si sa bouche enfantine, et d’un corail sans prix,&lt;br>
A tous les agréments que forme un doux souris;&lt;br>
Si sa main le dispute à celles de l’Aurore,&lt;br>
Et si le bout des doigts est plus vermeil encore,&lt;br>
Faudra-t-il déplorer le sort de son époux?&lt;br>
Et pourrais-tu le voir sans en être jaloux?&lt;br>
Il n’est rien ici-bas de plus digne d’envie,&lt;br>
Ni qui mêle tant d’or au tissu d’une vie.&lt;br>
Les malheurs les plus grands n’ont rien d’âpre, d’affreux,&lt;br>
Quand deux cœurs bien unis les partagent entr’eux,&lt;br>
Et le moindre bonheur que le ciel leur envoie,&lt;br>
Les inonde à l’envi d’un océan de joie.&lt;/p>
&lt;p>﻿Si, dans la bonne chère un époux emporté,&lt;br>
En dissipant son bien altère sa santé,&lt;br>
Par de sages repas, et sans dépense vaine,&lt;br>
Chez elle adroitement l’épouse le ramène,&lt;br>
Et, retranchant toujours la superfluité,&lt;br>
Le remet pas à pas dans la frugalité.&lt;/p>
&lt;p>﻿Si son œil aperçoit quelqu’intrigue galante,&lt;br>
Alors elle se rend encor plus complaisante,&lt;br>
Souffre tout, ne dit mot, tant qu’enfin sa douceur&lt;br>
L’attendrit, le désarme et regagne son cœur.&lt;br>
Par elle, tous les jours, la jeunesse volage,&lt;/p>
&lt;p>Se retire du vice et du libertinage;&lt;br>
Par sa bonne conduite, une famille en paix,&lt;br>
A des enfants bien nés et de sages valets;&lt;br>
Par elle, une maison tombée en décadence,&lt;br>
Voit revivre en son sein l’éclat et l’abondance.&lt;/p>
&lt;p>﻿Ce n’est point seulement dans les premiers beaux jours,&lt;br>
Ni dans la jeune ardeur des naissantes amours,&lt;br>
Que d’un heureux hymen se goutent les délices.&lt;br>
Son cours n’est pas moins doux que ses tendres prémices,&lt;br>
C’est un bonheur égal, un bien de tous les temps.&lt;/p>
&lt;p>﻿Ah! combien d’un époux les yeux sont-ils contents,&lt;br>
Quand il voit près de lui, pendant sa maladie,&lt;br>
Une épouse attentive, et qui ne s’étudie&lt;br>
Qu’à prévoir ses besoins et qu’à le soulager.&lt;br>
Et qui pleure en secret dès le moindre danger!&lt;br>
Tout plait d’elle; il n’est plus de médecine amère,&lt;br>
Dès qu’elle passe à lui par une main si chère;&lt;br>
Et si le ciel enfin ordonne son trépas,&lt;br>
Sans peine et sans murmure il meurt entre ses bras.&lt;/p>
&lt;p>﻿Ainsi s’achève en paix l’heureuse destinée&lt;br>
De celui qu’en ses nœuds engage l’hyménée,&lt;br>
Pendant que le prôneur du libre célibat&lt;br>
Luttant contre la mort, sur son triste grabat,&lt;br>
Confus, embarrassé d’un si pénible rôle,&lt;br>
Voit, l’œil à demi clos, son valet qui le vole,&lt;br>
Et sent, quoiqu’abattu de douleur et d’ennui,&lt;br>
Qu’on tire impudemment son drap de dessous lui.&lt;/p>
&lt;p>﻿Si son destin permet qu’un serviteur fidèle&lt;/p>
&lt;p>Lui donne en ce moment des marques de son zèle,&lt;br>
Ses amis sont ailleurs, et pour comble de maux&lt;br>
Son lit est entouré d’âpres collatéraux,&lt;br>
Qui, craignant que des legs ne gâtent leur affaire,&lt;br>
Veillent à détourner confesseur et notaire;&lt;br>
Appréhendant toujours qu’un bol de quinquina,&lt;br>
En faisant son effet, ne le tire de là.&lt;/p>
&lt;p>﻿N’est-il pas vrai, mon fils, que cette seule image&lt;br>
Des aimables douceurs d’un heureux mariage,&lt;br>
Et surtout de l’horreur qui suit le célibat,&lt;br>
Te trouble, te saisit, te confond et t’abat?&lt;br>
Que ton esprit, ému de ce qu’il vient d’entendre,&lt;br>
Des deux routes qu’il voit ne sait laquelle prendre?&lt;br>
Je sais qu’à mon avis tu viendras te ranger;&lt;br>
Mais je te donne encor du temps pour y songer.&lt;/p></content:encoded></item><item><title>Le siecle de Louis le Grand</title><link>https://alexalejandre.com/poetry/french/le-siecle-de-louis-le-grand/</link><pubDate>Mon, 27 Jan 1687 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/french/le-siecle-de-louis-le-grand/</guid><description>&lt;p>La belle antiquité fut toujours vénérable&lt;br>
Mais je ne crus jamais qu’elle fût adorable.&lt;br>
Je vois les anciens, sans plier les genoux&lt;br>
Ils sont grands, il est vrai, mais hommes comme nous&lt;br>
Et l’on peut comparer, sans craindre d’Être injuste,&lt;br>
Le siècle de Louis au beau siècle d’Auguste.&lt;br>
En quel temps sut-on mieux le dur métier de Mars?&lt;br>
Quand d’un plus vif assaut força-t-on des remparts?&lt;br>
Et quand vit-on monter au sommet de la gloire,&lt;br>
D’un plus rapide cours le char de la victoire?&lt;br>
Si nous voulions ôter le voile spécieux,&lt;br>
Que la prévention nous met devant les yeux,&lt;br>
Et, lassés d’applaudir à mille erreurs grossières,&lt;br>
Nous servir quelquefois de nos propres lumières,&lt;br>
Nous verrions clairement que, sans témérité,&lt;br>
On peut n’adorer pas toute l’antiquité&lt;br>
Et qu’enfin, dans nos jours, sans trop de confiance,&lt;br>
On lui peut disputer le prix de la science.&lt;/p></description><content:encoded>&lt;p>La belle antiquité fut toujours vénérable&lt;br>
Mais je ne crus jamais qu’elle fût adorable.&lt;br>
Je vois les anciens, sans plier les genoux&lt;br>
Ils sont grands, il est vrai, mais hommes comme nous&lt;br>
Et l’on peut comparer, sans craindre d’Être injuste,&lt;br>
Le siècle de Louis au beau siècle d’Auguste.&lt;br>
En quel temps sut-on mieux le dur métier de Mars?&lt;br>
Quand d’un plus vif assaut força-t-on des remparts?&lt;br>
Et quand vit-on monter au sommet de la gloire,&lt;br>
D’un plus rapide cours le char de la victoire?&lt;br>
Si nous voulions ôter le voile spécieux,&lt;br>
Que la prévention nous met devant les yeux,&lt;br>
Et, lassés d’applaudir à mille erreurs grossières,&lt;br>
Nous servir quelquefois de nos propres lumières,&lt;br>
Nous verrions clairement que, sans témérité,&lt;br>
On peut n’adorer pas toute l’antiquité&lt;br>
Et qu’enfin, dans nos jours, sans trop de confiance,&lt;br>
On lui peut disputer le prix de la science.&lt;/p>
&lt;p>Platon, qui fut divin du temps de nos aïeux,&lt;br>
Commence à devenir quelquefois ennuyeux&lt;br>
En vain son traducteur, partisan de l’antique,&lt;/p>
&lt;p>En conserve la grâce et tout le sel attique&lt;br>
Du lecteur le plus âpre et le plus résolu,&lt;br>
Un dialogue entier ne saurait être lu.&lt;/p>
&lt;p>Chacun sait le décri du fameux Aristote,&lt;br>
En physique moins sûr qu’en histoire Hérodote&lt;br>
Ses écrits, qui charmaient les plus intelligents,&lt;br>
Sont à peine reçus de nos moindres régents.&lt;br>
Pourquoi s’en étonner? Dans cette nuit obscure,&lt;br>
Où se cache à nos yeux la secrète nature,&lt;br>
Quoique le plus savant d’entre tous les humains,&lt;br>
Il ne voyait alors que des fantômes vains.&lt;br>
Chez lui, sans nul égard des véritables causes,&lt;br>
De simples qualités opéraient toutes choses,&lt;br>
Et son système obscur roulait tout sur ce point,&lt;br>
Qu’une chose se fait de ce qu’elle n’est point.&lt;br>
D’une épaisse vapeur se formait la comète,&lt;br>
Sur un solide ciel roulait chaque planète&lt;br>
Et tous les autres feux dans leurs vases dorés,&lt;br>
Pendaient du riche fond des lambris azurés.&lt;/p>
&lt;p>O ciel! depuis le jour qu’un art incomparable,&lt;br>
Trouva l’heureux secret de ce verre admirable,&lt;br>
Par qui rien sur la terre et dans le haut des cieux,&lt;br>
Quelqu’éloigné qu’il soit, n’est trop loin de nos yeux,&lt;br>
De quel nombre d’objets, d’une grandeur immense,&lt;br>
S’est accrue eu nos jours l’humaine connaissance!&lt;br>
Dans l’enclos incertain de ce vaste univers,&lt;br>
Mille mondes nouveaux ont été découverts,&lt;br>
Et de nouveaux soleils, quand la nuit tend ses voiles,&lt;br>
Égalent désormais le nombre des étoiles.&lt;br>
Par des verres encor non moins ingénieux,&lt;/p>
&lt;p>L’œil voit croitre sous lui mille objets curieux&lt;br>
II voit, lorsqu’en un point sa force est réunie,&lt;br>
De l’atome au néant la distance infinie&lt;br>
Il entre dans le sein des moindres petits corps,&lt;br>
De la sage nature il y voit les ressorts,&lt;br>
Et portant ses regards jusqu’en son sanctuaire,&lt;br>
Admire avec quel art en secret elle opère.&lt;/p>
&lt;p>L’homme, de mille erreurs autrefois prévenu,&lt;br>
Et malgré son savoir, à soi-même inconnu,&lt;br>
Ignorait en repos jusqu’aux routes certaines,&lt;br>
Du Méandre vivant qui coule dans ses veines.&lt;br>
Des utiles vaisseaux, où de ses aliments&lt;br>
Se font, pour le nourrir, les heureux changements&lt;br>
Il ignorait encor la structure et l’usage,&lt;br>
Et de son propre corps le divin assemblage.&lt;br>
Non, non, sur la grandeur des miracles divers,&lt;br>
Dont le Souverain Maitre a rempli l’univers,&lt;br>
La docte antiquité, dans toute sa durée,&lt;br>
À l’égal de nos jours ne fut point éclairée.&lt;/p>
&lt;p>Mais, si pour la nature elle eut de vains auteurs,&lt;br>
Je la vois s’applaudir de ses grands orateurs,&lt;br>
Je vois les Cicérons, je vois les Démosthènes,&lt;br>
Ornements éternels et de Rome et d’Athènes,&lt;br>
Dont le foudre éloquent me fait déjà trembler,&lt;br>
Et qui, de leurs grands noms, viennent nous accabler.&lt;br>
Qu’ils viennent, je le veux mais que sans avantage&lt;br>
Entre les combattants le terrain se partage&lt;br>
Que, dans notre barreau, l’on les voie occupés&lt;br>
À défendre d’un champ trois sillons usurpés&lt;br>
Qu’instruits dans la coutume, ils mettent leur étude&lt;br>
À prouver d’un égout la juste servitude,&lt;br>
Ou qu’en riche appareil, la force de leur art&lt;br>
Éclate à soutenir les droits de Jean Maillart.&lt;br>
Si leur haute éloquence, en ses démarches fières,&lt;br>
Refuse de descendre à ces viles matières,&lt;br>
Que nos grands orateurs soient assez fortunés&lt;br>
Pour défendre, comme eux, des clients couronnés,&lt;br>
Ou qu’un grand peuple en foule accoure les entendre,&lt;br>
Pour déclarer la guerre au père d’Alexandre,&lt;br>
Plus qu’eux peut-être alors diserts et véhéments,&lt;br>
Ils donneraient l’essor aux plus grands mouvements&lt;br>
Et si, pendant le cours d’une longue audience,&lt;br>
Malgré les traits hardis de leur vive éloquence,&lt;br>
On voit nos vieux Catons sur leurs riches tapis,&lt;br>
Tranquilles auditeurs et souvent assoupis,&lt;br>
On pourrait voir alors, au milieu d’une place,&lt;br>
S’émouvoir, s’écrier l’ardente populace.&lt;/p>
&lt;p>Ainsi, quand sous l’effort des autans irrités,&lt;br>
Les paisibles étangs sont à peine agités,&lt;br>
Les moindres aquilons, sur les plaines salées,&lt;br>
Élèvent jusqu’aux cieux les vagues ébranlées.&lt;/p>
&lt;p>Père de tous les arts, à qui du dieu des vers&lt;br>
Les mystères profonds ont été découverts,&lt;br>
Vaste et puissant génie, inimitable Homère,&lt;br>
D’un respect infini ma muse te révère.&lt;br>
Non, ce n’est pas à tort que tes inventions&lt;br>
En tout temps ont charmé toutes les nations&lt;br>
Que de tes deux héros, les hautes aventures&lt;br>
Sont le nombreux sujet des plus doctes peintures,&lt;br>
Et que des grands palais les murs et les lambris&lt;br>
Prennent leurs ornements de tes divins écrits.&lt;br>
Cependant, si le ciel, favorable à la France,&lt;br>
Au siècle où nous vivons eût remis ta naissance,&lt;br>
Cent défauts qu’on impute au siècle où tu naquis,&lt;br>
Ne profaneraient pas tes ouvrages exquis.&lt;br>
Tes superbes guerriers, prodiges de vaillance,&lt;br>
Prêts de s’entrepercer du long fer de leur lance,&lt;br>
N’auraient pas si longtemps tenu le bras levé&lt;br>
Et, lorsque le combat devrait être achevé,&lt;br>
Ennuyé les lecteurs, d’une longue préface,&lt;br>
Sur les faits éclatants des héros de leur race.&lt;br>
Ta verve aurait formé ces vaillants demi-dieux,&lt;br>
Moins brutaux, moins cruels et moins capricieux.&lt;br>
D’une plus fine entente et d’un art plus habile&lt;br>
Aurait été forgé le bouclier d’Achille,&lt;br>
Chef-d’œuvre de Vulcain, où son savant burin.&lt;br>
Sur le front lumineux d’un résonnant airain,&lt;br>
Avait gravé le ciel, les airs, l’onde et la terre,&lt;br>
Et tout ce qu’Amphytrite en ses deux bras enserre,&lt;br>
Où l’on voit éclater le bel astre du jour,&lt;br>
Et la lune, au milieu de sa brillante cour.&lt;br>
Où l’on voit deux cités parlant diverses langues,&lt;br>
Où de deux orateurs on entend les harangues,&lt;br>
Où de jeunes bergers, sur la rive d’un bois,&lt;br>
Dansent l’un après l’autre, et puis tous à la fois&lt;br>
Où mugit un taureau qu’un fier lion dévore,&lt;br>
Où sont de doux concerts et cent choses encore&lt;/p>
&lt;p>Que jamais d’un burin, quoiqu’en la main des dieux,&lt;br>
Le langage muet ne saurait dire aux yeux&lt;br>
Ce fameux bouclier, dans un siècle plus sage,&lt;br>
Eût été plus correct et moins chargé d’ouvrage.&lt;br>
Ton génie, abondant en ses descriptions,&lt;br>
Ne t’aurait pas permis tant de digressions,&lt;br>
Et, modérant l’excès de tes allégories,&lt;br>
Eût encor retranché cent doctes rêveries,&lt;br>
Où ton esprit s’égare et prend de tels essors,&lt;br>
Qu’Horace te fait grâce en disant que tu dors.&lt;/p>
&lt;p>Ménandre, j’en conviens, eut un rare génie,&lt;br>
Et pour plaire au théâtre une adresse infinie.&lt;br>
Virgile, j’y consens, mérite des autels.&lt;br>
Ovide est digne encor des honneurs immortels.&lt;br>
Mais ces rares auteurs, qu’aujourd’hui l’on adore,&lt;br>
Étaient-ils adorés quand ils vivaient encore?&lt;br>
Écoutons Martial Ménandre, esprit charmant,&lt;br>
Fut du théâtre grec applaudi rarement&lt;br>
Virgile vit les vers d’Ennius le bonhomme,&lt;br>
Lus, chéris, estimés des connaisseurs de Rome,&lt;br>
Pendant qu’avec langueur on écoutait les siens,&lt;br>
Tant on est amoureux des auteurs anciens&lt;br>
Et malgré la douceur de sa veine divine,&lt;br>
Ovide était connu de sa seule Corine,&lt;br>
Ce n’est qu’avec le temps que leur nom s’accroissant,&lt;br>
Et toujours, plus fameux, d’âge en âge passant,&lt;br>
À la fin s’est acquis cette gloire éclatante,&lt;br>
Qui de tant de degrés a passé leur attente.&lt;/p>
&lt;p>Tel, à fois épandus, un fleuve impétueux,&lt;br>
En abordant la mer coule majestueux,&lt;br>
Qui, sortant de son roc sur l’herbe de ses rives,&lt;br>
Y roulait, inconnu, ses ondes fugitives.&lt;/p>
&lt;p>Donc, quel haut rang l’honneur ne devront point tenir&lt;br>
Dans les fastes sacrés des siècles à venir,&lt;br>
Les Regniers, les Mainards, les Gombauds, les Malherbes,&lt;br>
Les Godeaux, les Racans, dont les écrits superbes,&lt;br>
En sortant de leur veine, et dès qu’ils furent nés,&lt;br>
D’un laurier immortel se virent couronnés.&lt;br>
Combien seront chéris par les races futures,&lt;br>
Les galants Sarrasins, et les tendres Voitures,&lt;br>
Les Molières naïfs, les Rotrou, les Tristans,&lt;br>
Et cent autres encor délices de leur temps.&lt;br>
Mais quel sera le sort du célèbre Corneille,&lt;br>
Du théâtre français l’honneur et la merveille,&lt;br>
Qui sut si bien mêler aux grands évènements.&lt;br>
L’héroïque beauté des nobles sentiments?&lt;br>
Qui des peuples pressés vit cent fois l’affluence,&lt;br>
Par de longs cris de joie honorer sa présence,&lt;br>
Et les plus sages rois, de sa veine charmés,&lt;br>
Écouter les héros qu’il avait animés.&lt;br>
De ces rares auteurs, au temple de mémoire,&lt;br>
On ne peut concevoir quelle sera la gloire,&lt;br>
Lorsqu’insensiblement, consacrant leurs écrits,&lt;br>
Le temps aura, pour eux, gagné tous les esprits&lt;br>
Et par ce haut relief qu’il donne à toute chose,&lt;br>
Amené le moment de leur apothéose.&lt;/p>
&lt;p>Maintenant, à loisir, sur les autres beaux arts,&lt;br>
Pour en voir le succès, promenons nos regards.&lt;br>
Amante des appas de la belle nature,&lt;/p>
&lt;p>Venez, et dites-nous, agréable Peinture&lt;br>
Ces peintres si fameux des siècles plus âgés,&lt;br>
De talents inouïs furent-ils partagés&lt;br>
Et le doit-on juger par les rares merveilles&lt;br>
Dont leurs adorateurs remplissent nos oreilles&lt;br>
Faut-il un si grand art pour tromper un oiseau!&lt;br>
Un peintre est-il parfait pour bien peindre un rideau?&lt;br>
Et fut-ce un coup de l’art si digne qu’on l’honore,&lt;br>
De fendre un mince trait, d’un trait plus mince encore.&lt;br>
À peine maintenant ces exploits singuliers&lt;br>
Seraient le coup d’essai des moindres écoliers.&lt;br>
Ces peintres commençants, dans le peu qu’ils apprirent,&lt;br>
N’en surent guère plus que ceux qui les admirent.&lt;/p>
&lt;p>Dans le siècle passé, des hommes excellents&lt;br>
Possédaient, il est vrai, vos plus riches talents&lt;br>
L’illustre Raphaël, cet immense génie,&lt;br>
Pour peindre, eut une force, une grâce infinie&lt;br>
Et tout ce que forma l’adresse de sa main,&lt;br>
Porte un air noble et grand, qui semble plus qu’humain.&lt;br>
Après lui s’éleva son école savante,&lt;br>
Et celle des Lombards à l’envi triomphante.&lt;br>
De ces maitres de l’art, les tableaux précieux&lt;br>
Seront, dans tous les temps, le doux charme des yeux.&lt;br>
De votre art cependant le secret le plus rare,&lt;br>
Ne leur fut départi que d’une main avare&lt;br>
Le plus docte d’entr’eux ne sut que faiblement,&lt;br>
Du clair et de l’obscur l’heureux ménagement.&lt;br>
On ne rencontre point, dans leur simple manière,&lt;br>
Le merveilleux effet de ce point de lumière,&lt;br>
Qui, sur un seul endroit, vif et resplendissant,&lt;br>
Va, de tous les côtés, toujours s’affaiblissant,&lt;/p>
&lt;p>Qui, de divers objets que le sujet assemble,&lt;br>
Par le nœud des couleurs ne fait qu’un tout ensemble,&lt;br>
Et présente à nos yeux l’exacte vérité&lt;br>
Dans toute la douceur de sa naïveté.&lt;br>
Souvent, sans nul égard du changement sensible&lt;br>
Que fait de l’air épais la masse imperceptible,&lt;br>
Les plus faibles lointains et les plus effacés&lt;br>
Sont comme les devants distinctement tracés&lt;br>
Ne sachant pas encor qu’un peintre, en ses ouvrages,&lt;br>
Des objets éloignés doit former les images,&lt;br>
Lorsque confusément son œil les aperçoit,&lt;br>
Non telles qu’elles sont, mais telles qu’il les voit.&lt;br>
C’est par là que Le Brun, toujours inimitable,&lt;br>
Donne à tout ce qu’il fait un air si véritable,&lt;br>
Et que, dans l’avenir, ses ouvrages fameux&lt;br>
Seront l’étonnement de nos derniers neveux.&lt;/p>
&lt;p>Non loin du beau séjour de l’aimable peinture,&lt;br>
Habite pour jamais la tardive sculpture&lt;br>
Près d’elle est la Vénus, l’Hercule, l’Apollon,&lt;br>
Le Bacchus, le Lantin et le Laocoon,&lt;br>
Chefs-d’œuvre de son art, choisis entre dix mille&lt;br>
Leurs divines beautés me rendent immobile,&lt;br>
Et souvent interdit, il me semble les voir&lt;br>
Respirer comme nous, parler et se mouvoir.&lt;br>
C’est ici, je l’avoue, où l’audace est extrême,&lt;br>
De soutenir encor mon surprenant problème&lt;br>
Mais si l’art, qui jamais ne se peut contenter,&lt;br>
Découvre des défauts qu’on leur peut imputer,&lt;br>
Si du Laocoon la taille vénérable,&lt;br>
De celle de ses fils est par trop dissemblable,&lt;br>
Et si les moites corps des serpents inhumains,&lt;/p>
&lt;p>Au lieu de deux enfants enveloppent deux nains&lt;br>
Si le fameux Hercule a diverses parties,&lt;br>
Par des muscles trop forts un peu trop ressenties&lt;br>
Quoique tous les savants, de l’antique entêtés,&lt;br>
Érigent ces défauts en de grandes beautés,&lt;br>
Doivent-ils nous forcer à ne voir rien de rare,&lt;br>
Aux chefs-d’œuvre nouveaux dont Versailles se pare,&lt;br>
Que tout homme éclairé qui n’en croit que ses yeux,&lt;br>
Ne trouve pas moins beaux pour n’être pas si vieux?&lt;br>
Qui se font admirer, et semblent pleins de vie,&lt;br>
Tout exposés qu’ils sont aux regards de l’envie.&lt;br>
Mais que n’en diront point les siècles éloignés,&lt;br>
Lorsqu’il leur manquera quelque bras, quelque nez?&lt;br>
Ces ouvrages divins où tout est admirable,&lt;br>
Sont du temps de Louis, ce prince incomparable,&lt;br>
Diront les curieux. Cet auguste Apollon&lt;br>
Sort de la sage main du fameux Girardon&lt;br>
Ces chevaux du soleil, qui marchent, qui bondissent,&lt;br>
Et, qu’au rapport des yeux, on croirait qu’ils hennissent,&lt;br>
Sont l’ouvrage immortel des deux frères Gaspards&lt;br>
Et cet aimable Acis, qui charme vos regards,&lt;br>
Où tout est naturel autant qu’il est artiste,&lt;br>
Naquit sous le ciseau du gracieux Baptiste.&lt;br>
Cette jeune Diane, où l’œil, à tout moment,&lt;br>
De son geste léger croit voir le mouvement,&lt;br>
Qui, placée à son gré le long de ces bocages,&lt;br>
Semble vouloir sans cesse entrer sous leurs feuillages,&lt;br>
Se doit à l’ouvrier, dont la savante main,&lt;br>
Sous les traits animés d’un colosse d’airain,&lt;br>
Secondant d’Aubusson, dans l’ardeur de son zèle,&lt;br>
Du héros immortel fit l’image immortelle.&lt;/p>
&lt;p>Allons sans différer dans ces aimables lieux,&lt;br>
De tant de grands objets rassasier nos yeux.&lt;br>
Ce n’est, pas un palais, c’est une ville entière,&lt;br>
Superbe en sa grandeur, superbe en sa matière&lt;br>
Non, c’est plutôt un monde, où du grand univers&lt;br>
Se trouvent rassemblés les miracles divers.&lt;br>
Je vois de toutes parts les fleuves qui jaillissent,&lt;br>
Et qui forment des mers des ondes qu’ils vomissent,&lt;br>
Par un art incroyable, ils ont été forcés&lt;br>
De monter au sommet de ces lieux exhaussés&lt;br>
Et leur eau, qui descend aux jardins qu’elle arrose,&lt;br>
Dans cent riches palais en passant se repose.&lt;br>
Que leur peut opposer toute l’antiquité,&lt;br>
Pour égaler leur pompe et leur variété?&lt;/p>
&lt;p>Naguère dans sa chaire, un maitre en rhétorique,&lt;br>
Plein de ce fol amour qu’ils ont tous pour l’antique,&lt;br>
Louant ces beaux jardins, qu’il disait avoir vus&lt;br>
On les prendrait, dit-il, pour ceux d’Alcinoos.&lt;br>
Le jardin de ce roi, si l’on en croit Homère,&lt;br>
Qui se plut à former une belle chimère,&lt;br>
Utilement rempli de bons arbres fruitiers,&lt;br>
Renfermait dans ses murs quatre arpents tout entiers.&lt;br>
Là se cueillait la poire, et la figue et l’orange,&lt;br>
Ici, dans un recoin, se foulait la vendange,&lt;br>
Et là, de beaux raisins sur la terre épanchés,&lt;br>
S’étalaient au soleil pour en être séchés.&lt;br>
Dans le royal enclos, on voyait deux fontaines,&lt;br>
Non s’élever en l’air superbes et hautaines,&lt;br>
Mais former à l’envi deux paisibles ruisseaux,&lt;br>
Dont l’un mouillait le pied de tous les arbrisseaux,&lt;br>
Et l’autre, s’échappant du jardin magnifique,&lt;/p>
&lt;p>Abreuvait les passants dans la place publique.&lt;br>
Tels sont, dans les hameaux des prochains environs,&lt;br>
Les rustiques jardins de nos bons vignerons.&lt;/p>
&lt;p>Que j’aime la fraicheur de ces bocages sombres,&lt;br>
Où se sont retirés le repos et les ombres,&lt;br>
Où sans cesse on entend le murmure des eaux&lt;br>
Qui sert de symphonie au concert des oiseaux!&lt;br>
Mais ce concert si doux, où leur amour s’explique,&lt;br>
M’accuse d’oublier la charmante musique.&lt;/p>
&lt;p>La Grèce, toujours vaine, est encore sur ce point&lt;br>
Fabuleuse à l’excès, et ne se dément point,&lt;br>
Si l’on ose l’en croire, un chantre de la Thrace,&lt;br>
Forçait les animaux de le suivre à la trace,&lt;br>
Et même les forêts, jusqu’aux moindres buissons,&lt;br>
Tant le charme était fort de ses douces chansons.&lt;br>
Un autre plus expert, non content que sa lyre&lt;br>
Fît marcher sur ses pas les rochers qu’elle attire,&lt;br>
Vit ces mêmes rochers de sa lyre enchantés,&lt;br>
Se poser l’un sur l’autre, et former des cités.&lt;br>
Ces fables, il est vrai, sagement inventées,&lt;br>
Par la Grèce avec art ont été racontées&lt;br>
Mais, comment l’écouter, quand d’un ton sérieux,&lt;br>
Et mettant à l’écart tout sens mystérieux,&lt;br>
Elle dit qu’à tel point, dans le cœur le plus sage,&lt;br>
Ses joueurs d’instruments faisaient entrer la rage,&lt;br>
En sonnant les accords du mode phrygien,&lt;br>
Que les meilleurs amis et les plus gens de bien,&lt;br>
Criaient, se querellaient, faisaient mille vacarmes,&lt;br>
Et pour s’entretuer couraient prendre des armes&lt;br>
Que quand ces enragés, écumant de courroux,&lt;/p>
&lt;p>Se tenaient aux cheveux et s’assommaient de coups,&lt;br>
Les joueurs d’instruments, pour adoucir leur bile,&lt;br>
Touchaient le dorien, mode sage et tranquille,&lt;br>
Et qu’alors ces mutins, à de si doux accents,&lt;br>
S’apaisant tout à coup, rentraient dans leur bon sens?&lt;br>
Elle se vante encor qu’elle eut une musique&lt;br>
Utile au dernier point dans une république,&lt;br>
Qui de tout fol amour amortissait l’ardeur,&lt;br>
Et du sexe charmant conservait la pudeur&lt;br>
Qu’une reine[1] autrefois pour l’avoir écoutée,&lt;br>
Fut près d’un lustre entier en vain sollicitée&lt;br>
Mais qu’elle succomba dès que son séducteur,&lt;br>
Eut chassé d’auprès d’elle un excellent flûteur,&lt;br>
Dont, pendant tout ce temps, la haute suffisance&lt;br>
Avait de cent périls gardé son innocence.&lt;br>
Avec toute sa pompe et son riche appareil,&lt;br>
La musique en nos jours ne fait rien de pareil.&lt;/p>
&lt;p>Ce bel art, tout divin par ses douces merveilles,&lt;br>
Ne se contente pas de charmer les oreilles,&lt;br>
Ni d’aller jusqu’au cœur par ses expressions&lt;br>
Émouvoir à son gré toutes les passions&lt;br>
Il va, passant plus loin, par sa beauté suprême,&lt;br>
Au plus haut de l’esprit charmer la raison même.&lt;/p>
&lt;p>Là cet ordre, ce choix et ces justes rapports&lt;br>
Des divers mouvements et des divers accords,&lt;br>
Le choc harmonieux des contraires parties,&lt;br>
Dans leurs tons opposés sagement assorties,&lt;br>
Dont l’une suit les pas de l’autre qui s’enfuit&lt;/p>
&lt;p>Le mélange discret du silence et du bruit,&lt;br>
Et de mille ressorts la conduite admirable&lt;br>
Enchantent la raison d’un plaisir ineffable.&lt;/p>
&lt;p>Ainsi, pendant la nuit, quand on lève les yeux&lt;br>
Vers les astres brillants de la voute des cieux,&lt;br>
Plein d’une douce joie, on contemple, on admire&lt;br>
Cet éclat vif et pur dont on les voit reluire&lt;br>
Et d’un respect profond on sent toucher son cœur&lt;br>
Par leur nombre étonnant et leur vaste grandeur&lt;br>
Mais si de ces beaux feux les courses mesurées,&lt;br>
De celui qui les voit ne sont pas ignorées,&lt;br>
S’il connait leurs aspects et leurs déclinaisons,&lt;br>
Leur chute et leur retour, qui forment les saisons,&lt;br>
Combien adore-t-il la sagesse infinie,&lt;br>
Qui de cette nombreuse et céleste harmonie,&lt;br>
Qu’un ordre, compassé jusqu’aux moindres moments,&lt;br>
Règle les grands accords et les grands mouvements?&lt;/p>
&lt;p>La Grèce, je le veux, eut des voix sans pareilles,&lt;br>
Dont l’extrême douceur enchantait les oreilles&lt;br>
Ses maitres, pleins d’esprit, composèrent des chants,&lt;br>
Tels que ceux de Lulli, naturels et touchants&lt;br>
Mais n’ayant point connu la douceur incroyable&lt;br>
Que produit des accords la rencontre agréable&lt;br>
Malgré tout le grand bruit que la Grèce en a fait,&lt;br>
Chez elle ce bel art fut un art imparfait&lt;br>
Que si de sa musique on la vit enchantée,&lt;br>
C’est qu’elle se flatta de l’avoir inventée&lt;br>
Et son ravissement fut l’effet de l’amour&lt;br>
Dont on est enivré pour ce qu’on met au jour.&lt;br>
Ainsi, lorsqu’un enfant, dont la langue s’essaye,&lt;br>
Commence à prononcer, fait du bruit et bégaye,&lt;br>
La mère qui le tient a ses sens plus charmés&lt;br>
De trois ou quatre mots qu’à peine il a formés,&lt;br>
Que de tous les discours pleins d’art et de science,&lt;br>
Que déclame en public la plus haute éloquence.&lt;/p>
&lt;p>Que ne puis-je évoquer le célèbre Arion,&lt;br>
L’incomparable Orphée et le sage Amphion,&lt;br>
Pour les rendre témoins de nos rares merveilles,&lt;br>
Qui, dans leur siècle heureux, n’eurent point de pareilles!&lt;/p>
&lt;p>Quand la toile se lève, et que les sons charmants&lt;br>
D’un innombrable amas de divers instruments,&lt;br>
Forment cette éclatante et grave symphonie,&lt;br>
Qui ravit tous les sens par sa noble harmonie,&lt;br>
Et par qui le moins tendre, en ce premier moment,&lt;br>
Sent tout son corps ému d’un doux frémissement&lt;br>
Ou quand d’aimables voix, que la scène rassemble,&lt;br>
Mêlent leurs divins chants et leurs plaintes ensemble,&lt;br>
Et par les longs accords de leur triste langueur,&lt;br>
Pénètrent jusqu’au fond le moins sensible cœur&lt;br>
Sur des maitres de l’art, sur des âmes si belles,&lt;br>
Quel pouvoir n’auraient pas tant de grâces nouvelles&lt;/p>
&lt;p>Tout art n’est composé que des secrets divers,&lt;br>
Qu’aux hommes curieux l’usage a découverts,&lt;br>
Et cet utile amas des choses qu’on invente,&lt;br>
Sans cesse, chaque jour, ou s’épure, ou s’augmente&lt;br>
Ainsi, les humbles toits de nos premiers aïeux,&lt;br>
Couverts négligemment de joncs et de glaïeux,&lt;br>
N’eurent rien de pareil en leur architecture,&lt;br>
À nos riches palais d’éternelle structure&lt;br>
Ainsi le jeune chêne en son âge naissant,&lt;br>
Ne peut se comparer au chêne vieillissant,&lt;br>
Qui, jetant sur la terre un spacieux ombrage,&lt;br>
Avoisine le ciel de son vaste branchage.&lt;/p>
&lt;p>Mais c’est peu, dira-t-on, que, par un long progrès,&lt;br>
Le temps de tous les arts découvre les secrets&lt;br>
La nature affaiblie en ce siècle où nous sommes,&lt;br>
Ne peut plus enfanter de ces merveilleux hommes,&lt;br>
Dont avec abondance, en mille endroits divers,&lt;br>
Elle ornait les beaux jours du naissant univers,&lt;br>
Et que, tout pleins d’ardeur, de force et de lumière,&lt;br>
Elle donnait au monde en sa vigueur première&amp;hellip;.&lt;/p>
&lt;p>À former les esprits comme à former les corps,&lt;br>
La nature en tout temps fait les mêmes efforts&lt;br>
Son être est immuable et cette force aisée&lt;br>
Dont elle produit tout, ne s’est point épuisée&lt;br>
Jamais l’astre du jour, qu’aujourd’hui nous voyons,&lt;br>
N’eut le front couronné de plus brillants rayons&lt;br>
Jamais, dans le printemps, les roses empourprées,&lt;br>
D’un plus vif incarnat ne furent colorées&lt;br>
Non moins blanc qu’autrefois brille dans nos jardins&lt;br>
L’éblouissant émail des lis et des jasmins,&lt;br>
Et dans le siècle d’or la tendre Philomèle,&lt;br>
Qui charmait nos aïeux de sa chanson nouvelle,&lt;br>
N’avait rien de plus doux que celle dont la voix&lt;br>
Réveille les échos qui dorment dans nos bois.&lt;br>
De cette même main les forces infinies&lt;br>
Produisent en tout temps de semblables génies.&lt;/p>
&lt;p>Les siècles, il est vrai, sont entr’eux différents,&lt;br>
Il en fut d’éclairés, il en fut d’ignorants&lt;br>
Mais si le règne heureux d’un excellent monarque&lt;br>
Fut toujours de leur prix et la cause et la marque,&lt;br>
Quel siècle pour ses rois, des hommes révéré,&lt;br>
Au siècle de Louis peut être préféré?&lt;br>
De Louis, qu’environne une gloire immortelle,&lt;br>
De Louis, des grands rois le plus parfait modèle?&lt;/p>
&lt;p>Le ciel en le formant épuisa ses trésors,&lt;br>
Et le combla des dons de l’esprit et du corps&lt;br>
Par l’ordre des destins, la victoire, asservie&lt;br>
À suivre tous les pas de son illustre vie,&lt;br>
Animant les efforts de ses vaillants guerriers,&lt;br>
Dès qu’il régna sur nous le couvrit de lauriers&lt;br>
Mais lorsqu’il entreprit de mouvoir par lui-même&lt;br>
Les pénibles ressorts de la grandeur suprême,&lt;br>
De quelle majesté, de quel nouvel éclat,&lt;br>
Ne vit-on pas briller la face de l’état?&lt;br>
La pureté des lois partout est rétablie,&lt;br>
Des funestes duels la rage est abolie&lt;br>
Sa valeur en tous lieux soutient ses alliés,&lt;br>
Sous elle, les ingrats tombent humiliés,&lt;br>
Et l’on voit tout à coup les fiers peuples de l’Èbre,&lt;br>
Du rang qu’il tient sur eux rendre un aveu célèbre.&lt;br>
Son bras, se signalant par cent divers exploits,&lt;br>
Des places qu’il attaque en prend quatre à la fois&lt;br>
Aussi loin qu’il le veut il étend ses frontières&lt;br>
En dix jours, il soumet des provinces entières&lt;br>
Son armée, à ses yeux, passe un fleuve profond,&lt;br>
Que César ne passa qu’avec l’aide d’un pont.&lt;br>
De trois vastes états les haines déclarées&lt;br>
Tournent contre lui seul leurs armes conjurées&lt;br>
Il abat leur orgueil, il confond leurs projets,&lt;br>
Et pour tout châtiment leur impose la paix.&lt;/p>
&lt;p>Instruit d’où vient en lui cet excès de puissance,&lt;br>
Il s’en sert, plein de zèle et de reconnaissance,&lt;br>
À rendre à leur bercail les troupeaux égarés,&lt;br>
Qu’une mortelle erreur en avait séparés,&lt;br>
Et par ses pieux soins, l’hérésie étouffée,&lt;br>
Fournit à ses vertus un immortel trophée.&lt;/p>
&lt;p>Peut-être qu’éblouis par tant d’heureux progrès,&lt;br>
Nous n’en jugeons pas bien, pour en être trop près&lt;br>
Consultons au-dehors, et formons nos suffrages&lt;br>
Au gré des nations des plus lointaines plages,&lt;br>
De ces peuples heureux, où plus grand, plus vermeil,&lt;br>
Sur un char de rubis se lève le soleil,&lt;br>
Où la terre, en tout temps, d’une main libérale,&lt;br>
Prodigue ses trésors qu’avec pompe elle étale,&lt;br>
Dont les superbes rois sont si vains de leur sort,&lt;br>
Qu’un seul regard sur eux est suivi de la mort.&lt;br>
L’invincible Louis, sans flotte, sans armée,&lt;br>
Laisse agir en ces lieux sa seule renommée&lt;br>
Et ces peuples, charmés de ses exploits divers,&lt;br>
Traversent sans repos le vaste sein des mers,&lt;br>
Pour venir à ses pieds lui rendre un humble hommage,&lt;br>
Pour se remplir les yeux de son auguste image,&lt;br>
Et gouter le plaisir de voir tout à la fois,&lt;br>
Des hommes le plus sage, et le plus grand des rois.&lt;/p>
&lt;p>Ciel à qui nous devons cette splendeur immense,&lt;br>
Dont on voit éclater notre siècle et la France,&lt;br>
Poursuis de tes bontés le favorable cours,&lt;br>
Et d’un si digne roi conserve les beaux jours,&lt;br>
D’un roi qui, dégagé des travaux de la guerre,&lt;br>
Aimé de ses sujets, craint de toute la terre,&lt;br>
Ne va plus occuper tous ses soins généreux,&lt;br>
Qu’à nous régir en paix, et qu’à nous rendre heureux.&lt;/p></content:encoded></item><item><title>L'Art Poétique</title><link>https://alexalejandre.com/poetry/french/l-art-poetique/</link><pubDate>Thu, 05 Jul 1674 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/french/l-art-poetique/</guid><description>&lt;h2 id="chant-i">Chant I&lt;/h2>
&lt;p>C’est en vain qu’au Parnasse un téméraire auteur
Pense de l’art des vers atteindre la hauteur:
S’il ne sent point du ciel l’influence secrète,
Si son astre en naissant ne l’a formé poëte,
Dans son génie étroit il est toujours captif;
Pour lui Phébus est sourd, et Pégase est rétif.
Ô vous donc qui, brûlant d’une ardeur périlleuse,
Courez du bel esprit la carrière épineuse,
N’allez pas sur des vers sans fruit vous consumer,
Ni prendre pour génie un amour de rimer:
Craignez d’un vain plaisir les trompeuses amorces,
Et consultez longtemps votre esprit et vos forces.
La nature, fertile en esprits excellens,&lt;/p></description><content:encoded>&lt;h2 id="chant-i">Chant I&lt;/h2>
&lt;p>C’est en vain qu’au Parnasse un téméraire auteur
Pense de l’art des vers atteindre la hauteur:
S’il ne sent point du ciel l’influence secrète,
Si son astre en naissant ne l’a formé poëte,
Dans son génie étroit il est toujours captif;
Pour lui Phébus est sourd, et Pégase est rétif.
Ô vous donc qui, brûlant d’une ardeur périlleuse,
Courez du bel esprit la carrière épineuse,
N’allez pas sur des vers sans fruit vous consumer,
Ni prendre pour génie un amour de rimer:
Craignez d’un vain plaisir les trompeuses amorces,
Et consultez longtemps votre esprit et vos forces.
La nature, fertile en esprits excellens,&lt;/p>
&lt;p>Sait entre les auteurs partager les talens:
L’un peut tracer en vers une amoureuse flamme;
L’autre d’un trait plaisant aiguiser l’épigramme:
Malherbe d’un héros peut vanter les exploits;
Racan chanter Philis, les bergers et les bois:
Mais souvent un esprit qui se flatte et qui s’aime
Méconnoît son génie, et s’ignore soi-même:
Ainsi tel, autrefois qu’on vit avec Faret
Charbonner de ses vers les murs d’un cabaret,
S’en va, mal à propos, d’une voix insolente,
Chanter du peuple hébreu la fuite triomphante,
Et, poursuivant Moïse au travers des déserts,
Court avec Pharaon se noyer dans les mers.
Quelque sujet qu’on traite, ou plaisant, ou sublime,
Que toujours le bon sens s’accorde avec la rime:
L’un l’autre vainement ils semblent se haïr;
La rime est une esclave, et ne doit qu’obéir.
Lorsqu’à la bien chercher d’abord on s’évertue,
L’esprit à la trouver aisément s’habitue;
Au joug de la raison sans peine elle fléchit,
Et, loin de la gêner, la sert et l’enrichit.
Mais lorsqu’on la néglige, elle devient rebelle;
Et pour la rattraper le sens court après elle.
Aimez donc la raison: que toujours vos écrits
Empruntent d’elle seule et leur lustre et leur prix.&lt;/p>
&lt;p>La plupart, emportés d’une fougue insensée,
Toujours loin du droit sens vont chercher leur pensée:
Ils croiroient s’abaisser, dans leurs vers monstrueux,
S’ils pensoient ce qu’un autre a pu penser comme eux.
Évitons ces excès: laissons à l’Italie
De tous ces faux brillans l’éclatante folie.
Tout doit tendre au bon sens: mais pour y parvenir
Le chemin est glissant et pénible à tenir;
Pour peu qu’on s’en écarte, aussitôt on se noie:
La raison pour marcher n’a souvent qu’une voie.
Un auteur quelquefois trop plein de son objet
Jamais sans l’épuiser n’abandonne un sujet.
S’il rencontre un palais, il m’en dépeint la face;
Il me promène après de terrasse en terrasse;
Ici s’offre un perron; là règne un corridor;
Là ce balcon s’enferme en un balustre d’or.
Il compte des plafonds les ronds et les ovales;
« Ce ne sont que festons, ce ne sont qu’astragales. »
Je saute vingt feuillets pour en trouver la fin,
Et je me sauve à peine au travers du jardin.
Fuyez de ces auteurs l’abondance stérile,
Et ne vous chargez point d’un détail inutile.
Tout ce qu’on dit de trop est fade et rebutant;
L’esprit rassasié le rejette à l’instant:
Qui ne sait se borner ne sut jamais écrire.
Souvent la peur d’un mal nous conduit dans un pire:
Un vers étoit trop foible, et vous le rendez dur;
J’évite d’être long, et je deviens obscur;
L’un n’est point trop fardé, mais sa muse est trop nue;&lt;/p>
&lt;p>L’autre a peur de ramper, il se perd dans la nue.
Voulez-vous du public mériter les amours?
Sans cesse en écrivant variez vos discours.
Un style trop égal et toujours uniforme
En vain brille à nos yeux, il faut qu’il nous endorme.
On lit peu ces auteurs, nés pour nous ennuyer,
Qui toujours sur un ton semblent psalmodier.
Heureux qui, dans ses vers, sait d’une voix légère
Passer du grave au doux, du plaisant au sévère!
Son livre, aimé du ciel, et chéri des lecteurs,
Est souvent chez Barbin entouré d’acheteurs.
Quoi que vous écriviez, évitez la bassesse:
Le style le moins noble a pourtant sa noblesse.
Au mépris du bon sens, le burlesque effronté
Trompa les yeux d’abord, plut par sa nouveauté.
On ne vit plus en vers que pointes triviales;
Le Parnasse parla le langage des halles;
La licence à rimer alors n’eut plus de frein;
Apollon travesti devint un Tabarin.
Cette contagion infecta les provinces,
Du clerc et du bourgeois passa jusques aux princes.
Le plus mauvais plaisant eut ses approbateurs;
Et, jusqu’à d’Assouci, tout trouva des lecteurs.
Mais de ce style enfin la cour désabusée
Dédaigna de ces vers l’extravagance aisée,
Distingua le naïf du plat et du bouffon,
Et laissa la province admirer le Typhon.&lt;/p>
&lt;p>Que ce style jamais ne souille votre ouvrage.
Imitons de Marot l’élégant badinage,
Et laissons le burlesque aux plaisans du Pont-Neuf.
Mais n’allez point aussi, sur les pas de Brébeuf,
Même en une Pharsale, entasser sur les rives
« De morts et de mourans cent montagnes plaintives. »
Prenez mieux votre ton. Soyez simple avec art,
Sublime sans orgueil, agréable sans fard.
N’offrez rien au lecteur que ce qui peut lui plaire.
Ayez pour la cadence une oreille sévère:
Que toujours dans vos vers le sens coupant les mots,
Suspende l’hémistiche, en marque le repos.
Gardez qu’une voyelle à courir trop hâtée
Ne soit d’une voyelle en son chemin heurtée.
Il est un heureux choix de mots harmonieux,
Fuyez des mauvais sons le concours odieux:
Le vers le mieux rempli, la plus noble pensée
Ne peut plaire à l’esprit, quand l’oreille est blessée.
Durant les premiers ans du Parnasse françois,
Le caprice tout seul faisoit toutes les lois.
La rime, au bout des mots assemblés sans mesure,
Tenoit lieu d’ornemens, de nombre et de césure.
Villon sut le premier, dans ces siècles grossiers,
Débrouiller l’art confus de nos vieux romanciers.
Marot bientôt après fit fleurir les ballades;
Tourna des triolets, rima des mascarades,
À des refrains réglés asservit les rondeaux,
Et montra pour rimer des chemins tout nouveaux.
Ronsard, qui le suivit, par une autre méthode,&lt;/p>
&lt;p>Réglant tout, brouilla tout, fit un art à sa mode,
Et toutefois longtemps eut un heureux destin.
Mais sa muse, en françois parlant grec et latin,
Vit dans l’âge suivant, par un retour grotesque,
Tomber de ses grands mots le faste pédantesque.
Ce poëte orgueilleux, trébuché de si haut,
Rendit plus retenus Desportes et Bertaut.
Enfin Malherbe vint, et, le premier en France,
Fit sentir dans les vers une juste cadence,
D’un mot mis en sa place enseigna le pouvoir,
Et réduisit la muse aux règles du devoir.
Par ce sage écrivain la langue réparée
N’offrit plus rien de rude à l’oreille épurée.
Les stances avec grâce apprirent à tomber,
Et le vers sur le vers n’osa plus enjamber.
Tout reconnut ses lois; et ce guide fidèle
Aux auteurs de ce temps sert encor de modèle.
Marchez donc sur ses pas; aimez sa pureté,
Et de son tour heureux imitez la clarté.
Si le sens de vos vers tarde à se faire entendre,
Mon esprit aussitôt commence à se détendre;
Et, de vos vains discours prompt à se détacher,
Ne suit point un auteur qu’il faut toujours chercher.
Il est certains esprits dont les sombres pensées
Sont d’un nuage épais toujours embarrassées;
Le jour de la raison ne le sauroit percer.
Avant donc que d’écrire apprenez à penser.
Selon que notre idée est plus ou moins obscure,&lt;/p>
&lt;p>L’expression la suit, ou moins nette, ou plus pure.
Ce que l’on conçoit bien s’énonce clairement,
Et les mots pour le dire arrivent aisément.
Surtout qu’en vos écrits la langue révérée
Dans vos plus grands excès vous soit toujours sacrée.
En vain vous me frappez d’un son mélodieux,
Si le terme est impropre, ou le tour vicieux:
Mon esprit n’admet point un pompeux barbarisme,
Ni d’un vers ampoulé l’orgueilleux solécisme.
Sans la langue, en un mot, l’auteur le plus divin,
Est toujours, quoi qu’il fasse, un méchant écrivain.
Travaillez à loisir, quelque ordre qui vous presse.
Et ne vous piquez point d’une folle vitesse:
Un style si rapide, et qui court en rimant,
Marque moins trop d’esprit, que peu de jugement.
J’aime mieux un ruisseau qui, sur la molle arène,
Dans un pré plein de fleurs lentement se promène,
Qu’un torrent débordé qui, d’un cours orageux,
Roule, plein de gravier, sur un terrain fangeux.
Hâtez-vous lentement; et, sans perdre courage,
Vingt fois sur le métier remettez votre ouvrage:
Polissez-le sans cesse et le repolissez;
Ajoutez quelquefois, et souvent effacez.
C’est peu qu’en un ouvrage où les fautes fourmillent,
Des traits d’esprit semés de temps en temps pétillent.
Il faut que chaque chose y soit mise en son lieu;
Que le début, la fin répondent au milieu;
Que d’un art délicat les pièces assorties
N’y forment qu’un seul tout de diverses parties,
Que jamais du sujet le discours s’écartant
N’aille chercher trop loin quelque mot éclatant.&lt;/p>
&lt;p>Craignez-vous pour vos vers la censure publique?
Soyez-vous à vous-même un sévère critique.
L’ignorance toujours est prête à s’admirer.
Faites-vous des amis prompts à vous censurer;
Qu’ils soient de vos écrits les confidens sincères,
Et de tous vos défauts les zélés adversaires.
Dépouillez devant eux l’arrogance d’auteur;
Mais sachez de l’ami discerner le flatteur.
Tel vous semble applaudir, qui vous raille et vous joue.
Aimez qu’on vous conseille, et non pas qu’on vous loue.
Un flatteur aussitôt cherche à se récrier:
Chaque vers qu’il entend le fait extasier.
Tout est charmant, divin: aucun mot ne le blesse;
Il trépigne de joie, il pleure de tendresse;
Il vous comble partout d’éloges fastueux.
La vérité n’a point cet air impétueux.
Un sage ami, toujours rigoureux, inflexible,
Sur vos fautes jamais ne vous laisse paisible:
Il ne pardonne point les endroits négligés,
Il renvoie en leur lieu les vers mal arrangés,
Il réprime des mots l’ambitieuse emphase;
Ici le sens le choque, et plus loin c’est la phrase.
Votre construction semble un peu s’obscurcir:
Ce terme est équivoque: il le faut éclaircir.
C’est ainsi que vous parle un ami véritable.
Mais souvent sur ses vers un auteur intraitable
À les protéger tous se croit intéressé,
Et d’abord prend en main le droit de l’offensé.
« De ce vers, direz-vous, l’expression est basse.
— Ah! monsieur, pour ce vers je vous demande grâce,
Répondra-t-il d’abord. — Ce mot me semble froid,
Je le retrancherois. — C’est le plus bel endroit!
— Ce tour ne me plaît pas. — Tout le monde l’admire.
Ainsi toujours constant à ne se point dédire,&lt;/p>
&lt;p>Qu’un mot dans son ouvrage ait paru vous blesser.
C’est un titre chez lui pour ne point l’effacer:
Cependant, à l’entendre, il chérit la critique:
Vous avez sur ses vers un pouvoir despotique
Mais tout ce beau discours dont il vient vous flatter
N’est rien qu’un piège adroit pour vous les réciter.
Aussitôt il vous quitte; et, content de sa muse.
S’en va chercher ailleurs quelque fat qu’il abuse;
Car souvent il en trouve: ainsi qu’en sots auteurs,
Notre siècle est fertile en sots admirateurs;
Et, sans ceux que fournit la ville et la province,
Il en est chez le duc, il en est chez le prince.
L’ouvrage le plus plat a, chez les courtisans,
De tout temps rencontré de zélés partisans;
Et, pour finir enfin par un trait de satire.
Un sot trouve toujours un plus sot qui l’admire.&lt;/p>
&lt;h2 id="chant-ii">Chant II&lt;/h2>
&lt;p>Telle qu’une bergère, au plus beau jour de fête,
De superbes rubis ne charge point sa tête,
Et, sans mêler à l’or l’éclat des diamans,
Cueille en un champ voisin ses plus beaux ornemens:
Telle, aimable en son air, mais humble dans son style,
Doit éclater sans pompe une élégante idylle.
Son tour simple et naïf n’a rien de fastueux,
Et n’aime point l’orgueil d’un vers présomptueux.
Il faut que sa douceur flatte, chatouille, éveille,
Et jamais de grands mots n’épouvante l’oreille.
Mais souvent dans ce style un rimeur aux abois
Jette là, de dépit, la flûte et le hautbois;
Et, follement pompeux, dans sa verve indiscrète,
Au milieu d’une églogue entonne la trompette.
De peur de l’écouter Pan fuit dans les roseaux;
Et les Nymphes, d’effroi, se cachent sous les eaux.
Au contraire cet autre, abject en son langage,
Fait parler ses bergers comme on parle au village.
Ses vers plats et grossiers, dépouillés d’agrément,
Toujours baisent la terre, et rampent tristement:&lt;/p>
&lt;p>On diroit que Ronsard, sur ses pipeaux rustiques,
Vient encor fredonner ses idylles gothiques,
Et changer, sans respect de l’oreille et du son,
Lycidas en Pierrot, et Philis en Toinon.
Entre ces deux excès la route est difficile.
Suivez, pour la trouver, Théocrite et Virgile:
Que leurs tendres écrits, par les Grâces dictés,
Ne quittent point vos mains, jour et nuit feuilletés.
Seuls, dans leurs doctes vers, ils pourront vous apprendre
Par quel art sans bassesse un auteur peut descendre;
Chanter Flore, les champs, Pomone, les vergers;
Au combat de la flûte animer deux bergers;
Des plaisirs de l’amour vanter la douce amorce;
Changer Narcisse en fleur, couvrir Daphné d’écorce,
Et par quel art encor l’églogue quelquefois
Rend dignes d’un consul la campagne et les bois
Telle est de ce poëme et la force et la grâce.
D’un ton un peu plus haut, mais pourtant sans audace,
La plaintive élégie, en longs habits de deuil,
Sait, les cheveux épars, gémir sur un cercueil.
Elle peint des amans la joie et la tristesse:
Flatte, menace, irrite, apaise une maîtresse.
Mais, pour bien exprimer ces caprices heureux,
C’est peu d’être poëte, il faut être amoureux.
Je hais ces vains auteurs dont la muse forcée
M’entretient de ses feux, toujours froide et glacée;
Qui s’affligent par art, et, fous de sens rassis,
S’érigent pour rimer en amoureux transis.
Leurs transports les plus doux ne sont que phrases vaines:
Ils ne savent jamais que se charger de chaînes,
Que bénir leur martyre, adorer leur prison,&lt;/p>
&lt;p>Et faire quereller les sens et la raison.
Ce n’étoit pas jadis sur ce ton ridicule
Qu’Amour dictoit les vers que soupiroit Tibulle,
Ou que, du tendre Ovide animant les doux sons,
Il donnoit de son art les charmantes leçons.
Il faut que le cœur seul parle dans l’élégie.
L’ode, avec plus d’éclat et non moins d’énergie.
Élevant jusqu’au ciel son vol ambitieux,
Entretient dans ses vers commerce avec les dieux.
Aux Athlètes dans Pise elle ouvre la barrière,
Chante un vainqueur poudreux au bout de la carrière,
Mène Achille sanglant aux bords du Simoïs,
Ou fait fléchir l’Escaut sous le joug de Louis.
Tantôt, comme une abeille ardente à son ouvrage,
Elle s’en va de fleurs dépouiller le rivage:
Elle peint les festins, les danses et les ris;
Vante un baiser cueilli sur les lèvres d’Iris,
Qui mollement résiste, et, par un doux caprice,
Quelquefois le refuse afin qu’on le ravisse.
Son style impétueux souvent marche au hasard:
Chez elle un beau désordre est un effet de l’art.
Loin ces rimeurs craintifs dont l’esprit flegmatique
Garde dans ses fureurs un ordre didactique;
Qui, chantant d’un héros les progrès éclatans,
Maigres historiens, suivront l’ordre des temps.
Ils n’osent un moment perdre un sujet de vue:
Pour prendre Dole, il faut que Lille soit rendue;
Et que leur vers exact, ainsi que Mézerai,
Ait fait déjà tomber les remparts de Courtrai.
Apollon de son feu leur fut toujours avare.
On dit, à ce propos, qu’un jour ce dieu bizarre,&lt;/p>
&lt;p>Voulant pousser à bout tous les rimeurs françois,
Inventa du sonnet les rigoureuses lois,
Voulut qu’en deux quatrains de mesure pareille
La rime avec deux sons frappât huit fois l’oreille.
Et qu’ensuite six vers artistement rangés
Fussent en deux tercets par le sens partagés.
Surtout de ce poëme il bannit la licence:
Lui-même en mesura le nombre et la cadence:
Défendit qu’un vers foible y put jamais entrer,
Ni qu’un mot déjà mis osât s’y remontrer.
Du reste il l’enrichit d’une beauté suprême:
Un sonnet sans défaut vaut seul un long poëme.
Mais en vain mille auteurs y pensent arriver,
Et cet heureux phénix est encore à trouver.
À peine dans Gombaut, Maynard et Malleville,
En peut-on admirer deux ou trois entre mille:
Le reste, aussi peu lu que ceux de Pelletier,
N’a fait de chez Sercy qu’un saut chez l’épicier.
Pour enfermer son sens dans la borne prescrite,
La mesure est toujours trop longue ou trop petite.
L’épigramme, plus libre en son tour plus borné,
N’est souvent qu’un bon mot de deux rimes orné.
Jadis de nos auteurs les pointes ignorées
Furent de l’Italie en nos vers attirées.
Le vulgaire, ébloui de leur faux agrément,&lt;/p>
&lt;p>À ce nouvel appât courut avidement.
La faveur du public excitant leur audace,
Leur nombre impétueux inonda le Parnasse.
Le madrigal d’abord en fut enveloppé;
Le sonnet orgueilleux lui-même en fut frappé;
La tragédie en fit ses plus chères délices;
L’élégie en orna ses douloureux caprices;
Un héros sur la scène eut soin de s’en parer.
Et sans pointe un amant n’osa plus soupirer:
On vit tous les bergers, dans leurs plaintes nouvelles,
Fidèles à la pointe encor plus qu’à leurs belles:
Chaque mot eut toujours deux visages divers:
La prose la reçut aussi bien que les vers;
L’avocat au palais en hérissa son style,
Et le docteur en chaire en sema l’Évangile.
La raison outragée enfin ouvrit les yeux,
La chassa pour jamais des discours sérieux;
Et dans tous ces écrits la déclarant infâme,
Par grâce lui laissa l’entrée en l’épigramme,
Pourvu que sa finesse, éclatant à propos,
Roulât sur la pensée, et non pas sur les mots.
Ainsi de toutes parts les désordres cessèrent.
Toutefois à la cour les Turlupins restèrent,
Insipides plaisans, bouffons infortunés,
D’un jeu de mots grossier partisans surannés.
Ce n’est pas quelquefois qu’une muse un peu fine
Sur un mot en passant ne joue et ne badine,
Et d’un sens détourné n’abuse avec succès;
Mais fuyez sur ce point un ridicule excès,&lt;/p>
&lt;p>Et n’allez pas toujours d’une pointe frivole
Aiguiser par la queue une épigramme folle.
Tout poëme est brillant de sa propre beauté.
Le rondeau, né gaulois, a la naïveté.
La ballade, asservie à ses vieilles maximes,
Souvent doit tout son lustre au caprice des rimes.
Le madrigal, plus simple et plus noble en son tour,
Respire la douceur, la tendresse et l’amour.
L’ardeur de se montrer, et non pas de médire,
Arma la Vérité du vers de la satire.
Lucile le premier osa la faire voir,
Aux vices des Romains présenta le miroir,
Vengea l’humble vertu, de la richesse altière,
Et l’honnête homme à pied, du faquin en litière.
Horace, à cette aigreur mêla son enjouement:
On ne fut plus ni fat ni sot impunément;
Et malheur à tout nom qui, propre à la censure,
Put entrer dans un vers sans rompre la mesure!
Perse, en ses vers obscurs, mais serrés et pressans,
Affecta d’enfermer moins de mots que de sens.
Juvénal, élevé dans les cris de l’école,
Poussa jusqu’à l’excès sa mordante hyperbole.
Ses ouvrages, tout pleins d’affreuses vérités,
Etincellent pourtant de sublimes beautés:
Soit que, sur un écrit arrivé de Caprée,
Il brise de Séjan la statue adorée;
Soit qu’il fasse au conseil courir les sénateurs,
D’un tyran soupçonneux pâles adulateurs;
Ou que, poussant à bout la luxure latine,
Aux portefaix de Rome il vende Messaline.
Ses écrits pleins de feu partout brillent aux yeux.
De ces maîtres savans disciple ingénieux,&lt;/p>
&lt;p>Regnier seul parmi nous formé sur leurs modèles,
Dans son vieux style encore a des grâces nouvelles.
Heureux, si ses discours, craints du chaste lecteur,
Ne se sentoient des lieux où fréquentoit l’auteur;
Et si, du son hardi de ses rimes cyniques,
Il n’alarmoit souvent les oreilles pudiques!
Le latin, dans les mots brave l’honnêteté:
Mais le lecteur françois veut être respecté;
Du moindre sens impur la liberté l’outrage,
Si la pudeur des mots n’en adoucit l’image.
Je veux dans la satire un esprit de candeur,
Et fuis un effronté qui prêche la pudeur.
D’un trait de ce poëme en bons mots si fertile,
Le François, né malin, forma le vaudeville;
Agréable indiscret, qui, conduit par le chant,
Passe de bouche en bouche et s’accroît en marchant,
La liberté françoise en ses vers se déploie:
Cet enfant du plaisir veut naître dans la joie.
Toutefois n’allez pas, goguenard dangereux,
Faire Dieu le sujet d’un badinage affreux.
À la fin tous ces jeux, que l’athéisme élève,
Conduisent tristement le plaisant à la Grève.
Il faut, même en chansons, du bon sens et de l’art:
Mais pourtant on a vu le vin et le hasard
Inspirer quelquefois une muse grossière,
Et fournir, sans génie, un couplet à Linière.
Mais pour un vain bonheur qui vous a fait rimer,
Gardez qu’un sot orgueil ne vous vienne enfumer.
Souvent l’auteur altier de quelque chansonnette
Au même instant prend droit de se croire poëte:
Il ne dormira plus qu’il n’ait fait un sonnet,&lt;/p>
&lt;p>Il met tous les matins six impromptus au net.
Encore est-ce un miracle, en ses vagues furies,
Si bientôt, imprimant ses sottes rêveries,
Il ne se fait graver au devant du recueil,
Couronné de lauriers, par la main de Nanteuil.&lt;/p>
&lt;p>Chant III&lt;/p>
&lt;p>Il n’est point de serpent, ni de monstre odieux,
Qui, par l’art imité, ne puisse plaire aux yeux:
D’un pinceau délicat l’artifice agréable
Du plus affreux objet fait un objet aimable.
Ainsi, pour nous charmer, la Tragédie en pleurs
D’Œdipe tout sanglant fit parler les douleurs,
D’Oreste parricide exprima les alarmes,
Et, pour nous divertir, nous arracha des larmes.
Vous donc qui, d’un beau feu pour le théâtre épris,
Venez en vers pompeux y disputer le prix,
Voulez-vous sur la scène étaler des ouvrages
Où tout Paris en foule apporte ses suffrages,
Et qui, toujours plus beaux, plus ils sont regardés,
Soient au bout de vingt ans encor redemandés?
Que dans tous vos discours la passion émue
Aille chercher le cœur, l’échauffe et le remue.
Si d’un beau mouvement l’agréable fureur
Souvent ne nous remplit d’une douce terreur,&lt;/p>
&lt;p>Ou n’excite en notre âme une pitié charmante,
En vain vous étalez une scène savante:
Vos froids raisonnemens ne feront qu’attiédir
Un spectateur toujours paresseux d’applaudir,
Et qui, des vains efforts de votre rhétorique
Justement fatigué, s’endort, ou vous critique.
Le secret est d’abord de plaire et de toucher:
Inventez des ressorts qui puissent m’attacher.
Que dès les premiers vers l’action préparée
Sans peine du sujet aplanisse l’entrée.
Je me ris d’un acteur qui, lent à s’exprimer,
De ce qu’il veut, d’abord, ne sait pas m’informer;
Et qui, débrouillant mal une pénible intrigue,
D’un divertissement me fait une fatigue.
J ’aimerois mieux encor qu’il déclinât son nom ,
Et dît: « Je suis Oreste, ou bien Agamemnon, »
Que d’aller, par un tas de confuses merveilles,
Sans rien dire à l’esprit, étourdir les oreilles:
Le sujet n’est jamais assez tôt expliqué.
Que le lieu de la scène y soit fixe et marqué.
Un rimeur, sans péril, delà les Pyrénées,
Sur la scène en un jour renferme des années:
Là souvent le héros d’un spectacle grossier,
Enfant au premier acte, est barbon au dernier.
Mais nous, que la raison à ses règles engage,
Nous voulons qu’avec art l’action se ménage;
Qu’en un lieu, qu’en un jour, un seul fait accompli
Tienne jusqu’à la fin le théâtre rempli.
Jamais au spectateur n’offrez rien d’incroyable:
Le vrai peut quelquefois n’être pas vraisemblable.
Une merveille absurde est pour moi sans appas:
L’esprit n’est point ému de ce qu’il ne croit pas.&lt;/p>
&lt;p>Ce qu’on ne doit point voir, qu’un récit nous l’expose:
Les yeux en le voyant saisiroient mieux la chose;
Mais il est des objets que l’art judicieux
Doit offrir à l’oreille et reculer des yeux.
Que le trouble, toujours croissant de scène en scène,
A son comble arrivé se débrouille sans peine.
L’esprit ne se sent point plus vivement frappé
Que lorsqu’en un sujet d’intrigue enveloppé
D’un secret tout à coup la vérité connue
Change tout, donne à tout une face imprévue.
La tragédie, informe et grossière en naissant,
N’étoit qu’un simple chœur, où chacun en dansant,
Et du dieu des raisins entonnant les louanges,
S’efforçoit d’attirer de fertiles vendanges.
Là, le vin et la joie éveillant les esprits,
Du plus habile chantre un bouc étoit le prix.
Thespis fut le premier qui, barbouillé de lie,
Promena par les bourgs cette heureuse folie;
Et, d’acteurs mal ornés chargeant un tombereau,
Amusa les passans d’un spectacle nouveau.
Eschyle dans le chœur jeta les personnages,
D’un masque plus honnête habilla les visages,
Sur les ais d’un théâtre en public exhaussé
Fit paroître l’acteur d’un brodequin chaussé.
Sophocle enfin, donnant l’essor à son génie,
Accrut encor la pompe, augmenta l’harmonie,
Intéressa le chœur dans toute l’action,
Des vers trop raboteux polit l’expression,
Lui donna chez les Grecs cette hauteur divine
Où jamais n’atteignit la foiblesse latine.&lt;/p>
&lt;p>Chez nos dévots aïeux le théâtre abhorré
Fut longtemps dans la France un plaisir ignoré.
De pèlerins, dit-on, une troupe grossière
En public à Paris y monta la première;
Et, sottement zélée en sa simplicité,
Joua les saints, la Vierge et Dieu, par piété.
Le savoir, à la fin dissipant l’ignorance,
Fit voir de ce projet la dévote imprudence.
On chassa ces docteurs prêchant sans mission;
On vit renaître Hector, Andromaque, Ilion.
Seulement, les acteurs laissant le masque antique,
Le violon tint lieu de chœur et de musique.
Bientôt l’amour, fertile en tendres sentimens,
S’empara du théàtre ainsi que des romans.
De cette passion la sensible peinture
Est pour aller au cœur la route la plus sûre.
Peignez donc, j’y consens, les héros amoureux;
Mais ne m’en formez pas des bergers doucereux;
Qu’Achille aime autrement que Thyrsis et Philène;
N’allez pas d’un Cyrus nous faire un Artamène;
Et que l’amour, souvent de remords combattu,
Paroisse une foiblesse et non une vertu.
Des héros de roman fuyez les petitesses:
Toutefois aux grands cœurs donnez quelques foiblesses.
Achille déplairoit, moins bouillant et moins prompt:&lt;/p>
&lt;p>J’aime à lui voir verser des pleurs pour un affront.
À ces petits défauts marqués dans sa peinture,
L’esprit avec plaisir reconnoit la nature.
Qu’il soit sur ce modèle en vos écrits tracé:
Qu’Agamemnon soit fier, superbe, intéressé,
Que pour ses dieux Enée ait un respect austère.
Conservez à chacun son propre caractère.
Des siècles, des pays étudiez les mœurs:
Les climats font souvent les diverses humeurs.
Gardez donc de donner, ainsi que dans Clélie,
L’air ni l’esprit françois à l’antique Italie;
Et, sous des noms romains faisant notre portrait,
Peindre Caton galant, et Brutus dameret.
Dans un roman frivole aisément tout s’excuse;
C’est assez qu’en courant la fiction amuse;
Trop de rigueur alors seroit hors de saison:
Mais la scène demande une exacte raison;
L’étroite bienséance y veut être gardée.
D’un nouveau personnage inventez-vous l’idée?
Qu’en tout avec soi-même il se montre d’accord,
Et qu’il soit jusqu’au bout tel qu’on l’a vu d’abord.
Souvent, sans y penser, un écrivain qui s’aime
Forme tous ses héros semblables à soi-même:
Tout a l’humeur gasconne en un auteur gascon;
Calprenède et Juba parlent du même ton.
La nature est en nous plus diverse et plus sage;
Chaque passion parle un différent langage:
La colère est superbe, et veut des mots altiers,
L’abattement s’explique en des termes moins fiers.
Que devant Troie en flamme Hécube désolée
Ne vienne pas pousser une plainte ampoulée,
Ni sans raison décrire en quel affreux pays&lt;/p>
&lt;p>Par sept bouches l’Euxin reçoit le Tanaïs.
Tous ces pompeux amas d’expressions frivoles
Sont d’un déclamateur amoureux des paroles.
Il faut dans la douleur que vous vous abaissiez.
Pour me tirer des pleurs, il faut que vous pleuriez.
Ces grands mots dont alors l’acteur emplit sa bouche
Ne partent point d’un cœur que sa misère touche.
Le théâtre, fertile en censeurs pointilleux,
Chez nous pour se produire est un champ périlleux.
Un auteur n’y fait pas de faciles conquêtes;
Il trouve à le siffler des bouches toujours prêtes.
Chacun le peut traiter de fat et d’ignorant;
C’est un droit qu’à la porte on achète en entrant.
Il faut qu’en cent façons, pour plaire, il se replie;
Que tantôt il s’élève et tantôt s’humilie;
Qu’en nobles sentimens il soit partout fécond;
Qu’il soit aisé, solide, agréable, profond;
Que de traits surprenans sans cesse il nous réveille;
Qu’il coure dans ses vers de merveille en merveille,
Et que tout ce qu’il dit, facile à retenir,
De son ouvrage en nous laisse un long souvenir.
Ainsi la tragédie agit, marche et s’explique.
D’un air plus grand encor la poésie épique,
Dans le vaste récit d’une longue action,
Se soutient par la fable, et vit de fiction.
Là pour nous enchanter tout est mis en usage;
Tout prend un corps, une âme, un esprit, un visage.
Chaque vertu devient une divinité:
Minerve est la prudence, et Vénus la beauté.
Ce n’est plus la vapeur qui produit le tonnerre,
C’est Jupiter armé pour effrayer la terre;
Un orage terrible aux yeux des matelots,&lt;/p>
&lt;p>C’est Neptune en courroux qui gourmande les flots;
Écho n’est plus un son qui dans l’air retentisse,
C’est une nymphe en pleurs qui se plaint de Narcisse.
Ainsi, dans cet amas de nobles fictions,
Le poëte s’égaye en mille inventions,
Orne, élève, embellit, agrandit toutes choses,
Et trouve sous sa main des fleurs toujours écloses.
Qu’Énée et ses vaisseaux, par le vent écartés,
Soient aux bords africains d’un orage emportés;
Ce n’est qu’une aventure ordinaire et commune,
Qu’un coup peu surprenant des traits de la fortune.
Mais que Junon constante en son aversion,
Poursuive sur les flots les restes d’Ilion;
Qu’Éole, en sa faveur, les chassant d’Italie,
Ouvre aux vents mutinés les prisons d’Ëolie;
Que Neptune en courroux s’élevant sur la mer,
D’un mot calme les flots, mette la paix dans l’air,
Délivre les vaisseaux, des syrtes les arrache,
C’est là ce qui surprend, frappe, saisit, attache.
Sans tous ces ornemens le vers tombe en langueur,
La poésie est morte ou rampe sans vigueur.
Le poëte n’est plus qu’un orateur timide,
Qu’un froid historien d’une fable insipide.
C’est donc bien vainement que nos auteurs déçus,
Bannissant de leurs vers ces ornemens reçus,
Pensent faire agir Dieu, ses saints et ses prophètes,
Comme ces dieux éclos du cerveau des poëtes;
Mettent à chaque pas le lecteur en enfer,
N’offrent rien qu’Astaroth, Belzébuth, Lucifer.
De la foi d’un chrétien les mystères terribles
D’ornemens égayés ne sont point susceptibles,&lt;/p>
&lt;p>L’Évangile à l’esprit n’offre de tous côtés
Que pénitence à faire et tourmens mérités;
Et de vos fictions le mélange coupable
Même à ses vérités donne l’air de la fable.
Eh! quel objet enfin à présenter aux yeux
Que le diable toujours hurlant contre les cieux,
Qui de votre héros veut rabaisser la gloire,
Et souvent avec Dieu balance la victoire!
Le Tasse, dira-t-on, l’a fait avec succès.
Je ne veux point ici lui faire son procès:
Mais, quoi que notre siècle à sa gloire publie,
Il n’eût point de son livre illustré l’Italie,
Si son sage héros, toujours en oraison;
N’eût fait que mettre enfin Satan à la raison;
Et si Renaud, Argant, Tancrède et sa maîtresse
N’eussent de son sujet égayé la tristesse.
Ce n’est pas que j’approuve, en un sujet chrétien,
Un auteur follement idolâtre et païen.
Mais, dans une profane et riante peinture,
De n’oser de la fable employer la figure;
De chasser les Tritons de l’empire des eaux;
D’ôter à Pan sa flûte, aux Parques leurs ciseaux;
D’empêcher que Caron, dans la fatale barque,
Ainsi que le berger ne passe le monarque:
C’est d’un scrupule vain s’alarmer sottement,
Et vouloir aux lecteurs plaire sans agrément.
Bientôt ils défendront de peindre la Prudence,
De donner à Thémis ni bandeau ni balance,
De figurer aux yeux la Guerre au front d’airain,
Ou le temps qui s’enfuit une horloge à la main;
Et partout des discours, comme une idolâtrie,&lt;/p>
&lt;p>Dans leur faux zèle iront chasser l’allégorie.
Laissons-les s’applaudir de leur pieuse erreur.
Mais, pour nous, bannissons une vaine terreur,
Et, fabuleux chrétiens, n’allons point, dans nos songes,
Du Dieu de vérité faire un Dieu de mensonges.
La fable offre à l’esprit mille agréments divers:
Là tous les noms heureux semblent nés pour les vers,
Ulysse, Agamemnon, Oreste, Idoménée,
Hélène, Ménélas, Pâris, Hector, Énée.
Ô le plaisant projet d’un poëte ignorant,
Qui de tant de héros va choisir Childebrand!
D’un seul nom quelquefois le son dur ou bizarre
Rend un poème entier ou burlesque ou barbare.
Voulez-vous longtemps plaire et jamais ne lasser?
Faites choix d’un héros propre à m’intéresser,
En valeur éclatant, en vertus magnifique:
Qu’en lui, jusqu’aux défauts, tout se montre héroïque;
Que ses faits surprenans soient dignes d’être ouïs;
Qu’il soit tel que César, Alexandre ou Louis,
Non tel que Polynice et son perfide frère;
On s’ennuie aux exploits d’un conquérant vulgaire.
N’offrez point un sujet d’incidens trop chargé.
Le seul courroux d’Achille, avec art ménagé,
Remplit abondamment une Iliade entière:
Souvent trop d’abondance appauvrit la matière.
Soyez vif et pressé dans vos narrations;
Soyez riche et pompeux dans vos descriptions.
C’est là qu’il faut des vers étaler l’élégance;
Y présentez jamais de basse circonstance.&lt;/p>
&lt;p>N’imitez pas ce fou qui, décrivant les mers,
Et peignant, au milieu de leurs flots entr’ouverts,
L’Hébreu sauvé du joug de ses injustes maîtres,
Met, pour le voir passer, les poissons aux fenêtres;
Peint le petit enfant qui va, saute, revient,
Et joyeux à sa mère offre un caillou qu’il tient.
Sur de trop vains objets c’est arrêter la vue.
Donnez à votre ouvrage une juste étendue.
Que le début soit simple et n’ait rien d’affecté.
N’allez pas dès l’abord, sur Pégase monté,
Crier à vos lecteurs, d’une voix de tonnerre:
« Je chante le vainqueur des vainqueurs de la terre. »
Que produira l’auteur après tous ces grands cris?
La montagne en travail enfante une souris.
Oh! que j’aime bien mieux cet auteur plein d’adresse
Qui, sans faire d’abord de si haute promesse,
Me dit d’un ton aisé, doux, simple, harmonieux
« Je chante les combats et cet homme pieux
« Qui, des bords phrygiens conduit dans l’Auson
« Le premier aborda les champs de Lavinie! »
Sa muse en arrivant ne met pas tout en feu,
Et, pour donner beaucoup, ne nous promet que peu
Bientôt vous la verrez, prodiguant les miracles,
Du destin des Latins prononcer les oracles,
De Styx et d’Achéron peindre les noirs torrens,
Et déjà les Césars dans l’Elysée errans.
De figures sans nombre égayez votre ouvrage;&lt;/p>
&lt;p>Que tout y fasse aux yeux une riante image:
On peut être à la fois et pompeux et plaisant;
Et je hais un sublime ennuyeux et pesant.
J’aime mieux Arioste et ses fables comiques,
Que ces auteurs toujours froids et mélancoliques,
Qui dans leur sombre humeur se croiroient faire affront
Si les Grâces jamais leur déridoient le front.
On diroit que pour plaire, instruit par la nature,
Homère ait à Vénus dérobé sa ceinture.
Son livre est d’agrémens un fertile trésor:
Tout ce qu’il a touché se convertit en or ,
Tout reçoit dans ses mains une nouvelle grâce;
Partout il divertit et jamais il ne lasse.
Une heureuse chaleur anime ses discours:
Il ne s’égare point en de trop longs détours.
Sans garder dans ses vers un ordre méthodique,
Son sujet de soi-même et s’arrange et s’explique;
Tout, sans faire d’apprêts, s’y prépare aisément;
Chaque vers, chaque mot court à l’événement.
Aimez donc ses écrits, mais d’un amour sincère,
C’est avoir profité que de savoir s’y plaire.
Un poëme excellent, où tout marche et se suit,
N’est pas de ces travaux qu’un caprice produit:
Il veut du temps, des soins; et ce pénible ouvrage
Jamais d’un écolier ne fut l’apprentissage.
Mais souvent parmi nous un poëte sans art,
Qu’un beau feu quelquefois échauffa par hasard,
Enflant d’un vain orgueil son esprit chimérique,
Fièrement prend en main la trompette héroïque:
Sa muse déréglée en ses vers vagabonds,
Ne s’élève jamais que par sauts et par bonds:
Et son feu, dépourvu de sens et de lecture,&lt;/p>
&lt;p>S’éteint à chaque pas faute de nourriture.
Mais en vain le public, prompt à le mépriser,
De son mérite faux le veut désabuser;
Lui-même, applaudissant à son maigre génie,
Se donne par ses mains l’encens qu’on lui dénie:
Virgile, au prix de lui, n’a point d’invention;
Homère n’entend point la noble fiction.
Si contre cet arrêt le siècle se rebelle,
À la postérité d’abord il en appelle.
Mais attendant qu’ici le bons sens de retour
Ramène triomphans ses ouvrages au jour,
Leurs tas, au magasin, cachés à la lumière,
Combattent tristement les vers et la poussière.
Laissons-les donc entre eux s’escrimer en repos;
Et, sans nous égarer, suivons notre propos.
Des succès fortunés du spectacle tragique
Dans Athènes naquit la comédie antique.
Là le Grec, né moqueur, par mille jeux plaisans
Distilla le venin de ses traits médisans.
Aux accès insolens d’une bouffonne joie
La sagesse, l’esprit, l’honneur furent en proie.
On vit par le public un poëte avoué
S’enrichir aux dépens du mérite joué;
Et Socrate par lui, dans un chœur de nuées,
D’un vil amas de peuple attirer les huées.
Enfin de la licence on arrêta le cours:
Le magistrat des lois emprunta le secours,
Et, rendant par édit les poëtes plus sages,
Défendit de marquer les noms et les visages.
Le théâtre perdit son antique fureur;
La comédie apprit à rire sans aigreur,&lt;/p>
&lt;p>Sans fiel et sans venin sut instruire et reprendre,
Et plut innocemment dans les vers de Ménandre.
Chacun, peint avec art dans ce nouveau miroir,
S’y vit avec plaisir, ou crut ne s’y point voir:
L’avare, des premiers, rit du tableau fidèle
D’un avare souvent tracé sur son modèle;
Et mille fois un fat finement exprimé
Méconnut le portrait sur lui-même formé.
Que la nature donc soit votre étude unique,
Auteurs qui prétendez aux honneurs du comique
Quiconque voit bien l’homme, et, d’un esprit profond,
De tant de cœurs cachés a pénétré le fond;
Qui sait bien ce que c’est qu’un prodigue, un avare,
Un honnête homme, un fat, un jaloux, un bizarre,
Sur une scène heureuse il peut les étaler,
Et les faire à nos yeux vivre, agir et parler.
Présentez-en partout les images naïves;
Que chacun y soit peint des couleurs les plus vives.
La nature, féconde en bizarres portraits,
Dans chaque âme est marquée à de différents traits;
Un geste la découvre, un rien la fait paroître:
Mais tout esprit n’a pas des yeux pour la connoître.
Le temps, qui change tout, change aussi nos humeurs:
Chaque âge a ses plaisirs, son esprit et ses mœurs.
Un jeune homme, toujours bouillant dans ses caprices,
Est prompt à recevoir l’impression des vices;
Est vain dans ses discours, volage en ses désirs,
Rétif à la censure, et fou dans les plaisirs.
L’âge viril, plus mûr, inspire un air plus sage,
Se pousse auprès des grands, s’intrigue, se ménage,
Contre les coups du sort songe à se maintenir,&lt;/p>
&lt;p>Et loin dans le présent regarde l’avenir.
La vieillesse chagrine incessamment amasse;
Garde, non pas pour soi, les trésors qu’elle entasse,
Marche en tous ses desseins d’un pas lent et glacé;
Toujours plaint le présent et vante le passé;
Inhabile aux plaisirs dont la jeunesse abuse,
Blâme en eux les douceurs que l’âge lui refuse.
Ne faites point parler vos acteurs au hasard,
Un vieillard en jeune homme, un jeune homme en vieillard.
Étudiez la cour et connoissez la ville;
L’une et l’autre est toujours en modèles fertile.
C’est par là que Molière illustrant ses écrits,
Peut-être de son art eût remporté le prix,
Si, moins ami du peuple, en ses doctes peintures
Il n’eut point fait souvent grimacer ses figures,
Quitté, pour le bouffon, l’agréable et le fin,
Et sans honte à Térence allié Tabarin.
Dans ce sac ridicule où Scapin s’enveloppe,
Je ne reconnois plus l’auteur du Misanthrope.
Le comique, ennemi des soupirs et des pleurs,
N’admet point en ses vers de tragiques douleurs;
Mais son emploi n’est pas d’aller, dans une place,
De mots sales et bas charmer la populace.
Il faut que ses acteurs badinent noblement;
Que son nœud bien formé se dénoue aisément;
Que l’action, marchant où la raison la guide
Ne se perde jamais dans une scène vide;
Que son style humble et doux se relève à propos;
Que ses discours partout fertiles en bons mots,
Soient pleins de passions finement maniées,
Et les scènes toujours l’une à l’autre liées.
Aux dépens du bon sens gardez de plaisanter:&lt;/p>
&lt;p>Jamais de la nature il ne faut s’écarter.
Contemplez de quel air un père dans Térence,
Vient d’un fils amoureux gourmander l’imprudence;
De quel air cet amant écoute ses leçons,
Et court chez sa maîtresse oublier ces chansons.
Ce n’est pas un portrait, une image semblable;
C’est un amant, un fils, un père véritable.
J’aime sur le théâtre un agréable auteur
Qui, sans se diffamer aux yeux du spectateur,
Plaît par la raison seule, et jamais ne la choque.
Mais pour un faux plaisant, à grossière équivoque,
Qui pour me divertir n’a que la saleté,
Qu’il s’en aille, s’il veut, sur des tréteaux monté,
Amusant le Pont-Neuf de ses sornettes fades,
Aux laquais assemblés jouer ses mascarades.&lt;/p>
&lt;h2 id="chant-iv">Chant IV&lt;/h2>
&lt;p>Dans Florence jadis vivoit un médecin,
Savant hâbleur, dit-on, et célèbre assassin.
Lui seul y fit longtemps la publique misère:
Là le fils orphelin lui redemande un père;
Ici le frère pleure un frère empoisonné.
L’un meurt vide de sang, l’autre plein de séné;
Le rhume à son aspect se change en pleurésie,
Et par lui la migraine est bientôt frénésie.
Il quitte enfin la ville, en tous lieux détesté.
De tous ses amis morts un seul ami resté
Le mène en sa maison de superbe structure:
C’étoit un riche abbé, fou de l’architecture.
Le médecin d’abord semble né dans cet art,
Déjà de bâtimens parle comme Mansart:
D’un salon qu’on élève il condamne la face;
Au vestibule obscur il marque une autre place,
Approuve l’escalier tourné d’autre façon.
Son ami le conçoit, et mande son maçon.
Le maçon vient, écoute, approuve et se corrige.&lt;/p>
&lt;p>Enfin, pour abréger un si plaisant prodige,
Notre assassin renonce à son art inhumain;
Et désormais, la règle et l’équerre à la main,
Laissant de Galien la science suspecte,
De méchant médecin devient bon architecte.
Son exemple est pour nous un précepte excellent.
Soyez plutôt maçon, si c’est votre talent,
Ouvrier estimé dans un art nécessaire,
Qu’écrivain du commun, et poëte vulgaire.
Il est dans tout autre art des degrés différens,
On peut avec honneur remplir les seconds rangs;
Mais dans l’art dangereux de rimer et d’écrire,
II n’est point de degrés du médiocre au pire;
Qui dit froid écrivain dit détestable auteur.
Boyer est à Pinchêne égal pour le lecteur;
On ne lit guère plus Rampale et Ménardière ,
Que Magnon, du Souhait, Corbin et La Morlière.
Un fou du moins fait rire, et peut nous égayer ,
Mais un froid écrivain ne sait rien qu’ennuyer.
J’aime mieux Bergerac et sa burlesque audace
Que ces vers où Motin se morfond et nous glace.
Ne vous enivrez point des éloges flatteurs,
Qu’un amas quelquefois de vains admirateurs
Vous donne en ces réduits, prompts à crier merveille!
Tel écrit récité se soutint à l’oreille,&lt;/p>
&lt;p>Qui, dans l’impression au grand jour se montrant,
Ne soutient pas des yeux le regard pénétrant.
On sait de cent auteurs l’aventure tragique:
Et Gombaut tant loué garde encor la boutique.
Écoutez tout le monde, assidu consultant:
Un fat quelquefois ouvre un avis important.
Quelques vers toutefois qu’Apollon vous inspire,
En tous lieux aussitôt ne courez pas les lire.
Gardez-vous d’imiter ce rimeur furieux
Qui, de ses vains écrits lecteur harmonieux,
Aborde en récitant quiconque le salue,
Et poursuit de ses vers les passans dans la rue.
Il n’est temple si saint, des anges respecté,
Qui soit contre sa muse un lieu de sûreté.
Je vous l’ai déjà dit, aimez qu’on vous censure,
Et, souple à la raison, corrigez sans murmure.
Mais ne vous rendez pas dès qu’un sot vous reprend.
Souvent dans son orgueil un subtil ignorant
Par d’injustes dégoûts combat toute une pièce,
Blâme des plus beaux vers la noble hardiesse.
On a beau réfuter ses vains raisonnemens:
Son esprit se complaît dans ses faux jugemens;
Et sa foible raison, de clarté dépourvue,
Pense que rien n’échappe à sa débile vue.
Ses conseils sont à craindre; et, si vous les croyez,
Pensant fuir un écueil, souvent vous vous noyez.
Faites choix d’un censeur solide et salutaire,
Que la raison conduise et le savoir éclaire,
Et dont le crayon sûr d’abord aille chercher&lt;/p>
&lt;p>L’endroit que l’on sent foible, et qu’on se veut cacher.
Lui seul éclaircira vos doutes ridicules,
De votre esprit tremblant lèvera les scrupules.
C’est lui qui vous dira par quel transport heureux
Quelquefois dans sa course un esprit vigoureux,
Trop resserré par l’art, sort des règles prescrites,
Et de l’art même apprend à franchir leurs limites.
Mais ce parfait censeur se trouve rarement:
Tel excelle à rimer qui juge sottement;
Tel s’est fait par ses vers distinguer dans la ville,
Qui jamais de Lucain n’a distingué Virgile.
Auteurs, prêtez l’oreille à mes instructions.
Voulez-vous faire aimer vos riches fictions?
Qu’en savantes leçons votre muse fertile
Partout joigne au plaisant le solide et l’utile.
Un lecteur sage fuit un vain amusement,
Et veut mettre à profit son divertissement.
Que votre âme et vos mœurs, peintes dans vos ouvrages,
N’offrent jamais de vous que de nobles images.
Je ne puis estimer ces dangereux auteurs
Qui de l’honneur, en vers, infâmes déserteurs,
Trahissant la vertu sur un papier coupable,
Aux yeux de leurs lecteurs rendent le vice aimable.
Je ne suis pas pourtant de ces tristes esprits
Qui, bannissant l’amour de tous chastes écrits,
D’un si riche ornement veulent priver la scène,
Traitent d’empoisonneurs et Rodrigue et Chimène.
L’amour le moins honnête, exprimé chastement,
N’excite point en nous de honteux mouvement.
Didon a beau gémir et m’étaler ses charmes,
Je condamne sa faute en partageant ses larmes.&lt;/p>
&lt;p>Un auteur vertueux, dans ses vers innocens,
Ne corrompt point le cœur en chatouillant les sens:
Son feu n’allume point de criminelle flamme.
Aimez donc la vertu, nourrissez-en votre âme:
En vain l’esprit est plein d’une noble vigueur;
Le vers se sent toujours des bassesses du cœur.
Fuyez surtout, fuyez ces basses jalousies.
Des vulgaires esprits malignes frénésies.
Un sublime écrivain n’en peut être infecté;
C’est un vice qui suit la médiocrité.
Du mérite éclatant cette sombre rivale
Contre lui chez les grands incessamment cabale,
Et, sur les pieds en vain tâchant de se hausser,
Pour s’égaler à lui cherche à le rabaisser.
Ne descendons jamais dans ces lâches intrigues:
N’allons point à l’honneur par de honteuses brigues.
Que les vers ne soient pas votre éternel emploi,
Cultivez vos amis, soyez homme de foi:
C’est peu d’être agréable et charmant dans un livre,
Il faut savoir encore et converser et vivre.
Travaillez pour la gloire, et qu’un sordide gain
Ne soit jamais l’objet d’un illustre écrivain.
Je sais qu’un noble esprit peut, sans honte et sans crime,
Tirer de son travail un tribut légitime;
Mais je ne puis souffrir ces auteurs renommés,
Qui, dégoûtés de gloire et d’argent affamés,
Mettent leur Apollon aux gages d’un libraire,
Et font d’un art divin un métier mercenaire.&lt;/p>
&lt;p>Avant que la raison, s’expliquant par la voix,
Eût instruit les humains, eût enseigné des lois,
Tous les hommes suivoient la grossière nature,
Dispersés dans les bois couroient à la pâture:
La force tenoit lieu de droit et d’équité;
Le meurtre s’exerçoit avec impunité.
Mais du discours enfin l’harmonieuse adresse
De ces sauvages mœurs adoucit la rudesse,
Rassembla les humains dans les forêts épars,
Enferma les cités de murs et de remparts,
De l’aspect du supplice effraya l’insolence,
Et sous l’appui des lois mit la foible innocence.
Cet ordre fut, dit-on, le fruit des premiers vers.
De là sont nés ces bruits reçus dans l’univers,
Qu’aux accens dont Orphée emplit les monts de Thrace,
Les tigres amollis dépouilloient leur audace;
Qu’aux accords d’Amphion les pierres se mouvoient,
Et sur les murs thébains en ordre s’élevoient.
L’harmonie en naissant produisit ces miracles.
Depuis, le ciel en vers fit parler les oracles;
Du sein d’un prêtre ému d’une divine horreur,
Apollon par des vers exhala sa fureur.
Bientôt ressuscitant les héros des vieux âges,
Homère aux grands exploits anima les courages.
Hésiode à son tour par d’utiles leçons,
Des champs trop paresseux vint hâter les moissons.
En mille écrits fameux la sagesse tracée
Fut, à l’aide des vers, aux mortels annoncée;
Et partout des esprits ses préceptes vainqueurs,
Introduits par l’oreille, entrèrent dans les cœurs.
Pour tant d’heureux bienfaits, les Muses révérées
Furent d’un juste encens dans la Grèce honorées;
Et leur art, attirant le culte des mortels,
À sa gloire en cent lieux vit dresser des autels.&lt;/p>
&lt;p>Mais enfin l’indigence amenant la bassesse,
Le Parnasse oublia sa première noblesse,
Un vil amour du gain, infectant les esprits,
De mensonges grossiers souilla tous les écrits;
Et partout, enfantant mille ouvrages frivoles,
Trafiqua du discours et vendit les paroles.
Ne vous flétrissez point par un vice si bas.
Si l’or seul a pour vous d’invincibles appas,
Fuyez ces lieux charmans qu’arrose le Permesse:
Ce n’est point sur ses bords qu’habite la richesse.
Aux plus savans auteurs, comme aux plus grands guerriers,
Apollon ne promet qu’un nom et des lauriers.
Mais quoi! dans la disette une muse affamée
Ne peut pas, dira-t-on, subsister de fumée;
Un auteur qui, pressé d’un besoin importun,
Le soir entend crier ses entrailles à jeun,
Goûte peu d’Hélicon les douces promenades:
Horace a bu son soûl quand il voit les Ménades;
Et, libre du souci qui trouble Colletet,
N’attend pas pour dîner le succès d’un sonnet.
Il est vrai: mais enfin cette affreuse disgrâce
Rarement parmi nous afflige le Parnasse.
Et que craindre en ce siècle, où toujours les beaux-arts
D’un astre favorable éprouvent les regards,
Ou d’un prince éclairé la sage prévoyance
Fait partout au mérite ignorer l’indigence!
Muses, dictez sa gloire à tous vos nourrissons:
Son nom vaut mieux pour eux que toutes vos leçons.
Que Corneille, pour lui rallumant son audace,
Soit encor le Corneille et du Cid et d’Horace;
Que Racine, enfantant des miracles nouveaux,&lt;/p>
&lt;p>De ses héros sur lui forme tous les tableaux;
Que de son nom, chanté par la bouche des belles,
Benserade en tous lieux amuse les ruelles;
Que Segrais dans l’églogue en charme les forêts;
Que pour lui l’épigramme aiguise tous ses traits.
Mais quel heureux auteur, dans une autre Enéide,
Aux bords du Rhin tremblant conduira cet Alcide?
Quelle savante lyre au bruit de ses exploits
Fera marcher encor les rochers et les bois;
Chantera le Batave, éperdu dans l’orage,
Soi-même se noyant pour sortir du naufrage;
Dira les bataillons sous Mastricht enterrés,
Dans ces affreux assauts du soleil éclairés?
Mais tandis que je parle, une gloire nouvelle
Vers ce vainqueur rapide aux Alpes vous appelle.
Déjà Dôle et Salins sous le joug ont ployé;
Besançon fume encor sur son roc foudroyé.
Où sont ces grands guerriers dont les fatales ligues
Devoient à ce torrent opposer tant de digues?
Est-ce encore en fuyant qu’ils pensent l’arrêter,
Fiers du honteux honneur d’avoir su l’éviter?
Que de remparts détruits! Que de villes forcées!
Que de moissons de gloire en courant amassées!
Auteurs, pour les chanter redoublez vos transports:
Le sujet ne veut pas de vulgaires efforts.&lt;/p>
&lt;p>Pour moi, qui, jusqu’ici nourri dans la satire,
N’ose encor manier la trompette et la lyre,
Vous me verrez pourtant, dans ce champ glorieux,
Vous animer du moins de la voix et des yeux;
Vous offrir ces leçons que ma muse au Parnasse
Rapporta jeune encor, du commerce d’Horace;
Seconder votre ardeur, échauffer vos esprits,
Et vous montrer de loin la couronne et le prix.
Mais aussi pardonnez, si, plein de ce beau zèle,
De tous vos pas fameux observateur fidèle,
Quelquefois du bon or je sépare le faux,
Et des auteurs grossiers j’attaque les défauts;
Censeur un peu fâcheux, mais souvent nécessaire,
Plus enclin à blâmer que savant à bien faire.&lt;/p></content:encoded></item><item><title>La Peinture</title><link>https://alexalejandre.com/poetry/french/poeme-de-la-peinture/</link><pubDate>Thu, 12 Apr 1668 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/french/poeme-de-la-peinture/</guid><description>&lt;p>À l’auguste grandeur du plus grand roi du monde,&lt;br>
L’homme, en qui tous les arts sembleront ramassés,&lt;br>
Du Tibre glorieux les bords aura laissés&lt;br>
Elle verra qu’en vain de ces lieux elle appelle&lt;br>
La science et les arts qui sont déjà chez elle&lt;br>
Sagement, toutefois, d’un désir curieux,&lt;br>
Les élèves iront enlever de ces lieux,&lt;br>
Sous de vieilles couleurs, la science cachée,&lt;br>
Que vainement ailleurs leur main aurait cherchée&lt;br>
Et, mesurant des yeux ces marbres renommés,&lt;br>
En dérober l’esprit dont ils sont animés.&lt;br>
Les arts arriveront à leur degré suprême,&lt;br>
Conduits par le génie et la sagesse extrême&lt;br>
De celui dont alors le plus puissant des rois,&lt;br>
Pour les faire fleurir, aura su faire choix.&lt;br>
D’un sens qui n’erre point, sa belle âme guidée,&lt;br>
Et possédant du beau l’invariable idée,&lt;br>
Élèvera si haut l’esprit des artisans,&lt;br>
En leur donnant à tous ses ordres instruisants,&lt;br>
Et leur fera tirer, par sa vive lumière,&lt;br>
Tant d’exquises beautés du sein de la matière,&lt;br>
Qu’eux-mêmes, regardant leurs travaux plus qu’humains,&lt;br>
À peine croiront voir l’ouvrage de leurs mains.&lt;/p></description><content:encoded>&lt;p>À l’auguste grandeur du plus grand roi du monde,&lt;br>
L’homme, en qui tous les arts sembleront ramassés,&lt;br>
Du Tibre glorieux les bords aura laissés&lt;br>
Elle verra qu’en vain de ces lieux elle appelle&lt;br>
La science et les arts qui sont déjà chez elle&lt;br>
Sagement, toutefois, d’un désir curieux,&lt;br>
Les élèves iront enlever de ces lieux,&lt;br>
Sous de vieilles couleurs, la science cachée,&lt;br>
Que vainement ailleurs leur main aurait cherchée&lt;br>
Et, mesurant des yeux ces marbres renommés,&lt;br>
En dérober l’esprit dont ils sont animés.&lt;br>
Les arts arriveront à leur degré suprême,&lt;br>
Conduits par le génie et la sagesse extrême&lt;br>
De celui dont alors le plus puissant des rois,&lt;br>
Pour les faire fleurir, aura su faire choix.&lt;br>
D’un sens qui n’erre point, sa belle âme guidée,&lt;br>
Et possédant du beau l’invariable idée,&lt;br>
Élèvera si haut l’esprit des artisans,&lt;br>
En leur donnant à tous ses ordres instruisants,&lt;br>
Et leur fera tirer, par sa vive lumière,&lt;br>
Tant d’exquises beautés du sein de la matière,&lt;br>
Qu’eux-mêmes, regardant leurs travaux plus qu’humains,&lt;br>
À peine croiront voir l’ouvrage de leurs mains.&lt;/p>
&lt;p>Nymphe, c’est en ce temps que le bel art de peindre&lt;br>
Doit monter aussi haut que l’homme peut atteindre,&lt;br>
El qu’au dernier degré les pinceaux arrivés&lt;br>
Produiront à l’envi des tableaux achevés&lt;br>
Tableaux, dont toutefois l’ample et noble matière,&lt;br>
Que le prince lui seul fournira tout entière,&lt;br>
Encor plus que l’art même aura de l’agrément,&lt;br>
Et remplira les yeux de plus d’étonnement.&lt;/p>
&lt;p>Mille exploits inouïs, d’éternelle mémoire,&lt;br>
Se verront dans le cours de sa brillante histoire,&lt;br>
Où tout ce que la fable a jamais inventé,&lt;br>
Aura moins d’agrément, de force et de beauté.&lt;br>
Rien ne peut égaler la science infinie&lt;br>
Des maitres qui peindront, au gré de leur génie,&lt;br>
Ses galants carrousels, ses spectacles charmants,&lt;br>
Ses ballets, ses festins, ses divertissements.&lt;br>
Combien sera la main, noble, savante et juste,&lt;br>
Qui donnera la vie à ce visage auguste,&lt;br>
Où seront tous les traits par qui les souverains&lt;br>
Charment et font trembler le reste des humains!&lt;br>
Que ceux dont le bon gout donné par la nature,&lt;br>
Aime, admire et connait la belle architecture,&lt;br>
Auront l’esprit content et les yeux satisfaits,&lt;br>
De voir les grands dessins de ses riches palais,&lt;br>
Qui, pour leur noble audace et leur grâce immortelle »&lt;br>
Des pompeux bâtiments deviendront le modèle!&lt;br>
Qu’il sera doux de voir peint, d’un soin curieux,&lt;br>
De tous les beaux vergers le plus délicieux&lt;br>
Soit pour l’aspect fuyant des longues avenues,&lt;br>
Soit pour l’aimable objet des différences vues,&lt;br>
Soit pour le riche émail et les vives couleurs&lt;br>
Des parterres semés des plus riantes fleurs&lt;br>
Soit pour ces grands étangs, et ces claires fontaines,&lt;br>
Qui, de leurs vases d’or, superbes et hautaines,&lt;br>
Et malgré la nature, hôtesses de ces lieux,&lt;br>
Par le secours de l’art monteront jusqu’aux cieux&lt;br>
Soit enfin pour y voir mille troupes errantes,&lt;br>
De tous les animaux d’espèces différentes,&lt;br>
Qui, parmi l’univers jusqu’alors dispersés,&lt;br>
Dans ce charmant réduit se verront ramassés!&lt;/p>
&lt;p>C’est là que le héros, las du travail immense&lt;br>
Qu’exige des grands rois l’emploi de leur puissance,&lt;br>
Ayant porté ses soins sur la terre et les (lots,&lt;br>
Ira gouter en paix les charmes du repos,&lt;br>
Afin qu’y reprenant une vigueur nouvelle,&lt;br>
Il retourne aussitôt où son peuple l’appelle.&lt;br>
Ainsi, lorsque mon char, de la mer s’approchant,&lt;br>
Roule d’un pas plus vite aux portes du couchant,&lt;br>
Après que j’ai versé dans tous les coins du monde&lt;br>
Les rayons bienfaisants de ma clarté féconde,&lt;br>
J’entre, pour ranimer mes feux presqu’amortis,&lt;br>
Dans l’humide séjour des grottes de Thétis,&lt;br>
D’où sortant, au matin, couronné de lumière,&lt;br>
Je reprends dans les cieux ma course coutumière&lt;br>
Dans ces temps bienheureux de gloire et de grandeur,&lt;br>
Telle doit de votre art éclater la splendeur.&lt;br>
— Là se tut Apollon, et la nymphe ravie&lt;br>
De voir de tant d’honneur sa science suivie,&lt;br>
Se plaignit en son cœur des destins envieux,&lt;br>
Qui remettaient si loin ce siècle glorieux.&lt;/p>
&lt;p>Le Brun, c’est en nos jours que l’on voit éclaircies,&lt;br>
Du fidèle Apollon les grandes prophéties&lt;br>
Puisqu’enfin dans la France on voit de toutes paris,&lt;br>
Fleurir le règne heureux des vertus et des arts.&lt;br>
Tu sais ce qu’on attend de ces rares génies&lt;br>
Qui, pour connaitre tout, ont leurs clartés unies&lt;br>
Et pourquoi désormais la nature et les cieux,&lt;br>
N’ont rien d’impénétrable à leur œil curieux&lt;br>
De combien d’Amphions les savantes merveilles,&lt;br>
De combien d’Arions les chansons non pareilles.&lt;br>
Nous ravissent l’esprit par leurs aimables vers,&lt;/p>
&lt;p>Et nous charment l’oreille au doux son de leurs airs!&lt;br>
Mais il suffit de voir ce que ta main nous donne,&lt;br>
Ces chefs-d’œuvre de l’art, dont l’art même s’étonne,&lt;br>
Et ce qu’eu mille endroits, dans les grands ateliers,&lt;br>
Travaille, sous tes yeux, la main des ouvriers.&lt;/p>
&lt;p>C’est là que la peinture, avec l’or et la soie,&lt;br>
Des grands évènements tous les charmes déploie,&lt;br>
Et que la docte aiguille, avec tant d’agrément,&lt;br>
Trace l’heureux succès de chaque évènement.&lt;/p>
&lt;p>Là, d’un art sans égal, se remarque dépeinte,&lt;br>
Du monarque des lys la ferveur humble et sainte,&lt;br>
Lorsqu’il reçoit les dons du baume précieux,&lt;br>
Qu’autrefois à la France envoyèrent les cieux.&lt;/p>
&lt;p>Là, les yeux sont charmés de l’auguste présence&lt;br>
De deux princes rivaux qui jurent alliance,&lt;br>
Et devenus amis, mettent fin aux combats&lt;br>
Qui depuis trente étés désolaient leurs états.&lt;br>
Louis, le cœur touché d’une solide gloire,&lt;br>
Et vainqueur des appas qu’étalait la victoire,&lt;br>
Préfère, sans regret, le repos des sujets&lt;br>
Au bonheur assuré de ses vaillants projets.&lt;br>
Ici brille l’éclat de l’heureuse journée,&lt;br>
Où le sacré lien d’un illustre hyménée,&lt;br>
Parmi les vœux ardents des peuples réjouis,&lt;br>
Joint le cœur de Thérèse à celui de Louis.&lt;/p>
&lt;p>Là se voit l’heureux jour, favorable à la France,&lt;br>
Qui donne tous les biens qu’enferme l’espérance,&lt;br>
Faisant naitre un dauphin, en qui le ciel a mis&lt;br>
De quoi remplir le sort à la France promis.&lt;/p>
&lt;p>Sur un autre tableau s’aperçoit figurée&lt;br>
Dunkerque, qui, des mains de l’Anglais retirée,&lt;br>
Ouvre ses larges murs et le fond de son cœur&lt;/p>
&lt;p>À Louis, son monarque et son libérateur&lt;br>
Ensuite on aperçoit la nation fidèle,&lt;br>
Qui, pleine de respect, de chaleur et de zèle,&lt;br>
Vient à ce grand héros d’elle-même s’offrir,&lt;br>
Et, sous ses étendards, veut ou vaincre ou mourir.&lt;/p>
&lt;p>Ici le fier Marsal, au seul éclair du foudre,&lt;br>
Se rend avant le coup qui l’eût réduit en poudre&lt;br>
Et du courroux du prince évitant le malheur,&lt;br>
Éprouve sa clémence au lieu de sa valeur.&lt;/p>
&lt;p>Ici, devant les yeux de l’Europe assemblée,&lt;br>
L’Espagne reconnait que, de fureur troublée,&lt;br>
Elle a, près la Tamise, épanché notre sang,&lt;br>
Et nous cède à jamais l’honneur du premier rang.&lt;br>
Au front de son ministre on voit la honte empreinte,&lt;br>
Sur ceux des étrangers la surprise et la crainte&lt;br>
Dans les yeux des Français brille l’aise du cœur,&lt;br>
Et dans ceux de Louis l’héroïque grandeur.&lt;/p>
&lt;p>Ici, pour expier une pareille offense,&lt;br>
Rome vient de Louis implorer la clémence,&lt;br>
Promet d’en élever d’éternels monuments,&lt;br>
El le désarme ainsi de ses ressentiments.&lt;/p>
&lt;p>Là le Rab étonné, voit son onde rougie&lt;br>
De l’infidèle sang des peuples de Phrygie,&lt;br>
Que le bras des Français, par cent vaillants efforts,&lt;br>
Au salut de l’empire a versé sur ses bords.&lt;/p>
&lt;p>Mais, Le Brun, désormais il faut que tu t’apprêtes&lt;/p>
&lt;p>À donner à nos yeux ces fameuses conquêtes,&lt;br>
Où le prince lui-même, au milieu des combats,&lt;br>
De son illustre exemple animait les soldats&lt;br>
Où, pareil aux torrents qui, tombant des montagnes,&lt;br>
Entrainent avec eux les moissons des campagnes,&lt;br>
Il a, d’un prompt effort, fièrement renversé&lt;br>
Tous les murs ennemis où son cours a passé.&lt;br>
De tant de grands sujets un amas se présente,&lt;br>
Capable d’épuiser la main la plus savante,&lt;br>
Que sans doute étonné de ce nombre d’exploits,&lt;br>
Ta peine la plus grande est d’en faire le choix.&lt;/p>
&lt;p>Mais garde d’oublier, quand d’un pas intrépide&lt;br>
On le vit affronter la tranchée homicide,&lt;br>
Qui, surprise, trembla d’un si hardi dessein,&lt;br>
Au moment périlleux qu’il entra dans son sein.&lt;br>
C’est là qu’avec grand soin, il faut qu’en son visage&lt;br>
Tu traces vivement l’ardeur de son courage,&lt;br>
Qui, dans l’âpre danger, ayant porté ses pas,&lt;br>
Le fasse reconnaitre au milieu des soldats&lt;br>
Fais-nous voir quand Douai, succombant sous ses armes,&lt;br>
Thérèse y répandit la douceur de ses charmes,&lt;br>
Et de ses seuls regards fit naitre mille fleurs,&lt;br>
Où naguère coulaient et le sang et les pleurs&lt;br>
Quand Lille, se voyant presque réduite en cendre&lt;br>
Par le feu des assauts, qui la force à se rendre,&lt;br>
Elle ouvre à son vainqueur ses murs et ses remparts,&lt;br>
Où gronde et fume encor le fier courroux de Mars&lt;br>
En ce prince elle voit tant de vertus paraitre,&lt;br>
Qu’elle bénit le ciel de lui donner un maitre,&lt;br>
Qu’au prix de plus de sang elle aurait dû vouloir,&lt;br>
Qu’elle n’en a versé pour ne le pas avoir.&lt;/p>
&lt;p>Surtout que ta main prenne un pinceau de lumière&lt;br>
Pour tracer dignement sa victoire dernière,&lt;br>
Où, le cœur averti par la secrète voix&lt;br>
De cet ange qui veille au bonheur des Français,&lt;br>
Il quitta tout à coup sa conquête nouvelle,&lt;br>
Et courant sans relâche où la gloire l’appelle,&lt;br>
II suit les ennemis qui chargeaient nos soldais,&lt;br>
Lassés et dépourvus du secours de son bras.&lt;/p>
&lt;p>La terreur de son nom, qui devance ses armes,&lt;br>
Épandit dans les rangs de si vives alarmes,&lt;br>
Qu’arrivant sur les lieux, il trouva nos guerriers&lt;br>
Qui tous, à pleines mains, moissonnaient des lauriers.&lt;br>
Ces lions, à sa vue, animant leur courage,&lt;br>
Firent des ennemis un si cruel carnage,&lt;br>
Qu’il connut que son nom, prévenant son grand cœur,&lt;br>
Dérobait à son bras le titre de vainqueur,&lt;br>
Et qu’enfin la victoire attendait toute prête&lt;br>
Qu’il parût à ses yeux pour couronner sa tête.&lt;br>
Ainsi, quand au matin, les ombres de la nuit&lt;br>
Combattent les rayons du premier jour qui luit,&lt;br>
À peine, en arrivant, la belle avant-courrière&lt;br>
Annonce le retour du dieu de la lumière,&lt;br>
Qu’on voit de toutes parts les ombres trébucher,&lt;br>
Où, derrière les monts, s’enfuir et se cacher.&lt;/p>
&lt;p>Cependant, cher Le Brun, sais-tu que cette gloire&lt;br>
Dont tu le vois paré des mains de la victoire,&lt;br>
Qui ternit la splendeur des autres demi-dieux,&lt;br>
Qui, de son vif éclat, éblouit tous les yeux,&lt;br>
Et fait qu’en le voyant l’âme presque l’adore&lt;br>
Sais-tu que cet éclat n’est encor que l’aurore&lt;/p>
&lt;p>Et le rayon naissant des beaux et des grands jours&lt;br>
Qu’il fera sur la terre au plus haut de son cours.&lt;br>
Oui, du dieu que je sers, les plus sacrés augures,&lt;br>
Par qui l’âme entrevoit dans les choses futures,&lt;br>
Et les divins accords de nos saintes chansons,&lt;br>
Ne sont qu’un vain mensonge et d’inutiles sons&lt;br>
Oui, nous allons entrer dans un siècle de gloire,&lt;br>
Oui couvrira de honte et la fable et l’histoire,&lt;br>
Qui, fameux et fertile en mille exploits divers,&lt;br>
Portera sa lumière au bout de l’univers.&lt;/p>
&lt;p>Que je vois de combats et de grandes journées,&lt;br>
De remparts abattus, de batailles gagnées,&lt;br>
De triomphes fameux, et de faits tout nouveaux&lt;br>
Qui doivent exercer tes glorieux pinceaux!&lt;br>
Alors, sans remonter au siècle d’Alexandre,&lt;br>
Pour donner à ta main l’essor qu’elle aime à prendre,&lt;br>
Dans le noble appareil des grands évènements,&lt;br>
Dans la diversité d’armes, de vêtements,&lt;br>
De pays, d’animaux, et de peuples étranges,&lt;br>
Les exploits de Louis, sans qu’en rien tu les changes,&lt;br>
Et tels que je les vois par le sort arrêtés,&lt;br>
Fourniront plus encor d’étonnantes beautés&lt;br>
Soit qu’il faille étaler sa guerrière puissance&lt;br>
Près des murs de Memphis, de Suze et de Byzance&lt;br>
Soit qu’il faille tracer ses triomphes pompeux,&lt;br>
Où suivent enchainés des tyrans orgueilleux,&lt;br>
Qui, sur leur triste front, auront l’image empreinte&lt;br>
D’une sombre fierté qui fléchit sous la crainte,&lt;br>
Et dont l’affreux regard, de douleur abattu,&lt;br>
Du glorieux vainqueur publiera la vertu&lt;br>
Où les ours, les lions, les tigres, les panthères,&lt;/p>
&lt;p>Redoutable ornement des terres étrangères,&lt;br>
Les riches vases d’or et les meubles exquis,&lt;br>
Marqueront les climats des royaumes conquis.&lt;/p>
&lt;p>Voilà les grands travaux que le ciel te prépare,&lt;br>
Qui seront de nos jours l’ornement le plus rare,&lt;br>
Et des siècles futurs le trésor précieux&lt;br>
Puisqu’on sait que le temps, peintre judicieux,&lt;br>
Qui des maitres communs les tableaux décolore,&lt;br>
Rendra les tiens plus beaux et plus charmants encore,&lt;br>
Lorsque de son pinceau secondant ton dessin,&lt;br>
Il aura, sur leurs traits, mis la dernière main.&lt;br>
Ce fut ce qu’autrefois un sage et savant maitre&lt;br>
Aux peintres de son temps sut bien faire connaitre.&lt;br>
Il sut, par son adresse, en convaincre leurs yeux,&lt;br>
Et leur en fît ainsi l’emblème ingénieux.&lt;br>
Il peignit un vieillard dont la barbe chenue&lt;br>
Tombait à flots épais sur sa poitrine nue&lt;br>
D’un sable diligent son front était chargé,&lt;br>
Et d’ailes de vautour tout son dos ombragé&lt;br>
Près de lui se voyait une faux argentée,&lt;br>
Qui faisait peur à voir, mais qu’il avait quittée&lt;br>
Pour prendre, ainsi qu’un maitre ébauchant un tableau,&lt;br>
D’une main une éponge, et de l’autre un pinceau.&lt;br>
Les chefs-d’œuvre fameux, dont la Grèce se vante,&lt;br>
Les tableaux de Zeuxis, d’Apelle, et de Timante,&lt;br>
D’autres maitres encor des siècles plus âgés,&lt;br>
Étaient, avec honneur, à sa droite rangés&lt;br>
À sa gauche gisaient, honteux et méprisables,&lt;br>
Des peintres ignorants les tableaux innombrables,&lt;br>
Ouvrages sans esprit, sans vie et sans appas,&lt;br>
Et qui blessaient la vue, ou ne la touchaient pas.&lt;/p>
&lt;p>Sur les uns le vieillard, à qui tout est possible,&lt;br>
Passait de son pinceau la trace imperceptible,&lt;br>
D’une couche légère allait les brunissant,&lt;br>
Y marquait des beautés, même en les effaçant&lt;br>
Et d’un noir sans égal fortifiant les ombres,&lt;br>
Les rendaient plus charmants en les rendant plus sombres,&lt;br>
Leur donnait ce teint brun qui les fait respecter,&lt;br>
Et qu’un pinceau mortel ne saurait imiter.&lt;br>
Sur les autres tableaux, d’un mépris incroyable,&lt;br>
Il passait, sans les voir, l’éponge impitoyable&lt;br>
Et loin de les garder aux siècles à venir,&lt;br>
Il en effaçait tout jusques au souvenir.&lt;/p>
&lt;p>Mais, Le Brun, si le temps, dans la suite des âges,&lt;br>
Loin de les effacer embellit tes ouvrages,&lt;br>
Et si ton art t’élève au comble de l’honneur,&lt;br>
Sache que de Louis t’est venu ce bonheur&lt;br>
Quand le ciel veut donner un héros à la terre,&lt;br>
Aimable dans la paix, terrible dans la guerre,&lt;br>
Dont le nom soit fameux dans la suite des ans,&lt;br>
Il fait naitre avec lui des hommes excellents,&lt;br>
Qui sont, par leurs vertus, leur courage et leur zèle,&lt;br>
Les dignes instruments de sa gloire immortelle&lt;br>
Et qui, pour son amour, l’un de l’autre rivaux?&lt;br>
Se suivent à l’envi dans ses rudes travaux&lt;br>
De là nous sont donnés ces vaillants capitaines,&lt;br>
Qui, semant la terreur dans les belgiques plaines,&lt;br>
Et courant aux dangers sur les pas de Louis,&lt;br>
Secondent de leurs bras ses exploits inouïs&lt;br>
De là viennent encore, et prennent leur naissance,&lt;br>
Ces Nestors de nos jours, dont la rare prudente&lt;br>
Travaillant sous le prince au bien de ses sujets,&lt;/p>
&lt;p>Exécute avec soin ses glorieux projets.&lt;br>
De là nous est donné cet homme infatigable,&lt;br>
Cet homme, d’un labeur à jamais incroyable,&lt;br>
Qui sans peine remplit les emplois les plus hauts,&lt;br>
Qui sans peine descend jusqu’aux moindres travaux&lt;br>
Qui, l’esprit éclairé d’une lumière pure,&lt;br>
Voit tout, agit partout, semblable à la nature,&lt;br>
Dont l’âme, répandue en ce vaste univers,&lt;br>
Opère dans les cieux, sur la terre et les mers&lt;br>
Où parait sa sagesse en merveilles fertile&lt;br>
Et dans le même temps, sur le moindre reptile,&lt;br>
Fait voir tant de travail, que nos regards surpris&lt;br>
Ne peuvent concevoir les soins qu’elle en a pris.&lt;br>
Mais le ciel, non content que, du héros qu’il donne,&lt;br>
Par mille grands exploits la vertu se couronne,&lt;br>
Produit, en même temps, par ses féconds regards,&lt;br>
Des hommes merveilleux dans tous les plus beaux arts,&lt;br>
Afin qu’en cent façons ils célèbrent sa gloire,&lt;br>
Et que de ses hauts faits, conservant la mémoire,&lt;br>
Des vertus du héros la brillante clarté,&lt;br>
Serve encor de lumière à la postérité.&lt;br>
De là nous sont venus tant de doctes Orphées,&lt;br>
Qui chantent de Louis les glorieux trophées&lt;br>
Apollon, de ses feux, anime leurs efforts,&lt;br>
Et leur inspire à tous ces merveilleux accords.&lt;br>
De là vient que le ciel, au gré de la nature,&lt;br>
A voulu qu’en nos jours sa charmante peinture&lt;br>
T’ait mis au premier rang de tous les favoris&lt;br>
Que dans le cours des ans elle a le plus chéris,&lt;br>
T’ait donné de son art la science profonde,&lt;br>
Ait caché dans ton sein cette source féconde&lt;br>
De traits ingénieux, de nobles fictions,&lt;/p>
&lt;p>Et le fond infini de ses inventions.&lt;br>
Ainsi donc qu’à jamais ta main laborieuse&lt;br>
Poursuive de Louis l’histoire glorieuse,&lt;br>
Sans qu’un autre labeur, ni de moindres tableaux&lt;br>
Profanent désormais tes illustres pinceaux&lt;br>
Songe que tu lui dois tes traits inimitables,&lt;br>
Qu’il y va de sa gloire, et qu’enfin tes semblables&lt;br>
Appartiennent au prince, et lui sont réservés&lt;br>
Ainsi que les trésors sur ses terres trouvés.&lt;br>
Et vous, peintres savants, heureux dépositaires&lt;br>
Des secrets de la nymphe et de ses saints mystères,&lt;br>
Dont, par votre discours et les traits de vos mains,&lt;br>
Se répand la lumière au reste des humains&lt;br>
D’hommes tous excellents, sage et docte assemblée,&lt;br>
Qui les bontés du prince ont de grâces comblée&lt;br>
De ce roi sans égal vous savez les hauts faits,&lt;br>
Vous voyez devant vous ses superbes palais&lt;br>
Allez, et que partout vos pinceaux se répandent,&lt;br>
Pour donner à ces lieux les beautés qu’ils demandent&lt;br>
Que là, votre savoir, par mille inventions,&lt;br>
Parle de ses vertus et de ses actions&lt;br>
Montrez que de votre art la science est divine,&lt;br>
Et qu’il tire des cieux sa première origine.&lt;br>
Quelques profanes voix ont dit que le hasard&lt;br>
Aux premiers des mortels enseigna ce bel art,&lt;br>
Et que quelques couleurs, bizarrement placées,&lt;br>
Leur en ont inspiré les premières pensées&lt;br>
Mais qu’ifs sachent qu’Amour, le plus puissant des dieux,&lt;br>
Le premier aux humains fit ce don précieux&lt;br>
Qu’à sa main libérale en appartient la gloire,&lt;/p>
&lt;p>Et pour n’en plus douter, qu’ils en sachent l’histoire.&lt;/p>
&lt;p>Dans l’ile de Paphos fut un jeune étranger,&lt;br>
Qui vivait inconnu, sous l’habit d’un berger&lt;br>
La nature avec joie, et d’un soin favorable,&lt;br>
Amassant en lui seul tout ce qui rend aimable,&lt;br>
Avec tant d’agrément avait su le former,&lt;br>
Que ce fut même chose et le voir et l’aimer.&lt;br>
Des eaux et des forêts les nymphes les plus fières,&lt;br>
Sans attendre ses vœux, parlèrent les premières&lt;br>
Mais son cœur, insensible à leurs tendres désirs,&lt;br>
Loin de les écouter, méprisa leurs soupirs.&lt;/p>
&lt;p>Entre mille beautés, qui rendirent les armes,&lt;br>
Une jeune bergère eut pour lui mille charmes,&lt;br>
El de ses doux appas lui captivant le cœur,&lt;br>
Eut l’extrême plaisir de plaire à son vainqueur&lt;br>
L’aise qu’elle sentit d’aimer et d’être aimée,&lt;br>
Accrut encor l’ardeur de son âme enflammée.&lt;br>
Soit que l’astre des cieux vienne allumer le jour,&lt;br>
Soit que, dans l’Océan, il finisse son tour,&lt;br>
Il la voit, de l’esprit et des yeux attachée&lt;br>
Sur le charmant objet dont son âme est touchée&lt;br>
Et la nuit, quand des cieux elle vient s’emparer,&lt;br>
Sans un mortel effort ne l’en peut séparer.&lt;br>
Pour la seconde fois, la frileuse hirondelle&lt;br>
Annonçait le retour de la saison nouvelle,&lt;br>
Lorsque, de son bonheur le destin envieux&lt;br>
Voulut que son berger s’éloignât de ces lieux.&lt;br>
La nuit qui précéda cette absence cruelle,&lt;br>
Il veut voir sa bergère, et prendre congé d’elle,&lt;br>
Se plaindre des rigueurs de son malheureux sort,&lt;br>
Et de ce dur départ, plus cruel que la mort.&lt;/p>
&lt;p>Elle, pâle, abattue, et de larmes baignée,&lt;br>
Déplore en soupirant sa triste destinée&lt;br>
Et, songeant au plaisir qu’elle goute à le voir,&lt;br>
Ne voit, dans l’avenir, qu’horreur et désespoir.&lt;br>
Amour, qui sais ma flamme et les maux que j’endure,&lt;br>
N’auras-tu point pitié de ma triste aventure?&lt;br>
Je ne demande pas la fin de mon tourment&lt;br>
Mais, hélas! donne-moi quelque soulagement.&lt;br>
Sur l’aile des soupirs sa prière portée,&lt;br>
Du tout-puissant amour ne fut point rejetée.&lt;br>
Sur le mur opposé, la lampe, en ce moment,&lt;br>
Marquait du beau garçon le visage charmant&lt;br>
L’éblouissant rayon de sa vive lumière,&lt;br>
Serrant de toutes parts l’ombre épaisse et grossière&lt;br>
Dans le juste contour d’un trait clair et subtil,&lt;br>
En avait nettement dessiné le profil.&lt;br>
Surprise, elle aperçoit l’image figurée,&lt;br>
Et, se sentant alors par l’amour inspirée,&lt;br>
D’un pinceau, par hasard, sous ses doigts rencontré,&lt;br>
Sa main, qui suit le trait par la lampe montré,&lt;br>
Arrête sur le mur, promptement et sans peine,&lt;br>
Du visage chéri la figure incertaine&lt;br>
L’Amour ingénieux, qui forma ce dessin,&lt;br>
Fut vu, dans ce moment, lui conduisant la main.&lt;/p>
&lt;p>Sur la face du mur marqué de cette trace,&lt;br>
Chacun du beau berger connut l’air et la grâce,&lt;br>
Et l’effet merveilleux de cet évènement&lt;br>
Fut d’un art si divin l’heureux commencement.&lt;br>
Par la nymphe aux cent voix la charmante Peinture,&lt;br>
Instruite du succès d’une telle aventure,&lt;br>
Vint apprendre aux mortels mille secrets nouveaux,&lt;/p>
&lt;p>Et leur montra si bien comment, dans les tableaux,&lt;br>
Les diverses couleurs doivent être arrangées,&lt;br>
Ensuite, au gré du jour, plus ou moins ombragées&lt;br>
Comment il faut toucher les contours et le trait,&lt;br>
Et tout ce qui peut rendre un ouvrage parfait&lt;br>
Qu’enfin l’art est monté, par l’étude et l’exemple,&lt;br>
À ce degré suprême où notre œil le contemple,&lt;br>
Digne de la grandeur du roi que nous servons,&lt;br>
Digne de la splendeur du siècle où nous vivons.&lt;/p></content:encoded></item><item><title>Ich sah in meinem Schlaf ein Bild gleich einem Gott</title><link>https://alexalejandre.com/poetry/german/ich-sah-in-meinem-schlaf/</link><pubDate>Fri, 17 May 1641 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/german/ich-sah-in-meinem-schlaf/</guid><description>&lt;p>Ich sah in meinem Schlaf ein Bild gleich einem Gott,&lt;br>
Auf einen reichen Thron ganz prächtiglich erhaben,&lt;br>
Auf dessen Dienst und Schutz, zugleich aus Lust und Not,&lt;br>
Sich die törichte Leut stets haufenweis begaben.&lt;br>
Ich sah, wie dieses Bild, dem wahren Gott zu Spott,&lt;br>
Empfing - zwar niemal satt - Gelübd, Lob, Opfergaben&lt;br>
Und gab auch wem es wollt das Leben und den Tod&lt;br>
Und pflag sich mit Rach, Straf und Bosheit zu erlaben.&lt;/p></description><content:encoded>&lt;p>Ich sah in meinem Schlaf ein Bild gleich einem Gott,&lt;br>
Auf einen reichen Thron ganz prächtiglich erhaben,&lt;br>
Auf dessen Dienst und Schutz, zugleich aus Lust und Not,&lt;br>
Sich die törichte Leut stets haufenweis begaben.&lt;br>
Ich sah, wie dieses Bild, dem wahren Gott zu Spott,&lt;br>
Empfing - zwar niemal satt - Gelübd, Lob, Opfergaben&lt;br>
Und gab auch wem es wollt das Leben und den Tod&lt;br>
Und pflag sich mit Rach, Straf und Bosheit zu erlaben.&lt;/p>
&lt;p>Und ob der Himmel schon oftmal, des Bilds Undank&lt;br>
Zu strafen, seine Stern versammelte mit Wunder,&lt;br>
So war doch das Bilds Stimm noch lauter dann der Dunder,&lt;br>
Bis endlich, als sein Stolz war in dem höchsten Schwang,&lt;br>
Da schlug ein schneller Blitz das schöne Bild herunder,&lt;br>
Verkehrend seine Pracht in Kot, Würm und Gestank.&lt;/p></content:encoded></item><item><title>Represéntase la brevedad de lo que se vive</title><link>https://alexalejandre.com/poetry/spanish/ah-de-la-vida/</link><pubDate>Sat, 17 May 1603 00:00:00 +0000</pubDate><guid>https://alexalejandre.com/poetry/spanish/ah-de-la-vida/</guid><description>&lt;p>“¡Ah de la vida!&amp;quot; ¿Nadie me responde?&lt;br>
¡Aquí de los antaños que he vivido!&lt;br>
La Fortuna mis tiempos ha mordido;&lt;br>
las Horas mi locura las esconde.&lt;/p></description><content:encoded>&lt;p>“¡Ah de la vida!&amp;quot; ¿Nadie me responde?&lt;br>
¡Aquí de los antaños que he vivido!&lt;br>
La Fortuna mis tiempos ha mordido;&lt;br>
las Horas mi locura las esconde.&lt;/p>
&lt;p>¡Que sin poder saber cómo ni a dónde&lt;br>
la salud y la edad se hayan huido!&lt;br>
Falta la vida, asiste lo vivido,&lt;br>
y no hay calamidad que no me ronde.&lt;/p>
&lt;p>Ayer se fue; mañana no ha llegado;&lt;br>
hoy se está yendo sin parar un punto:&lt;br>
soy un fue, y un será, y un es cansado.&lt;/p>
&lt;p>En el hoy y mañana y ayer, junto&lt;br>
pañales y mortaja, y he quedado&lt;br>
presentes sucesiones de difunto.&lt;/p></content:encoded></item></channel></rss>