<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/css/rss.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Software and Tech stories from an Insider - iDiallo.com</title>
		<atom:link href="https://idiallo.com/feed.rss" rel="self" type="application/rss+xml" />
		<image>
			<url>https://cdn.idiallo.com/images/id-self-br.jpg</url>
			<title>Software and Tech stories from an Insider - iDiallo.com</title>
			<link>https://idiallo.com</link>
		</image>
		<description>
			<![CDATA[
		Throughout the years, I have decide to put all my the knowledge I have accumulated in my Blog. Hopefully it will serve others as well as it serves me.
		]]>
		</description>
		<link>https://idiallo.com</link>
		
			<item>
				<title><![CDATA[The Dating App Plot Device ]]></title>
				<link>https://idiallo.com/blog/dating-plot-device</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>I've always been interested in how dating apps work. You really only have two choices if you want to get in the business.</p>			<ol>
<li>Help people find a match, and they will never come back</li>
<li>Make people pay and keep them on the platform as long as possible. </li>
</ol>
<p>Let's pretend for a second that we actually want people to find love. Love is such a weird thing that we don't even know how to define it properly. Ask two people what it means, and you will get five plausible definitions. If you approach it programmatically, then you will likely look into some measurable metrics to match people and then hope that love emerges somehow. </p>
<p>In my quest to find what the ideal dating app would look like, I interviewed a couple of my friends that use those apps. I quickly gave up when I realized that I don't have a clue on how people actually use the apps. The first comment that threw me off was when my single friend told me of an app where she found some pretty good dates.</p>
<p>How can you find some good dates and remain single? And what made them good? The more questions I asked, the less I understood.</p>
<p>I guess I got lucky. I used a dating app for a brief time, and before I knew it I was married. I never got to experience "good dates". I thought when you found one, you were safe to delete the app. I never had to pay for super swipes, and other premium packages. </p>
<p>Anyway, I'm not trying to solve dating anymore but apparently whatever I thought I knew has once again changed. A friend described the experience in a way that I thought was profound. </p>
<p>In these apps:</p>
<blockquote>
<p>Men are looking for a woman who doesn't exist anymore.</p>
<p>Women are looking for a man that never existed.</p>
</blockquote>
<p>This must be peak monetization strategy. Dating apps don't create the perfect match, they pick from the same pool of people that they share with every other dating app. So to make it more appealing, you have to create the appearance of the perfect partner that may only exist in your garden. </p>
<p>Men are asked to look to the past, where women were like their grandmother. She was both strong and soft, in charge and submissive.  A past that they never lived, but looks appealing through their minds' eyes. They were only toddlers when grandma took care of them. Who doesn't love grandma.</p>
<p>Women are looking for a tall rich guy who is both CEO and able to change diapers. He is at the grocery store, but he is also at the gym. He is at work, but is available at a moment's notice. At least that's how he is portrayed on social media. </p>
<div class="image">
   <img src="https://cdn.idiallo.com/images/assets/673/gigalove.jpg" alt="Giga Chad in Love" />
   <p>The Giga family</p>
</div>
<p>Grandma, God rest her soul, has passed away. We don't know who she was and how she became the loving person we knew. Those rich gym CEO guys only exist on instagram. They are a convenient plot device that keeps you swiping and spending.</p>
<p>I don't know if there will ever be a better way to match people, but I think technology has already solved the connection problem. We can connect. But if we want to make those connections any stronger and fit into one of those loose definitions of love, then we have to put the device away and talk to one another.</p>			]]>
				</description>
				<pubDate>Tue, 30 Jun 2026 07:00:00 GMT</pubDate>
				<guid>https://idiallo.com/blog/dating-plot-device</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/673/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
			<item>
				<title><![CDATA[I turned my prologue into a short video ]]></title>
				<link>https://idiallo.com/byte-size/my-prologue-to-short-video</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>It's hard to write a whole book. So for now at least, I've turned the prologue of my book into a short video. I hope you enjoy it. </p>
