Full Width [alt+shift+f] Shortcuts [alt+shift+k]
Sign Up [alt+shift+s] Log In [alt+shift+l]
2
During week 14 of the humanities crash course, I explored foundational myths of Western Culture — written during the Roman Empire when decadence was setting in. I paired them with a classic film about social decadence set in mid-20th century Rome. Readings Gioa’s recommendations were a bit more open-ended this week: books 1 and 2 of the Aeneid, book 1 of Ovid’s Metamorphoses, and “selected Roman poems and aphorisms.” Rather than read a whole book, I sought out some of these latter shorter works online. I also read the most famous section of the Satyricon. The Aeneid is one of the classic epic poems of antiquity. Written by Virgil between 29 and 19 BCE, it aimed to formalize founding myths for the Roman Empire. It’s a sort of sequel to the Iliad and explicitly echoes the Odyssey’s structure. Fortunately, I only had read the first two books: Book 1: As Aeneas sails toward Italy after the events of the Trojan war; the gods conjure a storm that scatters the fleet. Aeneas and his crew are...
yesterday

Improve your reading experience

Logged in users get linked directly to articles resulting in a better reading experience. Please login for free, it takes less than 1 minute.

More from Jorge Arango

Don’t Let the Drawings Distract You: AI is Not About the Output

Last week, I spoke with a business leader who’s excited about AI. But as we talked, it became clear that there’s a wide gulf between enthusiasm and creating value for a particular business. Most people’s impression of AI is based on limited use and media hype. Take the recent Ghibli-fication mania: millions are smitten with the idea of seeing themselves as a Miyazaki character. (I’m one of them!) And it’s understandable: the outputs are impressive. But AI can do more than make beautiful drawings or write compelling essays. As I’ve argued before, these aren’t the best uses for AI. Instead, we should use it to augment our abilities. But how? It’s hard to see beyond the outputs — especially since doing so entails getting more abstract. I’m still thinking about how to explain it, but three ideas are key: Businesses consist of information flows. Information exists to support decisions. Information can be optimized for better decision-making. Let’s unpack them. First, your business consists of information flows. Whatever your business is, it runs on information: how it’s captured, produced, shared, and processed. A proposal? Information. The request behind it? Also information. A standup meeting? An exchange of information. Your business creates value when it uses information effectively. Sure, that’s not the only way it creates value: the things you make and services you provide are key. But information is essential. Why? Because of the second point: information is in service to decision-making. The proposal helps the prospect decide whether to work with you. Research helps you decide whether to enter a new market. The meeting helps determine next steps. Third, information can be optimized. When I say “information,” you may think spreadsheets and databases. But that’s structured information. Most business information — conversations, documents, emails — is unstructured. Consider that meeting. It may have some structure: an agenda, list of attendees, start and end time. But the stuff you care about — what people say — isn’t structured. Even if you transcribe it, you must still think about what it means for you. AI can help tame the messy information flows that make up real work. Efforts to formalize them often kill spontaneity, nuance, and context. And even if they didn’t, there’s so much information that it’s been hard to make sense of it. But now we have AI. Don’t let the charismatic drawings distract you. That’s only a superficial application — and commodifying art is bad for our souls. Instead, focus on using AI for tasks that were previously impossible or impractical: working with vast amounts of unstructured information, playing out what-if scenarios at scale, and augmenting your team’s expertise. Information architects can help. We’ve been mapping information flows and making sense of unstructured information for decades. If you’re exploring how AI could create real business value — not just flashy outputs — let’s talk.

6 days ago 7 votes
Humanities Crash Course Week 13: The Qur’an

