<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Nicholas Helke’s Recent Articles</title>
 <link href="http://www.nhelke.com/atom.xml" rel="self"/>
 <link href="http://www.nhelke.com/"/>
 <updated>2012-04-10T23:07:38+00:00</updated>
 <id>http://www.nhelke.com/</id>
 <author>
   <name>Nicholas Helke</name>
   <email>info@nhelke.com</email>
 </author>

 
 <entry>
   <title>On the Programatic Handling of Approximate Dates</title>
   <link href="http://www.nhelke.com/2012/04/11/handling-approximate-dates.html"/>
   <updated>2012-04-11T00:00:00+00:00</updated>
   <id>http://www.nhelke.com/2012/04/11/handling-approximate-dates</id>
   <content type="html">&lt;h1 id=&quot;On+the+Programatic+Handling+of+Approximate+Dates&quot;&gt;On the Programatic Handling of Approximate Dates&lt;/h1&gt;

&lt;p&gt;Despite more and more activities taking place in the digital world getting
precise date stamps, events with dates of varying degrees of accuracy remain
common place. For instance Historical events, book releases or when you had tea with Jack last Tuesday which can only be pinned down to a an approximate time such as a year, a month or a particular afternoon.&lt;/p&gt;

&lt;p&gt;Obviously, any new digital data we create gets a marvelously precise timestamp, nevertheless however digital our lives become, life itself remains very imprecise. We will continue to create memories and experience things that will not get digital timestamps, but that we may yet wish to record digitally.&lt;/p&gt;

&lt;p&gt;It is tempting to call the dates we may assign to such events fuzzy dates, as in fuzzy logic, however the term has been used to mean relative dating, e.g. 2 days ago. So &lt;em&gt;approximate dates&lt;/em&gt; will have to do.&lt;/p&gt;

&lt;p&gt;The question is how do we store such approximate dates digitally and in such a way the one can perform meaningful queries on the data. An approximate date type is not among  the many data types provided by most database systems for storing and querying data.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The trick to designing an approximate date datatype is the realization that however approximate a date or time, you can easily choose upper and lower bounds for it; thereby defining an interval. It should be noted that a precise date or time can be modeled as the interval containing just that date or time.&lt;/p&gt;

&lt;p&gt;Records hold two entires for the start and end dates of the range (for precise dates the start and end dates are equal and the range contains just the one point in time).&lt;/p&gt;

&lt;p&gt;We can safely assume that that start is always less than or equal to end. Assume a table &lt;code&gt;t&lt;/code&gt; with &lt;code&gt;start&lt;/code&gt; and &lt;code&gt;end&lt;/code&gt; columns, and a range from &lt;code&gt;a&lt;/code&gt; to &lt;code&gt;b&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Records that are contained within a date range can be queried using the &lt;strong&gt;intersection&lt;/strong&gt; of records ending before the end of the search range and records starting after the beginning of the search range. Or more simply:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT * FROM t WHERE t.start &amp;gt;= a AND t.end &amp;lt;= b
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;One might be tempted, given the above, to say that records that intersect with a date range can be found by using the &lt;strong&gt;union&lt;/strong&gt; of records having ended after the start of the search range and those having started before the end of the search range:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT * FROM t WHERE t.start &amp;gt;= a OR t.end &amp;lt;= b
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is &lt;strong&gt;wrong&lt;/strong&gt;. Given the reasonable inequalities between a and b; and between the start date and end date of a record, the above is actually a tautology. This becomes obvious if we assume, without loss of generality, that &lt;code&gt;a&lt;/code&gt; = &lt;code&gt;b&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The correct solution is the intersection of events ending after &lt;code&gt;a&lt;/code&gt; and starting before &lt;code&gt;b&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT * FROM t WHERE t.end &amp;gt;= a AND t.start &amp;lt;= b
&lt;/code&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Losing My Religion and Switching to Linux</title>
   <link href="http://www.nhelke.com/2012/04/08/losing-my-religion.html"/>
   <updated>2012-04-08T00:00:00+00:00</updated>
   <id>http://www.nhelke.com/2012/04/08/losing-my-religion</id>
   <content type="html">&lt;h1 id=&quot;Losing+My+Religion+and+Switching+to+Linux&quot;&gt;Losing My Religion and Switching to Linux&lt;/h1&gt;

