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

<channel>
	<title>Davey Shafik &#187; tagged</title>
	<atom:link href="http://daveyshafik.com/archives/category/tagged/feed" rel="self" type="application/rss+xml" />
	<link>http://daveyshafik.com</link>
	<description>As close to my brain as you can safely get...</description>
	<lastBuildDate>Tue, 02 Feb 2010 05:48:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Netbeans for PHP: Continues to Impress</title>
		<link>http://daveyshafik.com/archives/743-netbeans-for-php-continues-to-impress.html</link>
		<comments>http://daveyshafik.com/archives/743-netbeans-for-php-continues-to-impress.html#comments</comments>
		<pubDate>Tue, 02 Feb 2010 05:48:39 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[tagged]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend studio]]></category>
		<category><![CDATA[zend studio 5.5]]></category>
		<category><![CDATA[zend studio migration]]></category>

		<guid isPermaLink="false">http://daveyshafik.com/?p=743</guid>
		<description><![CDATA[<p>It seems that I don&#8217;t blog much unless IDE&#8217;s are concerned; there is a good reason for this: IDEs are an integral part of my development process and when they suck, development sucks.</p>
<h4>The story so far:</h4>
<ul>
<li>Boy meets ZDE 2.5</li>
<li>ZDE grows up to 5.5</li>
<li>ZDE gets replaced by new eclipse-based ZSfE/PDT</li>
<li>ZDE keeps going, until one day, Boy upgrades OSX</li>
<li>Boy hacks OSX, but ZDE is running on a donut</li>
<li>OSX update kills ZDE for good</li>
<li>Boy</li></ul><p>…</p>]]></description>
			<content:encoded><![CDATA[<p>It seems that I don&#8217;t blog much unless IDE&#8217;s are concerned; there is a good reason for this: IDEs are an integral part of my development process and when they suck, development sucks.</p>
<h4>The story so far:</h4>
<ul>
<li>Boy meets ZDE 2.5</li>
<li>ZDE grows up to 5.5</li>
<li>ZDE gets replaced by new eclipse-based ZSfE/PDT</li>
<li>ZDE keeps going, until one day, Boy upgrades OSX</li>
<li>Boy hacks OSX, but ZDE is running on a donut</li>
<li>OSX update kills ZDE for good</li>
<li>Boy cries</li>
<li>Boy finds Netbeans</li>
</ul>
<p>This is the continuation of that story. In <a href="http://daveyshafik.com/archives/494-netbeans-the-other-open-source-ide-platform.html">the last installment</a> Netbeans 6.7 was a nightly build, it had gotten it&#8217;s OSX look and feel, and it was starting to get it&#8217;s remote debugging up and running. </p>
<p>Now, 6.8 has been out for almost 2 months, and things are really starting to gather steam. With the death of ZDE5.5 finally a reality, and PHP 5.3 code starting to become part of my work-day, I finally jumped 100% to Netbeans.</p>
<p>And let me tell you, Netbeans 6.8 is nothing short of amazing. Debugging with xdebug is now almost as easy as ZDE, it works instantly on 90% of my remote machines, but I have 1 cluster for which Netbeans simply *cannot* find the local source file, making it impossible to debug. </p>
<p>Watches, breakpoints (though, I haven&#8217;t figured out conditional breakpoints, if they are there), callstack and local variables work as you would expect (though watches/variables sometimes refuse to populate larger vars, I think this is xdebug config related). In addition, Netbeans supports arbitrary breakpoint groupings; these can be enabled and disabled as a group — very neat.</p>
<p>In addition, it has path mapping to help with remote/local file correlation; so it can find the local file to show the source during debugging — this stops the problem ZDE has where two files have the same <code>basename()</code> and it&#8217;s unable to choose the correct one.</p>
<p>However, a fully functional debugger is a <strong>minimum</strong> requirement. Netbeans 6.8 also has great support for PHP 5.3 (though it has <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=178043">some syntax support bugs</a>), again another <strong>minimum</strong>.</p>
<p>So where does Netbeans shine? The single biggest answer to that, is PHPUnit support. Netbeans lets you specify your test folder, and abstracts it out of the project, so your tests are separated visually; this is a great minor addition. In addition, Netbeans can generate unit tests (this utilizes phpunit&#8217;s built-in functionality), and has a great UI for running tests.</p>
<p>You can run a single unit test by simply right clicking on the test and choosing Run, or you can test a whole project by right clicking on the project and choosing Test. Doing this will bring up the Test Results pane:</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2010/02/unittest-ui.png" rel="lightbox[743]"><img src="http://daveyshafik.com/wp-content/uploads/2010/02/unittest-ui-300x48.png" alt="" title="Netbeans Test Results UI" width="300" height="48" class="aligncenter size-medium wp-image-747" /></a></p>
<p>As you can see, it shows the number of tests, the test suite, and it&#8217;s test status; this can then be expanded to show individual test methods. </p>
<p>Further to this, you can have Netbeans capture code coverage information, if you have the xdebug extension installed locally. This then manifests visually in two ways; the first, is a summary:</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2010/02/code-coverage.png" rel="lightbox[743]"><img src="http://daveyshafik.com/wp-content/uploads/2010/02/code-coverage-300x99.png" alt="" title="Netbeans Code Coverage Summary" width="300" height="99" class="aligncenter size-medium wp-image-748" /></a></p>
<p>The second, more impressive/useful way, is visually within each file:</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2010/02/code-coverage-file.png" rel="lightbox[743]"><img src="http://daveyshafik.com/wp-content/uploads/2010/02/code-coverage-file-300x90.png" alt="" title="Netbeans Code Coverage Inline" width="300" height="90" class="aligncenter size-medium wp-image-749" /></a></p>
<p>You will also notice that this adds a set of buttons below the code, which can be used to run the test for just the current file (based on the typical phpunit file/test naming structure, I assume) and to re-run the entire test suite.</p>
<p>To me, this integration is phenomenal, and is changing the way I work. This is a great example of an IDE conforming to your workflow, and proving new ways to do things; rather than fighting you and requiring you to change to it&#8217;s needs and ideals.</p>
<p>Other things of note, Netbeans 6.8 has Symfony project integration, and 6.9 is including Zend Framework integration, if those things appeal to you — I have yet to play with either, so can&#8217;t comment on their usefulness.</p>
<p>I can, without doubt, confidently say, that despite the few bugs, and some still immature minor things, Netbeans is my recommendation for an IDE.</p>
<p><a href="http://netbeans.org">Go grab Netbeans today</a>.</p>
<p>- Davey</p>
]]></content:encoded>
			<wfw:commentRss>http://daveyshafik.com/archives/743-netbeans-for-php-continues-to-impress.html/feed</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>A Year in Review</title>
		<link>http://daveyshafik.com/archives/738-a-year-in-review-2.html</link>
		<comments>http://daveyshafik.com/archives/738-a-year-in-review-2.html#comments</comments>
		<pubDate>Fri, 01 Jan 2010 21:34:40 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[tagged]]></category>

		<guid isPermaLink="false">http://daveyshafik.com/?p=738</guid>
		<description><![CDATA[<p>This last year has been quite eventful for me; but the decisions I made are what made is so great.</p>
<p>First, I decided to get more serious about my photography, and by mid-year, I had my first DSLR, a Nikon D40.</p>
<p>Secondly, I decided to get more serious about getting back into consulting. This is the decision that is the focus of 2010 for me.</p>
<p>So, looking back at the year, and what I got up to:</p>
<p>In January, I…</p>]]></description>
			<content:encoded><![CDATA[<p>This last year has been quite eventful for me; but the decisions I made are what made is so great.</p>
<p>First, I decided to get more serious about my photography, and by mid-year, I had my first DSLR, a Nikon D40.</p>
<p>Secondly, I decided to get more serious about getting back into consulting. This is the decision that is the focus of 2010 for me.</p>
<p>So, looking back at the year, and what I got up to:</p>
<p>In January, I went to my first re-enactment, a pre-1840 event called &#8220;The Alafia River Rendezvous&#8221;.</p>
<p><a href="http://www.flickr.com/photos/dshafik/sets/72157612947802109/"><img src="http://farm4.static.flickr.com/3478/3226670563_27727c3021.jpg" alt="Alafia River Rendezvous" /></a></p>
<p>In February, I enjoyed Valentines.</p>
<p><a href="http://www.flickr.com/photos/dshafik/3330004348/"><img src="http://farm4.static.flickr.com/3368/3330004348_24185a6b9f.jpg" alt="Happy Valentines" /></a></p>
<p>In March, I enjoyed the Sunsets.</p>
<p><a href="http://www.flickr.com/photos/dshafik/3329234653/"><img src="http://farm4.static.flickr.com/3578/3329234653_64c00b1372.jpg" alt="Sunset" /></a></p>
<p>In April, I went to my first classic car show.</p>
<p><a href="http://www.flickr.com/photos/dshafik/3474559913/"><img src="http://farm4.static.flickr.com/3568/3474559913_99c2a39d36.jpg" alt="Zephyrhills Classic Car Show" /></a></p>
<p>In May, I celebrated my 25th birthday, and my girlfriend took me to Disney® Hollywood Studios. This is also when I got my coveted Nikon D40.</p>
<p><a href="http://www.flickr.com/photos/dshafik/sets/72157618991782921/"><img src="http://farm4.static.flickr.com/3632/3584262944_922bfaf85c.jpg" /></a></p>
<p>June saw me getting up-close with some Giraffes at Disney&#8217;s® Animal Kingdom.</p>
<p><a href="http://www.flickr.com/photos/dshafik/sets/72157619303028179/"><img src="http://farm3.static.flickr.com/2463/3603197075_2532abccf1.jpg" /></a></p>
<p>In July I met long-time intarweb friend, Alison (aka <a href="http://twitter.com/snipeyhead">@snipeyhead</a>)</p>
<p><a href="http://www.flickr.com/photos/dshafik/3736596966/"><img src="http://farm3.static.flickr.com/2524/3736596966_14406d678a.jpg" /></a></p>
<p>August saw me enter my first <a href="http://digital-photography-school.com/">Digital Photography School</a> competition.</p>
<p><a href="http://www.flickr.com/photos/dshafik/3831951387/"><img src="http://farm3.static.flickr.com/2558/3831951387_f8ac291c31.jpg" /></a></p>
<p>In September I took my first cruise, something I highly recommend to anyone really looking to relax on vacation!</p>
<p><a href="http://www.flickr.com/photos/dshafik/sets/72157622225259989/"><img src="http://farm3.static.flickr.com/2568/3912966391_08a252774e.jpg"></a></p>
<p>In October I was fortunate enough to speak at Code Works in Miami, and I got to stay on South Beach,</p>
<p><a href="http://www.flickr.com/photos/dshafik/3968332821/"><img src="http://farm3.static.flickr.com/2674/3968332821_34d25ab842.jpg" /></a></p>
<p>November saw me embracing Christmas early, with Mickey&#8217;s Very Merry Christmas Party.</p>
<p><a href="http://www.flickr.com/photos/dshafik/4129221707/"><img src="http://farm3.static.flickr.com/2752/4129221707_48e7d01263.jpg" /></a></p>
<p>Then, in December, I once again visited Disney® Hollywood Studios, and took my favorite photo of the year</p>
<p><a href="http://www.flickr.com/photos/dshafik/4216212595/"><img src="http://farm3.static.flickr.com/2488/4216212595_ef11b6198a.jpg" /></a></p>
<p>In 2010, I have decided to re-affirm both of my decisions, for my photography, I&#8217;m going to commit to taking <strong>one</strong> photo I&#8217;m very happy with <em>each week</em>. To do this, I&#8217;m going to start taking photo walks, visiting local state parks etc.</p>
<p>For my consulting, well, you&#8217;ll just have to wait and see.</p>
<p>Hope everybody has a wonderful 2010!</p>
<p>- Davey</p>
]]></content:encoded>
			<wfw:commentRss>http://daveyshafik.com/archives/738-a-year-in-review-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging on the Command Line with xdebug</title>
		<link>http://daveyshafik.com/archives/734-debugging-on-the-command-line-with-xdebug.html</link>
		<comments>http://daveyshafik.com/archives/734-debugging-on-the-command-line-with-xdebug.html#comments</comments>
		<pubDate>Thu, 31 Dec 2009 16:24:49 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[tagged]]></category>

		<guid isPermaLink="false">http://daveyshafik.com/?p=734</guid>
		<description><![CDATA[<p>Thanks to some help from <a href="http://derickrethans.nl">Derick</a> and my co-worker <a href="http://twitter.com/magical_trevor">Trevor</a>, I now have a simple bash script that will let me and my team easily debug CLI scripts on our development server.</p>
<p>The script is as follows:</p>
<pre class="brush: sh">
#!/bin/bash
XDEBUG_CONFIG=&#34;idekey=YOURIDEKEYHERE&#34; php -dxdebug.remote_host=`echo $SSH_CLIENT &#124; cut -d &#34;=&#34; -f 2 &#124; awk &#039;{print $1}&#039;` $1
</pre>
<p>This simple script will use your SSH_CLIENT environment variable to set the <code>xdebug.remote_host</code> setting correctly. Just set your idekey, and you&#8217;re…</p>]]></description>
			<content:encoded><![CDATA[<p>Thanks to some help from <a href="http://derickrethans.nl">Derick</a> and my co-worker <a href="http://twitter.com/magical_trevor">Trevor</a>, I now have a simple bash script that will let me and my team easily debug CLI scripts on our development server.</p>
<p>The script is as follows:</p>
<pre class="brush: sh">
#!/bin/bash
XDEBUG_CONFIG=&quot;idekey=YOURIDEKEYHERE&quot; php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d &quot;=&quot; -f 2 | awk &#039;{print $1}&#039;` $1
</pre>
<p>This simple script will use your SSH_CLIENT environment variable to set the <code>xdebug.remote_host</code> setting correctly. Just set your idekey, and you&#8217;re good to go.</p>
<p>I put it in <code>/usr/local/bin/xdebug</code> and you call it simply with <code>xdebug file.php</code> with your debugger<br />
running on the machine you&#8217;re SSH&#8217;ing from.</p>
<p>Works great!</p>
<p>- Davey</p>
]]></content:encoded>
			<wfw:commentRss>http://daveyshafik.com/archives/734-debugging-on-the-command-line-with-xdebug.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing ZDE 5.5 in Snow Leopard</title>
		<link>http://daveyshafik.com/archives/721-fixing-zde-5-5-in-snow-leopard.html</link>
		<comments>http://daveyshafik.com/archives/721-fixing-zde-5-5-in-snow-leopard.html#comments</comments>
		<pubDate>Mon, 31 Aug 2009 03:01:50 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[tagged]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[snow leopard]]></category>
		<category><![CDATA[zde]]></category>
		<category><![CDATA[zde 5.5]]></category>
		<category><![CDATA[zend studio]]></category>
		<category><![CDATA[zend studio 5.5]]></category>

		<guid isPermaLink="false">http://daveyshafik.com/?p=721</guid>
		<description><![CDATA[<p>If you are still using Zend Studio 5.5, and recently upgrade to Snow Leopard, you will have spotted pretty quickly there is a pretty severe display bug when selecting text.</p>
<p>The reason for this, is that Snow Leopard only ships with Java 1.6 and 1.3 (wtf?)</p>
<pre class="brush: sh">
$ ls -al
total 47
drwxr-xr-x  12 root   wheel  408 Aug 30 22:08 .
drwxr-xr-x  11 root   wheel  374 Aug 29 10:27 ..
lrwxr-xr-x   1 root   wheel    5 Aug 29 10:26</pre><p>…</p>]]></description>
			<content:encoded><![CDATA[<p>If you are still using Zend Studio 5.5, and recently upgrade to Snow Leopard, you will have spotted pretty quickly there is a pretty severe display bug when selecting text.</p>
<p>The reason for this, is that Snow Leopard only ships with Java 1.6 and 1.3 (wtf?)</p>
<pre class="brush: sh">
$ ls -al
total 47
drwxr-xr-x  12 root   wheel  408 Aug 30 22:08 .
drwxr-xr-x  11 root   wheel  374 Aug 29 10:27 ..
lrwxr-xr-x   1 root   wheel    5 Aug 29 10:26 1.3 → 1.3.1
drwxr-xr-x   3 root   wheel  102 Jul 20 19:35 1.3.1
lrwxr-xr-x   1 root   wheel   10 Aug 29 10:26 1.5 → CurrentJDK
lrwxr-xr-x   1 root   wheel   10 Aug 29 10:26 1.5.0 → CurrentJDK
lrwxr-xr-x   1 root   wheel    5 Aug 29 10:26 1.6 → 1.6.0
drwxr-xr-x   7 root   wheel  238 Aug 29 10:26 1.6.0
drwxr-xr-x   8 root   wheel  272 Aug 29 10:27 A
lrwxr-xr-x   1 root   wheel    1 Aug 29 10:27 Current → A
lrwxr-xr-x   1 root   wheel    3 Aug 29 10:26 CurrentJDK → 1.6
</pre>
<p>As you can see, except for the 1.3 JDK, everything else symlinks to 1.6.0. Now, ZDE will not run with 1.3, and is broken in 1.6, so how do you fix this?</p>
<p>The answer, can be found here: <a href="http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard">http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard</a></p>
<p>I am replicating it here, as it looks like it&#8217;ll be a temporary problem for them and is likely to disappear.</p>
<p><strong>Update (9/13/2009):</strong> See <a href="http://chxor.chxo.com/post/183013153/installing-java-1-5-on-snow-leopard">this post</a> for details on getting the Java 1.5 binaries from Apple themselves.</p>
<p>It essentially comes down to this: Grab the Java 1.5 JDK from Leopard (original) and then tell OSX to use the 32bit version by default.</p>
<p>This is all done through the Terminal.</p>
<p>So, first, grab the 1.5.0 leopard tarball and unpack (if the link below stops working, <a href="/contact-me">contact me</a> for a mirror):</p>
<pre class="brush: plain">
cd /tmp/
wget http://www.cs.washington.edu/homes/isdal/snow_leopard_workaround/java.1.5.0-leopard.tar.gz
tar -xvzf java.1.5.0-leopard.tar.gz
</pre>
<p>Next, move the folder to the standard JVM location on OSX (this will require your user password):</p>
<pre class="brush: sh">
sudo mv 1.5.0 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0-leopard
</pre>
<p>Then remove the current 1.5.0 symlink and point a new one to our new <code>1.5.0-leopard</code> directory.</p>
<pre class="brush: sh">
cd /System/Library/Frameworks/JavaVM.framework/Versions/
sudo rm 1.5.0
sudo ln -s 1.5.0-leopard 1.5.0
</pre>
<p>Next (and this isn&#8217;t in the original document), set permissions:</p>
<pre class="brush: sh">
sudo chown -R root:wheel ./1.5.0-leopard
</pre>
<p>Finally, open up the <code>Java Preferences</code> app in <code>/Applications/Utilities</code>, and in the Java Applications section, drag the &#8220;J2S2 5.0        32bit&#8221; version to the top.</p>
<p>After doing all this, restart ZDE and the selection bug is gone!</p>
<p>- Davey</p>
]]></content:encoded>
			<wfw:commentRss>http://daveyshafik.com/archives/721-fixing-zde-5-5-in-snow-leopard.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>ZDE 5.5 On OSX</title>
		<link>http://daveyshafik.com/archives/717-zde-5-5-on-osx.html</link>
		<comments>http://daveyshafik.com/archives/717-zde-5-5-on-osx.html#comments</comments>
		<pubDate>Fri, 28 Aug 2009 17:06:52 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[tagged]]></category>
		<category><![CDATA[crashes]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jre]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zde]]></category>
		<category><![CDATA[zde 5.5]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend studio]]></category>

		<guid isPermaLink="false">http://daveyshafik.com/?p=717</guid>
		<description><![CDATA[<p>Even though I am in the process of trying to replace it, Zend Studio 5.5 is still my day-to-day IDE for development. However, on OSX Leopard, it has seemed for a while, like the app was decaying — growing progressively crashier the more I used it. Literally, to the point where I could use it.</p>
<p>I think, however, I have solved the issue.</p>
<p>Simply edit <code>/Applications/Zend/ZendStudio-5.5.1/bin/runStudio_mac.sh</code> and make the following change:</p>
<pre class="brush: sh">
java -Xms16m -Xmx256m -cp ZendIDE.jar:MRJToolkitStubs.zip:sftp.jar:axis.jar:commons-discovery-0.2.jar:commons-logging-1.0.4.jar:javaxzombie.jar:jaxrpc.jar:saaj.jar:wsdl4j-1.5.1.jar:jhall.jar:../docs/help.zip com.zend.ide.desktop.Main
</pre><p>…</p>]]></description>
			<content:encoded><![CDATA[<p>Even though I am in the process of trying to replace it, Zend Studio 5.5 is still my day-to-day IDE for development. However, on OSX Leopard, it has seemed for a while, like the app was decaying — growing progressively crashier the more I used it. Literally, to the point where I could use it.</p>
<p>I think, however, I have solved the issue.</p>
<p>Simply edit <code>/Applications/Zend/ZendStudio-5.5.1/bin/runStudio_mac.sh</code> and make the following change:</p>
<pre class="brush: sh">
java -Xms16m -Xmx256m -cp ZendIDE.jar:MRJToolkitStubs.zip:sftp.jar:axis.jar:commons-discovery-0.2.jar:commons-logging-1.0.4.jar:javaxzombie.jar:jaxrpc.jar:saaj.jar:wsdl4j-1.5.1.jar:jhall.jar:../docs/help.zip com.zend.ide.desktop.Main
</pre>
<p>becomes:</p>
<pre class="brush: sh">
/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home/bin/java -Xms16m -Xmx256m -cp ZendIDE.jar:MRJToolkitStubs.zip:sftp.jar:axis.jar:commons-discovery-0.2.jar:commons-logging-1.0.4.jar:javaxzombie.jar:jaxrpc.jar:saaj.jar:wsdl4j-1.5.1.jar:jhall.jar:../docs/help.zip com.zend.ide.desktop.Main
</pre>
<p>This just explicitly makes it use JVM 1.5, which is, after all, what it was built for.</p>
<p>Once I did this, it became snappy again, and seems to be far less crash-prone, hurrah!</p>
<p>- Davey</p>
]]></content:encoded>
			<wfw:commentRss>http://daveyshafik.com/archives/717-zde-5-5-on-osx.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cloud = Lazy</title>
		<link>http://daveyshafik.com/archives/713-cloud-lazy.html</link>
		<comments>http://daveyshafik.com/archives/713-cloud-lazy.html#comments</comments>
		<pubDate>Sun, 16 Aug 2009 21:00:42 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[tagged]]></category>

		<guid isPermaLink="false">http://daveyshafik.com/?p=713</guid>
		<description><![CDATA[<p>Just over a year ago, I moved my web hosting from a dedicated server to what is now the Rackspace Cloud. </p>
<p>My main reason for doing this were a desire to stop maintaining my own systems while still having plenty of room for growth as I take on new clients and create new projects. System maintenance is a time sync I cannot afford.</p>
<p>Having said this, I continued to maintain my own dev server at home. This was my…</p>]]></description>
			<content:encoded><![CDATA[<p>Just over a year ago, I moved my web hosting from a dedicated server to what is now the Rackspace Cloud. </p>
<p>My main reason for doing this were a desire to stop maintaining my own systems while still having plenty of room for growth as I take on new clients and create new projects. System maintenance is a time sync I cannot afford.</p>
<p>Having said this, I continued to maintain my own dev server at home. This was my old desktop machine, an AMD AthlonXP 3200+ (2.2Ghz) with 2GB RAM, running Ubuntu Server, plenty beefy enough for my work&#8230; I have Apache 2.2, PHP 5.2.x and 5.3.x (compiled from source), MySQL 5, PostgreSQL 8.4, as well as SVN 1.6 and Trac 0.11 installed.</p>
<p>This allowed me to trac tasks, do revision control and setup any environment I need for my work.</p>
<p>However&#8230; the UPS on that machine is pretty crappy and with my power being less than reliable, the machine would often lose power and never would power up again when the power was restored — meaning often when I was out of the house I couldn&#8217;t get to it.</p>
<p>In addition, keeping trac updated and the plugins/hacks working, and with everything else&#8230; I decided I was spending too much time on my environment and not enough time working. </p>
<p>To that end, I have moved my ticketing system to <a href="http://lighthouseapp.com">Lighthouse</a>. This is the <em>only</em> system to which I have so far committed.</p>
<p>I am also trying out <a href="http://beanstalkapp.com">Beanstalk</a> for SVN hosting and <a href="http://letsfreckle.com">Freckle</a> for time tracking and billing.</p>
<p>By switching from Trac to Lighthouse, I lose a <strong>lot</strong> of customization ability and standard features&#8230; however, my primary concern is a system where my clients can report issues, keep track of progress and communicate with me in a structured, <em>recorded</em> way.</p>
<p>For SVN, I am switching from my own system to a hosted one — my main concern is what to do with third party code — I&#8217;ll figure this one out as I go along. But SVN is SVN is SVN much for much. Doesn&#8217;t matter where it&#8217;s hosted. It is the web interface that adds a little extra something — but how useful is it outside of a team? I&#8217;m not entirely sure.</p>
<p>Finally, the most important part of contracting, Time keeping and billing. I currently use <a href="http://clickablebliss.com/billable">Billable</a>, an OSX application — however, it is tied to the machine I use it on, and is inaccessible  However, <em>currently</em>, Freckle doesn&#8217;t include a timer, nor any ability to export PDF or print-friendly invoices. So this is the most lacking potential replacement.</p>
<p>Freckle are working on what looks like <a href="http://letsfreckle.com/blog/2009/06/sneak-peek-at-our-new-timer/">an excellent timer</a>, so that&#8217;s one item down. Perhaps if they release their full API I could whip up something for the other problem&#8230;</p>
<p>For now though, I&#8217;m just glad to get at least one more piece of my environment out of my hair and into the cloud. Let it be someone else&#8217;s problem.</p>
<p>- Davey</p>
]]></content:encoded>
			<wfw:commentRss>http://daveyshafik.com/archives/713-cloud-lazy.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ext/dom and libxml2 charset and entities behaviors</title>
		<link>http://daveyshafik.com/archives/705-extdom-and-libxml2-charset-and-entities-behaviors.html</link>
		<comments>http://daveyshafik.com/archives/705-extdom-and-libxml2-charset-and-entities-behaviors.html#comments</comments>
		<pubDate>Mon, 10 Aug 2009 16:02:04 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[tagged]]></category>
		<category><![CDATA[charset]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[entities]]></category>
		<category><![CDATA[ext/dom]]></category>
		<category><![CDATA[libxml2]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://daveyshafik.com/?p=705</guid>
		<description><![CDATA[<p>In case you are unaware, there is [as of PHP 5.1.0] a second argument to the <code>DomDocument->SaveXML()</code> method.</p>
<p>This argument currently only supports one value which is the constant <code>LIBXML_NOEMPTYTAGS</code>. This option makes sure that you do not end up with <code>&#60;tag /&#62;</code>  but instead, <code>&#60;tag&#62;&#60;/tag&#62;</code>. This can make things easier if you need more predictable text to perform other changes on later.</p>
<p>However, in playing around with the option, I noticed that my markup changed somewhat significantly in size…</p>]]></description>
			<content:encoded><![CDATA[<p>In case you are unaware, there is [as of PHP 5.1.0] a second argument to the <code>DomDocument->SaveXML()</code> method.</p>
<p>This argument currently only supports one value which is the constant <code>LIBXML_NOEMPTYTAGS</code>. This option makes sure that you do not end up with <code>&lt;tag /&gt;</code>  but instead, <code>&lt;tag&gt;&lt;/tag&gt;</code>. This can make things easier if you need more predictable text to perform other changes on later.</p>
<p>However, in playing around with the option, I noticed that my markup changed somewhat significantly in size (it&#8217;s a large document). Some further playing yields that the following six uses of <code>DomDocument->SaveXML()</code>  yield different results:</p>
<p><code>&amp;#xA0;</code> is a non-breaking space character (in HTML <code>&amp;nbsp;</code>). ext/dom Defaults to UTF-8</p>
<pre class="brush: php">
&lt;?php
$dom = DOMDocument::loadXML(&quot;&lt;xml&gt;&lt;test /&gt;&amp;#xA0;&lt;/xml&gt;&quot;);

echo   $dom-&gt;saveXML();
/*
Default behavior, entities stay as entities, no encoding added to the XML prolog
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;xml&gt;&lt;test/&gt;&amp;#xA0;&lt;/xml&gt;
*/

echo $dom-&gt;saveXML($dom-&gt;documentElement);
/*
Entities are transformed to output charset, no XML prolog
&lt;xml&gt;&lt;test/&gt;[nbsp char]&lt;/xml&gt;
*/

echo $dom-&gt;saveXML($dom);
/*
Entities are transformed to output charset, encoding added to the XML prolog
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;xml&gt;&lt;test/&gt;[nbsp char]&lt;/xml&gt;
*/

echo $dom-&gt;saveXML($dom-&gt;documentElement, LIBXML_NOEMPTYTAG);
/*
Entities are transformed to output charset, no XML prolog, tags expanded
&lt;xml&gt;&lt;test&gt;&lt;/test&gt;[nbsp char]&lt;/xml&gt;
*/

echo $dom-&gt;saveXML($dom, LIBXML_NOEMPTYTAG);
/*
Entities are transformed to output charset, encoding added to the XML prolog, tags expanded
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;xml&gt;&lt;test&gt;&lt;/test&gt;[nbsp char]&lt;/xml&gt;
*/

echo $dom-&gt;saveXML(null, LIBXML_NOEMPTYTAG);
/*
Entities stay as entities, no encoding added to the XML prolog, tags expanded
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;xml&gt;&lt;test&gt;&lt;/test&gt;&amp;#xA0;&lt;/xml&gt;
*/
?&gt;
</pre>
<p>Just something to keep in mind next time you&#8217;re fooling around with the DOM.</p>
<p>- Davey</p>
]]></content:encoded>
			<wfw:commentRss>http://daveyshafik.com/archives/705-extdom-and-libxml2-charset-and-entities-behaviors.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Design, New Domain</title>
		<link>http://daveyshafik.com/archives/695-new-design-new-domain.html</link>
		<comments>http://daveyshafik.com/archives/695-new-design-new-domain.html#comments</comments>
		<pubDate>Tue, 28 Jul 2009 14:44:49 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[tagged]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[davey shafik]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[redesign]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://daveyshafik.com/?p=695</guid>
		<description><![CDATA[<p>For all of my readers who use RSS readers, or read through <a href="http://planet-php.net">Planet PHP</a>, I have re-designed my blog.</p>
<p>Part of the reason for this, is that I want to move away from the Pixelated Dreams moniker, branding the site under my own name. To that end, you can now access the site at <a href="http://daveyshafik.com">http://daveyshafik.com</a> — the old domain will continue to work (and I have every intention of renewing it) so no need to make any changes on…</p>]]></description>
			<content:encoded><![CDATA[<p>For all of my readers who use RSS readers, or read through <a href="http://planet-php.net">Planet PHP</a>, I have re-designed my blog.</p>
<p>Part of the reason for this, is that I want to move away from the Pixelated Dreams moniker, branding the site under my own name. To that end, you can now access the site at <a href="http://daveyshafik.com">http://daveyshafik.com</a> — the old domain will continue to work (and I have every intention of renewing it) so no need to make any changes on your ends — though I would appreciate all future links back to use the new domain.</p>
<p>This new design is based on the excellent work of <a href="http://john.onolan.org/c/blog/">John O&#8217;Nolan</a> with some gratuitous hacking, this is actually the 3rd re-design I&#8217;ve worked on for this site.</p>
<p>As you might recall, way-back-when, my blog looked something like this (using the Joshua theme):</p>
<div align="center"><a href="http://farm4.static.flickr.com/3576/3765094157_6cddd80ca3_o.png" rel="lightbox[695]" title="Blog Design (2006) rel="lightbox[designs]"><img src="http://farm4.static.flickr.com/3576/3765094157_da40afe7f5.jpg" /></a></div>
<p>The first redesign, followed my original stock themes color scheme of sandy colors and blue, as can be seen in two concepts here:</p>
<div align="center"><a href="http://farm1.static.flickr.com/77/188978517_b93dfd03f9_o.png" rel="lightbox[695]" title="Blog Redesign 1.0, Concept 1.6" rel="lightbox[designs]"><img src="http://farm1.static.flickr.com/77/188978517_b93dfd03f9.jpg" /></a></div>
<p>and the very similar, but slightly different take:</p>
<div align="center"><a href="http://farm1.static.flickr.com/61/188978518_adef77168a_o.png" rel="lightbox[695]" title="Blog Redesign 1.0, Concept 1.5" rel="lightbox[designs]"><img src="http://farm1.static.flickr.com/61/188978518_adef77168a.jpg" /></a></div>
<p>In this design, I had planned for the top bar to expand to show archives, with a slider to move around them; the cloud tag, contact form, search, etc. Keeping them all out of the way until wanted. The goal was to create a polished (ajaxified) interface with little clutter, while still making sure all expected features were available.</p>
<p>The sliding mechanism actually had two sliders, a start and end, which were, by default, kept 2 weeks apart (IIRC), but could be split apart to allow you to encompass any and all posts on my blog. As you moved the sliders, the posts included in the date range would automatically appear below.</p>
<p>Next, came a radically different approach, this time, I started thinking about what I put online, and how I could share it with others. In particular, once I returned home from php|works and ZendCon, I realized that my blog is just a small part of my online presence. I thought it would be very cool to not only include my flickr stream and my twitter feed on my site, but to actually make it useful.</p>
<p>This is my use-case:</p>
<p>I go to a conference, I take some photos, I tweet some stuff, someone sends me a link which I add to delicious, and then I write a blog post — the blog post is just a single part of my experience. I wanted to be able to capture the pictures from that day, and the tweets from that day, and keep them with the blog post. I wanted to use my delicious as a sort of bibliography of information resources I used on that day.</p>
<p>So, when you go to a blog post for Day 3 of ZendCon, you see the pictures from Day 3, the tweets about how hungover^W psyched we are about the people we&#8217;re meeting and the sessions we&#8217;re attending, as well as ideas and such that we put up throughout Day 3. These are captured, and stay with the blog post as a single entity capturing the entire day.</p>
<p>To this end, and also because I wanted to play with VectorDesigner, I came up with this design:</p>
<p><a href="http://farm4.static.flickr.com/3257/2667812217_6ee27fc09a_o.png" rel="lightbox[695]" title="Blog Redesign 2.0, All Closed" rel="lightbox[designs]"><img src="http://farm4.static.flickr.com/3257/2667812217_4dfe6a5c95_m.jpg" /></a><br />
<a href="http://farm4.static.flickr.com/3108/2668633190_ab2715416f_o.png" rel="lightbox[695]" title="Blog Redesign 2.0, Twitter Open" rel="lightbox[designs]"><img src="http://farm4.static.flickr.com/3108/2668633190_65030afb44_m.jpg"></a><br />
<a href="http://farm4.static.flickr.com/3164/2668632984_5c1dddedf3_o.png" rel="lightbox[695]" title="Blog Redesign 2.0, All Open" rel="lightbox[designs]"><img src="http://farm4.static.flickr.com/3164/2668632984_fa78e884ec_m.jpg"></a></p>
<p>The idea was a horizontal accordion, starting with &#8220;Explore&#8221; for archives, tag clouds and related posts, &#8220;Photos&#8221; for either my most recent photos (home) or related photos from Flickr, and then &#8220;Twitter&#8221; for either my most recent tweets (home) or related tweets.</p>
<p>However, I ran into two problems, first, this sort of layout is not too difficult to do in CSS-P, until you introduce the idea of dynamic accordion behavior. Then you need to do all sorts of sucktastic stuff in JavaScript to make sure it all works nicely. I tried to do the design with everything open all the time, or no more than one open at any given time, but it still wasn&#8217;t working nicely.</p>
<p>The second issue is that of space; the plan to put the content on the right meant I would be left with potentially very little space for the text. One of my favorite things about this new design is the wide open spaces for content — which, lets face it, is the reason for the blog to exist in the first place!</p>
<p>However, I did get three great things out of this design: 1) A <strong>simple</strong> color scheme I liked, comprised of 5 colors. 2) An idea of what I wanted from my site 3) Great Keynote templates (as anybody in my streams talk at |works 08 can attest!)</p>
<p>So, then I ran across the layout by John, and I knew that was it. I&#8217;ve spent the 3 weeks tweaking; there are two color schemes (click the swatches at top right) and I learned a lot about Wordpress Templating.</p>
<p>However, things are not all rosey: Comments don&#8217;t work, the dynamic trapping of related photos/tweets doesn&#8217;t work, there are no archives, search or really any way to actually browser the site and I have no idea what else I&#8217;ll be putting in my Books &#038; Things section.</p>
<p>But, I wanted to get this out, get rid of the stock theme, and not get bored with it! So, let me know what you think on twitter (remember: comments don&#8217;t work) or on IRC!</p>
<p>- Davey</p>
]]></content:encoded>
			<wfw:commentRss>http://daveyshafik.com/archives/695-new-design-new-domain.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Karma-Based Mailing Lists (or: how to automate a meritocracy)</title>
		<link>http://daveyshafik.com/archives/686-karma-based-mailing-lists-or-how-to-automate-a-meritocracy.html</link>
		<comments>http://daveyshafik.com/archives/686-karma-based-mailing-lists-or-how-to-automate-a-meritocracy.html#comments</comments>
		<pubDate>Sun, 28 Jun 2009 21:08:58 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[tagged]]></category>
		<category><![CDATA[karma]]></category>
		<category><![CDATA[mailing lists]]></category>
		<category><![CDATA[meritocracy]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://daveyshafik.com/?p=686</guid>
		<description><![CDATA[<h3>Defining the Problem</h3>
<p>The problem with mailing lists is that they are a free for all, it doesn&#8217;t matter who posts, everybody at every level gets to see the post.</p>
<p>In the real world, communications pass through a hierarchy of people, escalating as necessary, passing from person to person up the chain.</p>
<p>This means that, given enough time, any mailing list starts to have a large noise:signal ratio, at least for any given person&#8217;s take on the list;<br />
they…</p>]]></description>
			<content:encoded><![CDATA[<h3>Defining the Problem</h3>
<p>The problem with mailing lists is that they are a free for all, it doesn&#8217;t matter who posts, everybody at every level gets to see the post.</p>
<p>In the real world, communications pass through a hierarchy of people, escalating as necessary, passing from person to person up the chain.</p>
<p>This means that, given enough time, any mailing list starts to have a large noise:signal ratio, at least for any given person&#8217;s take on the list;<br />
they want to read what they want to read, and don&#8217;t need to be distracted ignoring the stuff they don&#8217;t want to read.</p>
<h3>Solving the Problem</h3>
<p>There is an unspoken — some what hap-hazard — hierarchy among the community, which with some thought, I believe, could be defined, refined<br />
and utilized to our advantage. As an example:</p>
<pre>
  - Active internals contributors with access to internals CVS (contributions of code and useful discussions)
  \
   - Active internals contributors without access to internals CVS (patch submitters, useful discussions)
   - Inactive internals contributors with access to internals CVS (previous contributions of code and useful discussions)
     \
      - Active non-internals, PHP contributions (docs, phpweb, PEAR)
      - Active community leaders
      - Active project leaders
      - Active linux distro maintainers
       \
        - General Users with a high understanding
          \
           - Genernal users with little understanding (newbies)
</pre>
<p>If we take each of these, and assign them a number:</p>
<pre>
L1  - Active internals contributors with access to internals CVS (contributions of code and useful discussions)
    \
L2   - Active internals contributiors without access to internals CVS (patch submitters, useful discussions)
L2   - Inactive internals contributors with access to internals CVS (previous contributions of code and useful discussions)
       \
L3      - Active non-internals, PHP contributions (docs, phpweb, PEAR)
L3      - Active community leaders
L3      - Active project leaders
L3      - Active linux distro maintainers
         \
L4        - General Users with a high understand
            \
L5           - Genernal users with little understanding (newbies)
</pre>
<p>Now, what if, at any level, you could only see (by default) 1 level below you (and all levels above you). For example: L1 can see L2, L2 can see L3 etc.</p>
<p>This immediately means that you only see stuff that might be relevant to you; however, as a community, we then lose the ability for newcomers to contribute good ideas; because they would start out with zero karma. To help solve this issue, we adjust karma based on responses:</p>
<h4>Scenario</h4>
<ul>
<li>A L3 user posts something of interest</li>
<li>A L2 user see&#8217;s the post and replies, the reply is L2
<ul>
<li>This bumps the original post up to L2 as well</li>
</ul>
</li>
<li>
        A L1 see&#8217;s the post now, and can then participate in the discussion if they choose
    </li>
</ul>
<p>In this case, <strong>only</strong> the thread in question is bumped up, however given enough L2/L1 (weighted) direct responses over different threads, a L3 user can gain karma and eventually become a L2 user (and obviously this applies to anyone moving up the chain)</p>
<p>In this way, threads (and by this mechanism, users also) can organically make their way up the tree as they gain traction, are discussed at each level and moved up.</p>
<p>I believe it would be possible to have a &#8221;&#8217;single&#8221;&#8217; mailing list that could span everything from internals right down to php-general, but this is probably not desired! It would however allow the users of any list to, regardless of their experience in the tree, contribute without weighing down the list.</p>
<h4>Features</h4>
<ul>
<li>Karma tree seeded by current &#8220;social&#8221; climate
<ul>
<li>based on CVS access level, activity in a sliding timescale, community contributions etc</li>
<li>Some manual work will be needed on this</li>
</ul>
</li>
<li>Weighted responses, a L2 responding to a L3, will move it to L2, but 3 L2&#8217;s or 1 L2 and 1 L1 responding would move it to L1, for example.</li>
<li>Adjustable threshold. Perhaps some magnanimous internals contributor likes to help out newbies, he can choose to see the whole tree, or perhaps just 3 levels down</li>
<li>Championing — it should be possible for a user to champion someone to quickly move them up the ladder, for example a L2 can bring a L5 up to L3, so their peers can see stuff, this is bringing the <strong>user</strong> up, not the <strong>thread</strong></li>
<li>Continued tweaking of karma based on CVS access and contributions</li>
<li>Personal filters, you can add users (of any level) from whom you would like to see threads, helping the movement of stuff up the tree, skipping levels</li>
</ul>
<p>In this way, we can, in some ways, automate the karma, and in someways advance it through our own choices; creating a hierarchy based on merit and trust.</p>
<h3>Final Thoughts</h3>
<ul>
<li>Some smart filtering, so that &#8220;You&#8217;re an idiot&#8221; responses don&#8217;t elevate a thread would be good
<ul>
<li>That, or just handle it biologically — Don&#8217;t respond to people in negative ways</li>
</ul>
</li>
<li>Implementing this as a ML (in terms of interaction) is likely the only way to get some of the higher internals folks using it, a web interface [for the messages] just won&#8217;t fly</li>
<li>Personal filters would be handled at master.php.net or maybe a new web interface for this</li>
</ul>
<p>Now, obviously, this is a huge undertaking; certainly not one any single person could complete on their own&#8230; but it&#8217;s food for thought.</p>
<p>- Davey</p>
]]></content:encoded>
			<wfw:commentRss>http://daveyshafik.com/archives/686-karma-based-mailing-lists-or-how-to-automate-a-meritocracy.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mini-Review: Linkinus 2.0</title>
		<link>http://daveyshafik.com/archives/657-mini-review-linkinus-20.html</link>
		<comments>http://daveyshafik.com/archives/657-mini-review-linkinus-20.html#comments</comments>
		<pubDate>Thu, 11 Jun 2009 02:57:35 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[tagged]]></category>
		<category><![CDATA[IRC]]></category>
		<category><![CDATA[irc client]]></category>
		<category><![CDATA[linkinus]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://daveyshafik.com/?p=657</guid>
		<description><![CDATA[<p>In July of last year I finally found a decent IRC client for OS X; Linkinus. Now, I know some of you will cry foul at that statement, after all there is Colloquy and the venerable X-Chat Aqua.</p>
<p>I&#8217;m sorry, but they both sucked. Colloquy is quite stagnant, and has had the long-standing display bug (which is solved with /reload styles) forever. X-Chat Aqua on the other hand is great, except it&#8217;s <em>obviously</em> a ported applicaiton. Sorry, I&#8217;m a snob.…</p>]]></description>
			<content:encoded><![CDATA[<p>In July of last year I finally found a decent IRC client for OS X; Linkinus. Now, I know some of you will cry foul at that statement, after all there is Colloquy and the venerable X-Chat Aqua.</p>
<p>I&#8217;m sorry, but they both sucked. Colloquy is quite stagnant, and has had the long-standing display bug (which is solved with /reload styles) forever. X-Chat Aqua on the other hand is great, except it&#8217;s <em>obviously</em> a ported applicaiton. Sorry, I&#8217;m a snob.</p>
<p>So, here we are, almost a year later, and Linkinus 2.0 has <strong>just</strong> been released.</p>
<p>I&#8217;m going to start out with the one bad point: I knew 2.0 was coming, and I knew it was a paid upgrade. So when I got the update notice, I clicked upgrade and it installed. Suddenly I was on a 15 day trial (and I only knew that because I went to the Registration dialog). It wasn&#8217;t a big deal for me, but not everybody will know.</p>
<h3>First Impressions</h3>
<p>Wow! The new left-side bar is even more iTunes/Finder/Apple Mail like, the chat style is very clean and clear and frankly, this is the best looking IRC application on the market. I can&#8217;t believe I ever put up with mIRC&#8230;</p>
<h3>The side-bar</h3>
<p>One of the most maddening bugs introduced in Linkinus 1.3 was it&#8217;s inability to remember if you closed a channel if it crashed. This meant I had an ever increasing number of channels and queries building up. Thankfully, one of the new features in the sidebar, is the ability to multiple select items and close them.</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2009/06/picture-441.png" rel="lightbox[657]"><img src="http://daveyshafik.com/wp-content/uploads/2009/06/picture-441.png" alt="Multiple Select and Remove" title="Multiple Select" width="387" height="208" class="aligncenter size-full wp-image-664" /></a></p>
<p>In addition, the indicators in the sidebar are nicer and more informative.</p>
<p>When you select multiple items, as in previous versions, it will split the chat between all the selected channels (and queries); however in 2.0 the display of these makes the current one much more obvious. In addition, switching between them (Using Cmd+Shift+Up/Down) uses a tasteful fade animation.</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2009/06/picture-431.png" rel="lightbox[657]"><img src="http://daveyshafik.com/wp-content/uploads/2009/06/picture-431-300x174.png" alt="Multiple Channels" title="Multiple Channels" width="300" height="174" class="aligncenter size-medium wp-image-667" /></a></p>
<h3>The Chat</h3>
<p>Lets face it, IRC is all about the chat. In Linkinus 2.0, the chat takes center stage. With the new visual style, it&#8217;s simple, understated and highly legible. One of the neatest features is the ability to hover over anyones nick and it will highlight all other on-screen lines by that user.</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2009/06/picture-421.png" rel="lightbox[657]"><img src="http://daveyshafik.com/wp-content/uploads/2009/06/picture-421-300x174.png" alt="Highlight A Users Lines (in this case: Zack)" title="Highlight A Users Lines (in this case: Zack)" width="300" height="174" class="aligncenter size-medium wp-image-668" /></a></p>
<p>In addition to this great feature, Linkinus will embed media linked to, right in the chat. For example, a link to a picture will show up like this:</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2009/06/picture-391.png" rel="lightbox[657]"><img src="http://daveyshafik.com/wp-content/uploads/2009/06/picture-391.png" alt="Embedded Media" title="Embedded Media" width="300" height="238" class="aligncenter size-medium wp-image-669" /></a></p>
<p>When clicked on, it will do a quicklook style zoom:</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2009/06/picture-401.png" rel="lightbox[657]"><img src="http://daveyshafik.com/wp-content/uploads/2009/06/picture-401-300x246.png" alt="Embedded Media Zoom" title="Embedded Media Zoom" width="300" height="246" class="aligncenter size-medium wp-image-670" /></a></p>
<p>If you want the media removed from screen, simply click the X and it will be turned back to the original URL:</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2009/06/picture-411.png" rel="lightbox[657]"><img src="http://daveyshafik.com/wp-content/uploads/2009/06/picture-411-300x43.png" alt="Closed Media File" title="Closed Media File" width="300" height="43" class="aligncenter size-medium wp-image-671" /></a></p>
<p>Another neat feature is tiny url expansion:<br />
<a href="http://daveyshafik.com/wp-content/uploads/2009/06/picture-45.png" rel="lightbox[657]"><img src="http://daveyshafik.com/wp-content/uploads/2009/06/picture-45.png" alt="Tiny URL" title="Tiny URL" width="317" height="27" class="aligncenter size-full wp-image-672" /></a></p>
<p>turns into:<br />
<a href="http://daveyshafik.com/wp-content/uploads/2009/06/picture-46.png" rel="lightbox[657]"><img src="http://daveyshafik.com/wp-content/uploads/2009/06/picture-46.png" alt="Tiny URL Expanded" title="Tiny URL Expanded" width="542" height="27" class="aligncenter size-full wp-image-673" /></a></p>
<p>The expansion is fast (though obviously depends on the service response), unfortunately, so is the mouseout. When the mouse is no longer hovering over the tiny url, it contracts again; this wouldn&#8217;t be a big deal except that as soon as someone says a line your mouse is no longer over the URL and you lose it. In a busy channel this makes it a pain. A small delay would be welcome.</p>
<h3>The Cool</h3>
<p>The only other feature I wanted to highlight in this review, is the &#8220;Stars&#8221; feature. Essentially, this is Bookmarks for IRC. Allowing you save favorite quotes for posterity.</p>
<p>To do this, simply hover over the line (just like you do to highlight a users other lines) and click the Star:</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2009/06/picture-49.png" rel="lightbox[657]"><img src="http://daveyshafik.com/wp-content/uploads/2009/06/picture-49.png" alt="A Starred Line" title="A Starred Line" width="357" height="23" class="aligncenter size-full wp-image-674" /></a></p>
<p>Then, any time you bring up the Highlights and Stars window (Cmd+1 or Window > Highlights and Stars) you will be able to review them:</p>
<p><a href="http://daveyshafik.com/wp-content/uploads/2009/06/picture-48.png" rel="lightbox[657]"><img src="http://daveyshafik.com/wp-content/uploads/2009/06/picture-48-300x233.png" alt="Stars Review Window" title="Stars Review Window" width="300" height="233" class="aligncenter size-medium wp-image-675" /></a></p>
<h3>The Final Word</h3>
<p>I said that Linkinus 1.0 was worth paying for; I will say it again and more for 2.0. I&#8217;ve barely scratched the surface here, but Linkinus 2.0 is by far the best IRC client on any platform, for any price.</p>
<p>Grab it now at <a href="http://conceitedsoftware.com/products/linkinus">the Conceited Software website</a> for the paltry sum of €19.99.</p>
<p>- Davey<br />
Note: For Linkinus 1.0 users, you can get an upgrade at half price.</p>
]]></content:encoded>
			<wfw:commentRss>http://daveyshafik.com/archives/657-mini-review-linkinus-20.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