This week, I sampled one of the world’s great spiritual texts: the Qur’an. I also read poems by Rumi and saw a movie that led me to question my understanding of both. Readings As with many other people in the West, my understanding of Islam mostly comes from the news — often, in negative light. Also, I was raised Catholic and can’t help but parse these teachings through that tradition. Which is to say, I tried to read objectively, but aware that I’m likely biased. That said, I relished the opportunity to experience this book firsthand. The Qur’an has an interesting structure. Like many other books, it’s divided into chapters (surahs.) But instead of a chronological or topical organization, chapters are roughly sequenced from longest to shortest. (Except the first, which is a short prayer.) Gioia recommended fifteen surahs. As I often do after reading classic texts, I asked ChatGPT for a summary. Here it is verbatim: 1. Al-Fatiha (The Opening): A short prayer for guidance, mercy, and the straight path. Central to every unit of Muslim prayer. 2. Al-Baqara (The Cow): Longest surah; covers law, ethics, worship, community life, and stories of earlier prophets. Establishes Islam’s moral and legal foundations. 3. Al-Imran (The Family of Imran): Addresses Christians and Jews, emphasizes the unity of divine messages, and recounts the stories of Mary and Jesus with warnings against disbelief. 4. An-Nisa (The Women): Focuses on justice, women’s rights, inheritance laws, and proper conduct in war and peace; warns against hypocrisy and betrayal. 5. Al-Ma’ida (The Table Spread): Deals with dietary laws, contracts, and relations with Jews and Christians. Emphasizes loyalty to God’s covenant and the finality of Muhammad’s message. 12. Yusuf (Joseph): A narrative surah telling the story of Joseph in a literary and emotional style. A tale of patience, betrayal, forgiveness, and divine providence. 17. Al-Isra (The Night Journey): Takes its name from Muhammad’s mystical journey to Jerusalem and heaven. Emphasizes the Qur’an’s authority and the consequences of moral choices. 18. Al-Kahf (The Cave): Contains allegorical stories (Sleepers of the Cave, Moses and the Wise Man, Dhul-Qarnayn) about faith, knowledge, and the trials of life. 32. As-Sajda (The Prostration): Stresses the importance of divine revelation and resurrection. Calls for humility and recognition of God’s signs in creation. 36. Ya-Sin: Considered the “heart of the Qur’an”; focuses on God’s power, the resurrection, and human accountability, often recited for the dying. 55. Ar-Rahman (The Most Merciful): A poetic celebration of God’s mercy, creation, and judgment—famous for the refrain: “Which of your Lord’s favors will you deny?” 67. Al-Mulk (The Sovereignty): Reflects on God’s dominion over life and death. Encourages awe and contemplation of the natural world as a sign of divine power. 103. Al-Asr (Time): A short, stark reminder that time is running out—success lies in faith, good works, truth, and patience. 112. Al-Ikhlas (Sincerity): A concise declaration of pure monotheism: God is one, eternal, without equal or offspring. As may be evident here, the Qur’an blends spiritual teachings with social instruction, proposing norms, values, and institutions for a society centered on God. If Christianity’s core message is love, the core here is belief — specifically, belief in one supreme God. All else falls in line behind that idea. Reading Rumi deepened my understanding and appreciation. Through his poems, I perceived signals of what it might be like to live in a world saturated with God: ecstasy at the sight of a flower or the moon’s reflection in a still pond. Still, he reminds us these are only words: This is how it always is A great silence overcomes me, Gioia recommended a selection of Rumi’s poems, but I’ve enjoyed them enough that I’ve decided to read a whole collection. Rather than speedruning through it, I’ll read a bit at a time during my morning journaling sessions throughout the rest of the year. Audiovisual Music: Nusrat Fateh Ali Khan plus music from Tunisia. I was familiar with Ali Khan; his music was everywhere in the 1990s. He’s also one of the performers in the LAST TEMPTATION OF CHRIST soundtracks I highlighted earlier this year. Revisiting his music now gave me a new appreciation; like Rumi, he seems to express the ecstasy of living in a world soaked in divinity. Art: Gioia recommended looking at Islamic architecture. I’ve had the privilege of visiting two of the world’s great Islamic buildings, Hagia Sophia in Istanbul and the Alhambra in Granada. So that’s where my mind went. Hagia Sophia is one of the most impressive spaces I’ve ever been in; it must be experienced firsthand. That said, this NOVA program explains the building’s historical, cultural, and structural significance: This short presentation helped me understand the spiritual significance of sequencing and structure in Islamic religious buildings: The Alhambra is impressive for different reasons. For one thing, it’s not a religious structure. It’s arguably most famous for its beautiful mosaics. This video focuses on the palace’s hydraulic network, one of the world’s great engineering feats: This TEDEd presentation helped me understand the significance of the astonishing geometric decorations in these buildings: Both of these buildings also highlight Islam’s complex relationship with Christianity. Hagia Sophia started as a Christian church before being converted into a mosque, and the Alhambra stands as a reminder that part of Europe was under Islamic rule for a time. Cinema: rather than selecting a movie related to this week’s readings, I chose one I’d wanted to watch for a long time: Hal Ashby’s 1979 satire BEING THERE, starring the great Peter Sellers. By chance, a sheltered, single-minded, TV-obsessed, illiterate gardener named Chance is unwittingly thrust into the highest echelons of economic and political power. Due to his genteel demeanor, his naive utterances are continually misinterpreted as profundities. He remains aloof and uninvolved even as he becomes incredibly powerful. Rather, he becomes powerful because he is aloof and uninvolved. He has no awareness of (or concern for) how his words are interpreted, so he remains cool and neutral. This amplifies his image as a sage, feeding his growing myth. He and his interlocutors live in diverging worlds, reading into each others’ utterances meanings that aren’t there. Reflections Or are they? The movie suggests words don’t have inherent meaning; the meaning is in how we interpret them. Context informs understanding. Lacking an official backstory, people parse Chance through their preconceptions. In the first act, he introduces himself as “Chance the gardener.” But the idea that this seemingly refined gentleman is a mere gardener seems so unlikely that his interlocutor misinterprets his name as the more upper class Chancey Gardiner. And so it remains. When Chance(y) says “I like to watch,” he means something very different than what others hear, leading to particular and often unexpected actions. And it’s actions that ultimately matter. The Talmud puts it succinctly: “We do not see things as they are, we see them as we are.” I think about this whenever I engage with ancient scriptures. These texts were produced by and for very different cultures. The words mean different things to me than they likely meant to their original audiences. It’s not just that they were written in a language I don’t understand: they were written in a world I don’t understand. And yet, they endure. Why? We make the meaning. More precisely: meaning emerges as we parse the text through our particular understandings. And meaning adds value to our lives. What I took from my reading is that Islam positions itself as the culmination of monotheism. Characters, stories, and themes from the Jewish and Christian scriptures are present here too, but with a different focus. Somewhere along the line, Judaism and Christianity softened on the idea that there’s only one God. Islam aims to correct course. The idea of single-mindedly centering your life on something other than yourself is appealing. (Post-Freud, we’d say ego is the enemy.) The concept isn’t unique to Islam, of course. (And again, I’m likely reading into it.) What seems different is the Qur’an’s confident assertion of its message’s universal relevance. I can see how this all-encompassing vision can be seen as incompatible with secular post-modern societies. The Abrahamic traditions are also closely related, which can foster mutual understanding but also intensify disagreement. But I also sense the conflict emerges from literal readings, which we shouldn’t do. Again, these words emerge from — and speak to — different contexts. And I see the transcendent beauty in Rumi’s poems, the patterns of the Alhambra, and Nusrat Fateh Ali Khan’s singing, much as I do in Chartres Cathedral, the Mass in B Minor, and the Divine Comedy. All remind me that words can connect people to higher orders of being and to each other, elevating us all. Does God come in through the words or through what we bring to the words? Does it matter? It does. As Nietzsche warned, once we lose sense of the words’ specialness, we approach them differently — much like Chancey’s friends would hear him differently if they knew he was mere Chance. Some might say truth is what ultimately matters: that Chance is just a gardener who is, in the words of a character who knows, “stuffed with rice pudding between th’ ears. Shortchanged by the Lord, and dumb as a jackass.” But another character who also knows opts to not reveal the “truth” to avoid destroying his dying friend’s comforting illusion. An act of mercy? Delusion? Both? And then there’s the film’s last shot, which I won’t spoil. Let’s just say it casts doubts on whether any of these characters — or us voyeurs in this world of Chance — really knows what is in front of our eyes. Notes on Note-taking I used ChatGPT more extensively this week than at any previous point in the course. I started a ChatGPT project with the following system prompt: You are an expert tutor in literature, history, music, cinema, and more – in short, the humanities. I am in a year-long program to read through (and listen to and watch) the most important humanities works from across the world. You’ll provide summaries, pointers, and advice. Respond concisely but helpfully. Whenever possible, contextualize content by pointing out possible parallels with the modern day. Within this context, I asked ChatGPT to bring perspective to what I was reading — especially some of the most difficult passages and parallels between the other two Abrahamic traditions. I found parts of surah 4 challenging — especially those that address warfare and justice. I asked ChatGPT for a charitable interpretation of the scripture, and the LLM helpfully responded with explanations that helped me understand the text in its broader context. ChatGPT didn’t recommend it, but this video from Bishop Robert Barron also reminded me that the Judeo-Christian scriptures also have similarly difficult passages and that we must interpret them in the context for which they were written: After watching the TEDEd video about geometry in Islamic architecture, I asked ChatGPT, “How does the repetition through tessellation evident in Islamic decoration reflect the religion’s spiritual values?” I’ll quote its answer verbatim, since I found it both insightful and exemplary of the value I’m getting from using AI in this way: Beautiful question—and one that gets at the visual theology of Islam. Islamic decoration, especially through geometric tessellation, is not just ornamental—it’s deeply expressive of spiritual truths. Here’s how repetition, pattern, and abstraction in Islamic art reflect the core values of the faith: ⸻ 1. Unity in Multiplicity (Tawhid) The oneness of God (tawhid) is Islam’s central belief. Repeating geometric patterns express how divine unity underlies all diversity—a single pattern unfolds into infinite forms, just as all creation reflects the One. Spiritual message: Beneath complexity lies a single divine source. ⸻ 2. Infinity and the Transcendent Tessellations can theoretically extend forever—they have no beginning or end. This evokes infinity, a symbol of God’s eternal, boundless nature. The viewer is drawn into a contemplative state by the endless repetition. Spiritual message: God is beyond time, form, and limit. ⸻ 3. Non-figurative, Non-idolatrous Representation Islamic tradition discourages figural imagery in sacred contexts to avoid idolatry. Abstract, geometric art avoids representing God and instead points toward Him by evoking beauty, harmony, and transcendence. Spiritual message: God cannot be pictured—but can be reflected in patterns of perfection. ⸻ 4. Contemplation and Remembrance (Dhikr) Like repeated prayer or names of God, visual repetition becomes a form of remembrance. Islamic art invites stillness, reflection, and mental surrender—a visual dhikr. Spiritual message: Still the ego, contemplate the divine, dissolve into the pattern. ⸻ 5. Mathematics as Sacred Language Islamic artists used advanced geometry and symmetry, often guided by spiritual cosmology. The precision of the art mirrors the divine order in the cosmos, hinting that the universe is intelligible, ordered, and meaningful. Spiritual message: Creation is a sign (ayah) pointing to its Creator. The LLM included a helpful table: Artistic Feature Spiritual Reflection Repetition / Tessellation Unity, infinity, divine order No images of God or people Transcendence, anti-idolatry Symmetry and precision Balance, harmony, divine perfection Infinite extension God’s boundlessness and eternal presence Meditative patterning Encourages contemplation and surrender It concluded: Islamic art, in this sense, functions like visual theology: it doesn’t depict the divine, but invites you to perceive it—not through representation, but through pattern, balance, and beauty. Would you like to see some examples or diagrams that illustrate how these patterns are constructed mathematically or spiritually? I was intrigued by this last question, especially given that OpenAI just released improved ChatGPT image rendering capabilities. So I responded, “Yes, please show me an example diagram that illustrates these principles.” At this point, ChatGPT generated this image: Up Next We’re moving into the second quarter of the course. Gioia recommends books 1 and 2 of the Aeneid, book 1 of Ovid’s Metamorphoses, and a few other Roman poems, aphorisms, and proverbs. So we’re on our way back to Rome! Again, there’s a YouTube playlist for the videos I’m sharing here. I’m also sharing these posts via Substack if you’d like to subscribe and comment. See you next week!