<div class="art-video"><iframe width="720" height="480" src="https://www.youtube.com/embed/qdiKvgJoFvI"></iframe></div>						]]>
				</description>
				<pubDate>Mon, 29 Jun 2026 02:12:56 GMT</pubDate>
				<guid>https://idiallo.com/byte-size/my-prologue-to-short-video</guid>
											</item>
		
			<item>
				<title><![CDATA[The Laziest Generation ]]></title>
				<link>https://idiallo.com/blog/the-laziest-generation</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>I don't understand why this generation can't afford a home. When my grandfather was 18, he had already saved enough money from his paper route and various odd jobs to buy his first home. By the time my father turned 26, he was already married, had his first child, and was moving into his first home. We lived frugally, and our parents taught us the value of spending wisely.</p>			<p>Today's man-children, at the ripe old age of 40, still cannot afford a home. Yet they have no problem eating out every day, going to the movies, and buying popcorn and avocado toast. Add in subscriptions to ten different services they barely use, and that's money thrown out the window. They don't see the correlation between their spending habits and their inability to buy a home or save money in the first place.</p>
<p>I understand that my grandfather's house only cost $12,000, and my father bought his for $50,000. Mine was much more expensive, I paid $150,000, and that house is now worth a million. I understand that by the time my children are 26, it will probably be worth $10 million. If they start saving now, they'll have a shot. But I can tell they will choose reckless spending over saving, and I simply do not understand this generation.</p>
<p><code>/s</code></p>
<hr />
<p>Last week I found a flyer wedged into my front door from a real estate agent in the neighborhood. On it was a list of homes she had sold, each entry showing a picture of the house and its sale price. The cheapest was $970k. For her, this was a record of her work. "Hire me and I'll sell your house," a calling card of bragging rights. For me, it was a nightmare.</p>
<p>I don't live in an affluent neighborhood, yet somehow all the homes are worth a million dollars. Thirteen years ago, a colleague of mine bought hers in this same neighborhood for around $200k. It was a savvy investment. If she sells now, she'll get at least five times what she paid.</p>
<p>While that price was reasonable at the time, meaning you could dedicate a third of your salary to your mortgage, at a million dollars, you're paying far more. That's between $7,000 and $10,000 per month. Good luck finding a job that pays three times that. To satisfy that requirement, you'd need to earn $250k to $360k a year.</p>
<p>Cutting back on avocado toast or prepping your own meals won't save you nearly enough. If you squint and stretch your imagination, maybe it's possible to afford these homes, not by cutting back, but by finding new sources of income.</p>
<p>But what about the next generation? My kids. When they're in their 20s and 30s, how much will houses cost? If we continue at this pace, the wooden houses in this neighborhood are going to cost at least $10 million each. And we'll call the next generation even lazier. Maybe we'll tell them they're splurging on water bottles. <em>"Back in my day, we drank tap water."</em> Or maybe they're not using Grok enough to come up with a smarter financial strategy.</p>
<p>I don't think this is sustainable. The only way forward may be for everything to collapse first. See you at the homeless camp where we'll all end up.</p>			]]>
				</description>
				<pubDate>Sun, 28 Jun 2026 07:00:00 GMT</pubDate>
				<guid>https://idiallo.com/blog/the-laziest-generation</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/672/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
			<item>
				<title><![CDATA[All Chinese Models Will Be Illegal in 3... 2... 1... ]]></title>
				<link>https://idiallo.com/blog/all-chinese-models-will-be-illegal</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>The Washington Post reported that <a href="https://archive.ph/PCQQl">the US government will decide who can use state-of-the-art LLMs</a>. After the ban of Fable and the limitations coming to ChatGPT 5.6, what's next? My bet is Chinese models.</p>			<p>For all of Anthropic's doomsaying and propping up of their secret model Mythos, several open-weight models have proven capable of similar feats, and at a fraction of the cost. DeepSeek rocked the AI world in December 2024 with their initial release, nearly sending shockwaves through American stock markets.</p>
