<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xml:base="http://jbenner.net/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Josh Benner&#039;s Blog</title>
    <link>http://jbenner.net/</link>
    <description>Notes about technology and stuff by Josh.</description>
    <language>en</language>
          <item>
    <title>Quick Tip: Detect and Encode Curly Brackets in URL Validation</title>
    <link>http://jbenner.net/blog/quick-tip-detect-and-encode-curly-brackets-in-url-validation</link>
    <description>&lt;p&gt;Validating user input is always a great idea from a usability and security point of view. However, when it comes to things like URLs, the data is complex and there is a very strict pattern that the data has to adhere to. From a data perspective, this is great news, since we can validate for what we want, not try to detect what we don&#039;t.&lt;/p&gt;
&lt;p&gt;However, a lot of modern URLs don&#039;t always do a great job following &lt;a href=&quot;http://www.faqs.org/rfcs/rfc1738.html&quot;&gt;RFC 1738&lt;/a&gt;. Specifically, I&#039;m looking at you .Net guys who insist on putting &lt;a href=&quot;http://en.wikipedia.org/wiki/Universally_Unique_Identifier&quot;&gt;UUIDs&lt;/a&gt; wrapped in curly brackets in query strings and the like. According to RFC 1738, curly brackets are &quot;unsafe&quot; within URLs and should be encoded to their URL-encoded entities.&lt;/p&gt;
&lt;p&gt;So, technically, curly brackets are fine in URLs (if encoded), but when a user pastes their URL with curly brackets into your site and you pass it through your likely regex-based validation algorithm, you are likely to experience a validation failure since the curly brackets aren&#039;t allowed. Now, sure, you could pass the entire URL through something like urlencode() or rawurlencode() -- but that encodes everything! What I do is simple: I just replace any brackets and then continue on my merry way:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$replace&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;{&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;%7B&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;}&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;%7D&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000088;&quot;&gt;$newval&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array_keys&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$replace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;array_values&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$replace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$user_url&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;my_url_validation_func&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$newval&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
  my_error_function&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;Hey, you need a valid URL!&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;If you&#039;re saving the URL, you should probably save the encoded version, but you don&#039;t have to, as long as you adhere to RFC 1738 on output (although most modern browsers are fine if you don&#039;t).&lt;/p&gt;
&lt;p&gt;I&#039;ve found this especially useful while doing URL validation in Drupal, as its built-in (and contributed) URL validation routine all seem to be pretty adherent to RFC 1738.&lt;/p&gt;
</description>
     <comments>http://jbenner.net/blog/quick-tip-detect-and-encode-curly-brackets-in-url-validation#comments</comments>
 <category domain="http://jbenner.net/topic/quick-tip">Quick Tip</category>
 <category domain="http://jbenner.net/topic/security">Security</category>
 <category domain="http://jbenner.net/topic/web-development">Web Development</category>
 <pubDate>Mon, 26 Oct 2009 20:24:01 +0000</pubDate>
 <dc:creator>Josh</dc:creator>
 <guid isPermaLink="false">37 at http://jbenner.net</guid>
  </item>
  <item>
    <title>Quick Tip: Get proper DOCUMENT_ROOT When Using mod_vhost_alias</title>
    <link>http://jbenner.net/blog/quick-tip-get-proper-document-root-when-using-mod-vhost-alias</link>
    <description>&lt;p&gt;The Apache module mod_vhost_alias and its VirtualDocumentRoot directive can really be a great time saver for local development (some googling will explain why in more deapth). Basically, my local dev is set up so that I&amp;nbsp;just have to create a directory in my aliases directory, and I just then navigate my browser to a URL matching the name of that new directory, and apache knows exactly what to serve automagically.&lt;/p&gt;