a week ago 11 votes
How AI Is Built Podcast

Nicolay Gerold interviewed me for his How AI is Built podcast. Our conversation focused on information architecture – with an interesting angle: Nicolay’s audience consists primarily of engineers developing AI products. What can these folks learn from IA to create better AI products? Conversely, what can IAs learn from engineers? And does information architecture matter at all in a world where these technologies exist? Tune in to find out: Spotify Apple Podcasts YouTube

a week ago 11 votes
Traction Heroes Ep. 6: Chesterton’s Fence

In Episode 6 of the Traction Heroes podcast, Harry and I explored Chesterton’s fence — a simple yet profound idea that has important implications for leaders navigating complex, high-stakes changes. The gist: when change is needed, don’t start by destroying what you don’t understand. Assume things are the way they are because of reasons. Once you understand the reasons, you’re more likely to avoid unintended consequences when making changes. Here’s the passage I read from Chesterton’s The Thing: In the matter of reforming things, as distinct from deforming them, there is one plain and simple principle; a principle which will probably be called a paradox. There exists in such a case a certain institution or law; let us say for the sake of simplicity, a fence or gate erected across a road. The more modern type of reformer goes gaily up to it and says, “I don’t see the use of this; let us clear it away.” To which the more intelligent type of reformer will do well to answer: “If you don’t see the use of it, I certainly won’t let you clear it away. Go away and think. Then, when you can come back and tell me that you do see the use of it, I may allow you to destroy it.” This paradox rests on the most elementary common sense. The gate or fence did not grow there. It was not set up by somnambulists who built it in their sleep. It is highly improbable that it was put there by escaped lunatics who were for some reason loose in the street. Some person had some reason for thinking it would be a good thing for somebody. And until we know what the reason was, we really cannot judge whether the reason was reasonable. It is extremely probable that we have overlooked some whole aspect of the question, if something set up by human beings like ourselves seems to be entirely meaningless and mysterious. There are reformers who get over this difficulty by assuming that all their fathers were fools; but if that be so, we can only say that folly appears to be a hereditary disease. Catastrophic outcomes happen for many reasons. One of the worst is what Harry called stupidity: “a result of a series of actions that lead to an outcome that’s the opposite of what you say you want, under conditions of self-deception.” Perhaps if more people knew about Chesterton’s fence there would be less suffering caused by stupidity. As always, I learned a lot from bouncing these ideas off Harry. Among other things, he responded with an intriguing followup book. Perhaps that will be the subject of a future episode. Stay tuned for more!