<p>Last year, I looked into getting a BYD electric car. At the price they were selling for, I figured that even with a 100% tariff slapped on top, it would still be a bargain. Then I discovered that not only is there a steep import tariff, you simply cannot register the car in the United States. The car itself is illegal. According to reviews from people who actually own one, it's a fantastic vehicle that would outcompete most cars on the US market. Because of that, the US simply banned it.</p>
<p>So what does this mean for large language models? If we're now told that state-of-the-art LLMs are too dangerous for the general public, what happens to Chinese models that are equally powerful? People will start flocking to DeepSeek and zAI. The quality matches OpenAI and Anthropic, the models are open-weight, and the cost is dramatically lower. The logical next step, if you're a DC lobbyist on retainer for a San Francisco AI lab, is to ban them.</p>
<p>We don't live in rational times. The only path to an IPO for Anthropic and OpenAI is to kick the ladder out from under everyone else and get Washington to call it "safety policy." Download the models while you still can, because once the regulation drops, owning a local copy of DeepSeek might just make you a dissident.</p>			]]>
				</description>
				<pubDate>Sat, 27 Jun 2026 03:32:38 GMT</pubDate>
				<guid>https://idiallo.com/blog/all-chinese-models-will-be-illegal</guid>
											</item>
		
			<item>
				<title><![CDATA[Everything you say CAN and WILL be used against you ]]></title>
				<link>https://idiallo.com/blog/the-right-to-remain-silent</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>- "If you talk to me, I'll punch you in the face, are you ok with talking with me?"</p>
<p>- "Nods in agreement."</p>
<p>- "Proceeds to punch the man in the face."</p>			<p>That's how I feel whenever I hear the Miranda rights being read. It was designed specifically to scare anyone being read to, into silence. Don't incriminate yourself. If you are like me, guilty of watching those police bodycams videos on youtube, then you know that people proceed to talk right after they are read their rights, as if they heard absolutely nothing.</p>
<p>Those rights exist solely to protect you from the very authority addressing you. They have authority over you, so you need protection to balance the playing field. The perfect way to balance it, is by affording people the right to remain silent and not to be coerced into incriminating yourself.</p>
<p>We can all agree that the Miranda rights are a fundamental power we have and should exercise. The State reads you Miranda rights to limit its own power over you.</p>
<p>So let me rephrase Miranda rights in a way that you will find relevant in this tech focused blog:</p>
<blockquote>
<p>“You have the right to remain silent. Everything you say, do, or generate on this device can and will be used against you… Would you like to create an account?”</p>
</blockquote>
<p>Yet, we agree to these terms constantly. It’s second nature. We sign up to test a new AI or a new service, telling ourselves, "If I don’t like it, I’ll just cancel." We ignore the reality that while it takes one click to sign up, it often requires a fax machine or a physical letter to cancel.</p>
<p>This week, following the "Fable" kerfuffle, Anthropic announced they now support customer identification. You can upload your government-issued ID or passport to verify your identity.</p>
<blockquote>
<p>We are rolling out identity verification for a few use cases, and you might see a verification prompt when accessing certain capabilities, as part of our routine platform integrity checks, or other safety and compliance measures. </p>
</blockquote>
<p>This will eventually be used to determine who is considered an "approved" user. In other words, when you type "Fix this code" into Claude, it will check your verified status before executing, all in the name of compliance. By uploading those documents, you are surrendering control. You are giving up your rights, your identity, just to access a service. If things go wrong, there is no "Miranda warning" for the consumer. Every action on your account is now permanently tethered to your identity.</p>
<p>In the digital world, the corporation reads you the Terms of Service to expand its own power over you. When you agree to Claude's terms, OpenAi’s or any corporation, you are waiving your right to remain silent. And then you are providing them with a searchable database with the most intimate information about yourself, that can and will be used against you.</p>
<div class="image">
  <img src="https://cdn.idiallo.com/images/assets/670/id.jpg" alt="Nothing to hide ID" />
