<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mark Deepwell</title>
    <link>/</link>
    <description>Recent content on Mark Deepwell</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-ca</language>
    <lastBuildDate>Sun, 22 Feb 2026 20:00:00 +0000</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>GitY: A Fast, Native Git Repository Browser for Linux</title>
      <link>/2026/02/gity-fast-native-git-repository-browser-for-linux/</link>
      <pubDate>Sun, 22 Feb 2026 20:00:00 +0000</pubDate>
      
      <guid>/2026/02/gity-fast-native-git-repository-browser-for-linux/</guid>
      
        <description>&lt;p&gt;Over the last two months I built my first desktop application: &lt;strong&gt;&lt;a href=&#34;https://flathub.org/apps/details/com.markdeepwell.GitY&#34;&gt;GitY&lt;/a&gt;&lt;/strong&gt;.
It&amp;rsquo;s a simple read-only Git browser for searching and viewing a repositories commit history.
Useful for browsing a Git repository in a desktop app without wrestling with a heavyweight IDE.
It&amp;rsquo;s a simple, fast, and built for developers who prefer native Linux tools—and it excels at two things in particular: search and speed.
For reasonably sized repositories most operations will be near instant.
Don&amp;rsquo;t wait for slow tools when better options exist!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Asking Great Questions is a Superpower</title>
      <link>/2022/09/asking-great-questions-is-a-superpower/</link>
      <pubDate>Mon, 12 Sep 2022 22:00:00 +0000</pubDate>
      
      <guid>/2022/09/asking-great-questions-is-a-superpower/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;m sure this situation has happened to you: you&amp;rsquo;re in a meeting with a group of people and it seems like no progress is being made on how to proceed until someone asks a really great question and everyone goes silent.
That is the power of asking a great question.
A great question gets at the underlying assumptions and aligns multiple perspectives on the problem.
It&amp;rsquo;s also a great tool for effective leadership.
I wrote this post to reflect and consider how I can ask better questions because it&amp;rsquo;s a skill that can be developed.
Before we get into the how, let&amp;rsquo;s start with the benefits first.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Effective Interviews</title>
      <link>/2022/01/effective-interviews/</link>
      <pubDate>Sun, 09 Jan 2022 22:00:00 +0000</pubDate>
      
      <guid>/2022/01/effective-interviews/</guid>
      
        <description>&lt;p&gt;Do you remember the last time you were in an interview? Did you enjoy it? Did you tolerate it? Or did you secretly wish it wasn&amp;rsquo;t happening? Interviews are notoriously unpleasant for the interviewee and sometimes for the interviewer as well. In the last 13+ years I&amp;rsquo;ve conducted many interviews, from those that were incredibly awkward to those that were quite enjoyable. Leaning on my experience let&amp;rsquo;s dig into what makes an interview productive and what both parties can do to make the whole process a bit more pleasant.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Resigning From Your Day Job</title>
      <link>/2021/05/resigning-from-your-day-job/</link>
      <pubDate>Thu, 06 May 2021 22:00:00 +0000</pubDate>
      
      <guid>/2021/05/resigning-from-your-day-job/</guid>
      
        <description>&lt;p&gt;Last week I wrapped up my employment at &lt;a href=&#34;https://www.policyreporter.com/&#34;&gt;Policy Reporter&lt;/a&gt;. It was bittersweet to leave a company where I got to play such a big role. During my time we saw tremendous business growth, hired and formed a management team, and had a successful exit when Policy Reporter was &lt;a href=&#34;https://www.wraltechwire.com/2019/11/26/morrisville-based-trialcard-acquires-policy-reporter-to-provide-patient-access/&#34;&gt;acquired by TrailCard&lt;/a&gt;. I also had the privilege of hiring and growing an amazing Engineering team, working with a lot of incredible people, form new departments, re-building the technical foundations of the product, building new products, and creating a culture where everyone is respected, friendly, open to learning together, and always looking for ways to get better. As I was preparing to leave I was told the team embodies my value of us all becoming better humans (a deeply held belief and purpose of mine that I didn&amp;rsquo;t realize had seeped out). I&amp;rsquo;m sad to have left and I still miss engaging with my team daily.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Upgrade to Git</title>
      <link>/2011/12/upgrade-to-git/</link>
      <pubDate>Fri, 30 Dec 2011 22:25:36 +0000</pubDate>
      
      <guid>/2011/12/upgrade-to-git/</guid>
      
        <description>&lt;p&gt;Remember when Subversion was the new tool that all the cool kids were flocking to? Well, Subversion is now the old and busted, and it&amp;rsquo;s time to move to Git.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s time to upgrade your Subversion repo (if your still using it) to Git because of the benefits you will gain from moving to a more flexible tool.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Distributed: When you checkout (or clone in the git world) a repository, you are checking out all the files in the repository, which means you can work independently of others. You can commit and make changes on master, or another branch without imposing your incomplete changes on the rest of the team.&lt;/li&gt;
&lt;li&gt;Simple Merging: Compared to Subversion, merging is fun. Because its so easy, as a developer you are more inclined to make additional branches and use them as they should be used. This adds a lot of flexibility in where and when the changes are pushed to master.&lt;/li&gt;
&lt;li&gt;Speed: A subversion commit doesn&amp;rsquo;t end until all the files have been transferred to the remote server, with git, commits are completed instantly because you are committing to the local repository, not the remote one. Therefore, you don&amp;rsquo;t have to wait for actions to complete as they are almost instantaneous.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I could go on, but those are the big ones for me. Note: I&amp;rsquo;m not against other DVCS systems like Mercurial, Bazaar, but I chose Git because of it&amp;rsquo;s popularity and ability to handle the Linux kernel.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Cache Password Protected Website</title>
      <link>/2011/11/cache-password-protected-website/</link>
      <pubDate>Tue, 22 Nov 2011 02:03:08 +0000</pubDate>
      
      <guid>/2011/11/cache-password-protected-website/</guid>
      
        <description>&lt;p&gt;I needed to write a simple web app to automatically cache a password protected tumblr admin account, so I wrote simple symfony app to do it. It was pretty simple to do because I could leverage the &lt;code&gt;sfWebBrowserPlugin&lt;/code&gt; which provides most of the heavy work for simulating a browser and logging into the site.&lt;/p&gt;
&lt;p&gt;While this project is setup to cache tumblr, you can easily modify it to cache any website. It&amp;rsquo;s built in PHP on the symfony framework.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>WordPress Needs a Default Caching Plugin</title>
      <link>/2011/10/wordpress-needs-default-caching-plugin/</link>
      <pubDate>Sat, 29 Oct 2011 17:44:23 +0000</pubDate>
      
      <guid>/2011/10/wordpress-needs-default-caching-plugin/</guid>
      
        <description>&lt;p&gt;I find it curious that &lt;a href=&#34;https://wordpress.org/&#34;&gt;WordPress&lt;/a&gt;, one of the &lt;a href=&#34;https://lifehacker.com/5568092/five-best-blogging-platforms&#34;&gt;biggest and best blogging platforms&lt;/a&gt; currently around does not come default with a caching plugin. I think the WordPress developers should either include one of the &lt;a href=&#34;https://www.satollo.net/plugins/hyper-cache&#34;&gt;excellent WordPress caching plugins&lt;/a&gt;, or build their own and then enable it by default. Users and blog hosts worldwide would have better page load performance and improved scalability.&lt;/p&gt;
&lt;p&gt;This blog is build with WordPress, and in my first year of blogging, one of my posts received a lot of hits. Unfortunately, the default WordPress install I had setup wasn&amp;rsquo;t able to cope with the demand effectively. It was taking 2-5 seconds for visitors to load a page. That&amp;rsquo;s unreasonable for a simple blog and I&amp;rsquo;m sure I lost a lot of visitors because of it. So I looked into ways to make my blog load faster without paying extra for better hosting hardware. That&amp;rsquo;s when I found an excellent caching plugin called &lt;a href=&#34;https://www.satollo.net/plugins/hyper-cache&#34;&gt;Hyper Cache&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Sanitize User Input for XSS in PHP</title>
      <link>/2011/08/sanitize-user-input-for-xss-in-php/</link>
      <pubDate>Thu, 01 Sep 2011 06:04:39 +0000</pubDate>
      
      <guid>/2011/08/sanitize-user-input-for-xss-in-php/</guid>
      
        <description>&lt;p&gt;The best way to sanitize any input from your user (in PHP) is to use the &lt;a href=&#34;http://htmlpurifier.org/&#34;&gt;HTML Purifier&lt;/a&gt; library. HTML Purifier will remove any XSS from your code, produce valid HTML, and generally make you sleep just a bit safer at night. It doesn&amp;rsquo;t completely sanitize user input, and you still need to be careful with it before using it anywhere (such as an SQL statement), but it will remove all XSS attacks against your website.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Yii Override Command Parameters</title>
      <link>/2011/07/yii-override-command-parameters/</link>
      <pubDate>Mon, 11 Jul 2011 14:35:48 +0000</pubDate>
      
      <guid>/2011/07/yii-override-command-parameters/</guid>
      
        <description>&lt;p&gt;The &lt;a href=&#34;https://www.yiiframework.com/&#34;&gt;Yii Framework&lt;/a&gt; is very flexible and has a variety of way you can configure it. Here I will show you how you can customize parameters on a Command task.&lt;/p&gt;