a week ago 9 votes

More in technology

Intel: Winning and Losing

Idling at a Zenith

17 hours ago 3 votes
+ Power users need love too
an hour ago 1 votes
Why we love Luton Airport, and a terrible plan for changing the London Mayoralty

Plus the exciting launch of the Centre for British Progress

8 hours ago 1 votes
MacLynx beta 6: back to the Power Mac

prior articles for more of the history, but MacLynx is a throwback port of the venerable Lynx 2.7.1 to the classic Mac OS last updated in 1997 which I picked up again in 2020. Rather than try to replicate its patches against a more current Lynx which may not even build, I've been improving its interface and Mac integration along with the browser core, incorporating later code and patching the old stuff. However, beta 6 is not a fat binary — the two builds are intentionally separate. One reason is so I can use a later CodeWarrior for better code that didn't have to support 68K, but the main one is to consider different code on Power Macs which may be expensive or infeasible on 68K Macs. The primary use case for this — which may occur as soon as the next beta — is adding a built-in vendored copy of Crypto Ancienne for onboard TLS without a proxy. On all but upper-tier 68040s, setting up the TLS connection takes longer than many servers will wait, but even the lowliest Performa 6100 with a barrel-bottom 60MHz 601 can do so reasonably quickly. The port did not go altogether smoothly. While Olivier Gutknecht's original fat binary worked fine on Power Macs, it took quite a while to get all the pieces reassembled on a later CodeWarrior with a later version of GUSI, the Mac POSIX glue layer which is a critical component (the Power Mac version uses 2.2.3, the 68K version uses 1.8.0). Some functions had changed and others were missing and had to be rewritten with later alternatives. One particularly obnoxious glitch was due to a conflict between the later GUSI's time.h and Apple Universal Interfaces' Time.h (remember, HFS+ is case-insensitive) which could not be solved by changing the search order in the project due to other conflicting headers. The simplest solution was to copy Time.h into the project and name it something else! Even after that, though, basic Mac GUI operations like popping open the URL dialogue would cause it to crash. Can you figure out why? Here's a hint: application: your application itself was almost certainly fully native. However, a certain amount of the Toolbox and the Mac OS retained 68K code, even in the days of Classic under Mac OS X, and your PowerPC application would invariably hit one of these routines eventually. The component responsible for switching between ISAs is the Mixed Mode Manager, which is tightly integrated with the 68K emulator and bridges the two architectures' different calling conventions, marshalling their parameters (PowerPC in registers, 68K on the stack) and managing return addresses. I'm serious when I say the normal state is to run 68K code: 68K code is necessarily the first-class citizen in Mac OS, even in PowerPC-only versions, because to run 68K apps seamlessly they must be able to call any 68K routine directly. All the traps that 68K apps use must also look like 68K code to them — and PowerPC apps often use those traps, too, because they're fundamental to the operating system. 68K apps can and do call code fragments in either ISA using the Code Fragment Manager (and PowerPC apps are obliged to), but the system must still be able to run non-CFM apps that are unaware of its existence. To jump to native execution thus requires an additional step. Say a 68K app running in emulation calls a function in the Toolbox which used to be 68K, but is now PowerPC. On a 68K MacOS, this is just 68K code. In later versions, this is replaced by a routine descriptor with a special trap meaningful only to the 68K emulator. This descriptor contains the destination calling convention and a pointer to the PowerPC function's transition vector, which has both the starting address of the code fragment and the initial value for the TOC environment register. The MMM converts the parameters to a PowerOpen ABI call according to the specified convention and moves the return address into the PowerPC link register, and upon conclusion converts the result back and unwinds the stack. The same basic idea works for 68K code calling a PowerPC routine. Unfortunately, we forgot to make a descriptor for this and other routines the Toolbox modal dialogue routine expected to call, so the nanokernel remains in 68K mode trying to execute them and makes a big mess. (It's really hard to debug it when this happens, too; the backtrace is usually totally thrashed.) the last time that my idea with MacLynx is to surround the text core with the Mac interface. Lynx keys should still work and it should still act like Lynx, but once you move to a GUI task you should stay in the GUI until that task is completed. In beta 5, I added support for the Standard File package so you get a requester instead of entering a filename, but once you do this you still need to manually select "Save to disk" inside Lynx. That changes in beta 6: :: which in MacOS is treated as the parent folder. Resizing, scrolling and repainting are also improved. The position of the thumb in MacLynx's scrollbar is now implemented using a more complex but yet more dynamic algorithm which should also more properly respond to resize events. A similar change fixes scroll wheels with USB Overdrive. When MacLynx's default window opens, a scrollbar control is artificially added to it. USB Overdrive implements its scrollwheel support by finding the current window's scrollbar, if any, and emulating clicks on its up and down (or left and right) buttons as the wheel is moved. This works fine in MacLynx, at least initially. When the window is resized, however, USB Overdrive seems to lose track of the scrollbar, which causes its scrollwheel functionality to stop working. The solution was to destroy and rebuild the scrollbar after the window takes its new dimensions, like what happens on start up when the window first opens. This little song and dance may also fix other scrollwheel extensions. Always keep in mind that the scrollbar is actually used as a means to send commands to Lynx to change its window on the document; it isn't scrolling, say, a pre-rendered GWorld. This causes the screen to be redrawn quite frequently, and big window sizes tend to chug. You can also outright crash the browser with large window widths: this is difficult to do on a 68K Mac with on-board video where the maximum screen size isn't that large, but on my 1920x1080 G4 I can do so reliably. lynx.cfg a no-op. However, if you are intentionally using another character set and this will break you, please feel free to plead your use case to me and I will consider it. Another bug fixed was an infinite loop that could trigger during UTF-8 conversion of certain text strings. These sorts of bugs are also a big pain to puzzle out because all you can do from CodeWarrior is force a trap with an NMI, leaving the debugger's view of the program counter likely near but probably not at the scene of the foul. Eventually I single-stepped from a point near the actual bug and was able to see what was happening, and it turned out to be a very stupid bug on my part, and that's all I'm going to say about that. SameSite and HttpOnly (irrelevant on Lynx but supported for completeness) attributes are, the next problem was that any cookie with an expiration value — which nowadays is nearly any login cookie — wouldn't stick. The problem turned out to be the difference in how the classic MacOS handles time values. In 32-bit Un*xy things, including Mac OS X, time_t is a signed 32-bit integer with an epoch starting on Thursday, January 1, 1970. In the classic MacOS, time_t is an unsigned 32-bit integer with an epoch starting on Friday, January 1, 1904. (This is also true for timestamps in HFS+ filesystems, even in Mac OS X and modern macOS, but not APFS.) Lynx has a utility function that can convert a ASCII date string into a seconds-past-the-epoch count, but in case you haven't guessed, this function defaults to the Unix epoch. In fact, the version previously in MacLynx only supports the Unix epoch. That means when converted into seconds after the epoch, the cookie expiration value would always appear to be in the past compared to the MacOS time value which, being based on a much earlier epoch, will always be much larger — and thus MacLynx would conclude the cookie was actually expired and politely clear it. I reimplemented this function based on the MacOS epoch, and now login cookies actually let you log in! Unfortunately other cookies like trackers can be set too, and this is why we can't have nice things. Sorry. At least they don't persist between runs of the browser. Even then, though, there's still some additional time fudging because time(NULL) on my Quadra 800 running 8.1 and time(NULL) on my G4 MDD running 9.2.2, despite their clocks being synchronized to the same NTP source down to the second, yielded substantially different values. Both of these calls should go to the operating system and use the standard Mac epoch, and not through GUSI, so GUSI can't be why. For the time being I use a second fudge factor if we get an outlandish result before giving up. I'm still trying to figure out why this is necessary. ogle). This didn't work for PNG images before because it was using the wrong internal MIME type, which is now fixed. (Ignore the MIME types in the debug window because that's actually a problem I noticed with my Internet Config settings, not MacLynx. Fortunately Picture Viewer will content-sniff, so it figures it out.) Finally, there is also miscellaneous better status code and redirect handling (again not a problem with mainline Lynx, just our older fork here), which makes login and browsing sites more streamlined, and you can finally press Shift-Tab to cycle backwards through forms and links. If you want to build MacLynx from source, building beta 6 is largely the same on 68K with the same compiler and prerequisites except that builds are now segregated to their own folders and you will need to put a copy of lynx.cfg in with them (the StuffIt source archive does not have aliases predone for you). For the PowerPC version, you'll need the same set up but substituting CodeWarrior Pro 7.1, and, like CWGUSI, GUSI 2.2.3 should be in the same folder or volume that contains the MacLynx source tree. There are debug and optimized builds for each architecture. Pre-built binaries and source are available from the main MacLynx page. MacLynx, like Lynx, is released under the GNU General Public License v2.

yesterday 3 votes