</div>
<p>For example, imagine you upload your Driver’s License to Claude to unlock advanced coding features. Three months later, you ask Claude to review a snippet of open-source code that accidentally contains proprietary company secrets (you didn't realize it). Under Miranda, you could have said, "I refuse to discuss this code." Online, you already discussed it. Your verified identity is now permanently attached to that leak, making you the prime suspect for corporate espionage, even if it was an accident. </p>
<p>Or you make a joke. You ask Claude: "Fix this bug before I throw my laptop out the window, and delete the entire production database." Because you verified your ID, this log is permanently stored. Six months later, your company undergoes a security audit. The audit team subpoenas your AI logs. They see a verified user (you) threatening to delete a database. You now face a disciplinary board for "security threats," and the AI log is treated as a written confession, because you gave up your right to contextual defense when you agreed to permanent, verbatim logging.</p>
<p>Even worse, when all your data is logged and attached to your identity, it can later be cross referenced against laws that don’t exist yet. You are an aspiring writer but you just weren’t gifted with words. So you use Fable to write a short story. You verified your ID of course then you prompted a story about a rogue AI overthrowing the government. </p>
<p>A few years later, an Anti-Terrorism AI Monitoring directive was passed under the leadership of  new secretary of war Alex Karp. Your sci-fi hobby is retroactively flagged, and you are put on a watchlist.</p>
<hr />
<p>When you are read Miranda rights, the officer is saying: "You have a right to a lawyer, and if you cannot afford one, one will be provided." The State bears the burden of providing you protection.</p>
<p>In the digital ToS, the corporation is saying: "We have a right to audit you, and if you cannot afford to fight us in court, too bad."</p>
<p>You are giving up the presumption of innocence. In a physical court, your silence cannot be used against you. In a digital audit, your silence doesn't exist. Every click is a spoken word. By uploading your ID, you are giving the corporation a signed affidavit that you are the one pressing the buttons. If a hacker steals your account, you still bear the burden of proof to clear your name, because the logs show your verified ID.</p>
<p>ToS exists only to protect a corporation. Remember, Disney tried to use their Disney+ ToS to dodge a wrongful deaf case from food poisoning in one of their restaurants. </p>
<p>The user is giving up the right to be forgotten, the right to be misinterpreted favorably, and the right to change their mind. They are trading their 5th Amendment-equivalent (protection from self-incrimination) for a free API call. The only way to win is to treat every prompt as if you are testifying under oath in a courtroom, because legally, thanks to that uploaded passport, you are.</p>			]]>
				</description>
				<pubDate>Mon, 22 Jun 2026 07:00:00 GMT</pubDate>
				<guid>https://idiallo.com/blog/the-right-to-remain-silent</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/670/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
			<item>
				<title><![CDATA[Happy Father's Day. ]]></title>
				<link>https://idiallo.com/byte-size/happy-fathers-day-2026</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>I am a father of twin boys. There is a question I often think about. It often appears as a midlife crisis where I am not sure when I became a man responsible for a family. </p>
<p>It looked so easy for my father. It was as if he was born into it. He was a leader, a strong man, one that an entire community could rely on. When does that kick in for me? When do I become this leader? Or have I already become?</p>
<p>That's what I was thinking when I wrote this short story about my father 10 years ago. I couldn't find a way to describe him, without mentioning clocks. It was fitting since he loved them so much. </p>
<p>I hope you enjoy this <a href="https://idiallo.com/books/oclock">"Ode to my Father"</a>. Happy Father's day to you all. </p>
<p><strong>PS:</strong> please excuse the AI generated images, I'm still trying to find the best way to present it. The text was entirely written by me in 2016-2017. </p>						]]>
				</description>
				<pubDate>Mon, 22 Jun 2026 02:43:33 GMT</pubDate>
				<guid>https://idiallo.com/byte-size/happy-fathers-day-2026</guid>
											</item>
		
			<item>
				<title><![CDATA[I know Kung-fu ]]></title>
				<link>https://idiallo.com/blog/i-know-kung-fu</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>Remember that scene in the Matrix where Neo is strapped into the chair and Link uploads all sorts of martial arts into his mind? When Neo wakes up, he says "I know Kung-fu," then proceeds to demonstrate his skill in a battle with Morpheus. That was a pretty amazing scene. But if you suspend your disbelief for a second, it also suggests that when you have all the information at your fingertips, knowledge is just a matter of uploading it into your mind.</p>			<p>The directors of the movie conveniently skip the scene where we actually see him acquiring the knowledge. All we see is Link typing on the keyboard and different karate poses appearing on the screen. Is Neo practicing kicks? Is he doing strength training? Is he running up and down a mountain, carrying buckets of water a la Kill Bill? We don't know. So we have to assume that, from his seat, the information is simply being downloaded into his mind.</p>
<p>What if we had this same capability in the real world? What if you had all the information you needed to learn any skill? You don't have to limit it to learning Kung-fu, but you sure can. What if I provided you with a computer, an internet connection, and a subscription to ChatGPT Pro Max Ultra Turbo? If you wanted, you could become a doctor, right? What can a university teach you that ChatGPT can't? In fact, the LLM is more patient than a teacher and can tailor the course to your exact needs and level.</p>
<p>By these metrics, we should all be geniuses by now. We should see people wake up in the morning and say "I know medicine" or "I know quantum computing."</p>
<p>Personally, I'm experiencing the opposite. The better access we have to these tools, the less we seem to know. It's as if acquiring knowledge takes more than just exposure to information. Recently I was building a little game with a 10 by 8 grid. The data was stored in a one-dimensional array, and I wanted to look through it using x, y coordinates. I struggled. I tried not to use AI to write the mapping function, but try as I might, my mind could not come up with the terms "rows and columns." It was embarrassing to watch the AI solve it for me. It's as if, my knowledge degrades over time.</p>
<p>From the outside, though, you can look at the application as a whole and be impressed with the results. But unless I go through the code and build a mental model of the application, I'm not confident enough to modify or debug it. My knowledge is built as I spend more time reading the code, forming the neural paths in my mind that help me understand how the different parts work together. I can do this because I'm a software engineer and I understand software.</p>
<p>But if I decided I wanted to learn Kung-fu, ChatGPT would oblige. It would probably be the perfect teacher. I don't know what I don't know, so any information it gives me would be more than I currently know, because I know nothing. If it were training me to become a doctor, I would feel just the same. But if it were training me to become a software developer, I would question everything it tells me. Why? Because somehow, large language models suddenly start to fall short when it comes to a subject you actually have experience in.</p>
<p>When we're learning something we don't know, we tend to focus on the answers and the definitions. Knowledge is the thing that appears after you let information marinate in your brain for a moment. I've done math in school since I was a child, but I remember the exact moment I figured out <a href="https://idiallo.com/blog/no-pi-in-school">what pi was</a>:</p>
<blockquote>
<p>[...] In my very first electrical engineering class something unusual happened. The professor was talking about sine waves and he drew a straight line between two humps and the line was labeled, as you might have guessed, π. This is not the first time I see this graph or used it for that matter. But all of the sudden, after many years of toiling with this, it clicked. Call it:</p>
<p>"Deus ex machina."</p>
<p>I looked at π as the distance between the two humps. The circle, the small triangle in the first quadrant. I know these, I have memorized them, but today for the first time, I understood what they meant.</p>
<p>So I interrupted the teacher and said, "So pi is half the length of the perimeter of the circle if it was stretched into a straight line?" He didn't know where this came from. He looked at the class for a moment then said, "yes... sure." My classmates looked at me as if I was stupid. I bet most of them still didn't know what I was talking about but had camouflaged their ignorance with an exceptionally confident face. This was a defining moment for me. It was the Rosetta stone to solve the cryptic text file I had been appending to for over two decades.</p>
</blockquote>
<p>This is not to say that an abundance of information is useless. I'd take it over no information any day. But it doesn't accelerate knowledge acquisition. You can try to download all the information into your mind a la Matrix, but unless you spend time understanding it and building a mental model of the subject, you might as well be relying on <a href="https://en.wikipedia.org/wiki/Sleep-learning">hypnopedia</a>.</p>
<p>In the movie, while Neo is strapped to the chair, Link tells Morpheus that he's been at it for "10 hours straight. He is a machine." While 10 hours is a short time, it seems long in the movie world. It tells us that on top of information, time is a necessary ingredient to breed knowledge. We've built the technology that brings information to everyone. For now at least, all we have is our brains to ingest and slowly digest information into knowledge.</p>			]]>
				</description>
				<pubDate>Sat, 20 Jun 2026 03:17:05 GMT</pubDate>
				<guid>https://idiallo.com/blog/i-know-kung-fu</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/669/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
			<item>
				<title><![CDATA[Debugging on Prod ]]></title>
				<link>https://idiallo.com/blog/debugging-on-prod</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>The worst type of bug is one that only happens on prod. And only on prod. If you checked this blog in the past few weeks, you might have encountered a big fat 500 error.</p>			<p>I'd had the same design for 10 years, and I wanted something fresh. But who can redesign without also improving the underlying code? I deleted a whole bunch of things: old templates that were never used, <code>post.new7.old.php</code>, a pile of unused CSS. I just had to.</p>