&lt;p&gt;The default Yii Migration command asks the user for a confirmation before running if there are any tables that have been changed, this is quite a sensible default, but I don&amp;rsquo;t want to be asked if the command should be run after a deployment. Of course it should be.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>How to add Local Config Variables to Yii</title>
      <link>/2011/06/how-to-add-local-config-variables-to-yii/</link>
      <pubDate>Thu, 30 Jun 2011 22:13:58 +0000</pubDate>
      
      <guid>/2011/06/how-to-add-local-config-variables-to-yii/</guid>
      
        <description>&lt;p&gt;Often times you want to be able to specify configuration parameters or settings that only apply to a single environment. These local configuration don&amp;rsquo;t need to, and shouldn&amp;rsquo;t be entered into version control, and should over ride default values. I needed a solution for a project I was working on so I wrote one for Yii.&lt;/p&gt;
&lt;p&gt;The main configuration file &lt;code&gt;protected/config/main.php&lt;/code&gt; returns an array of parameters. Edit this file to merge 2 arrays, 1 from &lt;code&gt;main.php&lt;/code&gt;, and another from &lt;code&gt;local.php&lt;/code&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Add an i18n Static Page to Symfony</title>
      <link>/2011/05/add-an-i18n-static-page-to-symfony/</link>
      <pubDate>Mon, 16 May 2011 02:00:48 +0000</pubDate>
      
      <guid>/2011/05/add-an-i18n-static-page-to-symfony/</guid>
      
        <description>&lt;p&gt;My last post explained the basics on how to &lt;a href=&#34;/2011/03/add-a-static-page-to-symfony/&#34;&gt;add static pages in symfony&lt;/a&gt;, this post expands on that and shows you how to do it for a multilingual site.&lt;/p&gt;
&lt;p&gt;We split the template finding code out for code maintainability, and we enhance it on where to look for the file. First it tries to find the template in the language and country eg: en_CA, then it tries to find the template in the matching language, and if that is not found, it falls back to the default language.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Add a Static Page to Symfony</title>
      <link>/2011/03/add-a-static-page-to-symfony/</link>
      <pubDate>Mon, 28 Mar 2011 15:02:19 +0000</pubDate>
      
      <guid>/2011/03/add-a-static-page-to-symfony/</guid>
      
        <description>&lt;p&gt;Static pages can be added to Symfony quite easily.&lt;/p&gt;
&lt;p&gt;Edit your &lt;code&gt;routing.yml&lt;/code&gt; file which is probably located at &lt;code&gt;apps/frontend/config/routing.yml&lt;/code&gt;, and add the following routes to add an about, a privacy, and a terms and conditions page.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# static pages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;about&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;url&lt;/span&gt;:   &lt;span style=&#34;color:#ae81ff&#34;&gt;/about&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;param&lt;/span&gt;: { &lt;span style=&#34;color:#f92672&#34;&gt;module: home, action: page, view&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;about }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;privacy&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;url&lt;/span&gt;:   &lt;span style=&#34;color:#ae81ff&#34;&gt;/privacy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;param&lt;/span&gt;: { &lt;span style=&#34;color:#f92672&#34;&gt;module: home, action: page, view&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;privacy }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;terms&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;url&lt;/span&gt;:   &lt;span style=&#34;color:#ae81ff&#34;&gt;/terms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;param&lt;/span&gt;: { &lt;span style=&#34;color:#f92672&#34;&gt;module: home, action: page, view&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;terms }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you are going to keep the generic rules, make sure you add these new rules &lt;strong&gt;before&lt;/strong&gt; the default actions.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Web Development Best Practices</title>
      <link>/2011/01/web-development-best-practices/</link>
      <pubDate>Mon, 10 Jan 2011 05:01:47 +0000</pubDate>
      
      <guid>/2011/01/web-development-best-practices/</guid>
      
        <description>&lt;h3 id=&#34;choosing-a-technology-framework&#34;&gt;Choosing a Technology Framework&lt;/h3&gt;
&lt;p&gt;Does it really matter if you use ASP.NET MVC, Struts 2, Yii, or Rails? Well it might, but for many websites these modern frameworks are just as competitive as the next. Use the stack that is most appropriate for your customer&amp;rsquo;s situation and is the best choice at the time. Since this is the real world, it will probably change a couple of years in the future.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Multiple Drag and Drop with jQuery</title>
      <link>/2010/11/multiple-drag-and-drop-with-jquery/</link>
      <pubDate>Tue, 30 Nov 2010 07:25:15 +0000</pubDate>
      
      <guid>/2010/11/multiple-drag-and-drop-with-jquery/</guid>
      
        <description>&lt;p&gt;I took inspiration from David Walsh and updated &lt;a href=&#34;https://davidwalsh.name/mootools-drag-ajax&#34;&gt;his Drag and Drop script&lt;/a&gt; to be able to handle multiple Drag and Drop sections on one page at the same time. Plus I cleaned it up a bit by adding all the functions to a JavaScript object. As jQuery is my preferred JavaScript library this code is using the jQuery version.&lt;/p&gt;
&lt;h2 id=&#34;checkout-the-demo&#34;&gt;&lt;a href=&#34;/tutorials/dragndrop.html&#34;&gt;Checkout the demo&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* create object */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DragNDropList&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;selector&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;selector&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sortInput&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jQuery&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#sort_order&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;/* store values */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;children&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;li&amp;#39;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;each&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;li&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jQuery&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;li&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;li&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;)).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;/* sortables */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sortable&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;opacity&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.7&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;submit&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;disableSelection&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* worker function */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;DragNDropList&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;submit&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sortOrder&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;children&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;li&amp;#39;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;each&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sortOrder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;jQuery&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sortInput&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;val&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sortOrder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;,&amp;#39;&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;request&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;DragNDropList&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;request&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;jQuery&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ajax&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#status&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Saved&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#status&amp;#39;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Failed to save sort order&amp;#39;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;show&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sort_order=&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sortInput&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;dataType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;post&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/site/update&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// init drag-n-drop lists
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;list1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DragNDropList&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#list1&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;list2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DragNDropList&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#list2&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      
    </item>
    
    <item>
      <title>JavaScript Documentation</title>
      <link>/2010/10/javascript-documentation/</link>
      <pubDate>Thu, 28 Oct 2010 06:06:15 +0000</pubDate>
      
      <guid>/2010/10/javascript-documentation/</guid>
      
        <description>&lt;p&gt;&lt;a href=&#34;http://www.promotejs.com/&#34;&gt;A call&lt;/a&gt; for better &lt;a href=&#34;https://developer.mozilla.org/en/JavaScript&#34;&gt;JavaScript&lt;/a&gt; documentation has gone out and I am 150% in favour of it. Most of the existing JavaScript code, tutorials, and examples available on the web are just messy mashups that work, but are not code you actually want to use in a website. Therefore I am adding the PromoteJS wordpress widget to my blog and I encourage you to do the same.&lt;/p&gt;





&lt;img src=&#34;/img/posts/promotejsh.gif&#34; alt=&#34;Learn JavaScript JS&#34;&gt;



&lt;p&gt;The world needs better JavaScript documentation.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Google Hosted jQuery</title>
      <link>/2010/09/google-hosted-jquery/</link>
      <pubDate>Thu, 09 Sep 2010 03:38:29 +0000</pubDate>
      
      <guid>/2010/09/google-hosted-jquery/</guid>
      
        <description>&lt;p&gt;Google provides hosting for many of the most popular &lt;a href=&#34;http://code.google.com/apis/libraries/&#34;&gt;JavaScript libraries&lt;/a&gt;. I&amp;rsquo;m a big fan of jQuery so I&amp;rsquo;m going to show you how to use Google&amp;rsquo;s hosted version of jQuery and thereby removing resources from your web server and speeding up site performance.&lt;/p&gt;
