<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>alexking.org &#187; Development | alexking.org</title>
	<link>http://alexking.org</link>
	<description>Alex King's blog - software, photography, sports, etc.</description>
	<pubDate>Wed, 02 Jul 2008 19:51:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.3</generator>
	<language>en</language>
			<item>
		<title>Presenting at Refresh Denver</title>
		<link>http://alexking.org/blog/2008/06/12/presenting-at-refresh-denver</link>
		<comments>http://alexking.org/blog/2008/06/12/presenting-at-refresh-denver#comments</comments>
		<pubDate>Fri, 13 Jun 2008 03:56:01 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Crowd Favorite]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2008/06/12/presenting-at-refresh-denver</guid>
		<description><![CDATA[I&#8217;ll be joining Josh Pigford as a presenter at the next Refresh Denver meeting this coming Wednesday. I&#8217;ll be talking about Addictomatic, which we had the opportunity to build earlier this year.
Leave a comment and let me know what you&#8217;d like to hear in the presentation.
The last Refresh Denver meeting was the first since a [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Presenting at Refresh Denver", url: "http://alexking.org/blog/2008/06/12/presenting-at-refresh-denver" });</script>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be joining <a href="http://sabotagemedia.com/" rel="external">Josh Pigford</a> as a presenter at the <a href="http://refreshdenver.org/2008/06/11/june-meetup-wednesday-june-18-forest-room-5-6pm/" rel="external">next Refresh Denver meeting</a> this coming Wednesday. I&#8217;ll be talking about <a href="http://addictomatic.com" rel="external">Addictomatic</a>, which <a href="http://crowdfavorite.com" rel="external">we</a> had the <a href="http://alexking.org/blog/2008/05/01/addictomatic" rel="external">opportunity to build</a> earlier this year.</p>
<p>Leave a comment and let me know what you&#8217;d like to hear in the presentation.</p>
<p>The <a href="http://refreshdenver.org/2008/05/15/brightkite-presenting-at-may-21st-meetup-at-forest-room-5/" rel="external">last Refresh Denver meeting</a> was the first since a short hiatus. There was a great turnout for the last meeting and we want to keep things rolling.</p>
<p>We&#8217;re going to be tightening up the presentations with a new format:</p>
<ul>
<li>15 minutes for presentation</li>
<li>10 minutes for Q &#038; A</li>
</ul>
<p>This should help things move along crisply - we&#8217;ll see how it works at the meeting on Wednesday.</p>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=Presenting+at+Refresh+Denver&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2008%2F06%2F12%2Fpresenting-at-refresh-denver">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2008/06/12/presenting-at-refresh-denver/feed</wfw:commentRss>
		</item>
		<item>
		<title>Posting from ShareThis</title>
		<link>http://alexking.org/blog/2008/05/19/posting-from-sharethis</link>
		<comments>http://alexking.org/blog/2008/05/19/posting-from-sharethis#comments</comments>
		<pubDate>Mon, 19 May 2008 21:56:15 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2008/05/19/posting-from-sharethis</guid>
		<description><![CDATA[The ShareThis team has rolled out an update with some great new features; most importantly a feature which allows posting to a variety of services:

It&#8217;s pretty handy - you can post directly to WordPress, Twitter, Blogger, TypePad, etc. You can&#8217;t yet customize or add to the message being sent, but if it&#8217;s a highly requested [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Posting from ShareThis", url: "http://alexking.org/blog/2008/05/19/posting-from-sharethis" });</script>]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://sharethis.com" rel="external">ShareThis</a> team has rolled out an update with some great new features; most importantly a feature which allows posting to a variety of services:</p>
<p class="center"><a href="http://www.flickr.com/photos/alexkingorg/2497474592/" title="Post from ShareThis by alexkingorg, on Flickr"><img src="http://farm4.static.flickr.com/3240/2497474592_87a272d9d2_m.jpg" width="240" height="177" alt="Post from ShareThis" /></a></p>
<p>It&#8217;s pretty handy - you can post directly to WordPress, Twitter, Blogger, TypePad, etc. You can&#8217;t yet customize or add to the message being sent, but if it&#8217;s a highly requested feature I expect we&#8217;ll see it soon.</p>
<p>If you customized your ShareThis widget, you may need to go to the <a href="http://sharethis.com/getbutton" rel="external">config page</a> to add the Post tab to your tabs.</p>
<p>Besides the new Post options, the Reporting dashboard (which has some <em>really</em> interesting data) is faster and you can aggregate all of your domains into a single view. Pretty handy.</p>
<p>Check out the new features, let the team know how you like them in the <a href="http://forums.sharethis.com/" rel="external">forums</a>.</p>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=Posting+from+ShareThis&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2008%2F05%2F19%2Fposting-from-sharethis">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2008/05/19/posting-from-sharethis/feed</wfw:commentRss>
		</item>
		<item>
		<title>Theme Browser &#8220;Fixed&#8221;</title>
		<link>http://alexking.org/blog/2008/04/29/theme-browser-fixed</link>
		<comments>http://alexking.org/blog/2008/04/29/theme-browser-fixed#comments</comments>
		<pubDate>Tue, 29 Apr 2008 18:32:01 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[alexking.org]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2008/04/29/theme-browser-fixed</guid>
		<description><![CDATA[I got a couple of reports that my WordPress Theme Browser was not working. I checked it out, and sure enough - not working.
This was a bit of a surprise as that code hadn&#8217;t changed in years. Turns out, it was the browsers that had changed.
I had moved the theme browser from my site (to [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Theme Browser \"Fixed\"", url: "http://alexking.org/blog/2008/04/29/theme-browser-fixed" });</script>]]></description>
			<content:encoded><![CDATA[<p>I got a couple of reports that my <a href="http://alexking.org/projects/wordpress/themes">WordPress Theme Browser</a> was not working. I checked it out, and sure enough - not working.</p>
<p>This was a bit of a surprise as that code hadn&#8217;t changed in years. Turns out, it was the browsers that had changed.</p>
<p>I had moved the theme browser from my site (to reduce server load) to my hosting account at Joyent a long time ago, and set it up on the domain managedtasks.com. The frameset page and the top frame were hosted on alexking.org, while the bottom frame - the theme viewer - was on managedtasks.com.</p>
<p>This combination stopped working because the browsers changed their cookie security settings. If you have your cookies set to &#8220;only accept cookies from sites I visit&#8221;, then your browser was rejecting the cookie from managedtasks.com (because the URL in your browser was alexking.org).</p>
<p>If this cookie wasn&#8217;t set, the proper theme was not displayed; hence the theme browser being <nobr> <img src='http://alexking.org/images/smilies/ak_scare1.gif' alt=':scare:' class='wp-smiley' /> broken <img src='http://alexking.org/images/smilies/ak_scare2.gif' alt=':/scare:' class='wp-smiley' /> </nobr>.</p>
<p>I&#8217;ve moved it all onto managedtasks.com now, and everything appears to work again.</p>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=Theme+Browser+%22Fixed%22&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2008%2F04%2F29%2Ftheme-browser-fixed">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2008/04/29/theme-browser-fixed/feed</wfw:commentRss>
		</item>
		<item>
		<title>Images, onload Events and Browsers</title>
		<link>http://alexking.org/blog/2008/04/16/css-images-window-load</link>
		<comments>http://alexking.org/blog/2008/04/16/css-images-window-load#comments</comments>
		<pubDate>Thu, 17 Apr 2008 06:41:32 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2008/04/16/css-images-window-load</guid>
		<description><![CDATA[We&#8217;ve been working on a really fun project recently, and I was surprised at some of the browser behavior I was seeing in our testing.
I knew from past experience that the window.load event waits to fire until all images have downloaded completely. This is why jQuery and other JS libraries implement $(document).ready() features; so you [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Images, onload Events and Browsers", url: "http://alexking.org/blog/2008/04/16/css-images-window-load" });</script>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been working on a really fun project recently, and I was surprised at some of the browser behavior I was seeing in our testing.</p>
<p>I knew from past experience that the <code>window.load</code> event waits to fire until all images have downloaded completely. This is why jQuery and other JS libraries implement <code>$(document).ready()</code> features; so you can start doing things when the DOM is ready and not have to wait for images to download.</p>
<p>Armed with this knowledge, I assumed this applied to images that are specified as background images in your CSS as well. This is a (partially) incorrect assumption.</p>
<p>My testing indicates that Firefox fires off the onload event for the page after all inline images (<code>img</code>) have loaded, but <em>before</em> images specified in your CSS have loaded.</p>
<p>Safari on the other hand waits until all of your images have loaded, <em>including</em> images specified as CSS background images, before kicking off the onload event.</p>
<p>I did some web searching before I did my tests, but didn&#8217;t find anything on this topic. Naturally, I found <a href="http://www.tobymiller.com/articles/javascript/does_javascript_load_on_page_load_or_on_onload.php" rel="external">this</a> as I was writing this blog post. It indicates that IE behaves similarly to Safari.</p>
<p>For our usage, it is actually preferable to have the onload event wait until after the images specified in the CSS have loaded, so I&#8217;m looking for a workaround or a <a href="http://developer.mozilla.org/en/docs/Gecko-Specific_DOM_Events" rel="external">Gecko-specific event</a> for this for Firefox.</p>
<p>Time to send this blog post off to some good folks at Mozilla. I&#8217;ll update this if I get more answers.</p>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=Images%2C+onload+Events+and+Browsers&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2008%2F04%2F16%2Fcss-images-window-load">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2008/04/16/css-images-window-load/feed</wfw:commentRss>
		</item>
		<item>
		<title>Google App Engine</title>
		<link>http://alexking.org/blog/2008/04/08/google-apps-engine</link>
		<comments>http://alexking.org/blog/2008/04/08/google-apps-engine#comments</comments>
		<pubDate>Tue, 08 Apr 2008 20:29:13 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Crowd Favorite]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2008/04/08/google-apps-engine</guid>
		<description><![CDATA[As you&#8217;ve no doubt heard already, Google released Google App Engine at the Google Campfire One event last night.
Folks, this is a real game changer.
Scalability has been the final frontier for web applications for far too long. For web developers like myself, the &#8220;building the app&#8221; part of offering a web service is the easy [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Google App Engine", url: "http://alexking.org/blog/2008/04/08/google-apps-engine" });</script>]]></description>
			<content:encoded><![CDATA[<p>As you&#8217;ve no doubt heard already, Google released <a href="http://code.google.com/appengine/" rel="external">Google App Engine</a> at the <a href="http://www.youtube.com/watch?v=3Ztr-HhWX1c&#038;eurl=http://code.google.com/appengine/" rel="external">Google Campfire One</a> event last night.</p>
<p>Folks, this is a real game changer.</p>
<p>Scalability has been the final frontier for web applications for far too long. For web developers like myself, the &#8220;building the app&#8221; part of offering a web service is the easy part. The challenge comes when you try to scale it.</p>
<p><a href="http://feedlounge.com">FeedLounge</a> is a great example. By all accounts, we built a fantastic web feed reading experience. Unfortunately, we didn&#8217;t succeed in scaling it. Sure, we learned a lot and I can think of a couple dozen things we would do differently if we could go back and do it again, but scaling would still be our number one issue.</p>
<p>Google App Engine changes that.</p>
<p>Sure, Big Table isn&#8217;t a drop-in replacement for a relational database like MySQL or PostgreSQL, but writing GQL isn&#8217;t any harder than writing SQL. Basically, you need to re-think how you do the data layer of your application, and the reward is scalability that would have cost you months to develop and significant hardware costs.</p>
<p>GAE not only offers a scalability solution, it also revolutionizes deployment. When you roll your own scalable infrastructure, you get rewarded with a variety of deployment challenges. You need to update code on a variety of machines, upgrade database schemas, etc. </p>
<p>At <a href="http://crowdfavorite.com">Crowd Favorite</a> we are web developers, not system admins. We understand how to build something so it can scale, but actually doing the server config and managing them on a day to day basis is not our core competency. This service is designed for us.</p>
<p>The Campfire was a very well produced event. The speakers, as you can see in the video, did a very good job. Questions I had during the presentation were often answered within the next couple of minutes - always the sign of a well designed talk.</p>
<p>As an attendee of the Campfire, I got a chance to ask the GAE team some questions after the presentation. Most of the questions that I was asking had very good answers, and all had very reasonable answers.</p>
<p>A couple of things I asked about:</p>
<dl>
<dt>How do you bring the data from your live application back into your local development environment?</dt>
<dd>There isn&#8217;t a data export/import built-in yet, though it seems like something they&#8217;d be open to building. There is a feature to create an XML representation of any data object, so I expect  a library that handles the production data export/local development data import situation to be one of the first tools that is built and well supported by the development community.</dd>
<dt>Is there a CRON equivalent?</dt>
<dd>No. The solution that seems best to me is to use another machine with CRON to send HTTP requests to your GAE application. If you want a pure &#8220;cloud&#8221; solution, you could use Amazon EC2 for this.</dd>
<dt>How long can a request live?</dt>
<dd>There is a 10 second execution limit for all requests. This includes requesting and submitting data to external services. If it takes 8.5 seconds to download a tweet stream from Twitter, you&#8217;ve only got 1.5 seconds to do something with it. <img src='http://alexking.org/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> This is very reasonable. In thinking through the things I normally do in a long executing script, they could pretty much all b broken out into more atomic events that could each be done in individual requests.</dd>
<dt>How much will it cost if you go over your quotas?</dt>
<dd>There wasn&#8217;t an answer for this yet, and it&#8217;s definitely something you&#8217;d want to know when you&#8217;re trying to evaluate GAE vs. alternative solutions. I&#8217;ll say this though, whatever they decide to charge, it will likely be a fraction of the hardware, bandwidth and human costs of scaling to that degree on your own. I believe they will take this on a case by case basis - they are building a platform they want people to use, and I think it&#8217;s in their best interest to do what they can to support successful apps built on GAE.</dd>
</dl>
<p>What the GAE team has already done in just ~2 years is very impressive, but they&#8217;ll also be the first ones to tell you they have a long list of things they&#8217;d like to improve and enhance. I&#8217;ve got no doubt they are going to do just that.</p>
<p>I&#8217;d obviously like to see PHP as a supported language as soon as possible, but I don&#8217;t know when it&#8217;s realistic to expect to see support for new languages. Balancing the building of platform features against support for other languages is a tough choice.</p>
<p>While I&#8217;m not going to run out and rewrite all of my PHP products in Python, I&#8217;ve already mentally re-architected a component of <a href="http://myfreebusy.com">MyFreeBusy</a> that we probably will rewrite in Python so that it can leverage GAE to scale.</p>
<p>Another idea that I&#8217;ve had for a service that has been backburnered for a while is probably going to be written in Python instead of PHP so that we can roll it out on GAE.</p>
<p>Once we complete these internal projects, I&#8217;m sure we&#8217;ll start building GAE apps for clients as well. I&#8217;m excited about the possibilities that this opens for us.</p>
<p>Besides my own intended usage, the general innovation that this is going to allow is going to be fascinating. ISVs have long been able to create great software that can be downloaded and installed on a per-user or small team basis, but Google App Engine promises to let us bring that craftsmanship to internet scale.</p>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=Google+App+Engine&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2008%2F04%2F08%2Fgoogle-apps-engine">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2008/04/08/google-apps-engine/feed</wfw:commentRss>
		</item>
		<item>
		<title>jQuery vs. Other Libraries</title>
		<link>http://alexking.org/blog/2008/03/24/jquery-vs-other-libraries</link>
		<comments>http://alexking.org/blog/2008/03/24/jquery-vs-other-libraries#comments</comments>
		<pubDate>Mon, 24 Mar 2008 19:55:49 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2008/03/24/jquery-vs-other-libraries</guid>
		<description><![CDATA[Despite having cross-browser incompatibility issues and various things breaking and being re-done with each release, I&#8217;m firmly in the jQuery camp and am actively building new things on top of it. This likely includes a port of PHP Tag Engine to jQuery, as well as many of my WordPress plugins.
It&#8217;s like the old story:
You’re a [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "jQuery vs. Other Libraries", url: "http://alexking.org/blog/2008/03/24/jquery-vs-other-libraries" });</script>]]></description>
			<content:encoded><![CDATA[<p>Despite having cross-browser incompatibility issues and various things breaking and being re-done with each release, I&#8217;m firmly in the <a href="http://jquery.com" rel="external">jQuery</a> camp and am actively building new things on top of it. This likely includes a port of <a href="http://phptagengine.com">PHP Tag Engine</a> to jQuery, as well as many of my <a href="http://wordpress.org/" rel="external">WordPress</a> plugins.</p>
<p>It&#8217;s like the old story:</p>
<blockquote><p>You’re a coach deciding between two runners. They both run the 100m equally fast. One has perfect form. The other has terrible form. Who do you chose?</p>
<p>You chose the runner with terrible form. Why? Because when he finally has perfect form he’ll wax the floor with the other runner.</p></blockquote>
<p>YUI and Prototype/Scriptaculous are much more polished now, but I see the ease of authoring in jQuery to be too big a developer benefit for it not to rise to the top in the long run.</p>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=jQuery+vs.+Other+Libraries&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2008%2F03%2F24%2Fjquery-vs-other-libraries">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2008/03/24/jquery-vs-other-libraries/feed</wfw:commentRss>
		</item>
		<item>
		<title>Fixing a MySQL Character Encoding Mismatch</title>
		<link>http://alexking.org/blog/2008/03/06/mysql-latin1-utf8-conversion</link>
		<comments>http://alexking.org/blog/2008/03/06/mysql-latin1-utf8-conversion#comments</comments>
		<pubDate>Thu, 06 Mar 2008 07:13:55 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2008/03/06/mysql-latin1-utf8-conversion</guid>
		<description><![CDATA[We ran into an interesting MySQL character encoding issue at Crowd Favorite today while working to upgrade and launch a new client site.
Here is what we were trying to do: copy the production database to the staging database so we could properly configure and test everything before pushing the new site live. Pretty simple right? [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Fixing a MySQL Character Encoding Mismatch", url: "http://alexking.org/blog/2008/03/06/mysql-latin1-utf8-conversion" });</script>]]></description>
			<content:encoded><![CDATA[<p>We ran into an interesting MySQL character encoding issue at <a href="http://crowdfavorite.com">Crowd Favorite</a> today while working to upgrade and launch a new client site.</p>
<p>Here is what we were trying to do: copy the production database to the staging database so we could properly configure and test everything before pushing the new site live. Pretty simple right? It was, until we noticed a bunch of weird character encoding issues on the staging site.</p>
<p class="center"><a href="http://www.flickr.com/photos/alexkingorg/2312995897/" title="Character Encoding Issue by alexkingorg, on Flickr"><img src="http://farm3.static.flickr.com/2012/2312995897_db067fa495_m.jpg" width="240" height="50" alt="Character Encoding Issue" /></a></p>
<p>It turned out that while the database tables were set to a Latin-1 (latin1), the content that populated those tables was encoded as UTF-8 (utf8). A variety of attempts to fix this failed, but what succeeded was as follows:</p>
<ol>
<li><strong>Export the data as Latin-1.</strong> Because MySQL knows that the table is already using a Latin-1 encoding, it will do a straight export of the data without trying to convert the data to another character set. If you try to export as UTF-8, MySQL appears to attempt to convert the (supposedly) Latin-1 data to UTF-8 - resulting in double encoded characters (since the data was actually already UTF-8).</li>
<li><strong>Change the character set in the exported data file from &#8216;latin1&#8242; to &#8216;utf8&#8242;.</strong> Since the dumped data was not converted during the export process, it&#8217;s actually UTF-8 encoded data.</li>
<li><strong>Create your new table as UTF-8</strong> If your <code>CREATE TABLE</code> command is in your SQL dump file, change the character set from &#8216;latin1&#8242; to &#8216;utf8&#8242;.</li>
<li><strong>Import your data normally.</strong> Since you&#8217;ve got UTF-8 encoded data in your dump file, the declared character set in the dump file is now UTF-8, and the table you&#8217;re importing into is UTF-8, everything will go smoothly.</li>
</ol>
<p>I can confirm that a half-dozen or so variations on the above do <em>not</em> work. This includes <code>INSERT INTO newdb.newtable SELECT * FROM olddb.oldtable;</code>.</p>
<p>Also, if you&#8217;re doing this for a <a href="http://wordpress.org/" rel="external">WordPress</a><sup><a href="#fn1204773785315n" id="fn1204773785315" class="footnote">1</a></sup> site (like we were), keep in mind that copying over the production database will generally mean that WP-Cache is enabled. You&#8217;ll want to remember to turn that off. Yeah. <img src='http://alexking.org/wp/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<ol class="footnotes">
<li id="fn1204773785315n">This is a fairly common issue in older WordPress installs because the MySQL database default is commonly Latin-1, and older versions of WordPress did not specify the character set when creating the database tables (so they would default to Latin-1) and the default encoding in the WordPress settings is UTF-8. [<a href="#fn1204773785315">back</a>]</li>
</ol>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=Fixing+a+MySQL+Character+Encoding+Mismatch&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2008%2F03%2F06%2Fmysql-latin1-utf8-conversion">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2008/03/06/mysql-latin1-utf8-conversion/feed</wfw:commentRss>
		</item>
		<item>
		<title>CodeIgniter TextMate Bundle Additions</title>
		<link>http://alexking.org/blog/2008/02/23/codeigniter-textmate-bundle-additions</link>
		<comments>http://alexking.org/blog/2008/02/23/codeigniter-textmate-bundle-additions#comments</comments>
		<pubDate>Sun, 24 Feb 2008 00:22:52 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2008/02/23/codeigniter-textmate-bundle-additions</guid>
		<description><![CDATA[After finding the excellent CodeIgniter TextMate Bundle, I&#8217;ve switched to TextMate as my editor of choice for my CodeIgniter development. I&#8217;ve tried switching to TextMate in the past and there is a lot I like about it, however I always end up back with BBEdit for find/replace and other text manipulation tools.
This time though. I [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "CodeIgniter TextMate Bundle Additions", url: "http://alexking.org/blog/2008/02/23/codeigniter-textmate-bundle-additions" });</script>]]></description>
			<content:encoded><![CDATA[<p>After finding the excellent <a href="http://www.sellersrank.com/codeigniter-textmate-bundle-download/" rel="external">CodeIgniter TextMate Bundle</a>, I&#8217;ve switched to <a href="http://macromates.com/" rel="external">TextMate</a> as my editor of choice for my <a href="http://codeigniter.com" rel="external">CodeIgniter</a> development. I&#8217;ve tried switching to TextMate <a href="http://alexking.org/blog/2006/02/22/textmate-has-improved" rel="external">in the past</a> and there is a lot I like about it, however I always end up back with BBEdit for find/replace and other text manipulation tools.</p>
<p>This time though. I think I may be switching to TextMate permanently for CI development. My main annoyance with CI is how verbose some of the syntax is. Shortcutting that is worth quite a lot to me.</p>
<p>I&#8217;ve added a couple of snippets to the CI bundle. Here they are in case anyone else finds them useful.</p>
<p>This gives you a model property - named &#8216;model->property&#8217; with Tab Trigger + cimod assigned:</p>
<div class="code"><code>\$this->${1:Model_name}_model->${2:property}$0</code></div>
<p>This gives you a model method - named &#8216;model->method&#8217; with Tab Trigger + cimod assigned:</p>
<div class="code"><code>\$this->${1:Model_name}_model->${2:method}(${3:args})$0</code></div>
<p>It&#8217;s a little thing, but I&#8217;m quite excited about this and I&#8217;m really looking forward to seeing if I can incorporate these time savers as habits as I&#8217;m doing a little CI work this weekend.</p>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=CodeIgniter+TextMate+Bundle+Additions&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2008%2F02%2F23%2Fcodeigniter-textmate-bundle-additions">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2008/02/23/codeigniter-textmate-bundle-additions/feed</wfw:commentRss>
		</item>
		<item>
		<title>SVN Scripts and Tools</title>
		<link>http://alexking.org/blog/2008/01/12/svn-scripts-and-tools</link>
		<comments>http://alexking.org/blog/2008/01/12/svn-scripts-and-tools#comments</comments>
		<pubDate>Sun, 13 Jan 2008 02:08:01 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2008/01/12/svn-scripts-and-tools</guid>
		<description><![CDATA[At Crowd Favorite we use Subversion for source control and document distribution and management. Last week, we were reminded just how much we rely on it.
We made the move from an outdated server to a more properly equipped one, and also used a more suitable domain and set up SSL and all the stuff we [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "SVN Scripts and Tools", url: "http://alexking.org/blog/2008/01/12/svn-scripts-and-tools" });</script>]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://crowdfavorite.com">Crowd Favorite</a> we use Subversion for source control and document distribution and management. Last week, we were reminded just how much we rely on it.</p>
<p>We made the move from an outdated server to a more properly equipped one, and also used a more suitable domain and set up SSL and all the stuff we should have had months ago. We also set up <a href="http://warehouseapp.com" rel="external">Warehouse</a>, which is a nice Rails web front-end for SVN. It also has a very poorly documented installation process and we spent about 12 man hours getting it set up. We still don&#8217;t have the permissions working right, but the web interface is very handy and there is more there than you realize at first glance.</p>
<p>In the server move we also lost our SVN commit e-mails for several days, and were having more trouble than we expected getting them set up again (the 4 different server documentation pages we found were wrong or outdated). In the end we just used the mail notifications from Warehouse instead.</p>
<p>SVN is <a href="http://alexking.org/blog/2007/12/20/iwork-bundles-broken">not without its flaws</a>, and I&#8217;ve been reading great things about <a href="http://git.or.cz/" rel="external">Git</a> and <a href="http://www.selenic.com/mercurial/wiki/" rel="external">Mercurial</a> recently, and the benefits these systems offer over SVN are compelling. However, SVN has one big benefit over these up and coming systems: existing tools and integrations.</p>
<p>I&#8217;ve come to use the SVN integration in <a href="http://cocoatech.com/pf4/" rel="external">Path Finder</a> about half the time now. I also use the SVN integration in <a href="http://barebones.com/products/bbedit/" rel="external">BBEdit</a>. Other folks on the team use the integration in <a href="http://macromates.com/" rel="external">TextMate</a> or a standalone tool like <a href="http://www.lachoseinteractive.net/en/community/subversion/svnx/" rel="external">SVN X</a>. Still others are waiting for <a href="http://versionsapp.com/" rel="external">enticing varporware</a> to materialize. The point is, the tools around a system are also important.</p>
<p>I use a desktop computer at home and a laptop at the office and on the road, so SVN is invaluable to me as a synchronization tool as well. Since we have several different SVN repositories, I&#8217;ve created some simple scripts to make it easy for me to update all of the repositories and check them all for uncommitted changes. Disclaimer: there&#8217;s nothing fancy here, and I&#8217;m not a bash guru, so suggestions and improvements are welcome.</p>
<h3>Updating</h3>
<p>First create a simple script to update all of the repositories (svn-st-all.sh):</p>
<div class="code"><code>#!/bin/sh</p>
<p>svn up ~/src/repo-1<br />
svn up ~/src/repo-2<br />
svn up ~/src/repo-3</code></div>
<p>Make sure the .sh file has executable file permissions.</p>
<p>Then set up an alias in your .profile so you can call the script with an easy command:</p>
<div class="code"><code>alias svnstall=/path/to/svn-up-all.sh</code></div>
<h3>Checking for Uncommitted Changes</h3>
<p>First create a another simple script (svn-st-all.sh):</p>
<div class="code"><code>#!/bin/sh</p>
<p>svn st ~/src/repo-1 > ~/Desktop/svn-status.txt<br />
svn st ~/src/repo-2 >> ~/Desktop/svn-status.txt<br />
svn st ~/src/repo-3 >> ~/Desktop/svn-status.txt</p>
<p>open -a TextMate ~/Desktop/svn-status.txt</code></div>
<p>This one checks the status of each repository and puts the result in a file, then opens that file in TextMate. Again, make sure the .sh file has executable file permissions.</p>
<p>Now create an alias for this one too:</p>
<div class="code"><code>alias svnupall=/path/to/svn-up-all.sh</code></div>
<p>Now in your terminal you can type &#8217;svnupall&#8217; to update all of your repositories, or &#8217;svnstall&#8217; to check all of your repositories for uncommitted changes.</p>
<p>Hopefully this will help someone else avoid the old &#8220;crap, I must have forgotten to check that in from my other machine&#8221; situation. <img src='http://alexking.org/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=SVN+Scripts+and+Tools&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2008%2F01%2F12%2Fsvn-scripts-and-tools">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2008/01/12/svn-scripts-and-tools/feed</wfw:commentRss>
		</item>
		<item>
		<title>iWork Bundles are Broken</title>
		<link>http://alexking.org/blog/2007/12/20/iwork-bundles-broken</link>
		<comments>http://alexking.org/blog/2007/12/20/iwork-bundles-broken#comments</comments>
		<pubDate>Thu, 20 Dec 2007 18:12:03 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2007/12/20/iwork-bundles-broken</guid>
		<description><![CDATA[At Crowd Favorite we use SVN at the core of our team development work. We recently tried to switch from Word and Excel documents to Pages and Numbers documents for estimates and proposals. Unfortunately, we&#8217;ve discovered that iWork breaks SVN.
The .numbers and .pages files are  bundles  - plain directories that OS X treats [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "iWork Bundles are Broken", url: "http://alexking.org/blog/2007/12/20/iwork-bundles-broken" });</script>]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://crowdfavorite.com">Crowd Favorite</a> we use <a href="http://subversion.tigris.org/" rel="external">SVN</a> at the core of our team development work. We recently tried to switch from Word and Excel documents to Pages and Numbers documents for estimates and proposals. Unfortunately, we&#8217;ve discovered that iWork breaks SVN.</p>
<p>The .numbers and .pages files are <img src='http://alexking.org/images/smilies/ak_scare1.gif' alt=':scare:' class='wp-smiley' /> bundles <img src='http://alexking.org/images/smilies/ak_scare2.gif' alt=':/scare:' class='wp-smiley' /> - plain directories that OS X treats differently. Quite reasonably, as a cross-platform solution, SVN does not care a whit about bundles, and treats these as any normal directory and files. The problem appears to be that when saving new versions of these files/bundles, the .svn directories inside these bundles are removed/altered/damaged.</p>
<p>This is clearly a problem with bundles and the iWork apps, not SVN. At least that&#8217;s my view - <a href="http://begoodnotbad.com/article/subversion-is-almost-good-enough/" rel="external">read a counter-argument here</a>.</p>
<p>More reading on the subject, including some work-around scripts:</p>
<ul>
<li><a href="http://sadilek.blogspot.com/2007/07/restore-svn-in-keynotepages-documents.html" rel="external">Restore .svn in Keynote/Pages documents</a></li>
<li><a href="http://work.onemanswalk.com/2007/11/4/working-with-iwork-and-subversion">Working with iWork and Subversion</a></li>
<li><a href="http://simplificator.com/2007/11/19/subversion-and-iwork/">Subversion and iWork</a></li>
</ul>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=iWork+Bundles+are+Broken&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2007%2F12%2F20%2Fiwork-bundles-broken">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2007/12/20/iwork-bundles-broken/feed</wfw:commentRss>
		</item>
		<item>
		<title>dompdf: Easy PDF generation with PHP</title>
		<link>http://alexking.org/blog/2007/11/25/dompdf-php-pdf-generation</link>
		<comments>http://alexking.org/blog/2007/11/25/dompdf-php-pdf-generation#comments</comments>
		<pubDate>Mon, 26 Nov 2007 03:41:05 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2007/11/25/dompdf-php-pdf-generation</guid>
		<description><![CDATA[A week and a half ago I started looking into PDF generation with PHP. As my friends pointed out, this can be a somewhat arduous process. Since I was working on a deadline1, I decided the best solution would be to create a nice printable view that I could create PDFs from, then come back [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "dompdf: Easy PDF generation with PHP", url: "http://alexking.org/blog/2007/11/25/dompdf-php-pdf-generation" });</script>]]></description>
			<content:encoded><![CDATA[<p>A week and a half ago I started looking into <a href="http://twitter.com/alexkingorg/statuses/418003942">PDF generation with PHP</a>. As my friends <a href="http://twitter.com/mytechbits/statuses/418344012" rel="external">pointed out</a>, this can be a somewhat arduous process. Since I was working on a deadline<sup><a href="#fn1196006984791n" id="fn1196006984791" class="footnote">1</a></sup>, I decided the best solution would be to create a nice printable view that I could create PDFs from, then come back to the actual PDF generation if I had time.</p>
<p>Getting the printable view done was pretty easy, and once I had it ready I thought &#8220;surely<sup><a href="#fn1196007159149n" id="fn1196007159149" class="footnote">2</a></sup> someone has to have created an HTML to PDF generator&#8221;. A little looking around and I discovered <a href="http://www.digitaljunkies.ca/dompdf/" rel="external">dompdf</a>, an LGPL PHP5 library which does exactly that.</p>
<p>The simple example page worked great, but then I ran into a couple of stumbling blocks early when trying to create a PDF of my printable HTML page:</p>
<ol>
<li>dompdf doesn&#8217;t gracefully handle <code>IMG</code> tags with empty src attributes. I hadn&#8217;t gotten around to setting up the images yet, so I just removed the <code>IMG</code> tag and that let me to&#8230;</li>
<li>dompdf doesn&#8217;t seem to handle <code>TH</code> (table heading) tags properly. I got a DOMText::getAttribute() error that I was unable to find reports of online. Finally I tried removing the <code>TH</code> tags<sup><a href="#fn1196007598940n" id="fn1196007598940" class="footnote">3</a></sup> and everything worked great.</li>
</ol>
<p>After that, it was just a matter of tweaking the CSS and HTML until I was happy with it. Total time to get from start to application generated PDFs: 3 days. Day 1: create printable HTML view. Day 2: integrate dompdf and get it all working. Day 3: add the polish of breaking tables at pages, etc.</p>
<p>There are some quirks, but the FAQ and forums have a lot of answers and after a short time digging around you&#8217;ll find answers to most of your questions. Here are a couple of tips that should be useful:</p>
<ul>
<li>The page canvas the dompdf uses seems to be 600px wide. I set my <code>BODY</code> tag to <code>width: 560px</code> and <code>padding: 0 20px;</code> and that has worked well.</li>
<li>dompdf doesn&#8217;t like all CSS shortcuts. In particular, <code>font: 12pt Helvetica;</code> and <code>background: #999;</code> didn&#8217;t work as well as explicitly setting the <code>font-family</code> and <code>font-size</code> separately, and setting the <code>background-color</code>.</li>
<li>If you want to create page breaks, <a href="http://sourceforge.net/forum/message.php?msg_id=4538197" rel="external">this is your huckleberry</a> (<a href="http://www.digitaljunkies.ca/dompdf/faq.php#page_break" rel="external">also in the FAQ</a>, I missed it at first glance).</li>
<li><a href="http://www.digitaljunkies.ca/dompdf/faq.php#footers" rel="external">Adding page numbers</a> is pretty easy.</li>
</ul>
<p>This has been a huge time saver for me, many thanks to Benj Carson and the other contributors to the project.</p>
<ol class="footnotes">
<li id="fn1196006984791n">I needed to be able to generate PDFs of this data by the end of the month. [<a href="#fn1196006984791">back</a>]</li>
<li id="fn1196007159149n">&#8230;and <a href="http://www.imdb.com/title/tt0080339/quotes" rel="external">don&#8217;t call me Shirley</a>. [<a href="#fn1196007159149">back</a>]</li>
<li id="fn1196007598940n">I replaced them with <code>TD</code> tags - this HTML is only to print or generate a PDF so validation and semantic HTML goodness take a backseat. Perhaps I&#8217;ll see how difficult it is to add <code>TH</code> support and contribute it back (in my copious spare time). [<a href="#fn1196007598940">back</a>]</li>
</ol>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=dompdf%3A+Easy+PDF+generation+with+PHP&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2007%2F11%2F25%2Fdompdf-php-pdf-generation">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2007/11/25/dompdf-php-pdf-generation/feed</wfw:commentRss>
		</item>
		<item>
		<title>Apache 2 Only Serves First Virtual Host</title>
		<link>http://alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host</link>
		<comments>http://alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host#comments</comments>
		<pubDate>Fri, 02 Nov 2007 05:17:22 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host</guid>
		<description><![CDATA[Note: this post is mainly to help people searching for a solution to this issue.
Yesterday I upgraded to Mac OS X 10.5 Leopard which brought Apache 2 to me along with the many other changes. I develop sites locally using domains like alexking.dev, crowdfavorite.dev, etc. by setting these up HOSTS entries and virtual hosts in [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Apache 2 Only Serves First Virtual Host", url: "http://alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host" });</script>]]></description>
			<content:encoded><![CDATA[<p>Note: this post is mainly to help people searching for a solution to this issue.</p>
<p>Yesterday I upgraded to Mac OS X 10.5 Leopard which brought Apache 2 to me along with the many other changes. I develop sites locally using domains like alexking.dev, crowdfavorite.dev, etc. by setting these up HOSTS entries and virtual hosts in Apache.</p>
<p>In Apache 1.x, I had the following in my httpd.conf:</p>
<div class="code"><code>NameVirtualHost *:80</p>
<p>&lt;VirtualHost *&gt;<br />
DocumentRoot /path/to/site<br />
ServerName alexking.dev<br />
&lt;/VirtualHost&gt;<br />
&#8230;<br />
</code></div>
<p>This worked fine, serving all of my virtual hosts.</p>
<p>After Leopard upgraded me to Apache 2, I added this to my /etc/apache2/extra/httpd-vhosts.conf file and enabled that file in the httpd.conf file. After doing so, no matter which site I tried to load (alexking.dev, crowdfavorite.dev, etc.), it would only load the first declared virtual host.</p>
<p>My Apache skills are feeble, but luckily, our resident <a href="http://crowdfavorite.com">Crowd Favorite</a> Linux jockey came to my rescue. <a href="http://amountaintop.com" rel="external">Mike</a> knew that Apache 2 handled the *:80 differently than Apache 1.x. Sure enough, this simple change:</p>
<div class="code"><code>NameVirtualHost *</p>
<p>&lt;VirtualHost *&gt;<br />
DocumentRoot /path/to/site<br />
ServerName alexking.dev<br />
&lt;/VirtualHost&gt;<br />
&#8230;<br />
</code></div>
<p>and everything worked like a champ.</p>
<p>Hopefully this will help someone else struggling with the same issue.</p>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=Apache+2+Only+Serves+First+Virtual+Host&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2007%2F11%2F01%2Fapache-2-only-serves-first-virtual-host">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host/feed</wfw:commentRss>
		</item>
		<item>
		<title>RandomBits Podcast Interview</title>
		<link>http://alexking.org/blog/2007/10/08/randombits-podcast</link>
		<comments>http://alexking.org/blog/2007/10/08/randombits-podcast#comments</comments>
		<pubDate>Mon, 08 Oct 2007 18:43:11 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Interviews]]></category>

		<category><![CDATA[Crowd Favorite]]></category>

		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2007/10/08/randombits-podcast</guid>
		<description><![CDATA[Sara Smith interviewed me for a RandomBits Podcast. She asks some good questions, I hope my answers are interesting.
The discussion includes a variety of things, including:

WordPress
Crowd Favorite
ShareThis
MyFreeBusy

<script type="text/javascript">SHARETHIS.addEntry({ title: "RandomBits Podcast Interview", url: "http://alexking.org/blog/2007/10/08/randombits-podcast" });</script>]]></description>
			<content:encoded><![CDATA[<p>Sara Smith interviewed me for a <a href="http://www.search-this.com/2007/10/08/random-bits-podcast-with-alex-king/" rel="external">RandomBits Podcast</a>. She asks some good questions, I hope my answers are interesting.</p>
<p>The discussion includes a variety of things, including:</p>
<ul>
<li>WordPress</li>
<li><a href="http://crowdfavorite.com">Crowd Favorite</a></li>
<li><a href="http://sharethis.com" rel="external">ShareThis</a></li>
<li><a href="http://myfreebusy.com" rel="external">MyFreeBusy</a></li>
</ul>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=RandomBits+Podcast+Interview&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2007%2F10%2F08%2Frandombits-podcast">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2007/10/08/randombits-podcast/feed</wfw:commentRss>
		</item>
		<item>
		<title>View Local SVN Diff in TextMate</title>
		<link>http://alexking.org/blog/2007/09/16/view-svn-diff-in-textmate</link>
		<comments>http://alexking.org/blog/2007/09/16/view-svn-diff-in-textmate#comments</comments>
		<pubDate>Mon, 17 Sep 2007 03:26:03 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2007/09/16/view-svn-diff-in-textmate</guid>
		<description><![CDATA[I created the simplest of little bash functions that I use just about everyday. All it does is:

Save the output of the SVN diff command of the current directory in a temp file.
Open that temp file in TextMate, which does beautiful color coding of the diff for easy review before I check in.1

That&#8217;s it.
It&#8217;s very [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "View Local SVN Diff in TextMate", url: "http://alexking.org/blog/2007/09/16/view-svn-diff-in-textmate" });</script>]]></description>
			<content:encoded><![CDATA[<p>I created the simplest of little bash functions that I use just about everyday. All it does is:</p>
<ol>
<li>Save the output of the SVN diff command of the current directory in a temp file.</li>
<li>Open that temp file in TextMate, which does beautiful color coding of the diff for easy review before I check in.<sup><a href="#fn1189832060825n" id="fn1189832060825" class="footnote">1</a></sup></li>
</ol>
<p>That&#8217;s it.</p>
<p>It&#8217;s very easy to set up. Edit your .profile file to add the following line:</p>
<div class="code"><code>diffit () { svn diff > ~/Desktop/temp.diff; open -a TextMate ~/Desktop/temp.diff; }<br />
</code></div>
<p>Now open a new terminal window, navigate to an SVN checkout directory that has local changes, and type &#8216;diffit&#8217; - the command you just defined. You should see the SVN diff results in TextMate, and saved in a temp.diff file on your desktop.</p>
<ol class="footnotes">
<li id="fn1189832060825n">Now that I think about it, I need to take the time to get Araxis Merge set up to see how it handles .diff files. Also how well its SVN tools work. [<a href="#fn1189832060825">back</a>]</li>
</ol>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=View+Local+SVN+Diff+in+TextMate&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2007%2F09%2F16%2Fview-svn-diff-in-textmate">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2007/09/16/view-svn-diff-in-textmate/feed</wfw:commentRss>
		</item>
		<item>
		<title>Priorities</title>
		<link>http://alexking.org/blog/2007/09/06/priorities</link>
		<comments>http://alexking.org/blog/2007/09/06/priorities#comments</comments>
		<pubDate>Thu, 06 Sep 2007 22:51:24 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
		
		<category><![CDATA[Crowd Favorite]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://alexking.org/blog/2007/09/06/priorities</guid>
		<description><![CDATA[One of the challenges I&#8217;ve been facing over the last couple of months since we&#8217;ve brought on more staff and started accepting more custom development work at Crowd Favorite is how to avoid having the entire day eaten up by e-mail and phone calls with prospects and clients.
I&#8217;ve never been a zealot about the inbox [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Priorities", url: "http://alexking.org/blog/2007/09/06/priorities" });</script>]]></description>
			<content:encoded><![CDATA[<p>One of the challenges I&#8217;ve been facing over the last couple of months since we&#8217;ve brought on more staff and started accepting more custom development work at <a href="http://crowdfavorite.com">Crowd Favorite</a> is how to avoid having the entire day eaten up by e-mail and phone calls with prospects and clients.</p>
<p>I&#8217;ve never been a zealot about the <a href="http://www.43folders.com/izero/" rel="external">inbox zero</a> methodology, but I have always tried to reply to all business e-mails the same day I receive them. Recently, that has become more and more difficult due to the communication required with clients and the project leads that have been coming through the door.</p>
<p>This year I have stopped replying to business e-mail outside of business hours (though I back-slide on this at times). Though it was an uncomfortable transition, it has generally worked well. I think it&#8217;s now time for me to start a similar transition with a system to prioritize which e-mails get replied to first (with some further down the list not getting replies the same business day).</p>
<ol>
<li>Current custom development clients and software customers.</li>
<li>Previous/returning custom development clients.</li>
<li>Custom development prospective clients and potential software customers with whom I have already exchanged e-mails.</li>
<li>New custom development prospective clients and potential software customers.</li>
</ol>
<p>This is the right order for the way I want to run my business<sup><a href="#fn1188876958162n" id="fn1188876958162" class="footnote">1</a></sup>, but I know it isn&#8217;t how all businesses work. Lots of folks seem to put sales way above support - the call hold time for sales vs. the call hold time for support with every cell phone service I&#8217;ve had is a good example of that approach.</p>
<p>Longer term, we&#8217;ll solve this by continuing to expand with additional people in the right places, but this will likely continue to be an issue for a little while. It&#8217;s the right problem to have, too much chatter instead of not enough. <img src='http://alexking.org/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I&#8217;m going to think this over a little more, and I welcome your feedback in the comments. Once I&#8217;m satisfied that this is the right interim solution, I&#8217;ll be posting an official policy on the Crowd Favorite web site, and adding a link to the policy in our auto-reply e-mails.</p>
<ol class="footnotes">
<li id="fn1188876958162n">And most folks seem to be comfortable with this, they realize they will get the same treatment when they are a client/customer. [<a href="#fn1188876958162">back</a>]</li>
</ol>
<p><a href="http://sharethis.com/item?&wp=2.2.3&amp;publisher=06654962-d77d-102a-861d-00161729a8a2&amp;title=Priorities&amp;url=http%3A%2F%2Falexking.org%2Fblog%2F2007%2F09%2F06%2Fpriorities">ShareThis</a></p>]]></content:encoded>
			<wfw:commentRss>http://alexking.org/blog/2007/09/06/priorities/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