&lt;p&gt;However, there are a few evil gotchas when using mod_vhost_alias, one of which is that the PHP&amp;nbsp;global $_SERVER[&#039;DOCUMENT_ROOT&#039;] remains set to the apache default DOCUMENT_ROOT&amp;nbsp;environment variable rather than being re-assigned to the document root activated by the VirtualDocumentRoot directive for the current URL. This can cause some PHP applications (that are too trusting) to die for one reason or another.&lt;/p&gt;
&lt;p&gt;I found a great solution to this in the related &lt;a href=&quot;https://issues.apache.org/bugzilla/show_bug.cgi?id=26052&quot;&gt;apache bug report&lt;/a&gt;: Simply add the following line to your apache configuration inside the VirtualDocumentRoot vhost definition:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;php_admin_value auto_prepend_file /path/setdocroot.php&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then, create the referenced PHP&amp;nbsp;file, and put set this as its contents:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style=&quot;color: #000088;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;DOCUMENT_ROOT&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;SCRIPT_NAME&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;SCRIPT_FILENAME&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now, every page load has this file executed, which properly sets DOCUMENT_ROOT.&lt;/p&gt;</description>
     <comments>http://jbenner.net/blog/quick-tip-get-proper-document-root-when-using-mod-vhost-alias#comments</comments>
 <category domain="http://jbenner.net/topic/php">PHP</category>
 <category domain="http://jbenner.net/topic/quick-tip">Quick Tip</category>
 <category domain="http://jbenner.net/topic/servers">Servers</category>
 <category domain="http://jbenner.net/topic/web-development">Web Development</category>
 <pubDate>Sun, 25 Oct 2009 20:47:11 +0000</pubDate>
 <dc:creator>Josh</dc:creator>
 <guid isPermaLink="false">36 at http://jbenner.net</guid>
  </item>
  <item>
    <title>Review: NetBeans IDE 6.7.1</title>
    <link>http://jbenner.net/blog/review-netbeans-ide-6-7-1</link>
    <description>&lt;p&gt;I&amp;nbsp;think &lt;a href=&quot;http://jbenner.net/blog/zend-studio-for-eclipse-6-1&quot;&gt;my&lt;/a&gt; &lt;a href=&quot;http://jbenner.net/blog/review-nusphere-phped-5-6&quot;&gt;previous&lt;/a&gt; &lt;a href=&quot;http://jbenner.net/blog/disappointed-with-zend&quot;&gt;posts&lt;/a&gt; have already indicated that my development environment, specifically my IDE, is important to me, and that I&amp;nbsp;make a habit of exploring my options on a regular basis. For the last 7 months I&#039;ve been using NuSphere&#039;s PhpED, which I&#039;ve really enjoyed. The only things that I&#039;ve been just a little dissatisfied with is that it only runs on windows and that its window arranging capabilities are not as robust as Eclipse. But, having seen a few tweets about NetBeans, I decided to visit this old acquaintance once again.&lt;/p&gt;
&lt;p&gt;I had used NetBeans ages ago when I was learning a little bit of Java. It was good enough... for Java. Then, some time ago I had tried NetBeans 6 (I&amp;nbsp;don&#039;t recall which minor version), because I&amp;nbsp;learned they were working on building a PHP&amp;nbsp;IDE out of NetBeans, which intrigued me. At the time, I&amp;nbsp;simply felt NetBeans didn&#039;t stack up to Eclipse, and I hadn&#039;t yet discovered PhpED. However, with some recent twitter traffic about NetBeans, I figured I&#039;d give the latest incarnation a spin to kick the wheels a little.&lt;/p&gt;
&lt;!--break--&gt;
&lt;p&gt;For a quick summary of what I&amp;nbsp;look for in IDEs and how I&amp;nbsp;evaluate them, see &lt;a href=&quot;http://jbenner.net/blog/review-nusphere-phped-5-6&quot;&gt;my review of PhpED&lt;/a&gt;.&lt;span style=&quot;display: none;&quot; id=&quot;1255698563912S&quot;&gt; &lt;/span&gt; Based on that, I&#039;ll try to be succinct:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Customizable Interface&lt;/strong&gt; - NetBeans does well here, allowing me to dock panes, minimize things for single-click fly-out, and even position code windows next to eachother. Also nice is the ability to &amp;quot;undock&amp;quot; a window to have it handled by the window manager as a separate window appearing in the task bar. NetBeans beats PhpED (which can&#039;t put code windows next to eachother) and Eclipse (which treats side-by-side code in a silly manner) in this category. Only downside is that dragging windows can be a little awkward compared to the other IDEs.&lt;br /&gt;
    &amp;nbsp;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Stability&lt;/strong&gt; - NetBeans has yet to crash for me on Ubuntu 9.04 x64 or Vista 32-bit (used heavily on both).&lt;br /&gt;
    &amp;nbsp;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Fast&lt;/strong&gt; - Startup takes a little, but that&#039;s faster than Eclipse, and doesn&#039;t bother me. Normal operation is good. Scanning projects to build auto-complete and such is faster than Eclipse (though hideously slower than Eclipse when scanning files on a Samba share), though slightly slower than PhpED. Speed of UI is good enough. Overall, PhpED wins in this category, but NetBeans is &amp;quot;good enough&amp;quot;&amp;nbsp;to be perfectly usable.&lt;br /&gt;
    &amp;nbsp;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Project/File Management&lt;/strong&gt; - NetBeans has the all-too-familiar project management pane. It has some nice features, good integration with the language, and nice right-click options. Nothing special, and it works well enough. IDEs tie here.&lt;br /&gt;
    &amp;nbsp;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Syntax Highlighting&lt;/strong&gt; - Highlighting is fast and modestly customizable -- easier, I might say, than Eclipse. Add this to the ease of importing/exporting segments of settings, and you NetBeans just barely beats PhpED here as well. Only thing extra I want in NetBeans is separate highlight category for built-in PHP&amp;nbsp;functions.&lt;br /&gt;
    &amp;nbsp;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Real-time, Remote Debugging&lt;/strong&gt; - NetBeans works very well with Xdebug, using the IDE-triggered debug session model. I feel it does this slightly better than Eclipse, which always wants you to be creating debug profiles. Also, NetBeans path mapping has yet to get confused, while I&#039;m always fighting with Eclipse in this regard. NetBeans is not as easy as PhpED with debugging. PhpED still wins here, but NetBeans is a close runner-up.&lt;br /&gt;
    &amp;nbsp;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Configurability&lt;/strong&gt; - I haven&#039;t hit anything yet I&amp;nbsp;wanted to configure but couldn&#039;t in NetBeans. IDEs tie here, but kudos to NetBeans for having the simplest yet still powerful configuration UI.&lt;br /&gt;
    &amp;nbsp;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Version Control Integration&lt;/strong&gt; - NetBeans has a pluggable version control system and comes bundled with several widely-used VCS modules, including Subversion, which is my poison of choice. SVN module uses native binaries and is fast. VCS UI provides nice options and gives you pertinent info. NetBeans definitely beats PhpED&#039;s cop-out approach to VCS, but loses slightly to Eclipse with its better file &amp;quot;decorations&amp;quot; and full-fledged SVN&amp;nbsp;browser.&lt;br /&gt;
    &amp;nbsp;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Other Integration&lt;/strong&gt; - NetBeans has database integration, but it&#039;s clumsy and difficult to use if you work with a lot of variable databases (as I&amp;nbsp;do). I&amp;nbsp;honestly don&#039;t know about NetBeans&#039; abilities with things like SSH or [S]FTP as I&amp;nbsp;haven&#039;t tried to find them. PhpED wins for DB integration, and Eclipse wins for other integrations. I may stop considering this since I use external tools for most of this stuff now (mostly command-line).&lt;br /&gt;
    &amp;nbsp;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Updates&lt;/strong&gt; - NetBeans hasn&#039;t been updated since I&#039;ve been using it, but it&#039;s Open Source and seems to be building in popularity (just my perception). PhpED wins in this category, as they update very regularly.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All-in-all, I&#039;ve come to be comfortable using NetBeans as my day-to-day environment. However, I&amp;nbsp;keep PhpED open on my windows box to handle debugging, since PhpED just rules in that category still. Honestly, if PhpED had a Linux version comparable to its Windows version (PhpED&amp;nbsp;for Linux is out of date), then I might abandon NetBeans. But, for now, NetBeans has earned a place in my workflow.&lt;/p&gt;</description>
     <comments>http://jbenner.net/blog/review-netbeans-ide-6-7-1#comments</comments>
 <category domain="http://jbenner.net/topic/eclipse">Eclipse</category>
 <category domain="http://jbenner.net/topic/netbeans">NetBeans</category>
 <category domain="http://jbenner.net/topic/opinion">Opinion</category>
 <category domain="http://jbenner.net/topic/php">PHP</category>
 <category domain="http://jbenner.net/topic/phped">PhpED</category>
 <category domain="http://jbenner.net/topic/review">Review</category>
 <category domain="http://jbenner.net/topic/tools">Tools</category>
 <category domain="http://jbenner.net/topic/web-development">Web Development</category>
 <pubDate>Fri, 16 Oct 2009 13:41:48 +0000</pubDate>
 <dc:creator>Josh</dc:creator>
 <guid isPermaLink="false">35 at http://jbenner.net</guid>
  </item>
  <item>
    <title>Fix mod_auth_mysql on Ubuntu 64-bit</title>
    <link>http://jbenner.net/blog/fix-mod-auth-mysql-on-ubuntu-64-bit</link>
    <description>&lt;p&gt;At least twice, now, I&#039;ve encountered problems (read:&amp;nbsp;apache segfaults, oh noes!) with mod_auth_mysql on Ubuntu 64-bit installs, most recently using Jaunty Jackalope (9.04) -- the most recent release (at least until 9.10 comes out soon). In searching for solutions, I discovered that this issue has been reported at least a &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/mod-auth-mysql/+bug/364581&quot;&gt;couple&lt;/a&gt; &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/mod-auth-mysql/+bug/357799&quot;&gt;times&lt;/a&gt;, the issue has been identified (and is a super-simple fix), and a working patch exists... but as of the writing of this article, the fix has not yet been compiled into the repo packages.&lt;/p&gt;
&lt;p&gt;So then this becomes one of those relatively rare times that I will compile my own package. I&amp;nbsp;prefer to compile binary packages (deb files) rather than simply compiling from source and doing a &amp;quot;make install,&amp;quot; since packages leverage the package management system for things like dependencies and upgrades. For instance, if Ubuntu &lt;em&gt;does&lt;/em&gt; release the fix in the next version of mod_auth_mysql, I want to be able to seemlessly upgrade to the next version.&lt;/p&gt;
&lt;p&gt;I&#039;m going to describe the steps to fix mod_auth_mysql 4.3.9-11, but this general process should work for applying community patches and building deb files in general.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Uninstall mod_auth_mysql:&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; remove libapache2-mod-auth-mysql&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;Get mod_auth_mysql source (drops it in the current directory, so be where you want it, such as ~/src):&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;source&lt;/span&gt; libapache2-mod-auth-mysql&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;Get dependencies for building from source:&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; build-dep libapache2-mod-auth-mysql&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;Get a dependencies that didn&#039;t install with build-dep:&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;install&lt;/span&gt; apache2-threaded-dev&lt;/code&gt;&lt;/span&gt; (could be different for your system)&lt;/li&gt;
    &lt;li&gt;Get devscripts package to make this all much easier:&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;install&lt;/span&gt; devscripts&lt;/code&gt;&lt;/span&gt; (installs postfix -- annoying)&lt;/li&gt;
    &lt;li&gt;Set file perms on the source files you downloaded:&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;chown&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-R&lt;/span&gt; josh:josh &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;Enter src dir:&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;cd&lt;/span&gt; mod-auth-mysql-4.3.9&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;Prepare to apply patch.      This actually starts a new shell with the current directory containing a copy of the code so you can edit it.&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ dpatch-edit-patch &lt;span style=&quot;color: #660033;&quot;&gt;-a&lt;/span&gt; fix_segfaults&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;Apply patch, a one-line edit to mod_auth-mysql.c described &lt;a href=&quot;http://launchpadlibrarian.net/26316509/mod-auth-mysql.diff&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Exit the shell.&lt;/li&gt;
    &lt;li&gt;Add fix_segfaults to the end of debian/patches/00list.&lt;/li&gt;
    &lt;li&gt;Record the changes and change the package version info.      Change the version at the top of the file. I usually just add something at the end of the existing version string.&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ dch &lt;span style=&quot;color: #660033;&quot;&gt;-i&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;Build the deb file.     This will compile the source, package the binaries, and put the deb file one directory up.&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ dpkg-buildpackage &lt;span style=&quot;color: #660033;&quot;&gt;-rfakeroot&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;Install the new package.     &lt;strong&gt;Note:&lt;/strong&gt; Your deb file name will be different based on how you changed the version string above.&lt;br /&gt;
    &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;geshifilter-bash&quot;&gt;$ &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;dpkg&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-i&lt;/span&gt; ..&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;libapache2_mod_auth_mysql-4.3.9-&lt;span style=&quot;color: #000000;&quot;&gt;11&lt;/span&gt;_amd64.deb&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Seems like a lot, but after you do it, it doesn&#039;t seem too bad, and you can bask in the glory of creating your own package -- which is reusable on all same-type systems.&lt;/p&gt;</description>
     <comments>http://jbenner.net/blog/fix-mod-auth-mysql-on-ubuntu-64-bit#comments</comments>
 <category domain="http://jbenner.net/topic/apache">Apache</category>
 <category domain="http://jbenner.net/topic/howto">HowTo</category>
 <category domain="http://jbenner.net/topic/mysql">MySQL</category>
 <category domain="http://jbenner.net/topic/servers">Servers</category>
 <category domain="http://jbenner.net/topic/ubuntu">Ubuntu</category>
 <pubDate>Mon, 14 Sep 2009 01:12:38 +0000</pubDate>
 <dc:creator>Josh</dc:creator>
 <guid isPermaLink="false">34 at http://jbenner.net</guid>
  </item>
  <item>
    <title>Windows Home Server FTW</title>
    <link>http://jbenner.net/blog/windows-home-server-ftw</link>
    <description>&lt;p&gt;I tend to consider myself a technical user, and for years, I operated various Linux distributions and setups to facilitate our home network. Mostly this meant a place to dump our backups in an intelligent manner, but I would also setup things like easy file sharing between our computers and even get fancy sometimes and so music servers or video streaming (though we never actually used any of that). However, after years of putting a lot of effort into maintaining that type of setup (keeping things organized, re-configuring everything after a workstation re-install, reconfiguring the server after a Linux re-install, etc), I decided I wanted something simple, that &amp;quot;just works.&amp;quot; To be fair, part of my problem with using Linux was that the Linux box doubled as my development and testbed server, so I was always tinkering with it. Instead, I needed a box that would serve our family home network and not be my tinker box.&lt;/p&gt;
&lt;p&gt;Enter Windows Home Server.&lt;/p&gt;
&lt;!--break--&gt;
&lt;p&gt;Since I had extra hardware, I decided to get a copy of WHS and install it myself. This works just fine, though the install takes just about forever since WHS is basically a cleverly hacked and enhanced version of Small Business Server 2003. WHS mostly sells pre-installed on hardware, such as HP&#039;s MediaSmart server line, so my bet is Microsoft isn&#039;t too worried about the install experience. Though, other than the time taken, the install was easy and seamless.&lt;/p&gt;
&lt;p&gt;Once everything was installed and I ran through windows update (got the power packs, too), I set about linking the computers on our home network to the server. This process was pleasantly simple, requiring that a small installer be run. The installer was quick and, might I say, &amp;quot;just worked.&amp;quot; It finds your WHS on the network, helps you manage your password sync between computer and server, and places useful but unobtrusive shortcuts and a tray icon on the workstation. I did this with three Vista machines and an XP machine, all without a hitch.&lt;/p&gt;
&lt;p&gt;Once a machine is connected to the WHS, you can use the convenient WHS console (WHS is designed to operate headless, BTW), which is basically the console application piped through a terminal services window, or you can login via terminal services the &amp;quot;normal&amp;quot; way. In the console, you can configure the server, see connected computers, visualize hard drive usage, and configure the automated full-computer backups.&lt;/p&gt;
&lt;p&gt;Yes, automated, full-computer backups, a-la time-machine (though not hourly, which really isn&#039;t a big deal to me at all). Essentially, when you configure a computer to be backed up by WHS, every day during the time window that you configure, WHS will pull a complete backup of your machine. But, WHS is smart about it, and just does differential backups, meaning that while the first backup might take quite a while, subsequent backups are much faster (just a few minutes usually). I have my network configured to backup to the WHS every day between 1am and 6am. It keeps a week of daily backups, and several weeks of weekly snapshots. So, should a hard drive fail in the family, WHS has all the data... and I mean &lt;em&gt;all&lt;/em&gt; the data, including the windows install, applications, everything that&#039;s not specifically excluded by me.&lt;/p&gt;
&lt;p&gt;If this was all WHS&amp;nbsp;did, in my opinion, this would be worth the $100. But, consider the growing multitude of add-ins you can acquire for WHS, and the value continues to grow. On my list of personal favorites is an online backup service called KeepVault. For $100/year, we get 100gb of backup space to which WHS will automatically backup any of the shared folders we choose. We keep all of our multimedia files on the WHS (and access them via mapped network drives), so the moment we import pictures from our digital camera, they are on the server, being backed up securely online. Perfect!&lt;/p&gt;
&lt;p&gt;I could continue to go on about other capabilities, but I&amp;nbsp;don&#039;t want to sound like too much of a fan boi at this point. In short:&amp;nbsp;I recommend WHS because it just works and offers key features that make keeping your home network running a breeze.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;display: none;&quot; id=&quot;1251242050083S&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
     <comments>http://jbenner.net/blog/windows-home-server-ftw#comments</comments>
 <category domain="http://jbenner.net/topic/microsoft">Microsoft</category>
 <category domain="http://jbenner.net/topic/opinion">Opinion</category>
 <category domain="http://jbenner.net/topic/review">Review</category>
 <category domain="http://jbenner.net/topic/servers">Servers</category>
 <category domain="http://jbenner.net/topic/windows">Windows</category>
 <category domain="http://jbenner.net/topic/windows-home-server">Windows Home Server</category>
 <pubDate>Tue, 25 Aug 2009 23:19:38 +0000</pubDate>
 <dc:creator>Josh</dc:creator>
 <guid isPermaLink="false">33 at http://jbenner.net</guid>
  </item>
  <item>
    <title>Drupal Performance on SliceHost with Boost Module</title>
    <link>http://jbenner.net/blog/drupal-performance-on-slicehost-with-boost-module</link>
    <description>&lt;p&gt;If you know me, you know that I&amp;nbsp;work on a lot of &lt;a href=&quot;http://drupal.org&quot;&gt;Drupal&lt;/a&gt; sites. You might also know that &lt;a href=&quot;http://slicehost.com&quot;&gt;SliceHost&lt;/a&gt; (now a part of RackSpace)&amp;nbsp;is one of the most affordable and simple VPS hosting solutions out there. That said, you might not know that I run several of my own Drupal sites on a single SliceHost 256 slice (256mb ram, that is).&lt;/p&gt;
&lt;p&gt;Since I put up my personal blog site using Drupal on a slice, I&#039;ve noticed that the site, despite being very straightforward as far as Drupal sites go, was not performing very well (3-5 second page loads were common, 400-500ms before initial HTTP response codes). So, I decided to take a closer look to determine what was going on and try to resolve the performance issue.&lt;/p&gt;
&lt;!--break--&gt;
&lt;p&gt;The first thing I&amp;nbsp;did was to create a duplicate instance of my site on my local Linux development box. I was mildly surprised to find that the local instance of the site was blazingly fast. Understanding that &lt;em&gt;something&lt;/em&gt; was causing poor performance in the live version, I continued on and ran an execution profile of a few pages of the site... no glaring performance issues compared to typical Drupal site execution.&lt;/p&gt;
&lt;p&gt;That lead me to suspect SliceHost itself. As a virtual server, the system naturally shares physical resources with several other virtual systems. In addition, the CPU and disk IO resources that the VPS has access to are probably highly dependent on the activity of the other virtual servers on the physical server. After watching top on my VPS for a while and reading the &lt;a href=&quot;http://emilian-bold.blogspot.com/2009/01/my-slicehost-vps-analysis.html&quot;&gt;observations of others using SliceHost&lt;/a&gt;, I came to the conclusion that a good portion of my problem was likely&amp;nbsp;due to&amp;nbsp;the IO delays when the web server was trying to load files or the DB was reading/writing to the disk for whatever reason.&lt;/p&gt;
&lt;p&gt;Among the other things I&amp;nbsp;already know are these things:&amp;nbsp;I dont&#039; have the time or inclination to switch to a different VPS vendor, and I&amp;nbsp;don&#039;t have the money to pay for more than a 256 slice. So, my solution was to try to work around the issue... using the &lt;a href=&quot;http://drupal.org/project/boost&quot;&gt;boost module&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Boost module is a project to add a static page cache mechanism to Drupal. While Drupal core includes a database-based cache for anonymous users, sometimes performance gains can be realized by the web server loading only a single, flat HTML file instead of executing all sorts of PHP, hitting the database a bunch of times, then outputting the resulting HTML. If the output will be the same each time anyway, a static page cache makes a &lt;em&gt;lot&lt;/em&gt; of sense.&lt;/p&gt;
&lt;p&gt;Installing boost on Drupal 6 wasn&#039;t too bad. Its configuration pages can be a little overwhelming to parse at first, but once I started to gain an understanding of what it was trying to do, things started making a lot more sense. Specifically, boost not only has a static page caching mechanism, but it also features a cron-based crawler that refreshes cached pages&amp;nbsp;as well as pages specifically flagged for cache generating (using boost&#039;s block) to keep the static cache nice and preemptively fresh.&lt;/p&gt;
&lt;p&gt;Once I&amp;nbsp;deployed boost and made the requisite configuration changes, I&amp;nbsp;re-ran my performance tests (me clicking around with YSlow). Instead of seeing the average page load times around 3-5 seconds, pages (once cached) were loading in less than a second (0.5 - 0.9 seconds specifically). During first-time cache generation, I still see some higher times -- but since I&#039;ve got my cron-based boost crawler doing the work in the background, most pages should render rather quickly now.&lt;/p&gt;</description>
     <comments>http://jbenner.net/blog/drupal-performance-on-slicehost-with-boost-module#comments</comments>
 <category domain="http://jbenner.net/topic/drupal">Drupal</category>
 <category domain="http://jbenner.net/topic/performance">Performance</category>
 <category domain="http://jbenner.net/topic/slicehost">SliceHost</category>
 <pubDate>Fri, 21 Aug 2009 20:04:20 +0000</pubDate>
 <dc:creator>Josh</dc:creator>
 <guid isPermaLink="false">32 at http://jbenner.net</guid>
  </item>
  <item>
    <title>Review: NuSphere PhpED 5.6</title>
    <link>http://jbenner.net/blog/review-nusphere-phped-5-6</link>
    <description>&lt;p&gt;As I explained in my &lt;a href=&quot;/blog/disappointed-with-zend&quot;&gt;previous post&lt;/a&gt;, I&#039;ve been on the hunt for a new PHP&amp;nbsp;IDE. During past searches for this type of tool, I&#039;ve always taken a glance at &lt;a href=&quot;http://www.nusphere.com/products/phped.htm&quot;&gt;NuSphere&#039;s PhpED&lt;/a&gt; and usually went away screaming rather quickly because of how clunky, ugly, and just plain annoying the interface was (keep reading, though, they fixed this!). My last look at PhpED was verison 5.2 quite some time ago -- it was a good improvement over previous PhpED versions, but it couldn&#039;t compete with the Eclipse-based options (at least in the terms that mattered to me).&lt;/p&gt;
&lt;p&gt;Which brings me to an important note: what I&amp;nbsp;look for in an IDE is probably not exactly what another coder will look for in an IDE. From what I&#039;ve experienced, choice of tools for most coders is 50% features/capabilities and 90% preference (oh hai, math!). For me, here is a list of features that are important:&lt;/p&gt;
&lt;!--break--&gt;
&lt;ul&gt;
    &lt;li&gt;Clean, tabbed, highly customizable interface&lt;/li&gt;
    &lt;li&gt;Stability&lt;/li&gt;
    &lt;li&gt;Fast (operation, not necessarily start-up)&lt;/li&gt;
    &lt;li&gt;Good project/file management&lt;/li&gt;
    &lt;li&gt;Good/customizable syntax highlighting&lt;/li&gt;
    &lt;li&gt;Real-time, remote debugging&lt;/li&gt;
    &lt;li&gt;Code insight/navigation/etc&lt;/li&gt;
    &lt;li&gt;High degree of configurability (keyboard shortcuts, behavior of UI elements, etc)&lt;/li&gt;
    &lt;li&gt;Version control integration (SVN specifically)&lt;/li&gt;
    &lt;li&gt;Integration with other parts of my workflow (SSH, MySQL, [S]FTP, etc)&lt;/li&gt;
    &lt;li&gt;And as we saw with Zend, update regularity is important to me (especially if I pay for it)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;My First Day with PhpED&lt;/h4&gt;
&lt;p&gt;I went to &lt;a href=&quot;http://www.nusphere.com/index.htm&quot;&gt;NuSphere&#039;s site&lt;/a&gt;, which still feels a little underwhelming for some reason, and downloaded, installed, and activated the PhpED Professional trial. PhpED installed easily and quickly, and getting an activation code for the trial was simple and fast.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;inline inline-right&quot;&gt;&lt;a href=&quot;/image/phped-debugger-in-action&quot;&gt;&lt;img src=&quot;http://jbenner.net/sites/default/files/images/PhpED__Debugger_in_action.inline.png&quot; alt=&quot;PhpED Debugger in Action&quot; title=&quot;PhpED Debugger in Action&quot;  class=&quot;image image-inline &quot; width=&quot;238&quot; height=&quot;180&quot; /&gt;&lt;/a&gt;&lt;span class=&quot;caption&quot; style=&quot;width: 236px;&quot;&gt;&lt;strong&gt;PhpED Debugger in Action&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;I knew I&amp;nbsp;wanted to be able to do some real-time debugging on the Linux box under my desk, so I followed &lt;a href=&quot;http://www.nusphere.com/kb/technicalfaq/howto_install_dbg_module.htm&quot;&gt;NuSphere&#039;s instructions&lt;/a&gt; on how to install their DBG debugger extension for PHP. I was pleased that their debugger installed without any trouble on PHP&amp;nbsp;5.2 on my Ubuntu 8.04 server. When starting a new project, you drop a dbg-wizard.php file into the docroot and PhpED test debugger functionality, providing you with feedback on any changes you should make to your server configuration -- such as disabling APC. I was impressed at the ease of the debugger setup. Oh, and compared to Zend&#039;s remote debugger, DBG is &lt;em&gt;fast&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;inline inline-left&quot;&gt;&lt;a href=&quot;/image/phped-new-project-wizard&quot;&gt;&lt;img src=&quot;http://jbenner.net/sites/default/files/images/PhpED__Project_Wizard.inline.png&quot; alt=&quot;PhpED New Project Wizard&quot; title=&quot;PhpED New Project Wizard&quot;  class=&quot;image image-inline &quot; width=&quot;265&quot; height=&quot;180&quot; /&gt;&lt;/a&gt;&lt;span class=&quot;caption&quot; style=&quot;width: 263px;&quot;&gt;&lt;strong&gt;PhpED New Project Wizard&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;Next I wanted to pull my existing projects into PhpED. I work on a Vista machine that mounts a samba share containing the various docroots from my local Linux web server so I can edit files and test the local version of the site immediately without any bothersome file transfers to interrupt the process. PhpED&#039;s workspace/project setup easily and specifically accounted for this arrangement with some simple questions during the new project wizard. I just told PhpED that I&amp;nbsp;work with local files that the web server also has access to, gave PhpED details about the docroot and URL, and PhpED pulled in each project tree flawlessly.&lt;/p&gt;
&lt;p&gt;My next stop was syntax highlighting. During the very brief sting that I&amp;nbsp;worked with &lt;a href=&quot;http://macromates.com/&quot;&gt;TextMate&lt;/a&gt;, I&amp;nbsp;fell in love with their default syntax highlight color schemes because they are easy on my poor coder eyes. PhpED&#039;s syntax highlight settings were easy to find and configure, resulting in a code interface that I was familiar and comfortable with.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;inline inline-left&quot;&gt;&lt;a href=&quot;/image/phped-pop-out-windows&quot;&gt;&lt;img src=&quot;http://jbenner.net/sites/default/files/images/PhpED__Workspaces_Open.inline.png&quot; alt=&quot;PhpED Pop-out Windows&quot; title=&quot;PhpED Pop-out Windows&quot;  class=&quot;image image-inline &quot; width=&quot;238&quot; height=&quot;180&quot; /&gt;&lt;/a&gt;&lt;span class=&quot;caption&quot; style=&quot;width: 236px;&quot;&gt;&lt;strong&gt;PhpED Pop-out Windows&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;One of the things I&amp;nbsp;love about Eclipse is the incredibly customizable nature of its window interface. You can dock just about any window anywhere in the IDE, collapse them, temporarily expand them, split views -- just about anything I want. While Eclipse has spoiled me in this regard, I&amp;nbsp;was pleased to find that PhpED is fairly customizable as well. While PhpED can&#039;t do everything Eclipse can as far as customizing the interface, PhpED does enough for me to get the interface arrangement I like (only code is visible with pop-out tabs on either side for supporting features like project navigation, reference, etc).&lt;/p&gt;
&lt;p&gt;PhpED doesn&#039;t include SVN integration out-of-the-box, but their workspace/project navigator provides easy access to the Windows shell menu. This means that since I have &lt;a href=&quot;http://tortoisesvn.tigris.org/&quot;&gt;TortoiseSVN&lt;/a&gt; installed, I was able to easily work with my SVN working copies. While I&amp;nbsp;don&#039;t feel that this is an ideal arrangement, it works and doesn&#039;t slow me down. I&#039;d like to see tighter integration between PhpED and SVN -- even if it&#039;s in the form of more tightly integrating with TortoiseSVN. While I haven&#039;t tried this yet, it looks like there may be ways to &lt;a href=&quot;http://www.nusphere.com/kb/technicalfaq/tip_phped_and_svn.htm&quot;&gt;get some tighter integration&lt;/a&gt; now.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;inline inline-left&quot;&gt;&lt;a href=&quot;/image/phped-terminal-window&quot;&gt;&lt;img src=&quot;http://jbenner.net/sites/default/files/images/PhpED__Terminal.inline.png&quot; alt=&quot;PhpED Terminal Window&quot; title=&quot;PhpED Terminal Window&quot;  class=&quot;image image-inline &quot; width=&quot;270&quot; height=&quot;163&quot; /&gt;&lt;/a&gt;&lt;span class=&quot;caption&quot; style=&quot;width: 268px;&quot;&gt;&lt;strong&gt;PhpED Terminal Window&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;Another way in which I&#039;m spoiled with code editors is how some will do little but meaningful things to help you code faster. Of particular interest and use to me is when the editor will auto-close brackets, parenthases, and quotes, then intelligently handle the code when you close them yourself (ie:&amp;nbsp;not adding any additional, unwanted closing characters). Zend Studio does this fairly nicely (though it gets confused sometimes), and a lot of PHP editors out there that I&#039;ve tried make an attempt at this but end up being more annoying than with the feature off. PhpED, however, has implemented this type of code typing help very well. PhpED intelligent closes and manages brackets and such, pops up useful help when typing a function, and has fast, effective completion options. PhpED for another win here.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;inline inline-right&quot;&gt;&lt;a href=&quot;/image/phped-database-client&quot;&gt;&lt;img src=&quot;http://jbenner.net/sites/default/files/images/PhpED__DB_Client.inline.png&quot; alt=&quot;PhpED Database Client&quot; title=&quot;PhpED Database Client&quot;  class=&quot;image image-inline &quot; width=&quot;209&quot; height=&quot;180&quot; /&gt;&lt;/a&gt;&lt;span class=&quot;caption&quot; style=&quot;width: 207px;&quot;&gt;&lt;strong&gt;PhpED Database Client&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;I was pretty happy with PhpED having discovered all the things I&#039;ve already covered... but&amp;nbsp;I became somewhat thrilled with PhpED when I discovered its DB&amp;nbsp;Client and Terminal windows. PhpED lets you easily connect to many databases, browser their structure and data, and even directly query them right from within the IDE. Their terminal integration allows you to SSH (or telnet) and have the terminal window exist seamlessly inside the IDE as well. To be fair, Zend Studio has these features as well in its Remote System Management module -- but that feature is clumsy, hard to use, and often doesn&#039;t quite work right. PhpED&#039;s implementation of these features, however, is sensible, fast, and easy to use.&lt;/p&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;I&#039;m pleased to say that through my whole week working with PhpED, I continued to discover new little shortcuts and features that made my life as a coder just a little bit better. PhpED has some very minor annoyances (ie: left arrow at beginning of line does not move cursor to end of previous line &lt;strong&gt;UPDATE:&amp;nbsp;&lt;/strong&gt;you can configure this to work like other editors!), but these are things that I&#039;ve been able to quickly overlook. At the end of the week, I&#039;m very happy with PhpED -- in fact, I think I&#039;m almost ready to give NuSphere my money.&lt;/p&gt;
&lt;h4&gt;Summary&lt;/h4&gt;
&lt;p&gt;I kept a text document open all week and have collected pros, cons, better than Zend Studio for Eclipse (ZSE), worse than ZSE, nifty, and silly features.&lt;/p&gt;
&lt;p&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Syntax highlight pretty customizable&lt;/li&gt;
    &lt;li&gt;Decent filesystem-based workspace/project management&lt;/li&gt;
    &lt;li&gt;Configurable shortcuts&lt;/li&gt;
    &lt;li&gt;Configurable IDE layout (can hide stuff for maximum code area)&lt;/li&gt;
    &lt;li&gt;Smart handling of brackets, parenthases, quotes, etc&lt;/li&gt;
    &lt;li&gt;Excellent debugger/profiler that just works&lt;/li&gt;
    &lt;li&gt;Intelligent project configuration&lt;/li&gt;
    &lt;li&gt;Good external tool integration&lt;/li&gt;
    &lt;li&gt;Excellent DB client&lt;/li&gt;
    &lt;li&gt;Excellent terminal/SSH client&lt;/li&gt;
    &lt;li&gt;Excellent and extensible help integration&lt;/li&gt;
    &lt;li&gt;Find declaration&lt;/li&gt;
    &lt;li&gt;Shows PHPDoc data&lt;/li&gt;
    &lt;li&gt;Code folding that doesn&#039;t make me want to shoot myself&lt;/li&gt;
    &lt;li&gt;Good code navigator/explorer&lt;/li&gt;
    &lt;li&gt;Handy features available on side of every editor tab&lt;/li&gt;
    &lt;li&gt;Floating of tabs is handy, esp. with multiple monitors&lt;/li&gt;
    &lt;li&gt;Fast&lt;/li&gt;
    &lt;li&gt;Pretty configurable (lets me turn annoying stuff off)&lt;/li&gt;
    &lt;li&gt;Lets you scroll past EOL&lt;/li&gt;
    &lt;li&gt;Intelligent PHPDoc start (auto-populates param statements)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;No plugin system that I can see&lt;/li&gt;
    &lt;li&gt;Would rather see built-in SVN support than relying on Tortoise&lt;/li&gt;
    &lt;li&gt;No line number color change on changed lines to show diffs from saved version&lt;/li&gt;
    &lt;li&gt;No X on tabs&lt;/li&gt;
    &lt;li&gt;Can&#039;t lock toolbars&lt;/li&gt;
    &lt;li&gt;No code formatting? Maybe I just haven&#039;t found it?&lt;/li&gt;
    &lt;li&gt;Behavior of unpinned windows seems a little off&lt;/li&gt;
    &lt;li&gt;Left arrow at beginning of line does not go to end of previous line&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Better than ZSE:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Faster refresh of code warnings/errors&lt;/li&gt;
    &lt;li&gt;Syntax highlight settings doesn&#039;t mess with popups&lt;/li&gt;
    &lt;li&gt;CSS editing faster, better&lt;/li&gt;
    &lt;li&gt;Debugger install was relatively easy and worked the first time&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Worse than ZSE:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;No plugin repository for adding nifty features&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nifty:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Dynamic highlight mode&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Silly:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&amp;quot;Full Screen&amp;quot; mode&lt;/li&gt;
    &lt;li&gt;Popup PHPDoc help when using a function destroys PHPDoc formatting (indents, etc)&lt;/li&gt;
    &lt;li&gt;Popup function help doesn&#039;t show defaults used in function declaration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;image-clear&quot;&gt;&lt;/div&gt;</description>
     <comments>http://jbenner.net/blog/review-nusphere-phped-5-6#comments</comments>
 <category domain="http://jbenner.net/topic/nusphere">NuSphere</category>
 <category domain="http://jbenner.net/topic/opinion">Opinion</category>
 <category domain="http://jbenner.net/topic/php">PHP</category>
 <category domain="http://jbenner.net/topic/phped">PhpED</category>
 <category domain="http://jbenner.net/topic/review">Review</category>
 <category domain="http://jbenner.net/topic/tools">Tools</category>
 <pubDate>Fri, 20 Mar 2009 15:07:52 +0000</pubDate>
 <dc:creator>Josh</dc:creator>
 <guid isPermaLink="false">25 at http://jbenner.net</guid>
  </item>
  <item>
    <title>Disappointed with Zend</title>
    <link>http://jbenner.net/blog/disappointed-with-zend</link>
    <description>&lt;p&gt;Every few months as I&amp;nbsp;sit at my desk and code away, I can&#039;t help but wonder to myself, &amp;quot;Is there anything better out there?&amp;quot; I&#039;m not being metaphysical or introspective -- I&#039;m talking about my &lt;a href=&quot;http://en.wikipedia.org/wiki/Integrated_development_environment&quot;&gt;integrated development environment (IDE)&lt;/a&gt;. Most coders I&#039;ve met are the same way:&amp;nbsp;we find a tool we like, use it for a while, but usually end up wanting something more or different. Perhaps discontent is a core part of human nature, but every few months I go looking for better tools.&lt;/p&gt;
&lt;p&gt;I&#039;ve been happily using &lt;a href=&quot;http://www.zend.com/en/products/studio/&quot;&gt;Zend Studio for Eclipse&lt;/a&gt; (ZSE) for just over a year now. I had loved &lt;a href=&quot;http://www.eclipse.org/&quot;&gt;Eclipse&lt;/a&gt; + &lt;a href=&quot;http://www.phpeclipse.com/&quot;&gt;PHPEclipse&lt;/a&gt; for a long while before moving on to Eclipse +&amp;nbsp;&lt;a href=&quot;http://www.eclipse.org/pdt/&quot;&gt;PDT&lt;/a&gt;, and had finally paid for ZSE to get a &lt;a href=&quot;http://www.zend.com/en/products/studio/compare&quot;&gt;few extra features&lt;/a&gt;, support, and install packages that didn&#039;t take me hours to assemble and install. I&#039;ve grown to know and understand Eclipse well, which is part of why I&#039;ve been using Eclipse in one form or another for about 4 years now.&lt;/p&gt;
&lt;p&gt;In truth, I was fine using ZSE for now. Work is keeping me busy, there is plenty to do at our new house... honestly, I didn&#039;t care to spend time looking into another solution for my daily-use PHP&amp;nbsp;IDE. Then my ZSE license expired, and while I can still use ZSE, I cannot get any updates or bug fixes until I pay Zend&#039;s extortion fee of $200.&lt;/p&gt;
&lt;p&gt;Let me be clear: I understand and accept paying recurring licensing fees. Except that in a year, Zend has only managed two updates that pass for anything more than the most minor bug fixes. And $200 for yearly maintenance for a product I bought for $300 a year ago (they were running a promo) just seems too high.&lt;/p&gt;
&lt;p&gt;If Zend was offering me some great new feature, or even fixes to all of the mild annoying bugs that run a little rampant through ZSE -- I&#039;d pay the fee! Yes, even $200! However, given the current state of ZSE and the paucity of updates from Zend, I&#039;d have to strongly consider even putting $100 toward ZSE at this point.&lt;/p&gt;</description>
     <comments>http://jbenner.net/blog/disappointed-with-zend#comments</comments>
 <category domain="http://jbenner.net/topic/eclipse">Eclipse</category>
 <category domain="http://jbenner.net/topic/opinion">Opinion</category>
 <category domain="http://jbenner.net/topic/tools">Tools</category>
 <category domain="http://jbenner.net/topic/zend">Zend</category>
 <pubDate>Thu, 19 Mar 2009 18:10:22 +0000</pubDate>
 <dc:creator>Josh</dc:creator>
 <guid isPermaLink="false">24 at http://jbenner.net</guid>
  </item>
  <item>
    <title>Why I Cancelled My Mozy.com Subscription</title>
    <link>http://jbenner.net/blog/why-i-cancelled-my-mozy-com-subscription</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://mozy.com&quot;&gt;Mozy&lt;/a&gt; is an online backup solution that has grown in popularity recently. My wife and I&amp;nbsp;have a lot of pictures, music, and generally important files on our computers that we know need to get backed up in a reliable and secure fashion. Mozy seemed like a natural choice.&lt;/p&gt;
&lt;p&gt;Now, my profession involves computers, servers, backups, etc. Our home setup consists of my main Vista workstation, my Vista laptop, my OS&amp;nbsp;X MacBook, my wife&#039;s Vista laptop, the central Ubuntu server, and the Mac Mini that handles all of our in-house backups (time machine as well as file sync, etc). We don&#039;t have more music or pictures than the typical computer user -- ours is just dispersed among many machines and all gets synchronized or backed up to the Mac Mini running OS&amp;nbsp;X Server.&lt;/p&gt;
&lt;p&gt;So, I signed up for MozyHome, their personal-use, unlimited backup plan, and went happily on my way downloading the OS&amp;nbsp;X client to set up the online backup for our files. Imagine my surprise and disappointment when MozyHome refused to install, for no other reason than I was running a &amp;quot;Server&amp;quot; SKU product, which MozyHome refuses to operate on. There was no technical reason, no software capability limitation, and no resource problem causing this -- the MozyHome client is specifically disabled for Operating Systems it thinks should use their &amp;quot;Pro&amp;quot; product.&lt;/p&gt;
&lt;p&gt;I contact Mozy support, and their only answer is, &amp;quot;You must use MozPro to backup a server system.&amp;quot; Great. Now what?&lt;/p&gt;
&lt;p&gt;Plan B:&amp;nbsp;I&#039;ll mount the backup drive attached to my Mac Mini to my windows machine and run the backups from there.&lt;/p&gt;
&lt;p&gt;Fail again! MozyHome does not support backing up network drives. Not because the Mozy technology doesn&#039;t support this -- because their &amp;quot;Server&amp;quot; line of client software does this no problem. Again, this limitation is put in place specifically for marketing reasons.&lt;/p&gt;
&lt;p&gt;Sure, I could probably come up with a Plan C that would involve duplicating all of my backups to a windows box and pushing the Mozy updates from there, but that&#039;s not what my windows machines are set up to be spending their time and resources on. I have a home network setup that is great for backup -- but Mozy&#039;s silly limitations prevent me from taking advantage of them.&lt;/p&gt;
&lt;p&gt;So, at least until I have a spare box that runs windows or OS X (non server SKUs of course!) available to house all of our consolidated files, we won&#039;t be using Mozy. In the meantime, I&#039;m in the market for a decent backup solution, preferably compatible with OS&amp;nbsp;X and/or Linux... I&#039;d even settle for a good rsync-based backup solution.&lt;/p&gt;
&lt;p&gt;Any suggestions?&lt;/p&gt;</description>
     <comments>http://jbenner.net/blog/why-i-cancelled-my-mozy-com-subscription#comments</comments>
 <category domain="http://jbenner.net/topic/backup">Backup</category>
 <category domain="http://jbenner.net/topic/defective-by-design">Defective by Design</category>
 <category domain="http://jbenner.net/topic/limitations">Limitations</category>
 <category domain="http://jbenner.net/topic/mozy">Mozy</category>
 <category domain="http://jbenner.net/topic/software">Software</category>
 <category domain="http://jbenner.net/topic/tools">Tools</category>
 <pubDate>Mon, 02 Mar 2009 18:11:59 +0000</pubDate>
 <dc:creator>Josh</dc:creator>
 <guid isPermaLink="false">23 at http://jbenner.net</guid>
  </item>
  <item>
    <title>The Essentials: What I Install on a Fresh Workstation</title>
    <link>http://jbenner.net/blog/the-essentials-what-i-install-on-a-fresh-workstation</link>
    <description>&lt;p&gt;This past weekend, for a number of reasons I won&#039;t get into now, I performed a complete &amp;quot;re-install&amp;quot; of my primary workstation. Previously, I was using XP Pro SP2, which had been installed and running smoothly on the machine for nearly two solid years. This also meant that my machine had two years worth of my customized configurations, applications, tools, etc., so a re-install also meant bringing a fresh Windows (Vista this time) installation up to speed and in sync with my preferences.&lt;/p&gt;
&lt;p&gt;During the process of re-installing all the various programs and utilities that I make regular use of, it occurred to me that I was installing the things that I just couldn&#039;t do without -- the tools I keep in my toolbelt at all times. I don&#039;t know if I&#039;ve got everything installed yet, but I know I&#039;ve installed all the primary tools that I use on a regular basis... and they are listed here:&lt;/p&gt;
&lt;!--break--&gt;
&lt;h3&gt;AVG Free Anti-Virus&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://free.grisoft.com&quot;&gt;http://free.grisoft.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Regardless of the enhanced security of Windows Vista, the very first thing I installed was AVG Free. This free little anti-virus is great for the price tag and reasonably effective at catching threats.&lt;/p&gt;
&lt;h3&gt;Firefox 3&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://getfirefox.com&quot;&gt;http://getfirefox.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Firefox is by far my browser of choice due to its features, speed, extensibility, standards compliance, and cross-platform support. Along with Firefox I also install a standard battery of extensions, including:&lt;/p&gt;
&lt;ul class=&quot;rteindent1&quot;&gt;
    &lt;li&gt;Firebug&lt;/li&gt;
    &lt;li&gt;Web Developer Toolbar&lt;/li&gt;
    &lt;li&gt;YSlow&lt;/li&gt;
    &lt;li&gt;Download status bar&lt;/li&gt;
    &lt;li&gt;Foxmarks&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Notepad++&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;http://notepad-plus.sourceforge.net/uk/site.htm&lt;br /&gt;
&lt;br /&gt;
For my simple text-editing and random coding, Notepad++ is my weapon of choice. I spent some time taking a look at the editors highlighted over at &lt;a href=&quot;http://lifehacker.com/385929/best-text-editors&quot;&gt;LifeHacker&lt;/a&gt;, but Notepad++&amp;nbsp;has just the right mix of everything for my taste.&lt;/p&gt;
&lt;h3&gt;PuTTY/PuTTY Tray&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;PuTTY:&amp;nbsp;&lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html&quot;&gt;http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html&lt;/a&gt;&lt;br /&gt;
PuTTY Tray:&amp;nbsp;&lt;a href=&quot;http://www.xs4all.nl/~whaa/putty/&quot;&gt;http://www.xs4all.nl/~whaa/putty/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I&#039;ve looked at other programs for Windows, but they are either too expensive, too bloated, or just too limited. PuTTY is by far my favorite SSH/terminal program for Windows. I install the full PuTTY package including PuTTYGen and the like, then replace the putty.exe file with the exe from the PuTTY Tray project, to get just a few more nice features that make it that much better.&lt;/p&gt;
&lt;h3&gt;Zend Studio for Eclipse&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://www.zend.com/en/products/studio/&quot;&gt;http://www.zend.com/en/products/studio/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
As covered &lt;a href=&quot;http://jbenner.net/blog/zend-studio-for-eclipse-6-1&quot;&gt;previously&lt;/a&gt;, I use ZSE as my primary IDE for my web development work.&lt;/p&gt;
&lt;h3&gt;MySQL GUI&amp;nbsp;Tools&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/downloads/gui-tools/5.0.html&quot;&gt;http://dev.mysql.com/downloads/gui-tools/5.0.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
During the course of web development, you usually end up interacting with databases a good bit. I&#039;ve found that the MySQL Query Browser is a handy little tool, especially when working in a local development environment. This is probably a tool I could do without or even find a better fit, but it got installed quickly nonetheless -- because I&#039;m familiar with it.&lt;br /&gt;
&lt;br /&gt;
P.S.:&amp;nbsp;It&#039;s a rather large shame that MySQL decided to cripple the free version of &lt;a href=&quot;http://www.mysql.com/products/workbench/&quot;&gt;MySQL&amp;nbsp;Workbench&lt;/a&gt; and charge you $100 for some of the best features. I don&#039;t mind paying for software, but the value provided by Workbench is not worth $100, especially when many of those features used to be free.&lt;/p&gt;
&lt;h3&gt;KatMouse&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://ehiti.de/katmouse/&quot;&gt;http://ehiti.de/katmouse/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
KatMouse is a little Windows interface tweak that makes the cursor behave a little more like Linux desktops or OS X by allowing you to use the scroll wheel to scroll a window does not have the focus but is directly under the cursor. Once you have this functionality you never want to go back... imagine not having to click in the list of files to scroll through it or not having to switch windows to scroll that web page you have open behind your terminal...&lt;/p&gt;
&lt;h3&gt;Taskix&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://taskix.robustit.com/&quot;&gt;http://taskix.robustit.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Taskix is simple and to the point:&amp;nbsp;it lets you drag taskbar items to reorganize them. It is lightweight and just works, so I love it. Thanks &lt;a href=&quot;http://lifehacker.com/5045312/taskix-enables-taskbar-reordering-with-a-small-footprint&quot;&gt;LifeHacker &lt;/a&gt;for turning me on to this little gem.&lt;/p&gt;
&lt;h3&gt;FileZilla&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://filezilla-project.org/&quot;&gt;http://filezilla-project.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I have been using FileZilla for (S)FTP transfers for as long as I&amp;nbsp;can remember -- long before it was a slick as it is now. &lt;a href=&quot;http://lifehacker.com/5042583/hive-five-winner-for-best-ftp-client-filezilla&quot;&gt;Many agree&lt;/a&gt; that FileZilla is the best FTP program out there.&lt;/p&gt;
&lt;h3&gt;eWallet&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://www.iliumsoft.com/wallet.htm&quot;&gt;http://www.iliumsoft.com/wallet.htm&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
eWallet is a little addiction I picked up a couple years ago at my last job. This is where I keep all of my passwords and important information, safely encrypted behind my master password. As an added bonus, Illium software (the maker of eWallet) just released an iPhone version of eWallet that syncs over WiFi with your Windows eWallet!&lt;/p&gt;
&lt;h3&gt;Launchy&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://www.launchy.net/&quot;&gt;http://www.launchy.net/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Since I&amp;nbsp;am using Vista this time around, I thought Vista&#039;s nifty search bar in the start menu would replace Launchy. However, my love for Launchy&#039;s power, customizability, and great plugins brought me running back into Launchy&#039;s arms. Launchy is a simple (although not very light-weight) application launcher that indexes your Start Menu (and whatever you want) and provides a great little hotkey-induced interface for launching your programs, documents, or whatever you want. The excellent &lt;a href=&quot;http://code.google.com/p/putty-launchy-plugin/&quot;&gt;PuTTY Plugin&lt;/a&gt; makes a great companion to PuTTY as well!&lt;/p&gt;
&lt;h3&gt;TUGzip&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://www.tugzip.com/&quot;&gt;http://www.tugzip.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
After a long time of using 7-Zip, I found TUGZip about a year ago. TUGZip is extremely fast, has an excellent shell extension (right click on a file and extract it in place), and supports every compression format I&#039;ve ever heard of... and many that I&#039;ve &lt;em&gt;never&lt;/em&gt; heard of. Best of all, it&#039;s free!&lt;/p&gt;
&lt;h3&gt;CrossClip&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://www.stretchedout.com/products/crossclip/crossclip.php&quot;&gt;http://www.stretchedout.com/products/crossclip/crossclip.php&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I started using CrossClip when I started working from home a year ago. My Windows machine sits front and center, flanked by my Ubuntu laptop running virtual machines on the left and my MacBook Pro with OS X on the right. Swivelling back and forth between the platforms is great fun until you realize that you would give just about anything to be able to quickly and easily copy from one computer and paste to the other. CrossClip lets you do that, and it works on Windows, Mac, and Linux (though I&amp;nbsp;don&#039;t use it on Linux right now because of synergy), and it turns out I&amp;nbsp;only had to sacrifice $19.95.&lt;/p&gt;
&lt;h3&gt;Synergy&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://synergy2.sourceforge.net/&quot;&gt;http://synergy2.sourceforge.net/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Synergy, with all its quirks and oddities, is still the only cross-platform way I&#039;ve found to use the keyboard/mouse of one computer to control another computer. I use the keyboard/mouse connected to my Windows workstation to also use my Ubuntu workstation to the left.&lt;br /&gt;
&lt;br /&gt;
Note:&amp;nbsp;If you need this functionality between two Windows computers, check out Stardock&#039;s &lt;em&gt;excellent&lt;/em&gt; &lt;a href=&quot;http://www.stardock.com/products/multiplicity/&quot;&gt;Multiplicity&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Jing&lt;/h3&gt;
&lt;p class=&quot;rteindent1&quot;&gt;&lt;a href=&quot;http://www.jingproject.com/&quot;&gt;http://www.jingproject.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Jing is awesome. Never has it been so easy to make a screen capture (with or without voice-over), take a screenshot of just part of the screen, or share your captures with the rest of the world. You have to try it to understand -- I&amp;nbsp;use it regularly to collaborate with coworkers or explain things to clients.&lt;/p&gt;</description>
     <comments>http://jbenner.net/blog/the-essentials-what-i-install-on-a-fresh-workstation#comments</comments>
 <category domain="http://jbenner.net/topic/opinion">Opinion</category>
 <category domain="http://jbenner.net/topic/software">Software</category>
 <category domain="http://jbenner.net/topic/tools">Tools</category>
 <category domain="http://jbenner.net/topic/web-development">Web Development</category>
 <pubDate>Wed, 22 Oct 2008 20:13:15 +0000</pubDate>
 <dc:creator>Josh</dc:creator>
 <guid isPermaLink="false">22 at http://jbenner.net</guid>
  </item>
  </channel>
</rss>
<!-- Page cached by Boost @ 2010-03-10 16:41:22, expires @ 2010-03-10 17:41:22 -->