&lt;p&gt;Performance can be increased because your user is going to download the jQuery file from Google&amp;rsquo;s CDN network and not from your server. Also, it could be even faster if the user visited another website that also uses Google&amp;rsquo;s hosted jQuery. If that is the case then your user won&amp;rsquo;t need to download it again and will use the exactly same cached version.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>MySQL Gem on Snow Leopard</title>
      <link>/2010/08/mysql-gem-on-snow-leopard/</link>
      <pubDate>Wed, 01 Sep 2010 01:49:51 +0000</pubDate>
      
      <guid>/2010/08/mysql-gem-on-snow-leopard/</guid>
      
        <description>&lt;p&gt;Snow Leopard does not have the mysql gem installed, and my &lt;a href=&#34;/2009/09/fixing-mysql-gem-on-snow-leopard/&#34;&gt;last solution&lt;/a&gt; for installing it only work in OS X prior to 10.6.4; therefore, when you see the following error:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Building native extensions.  This could take a &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ERROR:  Error installing mysql:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ERROR: Failed to build gem native extension.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb install mysql
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkmf.rb can&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;t find header files &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Install the mysql gem with these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download and install the latest version of &lt;a href=&#34;http://www.macports.org/install.php&#34;&gt;MacPorts&lt;/a&gt; if not already installed&lt;/li&gt;
&lt;li&gt;Run the following commands to install mysql5 and the associated ruby gem&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo port install mysql5-server
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo env ARCHFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-arch x86_64&amp;#34;&lt;/span&gt; gem install mysql
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      
    </item>
    
    <item>
      <title>mod_mono.so library OS X</title>
      <link>/2010/07/mod_mono-so-library-os-x/</link>
      <pubDate>Thu, 29 Jul 2010 16:44:04 +0000</pubDate>
      
      <guid>/2010/07/mod_mono-so-library-os-x/</guid>
      
        <description>&lt;p&gt;Here are compiled versions of the &lt;a href=&#34;http://en.wikipedia.org/wiki/Mod_mono&#34;&gt;mod_mono&lt;/a&gt;.so libraries built for OS X Snow Leopard as a convenience in case you don&amp;rsquo;t want to bother compiling them.&lt;/p&gt;
&lt;p&gt;mod_mono version: 2.6.3&lt;/p&gt;
&lt;h3 id=&#34;download&#34;&gt;Download&lt;/h3&gt;
&lt;p&gt;32-bit:  &lt;a href=&#34;/post-files/mod_mono-i386.zip&#34;&gt;i386&lt;/a&gt;
64-bit:  &lt;a href=&#34;/post-files/mod_mono-x86_64.zip&#34;&gt;x86_64&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Ruby Subversion Bindings</title>
      <link>/2010/06/ruby-subversion-bindings/</link>
      <pubDate>Sun, 27 Jun 2010 05:30:01 +0000</pubDate>
      
      <guid>/2010/06/ruby-subversion-bindings/</guid>
      
        <description>&lt;p&gt;Subversion has bindings for a variety of languages: Java, Perl, Python and Ruby. Of these I am most interested in the Ruby bindings as I&amp;rsquo;m building a Rails application. Unfortunately the documentation is completely lacking and bits of it are scattered throughout the web. This is an attempt to provide the code and how-to for the most common tasks.&lt;/p&gt;
&lt;p&gt;Before we get to the code, validate you have the Ruby Subversion bindings installed correctly by running irb from a terminal:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Debugging Form Errors in symfony 1.3&#43;</title>
      <link>/2010/04/debugging-form-errors-in-symfony-1-3/</link>
      <pubDate>Thu, 15 Apr 2010 16:19:13 +0000</pubDate>
      
      <guid>/2010/04/debugging-form-errors-in-symfony-1-3/</guid>
      
        <description>&lt;p&gt;Symfony 1.3 (or symfony 1.4) provides an incredibly helpful feature to help debug forms. This new feature is included in the developer toolbar and shows valuable information about the forms on the page. To access the detailed form information, click on the &lt;em&gt;view&lt;/em&gt; button, click on the template or partial that the form is in, and then click to expand the form. It lists each form widget and if any errors for a given widget exist they are shown right under it. Errors are also highlighted to make them easy to spot.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>What Will Web Development Look Like in 5 Years</title>
      <link>/2010/03/what-will-web-development-look-like-in-5-years/</link>
      <pubDate>Wed, 24 Mar 2010 16:40:45 +0000</pubDate>
      
      <guid>/2010/03/what-will-web-development-look-like-in-5-years/</guid>
      
        <description>&lt;p&gt;Developing applications for the web has changed significantly over the last 5 years. Since 2005 the term AJAX has been coined, Ruby on Rails is now an open source web application framework, jQuery was created and has subsequently revolutionized JavaScript development, and now HTML5 is the top buzzword of the day. I believe the next 5 years will hold just as many improvements for web developers.&lt;/p&gt;
&lt;p&gt;I foresee a new framework will be created to make developing fully interactive AJAX applications as easy as it is to write current MVC applications. Current frameworks like Ruby on Rails and Symfony provide everything you need to develop a modern application without having to build plumbing infrastructure; however, they do not provide nice components for interactive applications. In addition to a robust server core, this new framework will have a client side JavaScript component that simplifies the process of building interactive web 2.0 applications. Some critical components would be:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Bash Basics</title>
      <link>/2010/03/bash-basics/</link>
      <pubDate>Mon, 15 Mar 2010 20:47:33 +0000</pubDate>
      
      <guid>/2010/03/bash-basics/</guid>
      
        <description>&lt;p&gt;Bash is a shell scripting language included on most Linux and Mac computers. It&amp;rsquo;s useful for writing small scripts that don&amp;rsquo;t require another software language to be installed and are immediately portable. Good places to use bash scripts are when you want to write a cronjob, backup some files, or run an update task. Here are the basics to get you started.&lt;/p&gt;
&lt;p&gt;Start your script with She-Bang header:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Variables are assigned by a key-value pairing:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>HTTP Header to Force Browser Download</title>
      <link>/2010/03/http-header-to-force-browser-download/</link>
      <pubDate>Mon, 08 Mar 2010 15:12:45 +0000</pubDate>
      
      <guid>/2010/03/http-header-to-force-browser-download/</guid>
      
        <description>&lt;p&gt;A content disposition header can be used to tell web browsers to ask the user where they want to save the file (and download it) instead of actually opening the file in a browser tab/window. Very handy if you want to have a &lt;strong&gt;download&lt;/strong&gt; button.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Content-Disposition: attachment; filename=&amp;quot;filename.mp3&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Tested in: Firefox, Safari, IE, Opera, and Google Chrome&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>PHP Session Sharing Among Subdomains</title>
      <link>/2010/03/php-session-sharing-among-subdomains/</link>
      <pubDate>Wed, 03 Mar 2010 01:14:50 +0000</pubDate>
      
      <guid>/2010/03/php-session-sharing-among-subdomains/</guid>
      
        <description>&lt;p&gt;PHP supports sharing sessions among subdomains which can be very useful for sharing cookies and sessions among multiple web applications.&lt;/p&gt;
&lt;p&gt;I wanted my users to remain logged in while navigating from &lt;strong&gt;&lt;a href=&#34;https://www.example.com&#34;&gt;www.example.com&lt;/a&gt;&lt;/strong&gt; to &lt;strong&gt;site1.example.com&lt;/strong&gt;. By default PHP will treat these domains as two separate sites and users would have to login to each subdomain.&lt;/p&gt;
&lt;p&gt;All you have to do is to either set the following setting in your php.ini file:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Validating a Facebook Session Within an iFrame</title>
      <link>/2010/02/validating-a-facebook-session-within-an-iframe/</link>
      <pubDate>Thu, 04 Feb 2010 02:18:51 +0000</pubDate>
      
      <guid>/2010/02/validating-a-facebook-session-within-an-iframe/</guid>
      
        <description>&lt;p&gt;Facebook takes security seriously and there are many many things a Facebook app cannot do. Sometimes it is necessary to create an iFrame and load the page in to work around Facebook&amp;rsquo;s security model. This example shows how you can continue to use the $facebook-&amp;gt;require_login() method while you are inside an iFrame.&lt;/p&gt;
&lt;p&gt;Each Facebook request to your application contains a number of parameters that you can use to authenticate if the request really came from Facebook and if the user is actually logged in. These parameters looks like this:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Building for Mobile with Device Orientation</title>
      <link>/2010/01/building-for-mobile-with-device-orientation/</link>
      <pubDate>Tue, 26 Jan 2010 16:54:29 +0000</pubDate>
      
      <guid>/2010/01/building-for-mobile-with-device-orientation/</guid>
      
        <description>&lt;p&gt;Mozilla Firefox 3.5 and Firefox for Mobile 1.0 (Fennec) both have support for modifying a web applications look based on screen dimensions and current orientation. These abilities give web developers the power to build better web applications for mobile devices and the ability to optimize the browsing experience when screen space is constrained.&lt;/p&gt;