<p>I deployed a first version and all the pages worked just fine. But then I got cocky. I decided to also improve the underlying code using GitHub Copilot. I was vigilant at first, reviewing every single line of generated code. None of it was complex really, just refactoring functions and the like. But along the way, I got lazy. I let the AI update deprecated functions on its own.</p>
<p>The next time I deployed, the website returned a 500 error. When I checked the logs, nothing came back. No errors. I looked at running processes and noticed several PHP processes pinned at 100%. I reverted the code, but the server was still stuck. I restarted the web server, restarted PHP-FPM, and neither helped. The only thing that worked was restarting the whole machine.</p>
<p>I ran the same code on my own machine and it worked fine. That's when I noticed I was running an older version of PHP on prod: PHP 8.3 vs. PHP 8.4 locally. No problem, I thought, and upgraded prod, which of course failed to fix anything. I waited for nighttime, redeployed the broken code, and debugged line by line until I found that Copilot had gone out of its way to "update" code in the Markdown library I use. If you know anything about Markdown, you know it's complex. This particular change was causing infinite recursion while parsing Markdown. I had no intention of reading through all that code to figure out exactly how it was failing, so I just reverted it.</p>
<p>I redeployed and the problem seemed solved. Then I got an email: "Your website is down," a reader wrote in the middle of the night. While my American readers are asleep, Europeans are up bright and early reading my blog, for some reason (thank you, really).</p>
<p>So debugging live on production was not an option. I reverted to the old code again. But how was the website still failing after I'd fixed the Markdown issue? And worse, it still worked fine locally. Just in case, I upgraded that very old Markdown library to something cooler and more modern: <a href="https://parsedown.org/">Parsedown</a>.</p>
<p>That didn't solve it either. The moment I deployed, the entire website failed, including pages that don't even use Markdown. Now it was personal. How do you debug a website that only fails in prod? I had a few tricks up my sleeve.</p>
<p>First, I wrote a bash script to quickly switch between versions of the website. All it really did was flip a symlink between the "latest" folder and another folder I chose arbitrarily.</p>
<pre><code class="language-bash">&gt; ln -s /path/to/latest/working/version current
&gt; ln -s /path/to/selected/version current</code></pre>
<p>Since I run PHP and every request is short-lived, I could switch to the broken version, debug, then switch back to the working version almost instantly. It's not like I have millions of readers hammering my server.</p>
<p>This method worked, but it was slow, and it exposed internal information to the thousands of RSS readers scouring my website. Between 30,000 and 60,000 RSS reader requests hit the site daily. I couldn't afford to expose debugging code to that much traffic.</p>
<p>So I used a second method: an even better way to debug live on prod without breaking URLs or throwing 500 errors at unsuspecting RSS readers. What if I ran both versions of the site simultaneously? Visit the regular domain and you'd get the latest working version. Visit a custom subdomain and you'd get the broken version.</p>
<p>I achieved this by creating a new Apache configuration pointing to the latest (broken) path. This way, I had all the time in the world to debug the issue right on prod, without interfering with regular traffic.</p>
<p>I eventually found the root cause. It was an orchestrated failure. Locally, I ran PHP directly. On prod, I ran PHP-FPM. Why the difference? Because Apache on prod runs HTTP/2 that requires an SSL connection, which I didn't need locally, and serving PHP over HTTP/2 requires PHP-FPM. PHP-FPM is essentially a process manager for your PHP instances. That explained the difference between the two setups, but not the actual cause of the bug.</p>
<p>The real issue was in my caching mechanism. When a page is served from cache, I set the header:</p>
<pre><code>X-FROM-CACHE: 1</code></pre>
<p>That's just a custom header. When the page isn't from cache, I set the value to <code>0</code>. Here's the code that sets the headers:</p>
<pre><code class="language-php">public function process() {
    foreach ($this-&gt;header as $key =&gt; $value) {
        if (!empty($value)) {
            header("$key: $value");
        } else {
            header("$key");
        }
    }
}</code></pre>
<p>Now, what can go wrong here? When a page isn't served from cache, <code>$value</code> is set to <code>0</code>. You see it now, don't you? <code>0 == empty()</code> evaluates to <code>true</code> in PHP. So whenever a page wasn't served from cache, or the first time a page was hit after a deployment cleared the cache, this code ran instead:</p>
<pre><code class="language-php">header("X-FROM-CACHE");</code></pre>
<p>That's an invalid header. So why did it fail on prod but not locally? Because Apache silently ignores invalid headers, but PHP-FPM doesn't. It throws a 500 error:</p>
<pre><code>malformed header from script 'index.php': Bad header:
Error parsing script headers
AH01075: Error dispatching request to :</code></pre>
<p>Headers need to follow the key-value rules defined in the internet standards (RFC 9110). Removing the condition and always using <code>header("$key: $value")</code> solved the problem.</p>
<hr />
<p>The blog engine runs on multiple machines I own locally. I never had to worry about the setup because both apache and php are tolerant to mistakes. In a talk, Rasmus Lerdorf once said that PHP works better when you don't know what you are doing. The header condition has its uses. For example, if you want to set that a page is 404 you can return:</p>
<pre><code class="language-php">header("HTTP/1.0 404 Not Found");</code></pre>
<p>But I don't use this in my case. While copilot was of some help, it's a reminder that LLM generated code is to be treated with scrutiny. It reinforces my belief that I can never <a href="https://idiallo.com/blog/i-can-never-embrace-llms-to-write-code">truly become a 10x engineer</a>, because the more code I generate the more I have to review. And the more I trust it, the more likely it will bite my behind.</p>			]]>
				</description>
				<pubDate>Tue, 16 Jun 2026 20:18:00 GMT</pubDate>
				<guid>https://idiallo.com/blog/debugging-on-prod</guid>
											</item>
		
			<item>
				<title><![CDATA[I can never fully embrace LLMs for code ]]></title>
				<link>https://idiallo.com/blog/i-can-never-embrace-llms-to-write-code</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>My younger sister graduated with a CompSci degree a few years ago. I've been behind her, motivating her and demystifying the world of programming from the very beginning. There was a piece of advice I repeated everyday, trying to make her understand how to operate. The problem was, she was trying to read and understand every line of code in a function before using it. I thought it was non-sense. Someone, much smarter than us has created that function, it's part of a vetted library, it has been tested already. All you have to do is use it. "After all, you don't need to understand how an internal combustion engine works, yet you feel safe driving your car, don't you?"</p>			<p>Now, I find myself right at that inflection point. When I use an LLM to generate code, whether it is to define a single function or to create a long running job, I find this need to understand it. I cannot commit code that I don't understand. </p>
