<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Alessandro &apos;kLeZ&apos; Accardo &#8211; posts in English</title>
		<link>https://klez.me/en/</link>
		<description>This is the personal website of an Italian developer once called &apos;kLeZ&apos;.</description>
		<language>en</language>
		<copyright>Copyright © Alessandro &apos;kLeZ&apos; Accardo 2019</copyright>
		<lastBuildDate>Mon, 19 Oct 2026 23:20:00 +0200</lastBuildDate>
		<generator>Jekyll 4.4.1</generator>
		<atom:link href="https://klez.me/en/rss.xml" rel="self" type="application/rss+xml" />
		<item>
			<title>The sitemap that reports itself</title>
			<link>https://klez.me/en/2026/09/17/la-sitemap-che-segnala-se-stessa/</link>
			<guid isPermaLink="true">https://klez.me/en/2026/09/17/la-sitemap-che-segnala-se-stessa/</guid>
			<pubDate>Thu, 17 Sep 2026 10:20:00 +0200</pubDate>
			<dc:creator>kLeZ</dc:creator>
			<dc:language>en</dc:language>
			<category>security</category>
			<category>osint</category>
			<category>scam</category>
			<category>hacking</category>
			<description>On Saturday 12 September, after dinner, I opened my inbox and found an email that had arrived at 22:39. Subject Medium Risk: Sensitive Paths Disclosed via Sitemap on https://klez.me, sender “White Hat 66” (hsafe240@gmail.com). Inside was a security report about my blog, complete with severity, bug name, PoC URL, impact and suggested fix, and at the bottom a request for a reward. My first reaction was a defiant grin, and the urge to track the guy down and give him a piece of my mind.</description>
			<content:encoded>&lt;p&gt;On Saturday 12 September, after dinner, I opened my inbox and found an email that had arrived at 22:39. Subject &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Medium Risk: Sensitive Paths Disclosed via Sitemap on https://klez.me&lt;/code&gt;, sender “White Hat 66” (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hsafe240@gmail.com&lt;/code&gt;). Inside was a security report about my blog, complete with &lt;em&gt;severity&lt;/em&gt;, &lt;em&gt;bug name&lt;/em&gt;, &lt;em&gt;PoC URL&lt;/em&gt;, &lt;em&gt;impact&lt;/em&gt; and &lt;em&gt;suggested fix&lt;/em&gt;, and at the bottom a request for a reward. My first reaction was a defiant grin, and the urge to track the guy down and give him a piece of my mind.&lt;/p&gt;

&lt;!--more--&gt;
&lt;p class=&quot;m-0 invisible zero-size&quot;&gt;
	&lt;a class=&quot;invisible&quot; id=&quot;read-more&quot; href=&quot;#&quot;&gt;Read more&lt;/a&gt;
&lt;/p&gt;

&lt;h2 id=&quot;the-bug-does-not-exist&quot;&gt;The bug does not exist&lt;/h2&gt;

&lt;p&gt;According to the report, my &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sitemap.xml&lt;/code&gt; contains URLs for areas that &lt;em&gt;appear&lt;/em&gt; to be administrative, internal or otherwise not meant for the public. That &lt;em&gt;appear&lt;/em&gt; is the most honest word in the whole email. Which areas, the email doesn’t say. There isn’t a single path in the report, and the proof offered is a link to the sitemap itself.&lt;/p&gt;

