<?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[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>
		
			<item>
				<title><![CDATA[ppclp.ai announces 100x Productivity Gains ]]></title>
				<link>https://idiallo.com/blog/100x-productivity-gain</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>ppclp.ai, North America's third-largest AI-native manufacturer of premium wire-formed office fasteners, formerly known as Paper Clip Company, announced a landmark 100x improvement in its proprietary Organizational Productivity Index (OPI™), cementing what leadership is calling "a new era of operational excellence" and "a little bit of a miracle."</p>			<p>The breakthrough follows an 18-month company-wide initiative called Project Streamline, during which all 340 employees completed mandatory efficiency training, adopted a new Jira-based workflow system powered by Rovo, and attended a two-day offsite in Scottsdale where a consultant named Derek asked everyone to "think about how they think about work."</p>
<blockquote>
<p>"I used to open fourteen browser tabs and just stare at them. Now I open fourteen browser tabs, and AI agents are looking at them for me. I've never felt more in control."<br />
<span style="font-size: 13px; font-style: italic;"> &mdash; Sandra K., Senior Clip Assembly Coordinator, 11 years at ppclp.ai</span></p>
</blockquote>
<p>Central to the transformation is Rovo, Atlassian's AI, which the ppclp.ai Jira Center of Excellence team has deeply integrated into the company's ticket lifecycle. Rovo now autonomously opens tickets when it detects workflow friction, assigns them to the appropriate team, and, in what the Center of Excellence calls "the closed-loop moment", it closes them upon determining that sufficient time has passed. Ticket velocity has increased by 340% as a result.</p>
<p>"Rovo doesn't wait for humans to decide a problem is solved," explained the Head of Delivery Operations, in a blog post titled <strong>We Taught Our Tickets to Heal Themselves.</strong> "It senses resolution. It acts. And then it documents the action in a follow-up ticket, which it also closes."</p>
<p>The OPI™, aggregating over 200 signals including ticket velocity, standup attendance, emoji reaction latency in Slack, and what the methodology document calls "ambient focus energy," now shows a number in the top-right corner of the dashboard that is very large and going up. The dashboard itself, prominently themed in dark mode (naturally), required six months to build and is, by all accounts, extremely beautiful.</p>
<p>"We are incredibly proud of this number," said CEO Bob Realman in a statement prepared by the communications team and reviewed by legal. "It represents the dedication, the hustle, and the genuine passion of every single person at ppclp.ai. And of Rovo, who we consider an honorary team member and who closed 1,400 tickets last Tuesday alone."</p>
<p>When asked by a reporter at the earnings call whether the 100x productivity improvement had resulted in a corresponding increase in paperclip output, CFO Melissa Tran paused, smiled warmly, and said the question "reflected a pre-transformation mindset." She then advanced to the next slide, which was a photo of the team at the Scottsdale offsite.</p>
<blockquote>
<p>"Volume is a very legacy way of thinking about a fastener business. We've moved beyond units. We're measuring what matters: Agentic motion."<br />
<span style="font-size: 13px; font-style: italic;"> &mdash; Bob Realman, current and former CEO, ppclp.ai</span></p>
</blockquote>
<p>The company did acknowledge, in a footnote on page 34 of the supplemental earnings materials, that paperclip production had declined approximately 20% year-over-year. The footnote attributed this to "macroeconomic headwinds, a challenging staple-adjacent market, and notable seasonality in Q2 clip demand," adding that the trend was "well within the range of normal paperclip seasonality" and "expected to self-correct, eventually."</p>
<p>Analysts who requested a definition of "paperclip seasonality" were directed to a separate FAQ document that had not yet been written. A Rovo ticket to write it was opened and closed the same afternoon.</p>
<p>ppclp.ai says it expects the OPI™ to continue improving through the end of the fiscal year. They are already exploring an OPI™ 2.0, an open source model that will incorporate biometric data, walking pace between meetings, and what the roadmap calls a "vibe coefficient." Production guidance was not provided, but the company noted that the dashboard remains, in their words, "extremely actionable," and that Rovo has already opened a ticket about it.</p>
<p>OPI™ was developed in collaboration with <a href="https://getproxyai.com/">Proxy Ai™</a>. ProxyAi, so you don't have to.</p>
<hr />
<p style="font-size: 13px; font-style: italic;">About ppclp.ai: ppclp.ai has manufactured precision wire-formed fasteners since 1987, and rebranded as an AI-native company in 2024. The company serves offices, government agencies, and one very loyal stationery shop in Duluth. ppclp.ai employs 340 humans and Rovo, and is headquartered in a building with a lot of glass. More information is available at a website that is currently being redesigned by an agent.</p>
<hr />
<p style="font-size: 11px; font-style: italic;">Forward-looking statements contained herein involve risks and uncertainties, including but not limited to: continued ambiguity about what productivity means, the possibility that Rovo opens a ticket about this press release and then closes it, and the risk that someone in finance eventually opens a spreadsheet unassisted. OPI™ is a trademark of ppclp.ai. "Seasonality" is used here in the broadest possible sense. Rovo is a product of Atlassian and is referenced here with the full confidence that it would autonomously resolve any objections. Past dashboard performance is not indicative of future paperclip output.</p>			]]>
				</description>
				<pubDate>Mon, 08 Jun 2026 19:50:00 GMT</pubDate>
				<guid>https://idiallo.com/blog/100x-productivity-gain</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/665/hero.svg" type="image/svg+xml" length="102400"/>
							</item>
		
			<item>
				<title><![CDATA[Why all the PRs? ]]></title>
				<link>https://idiallo.com/blog/why-all-the-prs</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>It's a signal. People want better jobs. That's why we get AI-generated PRs. We told everyone, in order to get your resume taken seriously, you need to show your work.</p>			<p>When I was getting started in my career,  that meant having your own website that you contribute to regularly. So I did that. I built websites, I maintained them. I kept maintaining them even after I got the jobs because that's how I actually honed my web programming skills. Where else was I going to try new frameworks, a new JavaScript paradigm, or try out Ruby on rails?</p>
