<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Archive on Daniel Doezema's Blog</title><link>https://dan.doezema.com/posts/</link><description>Recent content in Archive on Daniel Doezema's Blog</description><generator>Hugo</generator><language>en-US</language><copyright>&amp;copy; 2024 Daniel Doezema</copyright><lastBuildDate>Wed, 01 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://dan.doezema.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Illocutionary Force In Prompt Engineering</title><link>https://dan.doezema.com/2026/07/illocutionary-force-in-prompt-engineering/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2026/07/illocutionary-force-in-prompt-engineering/</guid><description>&lt;p&gt;While working with early GitHub Copilot I would use a lot of short utterances. (e.g., &amp;ldquo;can we do that?&amp;rdquo; or &amp;ldquo;That&amp;rsquo;s not right.&amp;rdquo;) I found that the model often would ignore the context of the conversation and answer in an overly literal way. I then would be forced to undo any changes and re-prompt with a more explicit request.&lt;/p&gt;
&lt;p&gt;Wanting to fix this problem, I thought &amp;ldquo;Why is it that a colleague and I can rapid fire debug an issue (using only a few words) while fully understanding each other? How do humans pick up on intent so naturally?&lt;/p&gt;</description></item><item><title>Goard — Project Management for Agent Swarms</title><link>https://dan.doezema.com/2026/06/goard-project-management-for-agent-swarms/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2026/06/goard-project-management-for-agent-swarms/</guid><description>&lt;h2 id="background" class="relative group"&gt;Background &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#background" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;I&amp;rsquo;ve recently been tinkering with setting up swarms of long-lived AI agents that organized and self-assemble via a popular slack clone. I found that while they&amp;rsquo;re pretty good at holding a conversation with one another, they&amp;rsquo;re terrible at keeping track and organizing an actual project.&lt;/p&gt;
&lt;p&gt;I tried adapting existing open-source trackers with mixed results. They were just too configuration heavy due to the need to design for humans and orgs with bespoke workflows.&lt;/p&gt;</description></item><item><title>Tail Multiple Logs with Capistrano</title><link>https://dan.doezema.com/2017/08/tail-multiple-logs-with-capistrano/</link><pubDate>Fri, 11 Aug 2017 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2017/08/tail-multiple-logs-with-capistrano/</guid><description>&lt;p&gt;Here&amp;rsquo;s a quick and easy way to tail log files from multiple hosts using Capistrano and the Foreman gem.&lt;/p&gt;
&lt;h2 id="capistrano-task" class="relative group"&gt;Capistrano Task &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#capistrano-task" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;First you&amp;rsquo;ll need to make sure the &lt;code&gt;foreman&lt;/code&gt; gem is installed. This can be done globally using &lt;code&gt;gem install foreman&lt;/code&gt;, or by adding &lt;code&gt;gem 'foreman'&lt;/code&gt; to your &lt;code&gt;Gemfile&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Next, create a new Capistrano task file called &lt;code&gt;tail.rake&lt;/code&gt; and place it in the &lt;code&gt;lib/capistrano/tasks&lt;/code&gt; directory; Copy &amp;amp; paste the following code into that file.&lt;/p&gt;</description></item><item><title>Add Eloquent ORM Tab to PHP Debug Bar</title><link>https://dan.doezema.com/2015/08/php-debugbar-eloquent-collector/</link><pubDate>Sun, 30 Aug 2015 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2015/08/php-debugbar-eloquent-collector/</guid><description>&lt;p&gt;Using Eloquent outside of a Laravel project? &amp;ndash; &lt;em&gt;&lt;strong&gt;Me too!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="collector-class" class="relative group"&gt;Collector Class &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#collector-class" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PHPDebugBarEloquentCollector&lt;/span&gt; &lt;span class="k"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;\DebugBar\DataCollector\PDO\PDOCollector&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="fm"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;parent&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="na"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;addConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getTraceablePdo&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Eloquent PDO&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * @return Illuminate\Database\Capsule\Manager;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getEloquentCapsule&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ... Return your Illuminate\Database\Capsule\Manager instance here...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * @return PDO
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getEloquentPdo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getEloquentCapsule&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getConnection&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getPdo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * @return \DebugBar\DataCollector\PDO\TraceablePDO
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getTraceablePdo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;\DebugBar\DataCollector\PDO\TraceablePDO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getEloquentPdo&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Override
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;eloquent_pdo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Override
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getWidgets&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;eloquent&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;icon&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;inbox&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;widget&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;PhpDebugBar.Widgets.SQLQueriesWidget&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;map&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;eloquent_pdo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;default&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;[]&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;eloquent:badge&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;map&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;eloquent_pdo.nb_statements&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;default&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="collector-registration" class="relative group"&gt;Collector Registration &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#collector-registration" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;require_once&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/path/to/PHPDebugBarEloquentCollector.php&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$debugbar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;DebugBar\StandardDebugBar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$debugbar&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;addCollector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;PHPDebugBarEloquentCollector&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="result" class="relative group"&gt;Result &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#result" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;






 
 