&lt;h3 id=&#34;css-orientation-properties&#34;&gt;CSS Orientation Properties&lt;/h3&gt;
&lt;p&gt;Web applications look and feel is defined by a CSS file, so therefore the Firefox developers made it super easy to tie current orientation and screen dimensions into which CSS file to load.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>The Cost of Endorsing H.264</title>
      <link>/2010/01/the-cost-of-endorsing-h-264/</link>
      <pubDate>Sat, 23 Jan 2010 18:20:52 +0000</pubDate>
      
      <guid>/2010/01/the-cost-of-endorsing-h-264/</guid>
      
        <description>&lt;p&gt;As you&amp;rsquo;ve probably heard, both &lt;a href=&#34;http://www.youtube.com/html5&#34;&gt;YouTube&lt;/a&gt; and &lt;a href=&#34;http://www.vimeo.com/blog:268&#34;&gt;Vimeo&lt;/a&gt; have released beta support to their massively popular websites to play videos using the &lt;a href=&#34;/2009/07/importance-of-the-html-video-tag/&#34;&gt;HTML5 video tag&lt;/a&gt; instead of Flash. While I am glad the video sites are &lt;strong&gt;finally&lt;/strong&gt; switching to the native HTML video tag, I am perplexed why they have gone with the non-free option.&lt;/p&gt;
&lt;p&gt;Firefox, Safari, Google Chrome, and soon Opera all support the HTML5 video tag with the ability to play Ogg Theora encoded videos (except Safari). On the other hand, H.264 is only supported by Google Chrome and Safari. Both of these formats do the same thing, they specify a compression standard that allows for efficient playback at relatively small file sizes. There are a number of technical differences, but generally, they &lt;a href=&#34;http://people.xiph.org/~greg/video/ytcompare/comparison.html&#34;&gt;preform relatively the same&lt;/a&gt;. The big difference between the two is that Ogg Theora is royalty free and available for anybody to use, while H.264 is encumbered by patents held by the MPEG LA association. This same organization will charge anybody who uses it a &lt;a href=&#34;http://www.streaminglearningcenter.com/articles/h264-royalties-what-you-need-to-know.html&#34;&gt;hefty royalty fee&lt;/a&gt; starting in 2011.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Facebook vs You!</title>
      <link>/2009/12/facebook-vs-you/</link>
      <pubDate>Wed, 23 Dec 2009 06:31:49 +0000</pubDate>
      
      <guid>/2009/12/facebook-vs-you/</guid>
      
        <description>&lt;p&gt;Have you had the&amp;hellip; how should I describe it&amp;hellip; &lt;strong&gt;experience&lt;/strong&gt; of writing a Facebook application? No? OK, here&amp;rsquo;s an introduction to what you can expect.&lt;/p&gt;
&lt;p&gt;When developing an application you must learn Rule #1 &lt;strong&gt;Facebook is the gatekeeper&lt;/strong&gt;. Everything you do, be it HTML, CSS or JavaScript, is restricted by Facebook. Only the commands, functions, CSS properties, HTML tags etc. that Facebook allows are permissible. If you have an error in your HTML such as an unclosed tag or if you try to use a CSS property that does not exist, Facebook will render a very nice message saying you made an error.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>UpcomingHoliday.com Now with Geolocation</title>
      <link>/2009/12/upcomingholiday-com-now-with-geolocation/</link>
      <pubDate>Thu, 17 Dec 2009 06:27:40 +0000</pubDate>
      
      <guid>/2009/12/upcomingholiday-com-now-with-geolocation/</guid>
      
        <description>&lt;p&gt;UpcomingHoliday.com has been updated and now includes &lt;a href=&#34;http://dev.w3.org/geo/api/spec-source.html&#34;&gt;geolocation&lt;/a&gt; support. If your browser supports it your country should automatically find and select your country. If not, it will fall back to IP based country lookup. Geolocation is a HTML 5 feature that is supported by Safari on the iPhone 3.0 OS, Firefox 3.5 and Google Chrome.&lt;/p&gt;
&lt;p&gt;UpcomingHoliday.com is an application that tells you what and when your &lt;a href=&#34;http://dev.w3.org/geo/api/spec-source.html&#34;&gt;next federal holiday&lt;/a&gt; is. Currently it&amp;rsquo;s available for people in: Australia, Canada, France, Germany, India, Nigeria, United Kingdom and United States.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Quality Software @ Thirdi</title>
      <link>/2009/12/quality-software-thirdi/</link>
      <pubDate>Tue, 08 Dec 2009 04:55:09 +0000</pubDate>
      
      <guid>/2009/12/quality-software-thirdi/</guid>
      
        <description>&lt;p&gt;I work at &lt;a onclick=&#34;javascript:pageTracker._trackPageview(&#39;/outbound/article/http://www.thirdi.com&#39;);&#34; href=&#34;http://www.thirdi.com/&#34;&gt;Thirdi Software&lt;/a&gt;, and one of the initiatives I started was a &lt;strong&gt;Quality Software @ Thirdi&lt;/strong&gt; email newsletter and series of blog posts highlighting quality solutions to software problems. It&amp;rsquo;s mostly targeted at developers but there&amp;rsquo;s also some insights to be had for the quality assurance team and for project managers.&lt;/p&gt;
&lt;p&gt;The posts were originally posted on the company blog and reproduced here for archival purposes. They touch on a lot of basic information for software developers including software design, upcoming technologies and useful tips to make your life easier.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Unit Tests vs. Functional Tests</title>
      <link>/quality-software/unit-tests-vs-functional-tests/</link>
      <pubDate>Fri, 04 Dec 2009 05:19:17 +0000</pubDate>
      
      <guid>/quality-software/unit-tests-vs-functional-tests/</guid>
      
        <description>&lt;h2 id=&#34;unit-tests&#34;&gt;Unit Tests&lt;/h2&gt;
&lt;p&gt;Unit tests are low level tests that measure the input and output of a single function or class. Tests are written in a completely isolated environment where all the input values are specified and the class being tested does not communicate with other parts of the system. Each unit test has its output values compared against the expected results. Tests are written from a developers perspective who knows the details of the system.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Mega Drop-Down Navigation Menus</title>
      <link>/quality-software/mega-drop-down-navigation-menus/</link>
      <pubDate>Fri, 04 Dec 2009 05:14:26 +0000</pubDate>
      
      <guid>/quality-software/mega-drop-down-navigation-menus/</guid>
      
        <description>&lt;p&gt;Jakob Nielsen recommends using &lt;a href=&#34;http://www.useit.com/alertbox/mega-dropdown-menus.html&#34;&gt;mega drop-down navigation menus&lt;/a&gt; over regular link-only drop down menus because of brightetter usability.&lt;/p&gt;
&lt;p&gt;His reasons are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Easier to present all the links without scrolling, instead of hiding them&lt;/li&gt;
&lt;li&gt;Can easy group related items together&lt;/li&gt;
&lt;li&gt;Illustrations can help explain links&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mega drop down menus may be the appropriate solution to use on a clients website if they have more than a few navigation links.&lt;/p&gt;





&lt;img src=&#34;/img/posts/mega-dropdown-menu-foodnetwork-300x189.gif&#34; alt=&#34;mega-dropdown-menu-foodnetwork-300x189&#34;&gt;



&lt;p&gt;What do you think?&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>PHP 5.3</title>
      <link>/quality-software/php-5-3/</link>
      <pubDate>Wed, 02 Dec 2009 05:45:15 +0000</pubDate>
      
      <guid>/quality-software/php-5-3/</guid>
      
        <description>&lt;p&gt;&lt;a href=&#34;http://www.php.net/releases/5_3_0.php&#34;&gt;PHP 5.3.0&lt;/a&gt; was release one month ago on June 30th with a couple of interesting new language features; some will make your life a bit easier, and some you will need to be aware of.&lt;/p&gt;
&lt;p&gt;A brief summary of added features:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://php.net/namespaces&#34;&gt;Namespace support&lt;/a&gt;, &lt;a href=&#34;http://php.net/lsb&#34;&gt;late static bindings&lt;/a&gt;, &lt;a href=&#34;http://php.net/goto&#34;&gt;jump label&lt;/a&gt; (limited goto), &lt;a href=&#34;http://php.net/closures&#34;&gt;native closures&lt;/a&gt;, native PHP archives (phar), &lt;a href=&#34;http://php.net/gc_enable&#34;&gt;garbage collection&lt;/a&gt; for circular references, vastly improved Windows support, persistent connections with mysqli, sqlite3, fileinfo as a replacement for mime_magic for better MIME support, &lt;a href=&#34;http://php.net/ternary&#34;&gt;ternary shortcut&lt;/a&gt; and the internationalization extension. Of these I believe the most interesting features are native closures, the ternary shortcut, and namespace support.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Factory Method Pattern</title>
      <link>/quality-software/factory-method-pattern/</link>
      <pubDate>Tue, 01 Dec 2009 04:52:59 +0000</pubDate>
      
      <guid>/quality-software/factory-method-pattern/</guid>
      
        <description>&lt;p&gt;&lt;a href=&#34;http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29&#34;&gt;Software Design Patterns&lt;/a&gt; are solutions to common problems that can be applied when developing software. They are well known and understood solutions to regular programming problems.&lt;/p&gt;