<p>I got the job, and I advised other developers to follow the same path. But then github became mainstream. Rather than just show a finished website, you could actually share the code that runs your project. Share a link to your github project and companies can review your code and directly gauge your experience. But even better, you can show your contribution to open source projects. Not just any projects. Popular projects. The github stars became a metric people look for. A signal that can be used to quickly assign a value to a candidate. </p>
<p>But that’s the story told from the outside. I don’t think the github profile link was ever important, unless it was significantly good. Employees focused on their work rarely have the time to maintain healthy github activity. Their experience comes from their day to day job. So for the most part, not much attention was placed on github links other than skimming through those surface level details.</p>
<p>When stacks of resumes came on my desk, the best candidates stood out because they had work experience. The good candidates had projects that they could link to, github or elsewhere. But then, the worst candidates had long padded resumes that had elements of every job application tips-and-tricks-article. They had a website, but it was built in a day for the purpose of getting a job, with nothing interesting to say. They had github links, but those often pointed to school projects, homework, or boilerplate code. That’s the vast majority of github links I used to get.</p>
<p>People with active and well maintained github profiles were rare. Rare because it actually requires time, effort, and experience. But then we have AI.</p>
<p>There was a golang auth issue that I've contributed to on github. It was already a few years old when I proposed a solution that worked for my case. It wasn't universal so it wasn't accepted. The discussion is revived every couple years, each person bringing one more piece to the puzzle. But then recently, someone exploded the thread with comments. And even created a PR to go with it.</p>
<p>This was from a user that went from a dormant account to 4000 contributions in a year. It was all AI assisted code. This isn’t to comment on the quality of his code, but he was clearly trying to optimize the metric. Looking at his linkedin profile, he doesn’t work in a software engineering role, and it’s hard to decide if he would be a good contributor if hired. If we were to judge his resume by looking at the github profile, it might catch our attention. </p>
<p>But then, there is a problem. There are hundreds, even thousands of people all doing the same thing. They are cranking up their contributions to github projects using AI, so they can have a better chance at getting hired as developers. I understand the job market is <a href="https://idiallo.com/blog/gen-z-job-market">rough right now, especially for gen z</a>, and anything to differentiate yourself is a plus. The problem is this is being done at the expense of open source projects. </p>
<p>The contributors are not submitting PRs to your project because they are personally invested in it. Instead, they are trying to get their name on the contributors list so that they can use it as a signal in their resume. When we are out here debating if there is any merit in AI generated PRs, or if we should just judge the code, we tend to miss that their gesture is completely hollow.</p>
<p>The PR’s author intentions are completely misaligned with the project's maintainers. They are playing a different game. We call it slop, or a waste of time, we ban them and they get really vocal about expressing their first amendment rights. We are directly interfering with their goal of padding their resume. </p>
<p>I often ask, why don’t people who create those PRs not just start their own project? One answer I’m starting to believe is, nobody cares about a github profile with a handful of stars. You need to contribute to a popular project. Most if not all AI generated websites look the same, it doesn’t matter how well you customize the prompt. Most greenfield projects from new programmers look the same, the prompter lacks the experience to do anything different. </p>
<p>Contributing to open source is a scary thing when you are new. Even when you have experience, it’s a deliberate act. You have to be invested in the work. Just like asking questions on stackoverflow,  <a href="https://github.com/golang/go/issues/31355">issues you raised will often get closed</a>. And when they do, you have to learn from it. </p>
<p>The value of an open source contributor is not in the volume of work they can perform. If you skim any important projects, you’ll see that the best contributors spend more time discussing the problem than writing code. Their value is in solving problems and contributing to the collective memory of the group.</p>
<p>But when you are doing a drive-by PR that may or may not be correct, and you are just trying to get your name on a list, you are providing zero value to the maintainer. Just more work.</p>
<p>This is the signal every slop PR generator is after.</p>			]]>
				</description>
				<pubDate>Fri, 05 Jun 2026 23:00:00 GMT</pubDate>
				<guid>https://idiallo.com/blog/why-all-the-prs</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/664/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
			<item>
				<title><![CDATA[Now that your newsletter is AI-generated, I've Unsubscribed ]]></title>
				<link>https://idiallo.com/blog/unsubscribed-from-ai-generated-newsletters</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>I've remained subscribed to some newsletters for over 20 years. The authors managed to keep my attention all that time. But then, one day, they decided to switch to an AI-generated newsletter without making any announcement.</p>			<p>After a couple of weeks of blue high-tech image thumbnails, I simply hit unsubscribe. Here's what happened: a person earned my trust. He maintained that trust for all those years. But then he thought the best way to improve was to take himself out of the equation. If you're just going to present me with prompt-generated content, I hate to break it to you but I have access to ChatGPT, and I can do that myself.</p>
<p>The reason the human voice matters to me is because there's real experience behind the words. The oldest newsletter in my inbox is from when I was just 12 years old. It was from a French writer I used to read. After a decade of following him, the emails stopped coming. I was only reminded a few years later, when the emails started coming back.</p>
<p>I didn't jump on it immediately. I didn't even remember who it was. But when I read one at random, the words were different, the tone was nostalgic, and the name was unfamiliar.</p>
<p>I dug deeper and found that the author's son had taken over the newsletter. That was my cue to unsubscribe. But he hadn't used AI to replace his father's voice. He didn't use any tricks to garner clicks. Instead, he announced that his father had passed away and that he would share some stories.</p>
<p>I remained subscribed until the last story was released. I rarely sign up for any newsletter. If I do, it's intentional because I'm interested in what the author has to say. It's not much deeper than that.</p>
<p>There is a big difference between a newsletter written by a person, one that breathes and wanders and sometimes takes his time. Compared to the rapid fire, mechanical hum of AI-generated content. One feels like someone is thinking with you. The other feels like a monetization strategy. </p>			]]>
				</description>
				<pubDate>Wed, 03 Jun 2026 21:10:00 GMT</pubDate>
				<guid>https://idiallo.com/blog/unsubscribed-from-ai-generated-newsletters</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/663/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
			<item>
				<title><![CDATA[The web is changing, and we are not going back ]]></title>
				<link>https://idiallo.com/blog/web-is-changing-we-are-not-going-back</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>Whenever I saw someone type a natural language query into Google, it made me cringe. "It's not a person," I would say. "Type like you're talking to a machine." This was especially true for programmers and it was before AI took over everything.</p>			<p>Instead of "how do I write a function that reads a file?", I would suggest they use specific keywords, something that sounded more like machine language than conversation. "js function to read csv file" or "css gradient background property example." This got you better results. Even though Google was a sophisticated search engine, it was still doing a kind of keyword matching under the hood.</p>