&lt;figure&gt;&lt;img src="https://dan.doezema.com/images/phpdebugbar-eloquent-tab.png" alt="Eloquent Tab in the PHP Debug Bar" class="mx-auto my-0 rounded-md" /&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Doctrine 2 PDO Object</title><link>https://dan.doezema.com/2015/08/doctrine-2-pdo-object/</link><pubDate>Mon, 17 Aug 2015 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2015/08/doctrine-2-pdo-object/</guid><description>&lt;p&gt;Where, oh where, is that pesky Doctrine 2 PDO object&amp;hellip;&lt;/p&gt;
&lt;p&gt;Doctrine actually uses a base class called &lt;code&gt;\Doctrine\DBAL\Driver\PDOConnection&lt;/code&gt; which extends the native PHP &lt;code&gt;PDO&lt;/code&gt; class. It&amp;rsquo;s used by all PDO-based drivers as the common database connection interface.&lt;/p&gt;
&lt;h2 id="code" class="relative group"&gt;Code &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#code" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Access to the &lt;code&gt;\Doctrine\DBAL\Driver\PDOConnection&lt;/code&gt; instance can be gained through the &lt;code&gt;Doctrine\ORM\EntityManager&lt;/code&gt; instance.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* @var \Doctrine\DBAL\Driver\PDOConnection $pdo */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$pdo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$entityManager&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getConnection&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getWrappedConnection&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="api-docs" class="relative group"&gt;API Docs &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#api-docs" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.doctrine-project.org/api/dbal/2.5/class-Doctrine.DBAL.Connection.html#_getWrappedConnection" target="_blank" rel="noreferrer"&gt;\Doctrine\DBAL\Connection-&amp;gt;getWrappedConnection()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.doctrine-project.org/api/dbal/2.5/class-Doctrine.DBAL.Driver.PDOConnection.html" target="_blank" rel="noreferrer"&gt;\Doctrine\DBAL\Driver\PDOConnection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>WordPress Domain Changer 2.0</title><link>https://dan.doezema.com/2014/11/wordpress-domain-changer-2.0/</link><pubDate>Wed, 19 Nov 2014 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2014/11/wordpress-domain-changer-2.0/</guid><description>&lt;p&gt;Announcing the next release of &lt;em&gt;WordPress Domain Changer&lt;/em&gt; &amp;ndash; version 2.0!&lt;/p&gt;
&lt;p&gt;This release marks the completion of a total rewrite that brings an updated user interface, improved stability, fine-grained control, improved testing, and a few bug fixes.&lt;/p&gt;
&lt;h2 id="redesigned-ui--workflow" class="relative group"&gt;Redesigned UI &amp;amp; Workflow &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#redesigned-ui--workflow" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;table&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://dan.doezema.com/images/75/wpdc2_6_end.png" rel="lightbox-ui" title="Change Complete Page"&gt;
 &lt;img src="https://dan.doezema.com/images/75/wpdc2_6_end.png" border="0" /&gt;
 &lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://dan.doezema.com/images/75/wpdc2_1_login.png" rel="lightbox-ui" title="Login Page"&gt;
 &lt;img src="https://dan.doezema.com/images/75/wpdc2_1_login.png" border="0" /&gt;
 &lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td colspan="2"&gt;&lt;a href="https://dan.doezema.com/images/75/wpdc2_4_find_and_replace.png" rel="lightbox-ui" title="Find &amp;amp; Replace Page"&gt;
 &lt;img src="https://dan.doezema.com/images/75/wpdc2_4_find_and_replace.png" border="0" /&gt;
 &lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;
