<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/blog/rss.xsl" type="text/xsl" media="screen" ?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>regexp - jwz</title>
	<atom:link href="https://cdn.jwz.org/blog/tag/regexp/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.jwz.org/blog/</link>
	<description></description>
	<lastBuildDate>Thu, 08 Jan 2026 08:30:44 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://cdn.jwz.org/blog/tag/regexp/feed/"/>
	<item>
		<title>fail2ban GC</title>
		<link>https://www.jwz.org/blog/2026/01/fail2ban-gc/</link>
					<comments>https://www.jwz.org/blog/2026/01/fail2ban-gc/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Thu, 08 Jan 2026 08:30:44 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk1e</guid>

					<description><![CDATA[Over the years I've accumulated thousands of fail2ban regexps. It's a performance impact. Is there some way to figure out which ones have not been hit in a while, to remove?]]></description>
										<content:encoded><![CDATA[Over the years I've accumulated thousands of fail2ban regexps. It's a performance impact. Is there some way to figure out which ones have not been hit in a while, to remove? <P><A HREF="https://www.jwz.org/blog/2025/09/fail2ban-2/">Previously</A>, <A HREF="https://www.jwz.org/blog/2025/05/user-agent-blocking/">previously</A>, <A HREF="https://www.jwz.org/blog/2024/07/fail2ban/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/01/fail2ban-gc/feed/</wfw:commentRss>
			<slash:comments>35</slash:comments>
		
		
			</item>
		<item>
		<title>Today in &quot;Now you have two problems&quot; news:</title>
		<link>https://www.jwz.org/blog/2025/05/today-in-now-you-have-two-problems-news/</link>
					<comments>https://www.jwz.org/blog/2025/05/today-in-now-you-have-two-problems-news/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Tue, 27 May 2025 19:37:32 +0000</pubDate>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[conspiracies]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[corporations]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[mad science]]></category>
		<category><![CDATA[regexp]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykoZ</guid>

					<description><![CDATA[If you want a picture of the future, imagine a boot stamping on a human face forever a spicy autocompleter submitting software changes to a regular expression parser.

Also, you can't block it. As Kyle Reese reminded us, "It absolutely will not stop -- ever -- until you ...]]></description>
										<content:encoded><![CDATA[<DIV STYLE="text-align: center; width: 20%; max-width: 256px; margin: 0 0 1em 1em; float: right;"><IMG SRC="https://cdn.jwz.org/images/2011/img207.gif" noanim WIDTH=256 HEIGHT=123 data-size="256x123" STYLE="width: 100%; height: auto; border: 1px solid; margin-bottom: 0.5em"></DIV>If you want a picture of the future, imagine <strike><I style="opacity: 0.6">a boot stamping on a human face forever</I></strike> a spicy autocompleter submitting software changes to a <A HREF="https://github.com/dotnet/runtime/pull/115743">regular expression parser</A>. <P>Also, you <A HREF="https://github.com/orgs/community/discussions/159749">can't block it</A>. As Kyle Reese reminded us, "It absolutely will not stop -- <I>ever</I> -- until you accept its pull req&#x337;&#x329;&#x313;u&#x338;&#x33E;&#x35C;&#x1E19;&#x336;&#x308;s&#x336;&#x32B;&#x351;t&#x336;&#x319;&#x352;." <P><A HREF="https://www.jwz.org/blog/2018/06/lol-github/">Previously</A>, <A HREF="https://www.jwz.org/blog/2021/07/micros1-launches-automated-license-laundering-system/">previously</A>, <A HREF="https://www.jwz.org/blog/2022/10/copilot-lawsuit/">previously</A>, <A HREF="https://www.jwz.org/blog/2024/01/electronics-gives-us-a-way-of-classifying-things/">previously</A>, <A HREF="https://www.jwz.org/blog/2025/01/now-i-have-two-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2024/04/posting-this-so-that-people-will-stop-messaging-me-the-now-you-have-two-problems-joke/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/08/now-you-have-two-problems-el/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/10/dooming-us-to-inhuman-toil-etc-etc/">previously</A>, <A HREF="https://www.jwz.org/blog/2024/12/recent-books-4/">previously</A>, <A HREF="https://www.jwz.org/blog/2024/04/this-is-a-god-damned-war-crime/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/05/today-in-now-you-have-two-problems-news/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2011/img207.gif" width="256" height="123" length="2022" type="image/gif"/>
	</item>
		<item>
		<title>Now I have two problems</title>
		<link>https://www.jwz.org/blog/2025/01/now-i-have-two-problems/</link>
					<comments>https://www.jwz.org/blog/2025/01/now-i-have-two-problems/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Mon, 06 Jan 2025 21:12:52 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[regexp]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykfv</guid>

					<description><![CDATA[Lazyweb, why doesn't this regexp match in Perl 5.32.1, 5.34.3 or 5.18.2 but does in PHP and JS:

perl -le 'print 0 + ("ABCDE" =~ m/ABCF&#124;BCDE&#124;C(G)/);'

Changing nearly any character, including the C before the G, or removing the parens, makes it match.]]></description>
										<content:encoded><![CDATA[Lazyweb, why doesn't this regexp match in Perl 5.32.1, 5.34.3 or 5.18.2 but does in PHP and JS: <P><pre> perl -le 'print 0 + ("ABCDE" =~ m/ABCF|BCDE|C(G)/);'</pre> <P>Changing nearly any character, including the C before the G, or removing the parens, makes it match. <P><A HREF="https://www.jwz.org/blog/2021/04/cursed-computer-iceberg/">Previously</A>, <A HREF="https://www.jwz.org/blog/2018/08/now-you-have-two-problems-el/">previously</A>, <A HREF="https://www.jwz.org/blog/2016/04/zalgo-rly/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/05/so-this-happened/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/01/now-i-have-two-problems/feed/</wfw:commentRss>
			<slash:comments>38</slash:comments>
		
		
			</item>
		<item>
		<title>Mastodon stampede returns</title>
		<link>https://www.jwz.org/blog/2024/10/mastodon-stampede-returns/</link>
					<comments>https://www.jwz.org/blog/2024/10/mastodon-stampede-returns/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Wed, 30 Oct 2024 00:18:54 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykb4</guid>

					<description><![CDATA[If you've noticed that the Mastodon stampede DDoS is back, hammering your servers even though you have applied countermeasures -- that's because they CHANGED THEIR FUCKING USER AGENT for no good reason and without telling anybody.

2024-07-31 23:39:18: http.rb/5.2.0 ...]]></description>
										<content:encoded><![CDATA[<DIV STYLE="text-align: center; width: 25%; max-width: 900px; margin: 0 0 1em 1em; float: right;"><IMG SRC="https://cdn.jwz.org/images/scaled/768/2013/under_attack_pleas_stand_by_by_heder.png" WIDTH=900 HEIGHT=563 STYLE="width: 100%; height: auto; border: 1px solid; margin-bottom: 0.5em" SRCSET="https://cdn.jwz.org/images/2013/under_attack_pleas_stand_by_by_heder.png 900w, https://cdn.jwz.org/images/scaled/768/2013/under_attack_pleas_stand_by_by_heder.png 768w, https://cdn.jwz.org/images/scaled/640/2013/under_attack_pleas_stand_by_by_heder.png 640w, https://cdn.jwz.org/images/scaled/360/2013/under_attack_pleas_stand_by_by_heder.png 360w" SIZES="(max-width: 660px) 25vw, 18em" LOADING="lazy" data-size="900x563"></DIV> If you've noticed that the Mastodon stampede DDoS is back, hammering your servers even though you have <A HREF="https://www.jwz.org/blog/2022/11/mastodon-stampede/">applied countermeasures</A> -- that's because they <I>CHANGED THEIR FUCKING USER AGENT</I> for no good reason and without telling anybody. <P><pre style="overflow-x: auto; border: 1px solid #080; padding: 1em 0.5em;"><B>2024-07-31 23:39:18:</b> http.rb/5.2.0 (Mastodon/4.3.0-nightly.2024-07-25; +https&#x3A;//mastodon.social/) <b>2024-08-01 03:41:26:</b> Mastodon/4.3.0-nightly.2024-08-01 (http.rb/5.2.0; +https&#x3A;//mastodon.social/)</pre> <P>Ok, yes, technically the plans were on display in a toilet with a sign on the door saying <A HREF="https://github.com/mastodon/mastodon/pull/31192/commits/0b608ae3120253bbcc29a5e5a788c8c70f8f56bb">"Beware of the Leopard".</A> <P>Could anyone have <A HREF="https://github.com/mastodon/mastodon/pull/31192#issuecomment-2256160736">possibly have predicted</A> that this would be a problem? I guess we may never know. <P>Prepend <tt>"^Mastodon&#x5C;/|"</tt> to your regexps. <P>Sigh. <P><A HREF="https://www.jwz.org/blog/2022/11/mastodon-stampede/">Previously</A>, <A HREF="https://www.jwz.org/blog/2023/12/500-logs/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/08/mastodons-mastodonts/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2024/10/mastodon-stampede-returns/feed/</wfw:commentRss>
			<slash:comments>30</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2013/under_attack_pleas_stand_by_by_heder.png" width="900" height="563" length="432495" type="image/png"/>
	</item>
		<item>
		<title>WebCollage is 25 years old today</title>
		<link>https://www.jwz.org/blog/2024/06/webcollage-is-25-years-old-today/</link>
					<comments>https://www.jwz.org/blog/2024/06/webcollage-is-25-years-old-today/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Tue, 18 Jun 2024 19:49:42 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykVa</guid>

					<description><![CDATA[WebCollage feeds random noise into image search engines to create collages, and it has been running continuously on my site since 1999. That's... a lot of image scraping!

These days it's probably not the most interesting web toy, but I'm kind of shocked that it still works. ]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/webcollage/"><IMG SRC="https://cdn.jwz.org/images/scaled/768/2024/collage.jpg" WIDTH=800 HEIGHT=600 STYLE="width: 65%; height: auto; max-width: 800px; max-height: 600px; border: 1px solid; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/images/2024/collage.jpg 800w, https://cdn.jwz.org/images/scaled/768/2024/collage.jpg 768w, https://cdn.jwz.org/images/scaled/640/2024/collage.jpg 640w, https://cdn.jwz.org/images/scaled/360/2024/collage.jpg 360w" SIZES="(max-width: 660px) 65vw, 47em" LOADING="lazy" data-size="800x600">WebCollage</A> feeds random noise into image search engines to create collages, and it has been running continuously on my site since 1999. That's... a lot of image scraping! <P>These days it's probably not the most interesting web toy, but I'm kind of shocked that it still works. I only give it a little bit of attention maybe every six months, where I tweak URLs and regexps to track the latest obfuscated nonsense that the various search engines spit out. <P>Over the years of maintenance, WebCollage has given me some unwwanted insights into the "SEO" industry, almost from that vile industry's inception. When the same image keeps showing up repeatedly, it is a strong indicator that some site has managed to poison search results. Back in 1999, the most common technique was for the <tt>&lt;meta keywords&gt;</tt> tag to contain thousands of random words from a dictionary. Early adopters of this technique were porn and genealogy sites. How we have grown. <P>The very first version of WebCollage polled only Alta Vista and Yahoo! Six months later, I added Hot Bot. Google didn't show up until 2001, Lycos in 2002, LiveJournal in 2004, Flickr in 2005, Twitter in 2008, Bing and Instagram in 2013, and then Tumblr and Imgur in 2017. <P>In 2002, I got <I>an actual email</I> from a Google engineer asking me to <A HREF="https://www.jwz.org/blog/2002/12/yay-for-alta-vista-boo-for-google/">stop searching them</A>, because it was a significant enough portion of their traffic that it was annoying them. <P><A HREF="https://www.jwz.org/blog/2011/06/wiretap-picture-frame/">Previously</A>, <A HREF="https://www.jwz.org/blog/2002/12/yay-for-alta-vista-boo-for-google/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/02/i-hear-ai-is-the-new-hotness/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2024/06/webcollage-is-25-years-old-today/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2024/collage.jpg" width="800" height="600" length="94394" type="image/jpeg"/>
	</item>
		<item>
		<title>Posting this so that people will stop messaging me the &quot;Now you have two problems&quot; joke</title>
		<link>https://www.jwz.org/blog/2024/04/posting-this-so-that-people-will-stop-messaging-me-the-now-you-have-two-problems-joke/</link>
					<comments>https://www.jwz.org/blog/2024/04/posting-this-so-that-people-will-stop-messaging-me-the-now-you-have-two-problems-joke/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Wed, 10 Apr 2024 17:59:40 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[corporations]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykOy</guid>

					<description><![CDATA[Nazi hellsite does not understand regexps:

If a user typed in "Twitter.com," they would see "Twitter.com" as they typed it before hitting "Post." But, after submitting, the platform would show "X.com" in its place on the X for iOS app, without the user's permission, for ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://mashable.com/article/twitter-dot-com-posts-change-to-x-dot-com-ios"><IMG SRC="https://cdn.jwz.org/images/scaled/768/2024/images-5.fill.size_800x1294.v1712692.png" WIDTH=800 HEIGHT=1293 STYLE="width: 35%; height: auto; max-width: 800px; max-height: 1293px; border: 1px solid; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/images/2024/images-5.fill.size_800x1294.v1712692.png 800w, https://cdn.jwz.org/images/scaled/768/2024/images-5.fill.size_800x1294.v1712692.png 768w, https://cdn.jwz.org/images/scaled/640/2024/images-5.fill.size_800x1294.v1712692.png 640w, https://cdn.jwz.org/images/scaled/360/2024/images-5.fill.size_800x1294.v1712692.png 360w" SIZES="(max-width: 660px) 35vw, 26em" LOADING="lazy" data-size="800x1293">Nazi hellsite does not understand regexps:</A> <P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"> <P>If a user typed in "Twitter.com," they would see "Twitter.com" as they typed it before hitting "Post." But, after submitting, the platform would show "X.com" in its place on the X for iOS app, without the user's permission, for everyone viewing the post. <P>And shortly after this revelation, it became clear that there was another big issue: X was changing anything ending in "Twitter.com" to "X.com."</BLOCKQUOTE> <P>So you register your phishing domain netflitwitter dot com, post a link to that, and the preview text makes it look like it's going to netflix dot com instead. <P>Cool, cool. <P><A HREF="https://www.jwz.org/blog/2018/07/just-gonna-leave-this-regexp-here/">Previously</A>, <A HREF="https://www.jwz.org/blog/2016/04/zalgo-rly/">previously</A>, <A HREF="https://www.jwz.org/blog/2021/04/cursed-computer-iceberg/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/08/now-you-have-two-problems-el/">previously</A>, <A HREF="https://www.jwz.org/blog/2015/02/now-you-have-two-problems-and-one-of-them-is-flash/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/">previously</A>, <A HREF="https://www.jwz.org/blog/2024/02/do-not-drink-musks-sarcophagus-juice/">previously</A>, <A HREF="https://www.dnalounge.com/backstage/log/2023/10/10.html">previously</A>, <A HREF="https://www.jwz.org/blog/2022/11/comedy-is-legal-on-twitter/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2024/04/posting-this-so-that-people-will-stop-messaging-me-the-now-you-have-two-problems-joke/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2024/images-5.fill.size_800x1294.v1712692.png" width="800" height="1293" length="354479" type="image/png"/>
	</item>
		<item>
		<title>strftime</title>
		<link>https://www.jwz.org/blog/2023/07/strftime/</link>
					<comments>https://www.jwz.org/blog/2023/07/strftime/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Wed, 19 Jul 2023 16:52:02 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[regexp]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykBJ</guid>

					<description><![CDATA[PHP 8.1.0 deprecated strftime and related POSIX-based APIs. Their justification, paraphrasing:

Windows screwed the pooch with their buggy implementation of this in the OS, so instead of implementing a POSIX-compatible version in PHP for Windows, we're just going to throw up ]]></description>
										<content:encoded><![CDATA[PHP 8.1.0 deprecated <tt>strftime</tt> and related POSIX-based APIs. Their <A HREF="https://wiki.php.net/rfc/deprecations_php_8_1#strftime_and_gmstrftime">justification</A>, paraphrasing: <P><blockquote STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"> <P> Windows screwed the pooch with their buggy implementation of this in the OS, so instead of implementing a POSIX-compatible version in PHP for Windows, we're just going to throw up our hands and tell you not to use it at all. <P>By the way, of the 38 letter-codes that are used by '<tt>strftime</tt>', only <B><I>SIX</I></B> of those have the same semantics in PHP's '<tt>date</tt>' API, so have fun with that! </blockquote> <P>So I wrote <A HREF="https://www.jwz.org/hacks/strftime2date.php">this</A> to translate from '<tt>strftime</tt>' syntax to '<tt>date</tt>' syntax: <P><ul><TT><B># php strftime2date.php '%d/%b/%Y:%H:%M:%S %z'</b><BR><nobr>strftime('%d/%b/%Y:%H:%M:%S %z')</nobr> &nbsp;=> &nbsp;<wbr><nobr>'03/Feb/2023:04:05:06 -0800'</nobr><BR>&nbsp; &nbsp; <nobr>date('d/M/Y:H:i:s O')</nobr> &nbsp; &nbsp; &nbsp; &nbsp; => &nbsp;<wbr><nobr>'03/Feb/2023:04:05:06 -0800'</nobr></TT></ul> <P><A HREF="https://www.jwz.org/blog/2015/05/linty-linty/">Previously</A>, <A HREF="https://www.jwz.org/blog/2012/06/i-have-ported-xscreensaver-to-the-iphone/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2023/07/strftime/feed/</wfw:commentRss>
			<slash:comments>34</slash:comments>
		
		
			</item>
		<item>
		<title>Cursed Computer Iceberg</title>
		<link>https://www.jwz.org/blog/2021/04/cursed-computer-iceberg/</link>
					<comments>https://www.jwz.org/blog/2021/04/cursed-computer-iceberg/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sun, 11 Apr 2021 20:17:13 +0000</pubDate>
		<category><![CDATA[banned words]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[zalgo]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yjnJ</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<DIV STYLE="text-align: center; width: 100%; margin: 0 auto; overflow-y: auto; -webkit-overflow-scrolling: touch; max-height: 20em; border: 1px solid;"><A HREF="https://suricrasia.online/iceberg/"><IMG SRC="https://cdn.jwz.org/images/scaled/768/2021/iceberg.jpg" STYLE="width: 100%; height: auto; max-width: 1024px; max-height: 2091px; border: 0; box-sizing: border-box; margin: 0;" SRCSET="https://cdn.jwz.org/images/2021/iceberg.jpg 1024w, https://cdn.jwz.org/images/scaled/768/2021/iceberg.jpg 768w, https://cdn.jwz.org/images/scaled/640/2021/iceberg.jpg 640w, https://cdn.jwz.org/images/scaled/360/2021/iceberg.jpg 360w" SIZES="(max-width: 660px) 100vw, 72em" LOADING="lazy" data-size="1024x2091" WIDTH="1024" HEIGHT="2091"></A></DIV><P><DIV ALIGN=CENTER><A HREF="https://www.jwz.org/blog/2021/03/cursed-keyboard-image/">Previously</A>, <A HREF="https://www.jwz.org/blog/2020/08/cursed-lockscreen-image-of-the-week/">previously</A>, <A HREF="https://www.jwz.org/blog/2019/12/you-doom-us-all-to-inhuman-toil-for-the-one-whose-identifier-cannot-be-quoted-in-the-basic-multilingual-plane/">previously</A>, <A HREF="https://www.jwz.org/blog/2019/10/the-lines-of-code-that-changed-everything/">previously</A>, <A HREF="https://www.jwz.org/blog/2019/06/basilisk-2/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/10/this-was-an-iphone-and-now-it-is-a-cursed-orb/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/07/cursed-image-of-the-week-24385/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/07/just-gonna-leave-this-regexp-here/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/03/cursed-image-of-the-week-42408/">previously</A>.</DIV>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2021/04/cursed-computer-iceberg/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2021/iceberg.jpg" width="1024" height="2091" length="440188" type="image/jpeg"/>
	</item>
		<item>
		<title>now-you-have-two-problems.el</title>
		<link>https://www.jwz.org/blog/2018/08/now-you-have-two-problems-el/</link>
					<comments>https://www.jwz.org/blog/2018/08/now-you-have-two-problems-el/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Mon, 27 Aug 2018 03:25:07 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[mad science]]></category>
		<category><![CDATA[regexp]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yjFO</guid>

					<description><![CDATA["I sure am tired of typing extra backslashes in my isearches", I says to myself. "I wonder if anyone has done the unthinkable and implemented perlre in elisp?"

Yes:

(rxt-pcre-to-elisp "(abc&#124;def)\\w+\\d+")
;; => "\\(\\(?:abc\\&#124;def\\)\\)[_[:alnum:]]+[[:digit:]]+" ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://web.archive.org/web/20180827063105/https%3A//github.com/joddie/pcre2el#limitations-on-pcre-syntax"><IMG SRC="https://cdn.jwz.org/images/2016/j3g9xyp.png" STYLE="width: 35%; height: auto; max-width: 500px; max-height: 700px; border: 1px solid; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/images/2016/j3g9xyp.png 500w, https://cdn.jwz.org/images/scaled/360/2016/j3g9xyp.png 360w" SIZES="(max-width: 660px) 35vw, 26em" LOADING="lazy" data-size="500x700" WIDTH="500" HEIGHT="700"></A>"I sure am tired of typing extra backslashes in my isearches", I says to myself. "I wonder if anyone has done the unthinkable and implemented perlre in elisp?"<P>Yes:<P><div style="margin-left: 2em; text-indent: -1em;"><tt>(rxt-pcre-to-elisp <nobr>"(abc|def)\\w+\\d+")</nobr></tt><div style="margin-left: 4em; text-indent: -3.5em;"><tt>;; => <nobr>"\\(\\(?:abc\\|<wbr>def\\)\\)<wbr>[_[:alnum:]]+<wbr>[[:digit:]]+"</nobr></tt></div></div><P><A HREF="https://web.archive.org/web/20180827063105/https%3A//github.com/joddie/pcre2el#limitations-on-pcre-syntax">pcre2el.el:</A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><P>PCRE has a complicated syntax and semantics, only some of which can be translated into Elisp. The following subset of PCRE should be correctly parsed and converted:<P><ul> <li> parenthesis grouping <tt><nobr>( .. )</nobr></tt>, including shy matches <tt><nobr>(?: ... )</nobr></tt> </li><li> backreferences (various syntaxes), but only up to 9 per expression </li><li> alternation <tt>|</tt> </li><li> greedy and non-greedy quantifiers <tt>&#x2a;</tt>, <tt>&#x2a;?</tt>, <tt>+</tt>, <tt>+?</tt>, <tt>?</tt> and <tt>??</tt> (all of which are the same in Elisp as in PCRE) </li><li> numerical quantifiers <tt>{M,N}</tt> </li><li> beginning/end of string <tt>\A</tt>, <tt>\Z</tt> </li><li> string quoting <tt>\Q .. \E</tt> </li><li> word boundaries <tt>\b</tt>, <tt>\B</tt> (these are the same in Elisp) </li><li> single character escapes <tt>\a</tt>, <tt>\c</tt>, <tt>\e</tt>, <tt>\f</tt>, <tt>\n</tt>, <tt>\r</tt>, <tt>\t</tt>, <tt>\x</tt>, and <tt>\octal</tt> digits (but see below about non-ASCII characters) </li><li> character classes <tt>[...]</tt> including Posix escapes </li><li> character classes <tt>\d</tt>, <tt>\D</tt>, <tt>\h</tt>, <tt>\H</tt>, <tt>\s</tt>, <tt>\S</tt>, <tt>\v</tt>, <tt>\V</tt> both within character class brackets and outside </li><li> word and non-word characters <tt>\w</tt> and <tt>\W</tt> (Emacs has the same syntax, but its meaning is different) </li><li> <tt>s</tt> (single line) and <tt>x</tt> (extended syntax) flags, in regexp literals, or set within the expression via <tt><nobr>(?xs-xs)</nobr></tt> or <tt><nobr>(?xs-xs: .... )</nobr></tt> syntax </li><li> comments <tt><nobr>(?# ... )</nobr></tt> </li></ul><P>Most of the more esoteric PCRE features can't really be supported by simple translation to Elisp regexps. These include the different lookaround assertions, conditionals, and the "backtracking control verbs" <tt><nobr>(&#x2a; ...)</nobr></tt></BLOCKQUOTE><P>I am sad to report, however, that I can't get it to work in either xemacs 21.5.28 or emacs 22.1.1. (And MacPorts won't let you install emacs and xemacs simultaneously! How partisan!)<P>Amusing as it would have been had they tried to translate from one regexp syntax to another using regexps... they did not do that.<P>Also, my heart grew three sizes when I saw that the first line of the file contains<tt> <nobr>-&#x2a;- lexical-binding: t -&#x2a;-</nobr></tt><P><A HREF="https://web.archive.org/web/20180827063103/https%3A//docs.google.com/document/d/1pC7N32TnmDr2xzFW4HscA1DyAPPZnwILUH2_03UL6Jo/preview">Previously</A>, <A HREF="https://www.jwz.org/blog/2014/10/dooming-us-to-inhuman-toil-etc-etc/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/05/so-this-happened/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/">previously</A>, <A HREF="https://www.jwz.org/blog/2016/09/searching-for-finally-got-my-emacs-setup-just-how-i-like-it-yields-excellent-results/">previously</A>, <A HREF="https://www.jwz.org/blog/2012/12/lexical-binding-t/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/08/herbert-west-data-entry-specialist/">previously</A>, <A HREF="https://www.jwz.org/blog/2008/11/ejacs/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2018/08/now-you-have-two-problems-el/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2016/j3g9xyp.png" width="500" height="700" length="276840" type="image/png"/>
	</item>
		<item>
		<title>Just gonna leave this regexp here</title>
		<link>https://www.jwz.org/blog/2018/07/just-gonna-leave-this-regexp-here/</link>
					<comments>https://www.jwz.org/blog/2018/07/just-gonna-leave-this-regexp-here/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Mon, 16 Jul 2018 19:39:50 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[glitch]]></category>
		<category><![CDATA[mad science]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[zalgo]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yjDH</guid>

					<description><![CDATA[How to handle emoji:

Where other methods are not available, you can use the following regex (for Unicode 11.0 emoji). For clarity, it escapes all characters that can be invisible or are non-spacing -- otherwise you see some odd constructions like ([♀♂])?+ that are really ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://web.archive.org/web/20180827063103/https%3A//docs.google.com/document/d/1pC7N32TnmDr2xzFW4HscA1DyAPPZnwILUH2_03UL6Jo/preview">How to handle emoji:</A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><P>Where other methods are not available, you can use the following regex (for Unicode 11.0 emoji). For clarity, it escapes all characters that can be invisible or are non-spacing -- otherwise you see some odd constructions like <tt><b>([&#x2640;&#x2642;])?+</b></tt> that are really <tt><b>(\\x{200D}[&#x2640;&#x2642;]\\x{FE0F})?+</b></tt>.<P><BLOCKQUOTE STYLE="margin:1em;border:1px solid;padding:1em"><tt><b> ([&copy;&reg;&#x203C;&#x2049;&trade;&#x2139;&harr;-&#x2199;&#x21A9;-&#x21AA;&#x2328;&#x23CF;&#x23ED;-&#x23EF;&#x23F1;-&#x23F2;&#x23F8;-&#x23FA;&#x24C2;&#x25AA;-&#x25AB;&#x25B6;&#x25C0;&#x25FB;-&#x25FC;&#x2600;-&#x2604;&#x260E;&#x2611;&#x2618;&#x2620;&#x2622;-&#x2623;&#x2626;&#x262A;&#x262E;-&#x262F;&#x2638;-&#x263A;&#x2640;&#x2642;&#x265F;-&spades;&clubs;&hearts;-&diams;&#x2668;&#x267B;&#x267E;&#x2692;&#x2694;-&#x2697;&#x2699;&#x269B;-&#x269C;&#x26A0;&#x26B0;-&#x26B1;&#x26C8;&#x26CF;&#x26D1;&#x26D3;&#x26E9;&#x26F0;-&#x26F1;&#x26F4;&#x26F7;-&#x26F8;&#x2702;&#x2708;-&#x2709;&#x270F;&#x2712;&#x2714;&#x2716;&#x271D;&#x2721;&#x2733;-&#x2734;&#x2744;&#x2747;&#x2763;-&#x2764;&#x27A1;&#x2934;-&#x2935;&#x2B05;-&#x2B07;&#x3030;&#x303D;&#x3297;&#x3299;&#x1F170;-&#x1F171;&#x1F17E;-&#x1F17F;&#x1F202;&#x1F237;&#x1F321;&#x1F324;-&#x1F32C;&#x1F336;&#x1F37D;&#x1F396;-&#x1F397;&#x1F399;-&#x1F39B;&#x1F39E;-&#x1F39F;&#x1F3CD;-&#x1F3CE;&#x1F3D4;-&#x1F3DF;&#x1F3F5;&#x1F3F7;&#x1F43F;&#x1F4FD;&#x1F549;-&#x1F54A;&#x1F56F;-&#x1F570;&#x1F573;&#x1F576;-&#x1F579;&#x1F587;&#x1F58A;-&#x1F58D;&#x1F5A5;&#x1F5A8;&#x1F5B1;-&#x1F5B2;&#x1F5BC;&#x1F5C2;-&#x1F5C4;&#x1F5D1;-&#x1F5D3;&#x1F5DC;-&#x1F5DE;&#x1F5E1;&#x1F5E3;&#x1F5E8;&#x1F5EF;&#x1F5F3;&#x1F5FA;&#x1F6CB;&#x1F6CD;-&#x1F6CF;&#x1F6E0;-&#x1F6E5;&#x1F6E9;&#x1F6F0;&#x1F6F3;]<WBR>\\x{FE0F}|[&#x261D;&#x270C;-&#x270D;&#x1F574;&#x1F590;][\\x{FE0F}&#x1F3FB;-&#x1F3FF;]|[&#x270A;-&#x270B;&#x1F385;&#x1F3C2;&#x1F3C7;&#x1F442;-&#x1F443;&#x1F446;-&#x1F450;&#x1F466;-&#x1F467;&#x1F470;&#x1F472;&#x1F474;-&#x1F476;&#x1F478;&#x1F47C;&#x1F483;&#x1F485;&#x1F4AA;&#x1F57A;&#x1F595;-&#x1F596;&#x1F64C;&#x1F64F;&#x1F6C0;&#x1F6CC;&#x1F918;-&#x1F91C;&#x1F91E;-&#x1F91F;&#x1F930;-&#x1F936;&#x1F9B5;-&#x1F9B6;&#x1F9D1;-&#x1F9D5;]([&#x1F3FB;-&#x1F3FF;])?+|&#x1F1E6;[&#x1F1E8;-&#x1F1EC;&#x1F1EE;&#x1F1F1;-&#x1F1F2;&#x1F1F4;&#x1F1F6;-&#x1F1FA;&#x1F1FC;-&#x1F1FD;&#x1F1FF;]|&#x1F1E7;[&#x1F1E6;-&#x1F1E7;&#x1F1E9;-&#x1F1EF;&#x1F1F1;-&#x1F1F4;&#x1F1F6;-&#x1F1F9;&#x1F1FB;-&#x1F1FC;&#x1F1FE;-&#x1F1FF;]|&#x1F1E8;[&#x1F1E6;&#x1F1E8;-&#x1F1E9;&#x1F1EB;-&#x1F1EE;&#x1F1F0;-&#x1F1F5;&#x1F1F7;&#x1F1FA;-&#x1F1FF;]|&#x1F1E9;[&#x1F1EA;&#x1F1EC;&#x1F1EF;-&#x1F1F0;&#x1F1F2;&#x1F1F4;&#x1F1FF;]|&#x1F1EA;[&#x1F1E6;&#x1F1E8;&#x1F1EA;&#x1F1EC;-&#x1F1ED;&#x1F1F7;-&#x1F1FA;]|&#x1F1EB;[&#x1F1EE;-&#x1F1F0;&#x1F1F2;&#x1F1F4;&#x1F1F7;]|&#x1F1EC;[&#x1F1E6;-&#x1F1E7;&#x1F1E9;-&#x1F1EE;&#x1F1F1;-&#x1F1F3;&#x1F1F5;-&#x1F1FA;&#x1F1FC;&#x1F1FE;]|&#x1F1ED;[&#x1F1F0;&#x1F1F2;-&#x1F1F3;&#x1F1F7;&#x1F1F9;-&#x1F1FA;]|&#x1F1EE;[&#x1F1E8;-&#x1F1EA;&#x1F1F1;-&#x1F1F4;&#x1F1F6;-&#x1F1F9;]|&#x1F1EF;[&#x1F1EA;&#x1F1F2;&#x1F1F4;-&#x1F1F5;]|&#x1F1F0;[&#x1F1EA;&#x1F1EC;-&#x1F1EE;&#x1F1F2;-&#x1F1F3;&#x1F1F5;&#x1F1F7;&#x1F1FC;&#x1F1FE;-&#x1F1FF;]|&#x1F1F1;[&#x1F1E6;-&#x1F1E8;&#x1F1EE;&#x1F1F0;&#x1F1F7;-&#x1F1FB;&#x1F1FE;]|&#x1F1F2;[&#x1F1E6;&#x1F1E8;-&#x1F1ED;&#x1F1F0;-&#x1F1FF;]|&#x1F1F3;[&#x1F1E6;&#x1F1E8;&#x1F1EA;-&#x1F1EC;&#x1F1EE;&#x1F1F1;&#x1F1F4;-&#x1F1F5;&#x1F1F7;&#x1F1FA;&#x1F1FF;]|&#x1F1F4;&#x1F1F2;|&#x1F1F5;[&#x1F1E6;&#x1F1EA;-&#x1F1ED;&#x1F1F0;-&#x1F1F3;&#x1F1F7;-&#x1F1F9;&#x1F1FC;&#x1F1FE;]|&#x1F1F6;&#x1F1E6;|&#x1F1F7;[&#x1F1EA;&#x1F1F4;&#x1F1F8;&#x1F1FA;&#x1F1FC;]|&#x1F1F8;[&#x1F1E6;-&#x1F1EA;&#x1F1EC;-&#x1F1F4;&#x1F1F7;-&#x1F1F9;&#x1F1FB;&#x1F1FD;-&#x1F1FF;]|&#x1F1F9;[&#x1F1E6;&#x1F1E8;-&#x1F1E9;&#x1F1EB;-&#x1F1ED;&#x1F1EF;-&#x1F1F4;&#x1F1F7;&#x1F1F9;&#x1F1FB;-&#x1F1FC;&#x1F1FF;]|&#x1F1FA;[&#x1F1E6;&#x1F1EC;&#x1F1F2;-&#x1F1F3;&#x1F1F8;&#x1F1FE;-&#x1F1FF;]|&#x1F1FB;[&#x1F1E6;&#x1F1E8;&#x1F1EA;&#x1F1EC;&#x1F1EE;&#x1F1F3;&#x1F1FA;]|&#x1F1FC;[&#x1F1EB;&#x1F1F8;]|&#x1F1FD;&#x1F1F0;|&#x1F1FE;[&#x1F1EA;&#x1F1F9;]|&#x1F1FF;[&#x1F1E6;&#x1F1F2;&#x1F1FC;]|[\\#\\*0-9]<WBR>\\x{FE0F}<WBR>\\x{20E3}|&#x1F3F3;<WBR>\\x{FE0F}(\\x{200D}&#x1F308;)?+|[&#x1F46F;&#x1F93C;&#x1F9DE;-&#x1F9DF;](\\x{200D}[&#x2640;&#x2642;]\\x{FE0F})?+|[&#x26F9;&#x1F3CB;-&#x1F3CC;&#x1F575;][\\x{FE0F}&#x1F3FB;-&#x1F3FF;](\\x{200D}[&#x2640;&#x2642;]<WBR>\\x{FE0F})?+|[&#x1F3C3;-&#x1F3C4;&#x1F3CA;&#x1F46E;&#x1F471;&#x1F473;&#x1F477;&#x1F481;-&#x1F482;&#x1F486;-&#x1F487;&#x1F645;-&#x1F647;&#x1F64B;&#x1F64D;-&#x1F64E;&#x1F6A3;&#x1F6B4;-&#x1F6B6;&#x1F926;&#x1F937;-&#x1F939;&#x1F93D;-&#x1F93E;&#x1F9B8;-&#x1F9B9;&#x1F9D6;-&#x1F9DD;]((\\x{200D}[&#x2640;&#x2642;]\\x{FE0F}|[&#x1F3FB;-&#x1F3FF;](\\x{200D}[&#x2640;&#x2642;]\\x{FE0F})?+))?+|&#x1F441;\\x{FE0F}(\\x{200D}&#x1F5E8;\\x{FE0F})?+|&#x1F3F4;((\\x{200D}&#x2620;\\x{FE0F}|\\x{E0067}\\x{E0062}((\\x{E0065}<WBR>\\x{E006E}\\x{E0067}<WBR>\\x{E007F}|\\x{E0073}<WBR>\\x{E0063}<WBR>\\x{E0074}<WBR>\\x{E007F}|<WBR>\\x{E0077}<WBR>\\x{E006C}<WBR>\\x{E0073}<WBR>\\x{E007F}))))?+|&#x1F468;(([&#x1F3FB;-&#x1F3FF;](\\x{200D}(([&#x2695;-&#x2696;&#x2708;]\\x{FE0F}|[&#x1F33E;&#x1F373;&#x1F393;&#x1F3A4;&#x1F3A8;&#x1F3EB;&#x1F3ED;&#x1F4BB;-&#x1F4BC;&#x1F527;&#x1F52C;&#x1F680;&#x1F692;&#x1F9B0;-&#x1F9B3;])))?+|\\x{200D}(([&#x2695;-&#x2696;&#x2708;]<WBR>\\x{FE0F}|&#x1F466;(\\x{200D}&#x1F466;)?+|&#x1F467;(\\x{200D}[&#x1F466;-&#x1F467;])?+|[&#x1F468;-&#x1F469;]<WBR>\\x{200D}((&#x1F466;(\\x{200D}&#x1F466;)?+|&#x1F467;(\\x{200D}[&#x1F466;-&#x1F467;])?+))|&#x2764;\\x{FE0F}\\x{200D}((&#x1F48B;\\x{200D}&#x1F468;|&#x1F468;))|[&#x1F33E;&#x1F373;&#x1F393;&#x1F3A4;&#x1F3A8;&#x1F3EB;&#x1F3ED;&#x1F4BB;-&#x1F4BC;&#x1F527;&#x1F52C;&#x1F680;&#x1F692;&#x1F9B0;-&#x1F9B3;]))))?+|&#x1F469;(([&#x1F3FB;-&#x1F3FF;](\\x{200D}(([&#x2695;-&#x2696;&#x2708;]\\x{FE0F}|[&#x1F33E;&#x1F373;&#x1F393;&#x1F3A4;&#x1F3A8;&#x1F3EB;&#x1F3ED;&#x1F4BB;-&#x1F4BC;&#x1F527;&#x1F52C;&#x1F680;&#x1F692;&#x1F9B0;-&#x1F9B3;])))?+|\\x{200D}(([&#x2695;-&#x2696;&#x2708;]\\x{FE0F}|&#x1F466;(\\x{200D}&#x1F466;)?+|&#x1F467;(\\x{200D}[&#x1F466;-&#x1F467;])?+|&#x1F469;\\x{200D}((&#x1F466;(\\x{200D}&#x1F466;)?+|&#x1F467;(\\x{200D}[&#x1F466;-&#x1F467;])?+))|&#x2764;\\x{FE0F}\\x{200D}((&#x1F48B;\\x{200D}[&#x1F468;-&#x1F469;]|[&#x1F468;-&#x1F469;]))|[&#x1F33E;&#x1F373;&#x1F393;&#x1F3A4;&#x1F3A8;&#x1F3EB;&#x1F3ED;&#x1F4BB;-&#x1F4BC;&#x1F527;&#x1F52C;&#x1F680;&#x1F692;&#x1F9B0;-&#x1F9B3;]))))?+|[&#x231A;-&#x231B;&#x23E9;-&#x23EC;&#x23F0;&#x23F3;&#x25FD;-&#x25FE;&#x2614;-&#x2615;&#x2648;-&#x2653;&#x267F;&#x2693;&#x26A1;&#x26AA;-&#x26AB;&#x26BD;-&#x26BE;&#x26C4;-&#x26C5;&#x26CE;&#x26D4;&#x26EA;&#x26F2;-&#x26F3;&#x26F5;&#x26FA;&#x26FD;&#x2705;&#x2728;&#x274C;&#x274E;&#x2753;-&#x2755;&#x2757;&#x2795;-&#x2797;&#x27B0;&#x27BF;&#x2B1B;-&#x2B1C;&#x2B50;&#x2B55;&#x1F004;&#x1F0CF;&#x1F18E;&#x1F191;-&#x1F19A;&#x1F201;&#x1F21A;&#x1F22F;&#x1F232;-&#x1F236;&#x1F238;-&#x1F23A;&#x1F250;-&#x1F251;&#x1F300;-&#x1F320;&#x1F32D;-&#x1F335;&#x1F337;-&#x1F37C;&#x1F37E;-&#x1F384;&#x1F386;-&#x1F393;&#x1F3A0;-&#x1F3C1;&#x1F3C5;-&#x1F3C6;&#x1F3C8;-&#x1F3C9;&#x1F3CF;-&#x1F3D3;&#x1F3E0;-&#x1F3F0;&#x1F3F8;-&#x1F43E;&#x1F440;&#x1F444;-&#x1F445;&#x1F451;-&#x1F465;&#x1F46A;-&#x1F46D;&#x1F479;-&#x1F47B;&#x1F47D;-&#x1F480;&#x1F484;&#x1F488;-&#x1F4A9;&#x1F4AB;-&#x1F4FC;&#x1F4FF;-&#x1F53D;&#x1F54B;-&#x1F54E;&#x1F550;-&#x1F567;&#x1F5A4;&#x1F5FB;-&#x1F644;&#x1F648;-&#x1F64A;&#x1F680;-&#x1F6A2;&#x1F6A4;-&#x1F6B3;&#x1F6B7;-&#x1F6BF;&#x1F6C1;-&#x1F6C5;&#x1F6D0;-&#x1F6D2;&#x1F6EB;-&#x1F6EC;&#x1F6F4;-&#x1F6F9;&#x1F910;-&#x1F917;&#x1F91D;&#x1F920;-&#x1F925;&#x1F927;-&#x1F92F;&#x1F93A;&#x1F940;-&#x1F945;&#x1F947;-&#x1F970;&#x1F973;-&#x1F976;&#x1F97A;&#x1F97C;-&#x1F9A2;&#x1F9B0;-&#x1F9B4;&#x1F9B7;&#x1F9C0;-&#x1F9C2;&#x1F9D0;&#x1F9E0;-&#x1F9FF;]) </b></tt></blockquote> </blockquote><P>Dooming us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane:<P><blockquote STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"> Different programs may not identify emoji as being the same, which can clearly cause problems. For example, hashtags are commonly treated as identical even if they differ by case (#foo = #FOO = #Foo = #fOO). But hashtags #&#x1F385;&#x1F3FF; and #&#x1F385;&#x1F3FB; and #&#x1F385; may be treated the same on some systems (&cong; #santa, but language-neutral), but treated differently on others.</BLOCKQUOTE><P><A HREF="https://www.jwz.org/blog/2013/02/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-one-hundred-forty-characters/">Previously</A>, <A HREF="https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/">previously</A>, <A HREF="https://www.jwz.org/blog/2017/06/leave-britneys-command-and-control-server-alone/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/10/dooming-us-to-inhuman-toil-etc-etc/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/05/so-this-happened/">previously</A>, <A HREF="https://www.jwz.org/blog/2015/02/now-you-have-two-problems-and-one-of-them-is-flash/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/10/jwz-has-more-than-two-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/07/now-you-have-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/05/one-space-between-each-sentence-they-said-science-just-proved-them-wrong/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/04/this-is-the-only-taxonomy-anyone-will-ever-need/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/03/cursed-image-of-the-week-42408/">previously</A>, <A HREF="https://www.jwz.org/blog/2017/11/unicode-character-frowning-pile-of-poo-u1f979/">previously</A>, <A HREF="https://www.jwz.org/blog/2017/05/great-moments-in-texting/">previously</A>, <A HREF="https://www.jwz.org/blog/2017/03/unicode-supports-blackulas-now/">previously</A>, <A HREF="https://www.jwz.org/blog/2015/05/unicode-character-reversed-hand-with-middle-finger-extended-u1f595/">previously</A>, <A HREF="https://www.jwz.org/blog/2015/04/emoji-taxonomy/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/07/exterminate-all-rational-emoticons/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/06/emojiscript/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2018/07/just-gonna-leave-this-regexp-here/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>Leave Britney&#039;s Command and Control Server Alone!</title>
		<link>https://www.jwz.org/blog/2017/06/leave-britneys-command-and-control-server-alone/</link>
					<comments>https://www.jwz.org/blog/2017/06/leave-britneys-command-and-control-server-alone/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Wed, 07 Jun 2017 00:23:12 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[conspiracies]]></category>
		<category><![CDATA[mad science]]></category>
		<category><![CDATA[pranks]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[spam]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yir6</guid>

					<description><![CDATA[Turla's watering hole campaign: An updated Firefox extension abusing Instagram:

The extension uses a bit.ly URL to reach its C&#038;C, but the URL path is nowhere to be found in the extension code. In fact, it will obtain this path by using comments posted on a specific ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://web.archive.org/web/20170606225509/https%3A//www.welivesecurity.com/2017/06/06/turlas-watering-hole-campaign-updated-firefox-extension-abusing-instagram/"><IMG SRC="https://cdn.jwz.org/images/scaled/768/2017/britney-spears-instagram.png" STYLE="width: 65%; height: auto; max-width: 822px; max-height: 612px; border: 1px solid; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/images/2017/britney-spears-instagram.png 822w, https://cdn.jwz.org/images/scaled/768/2017/britney-spears-instagram.png 768w, https://cdn.jwz.org/images/scaled/640/2017/britney-spears-instagram.png 640w, https://cdn.jwz.org/images/scaled/360/2017/britney-spears-instagram.png 360w" SIZES="(max-width: 660px) 65vw, 47em" LOADING="lazy" data-size="822x612" WIDTH="822" HEIGHT="612">Turla's watering hole campaign: An updated Firefox extension abusing Instagram</A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><P>The extension uses a bit.ly URL to reach its C&amp;C, but the URL path is nowhere to be found in the extension code. In fact, it will obtain this path by using comments posted on a specific Instagram post. The one that was used in the analyzed sample was a comment about <A HREF="https://web.archive.org/web/20170607063103/https%3A//www.instagram.com/p/BO8gU41A45g/">a photo</A> posted to the Britney Spears official Instagram account.<P>The extension will look at each photo's comment and will compute a custom hash value. If the hash matches 183, it will then run this regular expression on the comment in order to obtain the path of the bit.ly URL:<P><tt>(?:\\u200d(?:#|@)(\\w)</tt><P>Looking at the photo's comments, there was only one for which the hash matches 183. This comment was posted on February 6, while the original photo was posted in early January. Taking the comment and running it through the regex, you get the following bit.ly URL:<P><tt>http&#x3a;//bit.ly/2kdhuHX</tt><P>Looking a bit more closely at the regular expression, we see it is looking for either <tt>@|#</tt> or the Unicode character <tt>\200d</tt>. This character is actually a non-printable character called 'Zero Width Joiner', normally used to separate emojis. Pasting the actual comment or looking at its source, you can see that this character precedes each character that makes the path of the bit.ly URL:<P><tt>smith2155&lt;200d&gt;#2hot ma&lt;200d&gt;ke lovei&lt;200d&gt;d to &lt;200d&gt;her, &lt;200d&gt;uupss &lt;200d&gt;#Hot &lt;200d&gt;#X</tt></BLOCKQUOTE><P><A HREF="https://www.jwz.org/blog/2006/03/the-demonic-spirit-of-jeff-koons-has-not-yet-been-chased-from-the-land/">Previously</A>, <A HREF="https://www.jwz.org/blog/2006/04/bottom-of-barrel-dangerously-overscraped-experts-warn/">previously</A>, <A HREF="https://www.jwz.org/blog/2007/10/steganography/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2017/06/leave-britneys-command-and-control-server-alone/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2017/britney-spears-instagram.png" width="822" height="612" length="488804" type="image/png"/>
	</item>
		<item>
		<title>Zalgo Rly</title>
		<link>https://www.jwz.org/blog/2016/04/zalgo-rly/</link>
					<comments>https://www.jwz.org/blog/2016/04/zalgo-rly/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Thu, 21 Apr 2016 00:24:33 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[tentacles]]></category>
		<category><![CDATA[zalgo]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yiZE</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<DIV STYLE="text-align: center; width: 100%; margin: 0 auto;"><A HREF="https://web.archive.org/web/20160421003105/http%3A//imgur.com/j3G9xyP"><IMG SRC="https://cdn.jwz.org/images/2016/j3g9xyp.png" STYLE="width: 100%; height: auto; max-width: 500px; max-height: 700px; border: 1px solid; box-sizing: border-box; margin: 2px 0;" SRCSET="https://cdn.jwz.org/images/2016/j3g9xyp.png 500w, https://cdn.jwz.org/images/scaled/360/2016/j3g9xyp.png 360w" SIZES="(max-width: 660px) 100vw, 72em" LOADING="lazy" data-size="500x700" WIDTH="500" HEIGHT="700"></A><P><A HREF="https://www.jwz.org/blog/2014/10/dooming-us-to-inhuman-toil-etc-etc/">Previously</A>, <A HREF="https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/05/so-this-happened/">previously</A>.</DIV>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2016/04/zalgo-rly/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2016/j3g9xyp.png" width="500" height="700" length="276840" type="image/png"/>
	</item>
		<item>
		<title>Piet Mondrian is Turing Complete</title>
		<link>https://www.jwz.org/blog/2016/01/piet-mondrian-is-turing-complete/</link>
					<comments>https://www.jwz.org/blog/2016/01/piet-mondrian-is-turing-complete/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Fri, 08 Jan 2016 11:36:52 +0000</pubDate>
		<category><![CDATA[art]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[mad science]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[toys]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yiVX</guid>

					<description><![CDATA[Program code will be in the form of abstract art. Piet uses 20 distinct colours. The 18 colours in the first 3 rows of the table are related cyclically.

The Piet language interpreter begins executing a program in the colour block which includes the upper left codel of the ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://web.archive.org/web/20160116024037/http%3A//www.dangermouse.net/esoteric/piet.html">Program code will be in the form of abstract art. Piet uses 20 distinct colours. The 18 colours in the first 3 rows of the table are related cyclically.</A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><div style="float:right; max-width: 60%; margin: 0 0 1em 1em; overflow:hidden"> <table border=1 cellpadding=3 cellspacing=0> <tr> <th>&nbsp;</th><th colspan="3">Lightness change</th> </tr> <tr> <th>Hue change</th><th>None</th><th>1 Darker</th><th>2 Darker</th> </tr> <tr> <th>None</th><td>&nbsp;</td><td>push</td><td>pop</td> </tr> <tr> <th>1 Step</th><td>add</td><td>subtract</td><td>multiply</td> </tr> <tr> <th>2 Steps</th><td>divide</td><td>mod</td><td>not</td> </tr> <tr> <th>3 Steps</th><td>greater</td><td>pointer</td><td>switch</td> </tr> <tr> <th>4 Steps</th><td>duplicate</td><td>roll</td><td>in(number)</td> </tr> <tr> <th>5 Steps</th><td>in(char)</td><td>out(number)</td><td>out(char)</td> </tr> </table></div> The Piet language interpreter begins executing a program in the colour block which includes the upper left codel of the program. The interpreter maintains a Direction Pointer (DP), initially pointing to the right. The DP may point either right, left, down or up. The interpreter also maintains a Codel Chooser (CC), initially pointing left. The CC may point either left or right. The directions of the DP and CC will often change during program execution. As it executes the program, the interpreter traverses the colour blocks of the program under the following rules: [...]</BLOCKQUOTE><P><DIV STYLE="text-align: center; font-size: smaller; width: 100%; margin: 0 auto; white-space: nowrap; clear: both; max-width: 500px;"><DIV STYLE="display: inline-block; width: 33.33%; max-width: 152px; padding: 0 6px 1em 6px; box-sizing: border-box; vertical-align: top; white-space: normal;"><A HREF="https://web.archive.org/web/20160115033025/http%3A//www.dangermouse.net/esoteric/piet/samples.html"><IMG SRC="https://cdn.jwz.org/images/2016/piet_hello_big.png" data-size="150x145" STYLE="width: 100%; height: auto; max-width: 150px; max-height: 145px; border: 1px solid; box-sizing: border-box; margin-bottom: 0.5em;"></A>Hello World </DIV><DIV STYLE="display: inline-block; width: 33.33%; max-width: 170px; padding: 0 6px 1em 6px; box-sizing: border-box; vertical-align: top; white-space: normal;"><A HREF="https://web.archive.org/web/20160115033025/http%3A//www.dangermouse.net/esoteric/piet/samples.html"><IMG SRC="https://cdn.jwz.org/images/2016/piet-4.gif" data-size="168x168" STYLE="width: 100%; height: auto; max-width: 168px; max-height: 168px; border: 1px solid; box-sizing: border-box; margin-bottom: 0.5em;" NOANIM></A>Print "Piet" </DIV><DIV STYLE="display: inline-block; width: 33.33%; max-width: 242px; padding: 0 6px 1em 6px; box-sizing: border-box; vertical-align: top; white-space: normal;"><A HREF="https://web.archive.org/web/20160115033025/http%3A//www.dangermouse.net/esoteric/piet/samples.html"><IMG SRC="https://cdn.jwz.org/images/2016/erat2_big.png" data-size="240x240" STYLE="width: 100%; height: auto; max-width: 240px; max-height: 240px; border: 1px solid; box-sizing: border-box; margin-bottom: 0.5em;"></A>Primes </DIV><BR><DIV STYLE="display: inline-block; width: 33.33%; max-width: 419px; padding: 0 6px 1em 6px; box-sizing: border-box; vertical-align: top; white-space: normal;"><A HREF="https://web.archive.org/web/20160115033025/http%3A//www.dangermouse.net/esoteric/piet/samples.html"><IMG SRC="https://cdn.jwz.org/images/2016/piet_pi_big.png" STYLE="width: 100%; height: auto; max-width: 417px; max-height: 312px; border: 1px solid; box-sizing: border-box; margin-bottom: 0.5em;" SRCSET="https://cdn.jwz.org/images/2016/piet_pi_big.png 417w, https://cdn.jwz.org/images/scaled/360/2016/piet_pi_big.png 360w" SIZES="(max-width: 660px) 34vw, 24em" LOADING="lazy" data-size="417x312" WIDTH="417" HEIGHT="312"></A>&pi; </DIV><DIV STYLE="display: inline-block; width: 33.33%; max-width: 402px; padding: 0 6px 1em 6px; box-sizing: border-box; vertical-align: top; white-space: normal;"><A HREF="https://web.archive.org/web/20160115033025/http%3A//www.dangermouse.net/esoteric/piet/samples.html"><IMG SRC="https://cdn.jwz.org/images/2016/piet_bfi_16.gif" data-size="400x472" STYLE="width: 100%; height: auto; max-width: 400px; max-height: 472px; border: 1px solid; box-sizing: border-box; margin-bottom: 0.5em;" NOANIM ></A> <A HREF="http://en.wikipedia.org/wiki/Brainfuck">Brainfuck</A> interpreter</DIV><DIV STYLE="display: inline-block; width: 33.33%; max-width: 402px; padding: 0 6px 1em 6px; box-sizing: border-box; vertical-align: top; white-space: normal;"><A HREF="https://web.archive.org/web/20160115033025/http%3A//www.dangermouse.net/esoteric/piet/samples.html"><IMG SRC="https://cdn.jwz.org/images/2016/gameoflifebig.png" STYLE="width: 100%; height: auto; max-width: 400px; max-height: 324px; border: 1px solid; box-sizing: border-box; margin-bottom: 0.5em;" SRCSET="https://cdn.jwz.org/images/2016/gameoflifebig.png 400w, https://cdn.jwz.org/images/scaled/360/2016/gameoflifebig.png 360w" SIZES="(max-width: 660px) 34vw, 24em" LOADING="lazy" data-size="400x324" WIDTH="400" HEIGHT="324"></A>Conway's Life </DIV></DIV><P>The <A HREF="https://en.wikipedia.org/wiki/Esoteric_programming_language">Esoteric programming language</A> page is remarkably complete -- I didn't know about a third of these!<P>I can't even decide if this counts as steganography. Imagine the computational load that could be lurking, un-executed, in museums around the world!<P><DIV STYLE="text-align: center; width: 100%; margin: 0 auto;"><VIDEO STYLE="width: 100%; height: auto; max-width: 480px; max-height: 190px; border: 1px solid; box-sizing: border-box; margin: 2px 0;" LOOP AUTOPLAY PLAYSINLINE MUTED WIDTH="480" HEIGHT="190"><SOURCE SRC="https://cdn.jwz.org/images/scaled/mp4/2015/fbdo10.mp4" TYPE="video/mp4" /></VIDEO><P><A HREF="https://www.jwz.org/blog/2002/11/apl-crosswords/">Previously</A>, <A HREF="https://www.jwz.org/blog/2012/05/turtles-all-the-way-down-or-gliders-or-glider-turtles/">previously</A>, <A HREF="https://www.jwz.org/blog/2015/03/ascii-fluid-dynamics/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/11/fourier-analysis-with-a-mechanical-computer/">previously</A>, <A HREF="https://www.jwz.org/blog/2012/03/haters-gonna-hate-tail-call-optimization/">previously</A>, <A HREF="https://www.jwz.org/blog/2010/09/visual-transistor-level-simulation-of-the-6502-in-javascript/">previously</A>, <A HREF="https://www.jwz.org/blog/2007/10/steganography/">previously</A>, <a href="https://www.jwz.org/blog/2015/02/now-you-have-two-problems-and-one-of-them-is-flash/">previously</a>, <a href="https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/">previously</a>.</DIV>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2016/01/piet-mondrian-is-turing-complete/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2016/piet_hello_big.png" width="150" height="145" length="764" type="image/png"/>
<enclosure url="https://cdn.jwz.org/images/2016/piet-4.gif" width="168" height="168" length="19058" type="image/gif"/>
<enclosure url="https://cdn.jwz.org/images/2016/erat2_big.png" width="240" height="240" length="4835" type="image/png"/>
<enclosure url="https://cdn.jwz.org/images/2016/piet_pi_big.png" width="417" height="312" length="4434" type="image/png"/>
	</item>
		<item>
		<title>Linty linty</title>
		<link>https://www.jwz.org/blog/2015/05/linty-linty/</link>
					<comments>https://www.jwz.org/blog/2015/05/linty-linty/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sun, 24 May 2015 06:47:15 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yiNB</guid>

					<description><![CDATA[I have spent the last few days down in the PHP Mines. Those fumes are really toxic. I'm pretty sure I've contracted pleurisy from inhaling Cheetos dust.

So DNA Lounge has an online store, which is an enormous, and ancient, and shitty, pile of PHP code. I have often ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/hacks/jwz-php-lint.pl"><VIDEO STYLE="width: 75%; height: auto; max-width: 585px; max-height: 242px; border: 1px solid; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" LOOP AUTOPLAY PLAYSINLINE MUTED WIDTH="585" HEIGHT="242"><SOURCE SRC="https://cdn.jwz.org/images/scaled/mp4/2015/anigif_optimized-7818-1432201062-11.mp4" TYPE="video/mp4" /></VIDEO></A>I have spent the last few days down in the PHP Mines. Those fumes are <I>really</I> toxic. I'm pretty sure I've contracted pleurisy from inhaling Cheetos dust.<P>So <A HREF="https://www.dnalounge.com/store/">DNA Lounge has an online store</A>, which is an enormous, and ancient, and shitty, pile of PHP code. I have <A HREF="https://www.jwz.org/blog/2015/04/dna-store-logins/">often</A> characterized it as "it's a pile of shit, but it's <I>our</I> pile of shit."<P>Well, now that I'm opening a <A HREF="https://www.dnalounge.com/backstage/log/2015/05/05.html">new nightclub</A>, I need to make that code be able to function when installed on a domain whose name is <A HREF="https://www.codeword-sf.com/">not</A> "dnalounge.com". As you can expect, this has been a process of discovering all kinds of hardcoded assumptions lurking in the bowels. It's like moving to a new house after you've been dug in for a decade: look at all this crap stuffed in the back of the closet that you didn't remember was there!<P>So there has been a lot of global search and replace, and a lot of variables being added and moved around, and that means destabilization, and that's bad, mmkay?<P>So I wrote a Perl program to do static analysis of PHP. And it parses PHP using regular expressions because fuck you that's why.<P>For your entertainment -- because I sincerely doubt that anyone who is not me will ever use this without lulz in their heart -- I give you <A HREF="https://www.jwz.org/hacks/jwz-php-lint.pl">jwz-php-lint.pl</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2015/05/linty-linty/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2015/anigif_optimized-7818-1432201062-11.gif" width="585" height="242" length="942592" type="image/gif"/>
	</item>
		<item>
		<title>Now you have two problems, and one of them is Flash.</title>
		<link>https://www.jwz.org/blog/2015/02/now-you-have-two-problems-and-one-of-them-is-flash/</link>
					<comments>https://www.jwz.org/blog/2015/02/now-you-have-two-problems-and-one-of-them-is-flash/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Mon, 16 Feb 2015 02:18:29 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yiEZ</guid>

					<description><![CDATA[Project Zero: (^Exploiting)\s(CVE-2015-0318)\s(in)\s*(Flash$)

Quick summary - it's a bug in the PCRE regex engine as used in Flash. Spoiler: it's exploitable. [...]

Below is what happens when we compile a regex that combines the \c escape sequence (which is intended to ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://web.archive.org/web/20150214152223/http%3A//googleprojectzero.blogspot.com/2015/02/exploitingscve-2015-0318sinsflash.html"><IMG SRC="https://cdn.jwz.org/images/2011/weirdmachines.jpg" STYLE="width: 50%; height: auto; max-width: 400px; max-height: 267px; border: 1px solid; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/images/2011/weirdmachines.jpg 400w, https://cdn.jwz.org/images/scaled/360/2011/weirdmachines.jpg 360w" SIZES="(max-width: 660px) 50vw, 36em" LOADING="lazy" data-size="400x267" WIDTH="400" HEIGHT="267">Project Zero: (^Exploiting)\s<I>(CVE-2015-0318)\s</I>(in)\s*(Flash$)</A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><P>Quick summary - it's a bug in the PCRE regex engine as used in Flash. Spoiler: it's exploitable. [...]<P>Below is what happens when we compile a regex that combines the \c escape sequence (which is intended to match a single ASCII character) with a multibyte UTF-8 character. A simple trigger for the bug is '\\c\xd0\x80+', below. [...]<P>So clearly something has gone wrong... The question is now how to leverage this invalid bytecode to get code execution.</BLOCKQUOTE><P><A HREF="https://www.jwz.org/blog/2014/05/so-this-happened/">Previously</A>, <A HREF="https://www.jwz.org/blog/2011/12/now-you-have-two-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/03/accidentally-turing-complete/">previously</A>, <A HREF="https://www.jwz.org/blog/2015/02/youtube-ditches-flash-and-it-hardly-matters/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/10/we-live-in-a-magical-future-where-strings-is-exploitable/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/10/dooming-us-to-inhuman-toil-etc-etc/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2015/02/now-you-have-two-problems-and-one-of-them-is-flash/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2011/weirdmachines.jpg" width="400" height="267" length="99532" type="image/jpeg"/>
	</item>
		<item>
		<title>&quot;jwz has more than two problems.&quot;</title>
		<link>https://www.jwz.org/blog/2014/10/jwz-has-more-than-two-problems/</link>
					<comments>https://www.jwz.org/blog/2014/10/jwz-has-more-than-two-problems/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Tue, 28 Oct 2014 19:17:12 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[fanboys]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yh_V</guid>

					<description><![CDATA[Why use PHP/RoR/Django for your CMS when you can use Perl?

(In fact, I have an abundance of problems. But Django ain't one.)]]></description>
										<content:encoded><![CDATA[<DIV ALIGN=CENTER><A HREF="https://web.archive.org/web/20141210011459/http%3A//www.reddit.com/r/programming/comments/2kkd63/why_use_phprordjango_for_your_cms_when_you_can/">Why use PHP/RoR/Django for your CMS when you can use Perl?</A><P>(In fact, I have an <I>abundance</I> of problems. But Django ain't one.)<P><A HREF="https://www.jwz.org/blog/2014/05/so-this-happened/">Previously</A>, <A HREF="https://www.jwz.org/blog/2011/12/now-you-have-two-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/">previously</A>.</DIV>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2014/10/jwz-has-more-than-two-problems/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>We live in a magical future where &quot;strings&quot; is exploitable.</title>
		<link>https://www.jwz.org/blog/2014/10/we-live-in-a-magical-future-where-strings-is-exploitable/</link>
					<comments>https://www.jwz.org/blog/2014/10/we-live-in-a-magical-future-where-strings-is-exploitable/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sun, 26 Oct 2014 00:26:42 +0000</pubDate>
		<category><![CDATA[big brother]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yh_L</guid>

					<description><![CDATA[What is this I can't even.

Many shell users, and certainly most of the people working in computer forensics or other fields of information security, have a habit of running /usr/bin/strings on binary files originating from the Internet. Their understanding is that the tool ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://web.archive.org/web/20141025185422/http%3A//lcamtuf.blogspot.com/2014/10/psa-dont-run-strings-on-untrusted-files.html"><IMG SRC="https://cdn.jwz.org/images/2011/weirdmachines.jpg" STYLE="width: 35%; height: auto; max-width: 400px; max-height: 267px; border: 1px solid; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/images/2011/weirdmachines.jpg 400w, https://cdn.jwz.org/images/scaled/360/2011/weirdmachines.jpg 360w" SIZES="(max-width: 660px) 35vw, 26em" LOADING="lazy" data-size="400x267" WIDTH="400" HEIGHT="267">What is this I can't even.</A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><P>Many shell users, and certainly most of the people working in computer forensics or other fields of information security, have a habit of running <tt>/usr/bin/strings</tt> on binary files originating from the Internet. Their understanding is that the tool simply scans the file for runs of printable characters and dumps them to stdout - something that is very unlikely to put you at any risk.<P>It is much less known that the Linux version of strings is an integral part of GNU binutils, a suite of tools that specializes in the manipulation of several dozen executable formats using a bundled library called libbfd. Other well-known utilities in that suite include <tt>objdump</tt> and <tt>readelf</tt>. [...]<P>In any case: the bottom line is that if you are used to running <tt>strings</tt> on random files, or depend on any <tt>libbfd</tt>-based tools for forensic purposes, you should probably change your habits.</BLOCKQUOTE><P><A HREF="https://www.jwz.org/blog/2014/03/accidentally-turing-complete/">Previously</A>, <A HREF="https://www.jwz.org/blog/2014/10/is-this-usb-thing-as-bad-as-it-sounds/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/04/the-awful-thing-about-getting-it-right-the-first-time-is-that-nobody-realizes-how-hard-it-was/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/04/heartbleed-hit-list/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/12/denial-of-service-via-hash-bucket-collisions/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2014/10/we-live-in-a-magical-future-where-strings-is-exploitable/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2011/weirdmachines.jpg" width="400" height="267" length="99532" type="image/jpeg"/>
	</item>
		<item>
		<title>Dooming us to inhuman toil, etc, etc.</title>
		<link>https://www.jwz.org/blog/2014/10/dooming-us-to-inhuman-toil-etc-etc/</link>
					<comments>https://www.jwz.org/blog/2014/10/dooming-us-to-inhuman-toil-etc-etc/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sun, 05 Oct 2014 07:07:52 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[glitch]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<category><![CDATA[zalgo]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yh-N</guid>

					<description><![CDATA[You'll be happy to know that this weekend I've dragged XScreenSaver kicking and screaming into 2003 and have made all the hacks that load text able to properly display UTF-8 input, and it's even anti-aliased.

But don't worry: while doing so, it still parses HTML using ...]]></description>
										<content:encoded><![CDATA[You'll be happy to know that this weekend I've dragged XScreenSaver kicking and screaming into 2003 and have made all the hacks that load text able to properly display UTF-8 input, and it's even anti-aliased.<P>But don't worry: while doing so, it still parses HTML using regular expressions. I would never re-make a classic hit like that.<P><DIV ALIGN=CENTER><A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/images/scaled/768/2014/zalgowars.png" STYLE="width: 100%; height: auto; max-width: 1169px; max-height: 495px; border: 1px solid; box-sizing: border-box; margin: 2px 0;" SRCSET="https://cdn.jwz.org/images/2014/zalgowars.png 1169w, https://cdn.jwz.org/images/scaled/1024/2014/zalgowars.png 1024w, https://cdn.jwz.org/images/scaled/768/2014/zalgowars.png 768w, https://cdn.jwz.org/images/scaled/640/2014/zalgowars.png 640w, https://cdn.jwz.org/images/scaled/360/2014/zalgowars.png 360w" SIZES="(max-width: 660px) 100vw, 72em" LOADING="lazy" data-size="1169x495" WIDTH="1169" HEIGHT="495"></A><P><A HREF="https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/">Previously</A>, <A HREF="https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/05/so-this-happened/">previously</A>.</DIV>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2014/10/dooming-us-to-inhuman-toil-etc-etc/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2014/zalgowars.png" width="1169" height="495" length="288063" type="image/png"/>
	</item>
		<item>
		<title>So this happened.</title>
		<link>https://www.jwz.org/blog/2014/05/so-this-happened/</link>
					<comments>https://www.jwz.org/blog/2014/05/so-this-happened/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Mon, 19 May 2014 03:15:27 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[fanboys]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yh4S</guid>

					<description><![CDATA[What is meant by "Now you have two problems"?

There is a popular quote by Jamie Zawinski:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

HOW IS BABBY FORMED?

I mention this only because it gives me a ]]></description>
										<content:encoded><![CDATA[<IMG SRC="https://cdn.jwz.org/images/2011/inputlanguages.jpg" STYLE="width: 35%; height: auto; max-width: 452px; max-height: 280px; border: 1px solid; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/images/2011/inputlanguages.jpg 452w, https://cdn.jwz.org/images/scaled/360/2011/inputlanguages.jpg 360w" SIZES="(max-width: 660px) 35vw, 26em" LOADING="lazy" data-size="452x280" WIDTH="452" HEIGHT="280"><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><A HREF="https://web.archive.org/web/20140518225626/http%3A//arstechnica.com/information-technology/2014/05/what-is-meant-by-now-you-have-two-problems/">What is meant by "Now you have two problems"?</A><P>There is a <A HREF="https://web.archive.org/web/20140424160443/http%3A//regex.info/blog/2006-09-15/247">popular quote by Jamie Zawinski</A>:<P><blockquote>Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.</blockquote><P><A HREF="https://web.archive.org/web/20140517104301/http%3A//knowyourmeme.com/memes/how-is-babby-formed">HOW IS BABBY FORMED?</A> </BLOCKQUOTE><P>I mention this only because it gives me a chance to tell you about one of the saddest features of my Twitter feed, which is that every couple of weeks, someone out there in the dunderweb @-mentions me with this super clever new variant they've just now thought up all by themselves on either "now you have two problems" or the <a href="https://www.jwz.org/hacks/">Law of Software Envelopment</a> (the latter usually sounds something like <I>"Hurf durf cloud durf Facebook hurf durf expands hurf durf git"</I>.)<P>Stop.<P>Stop. Please stop.<P>Staaaaahhhhhhhhhppp.<P>You are making a "GOT MILK"* joke here, people. It's the Twenty First God Damned Century. It is no longer the Nineteen Hundred and Nineties. It's time for some new jokes!<P>(Though I did get a kick out of <A HREF="https://www.jwz.org/blog/2011/12/now-you-have-two-problems/">this one</A> for a minute.)<P><A HREF="https://www.jwz.org/blog/2011/12/now-you-have-two-problems/">Previously</A>, <A HREF="https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/">previously</A>, <A HREF="https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2014/05/so-this-happened/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2011/inputlanguages.jpg" width="452" height="280" length="79898" type="image/jpeg"/>
	</item>
		<item>
		<title>Accidentally Turing-Complete</title>
		<link>https://www.jwz.org/blog/2014/03/accidentally-turing-complete/</link>
					<comments>https://www.jwz.org/blog/2014/03/accidentally-turing-complete/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Tue, 25 Mar 2014 17:50:57 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[pranks]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yh1u</guid>

					<description><![CDATA[Some things were not supposed to be Turing-complete. This is a collection of such accidents.

Pokemon Yellow: The interesting point about this speedrun is the bug it exploits. Turns out the game logic itself is Turing-complete in the sense that you can rewrite the assembly ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://web.archive.org/web/20131205043523/http%3A//beza1e1.tuxen.de/articles/accidentally_turing_complete.html"><IMG SRC="https://cdn.jwz.org/images/2011/weirdmachines.jpg" STYLE="width: 65%; height: auto; max-width: 400px; max-height: 267px; border: 1px solid; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/images/2011/weirdmachines.jpg 400w, https://cdn.jwz.org/images/scaled/360/2011/weirdmachines.jpg 360w" SIZES="(max-width: 660px) 65vw, 47em" LOADING="lazy" data-size="400x267" WIDTH="400" HEIGHT="267">Some things were not supposed to be Turing-complete. This is a collection of such accidents.</A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><P>Pokemon Yellow: The interesting point about this speedrun is the bug it exploits. Turns out the game logic itself is Turing-complete in the sense that you can rewrite the assembly itself with game actions. For example, someone turned the game into a MIDI player.<P>MediaWiki Templates: In MediaWiki you can define templates. Since they provide recursion, you can apparently implement lambda calculus.</BLOCKQUOTE><P><A HREF="https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/">Previously</A>, <A HREF="https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2014/03/accidentally-turing-complete/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2011/weirdmachines.jpg" width="400" height="267" length="99532" type="image/jpeg"/>
	</item>
		<item>
		<title>Canonical Comment Spam</title>
		<link>https://www.jwz.org/blog/2013/04/canonical-comment-spam/</link>
					<comments>https://www.jwz.org/blog/2013/04/canonical-comment-spam/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Fri, 26 Apr 2013 02:54:29 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[robots]]></category>
		<category><![CDATA[spam]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yhla</guid>

					<description><![CDATA["Spammer just exposed his template and the whole thing showed up in my comments."

{ {I have&#124;I've} been {surfing&#124;browsing} online more than {three&#124;3&#124;2&#124;4} hours today, yet I never found any interesting article like yours. {It's&#124;It is} pretty ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://web.archive.org/web/20140817092127/https%3A//gist.github.com/shanselman/5422230">"Spammer just exposed his template and the whole thing showed up in my comments."</A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><P>{ {I have|I've} been {surfing|browsing} online more than {three|3|2|4} hours today, yet I never found any interesting article like yours. {It's|It is} pretty worth enough for me. {In my opinion|Personally|In my view}, if all {webmasters|site owners|website owners|web owners} and bloggers made good content as you did, the {internet|net|web} will be {much more|a lot more} useful than ever before.| I {couldn't|could not} {resist|refrain from} commenting. {Very well|Perfectly|Well|Exceptionally well} written!| {I will|I'll} {right away|immediately} {take hold of|grab|clutch|grasp|seize|snatch} your {rss|rss feed} as I {can not|can't} {in finding|find|to find} your {email|e-mail} subscription {link|hyperlink} or {newsletter|e-newsletter} service. Do {you have|you've} any? {Please|Kindly} {allow|permit|let} me {realize|recognize|understand|recognise|know} {so that|in order that} I {may just|may|could} subscribe. Thanks.|<P><I>[ ...and so on, for hundreds more lines. ]</I></BLOCKQUOTE>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2013/04/canonical-comment-spam/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>The Turing Police say you have more than two problems.</title>
		<link>https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/</link>
					<comments>https://www.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Thu, 29 Dec 2011 02:37:13 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[pranks]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yhCs</guid>

					<description><![CDATA[Occupy Babel!

Hard-to-parse protocols require complex parsers. Complex, buggy parsers become weird machines for exploits to run on. Help stop weird machines today: Make your protocol context-free or regular!

Protocols and file formats that are Turing-complete input ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://web.archive.org/web/20120107195958/http%3A//www.cs.dartmouth.edu/~sergey/langsec/occupy/">Occupy Babel!</A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><P>Hard-to-parse protocols require complex parsers. Complex, buggy parsers become weird machines for exploits to run on. Help stop weird machines today: Make your protocol context-free or regular!<P><DIV ALIGN=CENTER><A HREF="https://web.archive.org/web/20120107195958/http%3A//www.cs.dartmouth.edu/~sergey/langsec/occupy/"><IMG SRC="https://cdn.jwz.org/images/2011/fullrecognition.jpg" STYLE="width: 45%; height: auto; max-width: 600px; max-height: 449px; border: 1px solid; margin: 2px;" SRCSET="https://cdn.jwz.org/images/2011/fullrecognition.jpg 600w, https://cdn.jwz.org/images/scaled/360/2011/fullrecognition.jpg 360w" SIZES="(max-width: 660px) 45vw, 33em" LOADING="lazy" data-size="600x449" WIDTH="600" HEIGHT="449"><IMG SRC="https://cdn.jwz.org/images/2011/weirdmachines.jpg" STYLE="width: 45%; height: auto; max-width: 400px; max-height: 267px; border: 1px solid; margin: 2px; vertical-align: top;" SRCSET="https://cdn.jwz.org/images/2011/weirdmachines.jpg 400w, https://cdn.jwz.org/images/scaled/360/2011/weirdmachines.jpg 360w" SIZES="(max-width: 660px) 45vw, 33em" LOADING="lazy" data-size="400x267" WIDTH="400" HEIGHT="267"></A></DIV><P>Protocols and file formats that are Turing-complete input languages are the worst offenders, because for them, recognizing valid or expected inputs is UNDECIDABLE: no amount of programming or testing will get it right.<P>A Turing-complete input language destroys security for generations of users. Avoid Turing-complete input languages!<P>Ensure computational equivalence of protocol endpoints: use only regular and context-free protocols!<P><DIV ALIGN=CENTER><A HREF="https://web.archive.org/web/20120107195958/http%3A//www.cs.dartmouth.edu/~sergey/langsec/occupy/"><IMG SRC="https://cdn.jwz.org/images/2011/inputlanguages.jpg" STYLE="width: 45%; height: auto; max-width: 452px; max-height: 280px; border: 1px solid; margin: 2px; vertical-align: top;" SRCSET="https://cdn.jwz.org/images/2011/inputlanguages.jpg 452w, https://cdn.jwz.org/images/scaled/360/2011/inputlanguages.jpg 360w" SIZES="(max-width: 660px) 45vw, 33em" LOADING="lazy" data-size="452x280" WIDTH="452" HEIGHT="280"><IMG SRC="https://cdn.jwz.org/images/2011/protocolendpoints.jpg" STYLE="width: 45%; height: auto; max-width: 460px; max-height: 276px; border: 1px solid; margin: 2px; vertical-align: top;" SRCSET="https://cdn.jwz.org/images/2011/protocolendpoints.jpg 460w, https://cdn.jwz.org/images/scaled/360/2011/protocolendpoints.jpg 360w" SIZES="(max-width: 660px) 45vw, 33em" LOADING="lazy" data-size="460x276" WIDTH="460" HEIGHT="276"></A></DIV></BLOCKQUOTE><P>Needless to say, you also <a href="https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/">doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane.</a>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2011/12/the-turing-police-say-you-have-more-than-two-problems/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2011/fullrecognition.jpg" width="600" height="449" length="165708" type="image/jpeg"/>
<enclosure url="https://cdn.jwz.org/images/2011/weirdmachines.jpg" width="400" height="267" length="99532" type="image/jpeg"/>
<enclosure url="https://cdn.jwz.org/images/2011/inputlanguages.jpg" width="452" height="280" length="79898" type="image/jpeg"/>
<enclosure url="https://cdn.jwz.org/images/2011/protocolendpoints.jpg" width="460" height="276" length="106949" type="image/jpeg"/>
	</item>
		<item>
		<title>You doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane.</title>
		<link>https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/</link>
					<comments>https://www.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sat, 26 Nov 2011 00:11:24 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[glitch]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[tentacles]]></category>
		<category><![CDATA[zalgo]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yhAT</guid>

					<description><![CDATA[RegEx match open tags except XHTML self-contained tags:

You can't parse [X]HTML with regex. Because HTML can't be parsed by regex. Regex is not a tool that can be used to correctly parse HTML. As I have answered in HTML-and-regex questions here so many times before, the use ]]></description>
										<content:encoded><![CDATA[<A HREF="https://web.archive.org/web/20111009133402/http%3A//stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454">RegEx match open tags except XHTML self-contained tags:</A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><p>You can't parse [X]HTML with regex. Because HTML can't be parsed by regex. Regex is not a tool that can be used to correctly parse HTML. As I have answered in HTML-and-regex questions here so many times before, the use of regex will not allow you to consume HTML. Regular expressions are a tool that is insufficiently sophisticated to understand the constructs employed by HTML. HTML is not a regular language and hence cannot be parsed by regular expressions. Regex queries are not equipped to break down HTML into its meaningful parts. so many times but it is not getting to me. Even enhanced irregular regular expressions as used by Perl are not up to the task of parsing HTML. You will never make me crack. HTML is a language of sufficient complexity that it cannot be parsed by regular expressions. Even Jon Skeet cannot parse HTML using regular expressions. Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp. Parsing HTML with regex summons tainted souls into the realm of the living. HTML and regex go together like love, marriage, and ritual infanticide. The &lt;center&gt; cannot hold it is too late. The force of regex and HTML together in the same conceptual space will destroy your mind like so much watery putty. If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes. HTML-plus-regexp will liquify the n​erves of the sentient whilst you observe, your psyche withering in the onslaught of horror. Rege̿̔̉x-based HTML parsers are the cancer that is killing StackOverflow <i>it is too late it is too late we cannot be saved</i> the trangession of a chi͡ld ensures regex will consume all living tissue (except for HTML which it cannot, as previously prophesied) <i>dear lord help us how can anyone survive this scourge</i> using regex to parse HTML has doomed humanity to an eternity of dread torture and security holes <i>using rege</i>x as a tool to process HTML establishes a brea<i>ch between this world</i> and the dread realm of c͒ͪo͛ͫrrupt entities (like SGML entities, but <i>more corrupt) a mere glimp</i>se of the world of reg​<b>ex parsers for HTML will ins</b>​tantly transport a p<i>rogrammer's consciousness i</i>nto a w<i>orl</i>d of ceaseless screaming, he comes<strike>, the pestilent sl</strike>ithy regex-infection wil​<b>l devour your HT</b>​ML parser, application and existence for all time like Visual Basic only worse <i>he comes he com</i>es <i>do not fi</i>​ght h<b>e com̡e̶s, ̕h̵i</b>​s un̨ho͞ly radiańcé de<i>stro҉ying all enli̍̈́̂̈́ghtenment, HTML tags <b>lea͠ki̧n͘g fr̶ǫm ̡yo​͟ur eye͢s̸ ̛l̕ik͏e liq</b>​uid p</i>ain, the song of re̸gular exp​re<strike>ssion parsing </strike>will exti<i>​nguish the voices of mor​<b>tal man from the sp</b>​here I can see it can you see ̲͚̖͔̙î̩́t̲͎̩̱͔́̋̀ it is beautiful t​</i>he f<code>inal snuf</code>fing o<i>f the lie​<b>s of Man ALL IS LOŚ͖̩͇̗̪̏̈́T A</b></i><b>LL I​S L</b>OST th<i>e pon̷y he come</i>s he c̶̮om<strike>es he co</strike><b><strike>me</strike>s t<i>he</i> ich​</b>or permeat<i>es al</i>l MY FAC<i>E MY FACE ᵒh god n<b>o NO NOO̼</b></i><b>O​O N</b>Θ stop t<i>he an​*̶͑̾̾​̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨ</i>e̠̅s<code> ͎a̧͈͖r̽̾̈́͒͑e</code> n<b>​ot rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ T</b>O͇̹̺ͅƝ̴ȳ̳ TH̘<b>Ë͖́̉ ͠P̯͍̭O̚​N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝</b>S̨̥̫͎̭ͯ̿̔̀ͅ</blockquote>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2011/11/you-doom-us-all-to-inhuman-toil-for-the-one-whose-name-cannot-be-expressed-in-the-basic-multilingual-plane/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>Mork keeps on giving: When the database worms eat into your murder trial</title>
		<link>https://www.jwz.org/blog/2011/07/mork-keeps-on-giving-when-the-database-worms-eat-into-your-murder-trial/</link>
					<comments>https://www.jwz.org/blog/2011/07/mork-keeps-on-giving-when-the-database-worms-eat-into-your-murder-trial/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Tue, 19 Jul 2011 20:27:25 +0000</pubDate>
		<category><![CDATA[big brother]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[doomed]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[nscp]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yghr</guid>

					<description><![CDATA[You may recall that back in 2004, I tried to extract the recently-visited URLs from Mozilla's history database, re-discovered some major, major insanity, and did some colorful swearing. See "When the database worms eat into your brain", the halfassed perl script I eventually ]]></description>
										<content:encoded><![CDATA[You may recall that back in 2004, I tried to extract the recently-visited URLs from Mozilla's history database, re-discovered some major, <I>major</I> insanity, and did some colorful swearing. See <A HREF="https://www.jwz.org/blog/2004/03/when-the-database-worms-eat-into-your-brain/">"When the database worms eat into your brain"</A>, the <A HREF="https://www.jwz.org/hacks/mork.pl">halfassed perl script</A> I eventually came up with, <A HREF="https://web.archive.org/web/20110515070801/https%3A//bugzilla.mozilla.org/show_bug.cgi?id=241438">RESOLVED WONTFIX bug 241438</A>, and where it all started, <A HREF="https://www.jwz.org/doc/mailsum.html">"Netscape Mail Summary Files", 1998</A>.<P>(For some reason, one of the wikitards thought that this bug report was of such significance to the Global Repository of All Human Knowledge that there's an entire <I>sub-section</I> on my Wikipedia page about it. I spent perhaps a grand total of 24 hours of my life thinking about this -- ok maybe 25 by now -- and this is what gets memorialized? WTF. Seriously. W the F.)<P>Anyway, you may be interested to know that seven years after that bug report, and thirteen years after it should have happened:<P><BLOCKQUOTE STYLE="margin:1em 4em;border:1px solid;padding:1em"><B><A HREF="https://web.archive.org/web/20110707144629/https%3A//twitter.com/chrisblizzard">@chrisblizzard</A></B> <I><A HREF="https://web.archive.org/web/20110719010235/https%3A//twitter.com/#!/chrisblizzard/status/88314721631076352">5 Jul 2011</A></I> <BR> I'm told that the last of mork has been excised from the Mozilla tree. (this is kind of for @shaver, but really for @jwz)</blockquote><P>But what brings us here today is a gentle reminder that when you write code this bad, you can actually <I>kill people</I>.<P>I'm leaving the DB-dump images in the following quote as a reminder of just how insane this code was. Think of these as skulls on sticks at the edge of the wasteland, saying <I>"Never pass this way again".</I><P><BR><A HREF="https://web.archive.org/web/20110726052615/http%3A//wordpress.bladeforensics.com/?p=357">Digital Evidence Discrepancies -- Casey Anthony Trial </A><P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><P>The digital forensic evidence in this case is of particular interest to me as it involved the recovery and analysis of a Mozilla Firefox history database. The Internet history records within this database turned out to be extremely important to the prosecution case as the existence of Google searches relating to "chloroform" and other possibly relevant records prior to the child's disappearance could have indicated premeditation. This, of course, could have meant the difference between a conviction for murder in the first degree and manslaughter if found guilty. The State of Florida also has the death penalty as a punishment option for capital crimes.<P>During a keyword search of Anthony's computer, a hit was found for the word "chloroform". The hit was identified in what appeared to be a Mork database belonging to Mozilla Firefox. The file was identified as residing in unallocated clusters, and rather surprisingly, is reported to have been intact. Furthermore, all of the blocks belonging to the file were said to be contiguous. [...]<P>He pointed out the discrepancy between the first analysis the sheriff’s office did that showed one visit to a website about chloroform and an analysis done later with a second program that appeared to show 84 visits. However, according to Baez, the first report showed a progression that made it clear that the 84 visits were actually to MySpace. This was a major discrepancy with critical digital evidence presented in an extremely serious trial. [...]<P>The Mork record containing "http://www.sci-spot.com/Chemistry/chloroform.htm" is identified as record 174EF. The Index record from the original file is highlighted and shown in Figure 10 below.<P><DIV ALIGN=CENTER><A HREF="https://web.archive.org/web/20110726052615/http%3A//wordpress.bladeforensics.com/?p=357"><IMG SRC="https://cdn.jwz.org/images/2011/mork-record-174ef.png" STYLE="width: 90%; height: auto; max-width: 613px; max-height: 167px; border: 1px solid; margin: 2px;" SRCSET="https://cdn.jwz.org/images/2011/mork-record-174ef.png 613w, https://cdn.jwz.org/images/scaled/360/2011/mork-record-174ef.png 360w" SIZES="(max-width: 660px) 90vw, 65em" LOADING="lazy" data-size="613x167" WIDTH="613" HEIGHT="167"></A><br>Figure 10</div><P>The entire record is contained within square brackets. The highlighted line above shows the full record. The first field 82 ("URL") is stored in cell 27F4B, as shown in Figure 11.<P><div align=center><A HREF="https://web.archive.org/web/20110726052615/http%3A//wordpress.bladeforensics.com/?p=357"><IMG SRC="https://cdn.jwz.org/images/2011/mork-field-27f4b.png" STYLE="width: 90%; height: auto; max-width: 643px; max-height: 132px; border: 1px solid; margin: 2px;" SRCSET="https://cdn.jwz.org/images/2011/mork-field-27f4b.png 643w, https://cdn.jwz.org/images/scaled/640/2011/mork-field-27f4b.png 640w, https://cdn.jwz.org/images/scaled/360/2011/mork-field-27f4b.png 360w" SIZES="(max-width: 660px) 90vw, 65em" LOADING="lazy" data-size="643x132" WIDTH="643" HEIGHT="132"></A><br>Figure 11</div><P>The second field 84 ("LastVisitDate") is stored in cell 27F4C, as shown in Figure 12 (2008-03-21 19:16:34 UTC / 2008-03-21 15:16:34 Local Time). Once again, this integer represents the number of micro-seconds from the 1st January 1970, 00:00:00 UTC.<P><div align=center><A HREF="https://web.archive.org/web/20110726052615/http%3A//wordpress.bladeforensics.com/?p=357"><IMG SRC="https://cdn.jwz.org/images/2011/mork-field-27f4c.png" STYLE="width: 90%; height: auto; max-width: 645px; max-height: 75px; border: 1px solid; margin: 2px;" SRCSET="https://cdn.jwz.org/images/2011/mork-field-27f4c.png 645w, https://cdn.jwz.org/images/scaled/640/2011/mork-field-27f4c.png 640w, https://cdn.jwz.org/images/scaled/360/2011/mork-field-27f4c.png 360w" SIZES="(max-width: 660px) 90vw, 65em" LOADING="lazy" data-size="645x75" WIDTH="645" HEIGHT="75"></A><br>Figure 12</div><P>The third field 85 ("FirstVisitDate") is stored in cell 27F4C. This is the same cell value as for ("LastVisitDate") and indicates this is the first visit to this web site during the scope of the current recorded history. The First and Last visit times are the same.<P>The fourth field 83 (“Referrer”) is stored in cell 27F49, as shown in Figure 13.<P><div align=center><A HREF="https://web.archive.org/web/20110726052615/http%3A//wordpress.bladeforensics.com/?p=357"><IMG SRC="https://cdn.jwz.org/images/2011/mork-field-27f49.png" STYLE="width: 90%; height: auto; max-width: 646px; max-height: 95px; border: 1px solid; margin: 2px;" SRCSET="https://cdn.jwz.org/images/2011/mork-field-27f49.png 646w, https://cdn.jwz.org/images/scaled/640/2011/mork-field-27f49.png 640w, https://cdn.jwz.org/images/scaled/360/2011/mork-field-27f49.png 360w" SIZES="(max-width: 660px) 90vw, 65em" LOADING="lazy" data-size="646x95" WIDTH="646" HEIGHT="95"></A><br>Figure 13</div><P>There are two critical points to make with this record. Firstly, there is no field 86 ("VisitCount") therefore this URL has only been visited once (not 84 times). This is further corroborated by the fact that field 85 ("FirstVisitDate") shows the exact same date/time as the "LastVisitDate". The second point is that the visit was recorded at 15:16:34 hours (local time) and NOT at 15:16:13 hours as was stated during the trial (from the report produced by the second forensic tool).</blockquote><P><br><P>(Let me emphasize that those images above are not hex dumps or something: that's the <i>actual, literal text</i> of this file format!)<p><A HREF="https://www.jwz.org/blog/2004/03/when-the-database-worms-eat-into-your-brain/">Previously</A>, <A HREF="https://www.jwz.org/blog/2011/07/kids-today/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2011/07/mork-keeps-on-giving-when-the-database-worms-eat-into-your-murder-trial/feed/</wfw:commentRss>
			<slash:comments>21</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2011/mork-record-174ef.png" width="613" height="167" length="10348" type="image/png"/>
<enclosure url="https://cdn.jwz.org/images/2011/mork-field-27f4b.png" width="643" height="132" length="13518" type="image/png"/>
<enclosure url="https://cdn.jwz.org/images/2011/mork-field-27f4c.png" width="645" height="75" length="9942" type="image/png"/>
<enclosure url="https://cdn.jwz.org/images/2011/mork-field-27f49.png" width="646" height="95" length="8476" type="image/png"/>
	</item>
		<item>
		<title>State of the Onion, and screen savers</title>
		<link>https://www.jwz.org/blog/2004/08/state-of-the-onion-and-screen-savers/</link>
					<comments>https://www.jwz.org/blog/2004/08/state-of-the-onion-and-screen-savers/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Fri, 20 Aug 2004 22:28:00 +0000</pubDate>
		<category><![CDATA[bsod]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/Bbx3</guid>

					<description><![CDATA[The State of the Onion #8: Larry Wall's "State of the Onion" speeches are always really entertaining: they're nominally about the current state of Perl, but really they're about all kinds of things. The latest one was mostly about his recent health problems, but also about ...]]></description>
										<content:encoded><![CDATA[<a href="https://web.archive.org/web/20040820074255/http%3A//www.perl.com/pub/a/2004/08/18/onion.html"> The State of the Onion #8:</a> Larry Wall's "State of the Onion" speeches are always really entertaining: they're nominally about the current state of Perl, but really they're about all kinds of things. The latest one was mostly about his recent health problems, but also about community, cognition, and design. This time, instead of slides, he ran <a href="https://www.jwz.org/xscreensaver/">screen savers</a> and related the behavior of each to what he was talking about. <p><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"><P> [BSOD]<BR> <IMG SRC="https://cdn.jwz.org/xscreensaver/screenshots/bsod.jpg" STYLE="width: 70%; height: auto; max-width: 200px; max-height: 150px; border: 1px solid; margin: 0 0 1em 1em; float: right;"> This particular screensaver fools me more often than I care to admit. The problem is that the more computers you've used, the more different kinds of crashes you've seen. And mentally, you classify them all in the "Oh, shit!" category, which is a category the brain is very efficient at processing. <p> On the other hand, the part of your brain that says "Hey, that's the crash screen for a different operating system, dufus!" -- that part operates at a much slower pace. The brain is chock full of shortcuts, and orthogonality be screwed. Optimizers cheat, and sometimes they get caught cheating. With this screensaver, you can catch your own brain's optimizer cheating. </BLOCKQUOTE>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2004/08/state-of-the-onion-and-screen-savers/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/screenshots/bsod.jpg" width="200" height="150" length="122169" type="image/jpeg"/>
	</item>
		<item>
		<title>perl and unicode go together like apples and razor blades</title>
		<link>https://www.jwz.org/blog/2003/09/perl-and-unicode-go-together-like-apples-and-razor-blades/</link>
					<comments>https://www.jwz.org/blog/2003/09/perl-and-unicode-go-together-like-apples-and-razor-blades/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Tue, 16 Sep 2003 20:06:00 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[fanboys]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[regexp]]></category>
		<guid isPermaLink="false">https://jwz.org/b/A-5C</guid>

					<description><![CDATA[That scrmable thing has really been making the rounds: I've seen the text translated into three or four other (human) languages now, not to mention all the people writing their own scripts in their marginalized geek-language du jour.

But my script was malfunctioning for a ...]]></description>
										<content:encoded><![CDATA[That <a HREF="https://www.jwz.org/blog/2003/09/scrmable/"> scrmable thing</a> has really been making the rounds: I've seen the text translated into three or four other (human) languages now, not to mention all the people writing their own scripts in their marginalized geek-language du jour. <p> But my script was malfunctioning for a bunch of people, and I finally figured out why. Fucking Unicode again. If <tt>$LANG</tt> contains <tt>"utf8"</tt> (which is the default on recent Red Hat systems), then <tt>"^\w"</tt> doesn't work right, among other things. Check this out: <p><ul><nobr> <tt>setenv LANG en_US<BR> echo -n "foo.bar" | \<BR> perl -e '$_ = &lt;&gt;; print join (" | ", split (/([^\w]+)/)) . "\n";'<p> </tt>&nbsp; &nbsp; &nbsp; ===&gt;<tt> "foo | . | bar" </tt> <i>(right)</i><tt><p> setenv LANG en_US.utf8<BR> echo -n "foo.bar" | \<BR> perl -e '$_ = &lt;&gt;; print join (" | ", split (/([^\w]+)/)) . "\n";'<p> </tt>&nbsp; &nbsp; &nbsp; ===&gt;<tt> "foo.bar"</tt> <i>(wrong!)</i></nobr></ul> <p> It works fine in both cases if you do <nobr><tt>$_ = "foo.bar"</tt></nobr> instead of reading it from stdin. <p> perl-5.8.0-88, Red Hat 9. Hate. ]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2003/09/perl-and-unicode-go-together-like-apples-and-razor-blades/feed/</wfw:commentRss>
			<slash:comments>32</slash:comments>
		
		
			</item>
	</channel>
</rss>