&lt;p&gt;Up until now I have been a religious Mac user; but recently for a variety of reasons I have strayed from my faith. My new-found atheism helped me realise that there is no best or right platform and there may not even be a single platform that can satisfy all your needs alone; each platform has its stregnths and weaknesses.&lt;/p&gt;

&lt;p&gt;I have been contemplating switching to Linux every since I started reading computer science, however I was never able to make the switch until now, as I was operating under the illusion that switching was binary. I hadn&amp;rsquo;t yet realised that I can mix and match and that this is sometimes the best thing to do.&lt;/p&gt;

&lt;p&gt;I plan to switch from my MacBook Pro to a Lenovo X220 running Linux by the end of the summer. (For obvious reasons, I am not inclinded to make this change mid-semester.) I will keep my MacBook for Cocoa development and as my digital hub.&lt;/p&gt;

&lt;p&gt;As a student of computer science I am torn between my necessity to have a reliable workstation and a desire to try the latest technologies. I have long been following the development of ZFS and now &lt;em&gt;btrfs&lt;/em&gt;, unable to use the fantastic feeatures these filesystems offer, as I was running Mac OS X. By switching to Linux I will be able to take advantage of &lt;em&gt;btrfs&lt;/em&gt; and in particular its snapshoting feature which will enable me to live dangerously close to the edge, yet always be but a reboot away from a safe copy of my system.&lt;/p&gt;

&lt;p&gt;I will miss the perfect integration between software and hardware that only Apple could provide. I will not, however, miss the infuriating sense of insignificance and impotence felt on the rare occasions when things would go wrong, and Apple would take all the time in the world to fix them. If, indeed, they ever did get around to solving &lt;a href=&quot;http://www.ultrajoke.net/2011/09/cftree-leaks-its-children/&quot; title=&quot;CFTree Is Leaking It's Children&quot;&gt;the problem&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On Linux I am likely going to spend countless hours getting things to work. I should not, however, experience major upgrades that render my precious configurations void, as happens all too often with commercial software. And if something goes wrong, I can debug the software myself.&lt;/p&gt;

&lt;p&gt;I will not miss the faux-interfaces Apple has been using left, right and center of late. I will miss Apple&amp;rsquo;s legendary battery-life. In fact this was another factor that kept me from switching to Linux sooner. Fortunately it would appear that with correct configuration it is possible to get &lt;a href=&quot;http://cataclysmicmutation.com/2012/01/arch-linux-on-the-lenovo-thinkpad-x220/&quot; title=&quot;Arch Linux on the Lenovo Thinkpad x220&quot;&gt;7:00–7:30 of battery-life out of the 6-cell battery of the X220&lt;/a&gt;. I should, therefore, get around 10 hours out of the 9-cell battery, which is more than the 7–8 hours I currently get from my MacBook.&lt;/p&gt;

&lt;p&gt;Just to round off my solution, I will continue to use Windows in a virtual machine occasionally and I must say that Windows 7 is the best Windows to date and really not that bad at all. Microsoft really out did themselves.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;P.S. I am looking for a good blog post written several years ago about a longtime Mac user&amp;rsquo;s switching to Linux for future-proofing reasons. He wanted to keep his hardware for longer than commercial companies would support. I seem to remember he also mentioned the headache of converting proprietary file formats and in particular ClarisWorks. Free beer and your name here, if you write in with the right reference.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Why Apple is Right to Discontinue the Xserve</title>
   <link href="http://www.nhelke.com/2010/11/08/xserve-discontinuation.html"/>
   <updated>2010-11-08T00:00:00+00:00</updated>
   <id>http://www.nhelke.com/2010/11/08/xserve-discontinuation</id>
   <content type="html">&lt;h1 id=&quot;Why+Apple+is+Right+to+Discontinue+the+Xserve&quot;&gt;Why Apple is Right to Discontinue the Xserve&lt;/h1&gt;

&lt;p&gt;As Gruber notes in &lt;a href=&quot;http://daringfireball.net/linked/2010/11/05/xserve&quot;&gt;Apple Shitcans the Xserve&lt;/a&gt;, the writing has indeed been
on the wall for Xserve for a while. That being said, I am sad to see it go. As
you may have gathered from the title of this article, that isn&amp;rsquo;t to say that
Apple is wrong to discontinue the Xserve.&lt;/p&gt;