&lt;h2 id="precise-control" class="relative group"&gt;Precise Control &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#precise-control" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;The ability to specify database tables has &lt;strong&gt;finally&lt;/strong&gt; arrived!&lt;/p&gt;</description></item><item><title>Setting Up LiveReload With Jekyll</title><link>https://dan.doezema.com/2014/01/setting-up-livereload-with-jekyll/</link><pubDate>Sat, 18 Jan 2014 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2014/01/setting-up-livereload-with-jekyll/</guid><description>&lt;p&gt;When I decided to port my blog away from WordPress I found myself torn between two great static site generators &amp;ndash; &lt;a href="http://middlemanapp.com" target="_blank" rel="noreferrer"&gt;Middleman&lt;/a&gt; and &lt;a href="http://jekyllrb.com/" target="_blank" rel="noreferrer"&gt;Jekyll&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="feature-envy" class="relative group"&gt;Feature Envy &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#feature-envy" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;One of the features that I&amp;rsquo;ve grown quite fond in Middleman is their &lt;a href="http://middlemanapp.com/basics/livereload/" target="_blank" rel="noreferrer"&gt;LiveReload Extension&lt;/a&gt;. All one needs to do is add &lt;code&gt;activate :livereload&lt;/code&gt; to the &lt;code&gt;config.rb&lt;/code&gt; file and Middleman will automatically reload the browser when a file change is detected &amp;ndash; it&amp;rsquo;s &lt;em&gt;really&lt;/em&gt; slick!&lt;/p&gt;</description></item><item><title>Programmatically Create &amp; Title Tabs Within The Mac OS X Terminal.app</title><link>https://dan.doezema.com/2013/04/programmatically-create-title-tabs-within-the-mac-os-x-terminal-app/</link><pubDate>Sun, 07 Apr 2013 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2013/04/programmatically-create-title-tabs-within-the-mac-os-x-terminal-app/</guid><description>&lt;p&gt;The Terminal application has been steadily improving with every major release of Mac OS X. A new feature called &lt;em&gt;Window Groups&lt;/em&gt; was recently added which saves the state, tabs, and locations of all terminal windows at a set point in time. I&amp;rsquo;ve personally found this to be a very helpful feature with just one caveat: It requires frequent upkeep when working with multiple projects.&lt;/p&gt;
&lt;h2 id="the-window-group-upkeep-problem" class="relative group"&gt;The &lt;em&gt;Window Group&lt;/em&gt; Upkeep Problem &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#the-window-group-upkeep-problem" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;I currently work on nine Ruby on Rails applications that are all tied together via a single sign-on server and signed API requests &amp;ndash; think of it like an ecosystem of decoupled apps. When I&amp;rsquo;m developing within this ecosystem the task of trying to keep track of all the activity going on between these apps is a major pain point.&lt;/p&gt;</description></item><item><title>Recursively Sort Ruby Hash By Key</title><link>https://dan.doezema.com/2012/04/recursively-sort-ruby-hash-by-key/</link><pubDate>Mon, 30 Apr 2012 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2012/04/recursively-sort-ruby-hash-by-key/</guid><description>&lt;p&gt;Here&amp;rsquo;s a quick and easy way to sort a Ruby hash by its keys. The ability to sort recursively and provide a custom sort &lt;code&gt;block&lt;/code&gt; are also available features.&lt;/p&gt;
&lt;h2 id="the-method" class="relative group"&gt;The Method &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#the-method" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;I took the approach of &lt;em&gt;monkey patching&lt;/em&gt; a &lt;code&gt;sort_by_key&lt;/code&gt; method into the Ruby &lt;code&gt;Hash&lt;/code&gt; class itself. The method can be easily modified and placed into a utility class if you&amp;rsquo;d prefer to take more procedural approach.&lt;/p&gt;</description></item><item><title>Twitter Bootstrap Radio Button Form Inputs</title><link>https://dan.doezema.com/2012/03/twitter-bootstrap-radio-button-form-inputs/</link><pubDate>Sun, 04 Mar 2012 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2012/03/twitter-bootstrap-radio-button-form-inputs/</guid><description>&lt;p&gt;I&amp;rsquo;ve been loving the Twitter Bootstrap buttons so I came up with a quick technique that turns them into actual working form input elements.&lt;/p&gt;
&lt;h2 id="html" class="relative group"&gt;HTML &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#html" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Just like a normal &lt;em&gt;Bootstrap Button Group&lt;/em&gt;, but with a few added attributes.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;btn-group&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-toggle-name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;is_private&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-toggle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;buttons-radio&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;btn&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-toggle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;button&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Public&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;btn&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-toggle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;button&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Private&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;is_private&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Yes, nested names like &lt;code&gt;bookmark[is_private]&lt;/code&gt; work just fine.&lt;/p&gt;
&lt;h2 id="javascript" class="relative group"&gt;JavaScript &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#javascript" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;On document load we apply the button logic and state based on the hidden input&amp;rsquo;s value.&lt;/p&gt;</description></item><item><title>How to Implement a Single User Model with Rails, ActiveAdmin, and Devise</title><link>https://dan.doezema.com/2012/02/how-to-implement-a-single-user-model-with-rails-activeadmin-and-devise/</link><pubDate>Sat, 25 Feb 2012 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2012/02/how-to-implement-a-single-user-model-with-rails-activeadmin-and-devise/</guid><description>&lt;p&gt;I had just finished the standard installation of &lt;a href="http://activeadmin.info/" target="_blank" rel="noreferrer"&gt;ActiveAdmin&lt;/a&gt; when I noticed that authentication was implemented using the fantastic &lt;a href="https://github.com/plataformatec/devise" target="_blank" rel="noreferrer"&gt;Devise Gem&lt;/a&gt;. I had already been planning on using Devise for authentication within my application so I initially thought integration would be a snap. However, as development progressed it became clear that all of the pieces were not quite fitting together.&lt;/p&gt;
&lt;h2 id="realization" class="relative group"&gt;Realization &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#realization" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;After exploring the idea of using one login for ActiveAdmin and the application I ran into a rather large road block. By default ActiveAdmin uses an &lt;code&gt;AdminUser&lt;/code&gt; Devise model to manage user authentication. Why is that such a big problem you ask?&lt;/p&gt;</description></item><item><title>PHP Output Profiling: Echo vs Concat</title><link>https://dan.doezema.com/2011/07/php-output-profiling-echo-vs-concat/</link><pubDate>Fri, 15 Jul 2011 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2011/07/php-output-profiling-echo-vs-concat/</guid><description>&lt;p&gt;I was in the middle of a code review a simple question came up: &amp;ldquo;What&amp;rsquo;s the fastest way to output a segmented string in PHP?&amp;rdquo;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;div&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;span&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;This is a random number: &amp;#39;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;mt_rand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;/span&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;– OR –&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;div&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$html&lt;/span&gt; .&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;span&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$html&lt;/span&gt; .&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;This is a random number: &amp;#39;&lt;/span&gt; . mt_rand&lt;span class="o"&gt;(&lt;/span&gt;1,100&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$html&lt;/span&gt; .&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;/span&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$html&lt;/span&gt; .&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;My initial guess was that calling echo as little as possible during a request would end up performing better as there would be no need to interact with an output buffer or perform other logic tied to &lt;code&gt;STDOUT&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>AHAX WordPress Plugin</title><link>https://dan.doezema.com/2011/04/ahax-wordpress-plugin/</link><pubDate>Fri, 08 Apr 2011 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2011/04/ahax-wordpress-plugin/</guid><description>&lt;p&gt;A couple weeks ago I was looking for a simple way to make AJAX requests on admin or public WordPress pages from a theme or plug-in. After a bit of searching I could not find the solution I was looking for - so I built my own, AHAX.&lt;/p&gt;
&lt;p&gt;AHAX is a drop-in solution that allows theme or plug-in developers to take advantage of a very simple and streamlined way of making AJAX requests.&lt;/p&gt;</description></item><item><title>Benchmarking and Timing PHP Class</title><link>https://dan.doezema.com/2010/10/bench-php-class/</link><pubDate>Tue, 26 Oct 2010 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2010/10/bench-php-class/</guid><description>&lt;p&gt;Introducing a simple, yet deceivingly useful, micro benchmarking / timer class called &lt;em&gt;Bench&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve found myself on more than a few occasion using this familiar block of code in order to quickly narrow down a bottleneck or test a specific section of code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; microtime&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;// &lt;span class="o"&gt;[&lt;/span&gt;Some Code To Test&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;microtime&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; - &lt;span class="nv"&gt;$start&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$time&lt;/span&gt; . &lt;span class="s1"&gt;&amp;#39; Seconds&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is a crude but effective way of finding out how long it takes to get from line &lt;em&gt;A&lt;/em&gt; to line &lt;em&gt;B&lt;/em&gt;. On the down-side, this technique is annoying to implement, only measures time between two points, and makes code look very cluttered &amp;ndash; so I started developing &lt;em&gt;Bench&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>WinCache PHP Class</title><link>https://dan.doezema.com/2010/07/wincache-php-class/</link><pubDate>Wed, 21 Jul 2010 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2010/07/wincache-php-class/</guid><description>&lt;p&gt;I&amp;rsquo;ve developed a new class for WinCache that wraps around the &lt;em&gt;wincache_ucache&lt;/em&gt;* functions. The goal of this project is to improve and add to the functionality of WinCache&amp;rsquo;s User Cache feature.&lt;/p&gt;
&lt;h2 id="basic-usage" class="relative group"&gt;Basic Usage &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#basic-usage" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Below is a quick code example of how this class simplifies the way in which a developer can take advantage of the user cache.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * Get Cache Object
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cacheObj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;DDWinUCache&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * Cache Data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cacheObj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;foo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bar&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cacheObj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;bar&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;candy&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cacheObj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;hello_world&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;we did it!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cacheObj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;apple_red_core&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;simple tagging&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * Delete Cache Entries
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cacheObj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;*or*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// array(&amp;#39;apple_red_core&amp;#39;, &amp;#39;hello_world&amp;#39;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * Get Cached Data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cacheObj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;foo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;bar&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="new-features" class="relative group"&gt;New Features &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#new-features" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Within this class I&amp;rsquo;ve greatly improved the functionality of the delete method. I&amp;rsquo;ve also made getting information about the user cache simpler by creating accessor methods for all user cache related data. And to top it all off I&amp;rsquo;ve implemented &lt;code&gt;ArrayAccess&lt;/code&gt; to push the simplicity over the edge.&lt;/p&gt;</description></item><item><title>Site Deployment with Subversion</title><link>https://dan.doezema.com/2010/06/site-deployment-with-subversion/</link><pubDate>Thu, 17 Jun 2010 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2010/06/site-deployment-with-subversion/</guid><description>&lt;p&gt;While working for a previous employer I was tasked with developing a new company &amp;ldquo;intranet&amp;rdquo; site. Changes rolled out at an aggressive rate and the process of deploying updates via FTP quickly turned into a tedious task.&lt;/p&gt;
&lt;p&gt;After a while I decided to spend some personal time thinking of ways to make whole process a bit smoother. A few of days passed as I tossed around various ideas in my head, then it hit me&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Why not just checkout a working copy of the project onto the production server itself?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;






 
 
