More from Jorge Arango
Week 6 of my humanities crash course included four books from Herodotus’s Histories and Plato’s Symposium. I also listened to gorgeous music from exotic (to me) ports of call, learned about Persian art and architecture, and watched a new documentary about René Girard. Readings For this week’s readings, Gioia contrasted writings about love and war. First up, Plato’s Symposium. Socrates and his buddies gather for a rowdy banquet. They drink lots of wine and take turns giving speeches about love. (Eros.) The most interesting is Aristophanes’s mythological yarn about the origins of the genders. The speeches cover romantic or sexual love, not the kind of brotherly love (agape) found in the Christian scriptures. That’s a later development in our history. Herodotus’s Histories strikes a completely different tone. It details the origins and events of the Greco-Persian Wars of the 5th Century BCE. I’d read this book over two decades ago, and loved it. Per Gioia’s recommendation, I only re-read four books (chapters) this time. Book 1 offers background on the conflict, starting with inter-tribal raids and leading to the rise of the Persian Empire under Cyrus the Great. Book 6 details the early stages of the war. The Persians push into Greece, leading to the battle of Marathon, where Athenians defeat the Persians. In book 7, a huge Persian army under Xerxes’s command builds a bridge over the Hellespont and marches into Europe. Despite superior numbers, they’re held back at Thermopylae, where a small Greek force makes a valiant (if ultimately futile) stand. Book 8 focuses on naval battles. The Persians take Athens, but Greek forces defeat them at the pivotal battle of Salamis. Xerxes decides to return home, deputizing someone else to finish the war for him. The Histories is famous as the first literary work recognizable as history. It isn’t easy reading (there are many unfamiliar names) but Herodotus provides lots of color and what we might call “human” interest – although in this work, it’s often ghoulish. (More on this below.) Audiovisual Gioia recommended several compilations from the Nonesuch Explorer Series. I own one of these on CD, but hadn’t realized they were available in Apple Music. The Bali and Iranian collections are standouts. Discovering these albums in streaming format has already made this Humanities Crash Course worthwhile. They’re that good. Gioia also recommended looking at Persian art and architecture – appropriate given the role of that civilization in the Histories. This video was insightful and entertaining: Cinema: Although it’s not a classic film, I planned to watch Zack Snyder’s 300, which based on the events in the Histories. My son has been nudging me to watch it with him. (He’s already seen it.) Alas, we couldn’t make it happen – so I’m going to wait until we can watch together. Rather than seek out another classic film, I watched the new documentary about René Girard. It’s on YouTube: I haven’t read Girard, but I’ve read about Girard. Since watching the documentary, I bought Things Hidden Since the Beginning of the World, which I plan to read this year. Reflections Girard’s central claim is that much human behavior – particularly conflict – can be explained by our drive to imitate others. Conflict results from two people wanting the same thing. Societies avoid mass destruction by focusing the conflict on a sacrificial scapegoat. These patterns are evident in both the Symposium and the Histories. Alcibiades’s desire for Socrates is explicitly driven by imitation. Conversely, Socrates’s conception of love points away from individual desire toward abstraction. I don’t know enough yet about Girard’s work to offer a deeper analysis. That said, the Histories also seemed filled with Girardian mechanisms. Not only does it explicitly deal with conflict, but actors often resort to murderous scapegoating. Some of these sacrifices are shockingly brutal. I won’t get into details here, but suffice it to say human societies have progressed since Herodotus’s time. And that was my biggest lesson I took from re-visiting this work. One reason for reading the classics is that you can clearly see the arc of the moral universe bending towards justice. People today don’t resolve conflicts by slaughtering others’ innocent family members. For Herodotus, the most horrific murders seem like business as usual. I read this as my people were melting down in social media over the latest political outrage. Yes, much of what is happening today feels unprecedented, but that may be because we have such short memories. I couldn’t help but think, “these people don’t know how good they have it.” Reading books like the Histories brings perspective. And of course, despite all those advances, people today still demonstrate hubris, overconfidence, imperialistic and totalitarian drives, etc. Plus ça change. Notes on Note-taking I expanded my Obsidian note for the Dialogues to include the Symposium. I used the Text Generator plugin to create summaries of the work, which refreshed my memory as I reflected on what I’d read. (I usually take these literature notes a few days after finishing the text, to give it time to simmer in my mind.) I didn’t yet have a note in my vault for the Histories; my previous reading happened before I started taking disciplined notes. I started a new note now, but only focused on the parts I read this time. I may revisit the work in the future and fill out the rest. Taking a page from last week’s experience, I used ChatGPT to help me understand the books of the Histories. Before starting each book, I asked for a succinct summary. I also asked the AI to tell me what to look for and how the work might be relevant to someone reading today. Here’s an example of one such response (with emphasis in the original): Here is a summary of Book 7 of Herodotus’s Histories, often titled “Polymnia.” This book primarily focuses on Xerxes I’s invasion of Greece and the events leading to the famous battles of Thermopylae and Artemisium. I. Xerxes Prepares for Invasion (7.1-55) Darius I dies, and his son Xerxes I ascends the throne. After some hesitation, Xerxes decides to avenge the Persian defeat at Marathon by launching a full-scale invasion of Greece. Xerxes gathers a massive army and navy, with contingents from across the Persian Empire, reflecting the vastness of his domain. A grand engineering project is undertaken to build a canal at Mount Athos and bridges over the Hellespont to facilitate the Persian advance. II. Debate and Motivation for War (7.8-19) Xerxes is influenced by his advisors, particularly Mardonius, who advocates for expansion into Greece. Demaratus, the exiled Spartan king now serving Xerxes, warns him of the Greeks’ determination and fighting spirit, especially that of the Spartans. III. The Persian March to Greece (7.56-137) Herodotus provides detailed descriptions of the Persian army and its preparations, emphasizing its vast size and the logistical challenges it faces. The Persians cross the Hellespont using a pontoon bridge and begin their march through Thrace and Macedonia, forcing local tribes to submit. IV. Greek Preparations and Disunity (7.138-174) The Greek city-states are divided over how to respond to the Persian threat. Athens and Sparta take the lead in organizing a coalition to resist Xerxes. A plan is developed to block the Persian advance at Thermopylae, a narrow mountain pass, and Artemisium, a strategic naval chokepoint. V. The Battle of Thermopylae (7.175-239) King Leonidas of Sparta leads a small force of 300 Spartans and a few thousand allied Greeks to defend Thermopylae. Despite being vastly outnumbered, the Greeks hold off the Persian army for several days, using the narrow terrain to their advantage. Ultimately, the Persians discover a mountain path that allows them to outflank the Greek defenders, thanks to the betrayal of Ephialtes. Leonidas and his men make a heroic last stand, becoming legendary symbols of courage and sacrifice. VI. The Persian Advance After Thermopylae (7.240-end) With Thermopylae secured, the Persian army pushes further into Greece. The book sets the stage for further confrontations, including the pivotal Battle of Salamis, which will be described in Book 8. Key Themes in Book 7 1. Hubris and Fate: Xerxes’s vast ambition and his dismissal of warnings about Greek resilience highlight the theme of hubris (excessive pride) and its eventual consequences. Herodotus hints at the role of fate, suggesting that the Persian invasion is destined to fail despite its overwhelming force. 2. Heroism and Self-Sacrifice: The story of Leonidas and the Spartans at Thermopylae embodies Greek ideals of heroism, honor, and sacrifice for the greater good. This stand becomes a key moment in Greek collective memory and identity. 3. East vs. West: Herodotus emphasizes the contrast between Persian autocracy and Greek freedom, a recurring theme in the Histories. The Persian army’s size and complexity symbolize imperial power, while the Greeks’ smaller, more united force represents their commitment to liberty. 4. Cultural Observations: Herodotus continues his ethnographic approach, providing detailed descriptions of Persian customs, military practices, and engineering feats. What to Look For The Role of Leadership: Compare the leadership styles of Xerxes and Leonidas. How do their choices reflect broader cultural values? The Importance of Geography: Pay attention to how geography shapes the conflict. Thermopylae and Artemisium are strategically chosen to offset Persian numerical superiority. Foreshadowing of Persian Defeat: Notice how Herodotus subtly foreshadows the ultimate failure of the Persian invasion through omens, warnings, and the theme of overreach. This overview should help guide your reading of Book 7. Let me know if you’d like more details on any particular section or theme! Although this was a risky approach (I hadn’t yet read the text so I couldn’t tell whether the AI was hallucinating,) I found the summary insightful. Seeing the outline of the work helped me sift out the signal (main narrative) from the noise (all those confusing names and genealogies.) I’m going to do this with other readings in this course. I also asked ChatGPT about the presence of Girardian concepts in both the Symposium and the Histories. Doing so helped me understand all three better. Again, I’m just getting started with Girard, so I don’t know whether ChatGPT is misleading me. That said, I still found it helpful for thinking about these ideas. Up Next I’m reading the Epic of Gilgamesh and the Dhammapada for next week. Neither was available in Standard Ebooks, so I’ve purchased the Penguin Kindle editions. (I’ve had good success with Penguin ebooks so far in this course.) Check out Gioia’s post for the full syllabus. As a reminder, I’ve started a Substack to share what I’m learning in this course. Head over there if you want to subscribe and comment.
In week 5 of my humanities crash course, I read Aristotle’s Nicomachean Ethics and Poetics. I also listened to more Bach, looked at Italian Baroque sculpture, and watched a classic – if somewhat boring – movie. Getting through it despite the difficulties was part of the point. Readings Let’s start with the Nicomachean Ethics. It’s available as a beautiful free ebook over at Standard Ebooks. That said, I opted for a paid version from Amazon. Why? Because I found the book hard to read. For the first time in this course, I felt like I was being forced to eat my broccoli. Aristotle is brilliant, but he’s also circuitous. The Kindle version I bought included an outline that made it easier. Nicomachean Ethics looks to answer a key question: “What’s the purpose of life?” Aristotle’s answer is happiness, but not in the sense we think of. Most of us associate happiness with pleasure. Aristotle means it in a different sense. He uses the term eudaemonia, which is something like flourishing through living a life of virtue for its own sake. It’s not something inherent in us, but something we work towards because we want to develop our full potential. Aristotle outlines four stages to virtue: Unvirtuousness - rejecting virtue altogether Incontinence - knowing what’s virtuous but failing to do it Continence - doing what’s right despite internal resistence True virtuousness - doing what’s right for its own sake Virtuousness isn’t about thinking or talking about doing good but actually doing good – i.e., adopting virtuous habits. Paraphrasing another famous philosopher, good is as good does. What is “good”? There are no canned answers; we must evaluate situations as they come. Often, the answer lies in the mean between extremes. For example, courage lies somewhere between cowardice and recklessness. Aristotle contrasts other extremes in areas such as generosity and pride. Friendship is central to Aristotle’s conception of happiness. Humans are social animals; our well-being depends on our relations with others. Aristotle provides a taxonomy that ranges from friendships of convenience to those motivated by virtue. These latter are the most valuable and rare. Aristotle’s approach is highly pragmatic. He advocates practical rather than theoretical wisdom. For example, he acknowledges that happiness requires a baseline of material comfort. Self-mortification won’t get you there. The book reminded of the Asian concept of the Middle Way. Like Confucius, Aristotle rejects extremes and encourages wisdom and judgment based on practice rather than theoretical understanding. Practical wisdom is more important than abstract knowledge. On to the Poetics, which is both shorter and easier. It’s an analysis of narrative forms. Aristotle suggests the purpose of art is imitating life. There are various means of doing so; the Poetics focuses on the theater. Aristotle distinguishes three kinds of narratives: Tragedy deals with serious issues and noble characters Comedy deals with common people and everyday situations Epics are longer narratives that deal with heroic subjects The Poetics explores what makes them tick. Aristotle’s advice remains relevant; e.g., the famous “three act” structure comes from his analysis. Audiovisual Music: Bach’s Cello Suites. I’ve heard this work many times; I own Yo-Yo Ma’s 1998 recording, so that’s the version I know best. For this exercise, I checked out a version by Pablo Casals. (I prefer the Ma recording.) Art: sculpture by Gian Lorenzo Bernini. As I’ve mentioned in previous entries, sculpture is hard to appreciate online. That said, I found a video with useful footage of key works: This video says a lot about our times. At first, I was excited: a free hour-long documentary about Bernini’s work! The footage seemed well-done, with professional lighting and lots of close-ups of the work. The film also featured a calm, somber narration with an “erudite” English accent. But there were also signs that this was an amateur effort. Graphics (e.g., titles, photos) and edits looked unprofessional. Halfway through the video, I realized the narrator was an AI and the script taken verbatim from another website. Fooled me! But I did learn about Bernini and saw his sculpture closer than ever. Cinema: as I’ve done in the last two weeks, I asked AI for a movie recommendation. In this case, I asked Perplexity for classic films that reflect Aristotle’s ethics. It suggested four: 3:10 TO YUMA (2007) THE SEVENTH SEAL (1957) MY DINNER WITH ANDRE (1981) THE FOUNTAINHEAD (1949) I’d never heard of 3:10 TO YUMA, but it didn’t fit my criterion for “classic.” I’d read The Fountainhead and seen THE SEVENTH SEAL and neither seemed apt. So I went with MY DINNER WITH ANDRE, which had been on my to-watch list for a long time. I knew the film’s premise: an intimate dinnertime conversation between two semi-fictionalized versions of Wallace Shawn and André Gregory. It turned out to be mostly Gregory talking. This clip gives you a taste: Reflections As with Nicomachean Ethics, I found MY DINNER WITH ANDRE hard to get through. Wikipedia says it’s supposed to be a “comedy-drama,” but it’s neither funny or dramatic. Instead, I found it mostly boring. That said, I see how it illustrates ideas in the book. Both characters are working through the purpose of life. Wally has become complacent, eking out joy from simple pleasures (e.g., not finding cockroaches in his coffee) while André sacrifices intimacy for extreme experiences. Their friendship gives them a way to reflect on their pursuits, but they’re both stuck in self-centered framings that keep them from eudaemonia. Wally might come closest. By film’s end, he’s recaptured some connection with reality. But André seems lost. At one point, he says of other people, They’re living in an insane dreamworld. They’re not looking. That seems very strange to me. I felt the same about his narratives. He traveled great physical and psychic distances looking for fulfillment he could’ve found at home if he could only see clearly. Alas, as with Travis in PARIS: TEXAS, the 1960s counterculture ideology distorted André’s worldview. Pining for extremes, he exchanges reality (e.g., his work in the theater, domestic life with his wife, Bonita) for abstract ideals. Remaking the world from scratch is a fool’s errand; bills eventually come due. At middle age, both Travis and André come up short. Watching this film and reading the Nicomachean Ethics were exercises in flexing Aristotelian continence. I finished both but didn’t enjoy them. Why did I push through? Because this course is a worthwhile endeavor, and that entails sacrifice. It’s to do easier by keeping the broader goal in focus. The point isn’t getting pleasure from every book or movie; it’s becoming the kind of person who acts from practical wisdom. Notes on Note-taking I used AI to understand the Nicomachean Ethics. As I read on my iPad, I swiped between the Kindle and ChatGPT apps. For example, I asked the AI about the relationship between continence and willpower. Among other things, it said that While Aristotle acknowledges the value of continence (self-control), his ultimate goal is to cultivate a state of virtue where desires and reason are harmonized. He argues that this is achieved not through raw willpower but through proper education, practice, and environment. By fostering good habits and practical wisdom, individuals can overcome the internal conflicts that lead to incontinence and live a life of flourishing. This was useful. As with previous weeks, I also looked to YouTube for help in understanding the reading. This conversation was particularly useful: After finishing the books, I created notes for each in my Obsidian vault. But I edited these notes in Emacs using obsidian.el rather than Obsidian. The reason for this is I’m experimenting with gptel, which lets me work with AIs in Emacs. Using gptel, I have a running Claude chat window alongside my notes. I can include particular buffers and files as part of the context that gets sent to the LLM. I can also highlight particular regions and send that. I’m just starting these experiments, but it already seems like a more flexible way of developing texts with LLMs. (Albeit one that requires effort: Emacs isn’t for everybody. Again, continence!) Up Next We’re reading Plato’s Symposium and books 1 and 6-8 of Herodotus’s Histories for next week. I read the Histories a couple of decades ago and loved them, so I’m looking forward to revisiting them. Check out Gioia’s post for the full syllabus. Also, I’ve started a Substack to share what I’m learning in this course. Head over there if you want to subscribe and comment.
Disruptive technologies call for rethinking product design. We must question assumptions about underlying infrastructure and mental models while acknowledging neither change overnight. For example, self-driving cars don’t need steering wheels. Users direct AI-driven vehicles by giving them a destination address. Keyboards and microphones are better controls for this use case than steering wheels and pedals. But people expect cars to have steering wheels and pedals. Without them, they feel a loss of control – especially if they don’t fully trust the new technology. It’s not just control. The entire experience can – and perhaps must — change as a result. In a self-driving car, passengers needn’t all face forward. Freed from road duties, they can focus on work or leisure during the drive. As a result, designers can rethink the cabin experience from scratch. Such changes don’t happen overnight. People are used to having agency. They expect to actively sit behind the wheel with everyone facing forward. It’ll take time for people to cede control and relax. Moreover, current infrastructure is designed around these assumptions. For example, road signs point toward oncoming traffic because that’s where drivers can see them. Roads transited by robots don’t need signals at all. But it’s going to be a while before roads are used exclusively by AI-driven vehicles. Human drivers will share roads with them for some time, and humans need signs. The presence of robots might even call for new signaling. It’s a liminal situation that a) doesn’t yet accommodate the full potential of the new reality while b) trying to accommodate previous ways of being. The result is awkward “neither fish nor fowl” experiments. My favorite example is a late 19th Century product called Horsey Horseless. Patent diagram of Horsey Horseless (1899) via Wikimedia Yes, it’s a vehicle with a wooden horse head grafted on front. When I first saw this abomination (in a presentation by my friend Andrew Hinton,) I assumed it meant to appeal to early adopters who couldn’t let go of the idea of driving behind a horse. But there was a deeper logic here. At the time, cars shared roads with horse-drawn vehicles. Horsey Horseless was meant to keep motorcars from freaking out the horses. Whether it worked or not doesn’t matter. The important thing to note is people were grappling with the implications of the new technology on the product typology given the existing context. We’re in that situation now. Horsey Horseless is a metaphor for an approach to product evolution after the introduction of a disruptive new technology. To wit, designers seek to align the new technology with existing infrastructure and mental models by “grafting a horse.” Consider how many current products are “adding AI” by including a button that opens a chatbox alongside familiar UI. Here’s Gmail: Gmail’s Gemini AI panel. In this case, the email client UI is a sort of horse’s head that lets us use the new technology without disrupting our workflows. It’s a temporary hack. New products will appear that rethink use cases from the new technology’s unique capabilities. Why have a chat panel on an email client when AI can obviate the need for email altogether? Today, email is assumed infrastructure. Other products expect users to have an email address and a client app to access it. That might not always stand. Eventually, such awkward compromises will go away. But it takes time. We’re entering that liminal period now. It’s exciting – even if it produces weird chimeras for a while.
Nikki Anderson interviewed me for her User Research Strategist podcast. Our focus was AI’s impact on research and informaton architecture – and how practitioners can take advantage of this new technology. See the episode page, which includes show notes. If you want to learn more about my experiments in AI, check out this page.
More in technology
When you’re dealing with a particularly large service with a slow deployment pipeline (15-30 minutes), and a rollback delay of up to 10 minutes, you’re going to need feature toggles (some also call them feature flags) to turn those half-an-hour nerve-wrecking major incidents into a small whoopsie-daisy that you can fix in a few seconds. Make a change, gate it behind a feature toggle, release, enable the feature toggle and monitor the impact. If there is an issue, you can immediately roll it back with one HTTP request (or database query 1). If everything looks good, you can remove the usage of the feature toggle from your code and move on with other work. Need to roll out the new feature gradually? Implement the feature toggle as a percentage and increase it as you go. It’s really that simple, and you don’t have to pay 500 USD a month to get similar functionality from a service provider and make critical paths in your application depend on them.2 As my teammate once said, our service is perfectly capable of breaking down on its own. All you really need is one database table containing the keys and values for the feature toggles, and two HTTP endpoints, one to GET the current value of the feature toggle, and one to POST a new value for an existing one. New feature toggles will be introduced using tools like Flyway or Liquibase, and the same method can be used for also deleting them later on. You can also add convenience columns containing timestamps, such as created and modified, to track when these were introduced and when the last change was. However, there are a few considerations to take into account when setting up such a system. Feature toggles implemented as database table rows can work fantastically, but you should also monitor how often these get used. If you implement a feature toggle on a hot path in your service, then you can easily generate thousands of queries per second. A properly set up feature toggles system can sustain it without any issues on any competent database engine, but you should still try to monitor the impact and remove unused feature toggles as soon as possible. For hot code paths (1000+ requests/second) you might be better off implementing feature toggles as application properties. There’s no call to the database and reading a static property is darn fast, but you lose out on the ability to update it while the application is running. Alternatively, you can rely on the same database-based feature toggles system and keep a cached copy in-memory, while also refreshing it from time to time. Toggling won’t be as responsive as it will depend on the cache expiry time, but the reduced load on the database is often worth it. If your service receives contributions from multiple teams, or you have very anxious product managers that fill your backlog faster than you can say “story points”, then it’s a good idea to also introduce expiration dates for your feature toggles, with ample warning time to properly remove them. Using this method, you can make sure that old feature toggles get properly removed as there is no better prioritization reason than a looming major incident. You don’t want them to stick around for years on end, that’s just wasteful and clutters up your codebase. If your feature toggling needs are a bit more complicated, then you may need to invest more time in your DIY solution, or you can use one of the SaaS options if you really want to, just account for the added expense and reliance on yet another third party service. At work, I help manage a business-critical monolith that handles thousands of requests per second during peak hours, and the simple approach has served us very well. All it took was one motivated developer and about a day to implement, document and communicate the solution to our stakeholders. Skip the latter two steps, and you can be done within two hours, tops. letting inexperienced developers touch the production database is a fantastic way to take down your service, and a very expensive way to learn about database locks. ↩︎ I hate to refer to specific Hacker News comments like this, but there’s just something about paying 6000 USD a year for such a service that I just can’t understand. Has the Silicon Valley mindset gone too far? Or are US-based developers just way too expensive, resulting in these types of services sounding reasonable? You can hire a senior developer in Estonia for that amount of money for 2-3 weeks (including all taxes), and they can pop in and implement a feature toggles system in a few hours at most. The response comment with the status page link that’s highlighting multiple outages for LaunchDarkly is the cherry on top. ↩︎
This post is a quick rundown of assembling my new Framework 13 laptop, why I chose this brand and what's next.
I’ve been really enjoying the book Creativity Inc by Ed Catmull of Pixar, it was recommended to me by my colleague Dave Martin a while back and I finally got around to it. There’s an interesting story in it where George Lucas has asked him to develop a film editing system that was digital. While … Continue reading Ed Catmull on Change →
Thomas Ricouard: Is Software Engineering Over as We Know It? Writing code has always been a means to an end, especially in my case, where my goal is to build and ship products to millions of users. What’s really happening is a shift in focus: away from obsessing
If you’re a fan of open-source technology, Gustavo Salvador Reynaga Aguilar is a name to know. An experienced educator with a passion for technology, Gustavo has spent nearly three decades teaching and inspiring students at CECATI 132 in Mexico. He’s worked with platforms like Arduino, Raspberry Pi, and BeagleBone, and is renowned for projects such […] The post Gustavo Reynaga: Inspiring the next generation of makers with MicroPython appeared first on Arduino Blog.