&lt;h2 id=&quot;Xserve+and+the+Old+Server+Paradigm&quot;&gt;Xserve and the Old Server Paradigm&lt;/h2&gt;

&lt;p&gt;The Xserve was beginging to show its age. I&amp;rsquo;m not referring to its
older-generation Xeon architecture. I refer to the whole server design as
a whole. The Xserve for instance supports dual power supply and is generally
designed to be as reliable as is possible for a single machine.&lt;/p&gt;

&lt;p&gt;The current paradigm–pioneered by Google–is to use cheap consumer hardware and
obtain reliability through horizontal scaling or multiplication of machines. So
it is possible to use many Mac minis to replace a few Xserves with the added
advantages of each mini being more power efficient and more machines working
together being more fault tolerant than a single very reliable machine.&lt;/p&gt;

&lt;h2 id=&quot;Mac+mini+and+the+Small+and+Medium+Enterprise&quot;&gt;Mac mini and the Small and Medium Enterprise&lt;/h2&gt;

&lt;p&gt;Apple notes several times in their &lt;a href=&quot;http://images.apple.com/xserve/pdf/L422277A_Xserve_Guide.pdf&quot;&gt;Xserve Transition Guide&lt;/a&gt; that by far
their most successful server product is the Mac mini and that it can easily meet
the needs of up to 50 people, i.e. small and medium enterprises. It would appear
that while the Mac mini&amp;rsquo;s future isn&amp;rsquo;t necessarily bright, its future as
a server is guaranteed for the foreseeable future.&lt;/p&gt;

&lt;h2 id=&quot;Mac+Pro+and+the+Larger+Enterprise&quot;&gt;Mac Pro and the Larger Enterprise&lt;/h2&gt;

&lt;p&gt;In the age of decentralisation, P2P and contingency planning, some larger
enterprises are  transitioning from big company wide server farms to local work
group servers–a market that the Mac mini, as noted above, fits into.&lt;/p&gt;

&lt;p&gt;Still there are plenty of reasons for larger companies to need more than a handful
of Mac minis. Apple notes in their &lt;a href=&quot;http://images.apple.com/xserve/pdf/L422277A_Xserve_Guide.pdf&quot;&gt;Transition Guide&lt;/a&gt; the possibility of
switching to the Mac Pro if more raw power is needed. In fact the Mac Pro is
equal to or faster than the Xserve on all &amp;ldquo;Typical Server Tasks&amp;rdquo;. Apple does
note, however, that the &amp;ldquo;Mac Pro is a viable server alternative to Xserve except
where the high-density 1U rackmount form factor is required.&amp;rdquo; (Two Mac Pro&amp;rsquo;s on
a shelf, side by side, are 12U high.)&lt;/p&gt;

&lt;p&gt;Large companies needing power will typically need high-desity, so this solution,
although mentioned by Apple, cannot be taken seriously. The fact that Apple even
suggests this is a sign that Xserves were rarely deployed in large numbers.&lt;/p&gt;

&lt;h2 id=&quot;Xserve+and+the+Dog+Food+Test&quot;&gt;Xserve and the Dog Food Test&lt;/h2&gt;

&lt;p&gt;Xserves were never taken seriously by enterprises. They did not even pass the
dog food test as even Apple doesn&amp;rsquo;t use them for all their needs. In particular
as can be seen in &lt;a href=&quot;http://appadvice.com/appnn/2010/02/steve-jobs-iphone-still-running-on-3-1-2-firmware/&quot;&gt;email headers from Steve Jobs&lt;/a&gt;, Apple uses Sun Java
System Messaging Servers. It is therefore relatively unsurprising that Apple is
abandoning the Xserve.&lt;/p&gt;

&lt;p&gt;This does, however, leave one wondering whether Apple is abandoning this market
completely or whether they have something else up their sleeve. I am sure some
analysts out there will write about how Apple should be using its success in the
consumer world to go and conquer the enterprise and therefore should not be
discontinuing the Xserve.&lt;/p&gt;

&lt;p&gt;My response: Apple never released sales numbers for the Xserve. Apple has, since
Jobs' return, shown very good market judgement with the notable exceptions of
Apple TV and now the Xserve. Therefore if Apple abandons the Xserve it is safe
to say the market is not worth it, or there is an alternative market that Apple
is preparing to take by storm.&lt;/p&gt;