&lt;figure&gt;&lt;img src="https://dan.doezema.com/images/svn_deployment_flow.png" alt="Subversion Deployment Work Flow" class="mx-auto my-0 rounded-md" /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;So simple! All I&amp;rsquo;d have to do is use the production server&amp;rsquo;s subversion client to add, update, and remove any changes &amp;ndash; deployment becomes as simple as: &lt;code&gt;$ svn up&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>The Basics: PHP register_globals Overview</title><link>https://dan.doezema.com/2010/04/php-register-globals-overview/</link><pubDate>Tue, 27 Apr 2010 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2010/04/php-register-globals-overview/</guid><description>&lt;p&gt;In this article I&amp;rsquo;ll explain what register_globals is; how to protect against exploits that take advantage of it; and why it should be turned off (if possible).&lt;/p&gt;
&lt;h2 id="what-is-register-globals" class="relative group"&gt;What is Register Globals? &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#what-is-register-globals" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;register_globals&lt;/code&gt; is a setting/feature within PHP that was intended to ease development by making variables passed to the script (via a form, cookie, or session) automatically available as predefined variables within the global scope.&lt;/p&gt;</description></item><item><title>WordPress Domain Change Script</title><link>https://dan.doezema.com/2010/04/wordpress-domain-change/</link><pubDate>Tue, 13 Apr 2010 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2010/04/wordpress-domain-change/</guid><description>&lt;p&gt;&lt;strong&gt;Notice: A major release has been issued since this post &amp;ndash; &lt;a href="https://dan.doezema.com/2014/11/wordpress-domain-changer-2.0"&gt;Version 2.0&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Changing the domain name or URL of a WordPress site can be a very frustrating and time consuming task.&lt;/p&gt;
&lt;p&gt;I usually have three development environments that I&amp;rsquo;m constantly switching between and all of them have completely different domain names.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Server&lt;/th&gt;
					&lt;th&gt;URL&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Local&lt;/td&gt;
					&lt;td&gt;http://localhost:8888/&lt;strong&gt;myProject&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Preview&lt;/td&gt;
					&lt;td&gt;http://&lt;strong&gt;myProject&lt;/strong&gt;.mysite.com&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Production&lt;/td&gt;
					&lt;td&gt;http://www.&lt;strong&gt;myProject&lt;/strong&gt;.com&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;






 
 