&lt;p&gt;The factory method pattern is a design pattern for creating objects. The factory is responsible for creating objects, that is, using the &lt;strong&gt;new&lt;/strong&gt; keyword. Every time you create objects of a certain type you delegate the task to the factory.&lt;/p&gt;
&lt;p&gt;Lets say we have a system that can invite contacts from different email providers. The factory code would look like something like this in PHP:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Symfony Checklist</title>
      <link>/quality-software/symfony-checklist/</link>
      <pubDate>Tue, 01 Dec 2009 04:38:42 +0000</pubDate>
      
      <guid>/quality-software/symfony-checklist/</guid>
      
        <description>&lt;p&gt;Symfony check is a great website with a list of items that should be checked off before any Symfony based web application is launched. Doing those items will make the website more secure, have a better customer facing design, and be ready to log errors.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://symfony-check.org/&#34;&gt;http://symfony-check.org&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Quality Software</title>
      <link>/quality-software/</link>
      <pubDate>Tue, 01 Dec 2009 04:26:20 +0000</pubDate>
      
      <guid>/quality-software/</guid>
      
        <description>&lt;p&gt;Early on in my career, when I worked at Thirdi Software, one of the initiatives I started was a &lt;strong&gt;Quality Software @ Thirdi&lt;/strong&gt; email newsletter and series of blog posts highlighting quality solutions to software problems. It&amp;rsquo;s mostly targeted at developers but there&amp;rsquo;s also some insights to be had for the quality assurance team and for project managers.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;/quality-software/symfony-checklist/&#34;&gt;Symfony Checklist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/quality-software/factory-method-pattern/&#34;&gt;Factory Method Pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/quality-software/php-5-3/&#34;&gt;PHP 5.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/quality-software/mega-drop-down-navigation-menus/&#34;&gt;Mega Drop-Down Navigation Menus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/quality-software/unit-tests-vs-functional-tests/&#34;&gt;Unit Tests vs Functional Tests&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      
    </item>
    
    <item>
      <title>What is Quality Software</title>
      <link>/2009/11/what-is-quality-software/</link>
      <pubDate>Tue, 24 Nov 2009 06:49:31 +0000</pubDate>
      
      <guid>/2009/11/what-is-quality-software/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;m a software developer and one of my major focuses and motivations is to develop quality software. I refuse to build software that is hacky, &lt;a href=&#34;http://thedailywtf.com/&#34;&gt;down right crummy&lt;/a&gt; or falls over under a bit of stress. Yes I live in the real world and sometimes deadlines demand shortcuts, but most of the time I&amp;rsquo;m very proud of the software I create.&lt;/p&gt;
&lt;p&gt;So what are the visible user centred differences between high and low quality software?&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using Ubuntu for Time Machine in Snow Leopard</title>
      <link>/2009/11/using-ubuntu-for-time-machine-in-snow-leopard/</link>
      <pubDate>Sun, 22 Nov 2009 16:47:41 +0000</pubDate>
      
      <guid>/2009/11/using-ubuntu-for-time-machine-in-snow-leopard/</guid>
      
        <description>&lt;p&gt;Over a year ago Matthias Kretschmann posted an excellent guide on how to use &lt;a href=&#34;http://www.kremalicious.com/2008/06/ubuntu-as-mac-file-server-and-time-machine-volume/&#34;&gt;Ubuntu as a Time Machine&lt;/a&gt; backup server. The guide is quite well written all the configuration steps worked, but I received &lt;strong&gt;Error 45 creating backup disk image&lt;/strong&gt; when Time Machine ran. Some more research revealed that this is because of changes to the sparse bundle image in Snow Leopard.&lt;/p&gt;
&lt;p&gt;To make it work I had to create my own sparse bundle with a plist file in it to associate my MacBook&amp;rsquo;s unique id with the time machine image. Leopard and earlier releases of OS X would create a sparse disk image with the name from the network cards mac address, but in Snow Leopard it uses the computer Hardware UUID. I imagine this is because notebooks can have more than one mac address, one for wired and one for wireless.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Learning WebGL</title>
      <link>/2009/11/learning-webgl/</link>
      <pubDate>Sun, 15 Nov 2009 21:22:15 +0000</pubDate>
      
      <guid>/2009/11/learning-webgl/</guid>
      
        <description>&lt;p&gt;If you&amp;rsquo;re interested in programming graphics on the web I recommend subscribing to &lt;a href=&#34;http://planet-webgl.org/&#34;&gt;Planet WebGL&lt;/a&gt;; it has a lot of great tutorials and instructional material for learning how to program graphics in a web environment.&lt;/p&gt;
&lt;p&gt;WebGL is technically a JavaScript binding to OpenGL ES 2.0. If you already know OpenGL ES and JavaScript, you should be able to pick it up pretty quickly. If you know JavaScript but not OpenGL and are in a web development career, I encourage you to look into WebGL because it could be one key component of interactive web applications in the future.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Click-to-Run Software</title>
      <link>/2009/11/click-to-run-software/</link>
      <pubDate>Sat, 07 Nov 2009 04:14:45 +0000</pubDate>
      
      <guid>/2009/11/click-to-run-software/</guid>
      
        <description>&lt;p&gt;With Microsoft launching a &lt;a href=&#34;http://blogs.technet.com/office2010/archive/2009/11/06/click-to-run-delivering-office-in-the-21st-century.aspx&#34;&gt;click-to-run&lt;/a&gt; version of Microsoft Office 2010, I can&amp;rsquo;t help but think what a great idea it is. Many applications are moving to the web and I do see the web as the future of software development, but I think there is still a need for traditional applications written in a compiled language.&lt;/p&gt;
&lt;p&gt;Click-to-run works by a user clicking on a website link, which then runs an small program to download the latest version of the application. When that&amp;rsquo;s completed the application starts up for the user. With no install process and no worrying if an existing version of Office is already installed, it&amp;rsquo;s quite a nice scenario for the user.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>WWW vs non-WWW Domain Names</title>
      <link>/2009/11/www-vs-non-www-domain-names/</link>
      <pubDate>Wed, 04 Nov 2009 02:41:24 +0000</pubDate>
      
      <guid>/2009/11/www-vs-non-www-domain-names/</guid>
      
        <description>&lt;p&gt;A fairly common website optimization that a lot of web 2.0 dot com companies are doing is to remove the leading &lt;strong&gt;www&lt;/strong&gt; from the domain name. Removing the legacy www leaves you with a domain like &lt;a href=&#34;https://nginx.org/&#34;&gt;https://nginx.org/&lt;/a&gt;. Ok so Nginx has a &lt;strong&gt;modern&lt;/strong&gt; domain name but should you switch also?&lt;/p&gt;
&lt;h3 id=&#34;reasons-for-non-www&#34;&gt;Reasons for non-WWW&lt;/h3&gt;
&lt;p&gt;First, the domain name is more concise, easier to remember and just looks better. One caveat: you will need to setup a 301 redirect for requests with the three w&amp;rsquo;s to go to the non www version (see below).&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Intro to Objects in JavaScript</title>
      <link>/2009/10/intro-to-objects-in-javascript/</link>
      <pubDate>Wed, 21 Oct 2009 06:23:03 +0000</pubDate>
      
      <guid>/2009/10/intro-to-objects-in-javascript/</guid>
      
        <description>&lt;p&gt;Despite what you might think, JavaScript supports programming in full object oriented style including inheritance, encapsulation and polymorphism. But before we dive into all those topics I&amp;rsquo;m going to start with the basics and demonstrate how to create and use a simple JavaScript object.&lt;/p&gt;
&lt;p&gt;Lets say you have a web application that needs to track how long an AJAX request took. If you were writing it in Ruby, PHP or Python you&amp;rsquo;d have a timer object that you can start() and stop() and a seconds() method to get the number of seconds that passed between calling the first two methods.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Firebug: The JavaScript Debugger</title>
      <link>/2009/10/firebug-the-javascript-debugger/</link>
      <pubDate>Mon, 12 Oct 2009 05:08:26 +0000</pubDate>
      
      <guid>/2009/10/firebug-the-javascript-debugger/</guid>
      
        <description>&lt;p&gt;JavaScript is a core language of many web developers and a necessary component for any modern web application; therefore having an excellent JavaScript debugger and knowing how to use it effectively is key to fixing bugs faster. Fixing bugs faster also makes you a happier software developer!&lt;/p&gt;