&lt;h2 id=&quot;Cloud+Apples&quot;&gt;Cloud Apples&lt;/h2&gt;

&lt;p&gt;MacBidouille has theorized that &lt;a href=&quot;http://www.macbidouille.com/news/2010/11/06/l-abandon-du-xserve-premiere-pierre-d-une-nouvelle-strategie-d-apple&quot;&gt;Apple is going to join the cloud computing
bandwagon&lt;/a&gt; and let virtual Mac servers. This theory does not
strike me as totally impossible.  &lt;a href=&quot;http://daringfireball.net/linked/2010/10/22/gosling-java-mac-os-x&quot;&gt;Gruber&amp;rsquo;s note in passing&lt;/a&gt;, that he
doesn&amp;rsquo;t think Apple is using Apple hardware to build their new data centre in
North Carolina, does not contradict this theory–it is just
more failing of the dog food test. Now that Mac OS X runs on Intel there is nothing
stopping Mac virtualization. In fact Oracle&amp;rsquo;s VirtualBox already &lt;a href=&quot;http://www.virtualbox.org/wiki/Guest_OSes&quot;&gt;does&lt;/a&gt;,
albeit only on Mac hardware. This is, however, a legal limitation that Apple
themselves can circumvent.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;I&amp;rsquo;m not convinced Apple is preparing to enter the highly competitive cloud
server market. What I am sure of is, whether they do or they don&amp;rsquo;t, it&amp;rsquo;s the
right decision.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Rules of Reference</title>
   <link href="http://www.nhelke.com/2010/10/24/rules-of-reference.html"/>
   <updated>2010-10-24T00:00:00+00:00</updated>
   <id>http://www.nhelke.com/2010/10/24/rules-of-reference</id>
   <content type="html">&lt;h1 id=&quot;Rules+of+Reference&quot;&gt;Rules of Reference&lt;/h1&gt;

&lt;h2 id=&quot;Abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;The web is clearly taking over as the unique publishing medium of more and more
original content. Unfortunately all too often, this original content changes
URLs or worse, actually disappears. It is of paramount concern that we ensure the
continued existence and accessibility of this original content. This
conservation is the responsibility of the publishers. These Rules of Reference
describe this site&amp;rsquo;s URL and content retention policy as well as guidelines for
reliably referencing content from this site.&lt;/p&gt;

&lt;h2 id=&quot;Rules+of+Reference&quot;&gt;Rules of Reference&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;This site maintains two discrete URL sets, public URLs and private URLs. Much
like private APIs, the private URLs are not so much secret as they are
undocumented and liable to change.&lt;/li&gt;
&lt;li&gt;This site&amp;rsquo;s public URLs are of the form
&lt;code&gt;/year/month/day/title.html&lt;/code&gt;
e.g. &lt;code&gt;/2010/10/24/rules-of-reference.html&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You may freely reference content in the public URL set of this site,
hereafter articles.&lt;/li&gt;
&lt;li&gt;The articles on this website will continue to be available for the
foreseeable future at the same URL without alterations beyond errata.&lt;/li&gt;
&lt;li&gt;Additionally this site believes that the layout and styles form part of
the content. This site therefore pledges not to alter the surrounding
layout beyond site wide announcements in the footer or header.&lt;/li&gt;
&lt;li&gt;This site reserves reserves the right to edit the code of articles without
affecting their content, to accommodate the relocation of assets to a Content
Distribution Network (CDN) for instance.&lt;/li&gt;
&lt;li&gt;Assets, such as figures, included in articles should never be referenced
directly. Always reference the article and optionally the specific section
thereof, as the assets do not belong to the public URL set and are liable to
move. Assets might for instance be moved to a CDN.&lt;/li&gt;
&lt;/ol&gt;

