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

<channel>
	<title>Bearfruit &#187; Web Design</title>
	<atom:link href="http://www.bearfruit.org/category/web_design/feed/?category_name=web_design" rel="self" type="application/rss+xml" />
	<link>http://www.bearfruit.org</link>
	<description>Matthew Nuzum&#039;s Blog</description>
	<lastBuildDate>Wed, 28 Dec 2011 20:34:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2-bleeding</generator>
		<item>
		<title>UI considerations for 2 factor authentication</title>
		<link>http://www.bearfruit.org/2011/05/18/ui-considerations-for-2-factor-authentication/</link>
		<comments>http://www.bearfruit.org/2011/05/18/ui-considerations-for-2-factor-authentication/#comments</comments>
		<pubDate>Wed, 18 May 2011 20:07:43 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Cool Stuff]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.bearfruit.org/?p=524</guid>
		<description><![CDATA[As an experimental work project, my team is evaluating the yubikey as a 2 factor authentication device for login.ubuntu.com. The user interface suggested by Yubico leaves me wishing for something better. Here is an idea I have, please let me know your thoughts.]]></description>
			<content:encoded><![CDATA[<p>As an experimental work project, my team is evaluating the <a href="http://www.yubico.com/start">yubikey</a> as a 2 factor authentication device for <a href="https://login.ubuntu.com/+login">login.ubuntu.com</a>. The user interface suggested by Yubico leaves me wishing for something better. Here is an idea I have, please let me know your thoughts.</p>
<p><iframe src="http://www.youtube.com/embed/vwk33dkKgoc?rel=0" frameborder="0" width="560" height="349" style="width:560px; height:349px"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bearfruit.org/2011/05/18/ui-considerations-for-2-factor-authentication/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Django: sorting by popularity</title>
		<link>http://www.bearfruit.org/2011/04/28/django-sorting-by-popularity/</link>
		<comments>http://www.bearfruit.org/2011/04/28/django-sorting-by-popularity/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 02:35:46 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.bearfruit.org/?p=509</guid>
		<description><![CDATA[Imagine you have a list of categories and you want to sort them by popularity, so that the most used categories are first. Django&#8217;s documentation left me scratching my head a bit. It took some time and fiddling to work out a good way to do it, I hope this is helpful and clear to [...]]]></description>
			<content:encoded><![CDATA[<p>Imagine you have a list of categories and you want to sort them by popularity, so that the most used categories are first. Django&#8217;s <a href="http://docs.djangoproject.com/en/1.3/topics/db/aggregation/">documentation</a> left me scratching my head a bit. It took some time and fiddling to work out a good way to do it, I hope this is helpful and clear to you.<span id="more-509"></span></p>
<div class="highlight">
<pre><span style="color: #007020; font-weight: bold;">class</span> <span style="color: #0e84b5; font-weight: bold;">Pet</span>(models<span style="color: #666666;">.</span>Model):
    user <span style="color: #666666;">=</span> models<span style="color: #666666;">.</span><span style="color: #007020;">ForeignKey</span>(User)
    animal <span style="color: #666666;">=</span> models<span style="color: #666666;">.</span><span style="color: #007020;">ForeignKey</span>(Animal)
    name <span style="color: #666666;">=</span> models<span style="color: #666666;">.</span><span style="color: #007020;">CharField</span>(max_length<span style="color: #666666;">=</span><span style="color: #40a070;">40</span>)

<span style="color: #007020; font-weight: bold;">class</span> <span style="color: #0e84b5; font-weight: bold;">Animal</span>(models<span style="color: #666666;">.</span>Model):
    legs <span style="color: #666666;">=</span> models<span style="color: #666666;">.</span><span style="color: #007020;">IntegerField</span>()
    fur <span style="color: #666666;">=</span> models<span style="color: #666666;">.</span>BoolField()
    name <span style="color: #666666;">=</span> models<span style="color: #666666;">.</span><span style="color: #007020;">CharField</span>(max_length<span style="color: #666666;">=</span><span style="color: #40a070;">40</span>)

animals <span style="color: #666666;">=</span> Animal<span style="color: #666666;">.</span>objects<span style="color: #666666;">.</span>annotate(popularity<span style="color: #666666;">=</span>Count(<span style="color: #4070a0;">'pet'</span>))<span style="color: #666666;">.</span>order_by(<span style="color: #4070a0;">'-popularity'</span>)</pre>
</div>
<p>You see here that Animal is not related to Pet directly, so you need to do a reverse lookup. Whenever I see Django do this I think it must be magic. Notice that there is no field named &#8220;popularity.&#8221; Instead, we define it with our annotation. Then we can sort by it with our order_by.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bearfruit.org/2011/04/28/django-sorting-by-popularity/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mobile browser redirection with mod_rewrite</title>
		<link>http://www.bearfruit.org/2010/11/05/mobile-browser-redirection-with-mod_rewrite/</link>
		<comments>http://www.bearfruit.org/2010/11/05/mobile-browser-redirection-with-mod_rewrite/#comments</comments>
		<pubDate>Fri, 05 Nov 2010 18:39:30 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Cool Stuff]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.bearfruit.org/?p=469</guid>
		<description><![CDATA[I found a great article on using mod_rewrite to send mobile browsers to a special page or site. I modified it to do the inverse as well. You can use the rules demonstrated in there to send mobile browsers to your mobile site and you can use the rules below as an inverse to send [...]]]></description>
			<content:encoded><![CDATA[<p>I found a great article on <a href="http://www.projectronin.com/blog/?p=10">using mod_rewrite to send mobile browsers to a special page</a> or site. I modified it to do the inverse as well. You can use the rules demonstrated in there to send mobile browsers to your mobile site and you can use the rules below as an inverse to send desktop browsers from your mobile site to your normal site.<span id="more-469"></span></p>
<pre>RewriteEngine On</pre>
<pre>RewriteCond %{REQUEST_URI} ^/$</pre>
<pre>RewriteCond %{HTTP_ACCEPT} !"text/vnd.wap.wml|application/vnd.wap.xhtml+xml" [NC]</pre>
<pre>RewriteCond %{HTTP_USER_AGENT} !"acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-" [NC]</pre>
<pre>RewriteCond %{HTTP_USER_AGENT} !"dang|doco|erics|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-" [NC]</pre>
<pre>RewriteCond %{HTTP_USER_AGENT} !"maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv" [NC]</pre>
<pre>RewriteCond %{HTTP_USER_AGENT} !"palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany" [NC]</pre>
<pre>RewriteCond %{HTTP_USER_AGENT} !"sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo" [NC]</pre>
<pre>RewriteCond %{HTTP_USER_AGENT} !"teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi" [NC]</pre>
<pre>RewriteCond %{HTTP_USER_AGENT} !"wapp|wapr|webc|winw|winw|xda|xda-" [NC]</pre>
<pre>RewriteCond %{HTTP_USER_AGENT} !"up.browser|up.link|windowssce|iemobile|mini|mmp" [NC]</pre>
<pre>RewriteCond %{HTTP_USER_AGENT} !"symbian|midp|wap|phone|pocket|mobile|pda|psp" [NC]</pre>
<pre>RewriteCond %{HTTP_USER_AGENT} macintosh [NC]</pre>
<pre>RewriteRule ^(.*)$ http://www.yoursite.com/ [L,R=302]</pre>
<p>Three things to note about this compared to the original:</p>
<ol>
<li>My use case is two sites, www.yoursite.com for normal and m.yoursite.com for mobile sites</li>
<li>I only check URLs on the homepage, I figure here that if they&#8217;re on an interior page they&#8217;re there on purpose</li>
<li>You understand mod_rewrite and regular expressions enough to know what to change above to make it right for you (only the 2nd and last lines will likely need to change)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.bearfruit.org/2010/11/05/mobile-browser-redirection-with-mod_rewrite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Test Drupal 7 beta for 54 min free thanks to Canonical</title>
		<link>http://www.bearfruit.org/2010/10/14/test-drupal-7-beta-for-free/</link>
		<comments>http://www.bearfruit.org/2010/10/14/test-drupal-7-beta-for-free/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 20:17:35 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Cool Stuff]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.bearfruit.org/?p=453</guid>
		<description><![CDATA[This week two exciting things happened in the open source world. Drupal 7 beta was released for testing and Ubuntu 10.10 was delivered. It just so happens that the timing couldn&#8217;t have been better, because Canonical debuted a new feature that lets you test Ubuntu Server Edition in the cloud free for one hour. Now [...]]]></description>
			<content:encoded><![CDATA[<p>This week two exciting things happened in the open source world. <a href="http://drupal.org/drupal-7.0-beta1">Drupal 7 beta was released for testing</a> and <a href="http://www.ubuntu.com/">Ubuntu 10.10 was delivered</a>. It just so happens that the timing couldn&#8217;t have been better, because Canonical debuted a new feature that lets you <a href="https://10.cloud.ubuntu.com/">test Ubuntu Server Edition in the cloud free for one hour</a>.<span id="more-453"></span></p>
<p>Now you have no excuse not to try out the latest Drupal 7 beta. It&#8217;s not hard but you will need to do just a bit of setup. It works like this:</p>
<ol>
<li>Create a free account</li>
<li>Make sure you&#8217;re able to use SSH (try <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">installing PuTTY</a> if you use Windows, Linux and Mac OS users are already set)</li>
<li>Launch an instance</li>
<li>Use my instructions to setup Drupal 7 (takes 3 min)</li>
<li>Play with Drupal 7 for the remainder of the hour for free</li>
</ol>
<p>You can repeat steps 3 &#8211; 5 if you&#8217;d like, but the nature of the system means your data is wiped clean when your hour is up. Fortunately my instructions are copy and paste so you can do it very quickly.</p>
<h2>Create an account</h2>
<p>Visit <a href="https://10.cloud.ubuntu.com">https://10.cloud.ubuntu.com</a> to begin the process. Click the big orange button to try Ubuntu 10.10.</p>
<p><img class="alignnone size-medium wp-image-455" title="Step 0" src="http://www.bearfruit.org/wp-content/uploads/2010/10/Step-0-300x192.png" alt="" width="300" height="192" /></p>
<p>You&#8217;ll be asked to either sign in (the form on the left) or create an account (the grey button on the right). I assume you have not visited here before and need to make an account.</p>
<p><img class="alignnone size-medium wp-image-456" title="step1" src="http://www.bearfruit.org/wp-content/uploads/2010/10/step1-300x170.png" alt="" width="300" height="170" /></p>
<p>Next, fill out the form with your e-mail address. Choose a password and enter the captcha <img src='http://www.bearfruit.org/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
<p>You&#8217;ll be sent an e-mail with a short code to enter. Copy that and paste it into the form here to confirm your e-mail address.</p>
<p><a href="http://www.bearfruit.org/wp-content/uploads/2010/10/step3.png"><img class="alignnone size-medium wp-image-457" title="step3" src="http://www.bearfruit.org/wp-content/uploads/2010/10/step3-300x185.png" alt="" width="300" height="185" /></a></p>
<p>Your account was created, now sign in by clicking the big orange button:</p>
<p><img class="alignnone size-medium wp-image-458" title="step6" src="http://www.bearfruit.org/wp-content/uploads/2010/10/step6-300x168.png" alt="" width="300" height="168" /></p>
<p>By the way, if you have a launchpad.net account you probably skipped some of those steps above. As a matter of fact, if you have an SSH public key associated with your launchpad.net account life will be even easier.</p>
<p>Now we launch the Ubuntu 10.10 Server instance. I&#8217;ll assume you don&#8217;t have an SSH key filed in launchpad. You&#8217;ll get a one-time use password when you launch your instance. You&#8217;ll also see an informative paragraph above the gray box which no doubt you won&#8217;t read. It&#8217;s OK.</p>
<h2>Launch your server</h2>
<p><img class="alignnone size-medium wp-image-459" title="step7" src="http://www.bearfruit.org/wp-content/uploads/2010/10/step7-300x285.png" alt="" width="300" height="285" /></p>
<p>Check the 2nd box saying that you will agree to the Amazon Web Service Customer Agreement and the Ubuntu Code of Conduct (basically, if you use this for Drupal 7 testing you&#8217;re in compliance). Then hit the orange Launch button.</p>
<p>It takes a min or two for your server to launch. Keep the page open, it refreshes every few seconds. Once the server launches you&#8217;ll be given a simple information screen like this:</p>
<p><img class="alignnone size-full wp-image-460" title="step 9" src="http://www.bearfruit.org/wp-content/uploads/2010/10/step-9.png" alt="" width="439" height="382" /></p>
<p>If you are using Windows you&#8217;ll probably want to use the excellent SSH program PuTTY, if you are in Mac OS or Linux you can just open a terminal. The command to type at the terminal is:</p>
<blockquote><p>ssh ubuntu@address (basically just copy and paste from the webpage)</p></blockquote>
<p>If you&#8217;re in putty just enter the IP address and click connect. When asked for a username type ubuntu.</p>
<p>The first thing that happens is you&#8217;ll enter your one-time password. It will immediately request you change it. Follow the instructions to type the one-time password again and then enter a new password of your choosing. It may log you out, if so, just connect again and use your new password this time.</p>
<h2>Now test Drupal 7 Beta</h2>
<p>You&#8217;ve probably now invested about 6 min of your life and you&#8217;re ready to see D7. Let&#8217;s go.</p>
<p>Type these commands from the terminal:</p>
<blockquote><p>sudo tasksel install lamp-server</p></blockquote>
<p>This will prompt you to install a web-server and MySQL onto the server. The screen turns blue and you&#8217;ll be asked to choose a MySQL server password. <strong>GO AHEAD AND PICK A PASSWORD</strong>. It can be 123456 if you want, it will only be around for 1 hour. If you don&#8217;t it slows things down a little.</p>
<blockquote>
<ol>
<li>sudo apt-get install -y php5-gd</li>
<li>wget http://ftp.drupal.org/files/projects/drupal-7.0-beta1.tar.gz</li>
<li>cd /srv</li>
<li>sudo tar zxf ~/drupal-7.0-beta1.tar.gz</li>
<li>sudo sed -i &#8216;s/\/var\/www/\/srv\/drupal-7.0-beta1/g&#8217; /etc/apache2/sites-available/default</li>
<li>sudo /etc/init.d/apache2 restart</li>
<li>sudo mysqladmin -u root -p create drupal<br />
(you&#8217;ll have to enter your MySQL password you chose earlier)</li>
<li>cd /srv/drupal-7.0-beta1/sites/default</li>
<li>sudo cp default.settings.php settings.php</li>
<li>sudo mkdir files</li>
<li>sudo chown www-data settings.php files/</li>
</ol>
</blockquote>
<p>You are now down. Drupal 7 beta is installed and ready to configure. You can do the rest of these steps in the web browser.</p>
<p>Remember your server address you have open in your browser? (it&#8217;s a series of 4 numbers separated by dots) Copy that, open a web browser and then paste that address in as the URL and hit enter.</p>
<p>At this point, you are now officially a Drupal 7 Beta tester!</p>
<p>Follow the instructions to configure Drupal. At the database screen the important details are:</p>
<ol>
<li>Database name: drupal</li>
<li>User name: root</li>
<li>Password: (the password you typed into the blue screen during configuration)</li>
</ol>
<p>Explore, play, look for problems, read this page to find out <a href="http://drupal.org/drupal-7.0-beta1">how to test and report issues</a> you find.</p>
<p>Don&#8217;t forget to <a href="https://10.cloud.ubuntu.com/feedback/">say thank you</a> to Canonical. If you like how easy it is to set up Ubuntu Server strongly consider Ubuntu Advantage, a tool created by Canonical to make <a href="http://www.canonical.com/enterprise-services/ubuntu-advantage/server">setting up and managing Ubuntu Server much easier</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bearfruit.org/2010/10/14/test-drupal-7-beta-for-free/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse on Ubuntu dies with RenderBadPicture error</title>
		<link>http://www.bearfruit.org/2010/06/26/eclipse-ubuntu-renderbadpicture-error/</link>
		<comments>http://www.bearfruit.org/2010/06/26/eclipse-ubuntu-renderbadpicture-error/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 03:08:37 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.bearfruit.org/?p=445</guid>
		<description><![CDATA[If you&#8217;ve tried out the just-released version of Eclipse Helios and within minutes of startup it dies with a RenderBadPicture error there&#8217;s an easy solution. Here&#8217;s the error message: The program &#8216;Eclipse&#8217; received an X Window System error.This probably reflects a bug in the program.The error was &#8216;RenderBadPicture (invalid Picture parameter)&#8217;.  (Details: serial 22386 error_code 172 [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve tried out the just-released version of Eclipse Helios and within minutes of startup it dies with a RenderBadPicture error there&#8217;s an easy solution. Here&#8217;s the error message:</p>
<blockquote><p>The program &#8216;Eclipse&#8217; received an X Window System error.This probably reflects a bug in the program.The error was &#8216;RenderBadPicture (invalid Picture parameter)&#8217;.  (Details: serial 22386 error_code 172 request_code 152 minor_code 7)  (Note to programmers: normally, X errors are reported asynchronously;   that is, you will receive the error a while after causing it.   To debug your program, run it with the &#8211;sync command line   option to change this behavior. You can then get a meaningful   backtrace from your debugger if you break on the gdk_x_error() function.)</p></blockquote>
<p><span id="more-445"></span>You&#8217;ll only see that in your console if you run eclipse from the terminal. Otherwise you get a pop-up dialog with too much information to humanly process.</p>
<p>The error is triggered when you do something that tries to auto-complete (or intelisense or whatever they call it) code for you. The <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308731">eclipse bug</a> spells out the solution. Basically you need to install <span style="font-family: monospace; line-height: 18px; font-size: small; white-space: pre-wrap; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">xulrunner-1.9.2</span> and then start eclipse with a special command line option so that it knows where to find it.</p>
<p>The command to use is: (make sure this is all one line)</p>
<blockquote><p>eclipse -vmargs -Dorg.eclipse.swt.browser.XULRunnerPath=/usr/bin/xulrunner</p></blockquote>
<p>The humorous part of this story is that the eclipse team marked this bug as not a problem with eclipse. Uhm, yeah, like people should just know this stuff.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bearfruit.org/2010/06/26/eclipse-ubuntu-renderbadpicture-error/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>New job</title>
		<link>http://www.bearfruit.org/2010/06/11/new-job/</link>
		<comments>http://www.bearfruit.org/2010/06/11/new-job/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 20:13:11 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Cool Stuff]]></category>
		<category><![CDATA[Diary]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.bearfruit.org/?p=429</guid>
		<description><![CDATA[I&#8217;m excited to share that I&#8217;m changing jobs at Canonical. I&#8217;ve been working as the Ubuntu.com webmaster for four years. I&#8217;ll be changing to a web developer on a different team. More specifically, I&#8217;ll be kind of a front-end web developer working on theming and the likes. When I started at Canonical there was under [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m excited to share that I&#8217;m changing jobs at Canonical. I&#8217;ve been working as the Ubuntu.com webmaster for four years. I&#8217;ll be changing to a web developer on a different team. More specifically, I&#8217;ll be kind of a front-end web developer working on theming and the likes.</p>
<p>When I started at Canonical there was under 50 employees and the webmaster job description was quite broad. Over time as the company has grown and more people came on to help in various aspects my role became more of a marketing job, making content changes and running web reports. I was spending less of my time doing tasks where I excelled.</p>
<p>It&#8217;s kind of a lateral move. I&#8217;ll be switching to the team of developers responsible for managing our internal apps. I&#8217;ll continue to work on the Ubuntu.com infrastructure including Drupal, WordPress and Moin Moin as before. However this job is explicitly about developing custom application solutions. Someone else will be hired to take on the roles of managing the content and reporting for the website.</p>
<p>For those of you who are my colleagues in the Ubuntu community (i.e. not Canonical staff) our relationship will not change &#8211; I&#8217;m still the contact. As a matter of fact, there is a lot about my job that isn&#8217;t changing. I mostly get to focus on the parts I love.</p>
<p>This suits my tastes perfectly. I&#8217;m much more comfortable thinking about HTTP headers, reducing code duplication, CSS and the likes than I am hunting for typos, ensuring headlines are sentence case and keeping on top of web reports.</p>
<p>There will be a job post to fill the role of webmaster. If you&#8217;re interested in it, let me know and I&#8217;ll send you the details when they&#8217;re finalized by management. If you know me you know how to contact me privately and I think that would be the best method to express interest in the job.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bearfruit.org/2010/06/11/new-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lucid Lynx release day excitement</title>
		<link>http://www.bearfruit.org/2010/04/30/lucid-lynx-release-day-excitement/</link>
		<comments>http://www.bearfruit.org/2010/04/30/lucid-lynx-release-day-excitement/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 19:27:27 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[backend]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Cool Stuff]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.bearfruit.org/?p=407</guid>
		<description><![CDATA[Every release day is exciting in one way or another. Lucid&#8217;s was no disappointment. April 29th, 2010 was my 8th Ubuntu release as the ubuntu.com webmaster. Counting testing releases, betas and RCs I&#8217;ve participated in about 50 releases. There are many aspects related to a release. I can only talk about my own perspective, as [...]]]></description>
			<content:encoded><![CDATA[<p>Every release day is exciting in one way or another. Lucid&#8217;s was no disappointment. April 29th, 2010 was my 8th Ubuntu release as the ubuntu.com webmaster. Counting testing releases, betas and RCs I&#8217;ve participated in about 50 releases.</p>
<p>There are many aspects related to a release. I can only talk about my own perspective, as it pertains to managing the website. Usually, a week or so before release we&#8217;ve got a pretty good idea of what the website will look like and people are viewing it on a testing server. Invariably there are last minute changes, and I do mean up to the last minute.<span id="more-407"></span></p>
<p>Wednesday evening the release manager starts the process of dispersing CD images to the corners of the globe so that when its time to go live they show up on the mirrors pretty quickly. I talk to him and plan a time for me to come online to prepare the website for release. This time we agreed I&#8217;d be online at 5:00 am (10:00 UTC), aiming for a 12:00 UTC release time.</p>
<p>There&#8217;s an element of risk in pre-seeding the CD images because the image testing happens in parallel. Normally its not a problem but this release a serious bug was found. I&#8217;m not sure of the details but it was bad enough that there was a &#8220;day-of&#8221; re-spin. When I came online at 5:00 the disks were being remastered.</p>
<p>This went OK apparently but a new problem popped up. We have a mirror prober application that checks our mirrors to see if they have the correct images. We do this by making HTTP HEAD requests to ensure the file name exists and the file size matches what we have. Unfortunately, the remastered disk images were exactly the same size as the defective ones. <em>Exact to the byte</em>.</p>
<p>We couldn&#8217;t tell which mirrors had the new version and which had the bad version. We use a protocol to communicate with our mirrors telling them which files to mirror. Therefore we updated the list to include a dummy file. That allowed us to identify which mirrors were up to date and which were not.</p>
<p>Finally, about 12:21 my time (17:21 UTC) we got the word that it was about time to &#8220;push the button.&#8221; I had prepared by opening up a bunch of tabs with the pages that were changing, updating the pages so that all I had to do was submit each form. The release team gave me some last minute changes and in the process of applying those I accidentally <em>closed my browser window</em>. If you were in central Iowa you may have heard me scream.</p>
<p>I&#8217;m an optimist, so I hoped that firefox would remember the tabs and values of the forms, but unfortunately our authentication system redirects you to an openid auth page when you first visit it. All was lost.</p>
<p>So I copy and pasted again while people constantly instant messaged me asking if it was ready yet. Finally, at about 12:46 (17:46 UTC) the website launched. I kid you not, multitudes of people open their browser to the homepage and refresh again and again waiting to see the site change. I hear someone in the Millbank office with a bottle of champagne waits until the website updates so that they can celebrate. Talk about pressure. <img src='http://www.bearfruit.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>We&#8217;re fortunate that our intense loads are so predictable. It gives us plenty of time to beef up our infrastructure and plan appropriately. When we get slashdotted we usually don&#8217;t even notice (unless they link to our wiki). <a href="http://www.bearfruit.org/wp-content/uploads/2010/04/spikes.png"><img class="size-full wp-image-408 alignright" title="spikes" src="http://www.bearfruit.org/wp-content/uploads/2010/04/spikes.png" alt="" width="61" height="66" /></a>A release day is at least 12 times more traffic than when we hit the homepage of digg and slashdot. For a reference, check out this image. The big bump is a release day, the small bump to the left of it is when we hit some big news site.</p>
<p>After the site launches I get a rush of bug reports. There&#8217;s nothing like having a million people proof reading your site all at once. The next couple hours are spent doing low-priority updates and fixing little issues that show up. About 3:00 my time (20:00 UTC) I stepped away from my computer and took a nap.</p>
<p>And that is a release day.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bearfruit.org/2010/04/30/lucid-lynx-release-day-excitement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe and Gruber agree: Apple&#8217;s app store policy should change</title>
		<link>http://www.bearfruit.org/2010/04/21/adobe-and-gruber-agree/</link>
		<comments>http://www.bearfruit.org/2010/04/21/adobe-and-gruber-agree/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 18:55:37 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.bearfruit.org/?p=400</guid>
		<description><![CDATA[Just to be clear, Adobe and John Gruber disagree on most of the issues around this &#8220;section 3.3.1&#8243; incident, but they do heartily agree on the most important point. First, to summarize what I&#8217;m referring to, Apple recently changed the wording in the contract developers have to agree to in order to develop apps for [...]]]></description>
			<content:encoded><![CDATA[<p>Just to be clear, Adobe and John Gruber disagree on most of the issues around this &#8220;section 3.3.1&#8243; incident, but they do heartily agree on the most important point.</p>
<p>First, to summarize what I&#8217;m referring to, Apple recently changed the wording in the contract developers have to agree to in order to develop apps for the iPhone. The wording prohibits developers from using tools other than Apple&#8217;s own sanctioned set which strongly steer developers towards creating apps that will only run on Apple&#8217;s products. This was done just a couple days before Adobe was scheduled to announce a product that allowed developers to create apps that run on a variety of devices, not just Apple&#8217;s. Developers, especially those at Adobe, got very upset and alarmed.<span id="more-400"></span></p>
<p>John Gruber is a die-hard Apple fan. He will tell it like he sees it but has a tendency to defend Apple. He <a href="http://daringfireball.net/2010/04/iphone_agreement_bans_flash_compiler">certainly did in this case</a>. I don&#8217;t know John btw, but if you read this article you&#8217;ll see that he berates app developers who create cross-platform apps because they&#8217;re inherently lower quality and feel non-native but completely side-steps the fact that Apple creates cross-platform apps such as iTunes, Safari and Quick Time. Therefore I&#8217;m going to say that he&#8217;s not an objective reporter of facts, but instead is editorializing to support a group he likes.</p>
<p>Adobe (or it&#8217;s influential supporters and employees) has <a href="http://theflashblog.com/?p=1888">said some mean things about Apple</a> on this subject. There is a clear division between the groups that are supporting either Adobe or Apple. It&#8217;s ugly.</p>
<p>There is a third group that is not getting talked about. This group doesn&#8217;t care about Flash and instead wants to create apps for the widest number of devices. Many think this <a href="http://twitter.com/#search?q=%23section331">#section331</a> change was aimed squarely at Adobe, but if so it hit this third group too. I&#8217;ll disclose that as a user of <a href="http://www.appcelerant.com/iphone-os-4-0-announcement-and-our-commitment-to-you.html">Appcelerator Titanium</a> I&#8217;m in this group.</p>
<p>Considering Gruber&#8217;s support for Apple in the past I was quite surprised to find him writing an article that <a href="http://daringfireball.net/2010/04/not_the_control_the_secrecy">directly supported</a> the view of this third group and certainly overlapped with the views of Adobe.</p>
<blockquote><p>Either way, something terrible is going on. But worse than anything  related to this specific case is the bigger picture: we don’t know.</p>
<p>&#8230;what Apple is losing are iPhone OS apps that aren’t being made in the  first place by developers who aren’t willing to take their chances &#8230; violating one of Apple’s unpublished and heretofore unknown rules.</p>
<p>Keeping the rules secret may make things easier for Apple, but it’s  weakening the platform.</p></blockquote>
<p>This is a good piece and there&#8217;s no way a brief summary can get the full meaning, but you can see here the gist.</p>
<p>Adobe&#8217;s employee <a href="http://www.mikechambers.com/blog/2010/04/20/on-adobe-flash-cs5-and-iphone-applications/">Mike Chambers has a similar feeling</a>, though a bit more strongly worded:</p>
<blockquote><p>Essentially, this has the effect of restricting applications built with a  number of technologies, including Unity, Titanium, MonoTouch, and Flash  CS5.</p>
<p>To be clear, during the entire development cycle of Flash CS5, the  feature complied with Apple’s licensing terms. However, as developers  for the iPhone have learned, if you want to develop for the iPhone you  have to be prepared for Apple to reject or restrict your development at  anytime, and for seemingly any reason. In just the past week Apple also  changed its licensing terms to essentially <a href="http://www.wired.com/epicenter/2010/04/with-new-developer-agreement-apple-unlevels-the-iad-playing-field/#ixzz0lamm408R">prohibit  ad networks other than its own on the iPhone</a>.</p></blockquote>
<p>Again, this is only a brief summary, the two articles each take you to different conclusions, but where they agree is that developers, especially those unwilling to invest themselves into a single platform, are afraid to target Apple&#8217;s iPhone OS.</p>
<p>There is fear that if we use platform agnostic development tools we&#8217;ll be suddenly kicked out of Apple&#8217;s app store. How would you like to spend months of time working on an app only to be prevented from sharing it with others?</p>
<p>A friend of mine made a snarky remark that we can still use HTML5. He&#8217;s right, of course. But right now there&#8217;s currently no marketplace for HTML5 mobile apps. I&#8217;ll be writing about this further soon but for now, if you want to commercialize or promote an app on most of the mobile devices you have to go through the Apple AppStore or the Android Market. And that means using a tool to create a native app.</p>
<p>I was in the process of developing an app that would be part of an article for a developer magazine and had to put everything on hold when this issue blew through. It appears <a href="http://www.phonegap.com/2010/04/14/phonegap-and-the-apple-developer-license-agreement/">Phone Gap has been given amnesty</a> so I will proceed cautiously, hoping that Apple&#8217;s whim doesn&#8217;t change.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bearfruit.org/2010/04/21/adobe-and-gruber-agree/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Why do SSL certificates cost money?</title>
		<link>http://www.bearfruit.org/2010/04/20/why-do-ssl-certificates-cost-money/</link>
		<comments>http://www.bearfruit.org/2010/04/20/why-do-ssl-certificates-cost-money/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 20:29:58 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.bearfruit.org/?p=370</guid>
		<description><![CDATA[In short, you&#8217;re paying for the trust, not the actual encryption. Anyone with the appropriate software, which is widely available for free, can create their own certificate that provides encryption. However, using such a certificate will generate a browser warning when a user tries to create a secure connection. The warning will say something to [...]]]></description>
			<content:encoded><![CDATA[<p>In short, you&#8217;re paying for the trust, not the actual encryption. Anyone with the appropriate software, which is widely available for free, can <a href="http://www.akadia.com/services/ssh_test_certificate.html">create their own certificate</a> that provides encryption. However, using such a certificate will generate a browser warning when a user tries to create a secure connection. The warning will say something to the effect that &#8220;the connection is not trusted.&#8221; If you want to avoid the warning it costs something between $50 and $500. But there&#8217;s a justification.<span id="more-370"></span></p>
<p>When you purchase a certificate you must perform some additional steps besides those to create a self-signed certificate. These steps help you demonstrate who you are. For example, it may require that you prove you can receive email at the domain you&#8217;re security, prove that you own the domain, talk to a person or use an automated system that calls you to verify your phone number and identity or even fax business verification documents.</p>
<p>Once you&#8217;ve performed the steps necessary to show that you are who you say you are you receive an SSL certificate. Of course you also have to pay money.</p>
<p>I&#8217;m not really in agreement that the fees associated with an SSL certificate are justified. The cost of verifying an organization that is purchasing a certificate are pretty much static and don&#8217;t vary depending on the number of servers they have. Yet you buy the certificates by the server. If it costs $50 to verify an organization and that&#8217;s how much they charge for one certificate and a businesses purchases 10 then you&#8217;ve got yourself a pretty good margin. If you don&#8217;t believe me, <a href="http://en.wikipedia.org/wiki/Mark_Shuttleworth">ask Mark Shuttleworth</a>. I shouldn&#8217;t complain because his success at selling SSL certificates pays my salary. <img src='http://www.bearfruit.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.bearfruit.org/2010/04/20/why-do-ssl-certificates-cost-money/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XMarks syncs open tabs</title>
		<link>http://www.bearfruit.org/2010/04/15/xmarks-syncs-open-tabs/</link>
		<comments>http://www.bearfruit.org/2010/04/15/xmarks-syncs-open-tabs/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 16:17:50 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Cool Stuff]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.bearfruit.org/?p=365</guid>
		<description><![CDATA[I often keep tabs open for items on my todo list. So I get very upset if I lose my tabs. Sometimes I have two computers running or I dual-boot between operating systems and the tabs open on one are different than the tabs open on another. Xmarks now supports keeping these synchronized! I&#8217;ve just [...]]]></description>
			<content:encoded><![CDATA[<p>I often keep tabs open for items on my todo list. So I get very upset if I lose my tabs. Sometimes I have two computers running or I dual-boot between operating systems and the tabs open on one are different than the tabs open on another. Xmarks now supports <a href="http://blog.xmarks.com/?p=1534">keeping these synchronized</a>! I&#8217;ve just enabled this feature so haven&#8217;t played with it extensively yet but I&#8217;m excited about its potential.</p>
<p>In case you haven&#8217;t used XMarks before, it also supports synchronizing book marks between browsers. It works for IE, Chrome, Safari and Firefox. On some of these browsers you can also synchronize your passwords. Give it a shot at <a href="http://www.xmarks.com/">http://www.xmarks.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bearfruit.org/2010/04/15/xmarks-syncs-open-tabs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

