<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">

	<title>iamcal.com</title>
	<link rel="alternate" type="text/html" href="http://www.iamcal.com/"/>
	<link rel="icon" type="image/jpeg" href="http://www.iamcal.com/images/logo.gif"/>
	<info type="text/html" mode="escaped">All the links rom iamcal.com</info>
	<modified>2026-04-20T15:54:16Z</modified>
	<generator url="http://www.iamcal.com/">Flickr</generator>

	<entry>
		<title>Homespring.cloud</title>
		<link rel="alternate" type="text/html" href="http://www.iamcal.com/2026-04/homespringcloud/"/>
		<id>tag:iamcal.com,2005:/blog/10261/</id>
		<issued>2026-04-20T15:54:16Z</issued>
		<modified>2026-04-20T15:54:16Z</modified>
		<content type="text/html" mode="escaped">&lt;p&gt;After a mere 10 years in limbo, I&#039;ve finally finished &lt;a href=&quot;https://homespring.cloud/&quot;&gt;Homespring.cloud&lt;/a&gt;, an online interactive debugger for the Homespring language, based on my &lt;a href=&quot;https://github.com/iamcal/homespring.js&quot;&gt;JavaScript interpreter&lt;/a&gt;. It makes writing and running Homespring programs easier to learn and much more fun!&lt;/p&gt;

&lt;p class=&quot;bimg&quot;&gt;&lt;a href=&quot;https://homespring.cloud/&quot;&gt;&lt;img src=&quot;/images/blog/hello_world.png&quot; width=&quot;600&quot; height=&quot;318&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</content>
		<author>
			<name>Cal Henderson</name>
			<url>http://www.iamcal.com/</url>
		</author>
	</entry>
	<entry>
		<title>Adventures in code: PHP unit testing</title>
		<link rel="alternate" type="text/html" href="http://www.iamcal.com/2021-01/adventures-in-code-php-unit-testing/"/>
		<id>tag:iamcal.com,2005:/blog/10166/</id>
		<issued>2021-01-23T02:39:49Z</issued>
		<modified>2021-01-23T02:39:49Z</modified>
		<content type="text/html" mode="escaped">&lt;p&gt;If you want to make a PHP package available that works on versions of PHP from 5.3 to 8.0, testing is a giant pain. There are versions of phpunit that work for each, but none that works for all. Additionally, the basic class names changed at some point in the past. Getting all of this to run on Travis, including running code coverage (but only once for each build!) was a complex series of trials, but I finally figured out the correct &lt;a href=&quot;https://github.com/iamcal/pquery/blob/main/.travis.yml&quot;&gt;.travis.yml incantation&lt;/a&gt;, along with a &lt;a href=&quot;https://github.com/iamcal/pquery/blob/main/tests/init.php&quot;&gt;magic test wrapper&lt;/a&gt; for aliasing classes&lt;/p&gt;
</content>
		<author>
			<name>Cal Henderson</name>
			<url>http://www.iamcal.com/</url>
		</author>
	</entry>
	<entry>
		<title>7th May, 10:57 pm</title>
		<link rel="alternate" type="text/html" href="http://www.iamcal.com/2019-05/10140/"/>
		<id>tag:iamcal.com,2005:/blog/10140/</id>
		<issued>2019-05-07T22:57:59Z</issued>
		<modified>2019-05-07T22:57:59Z</modified>
		<content type="text/html" mode="escaped">&lt;p&gt;It turns out you can make a &lt;a href=&quot;https://github.com/kkuchta/css-only-chat&quot;&gt;browser based chat client&lt;/a&gt; without using any JS or forcing page reloads. Truly amazing/evil. Probably not practical, but does show a clever mechanism for allowing some dynamic data flow with JS disabled.&lt;/p&gt;
</content>
		<author>
			<name>Cal Henderson</name>
			<url>http://www.iamcal.com/</url>
		</author>
	</entry>
	<entry>
		<title>11th December, 11:29 pm</title>
		<link rel="alternate" type="text/html" href="http://www.iamcal.com/2017-12/esolangquiz/"/>
		<id>tag:iamcal.com,2005:/blog/10109/</id>
		<issued>2017-12-11T23:29:26Z</issued>
		<modified>2017-12-11T23:29:26Z</modified>
		<content type="text/html" mode="escaped">&lt;p&gt;Way back in July, I was inspired by Tripelbyte&#039;s &lt;a href=&quot;https://quiz.triplebyte.com/language-identification/&quot;&gt;language identification quiz&lt;/a&gt;, so I made &lt;a href=&quot;https://esolangquiz.iamcal.com/&quot;&gt;my own version for esoteric languages&lt;/a&gt;. Never got around to sharing it outside of Slack, but here it is.&lt;/p&gt;
</content>
		<author>
			<name>Cal Henderson</name>
			<url>http://www.iamcal.com/</url>
		</author>
	</entry>
	<entry>
		<title>TraceGL</title>
		<link rel="alternate" type="text/html" href="http://www.iamcal.com/2013-07/tracegl/"/>
		<id>tag:iamcal.com,2005:/blog/10098/</id>
		<issued>2013-07-12T21:12:00Z</issued>
		<modified>2013-07-12T21:12:00Z</modified>
		<content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;https://trace.gl/&quot;&gt;TraceGL&lt;/a&gt; is really stepping up the game of JS debugging in the browser.&lt;/p&gt;