&lt;p&gt;I recommend &lt;a href=&#34;https://getfirebug.com/&#34;&gt;Firebug&lt;/a&gt;, which is a JavaScript debugger, a real-time HTML, CSS, DOM, and JavaScript editor, and a network monitor.&lt;/p&gt;
&lt;h1 id=&#34;logging&#34;&gt;Logging&lt;/h1&gt;
&lt;p&gt;One of the most useful features are the &lt;a href=&#34;https://getfirebug.com/console.html&#34;&gt;logging functions&lt;/a&gt; through console.log which can simply be used to output a string or object:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Fall 2009 Web Browser Outlook</title>
      <link>/2009/09/fall-2009-web-browser-outlook/</link>
      <pubDate>Sun, 27 Sep 2009 23:31:16 +0000</pubDate>
      
      <guid>/2009/09/fall-2009-web-browser-outlook/</guid>
      
        <description>&lt;p&gt;The names are familiar: Firefox, Google Chrome and Safari. These relatively new browsers have been shaking the foundations of Internet Explorers complete victory over Netscape. These new browser are implementing fresh ideas and breaking out of the crusty browsers of the early 21st century. With the second browser wars in full swing, lets see where things stand and what&amp;rsquo;s coming.&lt;/p&gt;
&lt;h3 id=&#34;mozilla-firefox-36&#34;&gt;Mozilla Firefox 3.6&lt;/h3&gt;
&lt;p&gt;The Firefox team is focusing on startup performance, JavaScript performance, lightweight themes, and a few new features for developers. &lt;a href=&#34;/2009/08/upcoming-web-browser-mozilla-firefox-3-6/&#34;&gt;Firefox 3.6&lt;/a&gt; is expected to arrive Nov 2009.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>WebGL Coming in Firefox 3.7</title>
      <link>/2009/09/webgl-coming-in-firefox-3-7/</link>
      <pubDate>Tue, 22 Sep 2009 01:44:21 +0000</pubDate>
      
      <guid>/2009/09/webgl-coming-in-firefox-3-7/</guid>
      
        <description>&lt;p&gt;Vladimir Vukićević, the pioneer of bringing the well known OpenGL standard to the web, has just blogged using &lt;a href=&#34;http://blog.vlad1.com/2009/09/21/webgl-samples/&#34;&gt;Firefox to render Spore creatures&lt;/a&gt;. Check it out, it&amp;rsquo;s a pretty impressive demo of this upcoming web standard.&lt;/p&gt;
&lt;p&gt;Development on what would become WebGL started back in &lt;a href=&#34;http://blog.vlad1.com/2007/11/26/canvas-3d-gl-power-web-style/&#34;&gt;2007 with Canvas 3D&lt;/a&gt; as an extension for Mozilla Firefox 3.0. Since then it has grown from a single project to an open web standard through the &lt;a href=&#34;http://www.khronos.org/news/press/releases/khronos-webgl-initiative-hardware-accelerated-3d-graphics-internet/&#34;&gt;Khronos standards group&lt;/a&gt;. The standard is currently under development with a target release date of &lt;a href=&#34;http://www.khronos.org/news/press/releases/khronos-webgl-initiative-hardware-accelerated-3d-graphics-internet/&#34;&gt;first half 2010&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Software Complexity</title>
      <link>/2009/09/software-complexity/</link>
      <pubDate>Tue, 15 Sep 2009 05:39:34 +0000</pubDate>
      
      <guid>/2009/09/software-complexity/</guid>
      
        <description>&lt;p&gt;Have you ever worked on a software project where you had no idea what would happen to other parts of the system if you made a code change? I have, but I have been able to ask developers on my team that know the system better than I do.&lt;/p&gt;
&lt;p&gt;If it&amp;rsquo;s a larger software project and nobody on the team knows what a change would do, then it would be fair to say the software is overly complex and making forward progress is like wading through a swamp. Software projects, especially larger software projects absolutely must have code that is understandable. When designing software applications, a key component to the architecture is managing complexity to a workable level.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Fixing MySQL Gem on Snow Leopard</title>
      <link>/2009/09/fixing-mysql-gem-on-snow-leopard/</link>
      <pubDate>Sun, 06 Sep 2009 22:14:36 +0000</pubDate>
      
      <guid>/2009/09/fixing-mysql-gem-on-snow-leopard/</guid>
      
        <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE: See my latest post for a &lt;a href=&#34;/2010/08/mysql-gem-on-snow-leopard/&#34;&gt;solution for OS X 10.6.4&lt;/a&gt; and later&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A fresh Snow Leopard (OS X 10.6) install does not have the mysql gem installed, and installing it fails because of missing header files:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Building native extensions.  This could take a &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ERROR:  Error installing mysql:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ERROR: Failed to build gem native extension.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb install mysql
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkmf.rb can&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;t find header files &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To correctly install the mysql gem:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Install Git on Snow Leopard</title>
      <link>/2009/09/install-git-on-snow-leopard/</link>
      <pubDate>Sat, 05 Sep 2009 01:23:22 +0000</pubDate>
      
      <guid>/2009/09/install-git-on-snow-leopard/</guid>
      
        <description>&lt;p&gt;To install git on the latest version of OS X (10.6), use the git-1.6.4.2-intel-leopard.dmg (or later) package from &lt;a href=&#34;http://code.google.com/p/git-osx-installer/&#34;&gt;git-osx-installer&lt;/a&gt;. So far it works fine for me on Snow Leopard.&lt;/p&gt;
&lt;p&gt;I like how OS X comes with a large number of open source packages such as PHP, Apache, Vim, Subversion and Ruby on Rails; however, I&amp;rsquo;d really like to see Apple add Git to the list.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Upcoming Web Browser: Google Chrome 3</title>
      <link>/2009/09/upcoming-web-browser-google-chrome-3/</link>
      <pubDate>Fri, 04 Sep 2009 01:34:58 +0000</pubDate>
      
      <guid>/2009/09/upcoming-web-browser-google-chrome-3/</guid>
      
        <description>&lt;p&gt;
























&lt;img
  
  sizes=&#34;(min-width: 35em) 720px, 100vw&#34;
  srcset=&#39;
  
    /img/posts/google-chrome-3.0.195.10_hu_8117e27b11304b47.jpg 500w
  
  
    , /img/posts/google-chrome-3.0.195.10_hu_4e0151a32371419d.jpg 800w
  
  &#39;
  
    src=&#34;/img/posts/google-chrome-3.0.195.10.jpg&#34;
  
  
  class=&#34;right&#34;
  alt=&#34;Database Schema&#34;&gt;



The beta version of Chrome has been available for a few months now with a faster Javascript engine, a better &lt;a href=&#34;http://chrome.blogspot.com/2009/06/get-to-where-youre-going-faster.html&#34;&gt;new tab look&lt;/a&gt;, and the &lt;a href=&#34;http://chrome.blogspot.com/2009/06/get-to-know-omnibox.html&#34;&gt;Omnibox&lt;/a&gt; (an improved location bar).&lt;/p&gt;
&lt;p&gt;What key enhancements has Google added for developers? Well Chrome adds support for new features in WebKit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=26587&#34;&gt;JSON.parse&lt;/a&gt; for securely parsing json data&lt;/li&gt;
&lt;li&gt;HTML 5 &lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=21605&#34;&gt;hashchange event&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Canvas support for the &lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=20570&#34;&gt;HTML 5 canvas text APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=26012&#34;&gt;-webkit-border-image&lt;/a&gt; CSS3 attribute&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=20879&#34;&gt;HTML 5 channel messaging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=25554&#34;&gt;HTML 5 Input element types&lt;/a&gt; for Text Fields (tel, url, email, and number)&lt;/li&gt;
&lt;li&gt;HTML 5 Forms &lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=25552&#34;&gt;pattern&lt;/a&gt; and &lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=25551&#34;&gt;required&lt;/a&gt; attributes&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=26262&#34;&gt;HTML 5 draggable&lt;/a&gt; element implementing the &lt;a href=&#34;http://www.whatwg.org/specs/web-apps/current-work/#the-draggable-attribute&#34;&gt;current spec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;JavaScript &lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=15897&#34;&gt;getBoundingClientRect and getClientRects&lt;/a&gt; to find the position of an element&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://news.cnet.com/8301-17939_109-10250958-2.html&#34;&gt;HTML 5 Video tag&lt;/a&gt; with support for Theora and H.264 video codecs&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.whatwg.org/specs/web-workers/current-work/&#34;&gt;HTML 5 Web workers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For users, Chrome add support for custom &lt;a href=&#34;https://tools.google.com/chrome/intl/en/themes/index.html&#34;&gt;themes&lt;/a&gt;, similar to &lt;a href=&#34;http://www.getpersonas.com/gallery/All/Popular&#34;&gt;Firefox&amp;rsquo;s personas&lt;/a&gt; but is more complete by changing the look of the toolbar and the browser pages (new tab page, etc.). See the &lt;a href=&#34;http://chrome.blogspot.com/2009/08/new-beta-why-slow-down-when-you-can.html&#34;&gt;Google Chrome blog&lt;/a&gt; for more info.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Upcoming Web Browser: Safari 5?</title>
      <link>/2009/08/upcoming-web-browser-safari-5/</link>
      <pubDate>Sun, 30 Aug 2009 16:51:23 +0000</pubDate>
      
      <guid>/2009/08/upcoming-web-browser-safari-5/</guid>
      
        <description>&lt;p&gt;What does Apple have on the horizon for Safari as version 4 was &lt;a href=&#34;http://www.macnn.com/articles/09/06/08/safari.4.official.release/&#34;&gt;just released&lt;/a&gt; 2 months ago (June, 2009)? So far we have not heard anything and that isn&amp;rsquo;t a huge surprise, Apple is a very secrative company. The good news is that Safari is based on the open source WebKit rendering engine, so we can check out the list of feature enhancements added to WebKit since Safari 4 released with AppleWebKit/531.9.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Upcoming Web Browser: Opera 10</title>
      <link>/2009/08/upcoming-web-browser-opera-10/</link>
      <pubDate>Thu, 27 Aug 2009 02:07:11 +0000</pubDate>
      
      <guid>/2009/08/upcoming-web-browser-opera-10/</guid>
      
        <description>&lt;p&gt;Opera 10 is set to be released in a few days with many CSS and JavaScript improvements, a massively updated presto rendering engine and a new visual look by well-known designer &lt;a href=&#34;http://twitter.com/hicksdesign&#34;&gt;Jon Hicks&lt;/a&gt;. The client also now automatically updates itself, like Google Chrome.&lt;/p&gt;

