</content>
 </entry>
 
 <entry>
   <title>Maintaining Access and Full Redundancy While Growing a ZFS Pool</title>
   <link href="http://www.nhelke.com/2009/12/08/migrate-zpool.html"/>
   <updated>2009-12-08T00:00:00+00:00</updated>
   <id>http://www.nhelke.com/2009/12/08/migrate-zpool</id>
   <content type="html">  &lt;h1&gt;Maintaining Access and Full Redundancy While Growing a ZFS Pool&lt;/h1&gt;
  &lt;div&gt;8 December 2009&lt;/div&gt;
  &lt;h2&gt;Preamble&lt;/h2&gt;
  &lt;p&gt;I previously wrote about &lt;a href=&quot;/2009/10/19/zpool.html&quot; title=&quot;Using Different Interfaces to Improve Redundancy in a RAID Setup&quot;&gt;using different interfaces to improve redundancy in a RAID setup&lt;/a&gt;. One point which I did not clear up in the said article is why I choose to use striped mirrors. The choice was purely motivated by my desire to scale flexibly. I weighted the increased capacity of parity redundancy against the simplicity of a RAID 10 like setup. Additionally, I happened to have pairs of disks of equatable size and not 3-tuples as needed by parity RAID levels.&lt;/p&gt;
  &lt;p&gt;I should point out that in the previous article for simplicity’s sake I marked the drive capacities as the minimum size of the tuples. For instance, instead of two 320 GB drives I actually have a 320 and a 400.&lt;/p&gt;
  &lt;h2&gt;Growing My Storage Pool&lt;/h2&gt;
  &lt;p&gt;I recently came into two external USB drives, one of 1 TB and one of 250 GB. I decided to take this opportunity to grow my storage pool.&lt;/p&gt;
  &lt;p&gt;Before upgrading, my storage pool was as follows:&lt;/p&gt;
&lt;pre&gt;
Storage Pool:
  320 GB Mirror
    320 GB USB
    400 GB ATA
  640 GB Mirror
    640 GB SATA
    640 GB USB
  120 GB Mirror
    120 GB SATA
    160 GB ATA
&lt;/pre&gt;
  &lt;p&gt;I had no intension of taking these newly received disks out of their USB cases so other disks would have to be moved to maintain the &lt;a href=&quot;/2009/10/19/zpool.html&quot; title=&quot;Using different interfaces to improve redundancy in a RAID setup&quot;&gt;interface redundancy&lt;/a&gt; while increasing the capacity of the pool.&lt;/p&gt;
  &lt;p&gt;First I drew up the optimal setup for including the new drives. Rather than show that to you straight away and risk loosing you in all the changes, let me take you through the steps I took to perform the upgrade while maintaining access and full redundancy.&lt;/p&gt;
&lt;p&gt;I started by adding the 1 TB drive to my largest mirror thereby minimizing the wasted capacity of the 1 TB drive.&lt;/p&gt;
&lt;pre&gt;
Storage Pool:
  320 GB Mirror
    320 GB USB
    400 GB ATA
  640 GB Mirror
    640 GB SATA
    640 GB USB
    &lt;ins&gt;1 TB USB&lt;/ins&gt;
  120 GB Mirror
    120 GB SATA
    160 GB ATA
&lt;/pre&gt;
&lt;p&gt;After this setup had re-silvered—that is the term used by ZFS for coping data onto new drives—I moved the USB 640 GB to the second largest mirror and attached it via SATA.&lt;/p&gt;
&lt;pre&gt;
Storage Pool:
  320 GB Mirror
    320 GB USB
    400 GB ATA
    &lt;ins&gt;640 GB SATA&lt;/ins&gt;
  640 GB Mirror
    640 GB SATA
    &lt;del&gt;640 GB USB&lt;/del&gt;
    1 TB USB
  120 GB Mirror
    120 GB SATA
    160 GB ATA
&lt;/pre&gt;
&lt;p&gt;You should note that at no time was redundancy compromised. The only downtime was the time it took me to slide the 640 GB into a vacant 3.5” slot and plug in the SATA cable and power. Re-silvering does not prevent disk access while it completes.&lt;/p&gt;
&lt;pre&gt;
Storage Pool:
  &lt;del&gt;320&lt;/del&gt;&lt;ins&gt;400&lt;/ins&gt; GB Mirror
    &lt;del&gt;320 GB USB&lt;/del&gt;
    400 GB ATA
    640 GB SATA
  640 GB Mirror
    640 GB SATA
    1 TB USB
  120 GB Mirror
    120 GB SATA
    160 GB ATA
    &lt;ins&gt;320 GB USB&lt;/ins&gt;