<p>I posted about how I spent 10 hours reworking what the <a href="https://idiallo.com/blog/it-took-me-10-hours-to-fix-ai-code">AI had created in 12 minutes</a>. I didn't do so because I didn't like the style of the code, or the naming convention. I did it because the code didn't work. As simple as that. Every time I generate code and trust it to be working, it fails. When I use the same generator to fix the issue, it may or may not work. Now I have two problems. </p>
<p>Yet, the world is using Claude, Codex, and what not to write code. They are trusting it like we trust an internal combustion engine, while I'm trying to understand every piece of it before I use it. My need for understanding the code is slowing down any gains from the speed of code generation.</p>
<p>That means, I cannot become a 10x engineer with this tool. I cannot call it like a function that has been vetted by another developer because the code hasn't been written before I call it. I don't know if it is copying Jon Skeet's answer from Stackoverflow, or if it is copying my own low quality post that was deleted by consensus. </p>
<p>I don't know if I should update my metaphor, or if I should just trust the engineering behind it. </p>			]]>
				</description>
				<pubDate>Fri, 12 Jun 2026 12:00:00 GMT</pubDate>
				<guid>https://idiallo.com/blog/i-can-never-embrace-llms-to-write-code</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/667/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
			<item>
				<title><![CDATA[Please, use a link! ]]></title>
				<link>https://idiallo.com/blog/use-a-link-please</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>This is a rant. It didn't start today, but I think I've reached the end of the line. The straw that broke the camel's back, so to say. I used an internal tool for the first time. I logged in and navigated through the web app, making some updates here and there. All was well. But then I made the mistake of wanting to go back to the initial dashboard. I clicked the back button, and instead of returning to the previous page, I saw Chrome's default tab page staring right back at me.</p>			<p>How is it possible? I had navigated through at least a dozen pages, yet one back button click and the web app was completely gone. If you've ever experienced something similar, it's probably because you were using a single-page app. Nothing wrong with single-page apps, of course, but over the years I've concluded that people who only know how to build single-page apps don't know what a link is.</p>