<p>But not anymore. You don't get any advantage from writing in "machine language." Google understands natural language just as well. In fact, even better.</p>
<p>How is it that in 2026, I Google things less than ever? It's not that I know everything now. It's more that I don't want to call the friend who always talks too much. If the height of the Eiffel Tower ever comes up in conversation, I'll type "eiffel tower wiki" and click through to Wikipedia. I don't want to have a conversation about it.</p>
<p>Googling something these days feels like Google is trying to join my private conversation. Where it used to be a tool for finding answers elsewhere, now it's a buddy who gives you an answer. And just as you're about to leave, it says, "hey, did you also know that..."</p>
<p>There used to be a machine between me and the information I was looking for. It was good at its job. It sorted, ranked, then presented information. But now, the machine is constantly pushing information at me, watching my reaction, learning from it, and feeding me more, unsolicited.</p>
<p>Before, information lived on the web and was hard to find. Today, information still exists, but it's buried under noise. Google no longer helps you find it, it just gives you an answer. That answer might be right or wrong, and right below it, in small print: "AI responses may include mistakes."</p>
<p>You rarely get to verify whether the answer is correct, because almost no one clicks through to the source. I know this firsthand. More than three-quarters of my Google referral traffic has disappeared, while my search impressions keep climbing.</p>
<p>So what's left to do? I could mourn the old Google, the simpler web. But as the title says, we aren't going back. This is the new reality, and we have to adapt.</p>
<p>Rather than blindly embracing change, I think it's smarter to pick and choose. Just last week, I wrote about the <a href="https://idiallo.com/blog/hi">small web still being alive</a>. And it did exactly what its name suggests. It stayed small.</p>
<p>There are other search engines built for people who want more control. DuckDuckGo. Kagi (my personal favorite). The habit of Googling everything is learned behavior and learned behaviors can be unlearned.</p>
<p>What's harder to convey is that Google never presented us with facts, only sources and citations. The way the google answer is presented, we have the impression they are giving us undisputable truths. When everyone is sharing screenshots of the answer they got, all you can do is share a screenshot of the opposite answer you got. The source gets lost. That's where we are now. Skimming the average sentiment of a Reddit thread, or confirming something we already believed.</p>
<p>This is the new reality. We're not going back to keyword matching. But I also don't have to accept the new way as the only way. Google has made its search box <a href="https://blog.google/products-and-platforms/products/search/search-io-2026/">AI-first</a> and that's their right, it's their product. But it's also my opportunity to try something different.</p>
<p>We are not going back. So I might as well choose where I go next.</p>			]]>
				</description>
				<pubDate>Mon, 01 Jun 2026 19:34:37 GMT</pubDate>
				<guid>https://idiallo.com/blog/web-is-changing-we-are-not-going-back</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/662/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
			<item>
				<title><![CDATA[How Many Tokens Did You Burn Today ]]></title>
				<link>https://idiallo.com/blog/how-many-tokens-did-you-burn-today</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>Early in my career, a manager at one of the big firms where I worked made a request so absurd it remains etched in my memory. I walked back to the team, repeated what he had asked, and couldn't finish the story without laughing. He wanted me to create a pie chart, of lines of code, per developer, per week.</p>			<p>We all lost it. Our lead developer asked if, by any chance, the manager's eyes looked glassy. We laughed even harder. Because yes. Yes, they did. He was always high.</p>
