<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Chris Morrell</title>
	
	<link>http://cmorrell.com</link>
	<description>The personal home page of Chris Morrell</description>
	<lastBuildDate>Thu, 02 Feb 2012 16:34:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/cmorrell" /><feedburner:info uri="cmorrell" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Introducing Zit, an object-oriented dependency injection container</title>
		<link>http://feedproxy.google.com/~r/cmorrell/~3/qCcDT3llUz0/zit-dependency-injection-container-976</link>
		<comments>http://cmorrell.com/misc/zit-dependency-injection-container-976#comments</comments>
		<pubDate>Thu, 02 Feb 2012 16:34:13 +0000</pubDate>
		<dc:creator>Chris M.</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://cmorrell.com/?p=976</guid>
		<description><![CDATA[I&#8217;ll admit right now that I&#8217;m fairly new to the world of dependency injection containers.  I usually do my dependency injection &#8220;manually&#8221; and have always thought that there must be a better way. Then I came across Pimple, which is &#8230; <a href="http://cmorrell.com/misc/zit-dependency-injection-container-976">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll admit right now that I&#8217;m fairly new to the world of dependency injection containers.  I usually do my dependency injection &#8220;manually&#8221; and have always thought that there must be a better way.</p>
<p>Then I came across <a href="http://pimple.sensiolabs.org/" target="_blank">Pimple</a>, which is a wonderfully simple solution to the problem.  The only thing about it is that I hate its array-oriented interface.  Something about <code>$container['session_storage']</code> rubs me the wrong way.  So I decided to implement Pimple in a more object-oriented way, and what I came up with was <a href="https://github.com/inxilpro/Zit" target="_blank">Zit</a>.</p>
<p><span id="more-976"></span></p>
<p>Zit works <em>almost</em> identically to Pimple, but with an object-oriented interface.  I think it&#8217;s easier to show than tell, so let&#8217;s start with a code example:</p>
<pre class="brush: php; title: ; notranslate">
// Include and instantiate Zit
require_once '/path/to/lib/Zit/Container.php';
$c = new \Zit\Container();

// Set config parameters
$c-&gt;setParam('db_user', 'username');
$c-&gt;setParam('db_pass', 'password');
$c-&gt;setParam('db_host', 'localhost');
$c-&gt;setParam('db_name', 'test');

// Set up objects
$c-&gt;set('db', function($c) {
  $db = $c-&gt;getDbName();
  $host = $c-&gt;getDbHost();
  $user = $c-&gt;getDbUser();
  $pass = $c-&gt;getDbPass();
  $dsn = sprintf('mysql:dbname=%s;host=%s', $db, $host);
  return new PDO($dsn, $user, $pass);
});
$c-&gt;setUser(function($c, $id)) {
    $user = new User($id);
    $user-&gt;setDb($c-&gt;getDb());
    return $user;
});

// Use container
$user1 = $c-&gt;getUser(1);
$sameUser = $c-&gt;getUser(1);
$newUser = $c-&gt;newUser(1);
$user2 = $c-&gt;getUser(2);
</pre>
<p>Some comments about the code:</p>
<ul>
<li>The setParam() method is used for any non-object, so if you want to store scalars or an array, you use this method.</li>
<li>All object instantiation functions are passed an instance of the Container as their first parameter.  That way all functions have access to other objects and parameters in the container.</li>
<li>Zit automatically translates underscores to camel case depending on whether you&#8217;re using a string or a method to access that object/parameter.</li>
<li>Zit is quite flexible in its interface.  For example, if you compare line 12 to line 20, you&#8217;ll see that you can set objects in a few different ways: set(&#8216;db&#8217;, &#8230;), setDb(&#8230;) or set_db(&#8230;) all work exactly the same.  This means you can use Zit however you like (or according to the coding standards of the project you&#8217;re working on).</li>
<li>By default, Zit shares object instances.  $user1 from line 27 is the exact same object as $sameUser on line 28 ($user1 === $sameUser).  If you want to create a new instance of an object, use the &#8220;new&#8221; methods.  <em>Note: because &#8220;new&#8221; is a reserved keyword, there is no new() method on the Zit container object.  Instead, this method is called fresh().  This means that new objects can be created with any of the following methods:</em></li>
<ul>
<li>fresh(&#8216;user&#8217;, &#8230;)</li>
<li>freshUser(&#8230;)</li>
<li>fresh_user(&#8230;)</li>
<li>newUser(&#8230;)</li>
<li>new_user(&#8230;)</li>
<li><strong>But not:</strong> new(&#8216;user&#8217;, &#8230;)</li>
</ul>
<li>Instantiation methods can be passed parameters, which is helpful if you need to pass those parameters on to the object&#8217;s constructor, or the the constructor of one of the object&#8217;s dependencies.</li>
</ul>
<p>As you can see, Zit does its very best to provide all the functionality and flexibility that you need without going overboard.  It acts almost exactly like Pimple, except for 3 important distinctions:</p>
<ol>
<li>It has an object-oriented interface rather than an array-oriented one</li>
<li>All objects are <em>shared by default</em></li>
<li>Objects can be passed constructor/instantiation parameters</li>
</ol>
<p>This is the first release of Zit.  The unit tests cover most scenarios, so it should be fairly safe to use, but it hasn&#8217;t been used in production yet (I&#8217;m using it in two projects that will go into production shortly, though).</p>
<p><a title="Zit" href="http://cmorrell.com/downloads/13">Download the latest release</a></p>
<p>Or, <a href="https://github.com/inxilpro/Zit" target="_blank">view on GitHub</a></p>
<div class="su-linkbox" id="post-976-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://cmorrell.com/misc/zit-dependency-injection-container-976&quot;&gt;Introducing Zit, an object-oriented dependency injection container&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://cmorrell.com/misc/zit-dependency-injection-container-976/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://cmorrell.com/misc/zit-dependency-injection-container-976</feedburner:origLink></item>
		<item>
		<title>Steve Jobs went to Cupertino, and all I got were these lousy revolutions…</title>
		<link>http://feedproxy.google.com/~r/cmorrell/~3/pT-bQc91Y8s/steve-jobs-cupertino-lousy-revolutions-971</link>
		<comments>http://cmorrell.com/misc/steve-jobs-cupertino-lousy-revolutions-971#comments</comments>
		<pubDate>Wed, 28 Dec 2011 14:59:08 +0000</pubDate>
		<dc:creator>Chris M.</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://cmorrell.com/?p=971</guid>
		<description><![CDATA[I came up with a great tee shirt idea.  I&#8217;m going to print a few.  You can buy one if you want. Link to this post!]]></description>
			<content:encoded><![CDATA[<p><a href="http://cmorrell.com/products/lousy-steve"><img class="size-full wp-image-953 alignnone" title="Steve Jobs went to Cupertino…" src="http://cdn1.cmorrell.com/wp-content/uploads/lousysteve.jpg" alt="" width="506" height="485" /></a></p>
<p>I came up with a <a title="Lousy Steve" href="http://cmorrell.com/products/lousy-steve">great tee shirt idea</a>.  I&#8217;m going to print a few.  <a title="Lousy Steve" href="http://cmorrell.com/products/lousy-steve">You can buy one if you want.</a></p>
<div class="su-linkbox" id="post-971-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://cmorrell.com/misc/steve-jobs-cupertino-lousy-revolutions-971&quot;&gt;Steve Jobs went to Cupertino, and all I got were these lousy revolutions…&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://cmorrell.com/misc/steve-jobs-cupertino-lousy-revolutions-971/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://cmorrell.com/misc/steve-jobs-cupertino-lousy-revolutions-971</feedburner:origLink></item>
		<item>
		<title>ExtendBetter Beta (a better WordPress plugin search)</title>
		<link>http://feedproxy.google.com/~r/cmorrell/~3/4bGDwMkpu2A/extendbetter-beta-937</link>
		<comments>http://cmorrell.com/wordpress/extendbetter-beta-937#comments</comments>
		<pubDate>Sat, 20 Aug 2011 17:59:19 +0000</pubDate>
		<dc:creator>Chris M.</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://cmorrell.com/?p=937</guid>
		<description><![CDATA[After fighting with the WordPress.org plugin directory for years, I finally decided to do something about my frustrations. I was sick and tired of poor search results, and I found it impossible to sort those results in any meaningful way.  &#8230; <a href="http://cmorrell.com/wordpress/extendbetter-beta-937">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After fighting with the WordPress.org plugin directory for years, I finally decided to do something about my frustrations.  I was sick and tired of poor search results, and I found it impossible to sort those results in any meaningful way.  It&#8217;s still in a very early beta stage, but I&#8217;d love some feedback and thoughts on how I can improve it.  Take a look: <a href="http://www.extendbetter.org">ExtendBetter.org</a></p>
<div class="su-linkbox" id="post-937-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://cmorrell.com/wordpress/extendbetter-beta-937&quot;&gt;ExtendBetter Beta (a better WordPress plugin search)&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://cmorrell.com/wordpress/extendbetter-beta-937/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://cmorrell.com/wordpress/extendbetter-beta-937</feedburner:origLink></item>
		<item>
		<title>30 Days with Occam’s Protocol</title>
		<link>http://feedproxy.google.com/~r/cmorrell/~3/328dARffji4/30-days-occams-protocol-930</link>
		<comments>http://cmorrell.com/fitness/30-days-occams-protocol-930#comments</comments>
		<pubDate>Thu, 31 Mar 2011 16:30:06 +0000</pubDate>
		<dc:creator>Chris M.</dc:creator>
				<category><![CDATA[Fitness]]></category>

		<guid isPermaLink="false">http://cmorrell.com/?p=930</guid>
		<description><![CDATA[Over the last couple of years I&#8217;ve experimented with a number of different forms of exercise (mostly running and weight training). For the month of April, I will be testing Occam&#8217;s Protocol, a high intensity, low volume weight training approach &#8230; <a href="http://cmorrell.com/fitness/30-days-occams-protocol-930">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over the last couple of years I&#8217;ve experimented with a number of different forms of exercise (mostly running and weight training). For the month of April, I will be testing Occam&#8217;s Protocol, a high intensity, low volume weight training approach outlined in Tim Ferriss&#8217; book The 4-Hour Body. I really enjoyed Ferriss&#8217; The 4-Hour Workweek, but have thus far been pretty disappointed by his newest book. I was about to give up on it entirely, but a little research has suggested that there may be something to Occam&#8217;s Protocol, so I&#8217;ve decided to give it a shot for 30 days and document my progress.  I&#8217;ve set up a separate blog for this so that my daily updates don&#8217;t overflow this blog.  If you&#8217;re interested, check it out.</p>
<p><em>Update: I tried Occam&#8217;s Protocol for 10 days with no/negative results (mild fat gain/muscle loss, which could be attributed to measurement variability).  I&#8217;ve decided to remove the blog.<br />
</em></p>
<p>&nbsp;</p>
<div class="su-linkbox" id="post-930-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://cmorrell.com/fitness/30-days-occams-protocol-930&quot;&gt;30 Days with Occam&#8217;s Protocol&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://cmorrell.com/fitness/30-days-occams-protocol-930/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://cmorrell.com/fitness/30-days-occams-protocol-930</feedburner:origLink></item>
		<item>
		<title>Set OmniFocus As Your Homepage</title>
		<link>http://feedproxy.google.com/~r/cmorrell/~3/hBKSG5x75Is/set-omnifocus-as-your-homepage-923</link>
		<comments>http://cmorrell.com/getting-things-done/set-omnifocus-as-your-homepage-923#comments</comments>
		<pubDate>Fri, 04 Mar 2011 16:27:04 +0000</pubDate>
		<dc:creator>Chris M.</dc:creator>
				<category><![CDATA[Getting Things Done]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://cmorrell.com/?p=923</guid>
		<description><![CDATA[I&#8217;ve found that OmniFocus is by far my favorite task list manager, but one thing I always wished it could do was show me my lists in my browser (which I spend a lot more time in than in OmniFocus).  &#8230; <a href="http://cmorrell.com/getting-things-done/set-omnifocus-as-your-homepage-923">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve found that OmniFocus is by far my favorite task list manager, but one thing I always wished it could do was show me my lists in my browser (which I spend a lot more time in than in OmniFocus).  I&#8217;ve never been much of an AppleScript aficionado, but today I sat down and figured out a way to combine Firefox, OmniScript, the crontab and AppleScript in a way that gets me a nice list of my tasks each time I open a new tab.  Here&#8217;s how I did it:</p>
<p>First, create a new AppleScript:</p>
<p><code>tell application "OmniFocus"<br />
set homepageFile to ((path to documents folder as rich text) &amp; "OmniFocus.html")<br />
tell default document<br />
save in homepageFile as "HTML"<br />
end tell<br />
end tell</code></p>
<p>That will export your OmniFocus document as HTML to ~/Documents/OmniFocus.html (you can tweak the homepageFile variable to change the location).</p>
<p>Next, we want to edit the crontab.  I used <a href="http://code.google.com/p/cronnix/downloads/list" target="_blank">CronniX</a> (a decent cron GUI for OS X) to export my OmniFocus document every hour:</p>
<p><code>0	*	*	*	*	/usr/bin/osascript "/Users/<strong><em>yourname</em></strong>/Documents/OmniFocus Exporter.scpt"</code></p>
<p>Google &#8220;crontab tutorial&#8221; to learn how to tweak when it runs.</p>
<p>Finally, I set my home page in Firefox to ~/Documents/OmniFocus.html and installed the extension <a href="https://addons.mozilla.org/en-us/firefox/addon/new-tab-homepage/" target="_blank">New Tab Homepage</a> so that each time a open a new tab, my homepage loads.  Now whenever I open a new tab I&#8217;m presented a nice list of all my tasks.</p>
<div class="su-linkbox" id="post-923-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://cmorrell.com/getting-things-done/set-omnifocus-as-your-homepage-923&quot;&gt;Set OmniFocus As Your Homepage&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://cmorrell.com/getting-things-done/set-omnifocus-as-your-homepage-923/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://cmorrell.com/getting-things-done/set-omnifocus-as-your-homepage-923</feedburner:origLink></item>
		<item>
		<title>Using Modulo Operations for Even-Enough Distribution</title>
		<link>http://feedproxy.google.com/~r/cmorrell/~3/MUGgBWkcGGU/modulo-operations-even-enough-distribution-910</link>
		<comments>http://cmorrell.com/misc/modulo-operations-even-enough-distribution-910#comments</comments>
		<pubDate>Fri, 22 Oct 2010 13:18:51 +0000</pubDate>
		<dc:creator>Chris M.</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://cmorrell.com/?p=910</guid>
		<description><![CDATA[If you don&#8217;t have to deal with large groups of data, this post is not for you.  But if you do, and aren&#8217;t familiar with the modulo operator, read on. The modulo operation essentially calculates the remainder of a division.  &#8230; <a href="http://cmorrell.com/misc/modulo-operations-even-enough-distribution-910">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you don&#8217;t have to deal with large groups of data, this post is not for you.  But if you do, and aren&#8217;t familiar with the modulo operator, read on.</p>
<p><span id="more-910"></span>The modulo operation essentially calculates the remainder of a division.  For example:</p>
<pre>5 % 4 = 1</pre>
<p>What&#8217;s very useful, is that you can take any number, and easily group it into any size group.  For example, if you needed to separate 6 items into 3 groups (OK—obviously you would do this differently, but it&#8217;s just for demonstration), you can do the following:</p>
<pre>1 % 3 = 1
2 % 3 = 2
3 % 3 = 0
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0
</pre>
<p>Now your numbers are in group 0, 1, or 2.  This gets much more useful when you think about how almost all RDBMS tables have a numeric primary key value.  Need to split all the users in your system into 10 batches?  Just calculate the <code>user ID % 10</code> and you have all your users evenly (or, evenly enough) split.</p>
<p>This is a great way to implement sharding.  For example, WordPress 3.0 and higher support multiple sites running on the same codebase.  It does this by creating special tables for each site, in the format of PREFIX + ID + TABLE NAME (so a database might look like <code>wp_322_posts</code>).  Well, when you have a thousand sites, each with 10 or more tables, you start running into trouble keeping them all in one database.  That&#8217;s where the modulo operator comes into play:</p>
<pre class="brush: php; title: ; notranslate">
function db_callback($query, &amp;$wpdb) {
	// $wpdb-&gt;base_prefix = 'wp_';
	// $wpdb-&gt;table = 'wp_322_posts';
	if (preg_match(&quot;/^{$wpdb-&gt;base_prefix}(\d+)_/i&quot;, $wpdb-&gt;table, $matches)) {
		// Pretend we have 3 databases
		// Will return 'database0', 'database1' or 'database2'
		return 'database' . ($matches[1] % 3);
	}
}
</pre>
<p>Another recent way I&#8217;ve used the modulo operator is sending out a weekly batch email to a large number of users.  In this case, I had hundreds of thousands of records to read, parse, and then send out an email based on the results.  Rather than do all 600,000 records at once, I split them up into 7 batches, based on day.  Here&#8217;s a simplified version of that query:</p>
<pre class="brush: php; title: ; notranslate">
$sql = 'SELECT * FROM table
        WHERE user_id MOD 7 = ' . date('w');
</pre>
<p>Then I just set up the script to run daily through my crontab, and each user gets their email once a week, on the same day each week.  Alternately, you could send the message every hour to break it into 168 separate blocks throughout the week:</p>
<pre class="brush: php; title: ; notranslate">
$sql = 'SELECT * FROM table
        WHERE user_id MOD 168 = ' . ((date('w') * 24) + date('H'));
</pre>
<p>It&#8217;s something that you don&#8217;t necessarily use often, but it&#8217;s very handy to have in your repertoire.</p>
<div class="su-linkbox" id="post-910-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://cmorrell.com/misc/modulo-operations-even-enough-distribution-910&quot;&gt;Using Modulo Operations for Even-Enough Distribution&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://cmorrell.com/misc/modulo-operations-even-enough-distribution-910/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://cmorrell.com/misc/modulo-operations-even-enough-distribution-910</feedburner:origLink></item>
		<item>
		<title>Top WordPress Actions/Filters</title>
		<link>http://feedproxy.google.com/~r/cmorrell/~3/PKYCQRF6PJ8/top-wordpress-actions-filters-901</link>
		<comments>http://cmorrell.com/webdev/top-wordpress-actions-filters-901#comments</comments>
		<pubDate>Tue, 21 Sep 2010 03:06:19 +0000</pubDate>
		<dc:creator>Chris M.</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://cmorrell.com/?p=901</guid>
		<description><![CDATA[Today I downloaded just about every WordPress plugin that exists (or the top 8,000+, at least) and parsed out the actions and filters that each plugin hooks into.  I&#8217;m going to be looking at that data to help determine the &#8230; <a href="http://cmorrell.com/webdev/top-wordpress-actions-filters-901">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today I downloaded just about every WordPress plugin that exists (or the top 8,000+, at least) and parsed out the actions and filters that each plugin hooks into.  I&#8217;m going to be looking at that data to help determine the key places that a CMS needs to be flexible.  But until I have time to play with the data, I thought I&#8217;d post the top WordPress hooks, taken from 8,240 of the most popular plugins hosted on WordPress.org.</p>
<p><a href="http://cdn1.cmorrell.com/wp-content/uploads/wordpress-top-hooks.png"><img class="alignnone size-full wp-image-902" title="wordpress-top-hooks" src="http://cdn1.cmorrell.com/wp-content/uploads/wordpress-top-hooks.png" alt="" width="429" height="416" /></a></p>
<p>It makes sense that initialization, filtering the page content, and adding administrative features are at the top of the list.  It&#8217;ll be more interesting to see whats a little further down.  I&#8217;ll post more as I have time to make sense of the data.</p>
<div class="su-linkbox" id="post-901-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://cmorrell.com/webdev/top-wordpress-actions-filters-901&quot;&gt;Top WordPress Actions/Filters&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://cmorrell.com/webdev/top-wordpress-actions-filters-901/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://cmorrell.com/webdev/top-wordpress-actions-filters-901</feedburner:origLink></item>
		<item>
		<title>Zend Debugger Safari Toolbar</title>
		<link>http://feedproxy.google.com/~r/cmorrell/~3/5L5xwxbpZ0I/zend-debugger-safari-toolbar-820</link>
		<comments>http://cmorrell.com/webdev/zend-debugger-safari-toolbar-820#comments</comments>
		<pubDate>Thu, 01 Jul 2010 21:42:53 +0000</pubDate>
		<dc:creator>Chris M.</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend studio]]></category>

		<guid isPermaLink="false">http://cmorrell.com/?p=820</guid>
		<description><![CDATA[Update: It turns out Safari is more problematic than Firefox, so I&#8217;ve switched back.  I have no plans to finish this project.  Feel free to fork it on GitHub. When Safari 5 came out I decided to make the switch. &#8230; <a href="http://cmorrell.com/webdev/zend-debugger-safari-toolbar-820">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> It turns out Safari is more problematic than Firefox, so I&#8217;ve switched back.  I have no plans to finish this project.  Feel free to fork it on <a href="http://github.com/inxilpro/Zend-Debugger-Safari-Toolbar" target="_blank">GitHub</a>.</p>
<p>When Safari 5 came out I decided to make the switch.  The new Safari developer tools rival Firebug, Safari now supports extensions, and Firefox has been causing all sorts of problems for me lately (20-second freezes, choppy video, etc).  There were three things that I knew I couldn&#8217;t live without…</p>
<p><span id="more-820"></span>Those were:</p>
<ul>
<li>AdBlock</li>
<li>Delicious.com Integration</li>
<li>The Zend Studio Toolbar</li>
</ul>
<p>The first two were ported to Safari within days (if not hours) of the Safari 5 release.  The third is likely to take a while, so I decided to put together my own version for the time-being.  Right now it&#8217;s very much in an &#8220;alpha&#8221; stage.  It only supports the &#8220;debug current page&#8221; command, and it hasn&#8217;t been tested all that thoroughly.  That said, I plan on developing this over the next few weeks to mirror most of the features available in the current Zend Studio Toolbar for Firefox and MSIE.</p>
<p>I&#8217;m also adding some features of my own.  Namely, the toolbar remembers what domains you&#8217;ve enabled debugging on, and only shows itself on those domains.  There&#8217;s a browser button that you can use to toggle debugging, and in the future I want to add an indicator when the page you&#8217;re on supports debugging.</p>
<p>If you develop with Zend Studio and Safari, please <a href="http://cmorrell.com/safari-extensions/zend-debugger">check out the current version of the extension</a>.  I could really use some feedback from other folks (particularly those who have other workflows from me).</p>
<div class="su-linkbox" id="post-820-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://cmorrell.com/webdev/zend-debugger-safari-toolbar-820&quot;&gt;Zend Debugger Safari Toolbar&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://cmorrell.com/webdev/zend-debugger-safari-toolbar-820/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://cmorrell.com/webdev/zend-debugger-safari-toolbar-820</feedburner:origLink></item>
		<item>
		<title>Optimize Legibility in Safari 5</title>
		<link>http://feedproxy.google.com/~r/cmorrell/~3/l9FG0-4J9DY/optimize-legibility-safari-5-810</link>
		<comments>http://cmorrell.com/misc/optimize-legibility-safari-5-810#comments</comments>
		<pubDate>Tue, 29 Jun 2010 16:27:00 +0000</pubDate>
		<dc:creator>Chris M.</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://cmorrell.com/?p=810</guid>
		<description><![CDATA[Just saw this (via Daring Fireball): Cross-browser kerning-pairs &#38; ligatures And thought, &#8220;there&#8217;s gotta be an extension for that.&#8221;  Well, looks like there isn&#8217;t… so I made one: Enjoy! Link to this post!]]></description>
			<content:encoded><![CDATA[<p>Just saw this (via <a href="http://daringfireball.net/linked/2010/06/29/optimizelegibility" target="_blank">Daring Fireball</a>):</p>
<p><a href="http://www.aestheticallyloyal.com/public/optimize-legibility/" target="_blank">Cross-browser kerning-pairs &amp; ligatures</a></p>
<p>And thought, &#8220;there&#8217;s gotta be an extension for that.&#8221;  Well, looks like there isn&#8217;t… so I made one:</p>
<a href="http://cmorrell.com/downloads/8" title="Version 1.0, Downloaded 2310 times">Optimize Legibility [4.64 kB]</a>
<p>Enjoy!</p>
<div class="su-linkbox" id="post-810-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://cmorrell.com/misc/optimize-legibility-safari-5-810&quot;&gt;Optimize Legibility in Safari 5&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://cmorrell.com/misc/optimize-legibility-safari-5-810/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		<feedburner:origLink>http://cmorrell.com/misc/optimize-legibility-safari-5-810</feedburner:origLink></item>
		<item>
		<title>Safari Toolbar CSS</title>
		<link>http://feedproxy.google.com/~r/cmorrell/~3/bh0ppvNzJrc/safari-toolbar-css-805</link>
		<comments>http://cmorrell.com/misc/safari-toolbar-css-805#comments</comments>
		<pubDate>Wed, 09 Jun 2010 16:18:53 +0000</pubDate>
		<dc:creator>Chris M.</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://cmorrell.com/?p=805</guid>
		<description><![CDATA[By default, Safari extension toolbars are just plain old HTML. That means that your toolbar is going to look a lot like: Wouldn&#8217;t it be nice if instead it looked like: I&#8217;ve developed a (very) simple CSS file that styles &#8230; <a href="http://cmorrell.com/misc/safari-toolbar-css-805">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>By default, Safari extension toolbars are just plain old HTML.  That means that your toolbar is going to look a lot like:</p>
<p><img class="alignnone size-full wp-image-803" title="safari-css-before" src="http://cdn1.cmorrell.com/wp-content/uploads/2010/06/safari-css-before.png" alt="" width="328" height="39" /></p>
<p>Wouldn&#8217;t it be nice if instead it looked like:</p>
<p><img class="alignnone size-full wp-image-802" title="safari-css" src="http://cdn1.cmorrell.com/wp-content/uploads/2010/06/safari-css.png" alt="" width="328" height="39" /></p>
<p>I&#8217;ve developed a (very) simple CSS file that styles links (and &lt;button&gt; elements) to look like native Safari toolbar items.  <a href="http://cmorrell.com/safari-extensions">Download it now</a>.</p>
<div class="su-linkbox" id="post-805-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://cmorrell.com/misc/safari-toolbar-css-805&quot;&gt;Safari Toolbar CSS&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://cmorrell.com/misc/safari-toolbar-css-805/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://cmorrell.com/misc/safari-toolbar-css-805</feedburner:origLink></item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 1195/1377 objects using disk: basic
Content Delivery Network via cdn1.cmorrell.com

Served from: cmorrell.com @ 2012-02-08 10:09:37 -->

