<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Jason Madigan</title>
  <subtitle>He&#39;s just zis guy, ya know?</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://jasonmadigan.com/"/>
  <updated>2017-07-03T16:06:27.000Z</updated>
  <id>http://jasonmadigan.com/</id>
  
  <author>
    <name>Jason Madigan</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Holiday time - bulk declining Google Calendar events</title>
    <link href="http://jasonmadigan.com/2017/07/03/declining-google-calendar-events-en-masse/"/>
    <id>http://jasonmadigan.com/2017/07/03/declining-google-calendar-events-en-masse/</id>
    <published>2017-07-03T19:00:00.000Z</published>
    <updated>2017-07-03T16:06:27.000Z</updated>
    
    <content type="html">&lt;p&gt;I’m getting married in a few weeks, so recently I wanted a way to decline about 3 weeks worth of Google Calendar events en-masse. Since I was using Google Apps for our organisation’s calendar, I found the easiest way to accomplish this was to bust out some &lt;a href=&quot;https://www.google.com/script/start/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Google Apps Scripting&lt;/a&gt;, which lets you script a number of Google Apps in your domain, including the [Calendar](&lt;a href=&quot;https://developers.google.com/apps-script/reference/calendar/calendar-event&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;https://developers.google.com/apps-script/reference/calendar/calendar-event&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;See an example below on how to bulk decline Google Calendar events using Google Apps Scripting - you’ll just need a calendar name &amp;amp; a date range and run this via the script console:&lt;/p&gt;