<p>That was twenty years ago. I've repeated that story countless times, and it always drew chuckles as we discussed the disconnect between software teams and management. Any software engineer could relate. We all knew that lines of code were a meaningless metric. A junior could write a thousand lines of spaghetti. A senior could fix the same problem with forty elegant ones.</p>
<p>But then, last week, I found my name at the top of a leaderboard.</p>
<p>My employer had been exploring productivity tools and trialed one they thought would be useful. After the trial, they were quoted $500k a year. The tool tracked developer productivity and integrated with Atlassian products, Microsoft, and many other services we used. The price was too steep, so it was dropped. A couple of months later, the same company came back with a discount. The exact same tool for just $50k a year. My employer jumped at the opportunity.</p>
<blockquote>
<p><strong>How many bytes did you use today?</strong></p>
</blockquote>
<p>I'm looking at this dashboard right now and I see my name at the top of the leaderboard. I click on the widget, and a pie chart appears. There it is: a breakdown of the total lines of code my team has produced using AI, by individual.</p>
<p>This isn't limited to my employer. Every company is putting something together to track AI usage and justify the investment. Instead of tracking project completions, we're tracking how many lines of code each developer generated with AI. And the joke's on me, because nobody is laughing. The whole industry is applauding and encouraging employees to use more of it.</p>
<p>I didn't become the champion because I have some neat agentic workflow. It was done by complete accident. While using an LLM, I accidentally selected "planning mode" for a request that had already been planned. The agent ran for several minutes, burning tokens to resolve a problem that didn't exist. Just like that, I made it to the top, without ever writing a single line of code.</p>
<p>If this widget is taken at face value, it won't be long before developers start gaming it deliberately. Just let the agent run overnight, and your employer can claim a 10x improvement in productivity.</p>
<p>We didn't use line count as a productivity metric in the past because it never made sense. Whenever we refactor code, we often end up with less than we started with. In fact, much of the time I spend modifying AI-generated code is spent deleting unnecessary things it created. Should we track negative lines of code? The better you are at programming, the worse your numbers look. We are assessing developers by the lines of code.</p>
<p>I've watched AI evangelists ask "how many tokens did you burn today?" They were trying to convince an audience that productivity is directly proportional to token usage. It reminds me of the transition from paper to computers. A computer evangelist of that era might have asked: "how many bytes did you use today?"</p>
<p>Token counts, lines of code, bytes, none of these have anything to do with actual productivity. Metrics are often entirely disconnected from what they're meant to measure. I've seen companies rely on story points only to watch employees point every ticket as high as possible. Choose lines of code as your metric, and lines of code will increase. Reward the highest contributor, and watch everyone double or triple their output by the next performance review.</p>
<p>It's a silly metric but it serves a purpose, just not yours. AI companies promote token usage and associate it with productivity because they directly benefit from it. Imagine an internet service provider that charges by the byte. What would their recommendation for productivity be? "Use more bytes!"</p>
<hr />
<p>The best engineers I've ever known wrote less code, not more. They deleted things. They simplified. They understood that <a href="https://idiallo.com/blog/code-for-hire">the goal was never the code itself</a>. They solved problems, they made the system reliable, and they served the user. Measuring developers by output volume, whether that's lines, commits, or tokens, mistakes the exhaust for the engine.</p>
<p>Every era of tooling brings a new class of metric that mistakes activity for value. The spreadsheet didn't make accountants more productive just because they could fill more cells. AI won't make developers more productive just because it can generate more code.</p>
<p>We aren't even tracking if the right problems are being solved, and solved well. If the productivity dashboard can't answer that, it's not measuring productivity. It's measuring the subscription.</p>			]]>
				</description>
				<pubDate>Wed, 27 May 2026 00:31:22 GMT</pubDate>
				<guid>https://idiallo.com/blog/how-many-tokens-did-you-burn-today</guid>
												<enclosure url="https://cdn.idiallo.com/images/assets/661/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
			<item>
				<title><![CDATA[Amber Alert sends Spam URL? ]]></title>
				<link>https://idiallo.com/byte-size/amber-alert-with-spam-link</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>Well that was weird. I just received an Amber Alert and the link led to a spammy looking website. </p>