</content>
		<author>
			<name>Cal Henderson</name>
			<url>http://www.iamcal.com/</url>
		</author>
	</entry>
	<entry>
		<title>Doom 3 Source</title>
		<link rel="alternate" type="text/html" href="http://www.iamcal.com/2013-04/doom-3-source/"/>
		<id>tag:iamcal.com,2005:/blog/10082/</id>
		<issued>2013-04-01T22:10:00Z</issued>
		<modified>2013-04-01T22:10:00Z</modified>
		<content type="text/html" mode="escaped">&lt;p&gt;This &lt;a href=&quot;http://fabiensanglard.net/doom3/index.php&quot;&gt;review of Doom 3&#039;s source release&lt;/a&gt; is full of tons of interesting stuff, even for non-graphics programmers. [via waferbaby]&lt;/p&gt;
</content>
		<author>
			<name>Cal Henderson</name>
			<url>http://www.iamcal.com/</url>
		</author>
	</entry>
	<entry>
		<title>Regexp Kung-fu</title>
		<link rel="alternate" type="text/html" href="http://www.iamcal.com/2013-03/regexp-kung-fu/"/>
		<id>tag:iamcal.com,2005:/blog/10021/</id>
		<issued>2013-03-28T05:10:00Z</issued>
		<modified>2013-03-28T05:10:00Z</modified>
		<content type="text/html" mode="escaped">&lt;p&gt;There are two answers guaranteed to show up on nearly every PHP question on Stack Overflow - use the mysqli/PDO extension instead of the deprecated mysql one (to avoid SQL injection), and that you can&#039;t parse HTML with regular expressions.&lt;/p&gt;

&lt;p&gt;With that in mind, my favorite two answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[How PDO is still vulnerable to SQL injection attacks](http://stackoverflow.com/questions/134099/are-pdo-prepared-statements-sufficient-to-prevent-sql-injection/12202218#12202218) by Anthony Ferrara&lt;/li&gt;
&lt;li&gt;[Parsing HTML with regular expressions](http://stackoverflow.com/questions/4231382/regular-expression-pattern-not-matching-anywhere-in-string/4234491#4234491) by Tom Christiansen&lt;/li&gt;
&lt;/ul&gt;
</content>
		<author>
			<name>Cal Henderson</name>
			<url>http://www.iamcal.com/</url>
		</author>
	</entry>
	<entry>
		<title>Github March Wrapup</title>
		<link rel="alternate" type="text/html" href="http://www.iamcal.com/2013-03/github-march-wrapup/"/>
		<id>tag:iamcal.com,2005:/blog/10022/</id>
		<issued>2013-03-25T17:02:00Z</issued>
		<modified>2013-03-25T17:02:00Z</modified>
		<content type="text/html" mode="escaped">&lt;p&gt;I&#039;ve posted a bunch of projects to Github in the last few months and haven&#039;t linked to them anywhere, so here&#039;s a quick roundup of recently notable projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[lib_timezones](https://github.com/iamcal/lib_timezones) - A PHP and JS library to handle user-specified timezones properly, with reasonable client-side auto detection.&lt;/li&gt;
&lt;li&gt;[lib_classsify](https://github.com/iamcal/lib_classify) - A partial PHP port of Github&#039;s own [linguist](https://github.com/github/linguist) which can automatically detect the programming language, given a code fragment.&lt;/li&gt;
&lt;li&gt;[js-emoji](https://github.com/iamcal/js-emoji) - A JavaScript library to allow display of Emoji in then browser for OSs without native support (anything that&#039;s not OSX 10.8 or iOS 6)&lt;/li&gt;
&lt;li&gt;[lib_autolink](https://github.com/iamcal/lib_autolink) - My old PHP URL-detection and linking library, updated to handle multiple protocols.&lt;/li&gt;
&lt;li&gt;[lib_solr_query](https://github.com/iamcal/lib_solr_query) - A PHP library to turn user-entered complex search queries into valid SOLR query syntax. Supports phrases, booleans, nesting, assertions and more.&lt;/li&gt;
&lt;/ul&gt;
</content>
		<author>
			<name>Cal Henderson</name>
			<url>http://www.iamcal.com/</url>
		</author>
	</entry>
	<entry>
		<title>Chrome Performance</title>
		<link rel="alternate" type="text/html" href="http://www.iamcal.com/2013-02/chrome-performance/"/>
		<id>tag:iamcal.com,2005:/blog/10011/</id>
		<issued>2013-02-03T07:28:00Z</issued>
		<modified>2013-02-03T07:28:00Z</modified>
		<content type="text/html" mode="escaped">&lt;p&gt;Chrome continue to get better and better. Ilya Grigorik explains some of the optimizations going on under the hood in &lt;a href=&quot;http://www.igvita.com/posa/high-performance-networking-in-google-chrome/&quot;&gt;this chapter&lt;/a&gt; from an upcoming performance book. If you work on the web, it&#039;s a fascinating read.&lt;/p&gt;
</content>
		<author>
			<name>Cal Henderson</name>
			<url>http://www.iamcal.com/</url>
		</author>
	</entry>
	<entry>
		<title>JSON Processing</title>
		<link rel="alternate" type="text/html" href="http://www.iamcal.com/2012-11/json-processing/"/>
		<id>tag:iamcal.com,2005:/blog/10048/</id>
		<issued>2012-11-10T01:00:00Z</issued>
		<modified>2012-11-10T01:00:00Z</modified>
		<content type="text/html" mode="escaped">&lt;p&gt;If you&#039;re working with JSON on the command line, then I can highly recommend &lt;a href=&quot;http://stedolan.github.com/jq/&quot;&gt;jq&lt;/a&gt; for simple data manipulation. It let&#039;s you mine into JSON data using an XPath-like query syntax and makes quick work of extracting the stuff you actually care about. The source is &lt;a href=&quot;https://github.com/stedolan/jq&quot;&gt;on the githubs&lt;/a&gt;.&lt;/p&gt;
</content>
		<author>
			<name>Cal Henderson</name>
			<url>http://www.iamcal.com/</url>
		</author>
	</entry>

</feed>