&lt;img
  
  sizes=&#34;(min-width: 35em) 720px, 100vw&#34;
  srcset=&#39;
  
    /img/posts/opera-10-speed-dial_hu_279b8519663a1919.jpg 500w
  
  
  &#39;
  
    src=&#34;/img/posts/opera-10-speed-dial.jpg&#34;
  
  
  class=&#34;centre small&#34;
  alt=&#34;Customizable Speed Dial in Opera 10&#34;&gt;



&lt;p&gt;The vastly improved web standards in the &lt;a href=&#34;http://dev.opera.com/articles/view/standards-support-in-opera-10-beta/&#34;&gt;Presto 2.2 rendering engine&lt;/a&gt; include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSS3 web fonts with the &lt;code&gt;@font-face&lt;/code&gt; attribute. &lt;a href=&#34;http://devfiles.myopera.com/articles/695/webfonts.html&#34;&gt;Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Transparency with RGBA and HSLA: &lt;code&gt;hsla(240, 100%, 50%, 0.5);&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;http://www.w3.org/TR/selectors-api/&#34;&gt;Query Selectors API&lt;/a&gt; that is standard in Firefox, IE, and Safari: &lt;code&gt;document.querySelectorAll(&amp;quot;.alert&amp;quot;);&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Web fonts in SVG&lt;/li&gt;
&lt;li&gt;Fully passing the &lt;a href=&#34;http://acid3.acidtests.org/&#34;&gt;ACID 3 test&lt;/a&gt; with 100/100&lt;/li&gt;
&lt;li&gt;Inline spell checker (very handy)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.opera.com/browser/next/&#34;&gt;Many other features&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It looks like this release is absolutely packed with new features and improvements and in many ways is catching up to the major players and surpassing them in other ways.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Upcoming Web Browser: Internet Explorer 9?</title>
      <link>/2009/08/upcoming-web-browser-internet-explorer-9/</link>
      <pubDate>Sat, 22 Aug 2009 17:00:53 +0000</pubDate>
      
      <guid>/2009/08/upcoming-web-browser-internet-explorer-9/</guid>
      
        <description>&lt;p&gt;Internet Explorer 9 is coming. The number 9 is a guess, but Microsoft is not getting left behind in the web browser scene again. With Internet Explorer 8 being released 5 months ago in March 2009, we have little information so far as to what is going to be included in the next release. We knew two things Microsoft is doing, they are asking customers for feedback, and they are investigating &lt;a href=&#34;http://www.smashingmagazine.com/2009/07/16/html5-and-the-future-of-the-web/&#34;&gt;HTML 5 features&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Upcoming Web Browser: Mozilla Firefox 3.6</title>
      <link>/2009/08/upcoming-web-browser-mozilla-firefox-3-6/</link>
      <pubDate>Thu, 20 Aug 2009 02:47:06 +0000</pubDate>
      
      <guid>/2009/08/upcoming-web-browser-mozilla-firefox-3-6/</guid>
      
        <description>&lt;p&gt;With Mozilla Firefox 3.6 the team is shifting to a &lt;a href=&#34;https://wiki.mozilla.org/Firefox/Goals/2009Q3&#34;&gt;shorter release schedule&lt;/a&gt;, so enhancements reach users sooner. It&amp;rsquo;s quite likely we&amp;rsquo;ll see more incremental releases, including Firefox 3.6 which is scheduled for release just six months after Firefox 3.5.&lt;/p&gt;
&lt;p&gt;The next version of Firefox will be faster because of improvements to the &lt;a href=&#34;https://arstechnica.com/open-source/news/2009/08/firefox-36-a1-new-css-features-javascript-speed-boost.ars&#34;&gt;TraceMonkey JavaScript engine&lt;/a&gt; and because of a focus on &lt;a href=&#34;https://wiki.mozilla.org/Firefox/Projects/Startup_Time_Improvements&#34;&gt;improving startup time&lt;/a&gt; performance. An asynchronous location bar and improved scrolling on Windows should also provide a noticeable speed improvement. The next version will feature the Gecko 1.9.2 rendering engine.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Browser Notifications with Yip</title>
      <link>/2009/08/browser-notifications-with-yip/</link>
      <pubDate>Mon, 10 Aug 2009 02:51:35 +0000</pubDate>
      
      <guid>/2009/08/browser-notifications-with-yip/</guid>
      
        <description>&lt;img
  
  sizes=&#34;(min-width: 35em) 720px, 100vw&#34;
  srcset=&#39;
  
  
  &#39;
  
    src=&#34;/img/posts/yip-icon.jpg&#34;
  
  
  class=&#34;right&#34;
  alt=&#34;Database Schema&#34;&gt;



&lt;p&gt;Ever wanted your web application to be able to show notifications even if the user may be in another browser tab or application? Now you can!&lt;/p&gt;
&lt;p&gt;The relatively new &lt;a href=&#34;http://abcdefu.wordpress.com/2009/06/09/introducing-yip-an-unified-notification-system-for-the-web/&#34;&gt;Yip extension&lt;/a&gt; for Firefox adds notification functionality. This is not a small JavaScript notification that pops up in the browser tab, but one that integrates directly with the users Operating System.&lt;/p&gt;
&lt;p&gt;Yip uses &lt;a href=&#34;https://www.markshuttleworth.com/archives/265&#34;&gt;libnotify/notify-osd&lt;/a&gt; on Ubuntu Linux, &lt;a href=&#34;http://growl.info/&#34;&gt;Growl&lt;/a&gt; on Mac, and &lt;a href=&#34;http://www.fullphat.net/&#34;&gt;Snarl&lt;/a&gt; or &lt;a href=&#34;http://growlforwindows.com/gfw/&#34;&gt;Growl for Windows&lt;/a&gt; on Windows. If none of these notification applications are installed, it will use Firefox&amp;rsquo;s simple and not as pretty notification system. Ubuntu Linux users have notify-osd installed by default, Growl is popular with Mac users, yet Windows users probably don&amp;rsquo;t have Snarl or Growler for Windows installed.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>An Alternative to symfony’s schema.yml</title>
      <link>/2009/08/an-alternative-to-symfonys-schema-yml/</link>
      <pubDate>Mon, 03 Aug 2009 04:13:07 +0000</pubDate>
      
      <guid>/2009/08/an-alternative-to-symfonys-schema-yml/</guid>
      
        <description>&lt;p&gt;The symfony web framework provides two methods for building the database model files when using the &lt;a href=&#34;http://propel.phpdb.org/&#34;&gt;Propel Object-relational mapping&lt;/a&gt; (ORM) toolkit. The recommended method by the symfony team is to use the &lt;a href=&#34;http://www.symfony-project.org/book/1_2/08-Inside-the-Model-Layer#chapter_08_symfony_s_database_schema&#34;&gt;schema.yml&lt;/a&gt; file, where you explicitly explain your table structure. The second method is to generate a &lt;a href=&#34;http://www.symfony-project.org/book/1_2/08-Inside-the-Model-Layer#chapter_08_sub_beyond_the_schema_yml_the_schema_xml&#34;&gt;schema.xml&lt;/a&gt; file directly from the database.&lt;/p&gt;

