<div class="art-image">
    <img src="https://cdn.idiallo.com/images/assets/daily/107/alert.jpg" alt="amber alert with spam link" />
    <p>Spam?</p>
</div>
<p>The link leads to a 3gp file converter which is highly unusual. But the more I look at it, I have the impression it's a mistake. Most likely, they have exceeded the maximum number of characters for the Emergency Service alert.</p>
<p>Here is the message:</p>
<blockquote>
<p>AN AMBER ALERT HAS BEEN ACTIVATED BY THE CALIFORNIA HIGHWAY PATROL. DALEZA FREGOSO WAS LAST SEEN ON MAY 24, 2026 AT 0400 HOURS IN LOS ANGELES COUNTY. THE SUSPECT VEHICLE IS A WHITE 2019 WHITE LAND ROVER DISCOVERY CA 9DAW715. CLICK ON THE LINK FOR ADDITIONAL INFORMATION. <a href="https://bit.ly/A0">https://bit.ly/A0</a></p>
</blockquote>
<p>It seems like the total character count is 288. I'm not sure if the title should be included but if I add <code>Child abduction (Amber alert)</code> and the double space after, then we have 320 characters. Is this the character limit for emergency services?</p>
<p>When I clicked on it, it took me to the bitly preview page:</p>
<div class="art-image">
    <img src="https://cdn.idiallo.com/images/assets/daily/107/bitly.jpg" alt="bitly preview page" />