<p>So let's start with examples of what a link isn't.</p>
<pre><code class="language-html">&lt;div onclick="navigate('home')"&gt;Home&lt;/div&gt;</code></pre>
<p>Not a link. It's a div with an <code>onclick</code> event handler. You can style it all you want, but it's not a link.</p>
<pre><code class="language-html">&lt;button onclick="navigate('home')"&gt;Home&lt;/button&gt;</code></pre>
<p>This may be a button, but it is not a link. With the advent of React, this has become so common. Because it's called a button, learners naturally gravitate toward it to link different pages. But there is worse.</p>
<div class="image">
   <a href="https://www.youtube.com/watch?v=6pDH66X3ClA" target="_blank"><img src="https://cdn.idiallo.com/images/assets/666/square-hole.jpg" alt="square hole"/></a>
</div>
<pre><code class="language-html">&lt;a onclick="navigate('home')"&gt;Home&lt;/a&gt;</code></pre>
<p>This almost feels intentional. As if the developer is teasing me. Why would you use an anchor tag but then omit its most important attribute? Here is what a link is supposed to look like:</p>
<pre><code class="language-html">&lt;a href="/home"&gt;Home&lt;/a&gt;</code></pre>
<p>That's it. Simple. You don't have to add any configuration for the browser to support it. You don't even have to style it. All user agents have sensible default styling for the different states of a link: unvisited, visited, and active. It works well with browser history. On desktop, when you hover over it, you get a preview of the destination URL in the bottom-left corner of your screen. On mobile, you can press and hold to get several options on how to open it. You don't even have to worry about accessibility. It just works.</p>
<p>But when a developer is deep in their React app thinking about functionality, they might say, "When you click this button, go to the home page." They will naturally think of <code>onClick</code> as an event. And since it's a single-page app, they're thinking about state, not a page. They might write something like this:</p>
<pre><code class="language-js">import { navigate } from 'somewhere'; 
function Home() {
  return (
    &lt;div style={{ padding: '20px' }}&gt;
      &lt;h1&gt;Home Page&lt;/h1&gt;

      &lt;button onClick={() =&gt; navigate('/about')}&gt;
        Go to About Page
      &lt;/button&gt;
      &lt;div 
        onClick={() =&gt; navigate('/about')} 
        style={{ cursor: 'pointer', marginTop: '10px', color: 'blue' }}
      &gt;
        Click this text to navigate
      &lt;/div&gt;
    &lt;/div&gt;
  );
}
export default Home;</code></pre>
<p>This is already bad enough. But depending on how the <code>navigate</code> function is implemented, it can make or break the entire browser history. In the internal tool I was using, <code>navigate</code> was essentially replacing the current URL with the new one using <code>location.replace()</code>.</p>
<p>You can avoid all of these issues by just using an anchor tag. If you need it to play nicely with your React app, React Router has a <code>Link</code> component.</p>
<pre><code class="language-js">import { Link } from 'react-router-dom';
function Navbar() {
  return (
    &lt;nav&gt;
      &lt;Link to="/home"&gt;Home&lt;/Link&gt;
    &lt;/nav&gt;
  );
}</code></pre>
<p>Please, just use a native link and you won't have to worry about anything else.</p>
<hr />
<p><strong>Honorable mention:</strong> a reader shared this one:</p>
<pre><code class="language-js">&lt;a href="javascript:window.open('/home')"&gt;Home&lt;/a&gt;</code></pre>			]]>
				</description>
				<pubDate>Wed, 10 Jun 2026 20:30:00 GMT</pubDate>
				<guid>https://idiallo.com/blog/use-a-link-please</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/666/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
	</channel>
</rss>