&lt;/pre&gt;
&lt;p&gt;This transform brings the first capacity increase. By moving the 320 GB drive to the smallest mirror, the minimal capacity in the medium mirror goes up to 400 GB.&lt;/p&gt;
&lt;pre&gt;
Storage Pool:
  400 GB Mirror
    400 GB ATA
    640 GB SATA
  640 GB Mirror
    640 GB SATA
    1 TB USB
  &lt;del&gt;120&lt;/del&gt;&lt;ins&gt;160&lt;/ins&gt; GB Mirror
    &lt;del&gt;120 GB SATA&lt;/del&gt;
    160 GB ATA
    320 GB USB
&lt;/pre&gt;
&lt;p&gt;This step simply adds 40 GB capacity by cutting back on some superfluous redundancy.&lt;/p&gt;
&lt;pre&gt;
Storage Pool:
  400 GB Mirror
    400 GB ATA
    640 GB SATA
  640 GB Mirror
    640 GB SATA
    1 TB USB
  &lt;del&gt;160&lt;/del&gt;&lt;ins&gt;250&lt;/ins&gt; GB Mirror
    &lt;del&gt;160 GB ATA&lt;/del&gt;
    &lt;ins&gt;250 GB USB&lt;/ins&gt;
    320 GB USB
&lt;/pre&gt;
&lt;p&gt;In this step we replace the 160 GB drive by the aforementioned 250, thereby increasing this mirror capacity by an additional 90 GB. You will note, however, this breaks the interface redundancy as the mirror is solely reliant on USB. We fix this in the final step where we briefly shut down the server (for the second time) to install the 320 USB disk into a free ATA 3.5” slot.&lt;/p&gt;
&lt;pre&gt;
Storage Pool:
  400 GB Mirror
    400 GB ATA
    640 GB SATA
  640 GB Mirror
    640 GB SATA
    1 TB USB
  250 GB Mirror
    250 GB USB
    320 GB &lt;del&gt;USB&lt;/del&gt;&lt;ins&gt;ATA&lt;/ins&gt;
&lt;/pre&gt;
&lt;p&gt;You will note that in these steps the two smallest drives were removed and that two of the other drives were moved to maximize capacity increase and maintain interface redundancy.&lt;/p&gt;
  &lt;p&gt;The total capacity increase is only 80+40+90 = 210 GB, bringing the new capacity to 1.26 TB. It should, however, be noted that new setup is ready to receive another 1 TB drive, which through another cascade of disk movements, could yield as much as an additional 694 GB or a total capacity of 1.94 TB.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Magic Mouse</title>
   <link href="http://www.nhelke.com/2009/10/23/magicmouse.html"/>
   <updated>2009-10-23T00:00:00+00:00</updated>
   <id>http://www.nhelke.com/2009/10/23/magicmouse</id>
   <content type="html">  &lt;h1 class=&quot;title&quot;&gt;Magic Mouse&lt;/h1&gt;
  &lt;div class=&quot;date&quot;&gt;23 October 2009&lt;/div&gt;
  &lt;p&gt;First off I would like to say I disapprove of the name. I also disapproved of the name Mighty Mouse. Somehow both names strike me as being more Disney or Pixar than Apple.&lt;/p&gt;
  &lt;p&gt;I like the new Mouse. I would have ordered one already except for the fact it lacks a couple of important pro features. That said, with a bit of luck Apple can fix them with firmware/software.&lt;/p&gt;
  &lt;p&gt;This being an Apple mouse there is no secondary click, that is until you activate it in the System Preferences, but once you’ve done that, the secondary click on the Magic mouse works as expected. There is one glitch. A glitch which I am sad to say already plagued the Mighty Mouse. You cannot both right and left click at the same time. This is only a problem when operating the rocket launcher in Unreal Tournament, as far as I know.&lt;/p&gt;
  &lt;p&gt;The fact that it doesn’t have a third button—you know the one when your click the scroll wheel—is more of an issue. Perhaps it has something to do with the fact that the whole mouse is scroll wheel or surface and a cool one at that—I particularly like the momentum effect when scroll—just like on the iPhone. A solution to the third click could be to map clicking with two fingers on the mouse to a third button.&lt;/p&gt;
  &lt;p&gt;One feature the mouse has, but which I found hard to operate was the two finger left-right swipe to navigate back and forward. This equates to the three finger swipe on an Apple trackpad—isn’t it odd that Apple would be inconsistent. I never like this gesture or feature and am pleased to report that this feature can be turned off.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Using different interfaces to improve redundancy in a RAID setup</title>
   <link href="http://www.nhelke.com/2009/10/19/zpool.html"/>
   <updated>2009-10-19T00:00:00+00:00</updated>
   <id>http://www.nhelke.com/2009/10/19/zpool</id>
   <content type="html">  &lt;h1&gt;Using different interfaces to improve redundancy in a RAID setup&lt;/h1&gt;
  &lt;div&gt;19 October 2009&lt;/div&gt;
  &lt;p&gt;I have been managing for close to two months a little, 6 drive, ZFS pool. The pools is made up of three mirrors, equatable with RAID 10 setup. I build the setup with what drives I had so they were spread over the SATA, ATA and USB interfaces, as follows:&lt;/p&gt;