&lt;p&gt;I built the blog myself, with Jekyll, a static site generator: pages are generated once and GitHub Pages serves them as they are, with no application code running and no login of any kind. There is no admin panel, and nowhere for one to live. The sitemap lists the posts, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/about/&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/cv/&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/contatti/&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/privacy/&lt;/code&gt; and a few course slides under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/lf/&lt;/code&gt;, which is to say public pages listed on purpose so that search engines can find them, which is the reason a sitemap exists (&lt;a href=&quot;https://www.sitemaps.org/protocol.html&quot;&gt;protocol on sitemaps.org&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;impact&lt;/em&gt; section claims the file “directly points attackers to non-public or sensitive areas”. Put that next to the total absence of paths and you can see how the report was born. Someone, or more likely something, found &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;klez.me/sitemap.xml&lt;/code&gt; and logged the file’s existence as a vulnerability, without reading it. A tool that treats the mere existence of a sitemap as a bug is a mediocre tool, and whoever uses it to ask for money didn’t even reread what it spat out. Opening the source of the home page would have been enough, since it says &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;meta name=&quot;generator&quot; content=&quot;Jekyll v3.9.3&quot; /&amp;gt;&lt;/code&gt; in plain text.&lt;/p&gt;

&lt;p&gt;The prose reads as if it came out of a language model, every field in its place and not one detail that actually concerns my site. The signature, White Hat 66, has all the gravitas of a &lt;em&gt;gamertag&lt;/em&gt;. At the end, under “White Hat Note”, comes the request:&lt;/p&gt;

&lt;div class=&quot;premonition citation&quot;&gt;&lt;div class=&quot;fas fa-quote-left&quot;&gt;&lt;/div&gt;&lt;blockquote class=&quot;content blockquote&quot;&gt;&lt;p&gt;We would appreciate hearing about reward or acknowledgment you may offer.&lt;/p&gt;


&lt;footer class=&quot;blockquote-footer&quot;&gt;&lt;cite title=&quot;White Hat 66&quot;&gt;White Hat 66&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;&lt;/div&gt;
&lt;h2 id=&quot;beg-bounty-not-bug-bounty&quot;&gt;Beg bounty, not bug bounty&lt;/h2&gt;

&lt;p&gt;Troy Hunt calls it a &lt;a href=&quot;https://www.troyhunt.com/beg-bounties/&quot;&gt;&lt;em&gt;beg bounty&lt;/em&gt;&lt;/a&gt;. You take any old configuration detail, in his examples a missing DMARC record or an absent security header, wrap it in the language of a &lt;em&gt;vulnerability disclosure&lt;/em&gt; and send it to someone who has no bug bounty programme, hoping they’ll pay to make it go away. According to &lt;a href=&quot;https://www.nwsdigital.com/Blog/Is-that-Scary-Website-Security-Warning-Email-Legit&quot;&gt;NWS Digital&lt;/a&gt; the people doing this target small organisations, where there is often nobody able to tell a vulnerability from a public file.&lt;/p&gt;

&lt;p&gt;It is attempted fraud. Article 640 of the Italian Criminal Code:&lt;/p&gt;

&lt;div class=&quot;premonition citation&quot;&gt;&lt;div class=&quot;fas fa-quote-left&quot;&gt;&lt;/div&gt;&lt;blockquote class=&quot;content blockquote&quot; cite=&quot;https://www.brocardi.it/codice-penale/libro-secondo/titolo-xiii/capo-ii/art640.html&quot;&gt;&lt;p&gt;Whoever, by artifice or deception, leading someone into error, procures an unjust profit for themselves or others to another’s detriment is punished with imprisonment from six months to three years and a fine from 51 to 1,032 euros.&lt;/p&gt;


&lt;footer class=&quot;blockquote-footer&quot;&gt;&lt;cite title=&quot;Italian Criminal Code, art. 640(1), translated&quot;&gt;&lt;a href=&quot;https://www.brocardi.it/codice-penale/libro-secondo/titolo-xiii/capo-ii/art640.html&quot;&gt;Italian Criminal Code, art. 640(1), translated&lt;/a&gt;&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;&lt;/div&gt;
&lt;p&gt;And article 56:&lt;/p&gt;

&lt;div class=&quot;premonition citation&quot;&gt;&lt;div class=&quot;fas fa-quote-left&quot;&gt;&lt;/div&gt;&lt;blockquote class=&quot;content blockquote&quot; cite=&quot;https://www.brocardi.it/codice-penale/libro-primo/titolo-iii/capo-i/art56.html&quot;&gt;&lt;p&gt;Whoever performs acts that are suitable and unequivocally directed at committing an offence is liable for an attempted offence, if the action is not completed or the result does not occur.&lt;/p&gt;


&lt;footer class=&quot;blockquote-footer&quot;&gt;&lt;cite title=&quot;Italian Criminal Code, art. 56(1), translated&quot;&gt;&lt;a href=&quot;https://www.brocardi.it/codice-penale/libro-primo/titolo-iii/capo-i/art56.html&quot;&gt;Italian Criminal Code, art. 56(1), translated&lt;/a&gt;&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;&lt;/div&gt;
&lt;p&gt;The invented report is the artifice, the reward for a vulnerability that doesn’t exist is the unjust profit. It didn’t work on me, and that is exactly why the fraud stays &lt;em&gt;attempted&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I didn’t pay and I didn’t reply. A reply, even just to say no, would have confirmed that someone reads that address, which makes it an address worth trying again.&lt;/p&gt;

&lt;h2 id=&quot;the-infrastructure-behind-the-address&quot;&gt;The infrastructure behind the address&lt;/h2&gt;

&lt;p&gt;That night, without a hoodie, I sat down to read the headers.&lt;/p&gt;

&lt;p&gt;SPF, DKIM and DMARC all check out for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gmail.com&lt;/code&gt;, so the message really was sent from an authenticated Gmail account and it isn’t spoofing. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Message-Id&lt;/code&gt; is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;6aa5b897.e862d496.39e5c9.6c94@mx.google.com&amp;gt;&lt;/code&gt;, the submission to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;smtp.gmail.com&lt;/code&gt; happened at 20:39:51 UTC (22:39 in Italy) and ProtonMail received the email seven seconds later.&lt;/p&gt;

&lt;p&gt;The first of the three &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Received&lt;/code&gt; headers, the one at the bottom, shows the address of the client that authenticated with Gmail:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Received: from [192.168.100.57] ([153.117.18.172])
        by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-486eb33ea4fsm15029442f8f.21.2026.09.12.13.39.50
        for &amp;lt;klez@pm.me&amp;gt;
        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
        Sat, 12 Sep 2026 13:39:51 -0700 (PDT)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;192.168.100.57&lt;/code&gt; is the machine’s private address, behind a NAT; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;153.117.18.172&lt;/code&gt; is the public address it went out on. The APNIC registry assigns that block to Cyber Internet Services Pvt Ltd, a Pakistani provider known as Cybernet, and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;153.117.18.0/24&lt;/code&gt; prefix is announced by AS9541. According to ip-api.com the address doesn’t belong to a VPN, a proxy or a hosting service, and geolocation puts it in Karachi (with all the precision geolocation usually has).&lt;/p&gt;

&lt;p&gt;At the time I checked, the IP wasn’t listed on Spamhaus ZEN, SpamCop or Barracuda, but that says little. Those lists are fed largely by what incoming mail servers see, and this email reached the destination servers from Google’s IPs.&lt;/p&gt;

&lt;p&gt;I stopped there, at IP, provider and autonomous system.&lt;/p&gt;

&lt;h2 id=&quot;what-i-did&quot;&gt;What I did&lt;/h2&gt;

&lt;p&gt;During the night the plan I liked best was a different one: open a few throwaway inboxes on Guerrilla Mail and rough him up a bit (he’s a criminal, so it seemed like a very good idea, and I still don’t hate it). Then I went to bed, and the next morning I settled on this post and two reports.&lt;/p&gt;

&lt;p&gt;The first went to Cybernet’s &lt;em&gt;abuse desk&lt;/em&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;noc-abuse@cyber.net.pk&lt;/code&gt;, the address APNIC lists for that block, with the date and time of sending, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Message-Id&lt;/code&gt;, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Received&lt;/code&gt; line above and an offer to forward the full message. The second went to Google through the Gmail abuse reporting form, because the account is theirs. I don’t know whether anyone will read them.&lt;/p&gt;

&lt;p&gt;If you get a similar email, these are the signs:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Subject:  &quot;&amp;lt;Severity&amp;gt; Risk: Sensitive Paths Disclosed via Sitemap on &amp;lt;domain&amp;gt;&quot;
Claim:    sitemap.xml exposes administrative or internal areas
PoC:      the URL of sitemap.xml, without a single sensitive path named
Ask:      &quot;reward or acknowledgment&quot; in the closing note
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;the-same-script-at-the-w3c&quot;&gt;The same script at the W3C&lt;/h2&gt;

&lt;p&gt;The W3C’s public mailing list archives hold a thread from December 2024 with the same structure. In October a Gmail sender had filed a “Vulnerability Report” about &lt;em&gt;email spoofing&lt;/em&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;w3.org&lt;/code&gt;, with the usual advice on DMARC and SPF, and in December came back asking for confirmation “about the reported vulnerability and its bounty reward”. A different vulnerability and a different name in the signature, but the same request, and a DMARC record to fix is one of Troy Hunt’s own examples.&lt;/p&gt;

&lt;h2 id=&quot;hackers-crackers-and-hats&quot;&gt;Hackers, crackers and hats&lt;/h2&gt;

&lt;p&gt;In 1983 &lt;em&gt;WarGames&lt;/em&gt; comes out, with a teenager who reaches a military system from the computer in his bedroom, and in the same year a group of Milwaukee teenagers, the 414s, makes the news for breaking into several systems, including the one at Memorial Sloan Kettering in New York. One of them ends up on the cover of Newsweek. For much of the American public it is the first time they hear about &lt;em&gt;hackers&lt;/em&gt;, and the word arrives already carrying the meaning it still has on the evening news, where in the meantime the kid has put his hood up.&lt;/p&gt;

&lt;p&gt;Inside the scene, &lt;em&gt;hacker&lt;/em&gt; meant something else. RFC 1392 from 1993, a glossary for Internet users, defines a hacker as “a person who delights in having an intimate understanding of the internal workings of a system”, someone who enjoys understanding how a machine works from the inside. Around the mid-1980s, to defend themselves against the way the press used the word, hackers had coined &lt;em&gt;cracker&lt;/em&gt;, a word specifically for people who break into other people’s systems without permission, and that one made it into the glossary too.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cracker&lt;/em&gt; never caught on. Outside the scene nobody uses it, and in Italian the word lands on the crackers you eat with cheese long before it lands on someone breaking into your server. A word that smells of snack food doesn’t work in headlines.&lt;/p&gt;

&lt;p&gt;A different image won, taken from westerns, where the good guy wears a white hat and the bad guy a black one. &lt;em&gt;White hat&lt;/em&gt; and &lt;em&gt;black hat&lt;/em&gt; entered the vocabulary of people who work in security, and later &lt;em&gt;grey hat&lt;/em&gt; was added for those who break in without permission but without criminal intent, and often tell you afterwards. Today, outside the industry, the word for a “good hacker” is white hat, and everyone understands it.&lt;/p&gt;

&lt;p&gt;The white hat also served to give a job a presentable name. A company is reluctant to let a &lt;em&gt;hacker&lt;/em&gt; in the door, but it will put a &lt;em&gt;white hat&lt;/em&gt; on contract. Bug bounties predate the hats: in 1983 Hunter &amp;amp; Ready promised a Volkswagen Beetle to anyone who found a bug in its VRTX operating system (“Get a bug if you find a bug”), and on 10 October 1995 Netscape started paying people who found security holes in the Navigator 2.0 beta. Today’s bug bounty programmes grew out of that, with platforms acting as intermediaries between companies and researchers, and written rules.&lt;/p&gt;

&lt;p&gt;Anyone who puts on that hat accepts those rules. You look for vulnerabilities where someone has given you permission to look, within a written &lt;em&gt;scope&lt;/em&gt;, you rate what you find by &lt;em&gt;severity&lt;/em&gt; and you report it through coordinated &lt;em&gt;disclosure&lt;/em&gt;. If there is a programme you get paid on its terms, usually only for valid findings nobody else has reported first. If there is no programme you can still report, but you don’t ask for money.&lt;/p&gt;

&lt;h2 id=&quot;the-hat-on-white-hat-66&quot;&gt;The hat on White Hat 66&lt;/h2&gt;

&lt;p&gt;Asking for money over a sitemap is petty fraud, the windscreen washer at the traffic lights who cleans your glass unasked and then holds out a hand. What makes me far angrier is the signature.&lt;/p&gt;

&lt;p&gt;White Hat 66 has put on a lifeguard’s uniform to walk among the beach towels lifting wallets. The name he pins on himself is the one that got a whole profession out of the crime pages, and he breaks precisely the rule that separates a white hat from a fraudster: nobody asked him for anything, he found no vulnerability, and he wants to be paid all the same.&lt;/p&gt;

&lt;p&gt;He took the shape of a bug bounty programme, removed the programme and kept the &lt;em&gt;invoice&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;To a small-time fraudster one name is as good as another, I know. Except that it took decades to make that name respectable, and every email like this one devalues it a little, because &lt;em&gt;white hat&lt;/em&gt; and &lt;em&gt;bounty&lt;/em&gt; become &lt;em&gt;counterfeit currency&lt;/em&gt; in the hands of someone spending them to get paid for a sitemap.&lt;/p&gt;

&lt;h2 id=&quot;the-part-that-hurts&quot;&gt;The part that hurts&lt;/h2&gt;

&lt;p&gt;I don’t care about the sitemap, it’s an XML file a script generates for me. What I’m defending is the word, and what sits underneath it. &lt;a href=&quot;/2010/03/29/lfs-ovvero-come-crearsi-la-propria-distro-gnulinux-da-zero/&quot;&gt;In 2010&lt;/a&gt; I was compiling a distro from scratch with LFS to understand what happens when you press the power button, and &lt;a href=&quot;/2026/02/03/il-software-che-non-puoi-smontare/&quot;&gt;in February&lt;/a&gt; I went back to it, when LFS stopped documenting System V. Take things apart to understand them, and leave what you build open to being taken apart: everything else follows from there, free licences included.&lt;/p&gt;

&lt;p&gt;On that ground, a bloke with a Gmail account is the least of the problems. The same words get taken by companies with a legal department and a communications budget, and they hollow them out at their leisure. &lt;em&gt;Open source&lt;/em&gt; has become a phase of the commercial life cycle: Elastic moved from Apache 2.0 to SSPL and the Elastic License in January 2021, HashiCorp from MPL to the Business Source License in August 2023, Redis from BSD to RSALv2 and SSPL in March 2024. The stated reason is always the same, cloud providers reselling other people’s work without giving anything back, and it isn’t made up. The outcome is always the same as well: the community redoes the work from outside, with OpenSearch, OpenTofu and Valkey.&lt;/p&gt;

&lt;p&gt;Redis, to its credit, wrote it plainly:&lt;/p&gt;

&lt;div class=&quot;premonition citation&quot;&gt;&lt;div class=&quot;fas fa-quote-left&quot;&gt;&lt;/div&gt;&lt;blockquote class=&quot;content blockquote&quot; cite=&quot;https://redis.io/blog/redis-adopts-dual-source-available-licensing/&quot;&gt;&lt;p&gt;First, we openly acknowledge that this change means Redis is no longer open source under the OSI definition.&lt;/p&gt;


&lt;footer class=&quot;blockquote-footer&quot;&gt;&lt;cite title=&quot;Redis, 20 March 2024&quot;&gt;&lt;a href=&quot;https://redis.io/blog/redis-adopts-dual-source-available-licensing/&quot;&gt;Redis, 20 March 2024&lt;/a&gt;&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;&lt;/div&gt;
&lt;p&gt;Software freedom has become a parameter you adjust when revenue requires it. &lt;em&gt;Hacker&lt;/em&gt;, meanwhile, has ended up in job titles: &lt;em&gt;growth hacker&lt;/em&gt;, a term Sean Ellis coined in 2010 for someone whose true north is signup growth. Same root, meaning flipped, and nobody bats an eyelid.&lt;/p&gt;

&lt;p&gt;What gets lost along the way is the philosophical part, which was the engine of the whole thing: the idea that understanding how something works is a right, and that software should open the way a car bonnet opens. Hollow that out and what’s left is a services market with a few vintage words kept on for the marketing.&lt;/p&gt;

&lt;p&gt;An email like White Hat 66’s is funny for ten minutes, then it’s infuriating, and in the end it hurts, because it’s the cut-price version of a theft somebody else is carrying out wholesale, with paid lawyers and press releases.&lt;/p&gt;

&lt;p&gt;White Hat 66, if you’re reading: the hat was never your size. But other people had already had it altered, long before you came along.&lt;/p&gt;

&lt;h2 id=&quot;sources&quot;&gt;Sources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Sitemaps.org, &lt;a href=&quot;https://www.sitemaps.org/protocol.html&quot;&gt;the sitemap XML protocol&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Troy Hunt, &lt;a href=&quot;https://www.troyhunt.com/beg-bounties/&quot;&gt;Beg Bounties&lt;/a&gt;, 8 November 2021&lt;/li&gt;
  &lt;li&gt;NWS Digital, &lt;a href=&quot;https://www.nwsdigital.com/Blog/Is-that-Scary-Website-Security-Warning-Email-Legit&quot;&gt;Is that Scary Website Security Warning Email Legit?&lt;/a&gt;, 29 December 2021&lt;/li&gt;
  &lt;li&gt;Italian Criminal Code, &lt;a href=&quot;https://www.brocardi.it/codice-penale/libro-secondo/titolo-xiii/capo-ii/art640.html&quot;&gt;art. 640&lt;/a&gt; and &lt;a href=&quot;https://www.brocardi.it/codice-penale/libro-primo/titolo-iii/capo-i/art56.html&quot;&gt;art. 56&lt;/a&gt;, text on Brocardi&lt;/li&gt;
  &lt;li&gt;APNIC, &lt;a href=&quot;https://rdap.apnic.net/ip/153.117.18.172&quot;&gt;RDAP for 153.117.18.172&lt;/a&gt;, and RIPE Stat, &lt;a href=&quot;https://stat.ripe.net/data/prefix-overview/data.json?resource=153.117.18.172&quot;&gt;prefix overview for the same address&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;W3C, &lt;a href=&quot;https://lists.w3.org/Archives/Public/public-website-redesign/2024Dec/0003.html&quot;&gt;public thread from December 2024&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Alex Orlando, &lt;a href=&quot;https://www.discovermagazine.com/the-story-of-the-414s-the-milwaukee-teenagers-who-became-hacking-pioneers-41882&quot;&gt;The Story of the 414s&lt;/a&gt;, Discover Magazine, 10 October 2020&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc1392.txt&quot;&gt;RFC 1392, Internet Users’ Glossary&lt;/a&gt;, January 1993, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Security_hacker&quot;&gt;Wikipedia, Security hacker&lt;/a&gt;, quoting the Jargon File entry for “cracker”&lt;/li&gt;
  &lt;li&gt;Cadre, &lt;a href=&quot;https://blog.cadre.net/winning-bug-wars-from-volkswagen-beetles-to-million-dollar-bug-bounties&quot;&gt;Winning Bug Wars: From Volkswagen Beetles to Million Dollar Bug Bounties&lt;/a&gt;, 27 August 2020, and Esben Friis-Jensen, &lt;a href=&quot;https://www.cobalt.io/blog/the-history-of-bug-bounty-programs&quot;&gt;The History of Bug Bounty Programs&lt;/a&gt;, Cobalt, 11 April 2014&lt;/li&gt;
  &lt;li&gt;Shay Banon, &lt;a href=&quot;https://www.elastic.co/blog/licensing-change&quot;&gt;Doubling down on open, Part II&lt;/a&gt;, Elastic, 14 January 2021&lt;/li&gt;
  &lt;li&gt;HashiCorp, &lt;a href=&quot;https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license&quot;&gt;HashiCorp adopts Business Source License&lt;/a&gt;, 10 August 2023&lt;/li&gt;
  &lt;li&gt;Redis, &lt;a href=&quot;https://redis.io/blog/redis-adopts-dual-source-available-licensing/&quot;&gt;Redis Adopts Dual Source-Available Licensing&lt;/a&gt;, 20 March 2024&lt;/li&gt;
  &lt;li&gt;Sean Ellis, &lt;a href=&quot;https://www.startup-marketing.com/where-are-all-the-growth-hackers/&quot;&gt;Find a Growth Hacker for Your Startup&lt;/a&gt;, 26 July 2010&lt;/li&gt;
&lt;/ul&gt;
</content:encoded>
		</item>
		<item>
			<title>Slop, trust, and a three-line patch</title>
			<link>https://klez.me/en/2026/06/28/slop-trust-and-a-three-line-patch/</link>
			<guid isPermaLink="true">https://klez.me/en/2026/06/28/slop-trust-and-a-three-line-patch/</guid>
			<pubDate>Sun, 28 Jun 2026 02:46:01 +0200</pubDate>
			<dc:creator>kLeZ</dc:creator>
			<dc:language>en</dc:language>
			<category>open-source</category>
			<category>ai-slop</category>
			<category>trust</category>
			<category>maintainership</category>
			<description>A maintainer closed my patch with one sentence: “Sorry, but this sounds like AI slop.” The patch was three lines of Go. It fixed a real authentication bug, it shipped with a debug log that pinned the cause, and a week later a stranger running a different account setup cloned my fork, built it, and reported back that it worked. None of that counted. What counted was the smell.</description>
			<content:encoded>&lt;p&gt;A maintainer closed my patch with one sentence: “Sorry, but this sounds like AI slop.” The patch was three lines of Go. It fixed a real authentication bug, it shipped with a debug log that pinned the cause, and a week later a stranger running a different account setup cloned my fork, built it, and reported back that it worked. None of that counted. What counted was the smell.&lt;/p&gt;

&lt;!--more--&gt;
&lt;p class=&quot;m-0 invisible zero-size&quot;&gt;
	&lt;a class=&quot;invisible&quot; id=&quot;read-more&quot; href=&quot;#&quot;&gt;Read more&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Now the dull context, which is the whole point. I back ProtonMail’s mail through a small open-source bridge called hydroxide, because I don’t pay for Proton’s own bridge and hydroxide is what I have. Accounts with two-factor authentication can’t finish logging in: the password step and the TOTP step both succeed, and then the very next call, the one that fetches the key salts, comes back 401. Proton invalidates the access token once you clear the second factor and hands you a fresh scope, and the client keeps presenting the old token. I found this by turning on the debug log and reading the request trace. I confirmed it against the behaviour of Proton’s own web client. The fix is to ask for a new token after the second factor and use it for the rest of the login. Three lines, gated so single-factor users never touch the new path.&lt;/p&gt;

&lt;p&gt;I’ll be precise about how I worked, because the precision is what the rejection got wrong. I used a language model to read the codebase faster: it was someone else’s Go, I had never seen it, and I wanted a map before I started digging. Read-only. The notes it produced never reached a commit; I deleted them once I understood the code. I wrote the fix by hand. Then, because I was out of time and patience, I described my own change to a model and had it draft the issue and the pull request text. The code was mine; the prose was not. I disclosed nothing about this in the description, which, as I’ll get to, is the part everyone has decided to fight about.&lt;/p&gt;

&lt;h2 id=&quot;the-part-where-i-concede-everything&quot;&gt;The part where I concede everything&lt;/h2&gt;

&lt;p&gt;Slop is real. I want to say that before I say anything else, because the people sounding the alarm are not imagining the fire.&lt;/p&gt;

&lt;p&gt;The clearest case on record is curl. Through 2025 Daniel Stenberg watched AI-generated vulnerability reports flood the project’s bug bounty until roughly one in five submissions was slop and the rate of reports describing a real vulnerability fell below one in twenty. Seven people on the security team, three or four of them needed to read each report, thirty minutes to three hours apiece to conclude it was nothing. One submission described an HTTP/3 exploit complete with debugger sessions and register dumps, all of it referencing a function that does not exist in curl. Stenberg called it DDoSing open source and shut the bounty down.&lt;/p&gt;

&lt;p&gt;What that describes is a resource attack, and it has a name older than the chatbots. Alberto Brandolini’s bullshit asymmetry principle says the effort to refute nonsense is an order of magnitude larger than the effort to produce it. Language models industrialise the cheap side of that asymmetry and leave the expensive side exactly where it was: on a human who has to read, reproduce, and decide. A maintainer facing that inflow is not paranoid. He is doing triage in a building that is genuinely on fire, and a wall is a reasonable thing to want.&lt;/p&gt;

&lt;p&gt;The worry behind my rejection is legitimate. It was aimed at the wrong layer.&lt;/p&gt;

&lt;h2 id=&quot;the-wrong-axis&quot;&gt;The wrong axis&lt;/h2&gt;

&lt;p&gt;Read Stenberg carefully and the complaint is never really about who or what wrote the report. He says outright that it makes no difference whether a submission came from a human or a machine if it carries no real finding and only burns reviewer time. He runs three AI review bots on his own pull requests, at two in the morning when no human is awake. When the models improved in early 2026 curl reopened the bounty, because the slop had thinned out even as the volume kept climbing. His axis is verification. Does the thing check out, and what does it cost me to find out.&lt;/p&gt;

&lt;p&gt;“This sounds like AI slop” is a different axis. It is authorship, detected by smell. And smell is cheap, which is exactly why it tempts you when you are tired. You stop reading for whether the claim is true and start reading for whether the prose feels synthetic. The trouble is that the two axes come apart in precisely the case that matters. The smell test fires on the contributor who used a model for the boring half and did the real work by hand, and it fires hardest on people whose English is a second language and who reach for a model to sound fluent. In my case the classifier worked perfectly and was useless: it correctly detected that the prose was machine-drafted, and from that it convicted the code, which was mine and which was correct. The signal it caught was real; the inference it drew was garbage.&lt;/p&gt;

&lt;h2 id=&quot;the-double-bind&quot;&gt;The double bind&lt;/h2&gt;

&lt;p&gt;There is a trap inside this that almost nobody names, and it is worth sitting with.&lt;/p&gt;

&lt;p&gt;The same projects that fear slop ask contributors to disclose AI use. hydroxide’s contributing guide is explicit: if a model helped, say so, add an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Assisted-by&lt;/code&gt; line. Honesty is the rule. Then read James Bach, who has written one of the sharper arguments against AI in writing, and who tells you to do the opposite. Never admit you used a model, Bach says, because the moment you do he will treat your work as slop or spam, and so will every serious professional. In his frame disclosure is a confession of laziness; he compares letting a model draft your prose to taking a helicopter to the summit and claiming you climbed.&lt;/p&gt;

&lt;p&gt;Hold both at once. One norm orders you to disclose. The other promises to punish you for disclosing. The honest contributor, code by hand and prose by machine and forthright about which is which, loses under both. No disclosure satisfies the rule-followers and the rule-skeptics together, so the incentive the system actually teaches is to hide: write the prose yourself, badly, or launder the model’s prose through enough edits that nobody can tell. A rule that punishes honest disclosure destroys the very signal it was built to collect. That is not a stable place to stand.&lt;/p&gt;

&lt;h2 id=&quot;the-market-for-lemons&quot;&gt;The market for lemons&lt;/h2&gt;

&lt;p&gt;George Akerlof won a Nobel for describing what happens next, in a 1970 paper about used cars. When a buyer cannot tell a good car from a bad one, he will only pay the price of an average car. Owners of genuinely good cars cannot get a fair price, so they leave. Average quality drops, the price drops with it, and the market can keep unravelling until mostly lemons remain. Information asymmetry does more than annoy buyers. It selects against the honest sellers and degrades the whole pool.&lt;/p&gt;

&lt;p&gt;Open-source contribution is now a lemon market. A maintainer who cannot cheaply tell a real patch from a plausible one rationally applies a blanket discount: assume slop, close on sight. The cost of that discount lands on the contributors who did real work, because they are the ones with something to lose. They get treated as the average, the average is assumed to be junk, and so they leave. I will not be sending hydroxide another patch. The bug is still open. Multiply that by every competent person waved off with a one-line smell verdict, and the blanket discount manufactures the exact future it was meant to prevent: a contribution pool with the good actors filtered out. Each rejection is individually rational. The sum is a project pricing itself toward lemons.&lt;/p&gt;

&lt;h2 id=&quot;scale-is-the-whole-argument&quot;&gt;Scale is the whole argument&lt;/h2&gt;

&lt;p&gt;Here is where I have to be fair to curl and hard on the imitation of curl.&lt;/p&gt;

&lt;p&gt;curl earns its walls. Hundreds of millions of installations, a seven-person volunteer team, real money on the table that drew people brute-forcing the bounty with chatbots. At that scale the expected value of a random unsolicited submission really is near zero, verifying it really is expensive, and a high prior of slop is correct Bayesian reasoning, not panic. Stenberg is rationing the only finite resource he has, which is attention; his wife has started asking him about his hours.&lt;/p&gt;

&lt;p&gt;hydroxide is not curl. By its own maintainer’s account it is casually maintained, kept alive mostly so he can send kernel patches, sitting on a few dozen open issues with no bounty and no crowd. The population of people who install a niche ProtonMail bridge, hit a two-factor bug, read Go they have never seen, isolate the cause, and write a fix is small and heavily self-selected. The base rate of slop in that population is low. Verifying three gated lines costs minutes. Importing curl’s prior into that situation is a base-rate error wearing the costume of prudence: you have adopted the threat model of a project a thousand times your size and applied it to a contributor who, by the sheer cost of getting that far, was almost certainly not your problem.&lt;/p&gt;

&lt;p&gt;The maintainer is within his rights. I am questioning the judgment, not the right to make the call. It is his project, his time, and he owes me nothing; I said as much to him, in those words. Rights were never what I was arguing about.&lt;/p&gt;

&lt;h2 id=&quot;trust-is-not-a-one-way-audit&quot;&gt;Trust is not a one-way audit&lt;/h2&gt;

&lt;p&gt;The word everyone reached for in the thread was trust, and they used it as though it ran one way: the contributor earns the maintainer’s trust, the maintainer adjudicates. But trust in a commons is something both sides spend. I spent mine. I installed it, used it, found the bug, read the trace, read a stranger’s code until I understood it, opened an issue that pointed at the exact fault, wrote the patch, and signed it off, all in time I do not have, toward a project I wanted to keep working. A reviewer who closes on a smell spends none of that and discards all of mine.&lt;/p&gt;

&lt;p&gt;The repair was cheap. The whole thing was avoidable for the price of one sentence: did you understand this code, and is the description AI-written? The honest answer rebuilds in one line the thing the smell test set on fire. Asking would have cost less than the closing did.&lt;/p&gt;

&lt;p&gt;I did not make that easy, and I should own it. When I told the maintainer he “deserved” the broken project and that I would wait for him to fix the bug himself, I handed him the edge he needed to slide the conversation off the code and onto my attitude, which is a more comfortable place for a rejection to live. The structural point survives my bad manners. Closing a reproduced fix on authorship-smell, at a project where verification costs minutes, spends trust that a volunteer commons cannot easily refill.&lt;/p&gt;

&lt;h2 id=&quot;what-it-actually-costs&quot;&gt;What it actually costs&lt;/h2&gt;

&lt;p&gt;I want to keep the stakes the right size. This is not the end of anything; it is a small bridge and a small patch.&lt;/p&gt;

&lt;p&gt;But notice who is not harmed by any of it. The closed and the corporate scale fine. They have headcount, process, and money; a slop flood is a line item, and so is review. The thing that runs on nothing but trust between strangers is the small, weird, volunteered long tail: the niche bridge, the one-maintainer tool, the patch from someone you have never met. That is exactly where the blanket-slop posture does the most damage relative to the real threat. The towers protect the projects that least need protecting and price out the collaboration that has nothing else holding it together.&lt;/p&gt;

&lt;p&gt;Slop is a tax on attention. The paranoia is a tax on trust. The first is the louder problem and the more obvious one, and it is real. The second is quieter and worse, because attention can be bought back with tooling and money, and the curl story is partly the story of that recovery. Trust between strangers does not recover on that schedule. Once a community’s default reading of a good-faith contribution is “probably a machine, probably junk,” you do not get the default back by upgrading a model. You get it back, if at all, the slow way, one honest exchange at a time, which is the same way it was built and the same way it is now being spent.&lt;/p&gt;

&lt;p&gt;The bug, by the way, is still open. The fix still works. Somebody will merge it eventually, by hand, written by a person, the way it was the first time.&lt;/p&gt;

&lt;h2 id=&quot;sources&quot;&gt;Sources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;hydroxide pull request and the linked issue: &lt;a href=&quot;https://github.com/emersion/hydroxide/pull/346&quot;&gt;PR #346&lt;/a&gt;, &lt;a href=&quot;https://github.com/emersion/hydroxide/issues/345&quot;&gt;issue #345&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The contributing policy referenced in the thread: &lt;a href=&quot;https://github.com/emersion/.github/blob/main/CONTRIBUTING.md&quot;&gt;emersion/.github CONTRIBUTING.md&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;James Bach, &lt;em&gt;Public Service Announcement: Don’t Say You Use AI for Writing&lt;/em&gt;: &lt;a href=&quot;https://www.satisfice.com/blog/archives/488148&quot;&gt;satisfice.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Daniel Stenberg on AI slop and curl’s bug bounty (primary): &lt;a href=&quot;https://daniel.haxx.se/blog/&quot;&gt;daniel.haxx.se/blog&lt;/a&gt;; secondary coverage with the figures cited here: &lt;a href=&quot;https://thenewstack.io/curls-daniel-stenberg-ai-is-ddosing-open-source-and-fixing-its-bugs/&quot;&gt;The New Stack&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;George A. Akerlof, “The Market for Lemons: Quality Uncertainty and the Market Mechanism”, &lt;em&gt;Quarterly Journal of Economics&lt;/em&gt; 84, no. 3 (1970)&lt;/li&gt;
  &lt;li&gt;Alberto Brandolini, the bullshit asymmetry principle (Brandolini’s law), 2013&lt;/li&gt;
&lt;/ul&gt;
</content:encoded>
		</item>
		<item>
			<title>Using The Eisenhower Matrix In Emacs Org-Mode</title>
			<link>https://klez.me/en/2019/10/22/using-the-eisenhower-matrix-in-emacs-org-mode/</link>
			<guid isPermaLink="true">https://klez.me/en/2019/10/22/using-the-eisenhower-matrix-in-emacs-org-mode/</guid>
			<pubDate>Tue, 22 Oct 2019 16:18:35 +0200</pubDate>
			<dc:creator>kLeZ</dc:creator>
			<dc:language>en</dc:language>
			<description>Riporto integralmente l’articolo di Tom Purl che parla dell’integrazione della matrice di Eisenhower in Emacs Org-Mode. Purtroppo Tom ha rimosso l’articolo dal suo sito ma sono riuscito comunque a trovarlo tramite la Wayback Machine. Di seguito (in inglese) l’articolo integrale. Forse (forse) porterò una traduzione di questo articolo nel blog, a imperitura memoria, soprattutto per chi non mastica granché l’inglese.</description>
			<content:encoded>&lt;p&gt;Riporto integralmente l’articolo di Tom Purl che parla dell’integrazione della matrice di Eisenhower in Emacs Org-Mode.&lt;/p&gt;

&lt;p&gt;Purtroppo Tom ha rimosso l’articolo dal suo sito ma sono riuscito comunque a trovarlo tramite la &lt;a href=&quot;https://web.archive.org/web/&quot;&gt;Wayback Machine&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Di seguito (in inglese) l’articolo integrale. Forse (&lt;strong&gt;forse&lt;/strong&gt;) porterò una traduzione di questo articolo nel blog, a imperitura memoria, soprattutto per chi non mastica granché l’inglese.&lt;/p&gt;

&lt;!--more--&gt;
&lt;p class=&quot;m-0 invisible zero-size&quot;&gt;
	&lt;a class=&quot;invisible&quot; id=&quot;read-more&quot; href=&quot;#&quot;&gt;Read more&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;I just finished reading the &lt;a href=&quot;https://waitbutwhy.com/2015/03/procrastination-matrix.html&quot;&gt;The Procrastination Matrix&lt;/a&gt; article on the &lt;a href=&quot;https://waitbutwhy.com/&quot;&gt;Wait But Why&lt;/a&gt; blog and it really spoke to me. I’m a big fan of using &lt;a href=&quot;https://orgmode.org/&quot;&gt;Org-Mode&lt;/a&gt; in Emacs to organize all of my tasks, and I wondered if I could make both of these systems work together. Naturally, Org-Mode makes it really easy, and here’s how I did it.&lt;/p&gt;

&lt;h2 id=&quot;easy-tagging&quot;&gt;Easy Tagging&lt;/h2&gt;

&lt;p&gt;First, I need to be able to categorize my TODO’s as being urgent, important, or both. The easiest way to do this in Org-Mode is to use tags that looks something like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;** TODO Pay bills                                                    :urgent:
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can easily add tags using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C-c C-c&lt;/code&gt; command, but I like to make things even easier by using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-tag-alist&lt;/code&gt; variable:&lt;/p&gt;

&lt;div class=&quot;language-elisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;setq&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;org-tag-alist&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;important&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;?i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;urgent&quot;&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;?u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now when I tag a TODO item, I simply need to type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;i&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;u&lt;/code&gt; to tag it as important and/or urgent.&lt;/p&gt;

&lt;h2 id=&quot;canned-searches&quot;&gt;Canned Searches&lt;/h2&gt;

&lt;p&gt;Now that my TODO’s are tagged I would like to be able to look at all 4 quadrants quickly and easily. I can do this in Org-Mode by setting the value of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-agenda-custom-commands&lt;/code&gt; variable. Here’s what I have:&lt;/p&gt;

&lt;div class=&quot;language-elisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;setq&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;org-agenda-custom-commands&lt;/span&gt;
   &lt;span class=&quot;o&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;1&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Q1&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;tags-todo&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;+important+urgent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
     &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;2&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Q2&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;tags-todo&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;+important-urgent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
     &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;3&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Q3&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;tags-todo&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;-important+urgent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
     &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;4&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Q4&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;tags-todo&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;-important-urgent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Q1 stands for “quadrant 1” and contains all TODO’s that are tagged as both important and urgent. Q2 contains all of the TODO’s that are tagged as important but not urgent. And the rest should be pretty self explanatory.&lt;/p&gt;

&lt;p&gt;Now when I press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C-c a&lt;/code&gt; I see my usual agenda search dialog with the following lines at the bottom:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;1    Q1        : +important+urgent
2    Q2        : +important-urgent
3    Q3        : -important+urgent
4    Q4        : -important-urgent
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I can then see all of the tasks for a given quadrant by pressing the corresponding number.&lt;/p&gt;

&lt;h2 id=&quot;thats-it&quot;&gt;That’s It!&lt;/h2&gt;

&lt;p&gt;Once again Org-Mode has proven itself to be very easy to customize. It literally does everything for me but complete my tasks and show the &lt;a href=&quot;https://waitbutwhy.com/2013/10/why-procrastinators-procrastinate.html&quot;&gt;Instant Gratification Monkey&lt;/a&gt; who’s boss.&lt;/p&gt;

</content:encoded>
		</item>
		<item>
			<title>Free Software Day</title>
			<link>https://klez.me/en/2019/02/14/free-software-day/</link>
			<guid isPermaLink="true">https://klez.me/en/2019/02/14/free-software-day/</guid>
			<pubDate>Thu, 14 Feb 2019 12:48:55 +0100</pubDate>
			<dc:creator>kLeZ</dc:creator>
			<dc:language>en</dc:language>
			<category>fsfe</category>
			<category>ilovefs</category>
			<category>floss</category>
			<description>Today it’s free software day! Let’s celebrate!</description>
			<content:encoded>&lt;p&gt;Today it’s free software day! Let’s celebrate!&lt;br /&gt;
&lt;a href=&quot;https://ilovefs.org&quot;&gt;&lt;img src=&quot;https://fsfe.org/campaigns/ilovefs/artwork/graphics/ilovefs-heart-px.png&quot; alt=&quot;I Love Free Software&quot; class=&quot;img-fluid&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</content:encoded>
		</item>
		<item>
			<title>A nightmare to remember -- not the Dream Theater&apos;s song -- [BTRFS vs. me - pt1]</title>
			<link>https://klez.me/en/2013/08/01/a-nightmare-to-remember-not-the-dream-theaters-song-btrfs-vs-me-pt1/</link>
			<guid isPermaLink="true">https://klez.me/en/2013/08/01/a-nightmare-to-remember-not-the-dream-theaters-song-btrfs-vs-me-pt1/</guid>
			<pubDate>Thu, 01 Aug 2013 18:42:35 +0200</pubDate>
			<dc:creator>kLeZ</dc:creator>
			<dc:language>en</dc:language>
			<category>btrfs</category>
			<category>change root partition</category>
			<category>Linux</category>
			<category>migrate filesystem</category>
			<category>openSuSE</category>
			<description>Today I want to say a few words about BTRFS. Firstly I want to say that this filesystem is awesome for functionalities, I will use it as my filesystem again as soon as it will become stable. But, It is not yet stable, I tried and I fallen in front of his horrible performances.</description>
			<content:encoded>&lt;p&gt;Today I want to say a few words about BTRFS. Firstly I want to say that &lt;strong&gt;this filesystem is awesome for functionalities&lt;/strong&gt;, I will use it as my filesystem again as soon as it will become stable. But, It is not yet stable, I tried and I fallen in front of his horrible performances.&lt;/p&gt;

&lt;!--more--&gt;
&lt;p class=&quot;m-0 invisible zero-size&quot;&gt;
	&lt;a class=&quot;invisible&quot; id=&quot;read-more&quot; href=&quot;#&quot;&gt;Read more&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Actually there are some problems on this filesystem that developers know in fact but, they are much more complicated to solve because most of them are normal behaviors of other functionalities. As an example in order to understand much better and quickly: there is a known issue of (obviously) horrible performances that I experimented by myself, it makes performance decrease whenever you use it because he want to write down all the data in the same time, he want also manage all the metadata at the same time, only because those data are in the same transaction (!!), and you cannot do anything to fix that behavior because it is not customizable AND this is the normal behavior of work for btrfs. Result: you have an awesome filesystem that decreases its performances more quickly than Windows, so it is hardly unusable, especially if you use it for the root partition.&lt;/p&gt;

&lt;p&gt;A system cannot be so slow in 2013 so I ended up in a solution: I have to migrate my filesystem. I’m not a fan of passing data from a disk to another, I make a few bckups sometimes but not always, in fact this is a bad attitude, but that’s me. SO.&lt;/p&gt;

&lt;p&gt;In order to migrate the root filesystem (yes I had BTRFS for the root – and home – filesystem, I used to be a bad guy, huh) I used a slooooow but simple universal and powerful solution. The situation was aggravated by the fact that my laptop has secure boot and then the boot partition was very touchy. I used the well known live distro (any live distro could do this work, I used the openSuSE recovery system for that purpose) and so I logged in a shell. The rest are some commands, a cp, some other commands.&lt;/p&gt;

&lt;p&gt;Anyway, here is what I typed:&lt;/p&gt;

&lt;p&gt;I had to make a new partition of the same size or even better, so I resized the btrfs home partition of -200G in order to keep root filesystem very large.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;btrfs filesystem resize -200G /dev/sda4&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then I created the new filesystem and after that I mounted old (as read only) and new root filesystems.&lt;/p&gt;

&lt;p&gt;So I ran this command: __&lt;/p&gt;

&lt;p&gt;&lt;em&gt;cp -bfrdvx –preserve=all –suffix=~-bak-newfs -t /newfs/ /old/{bin,boot,etc,lib,lib64,media,mnt,opt,root,run,sbin,selinux,srv,tmp,usr,var}&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It took a few to complete but as it finished I had all my old root copied in the new one. I omitted copy the home folder because I have a separate partition for that, but I copied boot because even if I have a partition for that some files needs to be copied in any case.&lt;/p&gt;

&lt;p&gt;Explination:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-b:&lt;/em&gt; means backup, cp makes a backup if it has to overwrite a file, as described in the man “&lt;em&gt;it works better with -f [force] and -r [recurse]&lt;/em&gt;”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-f &amp;amp; -r:&lt;/em&gt; means recurse and force overwriting if you find the same file on destination&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-d:&lt;/em&gt; this is the combination of two other switches, it means that cp cannot ever follow any link in the source and it should preserve the link attribute on the new filesystem, it is useful in our case because we want to keep everything even links to system libraries, kernels configurations and so on. We have a user friendly distro, not slackware, so we want to preserve the configurations made by the packagers of our precompiled software.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-v:&lt;/em&gt; verbose, no words.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-x:&lt;/em&gt; stay on this filesystem but, as described by man “&lt;em&gt;mount points are not worth&lt;/em&gt;” [read that as if you were David Letterman].&lt;/p&gt;

&lt;p&gt;&lt;em&gt;–preserve=all:&lt;/em&gt; means preserve all attributes, other than links (remember &lt;em&gt;-d__ switch?&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;–suffix=~-bak-newfs:&lt;/em&gt; I chose only a suffix that I can remember of, later.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-t /newfs/:&lt;/em&gt; oh well, I’m explaining cp, but you should know of the -t option, it sets the destination folder.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;/old/{bin,boot,etc,lib,lib64,media,mnt,opt,root,run,sbin,selinux,srv,tmp,usr,var}:&lt;/em&gt; the filesystem, without volatile folders. This a bash expansion, so it is not fully trusted to use it on a different shell.&lt;/p&gt;

&lt;p&gt;Ended now?! No! You should go across other commands in order to recover your poor system. As it i now your new root don’t knows how to start itself, it knows only how to start the old root. There are some files you have to edit in order to let the new root know about itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;/etc/fstab&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You have to edit the /etc/fstab of the new root because you have to change the mount device for / (root) mount point.&lt;/p&gt;

&lt;p&gt;I assume you know how to modify fstab.&lt;/p&gt;

&lt;p&gt;Then for the rest of configuration you have to chroot into the new root, so I bounded volatile filesystems (dev sys proc) and chrooted into the new root.&lt;/p&gt;

&lt;p&gt;You have to fix two main things that are broken because of their reference to the old filesystem: bootloader and kernel, you mind that if you do not do that part, the system will not boot up.&lt;/p&gt;

&lt;p&gt;In order to fix grub2 (I have grub2-efi so I make a guide on that, do not try to ask of lilo grub legacy or other BLs) I had to fire the command below:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;grub2-mkconfig -o /boot/grub2/grub.cfg&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So easy? Yes! Grub2 is composed of a bunch of useful scripts that detect automagically all the systems installed in the mounted partitions, and writes all the data into the grub.cfg. It’s handy isn’t it?&lt;/p&gt;

&lt;p&gt;For kernel you have to pray all goes smooth as it did for me, in othre cases, &lt;em&gt;I saw errors that you humans will never see in your lives&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This is the command: &lt;em&gt;mkinitrd&lt;/em&gt;, if it works, good, anyway pray god it will autofix itself.&lt;/p&gt;

&lt;p&gt;Once fstab, init ramdisk, and grub2 are all fixed you can try to exit the chroot and reboot your machine, optionally you can also delete the old root partition.&lt;/p&gt;

&lt;p&gt;If it ended up smooth you should see grub2 loading, kernel loading and launching init, and the rest of the system run as normal, but with greater performance.&lt;/p&gt;

&lt;p&gt;I hope they will fix those errors and make btrfs ready for the prime time as soon as possible, anyway I have btrfs for the home partition yet, so I have chances to try it out more and more.&lt;/p&gt;
</content:encoded>
		</item>
		<item>
			<title>SecureBoot [The last Microsoft weapon to keep its users locked on Windows... 8]</title>
			<link>https://klez.me/en/2013/07/30/secureboot-the-last-microsoft-weapon-to-keep-its-users-locked-on-windows-8/</link>
			<guid isPermaLink="true">https://klez.me/en/2013/07/30/secureboot-the-last-microsoft-weapon-to-keep-its-users-locked-on-windows-8/</guid>
			<pubDate>Tue, 30 Jul 2013 03:05:47 +0200</pubDate>
			<dc:creator>kLeZ</dc:creator>
			<dc:language>en</dc:language>
			<category>Linux</category>
			<category>openSuSE</category>
			<category>Repair</category>
			<category>SecureBoot</category>
			<description>Tonight let’s talk a little about SecureBoot.</description>
			<content:encoded>&lt;p&gt;Tonight let’s talk a little about SecureBoot.&lt;/p&gt;

&lt;!--more--&gt;
&lt;p class=&quot;m-0 invisible zero-size&quot;&gt;
	&lt;a class=&quot;invisible&quot; id=&quot;read-more&quot; href=&quot;#&quot;&gt;Read more&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Secure Boot is IMHO the worst thing that Microsoft did in the last 15 years, and we’re talking about an era of Windows 98 [Epic Crash!], Windows Millennium [BUUgs] and Windows Vista [SLOOwness], and the first Service Pack of Windows XP, that introduced more bugs than that ones it has corrected. So it is IMHO a horrible thing that will never protect them against malware: done the law, found the trick. BUT! As Microsoft does every time a new component is introduced, every hardware producer install a copy of it in its UEFI firmwares, this leads to problems for most of the users in the dreamland of linux.&lt;/p&gt;

&lt;p&gt;Thanks to Red Hat, Novell and Canonical (Fedora, OpenSuSE and Ubuntu), we stolen (making noise with money) a key from Microsoft and we can now successfully install in a GPLv3 way our preferred OS: GNU/Linux [I’m sorry RMS, I was going to write only Linux, don’t flash me with a lightning].&lt;/p&gt;

&lt;p&gt;I installed successfully openSuSE 12.3 on my Asus K55V with UEFI and SecureBoot, but tonight it stopped working after a reboot (!!). As I’m actually writing this blog post, you can deduce that I have solved my issue. Yes. I solved my issue. I’m fine thanks, my granny is greeting you.&lt;/p&gt;

&lt;p&gt;What happened was that SecureBoot has forgotten all the non Microsoft keys [I always thought Microsoft could put a naughty joke in one of its core components, Bad Microsoft BAD] and the only way I found to repair was to enter in the repair system of the openSuSE DVD and to use efibootmgr to solve the things.&lt;/p&gt;

&lt;p&gt;Before to do that I have to clear [it is not like a charm, some times, it won’t clear anything, even after reboot] all the keys in the key store of the UEFI settings. I’m lucky to have this menu, others could be not-so-lucky as I was.&lt;/p&gt;

&lt;p&gt;Then entering the repair mode I had to fire this command: &lt;em&gt;efibootmgr -c -L openSuSE -d /dev/sda -p 1 -l \EFI\opensuse\shim.efi&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Explain:
-c : means that efibootmgr has to create a new boot entry
-L : it is the name of the boot entry in the UEFI menu
-d : takes the block device in which the efi things and the OS resides
-p : could mean partition to someone, that are my guys!
-l : it keeps the loader with all the path, DOS-like [because this shit was written by Microsoft], starting from the root of the partition containing the efi code, in my case efi has its own partition, the first&lt;/p&gt;

&lt;p&gt;Now if it happens to you, and you are not a Microsoft lover, you can repair (almost) easily the (UN)SecureBoot.&lt;/p&gt;

&lt;p&gt;Oh well, I was going to forget, to see if you have SecureBoot enabled, on a running Linux system, run this command below, 1 as enabled, 0 otherwise:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;od -An -t u1 /sys/firmware/efi/vars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c/data.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I hope you will never need this page.&lt;/p&gt;
</content:encoded>
		</item>
		<item>
			<title>Nerditure of a tech-nerd: Prologue [How to use ADB on a working Android phone to send sms through a PC]</title>
			<link>https://klez.me/en/2013/07/29/nerditure-of-a-tech-nerd-prologue-how-to-use-adb-on-a-working-android-phone-to-send-sms-through-a-pc/</link>
			<guid isPermaLink="true">https://klez.me/en/2013/07/29/nerditure-of-a-tech-nerd-prologue-how-to-use-adb-on-a-working-android-phone-to-send-sms-through-a-pc/</guid>
			<pubDate>Mon, 29 Jul 2013 18:38:37 +0200</pubDate>
			<dc:creator>kLeZ</dc:creator>
			<dc:language>en</dc:language>
			<category>adb</category>
			<category>android</category>
			<category>bash</category>
			<category>sms</category>
			<description>Hey all, this is the very first post of my blog and I want to thank myself for having decided, finally.</description>
			<content:encoded>&lt;p&gt;Hey all, this is the very first post of my blog and I want to thank myself for having decided, finally.&lt;/p&gt;

&lt;!--more--&gt;
&lt;p class=&quot;m-0 invisible zero-size&quot;&gt;
	&lt;a class=&quot;invisible&quot; id=&quot;read-more&quot; href=&quot;#&quot;&gt;Read more&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Today I needed to send a text message (S[hort]M[essage]S[ervice]) to my girlfriend, in order to instruct her on how to go somewhere in Rome (Italy) and grab a little thing for me.
There were a lot of informations to aggregate and I used EMACS, as I usually do, to keep them together. Grepped all the data from the Internet, placed on an EMACS new buffer, and cleaned some bytes here and there and the file is ready to be sent to her.&lt;/p&gt;

&lt;p&gt;Now I have to copy all the text by hand on the phone and send the text… No wait! I’m a smart tech-nerd so I have to find a better way to do so. Well, Unix fan, a bash under my fingers, an android phone connected to my laptop…. “Can I send an SMS through an Android Intent by hitting some adb shell commands?” I thought and I replied instantly “YES!”.&lt;/p&gt;

&lt;p&gt;Long story short: At the bottom of this page you can find a link to my github.com repo where I put the code I used to send the text message. Note that this could not work for you, and that will not be my fault, even if it brokes up your device. It worked for me, not guaranteed it can work for you.&lt;/p&gt;

&lt;p&gt;SO.&lt;/p&gt;

&lt;p&gt;I searched the Internet, thanks Holy Google, and found out that I can launch an Intent via shell on android with _am start &lt;something&gt;_, a useful answer is on this stackoverflow question: [http://stackoverflow.com/questions/6613889/how-to-start-an-android-application-from-the-command-line](http://stackoverflow.com/questions/6613889/how-to-start-an-android-application-from-the-command-line). Hm, interesting. Then I searched the sendto intent in the Android documentation: here&apos;s a link [http://developer.android.com/training/basics/intents/filters.html](http://developer.android.com/training/basics/intents/filters.html).
Guessed other details [here](http://stackoverflow.com/questions/4043490/how-do-i-send-an-sms-from-a-shell) and [there](http://stackoverflow.com/questions/6980090/bash-read-from-file-or-stdin). The final script can be found in my git repo, below.&lt;/something&gt;&lt;/p&gt;

&lt;p&gt;Here’s the link for you: &lt;a href=&quot;https://github.com/kLeZ/lin-utils/blob/master/adb-sms-send.sh&quot;&gt;https://github.com/kLeZ/lin-utils/blob/master/adb-sms-send.sh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;
</content:encoded>
		</item>
	</channel>
</rss>