</div>
<p>And clicking on the <code>continue to destination</code> button, I'm taken here:</p>
<div class="art-image">
    <img src="https://cdn.idiallo.com/images/assets/daily/107/link.jpg" alt="Suspicious link" />
    <p>Suspicious Link</p>
</div>
<p>I was starting to wonder if this was even a real Amber alert, and if somehow this was a spam message that was sent through. But unfortunately, it is a real amber alert, as I was able to find the matching alert on <a href="https://www.missingkids.org/poster/AMBER/31667/15567/screen">missingkids.com</a>. However, I don't see a way to request a correction.</p>
<p>I understand that bitly was often used to shorten links, but there should be a way for a service like amber alert to test those links before they are sent. At least on my android, once I click on the link, the alert is dismissed never to be seen again. When the link is incorrect, now we have this problem where we can never get the information back. In this case, I was only able to get the link because I received the alert on both my phones. </p>
<p>Also I've learned that Amber alerts have a character limit of <a href="https://www.fcc.gov/wireless-emergency-alert-enhancements-faqs-authorized-alert-originators">360 characters</a>. So I'm still not sure what went wrong with this one.</p>
<p><strong>Update:</strong> 39 minutes later (8:25pm) a second message was sent with a correction. </p>
<div class="art-image">
    <img src="https://cdn.idiallo.com/images/assets/daily/107/correction.jpg" alt="Corrected link" />
    <p>Corrected Link</p>