&lt;pre class=&quot;zpooldiagram&quot;&gt;
&lt;em&gt;SATA&lt;/em&gt;       &lt;em&gt;USB&lt;/em&gt;
 120      320  640 – 640
    \     /
    120 320
      &lt;em&gt;ATA&lt;/em&gt;
&lt;/pre&gt;
  &lt;p&gt;This morning my ZFS pool suffered its first disk failure (cf. &lt;a href=&quot;http://twitter.com/nHelke/status/4987464408&quot;&gt;Twitter&lt;/a&gt;). One of my 640&amp;nbsp;GB USB drives failed. My other 640 was exactly the same model, so I was concerned that it too might fail before I got a chance to replace and resilver the first one that failed. Additionally I started thinking about what might happen if there was a catastrophic USB interface failure. Something like an inadvertent unplugging of both 640 drives. The above figure illustrates quite clearly how the 640s are solely dependent on the USB interface.&lt;/p&gt;
  &lt;p&gt;I decided to fix this single fail point by connecting the replacement 640 to the SATA interface, as follows:&lt;/p&gt;
&lt;pre class=&quot;zpooldiagram&quot;&gt;
  640 – 640
&lt;em&gt;SATA&lt;/em&gt;      &lt;em&gt;USB&lt;/em&gt;
120        320
  \        /
  120    320
     &lt;em&gt;ATA&lt;/em&gt;
&lt;/pre&gt;
  &lt;p&gt;The new setup is particularly robust. Any one interface can fail without service interruption and up to three drives can fail simultaneously as long as they all belong to different mirrored sets.&lt;/p&gt;
  &lt;p&gt;As it happens all is well that ends well. The failed drive turned out to be a failed case, so I was able to rescue the SATA drive from inside the case and with a quick restart—to install the drive internally—get the pool back to ONLINE state. It is worth noting that the pool never fell below a DEGRADED state.&lt;/p&gt;
  &lt;p&gt;The failure today is in fact the second premature case failure I have experienced with the WD AAKS enclosure. So I would recommend avoiding that model. Also, in general it is always worth checking when an external drive fails whether the internal drive is still viable or whether the case is still viable with a new internal disk.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>View from Mont Fort</title>
   <link href="http://www.nhelke.com/2008/12/29/montfort.html"/>
   <updated>2008-12-29T00:00:00+00:00</updated>
   <id>http://www.nhelke.com/2008/12/29/montfort</id>
   <content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;
	&quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;

&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
	&lt;title&gt;View from Mont Fort&lt;/title&gt;
	&lt;meta name=&quot;generator&quot; content=&quot;TextMate http://macromates.com/&quot;&gt;
	&lt;meta name=&quot;author&quot; content=&quot;Nicholas Helke&quot;&gt;
	&lt;!-- Date: 2008-12-29 --&gt;
	&lt;style type=&quot;text/css&quot; media=&quot;screen&quot;&gt;
	html {
		font: 12px Helvetica, Arial, sans-serif;
	}
	h1 {
		font-size: 20px;
	}
	img#panorama {
		width: 100%;
	}
	&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;Mont Fort&lt;/h1&gt;
	&lt;img id=&quot;panorama&quot; src=&quot;/2008/12/29/MontFort.jpg&quot; alt=&quot;MontFort&quot;&gt;