&lt;img
  
  sizes=&#34;(min-width: 35em) 720px, 100vw&#34;
  srcset=&#39;
  
  
  &#39;
  
    src=&#34;/img/posts/symfony-schema-yml.png&#34;
  
  
  class=&#34;right&#34;
  alt=&#34;Database Schema&#34;&gt;



&lt;h3 id=&#34;schemayml&#34;&gt;schema.yml:&lt;/h3&gt;
&lt;p&gt;Just edit config/schema.yml and list your tables, columns, column types, and foreign keys in YAML form. Build the model files by running:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Catch Symfony Form Errors</title>
      <link>/2009/07/catch-symfony-form-errors/</link>
      <pubDate>Sat, 25 Jul 2009 18:43:11 +0000</pubDate>
      
      <guid>/2009/07/catch-symfony-form-errors/</guid>
      
        <description>&lt;p&gt;Have you built a form while developing with the &lt;a href=&#34;http://www.symfony-project.org/forms/1_2/en/01-Form-Creation&#34;&gt;symfony form framework&lt;/a&gt; that appears to work fine but fails because of an unknown error? Here is the simplest and easiest way to catch most errors.&lt;/p&gt;
&lt;p&gt;First open the web page with the form and fill it in with valid input. Then, open the form php file, temporarily delete all your custom form render code and replace it with echo $form. Go back to the web page and click your form submit button. It should show you any validation errors that appear in the form but were missing on your customized version, because this time it&amp;rsquo;s rendering the form with the default settings. At the very least it could show you something you missed and hint at the solution.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Accelerated CSS Transforms</title>
      <link>/2009/07/accelerated-css-transforms/</link>
      <pubDate>Sun, 19 Jul 2009 21:11:26 +0000</pubDate>
      
      <guid>/2009/07/accelerated-css-transforms/</guid>
      
        <description>&lt;p&gt;Recently the WebKit team added support for CSS transformations with 3D GPU acceleration. This means that soon we can built web applications that mimic desktop applications in graphical responsiveness. Charles Ying wrote a simple &lt;a href=&#34;http://www.satine.org/archives/2009/07/11/snow-stack-is-here/&#34;&gt;image gallery application&lt;/a&gt; that demos this new functionality.&lt;/p&gt;
&lt;p&gt;This is definitely not yet ready for end users but it demonstrates the power of the web platform and where it is heading. With the &lt;a href=&#34;/2009/07/importance-of-the-html-video-tag/&#34;&gt;native video tag&lt;/a&gt;, &lt;a href=&#34;http://www.techcrunch.com/2008/05/29/the-next-gen-web-browser-storage-support/&#34;&gt;local and session storage&lt;/a&gt;, plus much &lt;a href=&#34;http://ejohn.org/blog/javascript-performance-rundown/&#34;&gt;faster JavaScript engines&lt;/a&gt;, browsers are changing from simply presenting information to being a fully interactive platform. It&amp;rsquo;s no surprise that Google is developing a web-browser operating system, called Chrome OS.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Symfony CRUD Generator</title>
      <link>/2009/07/symfony-crud-generator/</link>
      <pubDate>Tue, 14 Jul 2009 01:01:22 +0000</pubDate>
      
      <guid>/2009/07/symfony-crud-generator/</guid>
      
        <description>&lt;p&gt;The symfony &lt;a href=&#34;http://www.symfony-project.org/forms/1_2/en/04-Propel-Integration#chapter_04_the_crud_generator&#34;&gt;CRUD generator&lt;/a&gt; is a very useful tool for speeding up your web development. When you need a list of items that you can list and edit, you are most likely building a standard CRUD (create-read-update-delete) interface. This is common functionality that is found in most applications. Since this is such a common task, it makes perfect sense that the symfony &lt;a href=&#34;http://www.symfony-project.org/&#34;&gt;web framework&lt;/a&gt; has a tool to build it for you.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>The Importance of the HTML Video Tag</title>
      <link>/2009/07/importance-of-the-html-video-tag/</link>
      <pubDate>Wed, 08 Jul 2009 05:34:22 +0000</pubDate>
      
      <guid>/2009/07/importance-of-the-html-video-tag/</guid>
      
        <description>&lt;p&gt;Since Firefox, Safari, and recently Chrome hit the browser scene, the web has been growing and improving at a much faster pace. The next evolution of the web comes in the form of HTML 5, the latest HTML standard that brings native video playback, offline storage, 2D drawing via the canvas tag among others features. Of those, the video tag is the most important and critical to the continued success of the open web.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Linux Distributions are a Closed Software Environment</title>
      <link>/2009/06/linux-distributions-are-a-closed-software-environment/</link>
      <pubDate>Sun, 28 Jun 2009 01:10:21 +0000</pubDate>
      
      <guid>/2009/06/linux-distributions-are-a-closed-software-environment/</guid>
      
        <description>&lt;p&gt;Closed? How can that be? The whole premise of most Linux Distributions is to be a &lt;a href=&#34;https://www.free-soft.org&#34;&gt;free and open environment&lt;/a&gt; for users and developers.&lt;/p&gt;
&lt;p&gt;What I mean is that software packages available on the web or on distributable media often don&amp;rsquo;t work on Linux. Valid examples are software from game publishers and bleeding edge software.&lt;/p&gt;
&lt;p&gt;For example, people who use the Fedora distribution (could be SUSE, Ubuntu&amp;hellip;) install new software packages via its package manager called yum. All packages in the repository (there are thousands) have been compiled specifically for each version of Fedora Core.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>The Future of Technology</title>
      <link>/2009/06/future-of-technology/</link>
      <pubDate>Fri, 26 Jun 2009 01:02:16 +0000</pubDate>
      
      <guid>/2009/06/future-of-technology/</guid>
      
        <description>&lt;p&gt;What is the future of technology and our digital toys?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The future is &lt;strong&gt;big screens&lt;/strong&gt;. Digital screens, like LCDs that are a thin as paper and a large as you wall. Heck, they&amp;rsquo;re probably even on your wall.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ubiquitous advertisements&lt;/strong&gt;. Why? They appear in games, they appear in product placements on all the &lt;a href=&#34;http://www.imdb.com/title/tt1055369/&#34;&gt;new movies&lt;/a&gt;. Google is funded by advertisements on free web applications; their whole business strategy is to move more services onto the web so more people are available to watch and click on advertisements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mobile&lt;/strong&gt;. Remember when Microsoft was pushing so big hard to attract more &lt;a href=&#34;http://www.youtube.com/watch?v=8To-6VIJZRE&#34;&gt;developers&lt;/a&gt; to its platform? The mobile future is an even larger wave that isn&amp;rsquo;t even being pushed very hard by Microsoft. Having instant access to your email, documents, entertainment, and web browsing will be possible through smart phones, &lt;a href=&#34;http://arstechnica.com/gadgets/reviews/2009/06/ars-palm-pre-review.ars&#34;&gt;Palm Pre&lt;/a&gt; anyone, or iPhone? A few more years, notebook computers will be relics, too heavy and clunky when everything you could possibly need is on your mobile phone.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The funny thing is, most of this is available now.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>About Me</title>
      <link>/about/</link>
      <pubDate>Fri, 26 Jun 2009 00:50:55 +0000</pubDate>
      
      <guid>/about/</guid>
      
        <description>&lt;p&gt;Hello, I&amp;rsquo;m Mark Deepwell. A natural born problem solver, leader, and software developer. I love people, I love technology, and I have a real passion for combining the two to make amazing products that customers enjoy using. When I&amp;rsquo;m not learning, prototyping, or leading teams, you can find me outside enjoying nature.&lt;/p&gt;

























&lt;img
  
  sizes=&#34;(min-width: 35em) 720px, 100vw&#34;
  srcset=&#39;
  
    /img/mountains-birds-sunset_hu_4a80d6611358b6c4.jpg 500w
  
  
    , /img/mountains-birds-sunset_hu_6bde9f48e02af9b1.jpg 800w
  
  
    , /img/mountains-birds-sunset_hu_d2b25ffcd50a97e.jpg 1200w
  &#39;
  
    src=&#34;/img/mountains-birds-sunset.jpg&#34;
  
  
    data-zoom-src=&#34;/img/mountains-birds-sunset.jpg&#34;
  
  
  alt=&#34;Birds flying amid a backdrop of a beautiful sunset&#34;&gt;</description>
      
    </item>
    
  </channel>
</rss>