&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;GCalHoliday&lt;/span&gt;(&lt;span class=&quot;params&quot;&gt;&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; fromDate = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;Date&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;July 17, 2017 00:00:00 +0100&#39;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; toDate = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;Date&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;August 8, 2017 23:30:00 +0100&#39;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; calendarName = &lt;span class=&quot;string&quot;&gt;&#39;&amp;lt;Your Calendar - e.g. joe@bloggs.com&amp;gt;&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; calendar = CalendarApp.getCalendarsByName(calendarName)[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; events = calendar.getEvents(fromDate, toDate, &amp;#123;&amp;#125;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  Logger.log(&lt;span class=&quot;string&quot;&gt;&#39;Events: &#39;&lt;/span&gt; + events.length);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;; i &amp;lt; events.length; i++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; ev = events[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;// try/catch for setting status - may get exceptions where events &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;// are on calendar, but user is not a &quot;guest&quot; of the event - these can be ignored&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;try&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;comment&quot;&gt;// !!!&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;comment&quot;&gt;// ev.setMyStatus(CalendarApp.GuestStatus.NO); // Uncomment to actually update status&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;comment&quot;&gt;// !!!&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125; &lt;span class=&quot;keyword&quot;&gt;catch&lt;/span&gt; (e) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      Logger.log(&lt;span class=&quot;string&quot;&gt;&#39;Error updating event status &#39;&lt;/span&gt; + e);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    Logger.log(&lt;span class=&quot;string&quot;&gt;&#39;Item &#39;&lt;/span&gt; + ev.getTitle() + &lt;span class=&quot;string&quot;&gt;&#39; found on &#39;&lt;/span&gt; + ev.getStartTime() + &lt;span class=&quot;string&quot;&gt;&#39; marked as declined&#39;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
    
    <summary type="html">
    
      &lt;p&gt;I’m getting married in a few weeks, so recently I wanted a way to decline about 3 weeks worth of Google Calendar events en-masse. Since I
    
    </summary>
    
      <category term="scripting" scheme="http://jasonmadigan.com/categories/scripting/"/>
    
    
  </entry>
  
  <entry>
    <title>High Altitude Adventures - Part 3</title>
    <link href="http://jasonmadigan.com/2013/07/04/high-altitude-adventures-part-3/"/>
    <id>http://jasonmadigan.com/2013/07/04/high-altitude-adventures-part-3/</id>
    <published>2013-07-04T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;A few weeks ago, I was mostly ready to launch. We’d bought an N30 cylinder of Helium from &lt;a href=&quot;http://www.irishpartysupplies.ie&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Irish Party Supplies&lt;/a&gt;, containing 7.82m&amp;sup3; of Helium - enough for roughly two launches of a standard sized 1000g balloon. Previously, I’d thought hydrogen would be a better choice, but considering it was a first launch we decided to play it safe (after having a gas seller painstakingly explain the various ways in which Hydrogen tanks can explode).&lt;/p&gt;
&lt;p&gt;I’d also figured out the legals - the IAA didn’t seem to be able to grant permission to anyone other that Met Eireann, so rather than labour the point I decided to launch from Northern Ireland instead. I’m still not entirely sure if launches here are legal or not, but the IAA, who regulate our skies didn’t seem to be in a position to grant permission. The CAA in the UK have a procedure for weather balloon launches. So long as you heed their guidelines (which are very sensible), you have an excellent chance of being given permission. There also didn’t appear to be any issue with me being an Irish resident.&lt;/p&gt;
&lt;p&gt;Frequently checking the &lt;a href=&quot;http://habhub.org/predict/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;CUSF Landing Predictor&lt;/a&gt;, I finally happened upon a good weekend at the end of June. The winds were calm and a predicted landing that wasn’t in either the sea or a lake - all good! I contacted the CAA at short notice for permission to launch, and they were very helpful and prompt - I received permission documentation the following day.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/jason_madigan/9404557416/&quot; title=&quot;2013-06-28 15.44.08 by jason.madigan, on Flickr&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;&lt;img src=&quot;https://farm3.staticflickr.com/2816/9404557416_9a999e008c_z.jpg&quot; width=&quot;480&quot; height=&quot;640&quot; alt=&quot;2013-06-28 15.44.08&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My payload was complete - I’d bought a 42 inch Spherachute and a 1000g Hwoyee weather balloon from the good people at &lt;a href=&quot;http://randomaerospace.com/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Random Aerospace&lt;/a&gt;. I’d also sourced a small polystyrene payload box. For recording 1080p video, I finally settled on the excellent &lt;a href=&quot;http://www.amazon.co.uk/gp/product/B004AP9FSE/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=B004AP9FSE&amp;amp;linkCode=as2&amp;amp;tag=jasomadi-21&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Veho Muvi HD&lt;/a&gt; - the video captured turned out better than I’d ever imagined.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/jason_madigan/9401843329/&quot; title=&quot;2013-06-29 14.34.38 by jason.madigan, on Flickr&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5323/9401843329_38798db985_z.jpg&quot; width=&quot;480&quot; height=&quot;640&quot; alt=&quot;2013-06-29 14.34.38&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The launch was a great success, with most things working as planned. The vertical radiator of the antenna broke off while we quickly tied off the balloon after filling. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/jason_madigan/9404599560/&quot; title=&quot;2013-06-29 14.41.09 by jason.madigan, on Flickr&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5350/9404599560_22cbb44648_b.jpg&quot; width=&quot;768&quot; height=&quot;1024&quot; alt=&quot;2013-06-29 14.41.09&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/jason_madigan/9401831717/&quot; title=&quot;2013-06-29 15.00.04 by jason.madigan, on Flickr&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;&lt;img src=&quot;https://farm4.staticflickr.com/3691/9401831717_366f7ec9e8_b.jpg&quot; width=&quot;768&quot; height=&quot;1024&quot; alt=&quot;2013-06-29 15.00.04&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I thought this would mean we wouldn’t get any live telemetry during the flight. But as it turned out, because the balloon was high above the horizon with no obstacles in the way, the transmitter’s weak 10mW signal was received clearly throughout by us in the car with a little handheld receiver as we chased the balloon.&lt;/p&gt;
&lt;p&gt;While chasing, however, it become obvious that the GPS on board was not receiving updates, presumably because it had no lock. Although live telemetry was transmitted throughout the flight, without GPS data it wasn’t particularly interesting - the altitude was stuck at 4km. I’m still not entirely sure what failed, but my guess is that the active GPS antenna I used wasn’t working. The antenna was placed at the top of the payload box, which was quite close to the underbelly of the balloon. We’d tied things off quickly, so there was only about 6m between the payload box, the parachute and finally the balloon. I’d stowed a backup GPS tracker on board with GSM (redundancy!) which I’d hoped would give us a landing location in cse the primary tracker was no longer functional. I was able to call the GSM modem in the payload until sometime after the GPS lost it’s lock (~4km up), which was higher than I thought.&lt;/p&gt;
&lt;p&gt;Two and a half hours after launch, with the payload still transmitting the same 4km, I was able to call the payload once more - which meant it was descending and was close to landing. After about 30 minutes of frantic texting “where” over and over to the payload box, it finally responded with it’s actual location. After landing, the GPS had regained a lock. The backup tracker refused to give us it’s location throughout, presumably (I thought) because the payload box had tipped over. We raced towards the field where it had landed only to find that it had landed with some very curious cows. Eventually, after concocting a distraction, I managed to hop the gate and recover our payload - all in tact and still working.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/jason_madigan/9404572538/&quot; title=&quot;2013-06-29 19.24.35 by jason.madigan, on Flickr&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5525/9404572538_34abc379c5_b.jpg&quot; width=&quot;768&quot; height=&quot;1024&quot; alt=&quot;2013-06-29 19.24.35&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/jason_madigan/9404579646/&quot; title=&quot;2013-06-30 07.35.40 by jason.madigan, on Flickr&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7333/9404579646_7a9766f02e_b.jpg&quot; width=&quot;1024&quot; height=&quot;568&quot; alt=&quot;2013-06-30 07.35.40&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;Source&quot;&gt;&lt;a href=&quot;#Source&quot; class=&quot;headerlink&quot; title=&quot;Source&quot;&gt;&lt;/a&gt;Source&lt;/h2&gt;&lt;p&gt;Source for the Arduino Mega, Siemens TC35 serial GSM modem, RTTY transmission via the NTX2 is available &lt;a href=&quot;https://github.com/jasonmadigan/arduino-tracker&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;South-East-Maker-Space-Presentation&quot;&gt;&lt;a href=&quot;#South-East-Maker-Space-Presentation&quot; class=&quot;headerlink&quot; title=&quot;South East Maker Space Presentation&quot;&gt;&lt;/a&gt;South East Maker Space Presentation&lt;/h2&gt;&lt;p&gt;The good folks at the South East Maker space (&lt;a href=&quot;https://twitter.com/semakerspace&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;@semakerspace&lt;/a&gt;) invited me to talk about this recently. Slides are available &lt;a href=&quot;https://speakerdeck.com/jasonmadigan/high-altitude-adventures&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;A few weeks ago, I was mostly ready to launch. We’d bought an N30 cylinder of Helium from &lt;a href=&quot;http://www.irishpartysupplies.ie&quot; targ
    
    </summary>
    
      <category term="hab" scheme="http://jasonmadigan.com/categories/hab/"/>
    
    
  </entry>
  
  <entry>
    <title>High Altitude Adventures - Part 2</title>
    <link href="http://jasonmadigan.com/2013/04/24/high-altitude-adventures-part-2/"/>
    <id>http://jasonmadigan.com/2013/04/24/high-altitude-adventures-part-2/</id>
    <published>2013-04-24T21:20:00.000Z</published>
    <updated>2017-06-06T16:25:38.000Z</updated>
    
    <content type="html">&lt;p&gt;Following on from my previous post, I’m going to go into a little more detail as to what we’re planning and what I’ve built so far - hopefully it will be of interest!&lt;/p&gt;
&lt;p&gt;The payload (or safeload as I’m now calling it) is now complete. It consists of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/B007TQ6TSK/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=B007TQ6TSK&amp;amp;linkCode=as2&amp;amp;tag=jasomadi-21&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;An Arduino Mega 2560&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/B008FZIZUE/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=B008FZIZUE&amp;amp;linkCode=as2&amp;amp;tag=jasomadi-21&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;MTK3339 GPS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/B0084DP4CY/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=B0084DP4CY&amp;amp;linkCode=as2&amp;amp;tag=jasomadi-21&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Radiometrix NTX2&lt;/a&gt; (434.650MHz @ 10mW)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/B003XDQUQE/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=B003XDQUQE&amp;amp;linkCode=as2&amp;amp;tag=jasomadi-21&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Xexun TK102 GPS Tracker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/B004AP9FSE/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=B004AP9FSE&amp;amp;linkCode=as2&amp;amp;tag=jasomadi-21&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Veho Muvi HD 1080p Camcorder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/B006CHEUSI/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=B006CHEUSI&amp;amp;linkCode=as2&amp;amp;tag=jasomadi-21&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Siemens TC35 RS232 GSM modem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://dl.dropboxusercontent.com/u/1336005/blog/payload.jpg&quot; alt=&quot;Payload&quot; style=&quot;width: 700px;&quot;&gt;&lt;/p&gt;
&lt;p&gt;It took a while to piece together the kind of parts I needed. I originally thought I could use an old Arduino Diecimila that I had lying around, along with a nice EM406-A GPS module that I’d used before. Unfortunately, the Diecimila only had 16KB of flash (2KB taken by the bootloader), and it looked like I’d need at least 32KB.&lt;/p&gt;
&lt;p&gt;I bought an Uno and initally everything was going well - I had the EM406-A hooked up and was processing NMEA with relative ease, thanks to the great TinyGPS library. The NTX2 arrived a little later - this is when the problems began.&lt;/p&gt;
&lt;h2 id=&quot;Software-Serial-Ports&quot;&gt;&lt;a href=&quot;#Software-Serial-Ports&quot; class=&quot;headerlink&quot; title=&quot;Software Serial Ports&quot;&gt;&lt;/a&gt;Software Serial Ports&lt;/h2&gt;&lt;p&gt;I planned to transmit telemetry throughout the flight with the NTX2. To do this, I was going to use RTTY (simple frequency shift keying) to encode telemetry and transmit. This worked fine in isolation, so I then hooked up the GPS again and tried to send some telemetry. There were weird errors in the RTTY transmission that I spent a few days tracking down late at night. The problem in the end turned out to be the SoftwareSerial port I was using. &lt;/p&gt;
&lt;p&gt;Uno’s only come with one hardware UART, and it’s wired into the USB port via FTDI. It was available to use, but it’s fiddly and it’d mean swapping things around when it came to programming over USB (which I needed to do a lot of, since nothing worked!), so the EM-406A was hooked up via a software serial port. Arduino’s SoftwareSerial is interrupt driven so NMEA data coming in on the SoftwareSerial port would trigger an interupt - RTTY transmissions are timing sensitive, so these interrupts interfered with transmission and introduced errors. &lt;/p&gt;
&lt;p&gt;Once I’d figured out was going wrong, disabling interrupts and having a “quiet period” for RTTY transmissions seemed to mostly fix things. Half way through uncovering the fix, however, I got frustrated and ordered an Arduino Mega (which has 4 hardware UARTs). When the Mega arrived, things got a lot simpler - lots of complicated timing logic could be removed.&lt;/p&gt;
&lt;h2 id=&quot;RTTY&quot;&gt;&lt;a href=&quot;#RTTY&quot; class=&quot;headerlink&quot; title=&quot;RTTY&quot;&gt;&lt;/a&gt;RTTY&lt;/h2&gt;&lt;p&gt;I’ll post more about this later, but here’s a short video of an RTTY transmission of some telemetry:&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/v6Pq3bvAa8k&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Following on from my previous post, I’m going to go into a little more detail as to what we’re planning and what I’ve built so far - hope
    
    </summary>
    
      <category term="hab" scheme="http://jasonmadigan.com/categories/hab/"/>
    
    
  </entry>
  
  <entry>
    <title>High Altitude Adventures</title>
    <link href="http://jasonmadigan.com/2013/04/02/high-altitude-adventures/"/>
    <id>http://jasonmadigan.com/2013/04/02/high-altitude-adventures/</id>
    <published>2013-04-02T21:00:00.000Z</published>
    <updated>2017-06-06T16:25:31.000Z</updated>
    
    <content type="html">&lt;p&gt;A few weeks ago, I spied a video on YouTube via Reddit - some guys had gotten together and put some cameras high up into the atmosphere (100,000ft, ~30km). I looked at it and thought it seemed like a good use of time. I got talking to &lt;a href=&quot;http://blog.danielvagg.com/blog/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;a friend of mine&lt;/a&gt; at work about the possibilites of launching something like this from Ireland. As it turned out, some people from launched successfully from Kerry &lt;a href=&quot;https://www.youtube.com/watch?v=cqGoFAts1ag&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;a few years back&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My initial plan was to launch something simple: a helium filled 800g balloon with some kind of cheap Android phone taking snaps every now and then. After watching lots of YouTube footage, and lots scouring through resources such the &lt;a href=&quot;http://ukhas.org.uk/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;UK High Altitude Society&lt;/a&gt;, our plans evolved. Dan was keen for a more elaborate payload (it involves a fixed wing glider, some servos and a death spiral - I’m sure he’ll tell you all about it). Eventually we settled on the idea of sending two payloads on one flight.&lt;/p&gt;
&lt;h2 id=&quot;Initial-Questions&quot;&gt;&lt;a href=&quot;#Initial-Questions&quot; class=&quot;headerlink&quot; title=&quot;Initial Questions&quot;&gt;&lt;/a&gt;Initial Questions&lt;/h2&gt;&lt;p&gt;One of the first things that I wanted answering was whether or not it was actually legal to launch a high altitude balloon in Irish airspace. &lt;del&gt;As it turns out, the IAA have a pretty comprehensive document on the subject &lt;a href=&quot;https://www.iaa.ie/library_download.jsp?libraryID=213&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;here&lt;/a&gt;. I’ve yet to receive permission to launch from them, but I am hopeful.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; the IAA were very firm in giving a “No” to any such launch. Apparently they’ve only ever given permission for such launches to Met Éireann. Disappointing, but the CAA in the UK granted me permission to launch in Northern Ireland and were far more helpful.&lt;/p&gt;
&lt;h2 id=&quot;Problems&quot;&gt;&lt;a href=&quot;#Problems&quot; class=&quot;headerlink&quot; title=&quot;Problems&quot;&gt;&lt;/a&gt;Problems&lt;/h2&gt;&lt;p&gt;In the first few days, with some whiteboarding during lunches and late night conversations, we came up against some issues.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Initially, Android devices looked like a good idea for simple flight computers. We had some ideas to develop some &lt;a href=&quot;http://www.feedhenry.com&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;FeedHenry&lt;/a&gt; powered Apps to record and relay basic telemetry to a Node.js app - we’d use WebSockets to pipe data back in realtime. Knowing how flakey your average cellular data network is, I had my doubts this would work. A bigger problem, though, was that GSM was unlikely to work at anywhere near the altitudes we were interested in.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We largely started out with no idea of how much this was likely to cost. Our guestimates of maybe €200 each were blown in the first week of parts acquisition (for me at least).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Lifting-Gas&quot;&gt;&lt;a href=&quot;#Lifting-Gas&quot; class=&quot;headerlink&quot; title=&quot;Lifting Gas&quot;&gt;&lt;/a&gt;Lifting Gas&lt;/h2&gt;&lt;p&gt;Helium looked like the best lifting gas, since it was inert and it’s relatively cheap. Or it was - this isn’t the case anymore. Poking around, we found many places offering balloon helium for party balloons. This, as it turned out, wasn’t good enough for our purposes. Your average party balloon gas is only about 30% helium - the rest is usually air. We’d heard some estimates from others that 9cubic meters of industrial helium from BOC costs about €600 (including tank rental) - which is pretty extraordinary.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;A few weeks ago, I spied a video on YouTube via Reddit - some guys had gotten together and put some cameras high up into the atmosphere (
    
    </summary>
    
      <category term="hab" scheme="http://jasonmadigan.com/categories/hab/"/>
    
    
  </entry>
  
  <entry>
    <title>Jekyll</title>
    <link href="http://jasonmadigan.com/2013/03/02/jekyll/"/>
    <id>http://jasonmadigan.com/2013/03/02/jekyll/</id>
    <published>2013-03-02T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;Way back in November, 2008, I read an &lt;a href=&quot;http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;article&lt;/a&gt; by Tom Preston-Werner which detailed his approach to blogging and blogging software. For years I’ve been trying to use one terrible CMS or another. The idea of sitting down to write &lt;em&gt;yet another&lt;/em&gt; CMS to tackle some of the issues I have with blogging software really didn’t appeal to me. Remembering his article, I started poking with &lt;a href=&quot;http://github.com/mojombo/jekyll&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Jekyll&lt;/a&gt;. I had a pretty good idea of what I wanted:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Simplicity&lt;/li&gt;
&lt;li&gt;CLI-based editing&lt;/li&gt;
&lt;li&gt;Posts in a plaintext format, with formatting in a really lightweight&lt;br&gt;markup language like&lt;br&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Textile_%28markup_language%29&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Textile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Static content generation - if you post something popular, chances&lt;br&gt;are you’re going to start flushing “dynamic” content out to disk as&lt;br&gt;static HTML. Why bother waiting to write posts out as static files?&lt;/li&gt;
&lt;li&gt;No comments — as far as I’m concerned, the effort required to manage&lt;br&gt;spam and user comments simply isn’t worth it.&lt;/li&gt;
&lt;/ul&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Way back in November, 2008, I read an &lt;a href=&quot;http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html&quot; target=&quot;_blank&quot; rel=
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Irish Weather app live on the App Store</title>
    <link href="http://jasonmadigan.com/2009/12/16/irish-weather-app-live-on-the-app-store/"/>
    <id>http://jasonmadigan.com/2009/12/16/irish-weather-app-live-on-the-app-store/</id>
    <published>2009-12-16T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;I was bored three weekends ago and had an idea for a simple Irish weather app. Met Eireann have tons of great data available to the public, but finding the good stuff was a little fiddly. Anyway, after a weekend of work in Photoshop and Xcode, I had a pretty nice app. It was finally approved late last night. It’s free to download, so feel free to give it a spin.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://itunes.apple.com/ie/app/irish-weather/id343679419?mt=8&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Irish Weather 1.0&lt;/a&gt;&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;I was bored three weekends ago and had an idea for a simple Irish weather app. Met Eireann have tons of great data available to the publi
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>The day a Time Capsule died</title>
    <link href="http://jasonmadigan.com/2009/11/25/the-day-a-time-capsule-died/"/>
    <id>http://jasonmadigan.com/2009/11/25/the-day-a-time-capsule-died/</id>
    <published>2009-11-25T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;This is the first Apple product I’ve owned that’s died. The hard drive seems to be fine though. Plugged it into another machine and it works just fine. I guess all that heat killed the logicboard. I guess it had been warning me with a few months though - its DHCP server had become very flakey over the past few weeks.&lt;/p&gt;
&lt;p&gt;Oh well, time to dust off my old dependable WRT54GL.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;This is the first Apple product I’ve owned that’s died. The hard drive seems to be fine though. Plugged it into another machine and it wo
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Node.js - Event driven, non-blocking web servers written in JavaScript</title>
    <link href="http://jasonmadigan.com/2009/11/23/node-js-event-driven-non-blocking-web-servers-written-in-javascript/"/>
    <id>http://jasonmadigan.com/2009/11/23/node-js-event-driven-non-blocking-web-servers-written-in-javascript/</id>
    <published>2009-11-23T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;&lt;strong&gt;Update - 2015-09-11 while porting posts: This Node.js thing turned out to be a pretty big deal&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’ve been fiddling with &lt;a href=&quot;http://github.com/ry&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Ryan Dahl’s&lt;/a&gt; &lt;a href=&quot;http://github.com/ry/node&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Node.js&lt;/a&gt; event driven I/O framework for the V8 JavaScript VM over the past couple of days. It’s probably the coolest piece of software I’ve come across in ages, and it really builds upon one of JavaScript’s core strengths: event driven programming. If you’ve been looking to brush up on your event driven programming, it’s seriously worth taking the time to play with. As part of his work on Node, Ryan has also released a seriously cool tiny &lt;a href=&quot;http://github.com/ry/http-parser&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;HTTP parser&lt;/a&gt; in C (and used by Node). At 128 bytes per connection, it’s perfect for use in any embedded environment which could do with some HTTP love, like the &lt;a href=&quot;http://www.arduino.cc/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Arduino&lt;/a&gt;.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;strong&gt;Update - 2015-09-11 while porting posts: This Node.js thing turned out to be a pretty big deal&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’ve been fiddling
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Bluetooth/USB tethering &amp; MMS for O2 Ireland with iPhone OS 3.0</title>
    <link href="http://jasonmadigan.com/2009/03/19/bluetooth-usb-tethering-and-mms-for-o2-ireland-with-iphone-os-3-0/"/>
    <id>http://jasonmadigan.com/2009/03/19/bluetooth-usb-tethering-and-mms-for-o2-ireland-with-iphone-os-3-0/</id>
    <published>2009-03-19T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;&lt;strong&gt;Update #2: These carrier settings will work with Beta 2 also. Also,&lt;br&gt;Safari likes to attach a .zip extension to the ipcc, so either rename&lt;br&gt;the downloaded file minus the extension or use Firefox/curl something&lt;br&gt;else to download the updated carrier settings.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update: Updated the MMS proxy settings, the previous version was using&lt;br&gt;an old proxy. To update just re-download the carrier settings and apply&lt;br&gt;an update once more.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After a little dicking around prompted by some stuff I noticed on&lt;br&gt;twitter, I cobbled together this updated carrier bundle for O2 Ireland&lt;br&gt;to enable USB/Bluetooth tethering for iPhone OS 3.0. This also enables&lt;br&gt;the sending/recieving of MMS messages a new photo button will appear in&lt;br&gt;Messages.app to send pictures as MMS messages.&lt;/p&gt;
&lt;p&gt;Grab it &lt;a href=&quot;http://www.jasonmadigan.com/O2_ie.ipcc&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To install, option (alt) click update in iTunes, and select this updated&lt;br&gt;IPCC.&lt;/p&gt;
&lt;p&gt;If something terrible happens, you can grab a backup of the old one to&lt;br&gt;restore &lt;a href=&quot;http://www.jasonmadigan.com/O2_ie.ipcc.backup&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;strong&gt;Update #2: These carrier settings will work with Beta 2 also. Also,&lt;br&gt;Safari likes to attach a .zip extension to the ipcc, so ei
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Trip report - fowadublin</title>
    <link href="http://jasonmadigan.com/2009/03/09/trip-report-fowadublin/"/>
    <id>http://jasonmadigan.com/2009/03/09/trip-report-fowadublin/</id>
    <published>2009-03-09T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;I attended FOWA Dublin Friday last, and had a pretty good time. The&lt;br&gt;speakers were the main reason I attended, with DHH &amp;amp; Simon Willison&lt;br&gt;delivering particularly great talks. There were a couple of things that&lt;br&gt;bugged me about the event setup. Not to be a jerk or anything, but&lt;br&gt;there’s a few points I hope the&lt;br&gt;&lt;a href=&quot;http://www.carsonified.com/fowa/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Carsonified&lt;/a&gt; guys take a look at and&lt;br&gt;fix in time for next year:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Poor WiFi - I know the guys have apologised about this already, but&lt;br&gt;it stuck in most people’s craw and I guess it bears repeating. With&lt;br&gt;400 odd people milling about with iPhones and Macs some decent WiFi&lt;br&gt;would’ve been nice.&lt;/li&gt;
&lt;li&gt;Socialising is kind of hard when you’ve got absolutely no room to&lt;br&gt;move.&lt;/li&gt;
&lt;li&gt;I don’t really care about toilets, but I heard there was only one&lt;br&gt;bathroom for guys and one for girls.&lt;/li&gt;
&lt;li&gt;Lack of freebies. The tickets were pretty pricey (although I’d guess&lt;br&gt;individuals paying for their own tickets were in the minority).&lt;br&gt;Basically the only thing given away was a name-tag &amp;amp; holder. Free&lt;br&gt;coffee for breaks or something would’ve gone down nicely.&lt;/li&gt;
&lt;/ul&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;I attended FOWA Dublin Friday last, and had a pretty good time. The&lt;br&gt;speakers were the main reason I attended, with DHH &amp;amp; Simon Wil
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Using cookies to calculate a user&#39;s timezone</title>
    <link href="http://jasonmadigan.com/2009/01/17/using-cookies-to-calculate-a-users-timezone/"/>
    <id>http://jasonmadigan.com/2009/01/17/using-cookies-to-calculate-a-users-timezone/</id>
    <published>2009-01-17T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;A few days ago I &lt;a href=&quot;http://github.com/entp/xtt/tree/master&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;discovered&lt;/a&gt; a&lt;br&gt;quick &amp;amp; easy way few to use cookies to help your Rails app get a user’s&lt;br&gt;timezone, without prompting. It’s pretty easy to implement:&lt;/p&gt;
&lt;p&gt;First up: set a cookie, any cookie:&lt;/p&gt;
&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; date = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;Date&lt;/span&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;// returns offset from GMT in minutes&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; offset = date.getTimezoneOffset();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;// set a cookie however you see fit, I like to use jQuery.cookie&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$.cookie(&lt;span class=&quot;string&quot;&gt;&#39;timezone&#39;&lt;/span&gt;, offset);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;Then, in application.rb or wherever you like:&lt;/p&gt;
&lt;figure class=&quot;highlight ruby&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;browser_timezone&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; cookies[&lt;span class=&quot;symbol&quot;&gt;:timezone&lt;/span&gt;].blank?&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;string&quot;&gt;`browser_timezone ||= begin&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    min = cookies[:timezone].to_i&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    TimeZone[(min + (-2 * min)).minutes]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  end&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;The cookie gives you minutes from GMT, but `ActiveSupport::TimeZone@&lt;br&gt;expects seconds from GMT.&lt;/p&gt;
&lt;p&gt;Anyway, hopefully someone will find my pointing it out useful. It may&lt;br&gt;buckle under pressure (with daylight savings), but guessing and getting&lt;br&gt;it right 50% of the time is better than forcing user interaction.&lt;br&gt;Probably.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;A few days ago I &lt;a href=&quot;http://github.com/entp/xtt/tree/master&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;discovered&lt;/a&gt; a&lt;br&gt;quick &amp;amp; easy way
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>An iPhone app is born</title>
    <link href="http://jasonmadigan.com/2008/12/27/an-iphone-app-is-born/"/>
    <id>http://jasonmadigan.com/2008/12/27/an-iphone-app-is-born/</id>
    <published>2008-12-27T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.feedhenry.com/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;We&lt;/a&gt; finally saw our first iPhone app land on&lt;br&gt;the App Store a couple of days ago. iPhone app development is pretty&lt;br&gt;wonderful in comparison to some of the other crapheaps out there, but&lt;br&gt;it’s also pretty damn nice by itself too. It was a ton of fun to write,&lt;br&gt;and it was nice to do something like it for a local paper, &lt;a href=&quot;http://www.munster-express.ie/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;The Munster&lt;br&gt;Express&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Check it out&lt;br&gt;&lt;a href=&quot;http://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/browserRedirect?url=itms%253A%252F%252Fax.itunes.apple.com%252FWebObjects%252FMZStore.woa%252Fwa%252FviewSoftware%253Fid%253D300295436%2526mt%253D8&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;a href=&quot;http://www.feedhenry.com/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;We&lt;/a&gt; finally saw our first iPhone app land on&lt;br&gt;the App Store a cou
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Ruby Christmas</title>
    <link href="http://jasonmadigan.com/2008/12/21/ruby-christmas/"/>
    <id>http://jasonmadigan.com/2008/12/21/ruby-christmas/</id>
    <published>2008-12-21T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;Thanks “whoever you are” :&lt;a href=&quot;http://pastie.org/344030&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://pastie.org/344030&lt;/a&gt;.&lt;/p&gt;
&lt;figure class=&quot;highlight ruby&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;                     &lt;span class=&quot;string&quot;&gt;&quot;/|&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                 &lt;span class=&quot;string&quot;&gt;&quot;/wl)e&quot;&lt;/span&gt;;eval(\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &lt;span class=&quot;string&quot;&gt;&quot;A | A&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                   &lt;span class=&quot;string&quot;&gt;&quot;A  |  A&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                       \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &lt;span class=&quot;string&quot;&gt;&quot;InHhL&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                   &lt;span class=&quot;string&quot;&gt;&quot;,Z,%w&amp;#123;-&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                  &lt;span class=&quot;string&quot;&gt;&quot;,Y&amp;amp;/LH,L*&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                 &lt;span class=&quot;string&quot;&gt;&quot;cCnd,Hh&amp;amp;/d,&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&quot;YCB/Hh,Y&amp;amp;YHh,&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               &lt;span class=&quot;string&quot;&gt;&quot;L&amp;amp;xHh,L*v*nHh,*&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;              &lt;span class=&quot;string&quot;&gt;&quot;&amp;amp;ghHh,n&amp;amp;nHh,H*nHh&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;             &lt;span class=&quot;string&quot;&gt;&quot;,*q*v*nHh,Hw*qv*Hh&amp;#125;&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&quot;Iq&amp;amp;n*L,Z,[,n&amp;amp;qK,n&amp;amp;qK,&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;string&quot;&gt;&quot;@TwC,LH/&amp;amp;ng,gLBbL@K,@Th&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          &lt;span class=&quot;string&quot;&gt;&quot;/**,YC/k*d,Hh/*QdL@K,@FCB&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;string&quot;&gt;&quot;/,cQqq&amp;amp;ng,=/CcL@K,@F&amp;amp;v*,RBb&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&quot;y,g*mL!@K,@S&amp;amp;x,mQ/LhQqL,dBm=&amp;amp;&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;string&quot;&gt;&quot;ng@K,@S*v*n,dBckL,Q-Hy=&amp;amp;ng@K,@E&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;&quot;&amp;amp;ghH,d&amp;amp;/L,Q-gqCbb&amp;amp;ng@K,@N&amp;amp;n*,/Qng&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     &lt;span class=&quot;string&quot;&gt;&quot;*L,LH*==&amp;amp;ng@K,@T*n,H/yL,Q-cQHch&amp;amp;ng@&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&quot;K,@Eq*v*n,&amp;amp;CL,=&amp;amp;=&amp;amp;ng@K,@Tw*qv*,mCnk*y&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;string&quot;&gt;&quot;L,=QHch&amp;amp;ng@,]IDAJJA2)J*Qch,dC,U&amp;amp;UI=/&amp;amp;nH&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;string&quot;&gt;&quot;,@\nOn,Hh*,\#&amp;#123;nHhL[&amp;amp;]&amp;#125;,dQy,CY,MQHzmQL,my,&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;string&quot;&gt;&quot;H/B*,qCv*,gQv*,HC,m*:\n@I&amp;amp;JdCwnHCD2),dC,UjU&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&quot;I=/&amp;amp;nH,@,,,\#&amp;#123;q&amp;amp;n*L[j]&amp;#125;\n@I*ndI=/&amp;amp;nHDD&amp;amp;,ZZ,A)&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &lt;span class=&quot;string&quot;&gt;&quot;?,@,,&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &lt;span class=&quot;string&quot;&gt;&quot;,G@,:&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &lt;span class=&quot;string&quot;&gt;&quot;,@,,,&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &lt;span class=&quot;string&quot;&gt;&quot;Gnd,Q&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &lt;span class=&quot;string&quot;&gt;&quot;@)I=/&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;&quot;&amp;amp;nH,@,n*w,v*/L&amp;amp;Cn,CY,RBby!\n@I*nd&quot;&lt;/span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;string&quot;&gt;&quot;I&quot;&lt;/span&gt;.tr(&lt;span class=&quot;string&quot;&gt;&#39; ID/VHLYGBqCA&amp;amp;|*UQJ=Z@K,&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;string&quot;&gt;&#39;+;(r/tsfAulo1i8e|a.p=&quot;, &#39;&lt;/span&gt;))&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Thanks “whoever you are” :&lt;a href=&quot;http://pastie.org/344030&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://pastie.org/344030&lt;/a&gt;.&lt;/p&gt;
&lt;figure cla
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>JavaScript flexes its muscles</title>
    <link href="http://jasonmadigan.com/2008/09/04/javascript-flexes-its-muscles/"/>
    <id>http://jasonmadigan.com/2008/09/04/javascript-flexes-its-muscles/</id>
    <published>2008-09-04T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;It’s an exciting time for JavaScript developers. Over the past few&lt;br&gt;months, we’ve seen all sorts of cool things coming our way. We’ve seen&lt;br&gt;new fast, heavily optimised JavaScript virtual machines such as&lt;br&gt;WebKit’s&lt;a href=&quot;http://webkit.org/blog/189/announcing-squirrelfish/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;SquirrelFish&lt;/a&gt;,&lt;br&gt;Mozilla’s &lt;a href=&quot;https://wiki.mozilla.org/JavaScript:TraceMonkey&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;TraceMonkey&lt;/a&gt;&lt;br&gt;and, most recently, Google’s &lt;a href=&quot;http://code.google.com/p/v8/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;V8&lt;/a&gt;. We’ve&lt;br&gt;seen all kinds of cool things done with these new VMs, perhaps the&lt;br&gt;coolest (to my mind) is running dynamic languages such as Ruby in the&lt;br&gt;browser - see&lt;br&gt;&lt;a href=&quot;http://macournoyer.wordpress.com/2008/09/02/ruby-on-v8/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’ve also seen the effective death of the ECMAScript 4 proposal and&lt;br&gt;seen it reborn as ECMAScript Harmony. To top things off, we’ve also seen&lt;br&gt;some very interesting new JavaScript frameworks designed specifically&lt;br&gt;with complex client-side web applications such as&lt;br&gt;&lt;a href=&quot;http://www.sproutcore.com/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;SproutCore&lt;/a&gt; and, just today, &lt;a href=&quot;http://cappuccino.org/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Cappccino &amp;amp;&lt;br&gt;Objective-J&lt;/a&gt;. The web development world is&lt;br&gt;evolving too quickly for the current model of standards adoption remain&lt;br&gt;sustainable, and it’s nice to see that developers like those behind&lt;br&gt;Cappuccino get it.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;It’s an exciting time for JavaScript developers. Over the past few&lt;br&gt;months, we’ve seen all sorts of cool things coming our way. We’ve s
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Reinventing the wheel, just to see what all the fuss is about.</title>
    <link href="http://jasonmadigan.com/2008/05/24/reinventing-the-wheel-just-to-see-what-all-the-fuss-is-about/"/>
    <id>http://jasonmadigan.com/2008/05/24/reinventing-the-wheel-just-to-see-what-all-the-fuss-is-about/</id>
    <published>2008-05-24T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;I’ve been amassing a small army of broken arduinos over the past two&lt;br&gt;months, but now I have &lt;strong&gt;something&lt;/strong&gt; to show for it - the bones of a&lt;br&gt;working (but altogether bulky) GPS tracker. The code I used seems kind&lt;br&gt;of nasty to me, mostly because the bit-banging used for serial&lt;br&gt;communication to try to ensure no data is missed in transition. The&lt;br&gt;Arduino IDE is okay I guess (for a Java app), but if you like Ruby you&lt;br&gt;may want to check out &lt;a href=&quot;http://rad.rubyforge.org/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;RAD&lt;/a&gt;. Looks like RAD&lt;br&gt;only works with version 10 of the arduino SDK right now though.&lt;/p&gt;
&lt;p&gt;In terms of kit hooked up, we’ve got an &lt;a href=&quot;http://www.sparkfun.com/commerce/product_info.php?products_id=465&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;EM-406A (GPS&lt;br&gt;Module)&lt;/a&gt;&lt;br&gt;&amp;amp; an &lt;a href=&quot;http://www.arduino.cc/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Arduino Mini&lt;/a&gt; along with a USB to serial&lt;br&gt;header. I need to buy a EEPROM for storage, or possibly some kind of&lt;br&gt;microSD reader. Borrowing some code from&lt;br&gt;&lt;a href=&quot;http://www.railsonwave.com/railsonwave/2007/7/4/gps-and-google-map-in&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;here&lt;/a&gt;&lt;br&gt;we can parse NMEA to take a look at where you are with Google Maps.&lt;/p&gt;
&lt;figure class=&quot;highlight c&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;66&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;define&lt;/span&gt; bit4800Delay 200 &lt;span class=&quot;comment&quot;&gt;//1 bit per 0.2 ms&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;define&lt;/span&gt; halfBit4800Delay 100&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;byte rx = &lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;; &lt;span class=&quot;comment&quot;&gt;//Connect to EM-406A&#39;s TX&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;byte tx = &lt;span class=&quot;number&quot;&gt;9&lt;/span&gt;; &lt;span class=&quot;comment&quot;&gt;//Connect to EM-406A&#39;s RX&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt; dataformat[&lt;span class=&quot;number&quot;&gt;7&lt;/span&gt;] = &lt;span class=&quot;string&quot;&gt;&quot;$GPGGA&quot;&lt;/span&gt;; &lt;span class=&quot;comment&quot;&gt;//GGA&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt; messageline[&lt;span class=&quot;number&quot;&gt;80&lt;/span&gt;] = &lt;span class=&quot;string&quot;&gt;&quot;&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt; latitude[&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt; longitude[&lt;span class=&quot;number&quot;&gt;11&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt; &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; pinMode(rx,INPUT);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; pinMode(tx,OUTPUT);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; digitalWrite(tx,HIGH); &lt;span class=&quot;comment&quot;&gt;// Needs to be pulled high before the EM-406A&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;will return data&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;title&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;number&quot;&gt;13&lt;/span&gt;,HIGH)&lt;/span&gt;&lt;/span&gt;; &lt;span class=&quot;comment&quot;&gt;// Debugging LED&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; Serial.begin(&lt;span class=&quot;number&quot;&gt;9600&lt;/span&gt;); &lt;span class=&quot;comment&quot;&gt;// Echo EM-406A output through serial&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;SWread&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; byte val = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;comment&quot;&gt;//Wait for start bit (0)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt;(digitalRead(rx)  HIGH); &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (digitalRead(rx)  LOW) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; delayMicroseconds(halfBit4800Delay);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; offset = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;; offset &amp;lt; &lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;; offset**) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; delayMicroseconds;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; val |= digitalRead &amp;lt;&amp;lt; offset;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; delayMicroseconds;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;comment&quot;&gt;// Bitbanging&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; val&lt;span class=&quot;number&quot;&gt;-128&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; val;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; char2string &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; messageline[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;] = SWread;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; i**;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; messageline[i] = SWread();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt;(messageline[i] != &lt;span class=&quot;number&quot;&gt;13&lt;/span&gt; &amp;amp; i&amp;lt;&lt;span class=&quot;number&quot;&gt;80&lt;/span&gt;) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; i++;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; messageline[i] = SWread();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;messageline[i+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;] = &lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt; &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; char2string();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;built_in&quot;&gt;strncmp&lt;/span&gt;(messageline, dataformat, &lt;span class=&quot;number&quot;&gt;6&lt;/span&gt;) == &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt; &amp;amp; i&amp;gt;&lt;span class=&quot;number&quot;&gt;4&lt;/span&gt;) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   Serial.println(messageline);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;I’ve been amassing a small army of broken arduinos over the past two&lt;br&gt;months, but now I have &lt;strong&gt;something&lt;/strong&gt; to show for it 
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>iRot - iPhone development is fun</title>
    <link href="http://jasonmadigan.com/2008/02/18/irot-iphone-development-is-fun/"/>
    <id>http://jasonmadigan.com/2008/02/18/irot-iphone-development-is-fun/</id>
    <published>2008-02-18T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;Over the weekend I decided to try my hand at a little iPhone&lt;br&gt;development. My Objective-C skill is non-existant, and my C skill is&lt;br&gt;incredibly rusty - but I pressed on. First up was installation of the&lt;br&gt;toolchain required to compile native applications. This one was tough,&lt;br&gt;very tough. After much swearing and shouting, I finally managed to get&lt;br&gt;it to install. The iPhone dev team’s official instructions were of help&lt;br&gt;right up until&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sed&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&#39;s/^FLAGS_FOR_TARGET=$/FLAGS_FOR_TARGET=$&amp;#123;FLAGS_FOR_TARGET-&amp;#125;/g&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;This is where things seemed to go horribly wrong for me and others.&lt;br&gt;After scouring google for solutions for what seemed like hours, I&lt;br&gt;finally happened up on&lt;br&gt;&lt;a href=&quot;http://www.kdbdallas.com/index.php/2007/11/16/help-with-building-the-iphone-leopard-toolchain/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;this&lt;/a&gt;&lt;br&gt;little golden nugget. With the toolchain finally installed I cracked&lt;br&gt;open my copy of Stephen Kochan’s &lt;a href=&quot;http://www.amazon.com/Programming-Objective-C-Developers-Library-Stephen/dp/0672325861&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Programming in&lt;br&gt;Objective-C&lt;/a&gt;&lt;br&gt;along with &lt;a href=&quot;http://www.oreilly.com/catalog/9780596519513/?CMP=ILC-Home3&amp;amp;ATT=9780596519513&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;iPhone Open Application&lt;br&gt;Development&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a book by NES.app’s developer which I really can’t recommend at the&lt;br&gt;moment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I decided to write a useless little ROT13 app which you can grab by&lt;br&gt;adding &lt;code&gt;http://www.jasonmadigan.com/repo.xml&lt;/code&gt; to your installer.app’s&lt;br&gt;repository list. I’ll release the source tomorrow after a quick cleanup.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Over the weekend I decided to try my hand at a little iPhone&lt;br&gt;development. My Objective-C skill is non-existant, and my C skill is&lt;br&gt;i
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>An end to a frickin&#39; retarded restore path</title>
    <link href="http://jasonmadigan.com/2008/02/12/an-end-to-a-frickin-retarded-restore-path/"/>
    <id>http://jasonmadigan.com/2008/02/12/an-end-to-a-frickin-retarded-restore-path/</id>
    <published>2008-02-12T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;Finally. Restoring an iPhone is no longer quite so painful. No more&lt;br&gt;jumping through hoops downgrading to 1.1.1 and slowly clawing your way&lt;br&gt;back up to 1.1.3 with all manner of retarded soft updates. Thanks to&lt;br&gt;Zibree’s&lt;br&gt;&lt;a href=&quot;http://zibree.blogspot.com/2008/02/ziphone-updated.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;ZiPhone&lt;/a&gt;, you&lt;br&gt;no longer need to beg and plead with your iPhone to play along with you&lt;br&gt;for two hours to get your iPhone back in working order. Unlocking,&lt;br&gt;activating &amp;amp; jailbreaking any iPhone is now incredibly simple and fast.&lt;/p&gt;
&lt;p&gt;Somebody really had to do this - when 1.1.4 lands (and it will soon),&lt;br&gt;restoring an iPhone would have previously meant no less than 4 jailbreak&lt;br&gt;hoops to jump through.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Finally. Restoring an iPhone is no longer quite so painful. No more&lt;br&gt;jumping through hoops downgrading to 1.1.1 and slowly clawing your
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Software Unlock for OOTB 1.1.2 &amp; 1.1.3 iPhones</title>
    <link href="http://jasonmadigan.com/2008/02/08/software-unlock-for-ootb-1-1-2-and-1-1-3-iphones/"/>
    <id>http://jasonmadigan.com/2008/02/08/software-unlock-for-ootb-1-1-2-and-1-1-3-iphones/</id>
    <published>2008-02-08T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;Mister George Hotz has come through for us once again, with a &lt;a href=&quot;http://iphonejtag.blogspot.com/2008/02/11246unlock-good-enough-for-prize.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;software&lt;br&gt;based&lt;br&gt;unlock&lt;/a&gt;&lt;br&gt;for out of the box 1.1.2 &amp;amp; 1.1.3 iPhones. Now would be a good time to&lt;br&gt;buy one. It uses a delightful IPSF based method but this one doesn’t&lt;br&gt;zero out your seczones. So should Apple lose their minds in the future&lt;br&gt;and include a bootloader update in a future software release you won’t&lt;br&gt;end up with a complete brick.&lt;/p&gt;
&lt;p&gt;Hot on it’s heals was a brief update regarding retarded dev-team/elite&lt;br&gt;team babby drama. It seems Zibri got tired of the two dev teams’&lt;br&gt;shenanigans once more and decided to jump the gun and&lt;br&gt;&lt;a href=&quot;http://code.google.com/p/iphone-elite/wiki/JerrySim&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;release&lt;/a&gt; the&lt;br&gt;method used by an upcoming semi-hardware unlock (an exploit piggybacking&lt;br&gt;on a Turbo SIM, once run there’s no need for the Turbo SIM anymore), the&lt;br&gt;details of which have been known by the dev-team for several weeks now.&lt;/p&gt;
&lt;p&gt;Interesting times. Of course this means I’m going to be bombarded with a&lt;br&gt;stream of requests for unlocking - all of which I’m going to politely&lt;br&gt;decline. The iPhone is great and all, but eventually you come to realise&lt;br&gt;that, with every new firmware release, the time it’ll take you to&lt;br&gt;restore should something terrible happen is going to increase&lt;br&gt;considerably. I don’t know about you guys, but as soon as an official&lt;br&gt;release is confirmed for here with 3G, I’m jumping ship. It’s just too&lt;br&gt;tiring.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Mister George Hotz has come through for us once again, with a &lt;a href=&quot;http://iphonejtag.blogspot.com/2008/02/11246unlock-good-enough-for
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>1.1.3 - IPSF Keep&#39;s On Truckin&#39;</title>
    <link href="http://jasonmadigan.com/2008/01/25/1-1-3-ipsf-keeps-on-truckin/"/>
    <id>http://jasonmadigan.com/2008/01/25/1-1-3-ipsf-keeps-on-truckin/</id>
    <published>2008-01-25T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;Like I thought, IphoneSimFree’s unlock continues to work with recent&lt;br&gt;iPhone updates. Taking the baseband out of lockdown requires a little&lt;br&gt;minicom pockery until we see a patched lockdownd - I’ll look into&lt;br&gt;patching it this weekend.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Like I thought, IphoneSimFree’s unlock continues to work with recent&lt;br&gt;iPhone updates. Taking the baseband out of lockdown requires a li
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Lightweight, fast Rails stack - Thin &amp; nginx</title>
    <link href="http://jasonmadigan.com/2008/01/24/lightweight-fast-rails-stack-thin-and-nginx/"/>
    <id>http://jasonmadigan.com/2008/01/24/lightweight-fast-rails-stack-thin-and-nginx/</id>
    <published>2008-01-24T21:00:00.000Z</published>
    <updated>2016-03-06T20:16:35.000Z</updated>
    
    <content type="html">&lt;p&gt;Since purchasing a&lt;br&gt;&lt;a href=&quot;http://www.slicehost.com&quot; title=&quot;http://www.slicehost.com&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;slice&lt;br&gt;of heaven&lt;/a&gt; a few days ago, I’ve setup a very lightweight Rails stack&lt;br&gt;consisting of&lt;br&gt;&lt;a href=&quot;http://code.macournoyer.com/thin/&quot; title=&quot;http://code.macournoyer.com/thin/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Thin&lt;/a&gt;&lt;br&gt;&amp;amp; &lt;a href=&quot;http://nginx.net/&quot; title=&quot;http://nginx.net/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;nginx&lt;/a&gt; for my&lt;br&gt;Rails needs. Since I went for a slice with just 256MB of RAM, memory&lt;br&gt;consumption becomes a pretty serious issue. nginx has been around for&lt;br&gt;quite a while now, and has recently started to become more and more&lt;br&gt;popular in Rails deployments due to the fact that’s incredibly&lt;br&gt;lightweight, very fast and stable - perfect not only for VPS jerks like&lt;br&gt;me, but for anyone who really doesn’t feel it’s necessary to run Apache&lt;br&gt;for static content/cluster proxying/load balancing. Thin is something I&lt;br&gt;came across very recently and I decided to try is as a replacement for&lt;br&gt;mongrel since I’d heard some great things about it, even if it is still&lt;br&gt;alpha. It’s performance in comparison to mongrel (even with a tacked on&lt;br&gt;event machine) looks very impressive on paper.&lt;/p&gt;
&lt;p&gt;Setting up clustering with it is a snap, just spawn the processes and&lt;br&gt;pipe them into nginx. Here’s a startup script borrowed from&lt;br&gt;&lt;a href=&quot;http://groups.google.com/group/thin-ruby/msg/7775cc00e316b25a&quot; title=&quot;http://groups.google.com/group/thin-ruby/msg/7775cc00e316b25a&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Stephen&lt;br&gt;Celis&lt;/a&gt;:&lt;/p&gt;
&lt;figure class=&quot;highlight ruby&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;namespace &lt;span class=&quot;symbol&quot;&gt;:thin&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;do&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; namespace &lt;span class=&quot;symbol&quot;&gt;:cluster&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;do&lt;/span&gt; desc &lt;span class=&quot;string&quot;&gt;&#39;Start thin cluster&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; task &lt;span class=&quot;symbol&quot;&gt;:start&lt;/span&gt; =&amp;gt; &lt;span class=&quot;symbol&quot;&gt;:environment&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;do&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;string&quot;&gt;`cd &lt;span class=&quot;subst&quot;&gt;#&amp;#123;RAILS_ROOT&amp;#125;&lt;/span&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; port_range = RAILS_ENV == &lt;span class=&quot;string&quot;&gt;&#39;development&#39;&lt;/span&gt; ? &lt;span class=&quot;number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;symbol&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; (ENV[&lt;span class=&quot;string&quot;&gt;&#39;SIZE&#39;&lt;/span&gt;] ? ENV[&lt;span class=&quot;string&quot;&gt;&#39;SIZE&#39;&lt;/span&gt;].to_i &lt;span class=&quot;symbol&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;4&lt;/span&gt;).times &lt;span class=&quot;keyword&quot;&gt;do&lt;/span&gt; |i|&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; Thread.new &lt;span class=&quot;keyword&quot;&gt;do&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; port = ENV[&lt;span class=&quot;string&quot;&gt;&#39;PORT&#39;&lt;/span&gt;] ? ENV[&lt;span class=&quot;string&quot;&gt;&#39;PORT&#39;&lt;/span&gt;].to_i + i &lt;span class=&quot;symbol&quot;&gt;:&lt;/span&gt; (&lt;span class=&quot;string&quot;&gt;&quot;&lt;span class=&quot;subst&quot;&gt;#&amp;#123;port_range&amp;#125;&lt;/span&gt;%03d&quot;&lt;/span&gt;  i)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          str  = &lt;span class=&quot;string&quot;&gt;&quot;thin start -d -p&lt;span class=&quot;subst&quot;&gt;#&amp;#123;port&amp;#125;&lt;/span&gt; -Ptmp/pids/thin-&lt;span class=&quot;subst&quot;&gt;#&amp;#123;port&amp;#125;&lt;/span&gt;.pid&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          str += &lt;span class=&quot;string&quot;&gt;&quot; -e&lt;span class=&quot;subst&quot;&gt;#&amp;#123;RAILS_ENV&amp;#125;&lt;/span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          puts str&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          puts &lt;span class=&quot;string&quot;&gt;&quot;Starting server on port &lt;span class=&quot;subst&quot;&gt;#&amp;#123;port&amp;#125;&lt;/span&gt;...&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          &lt;span class=&quot;string&quot;&gt;`&lt;span class=&quot;subst&quot;&gt;#&amp;#123;str&amp;#125;&lt;/span&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    desc &lt;span class=&quot;string&quot;&gt;&#39;Stop all thin clusters&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    task &lt;span class=&quot;symbol&quot;&gt;:stop&lt;/span&gt; =&amp;gt; &lt;span class=&quot;symbol&quot;&gt;:environment&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;do&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;`cd &lt;span class=&quot;subst&quot;&gt;#&amp;#123;RAILS_ROOT&amp;#125;&lt;/span&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      Dir.new(&lt;span class=&quot;string&quot;&gt;&quot;&lt;span class=&quot;subst&quot;&gt;#&amp;#123;RAILS_ROOT&amp;#125;&lt;/span&gt;/tmp/pids&quot;&lt;/span&gt;).each &lt;span class=&quot;keyword&quot;&gt;do&lt;/span&gt; |file|&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        Thread.new &lt;span class=&quot;keyword&quot;&gt;do&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; file.starts_with?(&lt;span class=&quot;string&quot;&gt;&quot;thin-&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            str  = &lt;span class=&quot;string&quot;&gt;&quot;thin stop -Ptmp/pids/&lt;span class=&quot;subst&quot;&gt;#&amp;#123;file&amp;#125;&lt;/span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            puts &lt;span class=&quot;string&quot;&gt;&quot;Stopping server on port &lt;span class=&quot;subst&quot;&gt;#&amp;#123;file[&lt;span class=&quot;regexp&quot;&gt;/\d+/&lt;/span&gt;]&amp;#125;&lt;/span&gt;...&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;`&lt;span class=&quot;subst&quot;&gt;#&amp;#123;str&amp;#125;&lt;/span&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          &lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;Then spawn however many processes you want using something like:&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;rake thin:cluster:start RAILS_ENV=production SIZE=2 PORT=3000&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;To stop them, use:&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;rake thin:cluster:stop&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;With that all nicely setup, you can use an nginx config similar to mine to get things in order:&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;upstream dapperjerk &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  server 127.0.0.1:3000;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  server 127.0.0.1:3001;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;server &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  listen 80;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  server_name  www.dapperjerk.com;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  rewrite \^/(.\*) http://dapperjerk.com permanent;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;server &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  listen   80;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  server_name dapperjerk.com;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  access_log /home/jason/public_html/blog/log/access.log;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  error_log /home/jason/public_html/blog/log/error.log;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  root   /home/jason/public_html/blog/public/;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  index  index.html;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  location / &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    proxy_set_header  X-Real-IP  $remote_addr;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    proxy_set_header Host $http_host;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    proxy\_redirect false;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    if (-f $request_filename/index.html) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      rewrite (.*) $1/index.html break;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    if (-f $request_filename.html) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      rewrite (.*) $1.html break;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    if (!-f $request_filename) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      proxy_pass http://dapperjerk;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      break;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;And that’s really all there is too it. I’m not a masochist so I’ve never&lt;br&gt;bothered to fully read Apache’s documentation, but I don’t think I’m&lt;br&gt;going out on a limb here by saying that it seems to be a lot easier to&lt;br&gt;manage nginx. I haven’t really put thin through its paces yet, but we’ll&lt;br&gt;see in the coming weeks as I cobble together a custom blog app to run&lt;br&gt;this place.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Since purchasing a&lt;br&gt;&lt;a href=&quot;http://www.slicehost.com&quot; title=&quot;http://www.slicehost.com&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;slice&lt;br&gt;of heav
    
    </summary>
    
    
  </entry>
  
</feed>