&lt;figure&gt;&lt;img src="https://dan.doezema.com/images/wpdc_screenshot.png" alt="WordPress Domain Changer Screenshot" class="mx-auto my-0 rounded-md" /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Fed up with all the steps needed to change the domain I decided it would be worth my time to build a script that could streamline the entire migration process. The first revision of this script was dirty and insecure (to say the least) but it significantly reduced the amount of time spent moving sites between servers and changing their domains.&lt;/p&gt;</description></item><item><title>Leet Speak WordPress Plugin</title><link>https://dan.doezema.com/2010/04/leet-speak-plugin/</link><pubDate>Tue, 06 Apr 2010 00:00:00 +0000</pubDate><guid>https://dan.doezema.com/2010/04/leet-speak-plugin/</guid><description>&lt;p&gt;During the hours between 11:30 PM and 8:00 AM &amp;ndash; while attempting to wrap my head around the development process of a WordPress Plugin &amp;ndash; I found myself developing this fun, yet semi-useless, plugin that allows for the on-the-fly translation of plain text into &amp;ldquo;leet speak.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="usage" class="relative group"&gt;Usage &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#usage" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Translation of a post&amp;rsquo;s text into leet speak can be accomplished by using one of the following methods.&lt;/p&gt;</description></item></channel></rss>