&lt;/body&gt;
&lt;/html&gt;
</content>
 </entry>
 
 <entry>
   <title>KLM Image Sequences</title>
   <link href="http://www.nhelke.com/2008/08/02/klm_image_sequences.html"/>
   <updated>2008-08-02T00:00:00+00:00</updated>
   <id>http://www.nhelke.com/2008/08/02/klm_image_sequences</id>
   <content type="html">	&lt;h1&gt;KLM Image Sequences&lt;/h1&gt;

	&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
	QT_WritePoster_XHTML('Click to Play', 'KLM%20arriving%20in%20SFO-poster.jpg',
		'KLM%20arriving%20in%20SFO.mov',
		'640', '496', '',
		'controller', 'true',
		'autoplay', 'true',
		'bgcolor', 'black',
		'scale', 'aspect');
	//--&gt;
	&lt;/script&gt;
	&lt;noscript&gt;
		&lt;object width=&quot;640&quot; height=&quot;496&quot; classid=&quot;clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B&quot; codebase=&quot;http://www.apple.com/qtactivex/qtplugin.cab&quot;&gt;
			&lt;param name=&quot;src&quot; value=&quot;/2008/08/02/KLM%20arriving%20in%20SFO-poster.jpg&quot; /&gt;
			&lt;param name=&quot;href&quot; value=&quot;/2008/08/02/KLM%20arriving%20in%20SFO.mov&quot; /&gt;
			&lt;param name=&quot;target&quot; value=&quot;myself&quot; /&gt;
			&lt;param name=&quot;controller&quot; value=&quot;false&quot; /&gt;
			&lt;param name=&quot;autoplay&quot; value=&quot;false&quot; /&gt;
			&lt;param name=&quot;scale&quot; value=&quot;aspect&quot; /&gt;
			&lt;embed width=&quot;640&quot; height=&quot;496&quot; type=&quot;video/quicktime&quot; pluginspage=&quot;http://www.apple.com/quicktime/download/&quot;
				src=&quot;/2008/08/02/KLM%20arriving%20in%20SFO-poster.jpg&quot;
				href=&quot;/2008/08/02/KLM%20arriving%20in%20SFO.mov&quot;
				target=&quot;myself&quot;
				controller=&quot;false&quot;
				autoplay=&quot;false&quot;
				scale=&quot;aspect&quot;&gt;
			&lt;/embed&gt;
		&lt;/object&gt;
	&lt;/noscript&gt;

	&lt;br&gt;		

	&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
	QT_WritePoster_XHTML('Click to Play', 'Jetway%20deploying-poster.jpg',
		'Jetway%20deploying.mov',
		'640', '496', '',
		'controller', 'true',
		'autoplay', 'true',
		'bgcolor', 'black',
		'scale', 'aspect');
	//--&gt;
	&lt;/script&gt;
	&lt;noscript&gt;
		&lt;object width=&quot;640&quot; height=&quot;496&quot; classid=&quot;clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B&quot; codebase=&quot;http://www.apple.com/qtactivex/qtplugin.cab&quot;&gt;
			&lt;param name=&quot;src&quot; value=&quot;/2008/08/02/Jetway%20deploying-poster.jpg&quot; /&gt;
			&lt;param name=&quot;href&quot; value=&quot;/2008/08/02/Jetway%20deploying.mov&quot; /&gt;
			&lt;param name=&quot;target&quot; value=&quot;myself&quot; /&gt;
			&lt;param name=&quot;controller&quot; value=&quot;false&quot; /&gt;
			&lt;param name=&quot;autoplay&quot; value=&quot;false&quot; /&gt;
			&lt;param name=&quot;scale&quot; value=&quot;aspect&quot; /&gt;
			&lt;embed width=&quot;640&quot; height=&quot;496&quot; type=&quot;video/quicktime&quot; pluginspage=&quot;http://www.apple.com/quicktime/download/&quot;
				src=&quot;/2008/08/02/Jetway%20deploying-poster.jpg&quot;
				href=&quot;/2008/08/02/Jetway%20deploying.mov&quot;
				target=&quot;myself&quot;
				controller=&quot;false&quot;
				autoplay=&quot;false&quot;
				scale=&quot;aspect&quot;&gt;
			&lt;/embed&gt;
		&lt;/object&gt;
	&lt;/noscript&gt;

	&lt;p&gt;These sequences where constructed using QuickTime Pro from photos taken on an iPhone 3G.&lt;/p&gt;

	&lt;p&gt;Go checkout the photo extracted from the first sequence &lt;a href=&quot;http://flickr.com/photos/nhelke/2723827360/&quot;&gt;on Flickr&lt;/a&gt;. And leave a comment if you feel up to it.&lt;/p&gt;

</content>
 </entry>
 
 
</feed>