</div>
<p>Most likely a copy and paste error.</p>						]]>
				</description>
				<pubDate>Tue, 26 May 2026 03:25:17 GMT</pubDate>
				<guid>https://idiallo.com/byte-size/amber-alert-with-spam-link</guid>
											</item>
		
			<item>
				<title><![CDATA[The commencement speech that shook the world ]]></title>
				<link>https://idiallo.com/blog/the-commencement-speech-that-shook-the-world</link>
				<author>rss@idiallo.com</author>
				
				<description>
					<![CDATA[
			<p>There he was, the man at the helm of innovation. Eric Schmidt, the former CEO of Google. The man who once said, google doesn't need to record your conversation, it already knows everything about you. Yet he didn't see this one coming. In his speech, he looked clear-eyed into the crowd of graduates and told them that AI is inevitable.</p>			<p>There was a group of people who will have a hard time joining the workforce. Companies keep using AI as the excuse for laying off workers. Dario keeps telling us by next year, AI will take over all jobs and there is nothing we can do. They will have nothing, and they better embrace it and be happy. Well, they will have a school loan, but that’s it.</p>
<p>If you were an external observer, maybe an alien watching humanity from a distance, you would think that AI is a new species that emerged from a lake and is taking over the world. You would never tell that the people spreading this fear are also the ones selling the tool that they swear will turn us all into gods. It's not just a capable tool that can be useful for coding, writing, and retrieving existing information. </p>
<p>No. It's the word itself. The all or nothing. The alpha and the omega. And it comes as a monthly subscription from a handful of companies.</p>
<p>What Mr Schmidt was saying to these graduates is that we are done innovating. Now we regurgitate. And then he was booed. He tried to keep talking but the boos were overwhelming. Somewhere between his words, he managed to say that being anti AI is akin to being anti immigrant, trying to score points. I don’t think it worked. </p>
<div class="image">
    <img src="https://cdn.idiallo.com/images/assets/660/reaction.jpg" alt="how eric felt" />
</div>
<p>When I read the news, I first read through the transcript of his speech. It seemed as if he was able to go through his material. But I was wrong. Watching his performance on video was a whole other story. </p>
<p>There was a man, who had practiced his speech in front of a mirror, most likely with Gemini listening and providing feedback. It probably told him that his speech was brilliant. That it was grounded, and encouraging. "The kids will love it."</p>
<p>What he failed to see is that booing was not in the training data. No way Gemini was going to tell him that, because it is programmed to be agreeable and friendly. So yes, he was booed every time he mentioned AI. </p>
<p>But I think there is a lesson in innovation right there. AI learns from existing material. It can hardly deviate from what it already knows. When you ask it to come up with something new, it will show you something that seems new, because obviously you don't know all the material it was trained on. If it doesn't have the information, it can't tell you that it doesn't know. It will make it up instead.</p>
<p>But what these graduates did was exactly what differentiates people from the robots. They did something completely unexpected. They booed Eric Schmidt. They innovated. Something tells me that kids will be just fine. I may never be able to convince my mom to stop sharing <a href="https://idiallo.com/blog/all-ai-videos-are-harmful">AI videos</a>, but my kids will learn to navigate it. They will continue to innovate. Maybe AI will be like a calculator for them. They will know how and when to use it for maximum benefit and prevent the psychosis altogether. It's never gonna be a replacement for thinking.</p>
<p>I was really happy to see the booing because it was the last thing they expected. Just a few days ago, the president of Glendale Community College was booed as well because she chose to have an AI read the graduates names and it butchered the process. AI is not inevitable. It's a nice addition. That’s it.</p>
<p>We don't just have to accept things as they come to us. The most valuable human quality in an age of automation is exactly what AI cannot provide: the ability to defy expectations, introduce chaos, and create truly original outcomes. That is precisely the power of human innovation.</p>
<p>For fun, I copied the commencement speech from a video and passed it through gemini, it complained about the grammar, but as I said earlier, it couldn't predict the outcome:</p>
<blockquote>
<p>The emotional arc is clear: acknowledge fear → restore agency → define values → point toward possibility. It reads like something that wants to meet graduates where they actually are, rather than giving them generic optimism.</p>
</blockquote>
<p>Then I asked it if it would result in booing:</p>
<blockquote>
<p>What makes the speech work is that it does not say:</p>
</blockquote>
<blockquote>
<ul>
<li>“everything will be fine,”</li>
<li>“stop worrying,”</li>
<li>or “technology is inherently good.”</li>
</ul>
</blockquote>
<blockquote>
<p>Instead, it says:</p>
</blockquote>
<blockquote>
<ul>
<li>the future is undecided,</li>
<li>humans remain morally responsible,</li>
<li>and participation matters.</li>
</ul>
</blockquote>
<blockquote>
<p>That framing is resilient.</p>
</blockquote>
<p>Not so resilient after all. Anyway, congrats to the 2026 graduates!</p>			]]>
				</description>
				<pubDate>Sat, 23 May 2026 01:14:24 GMT</pubDate>
				<guid>https://idiallo.com/blog/the-commencement-speech-that-shook-the-world</guid>
								<enclosure url="https://cdn.idiallo.com/images/assets/660/audio.mp3" length="8448000" type="audio/mpeg" />
												<enclosure url="https://cdn.idiallo.com/images/assets/660/hero.jpg" type="image/jpeg" length="102400"/>
							</item>
		
	</channel>
</rss>