﻿{
  "authors": [
    {
      "name": "Gaelian",
      "url": "https://binarybalance.com.au/about/"
    }
  ],
  "feed_url": "https://binarybalance.com.au/posts.json",
  "home_page_url": "https://binarybalance.com.au/",
  "items": [
    {
      "content_html": "\u003Cp\u003EI\u0027ve tried out \u003Ca href=\u0022https://en.wikipedia.org/wiki/IOS\u0022\u003EiOS\u003C/a\u003E development using a few different approaches over the years. Having previous experience with \u003Ca href=\u0022https://en.wikipedia.org/wiki/Ruby_(programming_language)\u0022\u003ERuby\u003C/a\u003E and finding the prospect of learning \u003Ca href=\u0022https://en.wikipedia.org/wiki/Objective-C\u0022\u003EObjective-C\u003C/a\u003E not particularly attractive, I tried \u003Ca href=\u0022https://en.wikipedia.org/wiki/RubyMotion\u0022\u003ERubyMotion\u003C/a\u003E back in 2013. RubyMotion was a pretty cool take on things, Laurent Sansonetti did a great job of making RubyMotion feel familiar to a Ruby developer. But the problem for me was not so much anything specifically to do with RubyMotion so much as the fact that I had no previous experience with native iOS development. These cross-platform/cross-language tools are a lot easier to use if you have a fair amount of experience with the original platform/language that they are trying to be a bridge to. But if you do have such experience, then it begs the question why would you need a cross-platform/cross-language tool? It\u0027s a bit of a chicken and egg situation. How much familiarity with the original platform/language is enough?\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003ETaking a step back, it seems self evident that one should have a reasonable familiarity with the underlying platform/language before trying to make use of one of these cross-platform/cross-language tools, but I don\u0027t think I\u0027m the only one who would feel that this point can get glossed over with the hype. You\u0027re familiar with platform/language X? Well, now you don\u0027t even really, truly, that much (OK maybe a little bit), need to be familiar with platform/language Y and Z! Just use this thing (\u003Cem\u003Epoints emphatically at new cross-platform tool set that\u0027s just been released\u003C/em\u003E)! Learning this kind of cross-platform wrapper for a given native \u003Ca href=\u0022https://en.wikipedia.org/wiki/Application_programming_interface\u0022\u003EAPI\u003C/a\u003E that one is not particularly familiar with in the first place is certainly doable, I\u0027ve done it in the past. But it\u0027s not the easiest learning curve to embark on.\u003C/p\u003E\n\u003Cp\u003EIn 2014 Apple released \u003Ca href=\u0022https://en.wikipedia.org/wiki/Swift_(programming_language)\u0022\u003ESwift\u003C/a\u003E and I thought hey, maybe I can now use the native Apple tool chain for iOS development but I don\u0027t have to use Objective-C!\u003C/p\u003E\n\u003Cp\u003EThen a friend came to me with an iOS app - the development of which he\u0027d outsourced - and he wondered if I\u0027d like to take over maintenance of the app. So I said yes and not surprisingly, it turns out that the app was entirely written in Objective-C. I had tried to avoid it, but it turns out you can\u0027t outrun that many \u003Ca href=\u0022http://s2.quickmeme.com/img/f4/f4bd8c19248119de7851d756370c063a0cb51fc0582f2d23106afbdcdfd04cc6.jpg\u0022\u003Esquare brackets\u003C/a\u003E forever.\u003C/p\u003E\n\u003Cp\u003ESo I\u0027ve gathered some experience with iOS development using RubyMotion as well as Apple\u0027s own tool chain with both Objective-C and Swift, in the process I\u0027ve found out that \u003Ca href=\u0022https://en.wikipedia.org/wiki/Xcode\u0022\u003EXcode\u003C/a\u003E is a fairly lack lustre \u003Ca href=\u0022https://en.wikipedia.org/wiki/Integrated_development_environment\u0022\u003EIDE\u003C/a\u003E. And now, lured once more by the siren song of cross-platform development, collaborating with a friend who primarily uses Microsoft dev tools, a desire not to use Xcode except when absolutely necessary, and the fact that a lot of the other work I do these days involves Microsoft platforms and \u003Ca href=\u0022https://en.wikipedia.org/wiki/C_Sharp_(programming_language)\u0022\u003EC#\u003C/a\u003E, I have been trying out \u003Ca href=\u0022https://en.wikipedia.org/wiki/Xamarin\u0022\u003EXamarin\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EXamarin 2.0 was released in 2013, with their own IDE for Mac named Xamarin Studio as well as integration with Microsoft\u0027s own Visual Studio. I remember reading about Xamarin at the time but I was giving RubyMotion a go back then. Generally speaking though, if I\u0027m going to use an IDE over a lighter weight text editor, that IDE will be \u003Ca href=\u0022https://en.wikipedia.org/wiki/Microsoft_Visual_Studio\u0022\u003EVisual Studio\u003C/a\u003E. Visual Studio is not perfect, but it\u0027s pretty good (for me, better than Xcode) so I thought it was great that Xamarin could integrate with it. I planned to keep an eye on Xamarin\u0027s evolution.\u003C/p\u003E\n\u003Cp\u003EFast forward to today and Xamarin has been acquired by Microsoft, they\u0027ve renamed Xamarin Studio to Visual Studio for Mac (which I find needlessly confusing, but whatever) and I was ready to give this Xamarin thing a go using my favourite IDE (i.e. the real Visual Studio... on Windows). So I fired up my Windows 10 \u003Ca href=\u0022https://en.wikipedia.org/wiki/Virtual_machine\u0022\u003EVM\u003C/a\u003E on my Mac and went through the quite pain-free process of setting up Xamarin on both my Mac host (path of least resistance: \u003Ca href=\u0022https://docs.microsoft.com/en-us/visualstudio/mac/installation\u0022\u003Einstall Visual Studio for Mac\u003C/a\u003E) and Windows VM (path of least resistance: \u003Ca href=\u0022https://docs.microsoft.com/en-us/visualstudio/install/install-visual-studio\u0022\u003Einstall Visual Studio\u003C/a\u003E or modify your existing Visual Studio install and include the Xamarin bits) then connecting the two (path of least resistance: \u003Ca href=\u0022https://developer.xamarin.com/guides/ios/getting_started/installation/windows/connecting-to-mac/\u0022\u003Efollow this guide\u003C/a\u003E\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E) so that the Mac host could be utilised by the Windows guest \u003Ca href=\u0022https://en.wikipedia.org/wiki/Operating_system\u0022\u003EOS\u003C/a\u003E for various development tasks.\u003C/p\u003E\n\u003Cp\u003ESo far so good and super easy! Maybe this was the cross-platform tooling I\u0027d been looking for? Well, then I tried actually doing something with Xamarin using Visual Studio on my Windows VM.\u003C/p\u003E\n\u003Cp\u003EFirst problem is that much of the online Xamarin material that I kept bringing up in my googling for the things I wanted to know was pages that assumed use of Xamarin Studio (sorry, Visual Studio for Mac...). This was not super helpful for a person using Visual Studio on Windows. But I probably could have made do, except for the fact that important parts of Xamarin in Visual Studio on Windows are so buggy that they are effectively unusable.\u003C/p\u003E\n\u003Cp\u003EThere is a \u0026quot;Resources\u0026quot; folder created by default in a Xamarin.iOS project. If one is using an asset catalog to say, manage your app icons and one manually adds the \u003Ccode\u003EImages.xcassets\u003C/code\u003E folder to the project (i.e. so that the \u003Ccode\u003EImages.xcassets\u003C/code\u003E folder and contents is visible in the Solution Explorer, under the \u0026quot;Resources\u0026quot; folder), this appears to trigger some strange behaviour where the \u003Ccode\u003E.csproj\u003C/code\u003E file gets automatically updated making it so that the asset catalog no longer can be opened when you double click to view its contents in Visual Studio. I tried in vain to manually edit the XML inside the \u003Ccode\u003E.csproj\u003C/code\u003E file, but things just seem to get changed back the next time the project gets opened. Why would anyone want to manually add the \u003Ccode\u003EImages.xcassets\u003C/code\u003E folder to the project? Because \u003Ccode\u003EImages.xcassets\u003C/code\u003E wasn\u0027t added to source control previously and this is one way to add it. It\u0027s not the only way to add files to source control, but it is probably the most intuitive and common way.\u003C/p\u003E\n\u003Cp\u003EThe equivalent of Xcode\u0027s \u003Ca href=\u0022https://en.wikipedia.org/wiki/Interface_Builder\u0022\u003EInterface Builder\u003C/a\u003E in Xamarin is the \u0026quot;Xamarin iOS Designer\u0026quot;. With a few exceptions, much of the documentation for Xamarin.iOS expects that you would be using the Xamarin iOS Designer, which is not surprising considering most iOS developers tend to use Interface Builder wih Xcode. What the documentation doesn\u0027t tell you however, is that in Visual Studio on Windows, the Xamarin iOS Designer is almost comically broken.\u003C/p\u003E\n\u003Cp\u003EIf you have more than one view connected together on the Xamarin iOS Designer\u0027s \u0026quot;design surface\u0026quot; via a \u0026quot;segue\u0026quot;, then arrows between the views will be visible, representing connections between the views (similar to Interface Builder). But unlike Interface Builder, if you zoom in or out, \u003Ca href=\u0022/images/content/xamarin-ios-designer-arrows.png\u0022\u003Ethe arrows jump to completely the wrong place\u003C/a\u003E on the design surface. Dragging one of the views around on the design surface seems to make the arrows jump back to their expected position (until you change the zoom level again).\u003C/p\u003E\n\u003Cp\u003EWhich brings me to another WTF moment: I only seemed to be able to drag the view related to my root controller around on the design surface, the other views appeared to be fixed in place. I then right-clicked and deleted one of the views from the design surface and noticed it didn\u0027t immediately disappear. Well that\u0027s annoying I thought, but maybe I just need to close and open the iOS Designer again? Upon opening the iOS Designer once more, I got \u003Ca href=\u0022/images/content/xamarin-ios-designer-null-reference.png\u0022\u003Ea null reference exception\u003C/a\u003E that I\u0027m guessing was caused by me right clicking on a view and choosing to delete it when it was still connected to another view and that other view still having some reference to the now deleted view? From this point on, the iOS Designer was completely inaccessible and would only show the null reference exception when I opened it. I considered opening the \u003Ccode\u003E.storyboard\u003C/code\u003E file directly and trying to figure out what bits in the XML I needed to change in order to fix things, but then I remembered I\u0027m not that masochistic. This is what a developer really wants to be doing with their time, right? Not actually working on building anything, instead just spinning their wheels, wrestling with their tools, manually editing supporting XML that they should actually never even need to see.\u003C/p\u003E\n\u003Cp\u003EJust doing simple and ostensibly innocuous things like adding a folder to the project or right-click deleting a view from the Xamarin iOS Designer caused me significant problems. The preceding couple of paragraphs are a condensed account of the better part of a couple of days worth of trial and error on my part, the primary learning coming out of this time being that I needed to end my abusive relationship with the Xamarin iOS Designer. I am running new and high spec hardware (late 2016 MacBook Pro), as well as what are currently the latest versions of Visual Studio (15.4.1) Xamarin.iOS/Xamarin.Mac \u003Ca href=\u0022https://en.wikipedia.org/wiki/Software_development_kit\u0022\u003ESDKs\u003C/a\u003E for Visual Studio (11.2.0.8) and Xcode (9.0.1), so hardware grunt shouldn\u0027t be a problem and there are currently no newer versions of things to upgrade to which might provide some relief.\u003C/p\u003E\n\u003Cp\u003EFor work reasons I happen to have an MSDN Subscription (or is it called a Visual Studio Subscription now?), which means that I can send Microsoft a support enquiry about this kind of thing and a Microsoft minion is obliged to reply to me. So before I completely gave up on the weird asset catalog issue and the iOS Designer I thought it worth contacting Microsoft to find out if what I was experiencing were known issues or just some problem with my particular situation.\u003C/p\u003E\n\u003Cp\u003EAs of the time of this writing, Microsoft have informed me that there may be a bug in relation to the asset catalog thing. My own workaround is to not add the \u003Ccode\u003EImages.xcassets\u003C/code\u003E folder to the Solution Explorer but rather add it to source control via the Source Control Explorer instead.  This seems to accomplish the goal of having the \u003Ccode\u003EImages.xcassets\u003C/code\u003E folder in source control while still allowing the contents of this folder to be managed using the asset catalog over on the Solution Explorer in Visual Studio on Windows.\u003C/p\u003E\n\u003Cp\u003EMicrosoft confirmed that there are various known issues with iOS Designer and Visual Studio on Windows, recommending that if one wants to use the iOS Designer they should open the project in Visual Studio for Mac and use the iOS Designer there. Unfortunately, my previously mentioned friend who I am collaborating with on this piece of work does not use a Windows VM running on a Mac like I do, his development machine is a Surface Pro and he\u0027s connecting to a loaned Mac across a network when it\u0027s needed by Xamarin.iOS. In any case, why should my friend need to use Visual Studio for Mac in order to get the full, as advertised functionality of Xamarin? Reading the Xamarin documentation, one certainly gets the impression that the available functionality is equivalent regardless of whether one is using Visual Studio for Mac or Visual Studio on Windows. At the current time, this is just not the case. If Xamarin/Microsoft were clearer about the state of Xamarin as it relates to Visual Studio on Windows, then people could set their expectations appropriately, plan accordingly, and waste less time wrestling with things that just don\u0027t currently work.\u003C/p\u003E\n\u003Cp\u003ESo anyway, the fall back workaround here for me is to move forward with managing UI views entirely in code with no storyboard files and no Xamarin iOS Designer. I know some people prefer the code-based approach to views (when I was using RubyMotion, this was the approach), but I wouldn\u0027t have minded being able to take advantage of the iOS Designer if only so that visualising the view hierarchy could be a bit more intuitive and so that one could more easily take advantage of a large chunk of online Xamarin documentation, 3rd party blog posts and so on. Also, sorting out view constraints in code can be pretty time consuming in my experience so far.\u003C/p\u003E\n\u003Ch3 id=\u0022tldr\u0022\u003ETL;DR\u003C/h3\u003E\n\u003Cp\u003EI will be sticking it out with Xamarin for the foreseeable future and I do see promise in it. But as of the time of this writing, don\u0027t expect a hassle free and polished product if you are using Xamarin with Visual Studio on Windows.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EIn the \u0026quot;Connecting to the Mac\u0026quot; section, step 3, I did not like the idea of allowing remote login for \u0026quot;All users\u0026quot;. I went with the other option of allowing remote login for one specific user.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2017-10-25T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2017/10/25/xamarin-visual-studio-and-ios-development",
      "summary": "I\u0027ve tried out iOS development using a few different approaches over the years. Having previous experience with Ruby and finding the prospect of learning Objective-C not particularly attractive, I tried RubyMotion back in 2013. RubyMotion was a pretty cool take on things, Laurent Sansonetti did a great job of making RubyMotion feel familiar to a Ruby developer. But the problem for me was not so much anything specifically to do with RubyMotion so much as the fact that I had no previous experience with native iOS development. These cross-platform/cross-language tools are a lot easier to use if you have a fair amount of experience with the original platform/language that they are trying to be a bridge to. But if you do have such experience, then it begs the question why would you need a cross-platform/cross-language tool? It\u0027s a bit of a chicken and egg situation. How much familiarity with the original platform/language is enough?",
      "tags": [
        "xamarin",
        "visual-studio",
        "microsoft",
        "cross-platform",
        "ios",
        "mobile",
        "ruby",
        "c#",
        "swift",
        "objective-c",
        "fail"
      ],
      "title": "Xamarin, Visual Studio and iOS development",
      "url": "https://binarybalance.com.au/2017/10/25/xamarin-visual-studio-and-ios-development"
    },
    {
      "content_html": "\u003Cp\u003EA little while back I read \u003Ca href=\u0022https://m.signalvnoise.com/celebrate-the-web-by-using-another-browser-than-googles-chrome-174a45991c42\u0022\u003Ea post by DHH\u003C/a\u003E wherein he lays out his reasons for why we should be more omnivorous with our browser use, lest we end up back in a new version of the bad old days when \u003Ca href=\u0022http://knowyourmeme.com/memes/subcultures/internet-explorer\u0022\u003EInternet Explorer\u003C/a\u003E was the only show in town, holding back the progress of the open web. \u003Ca href=\u0022/2011/10/03/it-is-time-to-chrome-my-web-browsing\u0022\u003EFor some time now\u003C/a\u003E and like seemingly most people these days, my main browser has been Google\u0027s Chrome but David\u0027s post struck a chord with me and so - being on MacOS - the obvious alternative to Chrome that I could use is Safari. This is my experience of a long time Chrome user giving Safari an earnest go.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Ch3 id=\u0022work-vs-play\u0022\u003EWork vs Play\u003C/h3\u003E\n\u003Cp\u003ESo like David, I would add that I still use Chrome for web development work. but it\u0027s not for lack of trying with Safari. As one example: lately, a lot of the hands-on web development I have done involves some fairly intensive work with Microsoft\u0027s \u003Ca href=\u0022https://en.wikipedia.org/wiki/Dynamics_365\u0022\u003EDynamics 365\u003C/a\u003E platform and I\u0027ve noticed that D365 just does not seem to get along as well with Safari as it does with Chrome. From time to time I see cryptic and seemingly random JavaScript errors popping up in Safari that I don\u0027t see in Chrome (quite possibly D365\u0027s fault more so than Safari, not sure). D365 is a fairly JavaScript heavy web application and the general feeling I get while using Safari with D365 is that Safari just isn\u0027t processing client-side code as quickly as Chrome does. Apple boasts that \u003Ca href=\u0022https://www.apple.com/au/safari/\u0022\u003ESafari is faster at processing JavaScript than other modern browsers\u003C/a\u003E... maybe it\u0027s just the sites and web applications I tend to deal with, but it doesn\u0027t typically feel this way to me.\u003C/p\u003E\n\u003Cp\u003EWhile at one time sharing ancestry via aspects of \u003Ca href=\u0022https://en.wikipedia.org/wiki/WebKit\u0022\u003EWebKit\u003C/a\u003E, Chrome and Safari now seem to have diverged enough that there are some occasional rendering differences I encounter across the two browsers. For me this has been in scenarios with complex CSS where many layered styles make it hard to easily determine which combination of styles might be causing said differences.\u003C/p\u003E\n\u003Cp\u003EAs has always been the case, if one is using some of the more avant-garde CSS3 features, then some differences in browser support is to be expected. But still, what web developers need to deal with these days in terms of cross-browser incompatibilities is a dream compared to 10-15 years ago.\u003C/p\u003E\n\u003Cp\u003EI personally find the developer tools available in Chrome more usable but this may well just be that I\u0027ve spent more time with Chrome for dev work.\u003C/p\u003E\n\u003Cp\u003EMy overall point here is that Chrome to me is still a better and generally easier to use developer\u0027s browser. Although Safari has come a long way since the last time I spent any reasonable amount of time with it.\u003C/p\u003E\n\u003Ch3 id=\u0022smart-search-field\u0022\u003ESmart Search field\u003C/h3\u003E\n\u003Cp\u003EOn my high spec 2016 MacBook Pro, coupled with an relatively fast Internet connection, searches using Safari\u0027s \u0026quot;Smart Search\u0026quot; field are randomly slow at times. Sometimes the search will happen more or less instantly, other times Safari will seemingly sit there for maybe five or six seconds showing no activity at all before returning the Google search results page. Doing the equivalent in Chrome, I don\u0027t think I ever get a similar delay. Unticking various features in Safari\u0027s preferences under the \u0026quot;Search\u0026quot; tab can apparently make some difference and speed things up a bit, I don\u0027t think it has for me. My laptop is still pretty new with fully up to date software, my Internet connection is pretty fast (in Australian terms). The way I\u0027m using Safari\u0027s search is not unusual and should be catered for by the default search settings without causing weird intermittent delays. Smells like a bug to me.\u003C/p\u003E\n\u003Ch3 id=\u0022mousing-over-links-to-show-the-url\u0022\u003EMousing over links to show the URL\u003C/h3\u003E\n\u003Cp\u003EI didn\u0027t even realise this was important to me until I started using Safari and realised this feature was gone. If you mouse over a link in Chrome, you will see the URL near the bottom of the browser window. Safari does not do this by default and I found it surprisingly annoying. Call me paranoid, but in this day and age of \u003Ca href=\u0022https://en.wikipedia.org/wiki/Phishing\u0022\u003Ephishing scams\u003C/a\u003E and \u003Ca href=\u0022https://en.wikipedia.org/wiki/Not_safe_for_work\u0022\u003ENSFW links\u003C/a\u003E (is this actually a NSFW link? How might you know before you click it? :P), I often like to be able to see at a glance the URL of a link before I visit that URL. Because I suspect I probably am in the minority on this use case, I guess it\u0027s fair enough that I have to \u003Ca href=\u0022https://apple.stackexchange.com/questions/16759/how-can-i-make-safari-show-the-url-when-i-hover-over-a-link\u0022\u003Echange a setting to make this happen in Safari\u003C/a\u003E.\u003C/p\u003E\n\u003Ch3 id=\u0022safari-browser-extensions\u0022\u003ESafari browser extensions\u003C/h3\u003E\n\u003Cp\u003EThe selection of browser extensions available for Safari is quite limited. luckily I\u0027ve become pretty conservative in regards to which browser extensions I install\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E so I have only a small handful of browser extensions that I really need now anyway, the important ones of which I have found for Safari or some acceptable equivalent thereof. I have noticed however that some of the Safari extensions I do use don\u0027t seem to work quite as well as their Chrome counterparts. Whether the problem is more on the Safari side or the extension side, I\u0027m not currently sure.\u003C/p\u003E\n\u003Ch3 id=\u0022battery-life\u0022\u003EBattery life\u003C/h3\u003E\n\u003Cp\u003EApple say that the have optimised Safari running on Mac hardware and MacOS to maximise battery life and this really shows in my experience (Apple claims 2 hours longer browsing than Chrome/Firefox, 4 hours longer Netflix watching than Chrome/Firefox). I have noticed that Chrome devours my laptop battery while Safari does indeed seem to only sip it like a fine wine. The only other thing I use regularly that eats my battery faster than Chrome is running a full Windows virtual machine (try both at the same time for bonus battery death!). Generally any battery conservation I can get is a pretty killer feature for me when I\u0027m out and about.\u003C/p\u003E\n\u003Ch3 id=\u0022nice-integration-with-the-os\u0022\u003ENice integration with the OS\u003C/h3\u003E\n\u003Cp\u003EAs with most of Apple\u0027s own applications, Safari has some nice little points of integration between it and the Touch Bar on my MacBook Pro, showing little thumbnail images of pages I have open in Safari and allowing me to tap the thumbnails to switch between them, also present is a button on the Touch Bar that opens the (intermittently slow) \u0026quot;Smart Search\u0026quot; and allows access to favourites. Not really \u0026quot;must have\u0026quot; features, more \u0026quot;nice to have\u0026quot;. I think that last sentence generally sums up the Touch Bar on MacBook Pros actually (not so for the fingerprint reader which comes along with the Touch Bar though, love the fingerprint reader!) but enough has probably been written on this already elsewhere.\u003C/p\u003E\n\u003Ch3 id=\u0022tldr\u0022\u003ETL;DR\u003C/h3\u003E\n\u003Cp\u003EFor everyday browsing and if you have a Mac, then I would recommend Safari. It\u0027s a decent browser these days and the work Apple has done to integrate it into MacOS and maximise battery life while browsing with Safari really shows.\u003C/p\u003E\n\u003Cp\u003EYou don\u0027t have to go on Safari, but do consider trying out a browser other than Chrome and do your little part to support the open web.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EThe recent \u003Ca href=\u0022https://twitter.com/chrispederick/status/892768218162487300?lang=en\u0022\u003Ecompromise of Web Developer for Chrome\u003C/a\u003E was bit of a wake-up call for me. If you\u0027re a developer, then you probably already know that browser extensions can run with very privileged access on your system and can have direct access to all manner of sensitive personal details (you use online banking right?). But this incident drove it home for me. You don\u0027t even need to install an outright malicious extension, even competent and upstanding developers like Chris Pederick can still make mistakes, all of us can. These days I have to be very sure that I need a given browser extension and will carefully consider which permissions the extension needs before installing it.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2017-09-19T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2017/09/19/going-on-safari",
      "summary": "A little while back I read a post by DHH wherein he lays out his reasons for why we should be more omnivorous with our browser use, lest we end up back in a new version of the bad old days when Internet Explorer was the only show in town, holding back the progress of the open web. For some time now and like seemingly most people these days, my main browser has been Google\u0027s Chrome but David\u0027s post struck a chord with me and so - being on MacOS - the obvious alternative to Chrome that I could use is Safari. This is my experience of a long time Chrome user giving Safari an earnest go.",
      "tags": [
        "browsers",
        "safari",
        "chrome",
        "user-interface",
        "open-web"
      ],
      "title": "Going on Safari",
      "url": "https://binarybalance.com.au/2017/09/19/going-on-safari"
    },
    {
      "content_html": "\u003Cp\u003EIf you\u0027ve spent any time working in IT within or around the Australian Government, you\u0027ve probably heard about the\u00A0\u003Ca href=\u0022https://www.dta.gov.au/standard/\u0022\u003EDigital Service Standard\u003C/a\u003E, administered by the Australian Government\u0027s \u003Ca href=\u0022https://www.dta.gov.au\u0022\u003EDigital Transformation Agency\u00A0(DTA)\u003C/a\u003E. But what does the Digital Service Standard really mean for those who work in/around government today?\u003C/p\u003E\n\u003Cp\u003EA staff member\u00A0of\u00A0the DTA once told me that to them the Digital Service Standard represents permission for government to work in a new and different way (well, new and different to government perhaps). In large part, it\u0027s permission for government to take inspiration from\u00A0\u003Ca href=\u0022http://agilemanifesto.org\u0022\u003Eagile delivery principles\u003C/a\u003E\u00A0and start-up culture in aid of providing better services to citizens. In the Australian Public Service however, this is more easily said than done as a large part of agile delivery and start-up culture is predicated on the assumption that the groups and organisations involved will be small and nimble, two adjectives that typically do not apply to government agencies. This was but one topic that I discussed with DTA representatives at a field trip taken earlier this year to the Canberra DTA office to observe a Digital Service Standard assessment for a government service known as\u00A0\u003Ca href=\u0022https://www.blood.gov.au/bloodnet\u0022\u003EBloodNet\u003C/a\u003E, managed by the National Blood Authority.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EInformation on \u003Ca href=\u0022https://www.dta.gov.au/standard/meeting-standard/\u0022\u003Ehow government services are assessed against the\u00A0Digital Service Standard\u003C/a\u003E is available on the DTA website\u00A0but seeing an assessment in the flesh, so to speak, provided useful clarity in regards to the practicalities of the process. The assessment covered approximately four hours and while I initially thought that this sounded like an overly large amount of time, as the DTA representative facilitating our observation explained, considering that an assessment can include covering the full 13 service standard criteria (depending on whether it is an\u00A0\u003Ca href=\u0022https://www.dta.gov.au/standard/meeting-standard/staged-assessment-process/\u0022\u003EAlpha or Beta assessment\u003C/a\u003E), plus an initial introduction to the service being assessed, four hours can be occupied fairly easily and indeed this was the case on the day. The \u003Ca href=\u0022https://www.dta.gov.au/standard/assessments/alpha-assessment-bloodnet/\u0022\u003Eresults of the assessment we observed can now be found on the DTA website\u003C/a\u003E, by the way.\u003C/p\u003E\n\u003Cp\u003EMy main takeaways from our observation were:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EI believe there is a reason why the DTA puts \u0026quot;\u003Ca href=\u0022https://www.dta.gov.au/standard/1-user-needs/\u0022\u003EUnderstand user needs\u003C/a\u003E\u0026quot; as their very first criterion of the Digital Service Standard, I personally see this as being the central and underpinning requirement of the Digital Service Standard \u2013 if your delivery team is not in some way actively engaging with real live end-users of your service, then you are not meeting the Digital Service Standard. Why does the service exist? What is the user need that has given rise to its creation? Can the delivery team provide an \u0026quot;\u003Ca href=\u0022https://en.wikipedia.org/wiki/Elevator_pitch\u0022\u003Eelevator pitch\u003C/a\u003E\u0026quot; that accurately and succinctly answers these questions? What has changed the most due to user feedback (e.g. initial assumptions and design)?\u003C/li\u003E\n\u003Cli\u003EShow, don\u0027t just\u00A0tell \u2013 showing a prototype of the service is well regarded and evidence of what work has been done to meet the Digital Service Standard, be it \u003Ca href=\u0022https://en.wikipedia.org/wiki/User_story\u0022\u003Euser stories\u003C/a\u003E and/or \u003Ca href=\u0022https://en.wikipedia.org/wiki/Persona_(user_experience)\u0022\u003Euser personae\u003C/a\u003E based upon consultation with real-world users, user pathways through the service in development, and so on will go a long way to satisfying the requirements of the Digital Service Standard.\u003C/li\u003E\n\u003Cli\u003EAs far as the DTA is concerned, the Digital Service Standard applies to public facing portions of government services, the DTA is not interested in the inward facing portions of government IT solutions. However, there is nothing stopping individual government agencies from applying similar principles to inward facing components.\u003C/li\u003E\n\u003Cli\u003EA \u0026quot;mock\u0026quot; assessment session may be useful to a delivery team before a real assessment is done. This can allow the delivery team to better understand how an assessment is conducted, what will be covered and what they need to do in order for the process to be one that adds value to their project.\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3 id=\u0022agile-in-name-only\u0022\u003EAgile in name only?\u003C/h3\u003E\n\u003Cp\u003EBut what is government really trying to do here? Is it paying lip service to an imposed standard or is it trying to meet the spirit of that standard? I would hope the latter and so I am particularly interested in thinking about how government can truly be agile. As mentioned, with the introduction of the Digital Service Standard government now has permission to be so. But permission alone does not an agile environment make. Subsequent culture change is required. The Digital Service Standard alludes to agile concepts across a number of its criteria with \u003Ca href=\u0022https://www.dta.gov.au/standard/3-agile-and-user-centred/\u0022\u003ECriterion 3\u003C/a\u003E being the most explicit about it. I personally see this as the single most challenging aspect of the Digital Service Standard for government to adopt and simultaneously the most valuable if such adoption can be achieved.\u003C/p\u003E\n\u003Cp\u003EI recently attended a talk given by\u00A0\u003Ca href=\u0022http://agileleadershipacademy.com/pat-reed/\u0022\u003EPat Reed, agile coach extraordinaire\u003C/a\u003E, whereat she discussed a number of relevant points as they relate to adoption of agile processes and user-centric design (both in large and small organisations):\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EFeedback loops that \u003Cem\u003Eactually result in change\u003C/em\u003E tend to be a helpful thing if one wishes to maintain a nimble and productive environment.\u003C/li\u003E\n\u003Cli\u003EApply \u0026quot;\u003Ca href=\u0022https://en.wikipedia.org/wiki/First_principle\u0022\u003Efirst principle\u003C/a\u003E\u0026quot; thinking, i.e. do your own thinking and focus on the essence of a problem.\u003C/li\u003E\n\u003Cli\u003EAre we delighting our users? Granted,\u00A0\u0026quot;delighting\u0026quot; may be a strong word to apply in some government scenarios where users may have no choice but to interact with a given government service, but the sentiment is no less relevant. To delight users, we must know who they are. It\u0027s also important to note that the person or persons funding a project are stakeholders, but typically not service users.\u003C/li\u003E\n\u003Cli\u003EUnderstand what success looks like to the users and why it looks how it does. How does the user define value?\u003C/li\u003E\n\u003Cli\u003EHow are we doing based on our commitments to our users? Are we creating value for our users or just waste outputs? Waste here is defined as all those things a project generates that do not directly lead to delivering value into the hands of a user, a general rule of thumb being that waste is anything that does not end up in production: reports, measuring variance to planned forecasts, velocity, etc. and while some amount of these outputs may be necessary \u2013 particularly in the public service \u2013 they should be minimised.\u003C/li\u003E\n\u003Cli\u003EImpediments should be taken responsibility for and resolved. At the least, impediments need to be clearly highlighted.\u003C/li\u003E\n\u003Cli\u003EFailures should be recognised quickly and de-funded.\u003C/li\u003E\n\u003Cli\u003ERe-frame challenges into opportunities \u2013\u00A0\u003Ca href=\u0022https://gettingreal.37signals.com/ch03_Embrace_Constraints.php\u0022\u003Econstraints can be a good thing\u003C/a\u003E\u00A0as the proudly bootstrapped (and well known within web development circles) American company Basecamp (previously known as 37Signals) has opined for many years.\u003C/li\u003E\n\u003Cli\u003EIt is a skill to be comfortable on the edge of chaos.\u003C/li\u003E\n\u003Cli\u003EMeasurable outcomes are your friend but ensure you are measuring the right things, e.g. value delivered over time, quality and technical debt.\u003C/li\u003E\n\u003Cli\u003EUncertainty around effort estimates is greatest at the start of projects and people are inherently bad at effort estimation. Making assumptions about effort estimates and then treating them as facts is enabling the delusion that accurate estimates are possible\u00A0early in a project\u0027s life cycle. One form of the previously mentioned waste is the result of trying to establish accurate upfront effort estimates, all this truly accomplishes is imposing pointless stress on the staff involved. Change the question, ask instead: how much is the project owner prepared to invest? Re-estimate as the\u00A0\u003Ca href=\u0022http://www.agilenutshell.com/cone_of_uncertainty\u0022\u003Econe of uncertainty\u003C/a\u003E\u00A0narrows. Read\u00A0\u003Cem\u003ESoftware Estimation: Demystifying the Black Art\u003C/em\u003E by Steve McConnell, published via Microsoft Press (no seriously, if you are interested in practical, applicable software estimation techniques that actually makes sense then read this book - \u003Ca href=\u0022http://www.stevemcconnell.com/estimation-01.pdf\u0022\u003Ean excerpt is available\u00A0online\u003C/a\u003E).\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3 id=\u0022big-agile\u0022\u003EBig agile?\u003C/h3\u003E\n\u003Cp\u003EOrganisation size also tends to inevitably come into play when I consider agile. I\u0027ve worked in small to medium sized businesses all the way up to the largest Australian Government departments and it\u0027s self-evident to me that the larger an organisation grows, the less agile it will by default become.\u003C/p\u003E\n\u003Cp\u003EIt is interesting to theorise then on how a large organisation like a government agency could best support agility and innovation.\u003C/p\u003E\n\u003Cp\u003EWL Gore \u0026amp; Associates, Inc. is a $3.1 billion American multinational, founded in 1958 by Wilbert Lee Gore and his wife Genevieve Walton Gore with a\u00A0\u003Ca href=\u0022http://fortune.com/2015/03/05/w-l-gore-culture/\u0022\u003Efairly unusual culture\u003C/a\u003E. The company specialises in products derived from fluoropolymers and is best known as the developer of waterproof, breathable Gore-Tex fabrics. Why is WL Gore \u0026amp; Associates relevant to agile user-centric delivery and thus the Digital Service Standard? \u003Ca href=\u0022http://fortune.com/2015/03/05/w-l-gore-culture/\u0022\u003EThey are\u00A0a large, successful organisation that has found a way to stay agile and continue to foster innovation despite their size\u003C/a\u003E. WL Gore \u0026amp; Associates has many intriguing practices but the one that I would like to highlight here is\u00A0\u003Ca href=\u0022https://www.theguardian.com/business/2008/nov/02/gore-tex-textiles-terri-kelly\u0022\u003EWilbert Gore\u0027s belief in the need to \u201Cdivide so that you can multiply\u201D\u003C/a\u003E. If I may quote from the previously linked article:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EWhen units within WL Gore grow to around 200 people, they are usually split up. These small groups are organised in clusters or campuses ideally with a dozen or so sites in close enough proximity to permit knowledge synergies, but still intimate and separate enough to encourage ownership and identity. An accountant might complain that this creates duplication of costs; Gore believes those are more than offset by the benefits smallness brings.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EWhy does Gore believe this? I suggest it is because Gore has realised that beyond a certain organisational size, agility and innovation is inevitably subsumed and hamstrung by red tape, by onerous governance procedures, by illogical levels of risk aversion. If Australian Government agencies are ever to truly embody some of the most important principles of the Digital Service Standard, then they too must explore how they can find their own way towards \u0026quot;the benefits smallness brings\u0026quot;.\u003C/p\u003E\n\u003Ch3 id=\u0022get-involved\u0022\u003EGet involved\u003C/h3\u003E\n\u003Cp\u003EThe Digital Service Standard represents the first step in a long journey for the Australian Public Service. The opportunities\u00A0afforded by this journey are many and as IT professionals working with(in) the public service\u00A0on projects assessed against the Digital Service Standard and/or assessing services against the standard ourselves, we are the guides at the forefront of this journey.\u003C/p\u003E\n\u003Cp\u003EThe only thing necessary for the triumph of organisational inertia is that innovative people do nothing.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2017-08-12T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2017/08/12/dta-assessment-and-what-it-means-to-the-australian-government",
      "summary": "If you\u0027ve spent any time working in IT within or around the Australian Government, you\u0027ve probably heard about the Digital Service Standard , administered by the Australian Government\u0027s Digital Transformation Agency (DTA) . But what does the Digital Service Standard really mean for those who work in/around government today?",
      "tags": [
        "bureaucracy",
        "enterprise",
        "government",
        "agile",
        "digital-service-standard"
      ],
      "title": "DTA assessment and what it means to the Australian Government",
      "url": "https://binarybalance.com.au/2017/08/12/dta-assessment-and-what-it-means-to-the-australian-government"
    },
    {
      "content_html": "\u003Cp\u003EIt\u0027s sad but true that my last blog post here was more than a year ago, how time flies. But, I\u0027m not dead (\u003Ca href=\u0022https://en.wikipedia.org/wiki/I%27m_Not_Dead\u0022\u003Eas Pink once said\u003C/a\u003E) and I finally have some time to write an update to my \u003Ca href=\u0022/2016-03-27-jekylls-and-cdns-and-github-pages-oh-my\u0022\u003Eprevious post\u003C/a\u003E - or another instalment of a perennial favourite post topic of mine: where and how is my blog hosted now?!\u003C/p\u003E\n\u003Cp\u003EIn my last post I left things with my blog running on \u003Ca href=\u0022https://pages.github.com/\u0022\u003EGitHub Pages\u003C/a\u003E for hosting and \u003Ca href=\u0022https://jekyllrb.com/\u0022\u003EJekyll\u003C/a\u003E for content management. Well, I\u0027m still using Jekyll but I have now moved to \u003Ca href=\u0022https://azure.microsoft.com/en-au/services/app-service/\u0022\u003EAzure App Service\u003C/a\u003E for hosting. This isn\u0027t a free option but I happen to have some Azure credits hanging around for various reasons and I thought I may as well make use of them to see what I could sort out for my blog on the Azure platform and finally get that proper end-to-end \u003Ca href=\u0022https://en.wikipedia.org/wiki/Public_key_certificate\u0022\u003ESSL/TLS encryption\u003C/a\u003E I\u0027ve been wanting for some time now.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EIt\u0027s worth noting that for what I needed (custom domain, SSL/TLS) the smallest/cheapest App Service plan I could get away with is what\u0027s known as \u003Ca href=\u0022https://azure.microsoft.com/en-au/pricing/details/app-service/plans/\u0022\u003Ethe \u0027Basic\u0027 (B1) App Service plan\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EI wanted to use Azure App Service rather than a full-blown virtual server because it\u0027s cheaper (to help make the most of my Azure credits) but also because I want to minimise server admin/maintenance work, I never really want a full server I need to manage if I can get away with something else. On the face of it, this approach seems non-viable because Jekyll relies on \u003Ca href=\u0022https://www.ruby-lang.org/en/downloads/\u0022\u003ERuby\u003C/a\u003E and Ruby isn\u0027t supported \u003Ca href=\u0022https://en.wikipedia.org/wiki/Out_of_the_box_(feature)\u0022\u003EOOTB\u003C/a\u003E on App Service instances. However, it turns out that standard App Service instances - as opposed to the Linux-based ones - are still running a (cut down) Windows underneath, with a mostly functional command line and thanks to a few helpful blog posts (\u003Ca href=\u0022https://rimdev.io/deploying-jekyll-to-windows-azure-app-services/\u0022\u003Ethe most up to date one I found being from Khalid Abuhakmeh\u003C/a\u003E), I was able to get Ruby and the various other Jekyll dependencies installed on a standard App Service instance\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E. You might think that using one of the Linux-based instances would have been easier if I needed Ruby... I tried but at the moment at least, I did not find it easier. I had some issues with the \u003Ccode\u003Epath\u003C/code\u003E not working as I would have expected (once I actually figured out how to get to a console session for the Linux instance, that is) and didn\u0027t feel like putting the time in to try and work out what was happening. Plus the Linux App Service instances are still in public preview and not entirely stable yet.\u003C/p\u003E\n\u003Cp\u003ERunning the scripts from Khalid\u0027s previously linked post worked fine other than one issue I ran into: I had updated the script to install Ruby version 2.3.3 on my App Service instance. This was a fairly recent version, the script was already looking \u003Ca href=\u0022https://bintray.com/oneclick/rubyinstaller/rubyinstaller\u0022\u003Eon bintray where 2.3.3 is the latest version available at the time of this writing\u003C/a\u003E and while I was getting things working I wanted minimal change to the script. I ended up with this:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code\u0022\u003E\u003Ccode class=\u0022language-shell_session\u0022 data-language=\u0022shell_session\u0022\u003E@if \u0026quot;%SCM_TRACE_LEVEL%\u0026quot; NEQ \u0026quot;4\u0026quot; @echo off\n\nREM Put Ruby in Path\nREM You can also use %TEMP% but it is cleared on site restart. Tools is persistent.\nSET PATH=%PATH%;D:\\home\\site\\deployments\\tools\\r\\ruby-2.3.3-x64-mingw32\\bin\n\nREM I am in the repository folder\npushd D:\\home\\site\\deployments\nif not exist tools md tools\ncd tools\nif not exist r md r\ncd r\nif exist ruby-2.3.3-x64-mingw32 goto end\n\necho No Ruby, need to get it!\n\nREM Get Ruby\nREM 64bit\ncurl -o ruby233.zip -L https://bintray.com/artifact/download/oneclick/rubyinstaller/ruby-2.3.3-x64-mingw32.7z?direct\nREM Azure puts 7zip here!\necho START Unzipping Ruby\nSetLocal DisableDelayedExpansion \u0026amp; d:\\7zip\\7za x -xr!*.ri -y ruby233.zip \u0026gt; rubyout\necho DONE Unzipping Ruby\n\nREM Get DevKit to build Ruby native gems\nREM If you don\u0026#39;t need DevKit, rem this out.\ncurl -o DevKit.zip http://cdn.rubyinstaller.org/archives/devkits/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe\necho START Unzipping DevKit\nd:\\7zip\\7za x -y -oDevKit DevKit.zip \u0026gt; devkitout\necho DONE Unzipping DevKit\n\nREM Init DevKit\nruby DevKit\\dk.rb init\n\nREM Tell DevKit where Ruby is\necho --- \u0026gt; config.yml\necho - D:/home/site/deployments/tools/r/ruby-2.3.3-x64-mingw32 \u0026gt;\u0026gt; config.yml\n\nREM Setup DevKit\nruby DevKit\\dk.rb install\n\npopd\n\n:end\n\nREM Need to be in Reposistory\ncd %DEPLOYMENT_SOURCE%\ncd\n\ncall gem install bundler\n\nECHO Bundler install (not update!)\ncall bundle install\n\ncd %DEPLOYMENT_SOURCE%\ncd\n\nECHO Running Jekyll\ncall bundle exec jekyll build\n\nREM KuduSync is after this!\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EHowever, locally I was using Ruby 2.4.0 and this was the version originally specified in my site\u0027s \u003Ccode\u003EGemfile\u003C/code\u003E:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-ruby\u0022 data-language=\u0022ruby\u0022\u003Esource \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026#39;https://rubygems.org\u0026#39;\u003C/span\u003E\nruby \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026#39;2.4.0\u0026#39;\u003C/span\u003E\n\ngem \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026#39;github-pages\u0026#39;\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThis stopped the call to \u003Ccode\u003Ebundle install\u003C/code\u003E in \u003Ccode\u003Egetruby.cmd\u003C/code\u003E from successfully completing on my App Service instance until I changed the Ruby version specified in my \u003Ccode\u003EGemfile\u003C/code\u003E to match the version of Ruby \u003Ccode\u003Egetruby.cmd\u003C/code\u003E had installed (i.e. 2.3.3) and deployed that change to Azure. At some point I will no doubt update to a newer version of Ruby on my App Service instance but for now, 2.3.3 is fine.\u003C/p\u003E\n\u003Cp\u003EOne more little gotcha that I\u0027m glad I noticed is that because my blog was now being served up by \u003Ca href=\u0022https://en.wikipedia.org/wiki/Internet_Information_Services\u0022\u003EIIS\u003C/a\u003E, the fact that I had set my Jekyll \u003Ca href=\u0022https://jekyllrb.com/docs/permalinks/\u0022\u003Epermalinks\u003C/a\u003E to have no file extension meant that all my blog posts were returning a 404 error. \u003Ca href=\u0022https://twitter.com/shanselman\u0022\u003EScott Hanselman\u003C/a\u003E to the rescue with \u003Ca href=\u0022https://www.hanselman.com/blog/RedirectingASPNETLegacyURLsToExtensionlessWithTheIISRewriteModule.aspx\u0022\u003Ean old blog post about how to use the IIS Url Rewrite Module\u003C/a\u003E to do exactly what I was wanting to do: rewrite a request for \u003Ccode\u003E/foo\u003C/code\u003E to the underlying \u003Ccode\u003Efoo.html\u003C/code\u003E. Adding a \u003Ccode\u003Eweb.config\u003C/code\u003E file containing the appropriate rewrite rules to the root of my app sorted this issue.\u003C/p\u003E\n\u003Cp\u003ESo I had Jekyll running successfully on Azure App Service and at this stage I was \u003Ca href=\u0022https://docs.microsoft.com/en-us/azure/app-service-web/app-service-deploy-local-git\u0022\u003Edeploying to App Service from a local Git repository\u003C/a\u003E. Which was OK for testing, but this deployment method doesn\u0027t support \u003Ca href=\u0022https://help.github.com/articles/connecting-to-github-with-ssh/\u0022\u003ESSH\u003C/a\u003E, which just will not do, right!? I\u0027ll come back to this point later.\u003C/p\u003E\n\u003Ch2 id=\u0022lets-encrypt-custom-domain-and-end-to-end-ssltls-encryption\u0022\u003ELet\u0027s Encrypt, custom domain and end-to-end SSL/TLS encryption\u003C/h2\u003E\n\u003Cp\u003EOnto sorting out my custom domain and getting proper SSL/TLS encryption!\u003C/p\u003E\n\u003Cp\u003EI wanted to sort out one of those cool, automated and free \u003Ca href=\u0022https://letsencrypt.org/\u0022\u003ELet\u0027s Encrypt\u003C/a\u003E certificates for use with my domain, \u003Ca href=\u0022https://docs.microsoft.com/en-us/azure/app-service-web/app-service-web-tutorial-custom-domain\u0022\u003Einstructions for adding a custom domain to an App Service instance are over in the Azure documentation\u003C/a\u003E. I went with a CNAME record as I currently also use a \u003Ccode\u003Eblog\u003C/code\u003E sub-domain for this site). As my domain was already in use I needed to be pretty careful when making DNS changes as such changes could easily cause unexpected downtime\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E. I also wanted to consolidate my DNS configuration back on one provider (\u003Ca href=\u0022https://dnsimple.com/\u0022\u003EDNSimple\u003C/a\u003E), as my DNS settings (for this and other sites I manage) were split across DNSimple and \u003Ca href=\u0022https://www.cloudflare.com/\u0022\u003ECloudFlare\u003C/a\u003E, from the last time I did some work on my hosting arrangements. Suffice it to say that I got my custom domain successfully added to my App Service instance after some DNS record wrangling. Curiously, the Azure Portal did not immediately list the custom domain as being added to my App Service instance. It told me via a pop-up message that the custom domain was added successfully and it none the less effectively did seem to have been be added immediately after I completed the procedure. But for me it just took a while for it to show up under \u0027Custom Domains\u0027 within the App Service instance in the Azure Portal \u003Ca href=\u0022https://en.wikipedia.org/wiki/User_interface\u0022\u003EUI\u003C/a\u003E, which I found a little confusing.\u003C/p\u003E\n\u003Cp\u003EActually getting a Let\u0027s Encrypt certificate sorted out for an App Service instance is not \u0027one-click\u0027 easy, but it\u0027s made significantly easier by an Azure site extension called \u003Ca href=\u0022https://www.siteextensions.net/packages/letsencrypt\u0022\u003EAzure Let\u0027s Encrypt\u003C/a\u003E by \u003Ca href=\u0022https://github.com/sjkp\u0022\u003ESimon JK Pedersen\u003C/a\u003E. Instructions on how to install and configure this extension can be found from \u003Ca href=\u0022https://gooroo.io/GoorooTHINK/Article/16420/Lets-Encrypt-Azure-Web-Apps-the-Free-and-Easy-Way/21872\u0022\u003ENick Molnar\u003C/a\u003E. The only problem I had following Nick\u0027s instructions was when trying to connect to my Azure tenant and create a new AD application using PowerShell ISE, I was getting the error \u003Ccode\u003ERun Login-AzureRmAccount to login.\u003C/code\u003E even though I had already logged in successfully. The fix for me was to run the \u003Ccode\u003EUpdate-Module\u003C/code\u003E PowerShell command to update all modules and then restart my local machine \u003Ca href=\u0022https://blog.kloud.com.au/2016/07/12/powershell-error-run-login-azurermaccount-to-login-in-azurerm-when-already-logged-in/\u0022\u003Eas described by Darren Robinson\u003C/a\u003E which I gather sorts out some issue related to Azure PowerShell module install paths being wrong in some cases or something.\u003C/p\u003E\n\u003Cp\u003ESo now I had my custom domain along with a cool free Let\u0027s Encrypt SSL/TLS certificate all set up. Noice.\u003C/p\u003E\n\u003Cp\u003EAs mentioned in Nick Molnar\u0027s previously linked post, Let\u0027s Encrypt certificates expire after three months and the expectation is that site admins will automate the process of renewing their certificate(s), so it\u0027s lucky that the Azure Let\u0027s Encrypt site extension helps with this by creating a WebJob that renews your certificate for you 22 days before expiration (\u003Ca href=\u0022https://github.com/sjkp/letsencrypt-siteextension\u0022\u003Eaccording to the README on the project repository\u003C/a\u003E), as Let\u0027s Encrypt sends reminder emails 20 days before. The only thing I\u0027d add is that for this WebJob of type \u0027Continuous\u0027 to keep running and actually renew the certificate when the time comes, the \u0027Always On\u0027 setting in the App Service instance\u0027s \u0027Application Settings\u0027 section in the Azure Portal needs to be set to \u0027On\u0027.\u003C/p\u003E\n\u003Cp\u003EAnd the final touch, making sure that any non-secure (HTTP) requests to my site were redirected to the secure equivalent (HTTPS). Turns out the easiest way to do this for Azure App Service is the \u003Ca href=\u0022https://www.siteextensions.net/packages/RedirectHttpToHttps/\u0022\u003ERedirect HTTP to HTTPS\u003C/a\u003E Azure site extension by \u003Ca href=\u0022https://github.com/gregjhogan/\u0022\u003EGreg Hogan\u003C/a\u003E. This little extension worked great once I\u0027d added a binding to my Let\u0027s Encrypt certificate under \u0027SSL Certificates\u0027 for my App Service instance. To be clear, the Let\u0027s Encrypt certificate was working before I added this binding but not the redirect from HTTP requests to HTTPS. So it would appear that adding this certificate binding is not strictly required when using the Azure Let\u0027s Encrypt site extension. But to get the Redirect HTTP to HTTPS site extension working, it seems necessary\u003Ca id=\u0022fnref:3\u0022 href=\u0022#fn:3\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E3\u003C/sup\u003E\u003C/a\u003E. This does raise the question though of whether me having manually added this certificate binding will cause any issue when the time comes for my certificate to be automatically renewed by the WebJob. I guess I\u0027ll find out in a couple of months time or so.\u003C/p\u003E\n\u003Ch2 id=\u0022deployment\u0022\u003EDeployment\u003C/h2\u003E\n\u003Cp\u003EI didn\u0027t like the idea of having to use a username and password to deploy to Azure App Service from my local Git repository. Another option is to deploy to App Service via GitHub. The process works more or less \u003Ca href=\u0022https://github.com/blog/2056-automating-code-deployment-with-github-and-azure\u0022\u003Eas described on the GitHub blog\u003C/a\u003E. The UI on the Azure side of things has changed slightly, it\u0027s \u0027Deployment Options\u0027 not \u0027Continuous Deployment\u0027 within the App Service instance now. But once set up, you can push changes to your repo on GitHub and those changes auto-magically get deployed to the connected Azure App Service instance, which is pretty neat. I still keep a repo for this site over on GitHub even though I\u0027m not using GitHub Pages any more, so this option is ideal for me.\u003C/p\u003E\n\u003Ch2 id=\u0022a-word-on-local-blog-tooling\u0022\u003EA word on local blog tooling\u003C/h2\u003E\n\u003Cp\u003EOn my local machine I have my local Git repository for my blog along with \u003Ca href=\u0022https://code.visualstudio.com/\u0022\u003EVisual Studio Code\u003C/a\u003E\u003Ca id=\u0022fnref:4\u0022 href=\u0022#fn:4\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E4\u003C/sup\u003E\u003C/a\u003E, which is free, works great on MacOS and comes with a nice \u003Ca href=\u0022https://code.visualstudio.com/docs/languages/markdown\u0022\u003EMarkdown preview feature\u003C/a\u003E. There\u0027s also a \u003Ca href=\u0022https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker\u0022\u003ECode SpellChecker\u003C/a\u003E extension available for VS Code, which I have installed.\u003C/p\u003E\n\u003Ch2 id=\u0022perfection\u0022\u003EPerfection?\u003C/h2\u003E\n\u003Cp\u003EFor how I want to write and publish these days, this set up is as close to perfect as I\u0027ve yet found. Now I just need to find more time to write. :P\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EI would also note that there is \u003Ca href=\u0022https://www.siteextensions.net/packages/JekyllExtension/\u0022\u003Ean Azure site extension called Jekyll\u003C/a\u003E from \u003Ca href=\u0022https://twitter.com/cfowlermsft\u0022\u003ECory Fowler\u003C/a\u003E that automates the process of installing Jekyll and the required dependencies for Azure App Service. But as of the time of this writing, \u003Ca href=\u0022https://twitter.com/cfowlerMSFT/status/883242486893690881\u0022\u003Ethe extension needs an update before it is usable\u003C/a\u003E and I wanted to get things sorted now, so I went with the more manual install process.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003ENot that downtime really matters that much for this little blog site, but old habits die hard I guess.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:3\u0022\u003E\n\u003Cp\u003EBefore I manually added this certificate binding, installing Redirect HTTP to HTTPS site extension and restarting my App Service instance caused a 502 server error. Adding the binding then re-installing the Redirect HTTP to HTTPS site extension worked.\u003Ca href=\u0022#fnref:3\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:4\u0022\u003E\n\u003Cp\u003EVisual Studio Code is a surprisingly awesome text editor, it\u0027s almost like Microsoft is listening to what developers really want these days.\u003Ca href=\u0022#fnref:4\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2017-07-12T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2017/07/12/jekyll-and-azure-app-service-the-quest-for-end-to-end-encryption",
      "summary": "It\u0027s sad but true that my last blog post here was more than a year ago, how time flies. But, I\u0027m not dead ( as Pink once said ) and I finally have some time to write an update to my previous post - or another instalment of a perennial favourite post topic of mine: where and how is my blog hosted now?!",
      "tags": [
        "security",
        "cdn",
        "tls",
        "privacy",
        "github",
        "jekyll",
        "ruby",
        "azure"
      ],
      "title": "Jekyll and Azure App Service: the quest for end-to-end encryption",
      "url": "https://binarybalance.com.au/2017/07/12/jekyll-and-azure-app-service-the-quest-for-end-to-end-encryption"
    },
    {
      "content_html": "\u003Cp\u003ESome months ago, I finally got around to redesigning my blog with \u003Ca href=\u0022https://en.wikipedia.org/wiki/Responsive_web_design\u0022\u003Eresponsiveness\u003C/a\u003E in mind, along with switching it to run on a new blogging app and hosting platform. Previous to this, I had been using the excellent \u003Ca href=\u0022https://github.com/xaviershay/enki/\u0022\u003EEnki blogging app\u003C/a\u003E (which I still remain quite fond of, assisting with maintaining the project on occasion) and \u003Ca href=\u0022https://www.heroku.com/\u0022\u003EHeroku\u003C/a\u003E. This combination resulted in a free hosting situation \u003Ca href=\u0022https://www.heroku.com/pricing\u0022\u003Ewith some limitations\u003C/a\u003E which I was generally quite happy with. But while Enki is a great little Rails app, especially if you\u2019re the kind of person that likes to be able to blog from any place where you have a web browser and an Internet connection, I felt like I needed a simpler platform. Something where I can worry less about config and maintenance, something that just lets me write my content and stays out of the way. And while Heroku is one of the most developer friendly hosting platforms I have ever used, I was hoping to find something at about the same ongoing price point (say, $0) without the caveats of Heroku\u2019s free plan.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Ch3 id=\u0022jekyll-and-github-pages\u0022\u003EJekyll and GitHub Pages\u003C/h3\u003E\n\u003Cp\u003EI have been a GitHub user for some time. I do pay for some private repositories that I host there\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E, so I guess one could argue that my use of \u003Ca href=\u0022https://pages.github.com/\u0022\u003EGitHub Pages\u003C/a\u003E as my new hosting platform for \u003Ca href=\u0022https://jekyllrb.com/\u0022\u003EJekyll\u003C/a\u003E isn\u2019t really free. But I was paying GitHub before I started using GitHub Pages, so I see GitHub Pages as effectively free (and payment is not a requirement for GitHub Pages sites associated with public GitHub projects).\u003C/p\u003E\n\u003Cp\u003ESo I worked up a new responsive design based on the Twitter Bootstrap blog template (thanks Bootstrap guys!) and managed to move my content over from Enki and \u003Ca href=\u0022https://en.wikipedia.org/wiki/Textile_(markup_language)\u0022\u003ETextile\u003C/a\u003E\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E to Jekyll and \u003Ca href=\u0022https://en.wikipedia.org/wiki/Markdown\u0022\u003EMarkdown\u003C/a\u003E. Converting my posts from Textile to Markdown was a little more time consuming than I would have liked, but it\u2019s done now and I\u2019m glad I won\u2019t have to do it again. While there are always going to be certain compromises that need to be made when you move from a database backed blogging app like Enki to a database-less, static site generator like Jekyll, overall I was pretty satisfied with the result.\u003C/p\u003E\n\u003Ch3 id=\u0022lets-encrypt\u0022\u003ELet\u2019s Encrypt\u003C/h3\u003E\n\u003Cp\u003EFast forward to now, and there was one thing that still bothered me. My eyes slowly wondered up to the top of my Chrome browser window and noted a definite lack of a green padlock icon before the address to my blog. We\u2019re living in a time when TLS encryption really should be the default for most any site and I thought my blog should be no exception. To me, paying for \u003Ca href=\u0022https://en.wikipedia.org/wiki/Public_key_certificate\u0022\u003ESSL/TLS public key certificates\u003C/a\u003E has always felt a bit like being subject to the whims of a certificate authority cartel and it wasn\u2019t so long ago that I wouldn\u2019t have had much choice other than to bite the bullet and pay or go without encryption. But fortunately, we now have \u003Ca href=\u0022https://letsencrypt.org\u0022\u003ELet\u2019s Encrypt\u003C/a\u003E, a \u003Ca href=\u0022https://www.eff.org/deeplinks/2014/11/certificate-authority-encrypt-entire-web\u0022\u003Ewonderful initiative from a collection of organisations\u003C/a\u003E who want to do public key certificates right. With the advent of Let\u2019s Encrypt I can now get a free and legit certificate for my blog (thanks Let\u2019s Encrypt guys!).\u003C/p\u003E\n\u003Ch3 id=\u0022such-connections-many-cdns-very-encryption-kind-of-wow\u0022\u003ESuch connections, many CDNs, very encryption kind of, wow\u003C/h3\u003E\n\u003Cp\u003ESo the certificate problem was solved, but GitHub pages is not at all the same as having a full-featured web server at my disposal, there were no configuration options I could take advantage of in order to set my certificate for use with a GitHub Pages site. For some time I\u2019d been following the \u003Ca href=\u0022https://github.com/isaacs/github/issues/156\u0022\u003Ecomically long issue thread on GitHub\u003C/a\u003E requesting that HTTPS support be added to GitHub Pages (my own redundant \u002B1 comment is in there somewhere, sorry GitHub guys!). Obviously I was not the only one with an interest in this matter. But it was from that issue thread that I garnered a number of possible options for adding TLS support to a GitHub Pages site. As far as I can tell, as of the publication of this blog post, all of those options boil down to \u2018use a \u003Ca href=\u0022https://en.wikipedia.org/wiki/Content_delivery_network\u0022\u003ECDN\u003C/a\u003E\u2019. It\u2019s just a matter of which one you want to use. One unfortunate thing about putting a CDN in front of your site for the purposes of TLS support is that it\u2019s potentially not end-to-end encryption. You might get an encrypted connection over the first leg of the journey, the connection from the end user to the CDN but the second leg, the connection from the CDN back to your origin server could well be unencrypted. So I could end up with something like:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code\u0022\u003E\u003Ccode class=\u0022\u0022\u003EEnd user\n\n\u0026lt; - Encrypted connection - \u0026gt;\n\nMy chosen CDN\n\n\u0026lt; - Unencrypted connection - \u0026gt;\n\nMy GitHub Pages site\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EOr so I thought. Can the connection between my chosen CDN and GitHub Pages also support TLS? Well, GitHub kind of supports encrypted connections for GitHub Pages sites when they are reached not via your own custom domain but rather by the standard GitHub Provided address (i.e. \u2018*.github.io\u2019). I say \u2018kind of\u2019 because it turns out that \u003Ca href=\u0022https://github.com/isaacs/github/issues/156#issuecomment-75738734\u0022\u003EGitHub is using their own CDN with GitHub Pages\u003C/a\u003E and this CDN is adding and removing encryption on their end. So at best I end up with something like:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code\u0022\u003E\u003Ccode class=\u0022\u0022\u003EEnd user\n\n\u0026lt; - Encrypted connection - \u0026gt;\n\nmy chosen CDN\n\n\u0026lt; - Encrypted connection - \u0026gt;\n\nGitHub\u2019s chosen CDN\n\n\u0026lt; - Unencrypted connection - \u0026gt;\n\nMy Git Hub Pages site\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThis is less than ideal. Encryption should really be end-to-end. But as some encryption is better than none and I\u2019m not planning on moving my blog away from GitHub Pages in the foreseeable future, I\u2019ll take it and make do.\u003C/p\u003E\n\u003Cp\u003ESo, which CDN to use? Initially it came down to two possibilities:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https://www.cloudflare.com/\u0022\u003ECloudFlare\u003C/a\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https://www.netlify.com/\u0022\u003ENetlify\u003C/a\u003E\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003ENetlify seemed pretty good, except that on their free plan your site gets a \u2018Netlify Callout\u2019 appended to it, which looks like \u003Ca href=\u0022https://callout.netlify.com/\u0022\u003Ea little tab that pops up at the bottom right of your site\u2019s pages\u003C/a\u003E and I wasn\u2019t too keen on that sort of thing if I could avoid it. Looking at CloudFlare, I found them more congenial. \u003Ca href=\u0022https://www.cloudflare.com/ssl/\u0022\u003ECloudFlare say they provide SSL support\u003C/a\u003E, apparently without needing to advertise at the bottom right corner of your site and I really couldn\u2019t think of a reason not to go with them other than perhaps that it seemed like CloudFlare were providing a lot more other services that I currently don\u2019t need for my little blog. Could this add complexity I didn\u2019t need? Or at the very least, knowing me, would my curiosity be piqued and would I be inevitably sucked into playing with CloudFlare\u2019s virtual bells and whistles, ending up with yet another distraction keeping me from what I should really be spending my time on?\u003C/p\u003E\n\u003Cp\u003EMinor reservations relating to inconvenient personality traits aside, I was all set to sign up with CloudFlare when I happened to see a notification email come through from the previously mentioned issue thread-zilla on GitHub from a user named \u003Ca href=\u0022https://github.com/isaacs/github/issues/156#issuecomment-193166403\u0022\u003Enubela\u003C/a\u003E. He and a small team in Singapore run a bootstrapped startup named \u003Ca href=\u0022https://kloudsec.com/\u0022\u003EKloudsec\u003C/a\u003E. I looked them up and found \u003Ca href=\u0022https://news.ycombinator.com/item?id=10899461\u0022\u003Etheir \u2018Show HN\u2019 post on Hacker News\u003C/a\u003E, wherein they sounded pretty legit, their set up was also free and sounded a little easier than CloudFlare. Kloudsec even had a \u003Ca href=\u0022https://kloudsec.com/github-pages/new\u0022\u003Especial on-boarding process worked out for GitHub Pages users\u003C/a\u003E. I particularly like to support bootstrappers who are having a go at it, so I thought I\u2019d give Kloudsec a try.\u003C/p\u003E\n\u003Cp\u003EThe whole process of setting myself up on Kloudsec\u2019s service would have been entirely frictionless if it wasn\u2019t for my own silliness and non-standard set up. I had trouble with the Kloudsec for GitHub Pages on-boarding process because I thought Kloudsec was asking for my blog\u2019s GitHub Pages site URL (in my case gaelian.github.io) whereas they were actually asking for the corresponding project repository URL (in my case github.com/gaelian/gaelian.github.io). Additionally, my blog\u2019s repository was originally set set to private and Kloudsec\u2019s special GitHub Pages on-boarding process expects that your repository will be public, so after a little email discussion with the very responsive nubela from Kloudsec (seriously, he got back to me within 15 minutes), I decided I\u2019d just take the standard on-boarding process and sign up with Kloudsec that way. The standard on-boarding process (found via any of the \u2018Preview Dashboard\u2019 and \u2018Try it now\u2019 buttons on the Kloudsec home page) is pretty slick and I was signed up in no time. The only remaining thing for me to do was change my \u003Ca href=\u0022https://en.wikipedia.org/wiki/Domain_Name_System\u0022\u003EDNS\u003C/a\u003E settings to point to Kloudsec. An email was sent to me from Kloudsec that contained all the Kloudsec-related details I needed, two new DNS records would need to be created.\u003C/p\u003E\n\u003Cp\u003EI logged into my account over at my DNS service provider and went about making the changes for my domain. It took longer than I hoped to get things sorted out with my DNS because aside from adding the A and TXT records (the latter being for verification purposes, similar to how Google Apps verifies domain ownership) as instructed by Kloudsec, I neglected to remove the pre-existing CNAME record I had that was pointing to gaelian.github.io and this was interfering with the new A record. I also had my records set with a \u003Ca href=\u0022https://en.wikipedia.org/wiki/Time_to_live\u0022\u003ETTL\u003C/a\u003E of 86400 which wasn\u2019t speeding things along. But once this was all sorted, everything fell into place. I could then log into my Kloudsec account and provision my new Let\u2019s Encrypt certificate for use with my site\u003Ca id=\u0022fnref:3\u0022 href=\u0022#fn:3\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E3\u003C/sup\u003E\u003C/a\u003E. Kloudsec can also redirect from \u2018http\u2019 to \u2018https\u2019 for you, which is a nice little touch that should not be forgotten.\u003C/p\u003E\n\u003Cp\u003EKloudsec\u2019s management interface is fairly straight forward to use, quite pretty, trendy even, being implemented as a \u003Ca href=\u0022https://en.wikipedia.org/wiki/Single-page_application\u0022\u003Esingle-page application\u003C/a\u003E (single-page apps are \u003Cem\u003Eso in\u003C/em\u003E right now). I\u2019m still exploring Kloudsec\u2019s other features\u003Ca id=\u0022fnref:4\u0022 href=\u0022#fn:4\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E4\u003C/sup\u003E\u003C/a\u003E but so far I appreciate that these features are also implemented in a straight forward kind of way that suits my current level of interest. Perhaps power users might find the available ways to slice and visualise your data to be a little lacking but this is not a concern for me.\u003C/p\u003E\n\u003Cp\u003EI was told by nubela that a couple of new features are coming down the Kloudsec pipeline in the near future. The first being CNAME/ALIAS support, so that you can enter a domain name (rather than only an IP address, as is the case now) into Kloudsec\u2019s management interface to identify your origin server. I could see this being useful for example in a case like mine, where my origin server is managed by GitHub not me, and the GitHub Pages IP address(es) may potentially change without my knowledge. Kloudsec is also looking at automatically switching to an encrypted connection between their CDN and the origin server if the origin server supports encryption. This would be awesome for my situation if - as mentioned earlier - GitHub wasn\u2019t also employing their own CDN in front of GitHub Pages sites that does not support encryption. But hey, maybe one day\u2026\u003C/p\u003E\n\u003Cp\u003EIn other news, I\u2019ve noticed that since switching to \u2018https\u2019, the Facebook \u2018like\u2019 counts on my site have reset to zero. Same for the Google\u002B widget, but I\u2019m not actually sure if I ever had any Google \u002B1\u2019s for any of my posts in the first place (sorry Google guys!). I therefore assume that these social media widgets treat the same URLs save for \u2019http\u2019 vs. \u2018https\u2019 as different locations, which is understandable I suppose but none the less unanticipated. I tried to think of some pithy, yet profound quote about entropy and the impermanence of all things to put here, but I\u2019m coming up empty.\u003C/p\u003E\n\u003Ch3 id=\u0022conclusion\u0022\u003EConclusion\u003C/h3\u003E\n\u003Cp\u003ESo that\u2019s the long and the short of it. If you\u2019re looking at implementing a CDN for your site or particularly how you can \u003Cem\u003Ekind of\u003C/em\u003E get TLS sorted out for your GitHub Pages site, I hope you\u2019ve found this post useful.\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EDisclaimer:\u003C/strong\u003E I have not received any remuneration from any of the services I\u2019ve mentioned in this post, I\u2019m just a normal customer of some of these services, who might like the cut of their respective jibs.\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EUpdate:\u003C/strong\u003E as of August 2016, Kloudsec has sadly shut their doors. I congratulate Kloudsec on getting as far as they did, they put together a great product. But startups are hard at the best of times and I wish nubela and friends all the best in their future endevours. As my second choice, I have since gone with CloudFlare for the time being. However, I don\u0027t like having to delegate my DNS to CloudFlare as it means the way I manage DNS settings for this and other sites I maintain is now fragmented across more than one service (for all my other DNS needs, I have traditionally used \u003Ca href=\u0022https://dnsimple.com/\u0022\u003EDNSimple\u003C/a\u003E and have always been happy there). Sometime in the not too distant future I will be revamping my hosting setup in order to reconcile my DNS management once more and attain full end-to-end transport encryption for my blog, which will likely mean I will not be hosting my blog directly from GitHub Pages in the longer term.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EI hear \u003Ca href=\u0022https://bitbucket.org\u0022\u003EBitBucket\u003C/a\u003E gives private Git repos for free, as does \u003Ca href=\u0022https://www.visualstudio.com/en-us/products/visual-studio-team-services-vs.aspx\u0022\u003EVisual Studio Team Services\u003C/a\u003E, so if you\u2019re not as embedded in GitHub as I am, you may like to check them out.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003EYeah, I started my blog back when Textile was still the new hotness.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:3\u0022\u003E\n\u003Cp\u003ELet\u2019s Encrypt allows automated certificate provisioning which is why Kloudsec can provision a certificate for you on demand. but Let\u2019s Encrypt do rate limit clients, so this process can potentially take a little while.\u003Ca href=\u0022#fnref:3\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:4\u0022\u003E\n\u003Cp\u003EIncluding \u2018Offline Protection\u2019 and \u2018Page Optimizer\u2019 via CDN caching, as well as an experimental \u003Ca href=\u0022https://www.owasp.org/index.php/Web_Application_Firewall\u0022\u003Eweb application firewall\u003C/a\u003E that sounds interesting, although as my blog is static HTML by the time it gets served up, this feature doesn\u2019t seem too relevant for this particular site (feel like \u003Ca href=\u0022https://en.wikipedia.org/wiki/SQL_injection\u0022\u003ESQLi-ing\u003C/a\u003E my non-existent database? Or maybe \u003Ca href=\u0022https://en.wikipedia.org/wiki/Brute-force_attack\u0022\u003Ebrute forcing\u003C/a\u003E my non-existent admin interface? Knock yourself out, buddy).\u003Ca href=\u0022#fnref:4\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2016-03-27T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2016/03/27/jekylls-and-cdns-and-github-pages-oh-my",
      "summary": "Some months ago, I finally got around to redesigning my blog with responsiveness in mind, along with switching it to run on a new blogging app and hosting platform. Previous to this, I had been using the excellent Enki blogging app (which I still remain quite fond of, assisting with maintaining the project on occasion) and Heroku . This combination resulted in a free hosting situation with some limitations which I was generally quite happy with. But while Enki is a great little Rails app, especially if you\u2019re the kind of person that likes to be able to blog from any place where you have a web browser and an Internet connection, I felt like I needed a simpler platform. Something where I can worry less about config and maintenance, something that just lets me write my content and stays out of the way. And while Heroku is one of the most developer friendly hosting platforms I have ever used, I was hoping to find something at about the same ongoing price point (say, $0) without the caveats of Heroku\u2019s free plan.",
      "tags": [
        "security",
        "cdn",
        "tls",
        "privacy",
        "github",
        "jekyll",
        "hacker-news"
      ],
      "title": "Jekylls and CDNs and GitHub Pages, oh my!",
      "url": "https://binarybalance.com.au/2016/03/27/jekylls-and-cdns-and-github-pages-oh-my"
    },
    {
      "content_html": "\u003Cp\u003EDuring September of this year, I was one of what I gather was a large chunk of people that suddenly received an invite to \u003Ca href=\u0022https://svbtle.com/\u0022\u003ESvbtle\u003C/a\u003E (the hosted blogging platform from Dustin Curtis) after applying for said invite so long ago that I can\u0027t exactly remember when it was. Despite my usually cynical nature, I was kind of excited. I mean, sure I worked out pretty quickly that Svbtle was no longer the exclusive hangout that it once was, \u003Ca href=\u0022http://www.macgasm.net/2013/09/17/svbtle-invites-plebs-service/\u0022\u003Ethey\u0027d opened their doors to the plebs\u003C/a\u003E to paraphrase one commentator. But whether it\u0027s still trendy or not, I am a huge fan of the minimal \u0027let the content speak for its self\u0027 school of web design and I thought Dustin\u0027s design of Svbtle was absolutely beautiful. Great job there, dude.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003ESo I accepted the invitation and started to take a look around the site. It seemed pretty nice. The minimalism carried through to the rest of the UI. Optional email subscriptions for your Svbtle blog... you can BYO domain, oh that\u0027s cool... set up Google Analytics, that\u0027s cool as well. But then I thought hold on a sec, I had better just take a look at their terms and conditions so that I know what I\u0027m getting myself into here.\u003C/p\u003E\n\u003Cp\u003ETen or so minutes of searching later, I was starting to suspect that there were no terms or conditions on the site. No terms of use, no copyright or privacy policy, nothing.\u003C/p\u003E\n\u003Cp\u003EWell, I got this email that said:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EHey Gaelian,\nWelcome to Svbtle! We\u0027re happy to have you.\nhttps://svbtle.com\nAs you begin writing, we encourage you to publish your best thoughts, stories, and ideas. While we hope you\u0027re inspired by the other great members already on the network, don\u0027t feel limited by the styles or subjects of the posts you see. Our hope is that you surprise us with new ideas.\nIf you need anything at all, just respond to this email. We\u0027re always listening.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003ESo I thought I\u0027d just respond to that email...\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EHello there,\nI\u0027ve just accepted an invitation to svbtle and I was wondering what your policy is on crossposting of content between svbtle and e.g. a personal blog? More generally, I\u0027m also interested to know what your terms of service and other polices are, particularly in relation to content rights and privacy. I don\u0027t seem to be able to find this class of info on svbtle so far?\nRegards,\nGaelian Ditchburn\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EAlmost a month went by, so I figured I\u0027d try another email:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EHello,\nI sent you an email on the 20th of September 2013 and have not yet received a reply. I suspect you guys were busy after your big bunch of invites went out. So I thought I would try one more time. Here is more or less what I sent last time:\nI was wondering what your policy is on cross-posting of content between svbtle and e.g. a personal blog? More generally, I\u0027m also interested to know what your terms of service and other polices are, particularly in relation to content rights and privacy. I don\u0027t seem to be able to find this class of info for svbtle anywhere.\nRegards,\nGaelian Ditchburn\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EA few more days passed and I gave Twitter a try:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@dcurtis hey there. I sent an email to concierge@svbtle.com about 9 days ago and have not received a reply yet. Should I be expecting one?\n-- Gaelian Ditchburn (@gaelian) September 29, 2013\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EBut no luck there either. I just kind of forgot about Svbtle after that and got busy doing other stuff.\u003C/p\u003E\n\u003Cp\u003EMaybe I\u0027m being overly cautious here, I\u0027m sure Dustin and co are likely nice guys, they probably wouldn\u0027t do anything bad with their user\u0027s content or private info. But it doesn\u0027t exactly inspire confidence that there is nothing in black and white on the site to address such matters. Add to this that after several attempts to contact someone behind Svbtle I still have received no response after what is now literally months later. I get that Svbtle started off as a bit of an exclusive hang out for Dustin and his friends, maybe commercial concerns like general use of the system by unknown persons were secondary in the original vision. But I don\u0027t think this can be used as an excuse any longer, assuming it ever was used as one.\u003C/p\u003E\n\u003Cp\u003EOne thing I sometimes like to do before buying from an online store is to send them a short email containing a question. The question its self is actually not that important, I do it because I want to find out how responsive they are and how they deal with potential customers before I commit to sending my money to them. It wasn\u0027t my original intention to test Svbtle in a similar way, they\u0027re not providing a paid service for one thing, so I guess that wouldn\u0027t quite be apples to apples in that way. But none the less, when I do write I pay the task time, focus and energy, its one of the few artistic expressions I still practice on a semi-regular basis and its something I take seriously. When all is said and done I just don\u0027t feel comfortable expressing myself on a platform that apparently has no terms or conditions and that seems to completely ignore users. Not really the best way to show that they\u0027re \u0027always listening\u0027.\u003C/p\u003E\n\u003Cp\u003EI also signed up to \u003Ca href=\u0022https://medium.com/\u0022\u003EMedium\u003C/a\u003E a little while ago, which would appear to be one of Svbtle\u0027s leading competitors in the minimalist blogging platform market. They at least have a \u003Ca href=\u0022https://medium.com/policy\u0022\u003EPolicies\u003C/a\u003E section linked right there at the bottom of their home page where you would expect it to be and it contains all the information that I would like to know.\u003C/p\u003E\n\u003Cp\u003EI think Medium is a very nicely designed site as well. But I haven\u0027t started writing there yet either, partially because it doesn\u0027t have some of the features I feel like I\u0027d miss (that ironically enough are on Svbtle, such as my own domain and Google Analytics integration) and partially because well, maybe I\u0027m just a bit old school when it comes to my presence on the Internet, but as a writer I like having full control over where I put the bulk of the content I create and as a developer I like having full control over the source code that runs my blog. Maybe this need for control isn\u0027t important for people without the technical knowledge or inclination to manage their own website, but it matters to me. At least Medium has a facility to export your content, a feature which I don\u0027t see on Svbtle.\u003C/p\u003E\n\u003Cp\u003ESo for the time being at least... sorry Svbtle, I love your look and feel, but no dice. Medium, I\u0027m starting to warm to the idea... perhaps I have some use for you, my pretty.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2013-12-06T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2013/12/06/why-i\u0027m-not-writing-on-svbtle",
      "summary": "During September of this year, I was one of what I gather was a large chunk of people that suddenly received an invite to Svbtle (the hosted blogging platform from Dustin Curtis) after applying for said invite so long ago that I can\u0027t exactly remember when it was. Despite my usually cynical nature, I was kind of excited. I mean, sure I worked out pretty quickly that Svbtle was no longer the exclusive hangout that it once was, they\u0027d opened their doors to the plebs to paraphrase one commentator. But whether it\u0027s still trendy or not, I am a huge fan of the minimal \u0027let the content speak for its self\u0027 school of web design and I thought Dustin\u0027s design of Svbtle was absolutely beautiful. Great job there, dude.",
      "tags": [
        "privacy",
        "fail",
        "writing",
        "user-interface"
      ],
      "title": "Why I\u0027m not writing on Svbtle",
      "url": "https://binarybalance.com.au/2013/12/06/why-i\u0027m-not-writing-on-svbtle"
    },
    {
      "content_html": "\u003Cp\u003EI\u0027ve just posted a snail mail letter to our Liberal representative in the Senate, Mr Zed Seselja (Senator for Australian Capital Territory). If you have an interest in securing Australia\u0027s future in the digital economy and ensuring that Australia gets the National Broadband Network (NBN) it deserves, then I encourage you to make your voice heard now in any and all ways possible.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EI feel that snail mail \u2013 as quaint as I personally find it to be \u2013 is a good way to ensure that your representatives know how strongly you feel on an issue. You didn\u0027t just send a quick email or tweet or wall post (though we should certainly do these as well), you actually took the time to write a letter, print it out, sign it, put it in an envelope, stick on a stamp, write the address on the envelope and drop it in a mailbox. It still may be a small gesture in the scheme of things, but I will at least know that in every reasonable way that is open to me, I\u0027ve taken the time to make my views known to those that are supposed to be representing us.\u003C/p\u003E\n\u003Cp\u003EYou can do a search to find the contact details of your representatives here:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022http://www.aph.gov.au/Senators_and_Members/Senators\u0022\u003EMembers of the House of Representatives\u003C/a\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022http://www.aph.gov.au/Senators_and_Members/Senators\u0022\u003EMembers of the Australian Senate\u003C/a\u003E\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003EDrop them a line if you feel so inclined. Democracy isn\u0027t something that should only happen on a single day, every few years. Below is the full text of my letter to Mr Seselja. It\u0027s somewhat targeted towards a representative of the Australian Capital Territory, but of course please feel free to re-use some or all of it at any time.\u003C/p\u003E\n\u003Cp\u003EDear Mr Seselja,\u003C/p\u003E\n\u003Cp\u003EI write to you for the purpose of communicating my support for the Fibre to the Premises (FTTP) approach to the National Broadband Network (NBN) rollout.\u003C/p\u003E\n\u003Cp\u003EI am a web developer by trade; my fulltime job is quite literally the Internet, websites and web applications. I have worked in various IT roles for more than a decade and I would therefore put myself forward as a member of the ACT electorate that is well informed on issues pertaining to the Internet and connectivity to it.\u003C/p\u003E\n\u003Cp\u003EI think it a point of little contention by this stage that FTTP has massive support throughout the community, particularly within circles of technical specialists that \u2013 I\u0027m sure you would agree \u2013 policy makers should be listening to on this matter. There was of course the headline-making online petition at change.org (currently sitting at 263,976 signatures as I write this letter), which I have read is the largest online petition in Australian history. Beyond this, the outpouring of support for FTTP across social media sites has been hard to ignore, a fact I\u0027m sure you could verify with your colleague Mr Turnbull.\u003C/p\u003E\n\u003Cp\u003EOn September 26 2013, The Sydney Morning Herald reported that the leaked copy of NBN Co\u0027s latest three-year-plan stated (I quote):\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E\u201CThe cost of connecting each home and business to the fibre-optic national broadband network has dropped to less than $2500 and key financial estimates of the project remain largely unchanged ...\u201D\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EThis $2,500 cost is well down from $7,400 during earlier trails. I further quote The Sydney Morning Herald:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E\u201CThe report also shows that while take-up rates were slower in the first rollout zones, particularly Tasmania\u0027s first three sites, it has been much faster in later rollout sites. For example, a quarter of households in Coffs Harbour signed up for an NBN fibre service with 22 weeks, and \u003Cstrong\u003Ein the Canberra suburb of Crace 36 per cent had a service within 23 weeks.\u003C/strong\u003E\u201D\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EThe bolded emphasis is mine, so that I may draw your attention to behaviour of voters within the ACT.\u003C/p\u003E\n\u003Cp\u003ERegarding the veracity of the report, The Sydney Morning Herald further went on to quote Mr Paul Budde (noted independent telecommunications analyst) as saying that the NBN Co\u0027s staff \u201Cwere not a bunch of liars\u201D. I again implore you to listen to the experts.\u003C/p\u003E\n\u003Cp\u003EI believe the issue of FTTP and the NBN transcends partisan politics and political ideology, as indeed Mr Turnbull has now stated himself. We should consider what would be best for Australia in the long run. More efficient provision of government online services, greater social inclusion for our regional cousins and providing an environment for all manner of small to large enterprises to thrive on a ubiquitous high speed Internet are a few of the excellent reasons we should be implementing the NBN that Australia deserves.\u003C/p\u003E\n\u003Cp\u003ETo see a political party that thinks beyond the current election cycle to Australia\u0027s long-term viability would be a rare and inspiring thing and I truly hope that your party can make this a reality in relation to FTTP. A failure of vision would be equally uninspiring and is certainly something that would be foremost in my mind, come next election day.\u003C/p\u003E\n\u003Cp\u003EIn closing, I would like to once more reiterate my full support for FTTP and I strongly encourage you to convey the view of your constituents on this matter to Mr Turnbull and ensure that \u2013 after the outcome of his strategic review \u2013 he facilitates true and open community consultation on the way forward with regard to the NBN.\u003C/p\u003E\n\u003Cp\u003EThank you for your time.\u003C/p\u003E\n\u003Cp\u003EYours sincerely,\nGaelian M. Ditchburn\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2013-10-13T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2013/10/13/my-letter-in-support-of-the-national-broadband-network",
      "summary": "I\u0027ve just posted a snail mail letter to our Liberal representative in the Senate, Mr Zed Seselja (Senator for Australian Capital Territory). If you have an interest in securing Australia\u0027s future in the digital economy and ensuring that Australia gets the National Broadband Network (NBN) it deserves, then I encourage you to make your voice heard now in any and all ways possible.",
      "tags": [
        "bureaucracy",
        "ecommerce",
        "gov-2.0",
        "nbn"
      ],
      "title": "My letter in support of the National Broadband Network",
      "url": "https://binarybalance.com.au/2013/10/13/my-letter-in-support-of-the-national-broadband-network"
    },
    {
      "content_html": "\u003Cp\u003EHistorically speaking and development-wise, I\u0027ve had a lot of experience with technologies that typically rest upon \u003Ca href=\u0022http://en.wikipedia.org/wiki/Unix\u0022\u003EUnix\u003C/a\u003E and \u003Ca href=\u0022http://en.wikipedia.org/wiki/Unix-like\u0022\u003EUnix-like\u003C/a\u003E environments.\u0026lt;!--more--\u0026gt; I primarily used a Windows computer until about 4 years ago (when I primarily switched to a Mac), but even back then I often still felt more comfortable using traditionally Unix based tools for my web development activities on top of Windows when possible\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E. While I still maintain use of Unix based tools (these days mainly on top of OS X), for the last couple of years I\u0027ve also dived head first into the end-to-end Microsoft development environment: Windows, Visual Studio, Internet Information Server, SQL Server, Team Foundation Server. I\u0027ve mostly still stuck to web development, but I\u0027ve also had the opportunity to do some \u003Ca href=\u0022http://en.wikipedia.org/wiki/Visual_Studio_Tools_for_Office\u0022\u003EVSTO\u003C/a\u003E work and other such things that venture outside of my usual web development bent, while still being within Microsoft\u0027s walled development garden.\u003C/p\u003E\n\u003Cp\u003EThe purpose of this post is not to compare Unix and Windows \u003Ca href=\u0022http://en.wikipedia.org/wiki/Toolchain\u0022\u003Etoolchains\u003C/a\u003E, I find the endless *nix vs Windows debate fairly boring and I try to be as practical and nonreligious as possible when it comes to the topic. Rather I will discuss what I think is an interesting difference I\u0027ve noticed in the way tutorials for these different toolchains are usually delivered.\u003C/p\u003E\n\u003Cp\u003ESome years ago I read a post called \u0027\u003Ca href=\u0022http://blog.vivekhaldar.com/post/3339907908/the-cognitive-style-of-unix\u0022\u003EThe Cognitive Style of Unix\u003C/a\u003E\u0027 by Vivek Haldar\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E and I think the topic of my post today has some follow on relevance to this post. The research upon which Vivek bases his post frames the \u003Ca href=\u0022http://en.wikipedia.org/wiki/User_interface\u0022\u003EUI\u003C/a\u003E in terms of internalisation vs externalisation, where an example of a UI that encourages internalisation would be the *nix command line and the applications that are accessible through it, while an example of a UI that encourages externalisation would be say, the Visual Studio \u003Ca href=\u0022http://en.wikipedia.org/wiki/Integrated_development_environment\u0022\u003EIDE\u003C/a\u003E.\u003C/p\u003E\n\u003Ch3 id=\u0022externalised-tech-tutorials\u0022\u003EExternalised tech tutorials\u003C/h3\u003E\n\u003Cp\u003EI\u0027ve had a fair amount to do with the \u003Ca href=\u0022http://en.wikipedia.org/wiki/Microsoft_SharePoint\u0022\u003EMicrosoft SharePoint\u003C/a\u003E platform\u003Ca id=\u0022fnref:3\u0022 href=\u0022#fn:3\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E3\u003C/sup\u003E\u003C/a\u003E over the last few years. One of the first activities for me when working with a new platform/framework/application is to search the Internet for relevant tutorials. Here are a few tutorials that are fairly representative of what one finds when looking for SharePoint knowledge as a developer on the Internet:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022http://msdn.microsoft.com/en-us/library/vstudio/ee231557.aspx\u0022\u003EWalkthrough: Creating an Application Page\u003C/a\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022http://www.sharepoint-journey.com/application-page-in-sharepoint-2013.html\u0022\u003EApplication page in SharePoint 2013 using visual studio 2012\u003C/a\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022http://www.codeproject.com/Articles/136857/Developing-Web-Parts-for-Sharepoint-2010\u0022\u003EDeveloping Web Parts for Sharepoint 2010\u003C/a\u003E\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003EThe first tutorial is from Microsoft its self. Because the tools for which the tutorial is written take the externalised approach with their UI, related tutorials must obviously make accommodation. In this example, Microsoft has gone for an explanation consisting of ordered lists of instructions. For example:\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003EStart Visual Studio.\u003C/li\u003E\n\u003Cli\u003EOpen the \u003Cstrong\u003ENew Project\u003C/strong\u003E dialog box, expand the \u003Cstrong\u003EOffice/SharePoint\u003C/strong\u003E node under the language that you want to use, and then choose the \u003Cstrong\u003ESharePoint Solutions\u003C/strong\u003E node.\u003C/li\u003E\n\u003Cli\u003EIn the \u003Cstrong\u003EVisual Studio Installed Templates\u003C/strong\u003E pane, choose the \u003Cstrong\u003ESharePoint 2010 \u2013 Empty Project\u003C/strong\u003E template. Name the project \u003Cstrong\u003EMySharePointProject\u003C/strong\u003E, and then choose the \u003Cstrong\u003EOK\u003C/strong\u003E button.\u003C/li\u003E\n\u003Cli\u003EThe \u003Cstrong\u003ESharePoint Customization Wizard\u003C/strong\u003E appears. This wizard enables you to select the site that you will use to debug the project and the trust level of the solution.\u003C/li\u003E\n\u003Cli\u003EChoose the \u003Cstrong\u003EDeploy as a farm solution\u003C/strong\u003E option button, and then choose the \u003Cstrong\u003EFinish\u003C/strong\u003E button to accept the default local SharePoint site.\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003EThis is to me the least effective way that one could teach an externalised UI. I personally find unnecessary cognitive load resulting when I have to read text instructions then apply them to an externalised UI (or at least an unfamiliar externalised UI, and if I\u0027m familiar with it then I probably have less use for a tutorial). The bolding of things to look out for in the UI doesn\u0027t really seem to help me all that much.\u003C/p\u003E\n\u003Cp\u003EThe other tutorials I\u0027ve included are typical examples of those that are found across the SharePoint community. The one thing they have in common is they make liberal use of screen shots to impart knowledge of the externalised UI. A generally better approach than the ordered lists of text, I believe. But as someone who has written the odd tech tutorial, the first thing that sticks out to me is the added effort for tutorial authors, because they not only have to write their tutorial, they have to take screen shots, process them, insert them, give them a value for their alt attribute (which would be appropriate in this case) and upload them. I\u0027ve also come across situations where the only tutorial I can find is for an older version of the relevant product(s) and the screen shots are just outdated enough to be cryptic.\u003C/p\u003E\n\u003Ch3 id=\u0022internalised-tech-tutorials\u0022\u003EInternalised tech tutorials\u003C/h3\u003E\n\u003Cp\u003EHere\u0027s some internalised UI tutorials:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022/2011/10/31/compiling-ruby-1-9-3-on-debian-squeeze\u0022\u003ECompiling Ruby 1.9.3 on Debian Squeeze\u003C/a\u003E (a perennial visitor\u0027s favourite from this very site)\u003C/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022http://www.washington.edu/computing/unix/vi.html\u0022\u003EHow to Use the vi Editor\u003C/a\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022http://guides.rubyonrails.org/getting_started.html\u0022\u003EGetting Started with Rails\u003C/a\u003E\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003EThe internalised command line UI engenders a tutorial that provides fairly efficient transfer of knowledge via lots of text. It\u0027s easier for the tutorial\u0027s author too, I can tell you that much from personal experience. But wait, you say! That third one has screen shots! Yeah, it does. I included that one to illustrate that screen shots are rather more optional than they are required in the case of an internalised UI.\u003C/p\u003E\n\u003Cp\u003EA potential problem with the internalised tech tutorial is the same as it is with the internalised UI: the steeper learning curve for a novice. I would hope that people don\u0027t copy/paste and run shell commands off the Internet without understanding what they do, but I guess I can\u0027t be sure that this kind of tutorial isn\u0027t inadvertently promoting such behaviour\u003Ca id=\u0022fnref:4\u0022 href=\u0022#fn:4\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E4\u003C/sup\u003E\u003C/a\u003E. The internalised tutorial is also subject to becoming stale due to changes made to the tutorial\u0027s subject tool but \u2013 in my own anecdotal experience at any rate \u2013 I\u0027ve found this to be less of a problem with an internalised tech tutorial than with externalised.\u003C/p\u003E\n\u003Ch3 id=\u0022unintentional-hurdles\u0022\u003EUnintentional hurdles\u003C/h3\u003E\n\u003Cp\u003ESo the realisation that interested me enough to write this post relates to the added effort that I see is required to put together a useful externalised tech tutorial over the internalised. It makes me wonder what other unintentional hurdles we may be building for ourselves because of a particular UI paradigm (be it externalised or internalised), not just when directly using our technology but also when engaging in peripheral activities such as transferring knowledge of that technology to those seeking it.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EBack in those days I tended to use \u003Ca href=\u0022http://en.wikipedia.org/wiki/WAMP\u0022\u003EWAMP\u003C/a\u003E as it seemed to be an option that was a little more friendly on Windows than \u003Ca href=\u0022http://en.wikipedia.org/wiki/Ruby_on_Rails\u0022\u003ERails\u003C/a\u003E and it\u0027s supporting technologies were at the time.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003EBoth in the comments of the linked blog post and also over on \u003Ca href=\u0022https://news.ycombinator.com/item?id=2229833\u0022\u003EHacker News\u003C/a\u003E one can find some dissection of the research that Vivek Haldar cites. As I\u0027m talking today about cognitive styles of a computer UI as it particularly relates to power users and programmers, much of what I read in that discussion is only tangentially applicable to the topic at hand.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:3\u0022\u003E\n\u003Cp\u003EA platform that provides a level of extensibility rivalled only by its own cruftiness.\u003Ca href=\u0022#fnref:3\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:4\u0022\u003E\n\u003Cp\u003ELooks like I don\u0027t have to feel so bad about this possibility anymore: http://explainshell.com/\u003Ca href=\u0022#fnref:4\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2013-08-31T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2013/08/31/comparing-cognitive-styles-of-tech-tutorials",
      "summary": "Historically speaking and development-wise, I\u0027ve had a lot of experience with technologies that typically rest upon Unix and Unix-like environments.",
      "tags": [
        "unix",
        "linux",
        "windows",
        "user-interface",
        "development"
      ],
      "title": "Comparing cognitive styles of tech tutorials",
      "url": "https://binarybalance.com.au/2013/08/31/comparing-cognitive-styles-of-tech-tutorials"
    },
    {
      "content_html": "\u003Cp\u003EEarly July, I sent an email to all users of Filelike (my \u003Ca href=\u0022http://en.wikipedia.org/wiki/Software_as_a_service\u0022\u003ESaaS\u003C/a\u003E application for selling digital files) informing them that as of June 30 2013, I would be discontinuing support and shutting down the site.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EI have mixed feelings as I write this post, I developed Filelike in my spare time and it was the first solo project that I have built and launched. For that alone, I was and am quite proud of it. But while it got some traction, the site never made it to financial viability. Simply put: I was investing more into it than I was getting out of it and the bell has now tolled for \u003Ca href=\u0022http://web.archive.org/web/20130414132713/https://filelike.com/\u0022\u003EFilelike and my much loved squid mascot\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EI could be quite negative about this turn of events. I could view this situation as a waste of precious time and effort, a mistake. Looking back on some of the stressed times I\u0027ve had developing and then attempting to promote Filelike, a part of me does feel this way. But a larger part of me agrees with the saying:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EIt\u0027s only a mistake if you don\u0027t learn something.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Ch3 id=\u0022progressing-a-side-project-is-hard\u0022\u003EProgressing a side-project is hard\u003C/h3\u003E\n\u003Cp\u003EI have not had the luxury of working on Filelike full time. I have a day job and as fate would have it, almost to the week that I launched Filelike, my day job became raucously busy and this curtailed my efforts to maintain and promote Filelike.\u003C/p\u003E\n\u003Cp\u003EI don\u0027t feel that this is a particularly insightful learning on the face of it. It\u0027s \u003Ca href=\u0022http://www.paulgraham.com/die.html\u0022\u003Ewell known in the startup culture\u003C/a\u003E that if you need to hold down a day job and therefore your product is a side-project, then that\u0027s already taking something difficult and making it more so. I guess it\u0027s one thing to hear or read this and it\u0027s another to have lived it, some things one needs to have personally experienced before it really sinks in.\u003C/p\u003E\n\u003Cp\u003EI think it comes down to prospective product size and fit. I sincerely doubt that it would realistically be possible to create a Google/Facebook/Twitter without moving to spending 100% of your professional time on developing such a project and courting outside investment with great speed. However, if one is not aiming for the archetypal, exponentially growing startup path (which I was not) and the idea of a slower growing \u0027lifestyle business\u0027 appeals (as it did and still does to me) then I don\u0027t think running a product as a side-project is an automatic death knell.\u003C/p\u003E\n\u003Cp\u003ESome products just cannot be be run as a side-project. There was an earlier prospective online product that I was once involved in which would have necessitated a large amount of individual client contact with business owners within a traditional long established industry. Such an idea really required that it not be treated as an after hours side-project, but none of us thinking about the idea could commit to anything but a side-project at the time. This realisation was in large part what stopped me from moving forward with that idea.\u003C/p\u003E\n\u003Cp\u003EI\u0027 don\u0027t mean to imply that one shouldn\u0027t try to develop an idea as a side-project, indeed I still have a couple of ideas myself that would probably fit this description. But I believe that especially with a side-project, one needs to be very honest with themselves about what the idea is and whether it fits the side-project mould.\u003C/p\u003E\n\u003Ch3 id=\u0022morale\u0022\u003EMorale\u003C/h3\u003E\n\u003Cp\u003EIt\u0027s hard to maintain faith in something when you have a relatively small user base providing little feedback. I\u0027d heard the advice that if you build something that gets even a small number of users excited, then this can be a way of boosting morale and lighting the way forward. Respond to user feedback and iterate quickly, that was the plan. But \u003Ca href=\u0022http://en.wikipedia.org/wiki/Helmuth_von_Moltke_the_Elder#Moltke.27s_Theory_of_War\u0022\u003ENo battle plan survives contact with the enemy\u003C/a\u003E so it is said, and Filelike was not an exception. The hard truth as it appears to me is that Filelike simply did not get users \u003Cem\u003Eexcited enough\u003C/em\u003E, neither to sustain the site, nor to sustain my morale.\u003C/p\u003E\n\u003Cp\u003EI had envisioned that I would document each step of my journey with Filelike, and it would provide much fodder for my writings. But the reality was that just keeping up with maintaing/developing the site, user support when it was required, and my day job sapped most of my time and enthusiasm away to the point where this blog post now sits atop my post that launched Filelike into the world. On a side tangent, \u003Ca href=\u0022http://philosophically.com/dont-launch-your-product\u0022\u003EI don\u0027t think I\u0027ll be doing any more launches per se\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EHaving spoken to some friends (of a similar \u003Ca href=\u0022http://www.paulgraham.com/makersschedule.html\u0022\u003Emaker\u0027s\u003C/a\u003E inclination to my own) whom have also launched technology based products with varying degrees of success, I am coming to the belief that perhaps \u2013 to paraphrase William Faulkner \u2013 we need to kill our darlings more quickly. I personally don\u0027t give up very easily, and I have observed this trait in most people I know that have had the focus to build and launch a product. This is a valuable trait, but I have also observed that this trait can lead to stubbornness. When we should have been recognising a failure and learning from it for the next adventure, or switching to another facet of an existing idea (i.e. \u0027pivoting\u0027), we were still caught up in that original battle plan.\u003C/p\u003E\n\u003Cp\u003EI\u0027m not sure if I can really put a hard timeframe on when it should start to become apparent that an idea has run its course and will not be gaining traction as was hoped, I could say six months or twelve months, and this feels about right for me and the projects that I\u0027ve been involved in, but this also feels very subjective. The only generally applicable advice I\u0027d be happy to stand behind is: absolutely keep working on that idea or product, but be extremely honest with yourself and listen intently to feedback from trusted sources.\u003C/p\u003E\n\u003Ch3 id=\u0022networking-and-promotion-is-key\u0022\u003ENetworking and promotion is key\u003C/h3\u003E\n\u003Cp\u003ERarely, but sometimes all the stars align just right and a product is born that is so compelling, so amazing and paradigm shifting, yet still accessible/understandable enough that it just about sells its self. For all the other times, there\u0027s networking and promotion. It was only after I got to the point of launching Filelike that it really hit me just how important networking is. I knew this intellectually of course, and I had relevant plans in place (or at least thought I did) but again this was a learning that I needed to live to fully appreciate. I had some early success both pre and post launch to garner some modest interest in Filelike. But not surprisingly I quickly found this issue to be of the perennial \u0027chicken or the egg\u0027 class of problem. It truly is hard to promote your service and make it stick when one is more or less an unknown, toiling away in obscurity.\u003C/p\u003E\n\u003Cp\u003EIt seems that the exposure that one might get by being involved in \u003Ca href=\u0022http://ycombinator.com/\u0022\u003EY Combinator\u003C/a\u003E or other such startup incubators really is something that\u0027s hard to put a dollar value on. I would go so far as to say that good avenues into networking and promotion are often more important than the product its self, assuming the product is at least competently constructed. Case in point: there is a relatively well known company of which I have some amount of insight into, whose business is primarily selling SaaS applications and equivalent on-premise versions of this same software into mainly enterprise sized organisations. This company\u0027s products are certainly competent but hardly ground breaking. I would describe them as often needlessly complex, providing a sometimes disappointing user experience and they are especially fragile when it comes to upgrading on-premise. Yet they are quite wildly successful. A large reason for this success was that one of the founders of this company had ready access \u2013 through a family member \u2013 to an impressive, pre-existing network of the kind of people who make decisions about what software their large enterprise business will be purchasing. Networks made this company the success that it is. All they had to do was ensure that their software didn\u0027t fall over in a screaming heap during use. I say \u0027All they had to do\u0027 but I don\u0027t wish to completely invalidate what was no doubt still a hard slog. None the less, I do believe that this company could not have become as successful as it is without the pre-existing network they had access to.\u003C/p\u003E\n\u003Cp\u003EAs developers, we like to think that the success of a technology product depends mostly on the quality of the code. Dude, I hand-crafted my own web server using S-expressions, I\u0027ve done everything the Internet says! Even the stuff that contradicts the other stuff! How can the users \u003Cem\u003Enot\u003C/em\u003E like this app? Well, the users don\u0027t give a single flying fuck about the elegance and quality of your code unless it makes their life easier, I don\u0027t think I can state this strongly enough because I must have read some variation of this advice a hundred times or more, but still I\u0027m fairly sure I too often worried about the elegance of my codebase and how much test coverage it had to the detriment of all those messy things I probably should have been doing more of... like networking and promotion. In the real world, in many cases I have witnessed (no doubt you can think of some examples yourself) an average product with a great network behind it will usually trump the objectively better product with a poorer network connected to it.\u003C/p\u003E\n\u003Cp\u003EThere\u0027s a balance to be struck here obviously, but the rule of thumb I\u0027m planning on using moving forward will be biased towards doing more of those messy things involving contact with other humans even if this means living with a little \u003Ca href=\u0022http://en.wikipedia.org/wiki/Technical_debt\u0022\u003Etechnical debt\u003C/a\u003E for longer than I would previously have considered.\u003C/p\u003E\n\u003Cp\u003EAside from getting one\u0027s self into one of the afore mentioned startup incubators or otherwise finding backing from an investor of some other kind, I don\u0027t think I can confidently point to any other means by which such valuable networks can be created with such speed. However, I do think there is worth \u2013 albeit perhaps of the slower burning kind \u2013 in putting yourself out there with a blog and/or a product, regardless of what scale it is, going to relevant meet ups if you can make it (something I am guilty of not doing enough of), contributing to open source projects that may be of interest, and otherwise engaging with the world.\u003C/p\u003E\n\u003Cp\u003EI also suspect we often underestimate the value of our existing social and professional networks. In thinking about possibilities for new ventures, I am more consciously focussing on ideas that could be useful to the contacts that I already have in the professional circles that I already move within. As opposed to thinking up ideas that may have value to types of people and groups that I know exist, but that I do not personally have a strong connection with. I\u0027m thinking of this as an extension of the \u0027scratch your own itch\u0027 principle, \u0027scratch the itch of prospective customer groups that you already have contact with\u0027.\u003C/p\u003E\n\u003Cp\u003EJust jumping in and giving something a go can be great for developing networks. During my little adventure with Filelike, I\u0027ve met a number of great people that I would not have met otherwise and while knowing these people has ultimately not contributed to the survival of Filelike, I now count them as valued members of my social/professional network.\u003C/p\u003E\n\u003Ch3 id=\u0022the-future\u0022\u003EThe future\u003C/h3\u003E\n\u003Cp\u003ESo what now? Well, I know that I still have a desire to create and that I\u0027ve got a few of ideas that I may like to develop further. Lately, I\u0027ve mainly been focussing on bringing new tools and new view points into my professional arsenal. But I feel the time is near for this largely inward focussed cycle to come to an end.\u003C/p\u003E\n\u003Cp\u003EAnd where does the newborn go from here? The net is vast and infinite.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2013-07-09T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2013/07/09/postmortem-of-a-side-project",
      "summary": "Early July, I sent an email to all users of Filelike (my SaaS application for selling digital files) informing them that as of June 30 2013, I would be discontinuing support and shutting down the site.",
      "tags": [
        "filelike",
        "business",
        "bootstrapping"
      ],
      "title": "Postmortem of a side-project",
      "url": "https://binarybalance.com.au/2013/07/09/postmortem-of-a-side-project"
    },
    {
      "content_html": "\u003Cp\u003ENot so long ago, I was talking to a family member who was interested in ways that they could sell an electronic version of a book they\u0027d written and this got me thinking about selling electronic files online.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EOf course there is a huge number of options for selling files online, but most work off a model that places the online store as the central focus. Come to the online store, buy a file and leave. I had a different interest: with the plethora of ways that even non-technical people can create a \u0027website\u0027 of some kind for themselves these days (hosted blogs, Twitter, a Facebook wall, etc.) what about a site that just provides a facility to upload a file and then gives back a URL that can be used however and wherever one sees fit? I named my idea \u003Ca href=\u0022https://filelike.com\u0022\u003EFilelike\u003C/a\u003E and with this post, I consider it officially launched.\u003C/p\u003E\n\u003Cp\u003EFilelike is simple by design and my intention was that it should largely speak for its self. So for the rest of this first post on Filelike, I\u0027d prefer to talk about the ideas that Filelike embodies to me. I don\u0027t call Filelike a \u0027startup\u0027, I see it as the first in what I intend to be a series of \u003Ca href=\u0022http://en.wikipedia.org/wiki/Minimum_viable_product\u0022\u003EMVP\u003C/a\u003E, bootstrapped side-projects, that will be collected under my umbrella business: Binary Balance.\u003C/p\u003E\n\u003Ch3 id=\u0022the-manifesto-part\u0022\u003EThe \u0027manifesto\u0027 part\u003C/h3\u003E\n\u003Cp\u003ESo why a bootstrapped MVP side-project rather than a startup? Shouldn\u0027t I be dropping everything else and \u0027swinging for the fences\u0027, executing a \u0027full-court press\u0027, trying to \u0027knock it for six\u0027? or some other sports-born idiom? I spend a fair amount of online leisure time at Hacker News, and I have a huge amount of respect for the men and women who have that big idea and put their all into realising it. Maybe they quit their job, or maybe (so the more traditional narrative seems to go) they\u0027re students and might not have had a \u0027real job\u0027 in IT yet. Whatever the case, more power to them I say. But this is not my dream and this is partially a result of existing circumstance and partially a result of personal choice.\u003C/p\u003E\n\u003Cp\u003EI live in Australia, and while we enjoy some pretty awesome benefits here, such as an abundance of funny looking marsupials and having so far weathered the global financial crisis remarkably well\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E, the investment environment in my country as it relates to tech startups has never been like what one might find in the US. Although there are those \u003Ca href=\u0022http://www.startmate.com.au/\u0022\u003Eactively working\u003C/a\u003E towards \u003Ca href=\u0022http://siliconbeachaustralia.org/\u0022\u003Echanging this\u003C/a\u003E. Our culture here is quite risk averse in general and many people I have spoken to or heard speak, say that Australia often exhibits a rather unfortunate tendency towards \u003Ca href=\u0022http://en.wikipedia.org/wiki/Tall_poppy_syndrome\u0022\u003Etall poppy syndrome\u003C/a\u003E particularly when it comes to startups.\u003C/p\u003E\n\u003Cp\u003EBut of more relevance to me personally is the fact that I want something different for myself. I\u0027ve not been an official student and have had a series of \u0027real jobs\u0027 for the better part of ten years now. I have responsibilities to family, to myself, that I cannot or do not wish to renounce. This precludes me from quitting my day job, at least for the foreseeable future.\u003C/p\u003E\n\u003Cp\u003EBut I\u0027m passionate about building stuff! Cool stuff! Fun stuff! On my own, or with friends. For me, the journey its self is much of the reward. People often seem so focussed on building the next big viral success, the next product that will blow up exponentially and make everyone involved rich! Rich, I tells ya! I wonder if these people are aware that \u2013 above a certain threshold \u2013 \u003Ca href=\u0022http://www.pnas.org/content/107/38/16489.full.pdf\u0022\u003Emore money does not equal more emotional well-being\u003C/a\u003E. If on the other hand, one wants to drop everything to try and make the next big viral success and at least 51% of their reason for doing so is not the financial pay-off but rather it is because they want to create, they want to express themselves, they want self-determination and the potential financial windfall is just an added bonus or a means to this end\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E, then I can completely identify as this is closer to the feeling I have myself.\u003C/p\u003E\n\u003Cp\u003EI say \u0027closer to\u0027 because there is another aspect to my view: realism and sustainability.\u003C/p\u003E\n\u003Ch3 id=\u0022realism\u0022\u003ERealism\u003C/h3\u003E\n\u003Cp\u003EI don\u0027t know what the exact odds are of creating the next Google or Facebook or Twitter or Reddit or Pintrest are, but I think it is pretty safe understatement to say that the odds are quite slim. My geographical location and the fact that I am quite happy living where I am would only worsen my chances. I feel that creating a series of MVPs without placing all my eggs in one basket is far more realistic for my personal situation. Maybe one idea takes off more so than others and I do eventually decide to concentrate on it more completely, maybe my series of products just simmer away, but eventually and in aggregate provide me both with the creative outlet I desire and go some or all of the way towards the more self-determined future that I wish to create for myself. But in any case, the path that I have chosen does not include \u0027betting the farm\u0027 on that one big idea.\u003C/p\u003E\n\u003Ch3 id=\u0022sustainability\u0022\u003ESustainability\u003C/h3\u003E\n\u003Cp\u003EEnvironmentalists speak of the inherit illogicality of assuming that never ending exponential growth can be wrung out of a finite system. And I wonder how this largely unexamined illogical assumption plays into society on a business and cultural level. We\u0027re still experiencing \u003Ca href=\u0022http://en.wikipedia.org/wiki/2007%E2%80%932012_global_financial_crisis\u0022\u003Ethe most recent and hard to ignore example\u003C/a\u003E of what happens when profit is pursued over all else and never-ending growth is assumed. Is it possible that we\u0027d be better off if more people pursued a sustainable, healthy, but not necessarily \u003Cem\u003Eexponentially\u003C/em\u003E growing business? Dare I say it... \u003Ca href=\u0022http://www.youtube.com/watch?v=y8Kyi0WNg40\u0022\u003Ea lifestyle business\u003C/a\u003E. I\u0027ve heard one honest venture capitalist say on record that they are only interested in exponentially growing businesses because that\u0027s the only model that makes investing worthwhile for them. To many venture capitalist\u0027s credit, without their scale of investments, the world would no doubt be worse off in many ways. But let\u0027s face it, the dark underbelly of this kind of activity can often just be plain old greed, and greed is the enemy of sustainability. I\u0027m not proposing an \u003Ca href=\u0022http://en.wikipedia.org/wiki/Exclusive_or\u0022\u003EXOR\u003C/a\u003E here, I don\u0027t have any religious belief that demands never taking outside funding for a business venture. I just feel that having a business model that involves more than obsessive courting of outside funding better serves my personal goal of sustainability (or alternatively it serves to quickly prove unsustainability).\u003C/p\u003E\n\u003Cp\u003EIt would certainly seem that the exponential growth model has the majority of mindshare in my industry at present. I wonder what potentially unexamined and sometimes unhealthy motivations within ourselves might lead to this state of affairs? What possibilities exist for a business when it doesn\u0027t need to worry about paying back investors almost from the outset? Which problems might be avoided and which others might result? These are the kinds of questions I intend to explore firsthand, this is the journey I have embarked on. And I\u0027m always happy to have some company. :)\u003C/p\u003E\n\u003Cp\u003EAre you bootstrapping a project? I\u0027d love to hear your story.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EIndeed there are many in my country fretting about how well the Australian Dollar is doing against the Greenback these days!\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003EI suspect it is these sorts of people who more often go on to build the massive and well known services that we all use today. They\u0027re not primarily in it for the money. They\u0027re in it for the creativity, the fun, the challenge.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2012-08-17T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2012/08/17/filelike-and-a-bootstrappers-manifesto",
      "summary": "Not so long ago, I was talking to a family member who was interested in ways that they could sell an electronic version of a book they\u0027d written and this got me thinking about selling electronic files online.",
      "tags": [
        "filelike",
        "business",
        "bootstrapping"
      ],
      "title": "Filelike and a bootstrapper\u0027s manifesto",
      "url": "https://binarybalance.com.au/2012/08/17/filelike-and-a-bootstrappers-manifesto"
    },
    {
      "content_html": "\u003Cp\u003EIt\u0027s been a while since I\u0027ve had the dubious pleasure of using \u003Ca href=\u0022http://en.wikipedia.org/wiki/Internet_Explorer\u0022\u003EIE\u003C/a\u003E as my default every day web browser. The last version of IE that I had any large amount of contact with was IE 7 (pretty early after its initial release), and the best thing I can say about IE 7 is that it wasn\u0027t quite as crap as IE 6. But that\u0027s a bit like saying that Hitler wasn\u0027t quite as crap as Stalin. Recently, for reasons out side of my direct control I have once again been required to take up IE (versions 8 and 9) as a regularly used web browser and I am honestly a little surprised at how terrible it still is. I really expected more from Microsoft by now.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003ENow don\u0027t get me wrong, yes these days I use a Mac when I have a choice about it, I have an iPhone and an iPad. But I try hard not to be one of those annoying, socially maladjusted Apple fan boys, who will perform dazzling feats of circular logic in order to prove that Apple is somehow immune to the phenomenon of making mistakes. And by extension, Microsoft is therefore one massive pile of interleaved clusterfucks that will one day consume and crush the solar system into a dense singularity of infinite suckiness. You know that guy, but hopefully you don\u0027t have to spend time around him anymore.\u003C/p\u003E\n\u003Cp\u003ENo, I actually would love to see Microsoft step up, take some risks and start making themselves relevant again. I feel the consumer\u0027s (i.e. my) interestes are best served when progress in the technology industry is spurred on by close competition, innovation assured in the cycle of one vendor leap-frogging another. Not when a single vendor has the majority of mind share in terms of perceived innovation. I see IE as a nicely illustrative microcosmic analogy for many of the problems that Microsoft has on the macro level.\u003C/p\u003E\n\u003Cp\u003ESo what\u0027s wrong with IE 9?\u003C/p\u003E\n\u003Cp\u003EHow can I restore my previous browsing session? It can\u0027t be automatically restored on browser start which is what I really want. Seemingly, the closest to what I want is that I can open a new tab and click \u0027Reopen last session\u0027 down the bottom there. Also, the task bar preview popup thing in Windows 7 does not show any differentiation between tabs open in one IE window and tabs open in another. More than once I\u0027ve failed to notice that there was a minimised window containing a single tab besides my main window containing all the tabs I actually want to keep, and I\u0027d gone ahead and closed the main window then logged off. I log back on later and begrudgingly click \u0027Reopen last session\u0027 to be presented with the single tab that I wasn\u0027t interested in keeping around.\u003C/p\u003E\n\u003Cp\u003EWhat\u0027s the deal with Accelerators? You know, when you highlight a piece of text in IE and that annoying blue button thing pops up under the highlighted text. I mean, \u0027Email with Windows Live\u0027? \u0027Map with Bing\u0027? \u0027Search with Bing\u0027? \u0027Translate with Bing\u0027? The best thing about them is that you can disable them entirely.\u003C/p\u003E\n\u003Cp\u003EWhy is IE 9 so... damn... slow? On an Intel Core i5 with 4 GB of RAM, Windows 7, it often takes multiple seconds to open or close tabs. I happened to visit some page on the Forbes site the other day, IE 9 spat the dummy at all the JavaScript and more or less locked up for about 20 seconds. Performance seems to get worse the longer my session.\u003C/p\u003E\n\u003Cp\u003EThe coloured tabs in a tab group are kind of distracting and unnecessary to me. The active tab doesn\u0027t look different enough to the inactive tabs. ~~Plus when you open a link in a new tab, it opens at the far end of that tab group rather than next to the tab you opened it from. Perhaps I\u0027ve been conditioned by other browsers, but isn\u0027t opening the new tab next to the tab you just came from simply more intuitive?~~ \u003Cstrong\u003EUPDATE:\u003C/strong\u003E The preceding two sentences apply to IE 8, not IE 9, I accidentally a version.\u003C/p\u003E\n\u003Cp\u003EThis one time (...at band camp), JavaScript just decided to spontaneously disable its self entirely. It took a browser restart to get it back.\u003C/p\u003E\n\u003Cp\u003E~~You have to switch to a tab, making it active, before you can close it.~~ \u003Cstrong\u003EUPDATE:\u003C/strong\u003E The preceding sentence applies to IE 8, not IE 9, I accidentally a version again.\u003C/p\u003E\n\u003Cp\u003E\u003Cem\u003EStill\u003C/em\u003E no built in spell check dictionary? Seriously?\u003C/p\u003E\n\u003Cp\u003EMouse gestures? NOPE. Admittedly, having this \u003Ca href=\u0022http://en.wikipedia.org/wiki/Out_of_the_box\u0022\u003EOOTB\u003C/a\u003E might be expecting too much. Which is a nice segue to: add-ons. Putting aside the fact that the IE add-on ecosystem is a poor shadow of what exists for the other major browsers, indeed some of my issues with IE could possibly be improved by the use of add-ons. But I had a co-worker once who actually installed some optional add-ons for IE. He\u0027s still waiting for his page to load. Microsoft seems to be keenly aware of all the advantages that add-ons can give you, because it won\u0027t be long after first starting to use recent versions of IE that you will see the message at the bottom of the window that says \u0027Speed up browsing by disabling add-ons\u0027. Cue visceral and deeply negative reaction. This message just seems like such a cop-out, almost self defeating in a way. Surely there must be other better options that could have been implemented before throwing such a thing at the user. This is my choice of personifying quote for Microsoft, circa 2012:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003ESpeed up browsing by disabling add-ons.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003ETo me the above quote speaks volumes: hamstrung by the need to maintain backwards compatibility. Lacking innovation. Displaying a lack of attention to detail and user experience. Often playing catchup, sometimes at least keeping pace with the competition. Before, at least we used to fear Microsoft. Now \u0027irrelevance\u0027 and \u0027stagnation\u0027 are the words I most associate with the company.\u003C/p\u003E\n\u003Cp\u003EI\u0027m very glad they\u0027re taking some risks with Windows 8. The \u003Ca href=\u0022http://www.microsoft.com/surface/en/us/default.aspx\u0022\u003ESurface\u003C/a\u003E looks interesting. I won\u0027t be buying one in the foreseeable future, but I really hope it does well. I also hope they replace \u003Ca href=\u0022http://i.imgur.com/Vg5fD.jpg\u0022\u003EBallmer\u003C/a\u003E. The time when Microsoft could get away with treading water is over.\u003C/p\u003E\n\u003Cp\u003EI want to feel justified in rooting for you Microsoft, I really do. You could start with fixing your browser, and perhaps in doing so, you might find a road map that could be repurposed to take you some way towards fixing more important things.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2012-07-13T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2012/07/13/genuinely-surprised-that-ie-still-sucks",
      "summary": "It\u0027s been a while since I\u0027ve had the dubious pleasure of using IE as my default every day web browser. The last version of IE that I had any large amount of contact with was IE 7 (pretty early after its initial release), and the best thing I can say about IE 7 is that it wasn\u0027t quite as crap as IE 6. But that\u0027s a bit like saying that Hitler wasn\u0027t quite as crap as Stalin. Recently, for reasons out side of my direct control I have once again been required to take up IE (versions 8 and 9) as a regularly used web browser and I am honestly a little surprised at how terrible it still is. I really expected more from Microsoft by now.",
      "tags": [
        "browsers",
        "microsoft",
        "fail"
      ],
      "title": "Genuinely surprised that IE still sucks",
      "url": "https://binarybalance.com.au/2012/07/13/genuinely-surprised-that-ie-still-sucks"
    },
    {
      "content_html": "\u003Cp\u003EIn March this year, I finally jumped on the tablet bandwagon and got myself the new iPad, the Wi-Fi \u002B 4G model. I purchased the iPad outright mainly so that I would have maximum flexibility in choosing a data plan to go with it. So not long after, I began researching mobile data plans and was pretty appalled by what I found.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003ENow I was already aware before making my purchase that the new iPad\u0027s 4G capability wasn\u0027t compatible with Australia\u0027s 4G network provided by Telstra, this sucks but I wasn\u0027t too upset. I had initially thought I would likely go with one of these pre-paid options I\u0027d heard of, I was looking for something around the $30/month mark at most, as I have Wi-Fi at home and just needed something to get me by when I\u0027m out and about. On the face of it, a pre-paid, no lock-in kind of deal sounded pretty appealing, but that was until I started reading the fine print that seems to come standard with pre-paid mobile data plans in Australia.\u003C/p\u003E\n\u003Ch3 id=\u0022telstra\u0022\u003ETelstra\u003C/h3\u003E\n\u003Cp\u003ETelstra\u0027s offering 3 GB for $30, with purchased data expiring after 30 days. However, that 3 GB includes both uploads and download, which is a bit shit. But probably of more relevance is the fact that I\u0027d rather push a piece of rusty barbed wire up my urethra than deal with Telstra for anything if I don\u0027t absolutely have to. So Telstra was almost certainly out. I continued my search.\u003C/p\u003E\n\u003Ch3 id=\u0022vodafone\u0022\u003EVodafone\u003C/h3\u003E\n\u003Cp\u003EVodafone\u0027s plan pitched at my price range was 4 GB for $30. Going through the fine print... \u0027Data is for use in Australia only\u0027, uh uh... \u0027Credit expires after 30 days unless you recharge in that time. Maximum allowable data accumulation is 39GB, data recharges exceeding 39GB will be forfeited\u0027... OK... \u0027Usage is calculated in per MB increments\u0027... wait, what?! I don\u0027t know if it\u0027s just me, but I got a visceral adverse reaction to that last caveat. It\u0027s pretty brazen.\u003C/p\u003E\n\u003Cp\u003EAdd to this the fact that the quality of the Vodafone network has been a running joke in Australia for some time now and I really didn\u0027t feel like being at the mercy of the dubious veracity of their recent and emphatic marketing communications that seem to amount to: \u0027Vodafone, we\u0027re not as crap as we used to be... promise!\u0027 and I really wasn\u0027t going to go with Vodafone.\u003C/p\u003E\n\u003Ch3 id=\u0022optus\u0022\u003EOptus\u003C/h3\u003E\n\u003Cp\u003EI\u0027ve had my mobile phone plan with Optus for some years. While their 3G and regional coverage is quite poor in my personal experience, their network is otherwise pretty solid (generally no Vodafone-style drop outs in the middle of calls) and I guess I have something of a \u0027better the devil you know\u0027 kind of thing going on with them. Optus had a $15 pre-paid data plan (for 500 MB) but wait for it... the Optus fine print mentioned that \u0027Data usage is counted in 10MB increments\u0027. Needless to say this raised my ire somewhat so I thought I\u0027d contact the Optus social media team on Twitter and talk to them about it.\u003C/p\u003E\n\u003Cp\u003EMe:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@Optus can you please explain the exact meaning of \u201CData usage is counted in 10MB increments\u201D e.g with your $15 iPad pre-paid plan? o_0\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EOptus:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@gaelian Plans will charge a minimum of 10MB per connection, this will be changing down to 1MB per connection from the 25/04 :) Craig\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EMe:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@Optus OK and how is a \u201Cconnection\u201D defined for a service that ostensibly is always on other than when one loses the network or the like?\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EOptus:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@gaelian Connection is when you connect to the internet successfully. You\u0027re also charged in 10MB increments for any data usage \u2013 Scott\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EMe:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@Optus but what are the timings on that? Say I request a web page, then 10 minutes later I request another, is that two connections or one?\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EOptus:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@gaelian Depends on whether you d/c in between. If connection remains active, its only one. It also depends the amount of data used \u2013 Scott\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EMe:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@Optus so with a prepaid plan, I manually connect and disconnect? and please explain \u201Cit also depends the amount of data used\u201D.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EOptus:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@gaelian It charges in 10MB lots; if you use 18MB you will get 20MB deducted from you usage \u2013 Craig\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EMe:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@Optus I get that. But you didn\u0027t say if one manually connects/disconnects on prepaid, and/or if there is a connection timeout enforced.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EOptus:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E@gaelian Send me your info @ http://yesopt.us/id and I\u0027ll give you a call to explain \u2013 Craig\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EI sent Craig my details and eventually we hooked up via phone as promised. I must give Optus some credit for their customer service, at least they\u0027re trying on this front even if their staff don\u0027t seem as informed on some details as they could be. Craig told me that \u2013 for example \u2013 when you request a web page in Mobile Safari, that\u0027s a connection. I again pressed for more detail and asked what if I request another page ten minutes later? That would be the same connection, but if I shut down Mobile Safari, then the connection is closed, he said. So connections are somehow scoped to apps? I questioned Craig on background activity, like push notifications and the like, and he said that instances of this sort of thing would all be separate connections. It was also reiterated to me that Optus would be moving to 1 MB increments in April 2012, as if this was something to be proud of. I informed Craig that this just meant Optus was seemingly bringing themselves inline with the questionable practices of other carriers instead of setting the bar for deceit. Craig\u0027s final and rather unenlightening comment on the subject was \u0027That\u0027s just the way the plans work\u0027. Still not clear on the details, I mentioned that I would be making a complaint to the relevant regulatory authority about all this, I thanked Craig for his time and released him to his tweeting.\u003C/p\u003E\n\u003Cp\u003ELater, I also spoke to an Optus sales person at one of their physical stores, but he was unable to provide me with any more definite information than what I had been given previously.\u003C/p\u003E\n\u003Cp\u003EAt no point was I able to ascertain whether there was some kind of enforced timeout involved, which to my mind and to the minds of other technical people I\u0027ve spoken to about this, would seem to be a consistent and understandable way that this \u0027connection\u0027 business could be managed.\u003C/p\u003E\n\u003Cp\u003EI did in fact make a complaint to the \u003Ca href=\u0022http://www.accc.gov.au/\u0022\u003EACCC\u003C/a\u003E about the Optus $15 iPad pre-paid plan, it\u0027s dodgy, ill-defined conditions and more broadly, the whole concept of these weirdly retarded pre-paid plans that carriers are flogging. I can no longer find said plan on the Optus website. Apparently in its place is an initial $30 \u003Ca href=\u0022https://www.optus.com.au/shop/Broadband/Mobile-Broadband/Prepaid-Mobile-Broadband/Optus-$30M-Kit-PPOMB\u0022\u003EMicro SIM card for Apple iPad\u003C/a\u003E pre-paid plan. Accompanied by \u003Ca href=\u0022https://www.optus.com.au/shop/broadband/tabletandipad\u0022\u003Ea series of \u0027recharge\u0027 options\u003C/a\u003E, none of which mention anything about data being charged in 1 MB increments or this nebulous \u0027connection\u0027 concept. I\u0027d be reluctant to assume that this means such conditions have been rescinded, however. They\u0027re probably just buried somewhere more effectively now.\u003C/p\u003E\n\u003Ch3 id=\u0022onwards-and-upwards\u0022\u003EOnwards and upwards\u003C/h3\u003E\n\u003Cp\u003ESo in the end, what did I choose? Well, as I said to the person from the ACCC, I\u0027m a web developer and these plans still confuse me.\u003C/p\u003E\n\u003Cp\u003ESo screw pre-paid entirely.\u003C/p\u003E\n\u003Cp\u003EUltimately I settled on the Optus \u003Ca href=\u0022https://www.optus.com.au/shop/Broadband/Mobile-Broadband/iPad-SIM-Only-Plans/My-iPad-M2M-$29.95-OWB\u0022\u003E$29.95 My iPad Month to Month plan\u003C/a\u003E. This is a \u003Cem\u003Epost-paid\u003C/em\u003E plan, Optus stipulating that \u0027Data usage will be counted in kilobytes, where 1024kb = 1MB and includes both uploads and downloads\u0027. Because they can bill me, Optus will happily charge me $0.06 per MB or part thereof if I go over the 4 GB monthly limit but there\u0027s no contract lock-in (a contract would have been a deal breaker for me). Still not awesome, but the least of the many and varied evils I have so far uncovered.\u003C/p\u003E\n\u003Cp\u003EOn a more general note though, what the hell is the deal with download limits in Australia? Even our residential broadband plans are pretty awful compared to some of our international peers. While the \u003Ca href=\u0022http://en.wikipedia.org/wiki/National_Broadband_Network\u0022\u003ENBN\u003C/a\u003E promises to greatly assist with speeds\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E, I hope that the sometimes whacky conditions decorating our Internet access plans improve accordingly.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EThe NBN will theoretically provide up to 100Mbps to 93% of the population, but \u003Ca href=\u0022http://www.transact.com.au/en-ACT/internet/speed\u0022\u003Ereal world tests\u003C/a\u003E on current \u003Ca href=\u0022http://en.wikipedia.org/wiki/Fibre_to_the_premises\u0022\u003EFibre to the premises\u003C/a\u003E (FTTP) connections currently available in rare locations shows a maximum average speed of 86.9 Mbps when connecting to local servers (or perhaps well seeded torrents). Still more than 10 times the speed of the fastest home Internet connection currently available to me.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2012-05-11T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2012/05/11/internet-anemia-in-australia",
      "summary": "In March this year, I finally jumped on the tablet bandwagon and got myself the new iPad, the Wi-Fi \u002B 4G model. I purchased the iPad outright mainly so that I would have maximum flexibility in choosing a data plan to go with it. So not long after, I began researching mobile data plans and was pretty appalled by what I found.",
      "tags": [
        "mobile",
        "social-media",
        "twitter"
      ],
      "title": "Internet anemia in Australia",
      "url": "https://binarybalance.com.au/2012/05/11/internet-anemia-in-australia"
    },
    {
      "content_html": "\u003Cp\u003EA couple of weeks ago, I got a call from my \u003Ca href=\u0022http://en.wikipedia.org/wiki/Internet_service_provider\u0022\u003EISP\u003C/a\u003E to tell me the email account attached to my ISP plan had been broken into and was being used to send spam. They understandably were forced to change the password on my account and called to let me know what had happened. This marks the first time in my relatively long history of Internet use that I\u0027ve had an account broken into and it was something of a wakeup call for me.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EThe ISP support person asked if I\u0027d clicked on any questionable links in emails received at my account recently. I was pleased to be able to unequivocally rule out this attack vector, as in fact I hadn\u0027t used that email address at all for at least a few years, it had long ago been relegated to function only as a forwarding address to my primary email account. The support person and I agreed that most likely, the account was cracked via a \u003Ca href=\u0022http://en.wikipedia.org/wiki/Brute-force_attack\u0022\u003Ebrute-force attack\u003C/a\u003E on my ISP\u0027s web mail interface. While it wouldn\u0027t be unreasonable to question why their web mail login page is probably not hardened against brute force cracking, if indeed this was how the account was compromised I must also take some responsibility for what happened, as the password attached to my account was not as strong as it could have been. It was something of a legacy password from a bygone era when I wasn\u0027t as cognisant of online security, I had been meaning to change it for some time and just hadn\u0027t got around to it.\u003C/p\u003E\n\u003Cp\u003EWhile I couldn\u0027t really care less about the email account that I don\u0027t use (I ended up asking my ISP to just disable it), of greater concern to me was the fact that the same password used to access my ISP email account was also the one that I use to access my Internet connection its self. I had no choice about this, its just the way their system works. Fortunately I don\u0027t think the attackers realised this before their access to my account was revoked. So the end result was that \u2013 aside from a little spam being sent out from my old, unused email address \u2013 there was no harm done.\u003C/p\u003E\n\u003Cp\u003EHowever, things could have been worse and this situation prompted me to finish off ramping up the security on all my online accounts. The Internet is not as friendly a place as it was even a few years ago and it\u0027s long past the time when we should all be reexamining how we can better take responsibility for our own security online.\u003C/p\u003E\n\u003Ch3 id=\u00221password\u0022\u003E1Password\u003C/h3\u003E\n\u003Cp\u003ESince late 2010, I\u0027ve been migrating all my online accounts over to using \u003Ca href=\u0022https://agilebits.com/onepassword\u0022\u003E1Password\u003C/a\u003E. I can\u0027t recommend this application enough. It\u0027s really helped me to simplify management of my many online accounts, making it easy to use strong, unique passwords for each without the nightmare of having to remember them all. The way that 1Password can integrate with \u003Ca href=\u0022https://www.dropbox.com/\u0022\u003EDropbox\u003C/a\u003E makes it easy to keep all my physical devices in sync as far as my online accounts go and the browser extensions available for all the popular browsers are an added convenience making 1Password a \u0027Why didn\u0027t I start using this sooner?\u0027 kind of deal for me. Just make sure your master password is damn strong of course, or your account security runs the risk of collapsing like a house of cards.\u003C/p\u003E\n\u003Cp\u003EThere was an issue with the 1Password Chrome extension in late 2011, where due to a Chrome update it essentially stopped working for longer than would have been ideal. This was a very annoying problem for me, but the support I received from AgileBits (the company behind 1Password) was very responsive throughout.\u003C/p\u003E\n\u003Cp\u003EThe problem with my ISP user account was that it was one of last stragglers that I had yet to get around to switching over to managing with 1Password. This problem has since been rectified.\u003C/p\u003E\n\u003Ch3 id=\u0022online-banking\u0022\u003EOnline banking\u003C/h3\u003E\n\u003Cp\u003EI deal mainly with two different financial institutions for my banking needs. One of these has quite a developed online banking interface and has had \u003Ca href=\u0022http://en.wikipedia.org/wiki/Two-factor_authentication\u0022\u003Etwo-factor authentication\u003C/a\u003E for some time. The other is not so developed (to put it politely) and only added the possibility for my account to make use of two-factor authentication this year. Needless to say all my online banking is now protected by two-factor authentication along with strong, unique passwords.\u003C/p\u003E\n\u003Cp\u003EIf you\u0027re able to register for two-factor authentication with your bank(s) and you haven\u0027t taken the time to set it up yet, then I strongly recommend you do take the time, or move to a bank that does provide two-factor authentication for their online banking.\u003C/p\u003E\n\u003Ch3 id=\u0022google-2-step-verification\u0022\u003EGoogle 2-step verification\u003C/h3\u003E\n\u003Cp\u003EIn 2011, Google introduced their own implementation of two-factor authentication for Google user accounts that they\u0027re calling \u003Ca href=\u0022https://support.google.com/accounts/bin/answer.py?hl=en\u0026amp;answer=180744\u0022\u003E2-step verification\u003C/a\u003E. I heard about this feature shortly after it was released, thought \u0027Oh, I should set that up\u0027 and promptly never did. Well, now I have and if you own a Google account, you should too.\u003C/p\u003E\n\u003Cp\u003EGoogle has pretty good documentation on how to set it up, so I\u0027m not going to rehash things here. But some points to highlight:\u003C/p\u003E\n\u003Cp\u003EYou can for example, set your main computer to be trusted so that you only have to type the extra verification code once a month on a trusted device.\u003C/p\u003E\n\u003Cp\u003EYou need to set up a single use, application specific password for each of the client-side applications that you might use with Google services. Such as if you use a mail client like Thunderbird or Outlook with Gmail, an RSS reading application with Google Reader, the Mail app on an iPhone with Gmail, \u003Ca href=\u0022http://support.google.com/chrome/bin/answer.py?hl=en\u0026amp;answer=1181420\u0022\u003EGoogle account sync with Google Chrome\u003C/a\u003E and so on. This is a bit of a pain, but you only need to do it once. Plus this also provides extra security in the event that say, your phone is ever stolen, you can revoke the application specific password(s) you used with Google services on your phone so at least the thief can\u0027t add insult to injury by potentially taking possession of your Google user account along with your phone.\u003C/p\u003E\n\u003Cp\u003ESpeaking of phones, you can also install \u003Ca href=\u0022http://support.google.com/accounts/bin/answer.py?hl=en\u0026amp;answer=1066447\u0022\u003EGoogle Authenticator\u003C/a\u003E for \u003Ca href=\u0022http://en.wikipedia.org/wiki/IOS\u0022\u003EiOS\u003C/a\u003E and \u003Ca href=\u0022http://en.wikipedia.org/wiki/BlackBerry\u0022\u003EBlackBerry\u003C/a\u003E, which ostensibly works similarly to a \u003Ca href=\u0022http://en.wikipedia.org/wiki/SecurID\u0022\u003ESecurID device\u003C/a\u003E as an alternative to getting your verification codes on your phone via \u003Ca href=\u0022http://en.wikipedia.org/wiki/SMS\u0022\u003ESMS\u003C/a\u003E. I got a kick out of setting Google Authenticator up on my iPhone. After downloading the app, the setup process is really as simple as holding your phone up to your computer\u0027s monitor so that the inbuilt camera can read a \u003Ca href=\u0022http://en.wikipedia.org/wiki/QR_code\u0022\u003EQR code\u003C/a\u003E off the screen. Livin\u0027 in the future!\u003C/p\u003E\n\u003Cp\u003EBut what happens if you loose your phone? Well you might be pretty screwed, unless you happen to still have access to your Google account on your computer or took note of the set of single-use backup verification codes that you can generate while setting up 2-step verification. I\u0027d recommend putting these codes somewhere \u003Cem\u003Every\u003C/em\u003E safe.\u003C/p\u003E\n\u003Cp\u003EAll up, I think it took me about an hour to set up 2-step verification, sorting out all my devices and client-side applications that I use in conjunction with Google services. But I feel the time was well spent\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Ch3 id=\u0022tldr\u0022\u003ETL;DR\u003C/h3\u003E\n\u003Cp\u003EIf you\u0027ve been putting off hardening the security of your online accounts, then don\u0027t wait for the wakeup call I needed to prompt me to finish the job. Do it soon, or better yet, do it now.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EThe question of whether one should still be using Google services considering the recent changes to their privacy policy is a valid one. But that\u0027s a discussion for another day.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2012-03-11T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2012/03/11/a-wakeup-call-from-online-security-will-you-accept-the-charges",
      "summary": "A couple of weeks ago, I got a call from my ISP to tell me the email account attached to my ISP plan had been broken into and was being used to send spam. They understandably were forced to change the password on my account and called to let me know what had happened. This marks the first time in my relatively long history of Internet use that I\u0027ve had an account broken into and it was something of a wakeup call for me.",
      "tags": [
        "google",
        "security"
      ],
      "title": "A wakeup call from online security, will you accept the charges?",
      "url": "https://binarybalance.com.au/2012/03/11/a-wakeup-call-from-online-security-will-you-accept-the-charges"
    },
    {
      "content_html": "\u003Cp\u003E\u003Cstrong\u003ENote\u003C/strong\u003E: if you just happen to be interested in knowing possible causes for the \u0027no id given\u0027 error message in \u003Ca href=\u0022http://en.wikipedia.org/wiki/Ruby_(programming_language)\u0022\u003ERuby\u003C/a\u003E, go to the last paragraph of this post.\u003C/p\u003E\n\u003Cp\u003EI don\u0027t have reason to do a lot of Ruby metaprogramming myself, although being a Rails user, I surely receive a lot of benefit from it. Metaprgramming is used extensively in Rails, the most visible example I can think of is the \u003Ca href=\u0022http://guides.rubyonrails.org/active_record_querying.html#dynamic-finders\u0022\u003EActiveRecord Dynamic Finders\u003C/a\u003E.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EWorking on my current pet project, I had occasion to do a little metaprogramming in a similar vein to the ActiveRecord Dynamic Finders. I have a model with two sets of \u003Ca href=\u0022https://github.com/thoughtbot/paperclip/\u0022\u003Epaperclip\u003C/a\u003E attachments. One is for when an attachment is first uploaded to my server and the other is for when the attachment is subsequently moved to \u003Ca href=\u0022http://aws.amazon.com/s3/\u0022\u003EAmazon S3\u003C/a\u003E for permanent storage. The file stored on my server is deleted after successful transfer to Amazon S3.\u003C/p\u003E\n\u003Cp\u003EI wanted some convenience accessor methods that would return values from whichever attachment actually existed on the model. The key to this is to implement the \u003Ccode\u003Emethod_missing\u003C/code\u003E method, which is called when Ruby receives a message invoking a method that doesn\u0027t exist in the current context. The use of \u003Ccode\u003Emethod_missing\u003C/code\u003E is a common approach in Ruby metaprogramming. My code initially looked something like:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-ruby\u0022 data-language=\u0022ruby\u0022\u003E\u003Cspan class=\u0022bb-code-keyword\u0022\u003Eclass\u003C/span\u003E Asset \u0026lt; ActiveRecord::Base\n\n  ...\n\n  \u003Cspan class=\u0022bb-code-keyword\u0022\u003Edef\u003C/span\u003E method_missing(method_id, *arguments, \u0026amp;block)\n    method_id = method_id.to_s\n\n    \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eif\u003C/span\u003E method_id =~ /^upload_(file_name|file_size|content_type|updated_at)$/\n      \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eself\u003C/span\u003E.\u003Cspan class=\u0022bb-code-keyword\u0022\u003Eclass\u003C/span\u003E.send :define_method, method_id \u003Cspan class=\u0022bb-code-keyword\u0022\u003Edo\u003C/span\u003E\n        \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eif\u003C/span\u003E \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eself\u003C/span\u003E.local_upload?\n          eval(\u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;self.local_upload_#{$1}\u0026quot;\u003C/span\u003E)\n        \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eelsif\u003C/span\u003E \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eself\u003C/span\u003E.s3_upload?\n          eval(\u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;self.s3_upload_#{$1}\u0026quot;\u003C/span\u003E)\n        \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eelsif\u003C/span\u003E \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eself\u003C/span\u003E.file_deleted?\n          \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eif\u003C/span\u003E method_id == \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;upload_file_size\u0026quot;\u003C/span\u003E\n            \u003Cspan class=\u0022bb-code-number\u0022\u003E0\u003C/span\u003E\n          \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eelse\u003C/span\u003E\n            \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;File deleted\u0026quot;\u003C/span\u003E\n          \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eend\u003C/span\u003E\n        \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eelse\u003C/span\u003E\n          \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;Available soon...\u0026quot;\u003C/span\u003E\n        \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eend\u003C/span\u003E\n      \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eend\u003C/span\u003E\n      \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eself\u003C/span\u003E.send(method_id)\n    \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eelse\u003C/span\u003E\n      super\n    \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eend\u003C/span\u003E\n  \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eend\u003C/span\u003E\n\n  \u003Cspan class=\u0022bb-code-keyword\u0022\u003Edef\u003C/span\u003E respond_to?(method_id, include_private = \u003Cspan class=\u0022bb-code-keyword\u0022\u003Efalse\u003C/span\u003E)\n    \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eif\u003C/span\u003E method_id.to_s =~ /^upload_(file_name|file_size|content_type|updated_at)$/\n      \u003Cspan class=\u0022bb-code-keyword\u0022\u003Etrue\u003C/span\u003E\n    \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eelse\u003C/span\u003E\n      super\n    \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eend\u003C/span\u003E\n\n  ...\n\n  \u003Cspan class=\u0022bb-code-keyword\u0022\u003Eend\u003C/span\u003E\n\n  \u003Cspan class=\u0022bb-code-comment\u0022\u003E# The idea being that I could then for example, write:\u003C/span\u003E\n  a = Asset.find(\u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E)\n\n  \u003Cspan class=\u0022bb-code-comment\u0022\u003E# Extra-dynamic finder that will return the value of a.local_upload_file_name if present,\u003C/span\u003E\n  \u003Cspan class=\u0022bb-code-comment\u0022\u003E# return the value of a.s3_upload_file_name if the local upload doesn\u0026#39;t exist,\u003C/span\u003E\n  \u003Cspan class=\u0022bb-code-comment\u0022\u003E# and finally some overly hacky business to handle return values in the case of neither\u003C/span\u003E\n  \u003Cspan class=\u0022bb-code-comment\u0022\u003E# file being present or the file not yet having finished processing in the web server.\u003C/span\u003E\n  a.upload_file_name\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThis was my first attempt and I had a number of concerns with this code. But I\u0027m going to concentrate on one issue in particular that got me pretty good. Note line 6 where I convert the @method_id@ variable to a string (originally it\u0027s a symbol). I absentmindedly did this just so that I could convert it once and use it as a string in two different places (lines 8 and 15). It turns out one doesn\u0027t really need to convert a symbol to a string in order to use it with the pattern matching operator, but I initially thought I\u0027d make things nice and explicit so as to avoid possible issues. In hindsight this now seems a little ironic.\u003C/p\u003E\n\u003Cp\u003ESo moving on, I refresh my browser only to find this rather terse error message:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code\u0022\u003E\u003Ccode class=\u0022\u0022\u003Eno id given\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EWas this some kind of Rails routing error? No, looking at the stack trace, it stopped at:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code\u0022\u003E\u003Ccode class=\u0022\u0022\u003Eactivemodel (3.0.9) lib/active_model/attribute_methods.rb:392:in \u0060method_missing\u0026#39;\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESo this prompted me to think that my metaprogramming attempt had stuffed something up quite nicely. My \u003Ccode\u003EAsset#method_missing\u003C/code\u003E method was passing the call to \u003Ccode\u003Esuper\u003C/code\u003E and \u003Ca href=\u0022https://github.com/rails/rails/blob/v3.0.9/activemodel/lib/active_model/attribute_methods.rb#L392\u0022\u003Eline 392 of attribute_methods.rb\u003C/a\u003E was another call to \u003Ccode\u003Esuper\u003C/code\u003E. I couldn\u0027t find where this error message was actually coming from. A little more investigation seemed to reveal that this error actually comes from Ruby, not Rails. From \u003Ca href=\u0022https://github.com/ruby/ruby/blob/v1_9_3_0/vm_eval.c#L496\u0022\u003Eline 496 of vm_eval.c in Ruby 1.9.3-p0\u003C/a\u003E to be exact:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code\u0022\u003E\u003Ccode class=\u0022language-c\u0022 data-language=\u0022c\u0022\u003Eraise_method_missing(rb_thread_t *th, int argc, const VALUE *argv, VALUE obj,\n\t\t     int last_call_status)\n{\n    ID id;\n    VALUE exc = rb_eNoMethodError;\n    const char *format = 0;\n\n    if (argc == 0 || !SYMBOL_P(argv[0])) {\n\trb_raise(rb_eArgError, \u0026quot;no id given\u0026quot;);\n    }\n\n  ...\n\n}\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAssuming the call to \u003Ccode\u003Emethod_missing\u003C/code\u003E makes it all the way to the \u003Ccode\u003EBasicObject\u003C/code\u003E class, Ruby 1.9.3-p0 doesn\u0027t like it when you pass in a string instead of a symbol to \u003Ccode\u003EBasicObject#method_missing\u003C/code\u003E and you get \u0027no id given\u0027. It would also appear that this same error results if you try to invoke \u003Ccode\u003EBasicObject#method_missing\u003C/code\u003E with no arguments. The \u0027no id given\u0027 error message making a little more sense in this latter case than the former.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2012-02-19T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2012/02/19/ruby-method-missing-and-\u0027no-id-given\u0027",
      "summary": "Note : if you just happen to be interested in knowing possible causes for the \u0027no id given\u0027 error message in Ruby , go to the last paragraph of this post.",
      "tags": [
        "ruby",
        "rails",
        "metaprogramming"
      ],
      "title": "Ruby, method_missing and \u0027no id given\u0027",
      "url": "https://binarybalance.com.au/2012/02/19/ruby-method-missing-and-\u0027no-id-given\u0027"
    },
    {
      "content_html": "\u003Cp\u003EThe information equivalent of a nuclear bomb detonating over the \u003Ca href=\u0022http://en.wikipedia.org/wiki/Shima_Hospital\u0022\u003EShima Hospital\u003C/a\u003E that is \u003Ca href=\u0022http://en.wikipedia.org/wiki/SOPA\u0022\u003ESOPA\u003C/a\u003E / \u003Ca href=\u0022http://en.wikipedia.org/wiki/PROTECT_IP_Act\u0022\u003EPIPA\u003C/a\u003E last week would seem to have put a rather large question mark over the future of the these proposals (\u003Ca href=\u0022http://en.wikipedia.org/wiki/English_Wikipedia_blackout#Wikimedia_community\u0022\u003Ethanks to Wikipedia\u003C/a\u003E et al.).\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EOf course, copyright reliant industry\u0027s troubled relationship with technology isn\u0027t new. Historically, it\u0027s been something of a slow-motion rear guard action over the years as technology steadily makes it easier and easier to distribute information. But \u003Ca href=\u0022http://www.youtube.com/watch?v=up863eQKGUI\u0022\u003Eprevious attempts\u003C/a\u003E to combat the inevitable seem very quaint now that the stakes have been well and truly raised.\u003C/p\u003E\n\u003Cp\u003EThey say there\u0027s only two things that are certain: death and taxes. Well, taxes is a given I suppose, unless you happen to be in a position to mostly lobby your way out of them. Death on the other hand is a little harder to lobby against at present. The Death card in the traditional Tarot deck (as watchers of The Simpsons or readers of \u003Ca href=\u0022http://en.wikipedia.org/wiki/Promethea\u0022\u003EPromethea\u003C/a\u003E may recollect) is often interpreted as representing change or transformation. In truth, perhaps the one universally inevitable condition is change. Following on from this, I thought I might try an analogy that incumbents such as the Motion Picture Association of America (MPAA) could find some affinity with: At present, the movie/TV industry is like the \u003Ca href=\u0022http://en.wikipedia.org/wiki/T-1000\u0022\u003ET-1000\u003C/a\u003E from \u003Ca href=\u0022http://en.wikipedia.org/wiki/Terminator_2:_Judgment_Day\u0022\u003ETerminator 2: Judgement Day\u003C/a\u003E. Once more or less invincible, now they find they are smack in the middle of the molten ore of advancing technology, transforming themselves into all the past shapes stored in their memory in a desperate attempt to avoid their own destruction. What the T-1000 apparently couldn\u0027t do was shift into a new and original shape, one it hadn\u0027t used before. Who knows, if it had found an original shape then maybe the ending of Terminator 2 might have gone down differently\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EI haven\u0027t previously seen the state of things enumerated quite as nicely by the players themselves as was the case in the \u003Ca href=\u0022http://wikileaks.org/cable/2008/11/08CANBERRA1197.html\u0022\u003Ediplomatic cable published recently\u003C/a\u003E by Wikileaks, wherein the MPAA\u0027s legal action by proxy against an Australian ISP is discussed. There\u0027s some pretty interesting text in that cable. Other commentators have already focused on the Machiavellian way that the MPAA went about putting an Australian facade over their legal action against iiNet, so I\u0027ll point out this bit:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EMedia reaction to the case has been mixed. It includes some predictable criticisms of AFACT\u0027s [the Australian Federation Against Copyright Theft\u0027s] resort to legal challenges as doomed to be ineffective, and exhortations that the best way to combat piracy is for the movie and TV industries to adapt to the digital age and make their products more readily available for download at reasonable prices and conditions.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EAnd this bit:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E[The] MPAA see this as a major test case, and not necessarily their final legal move in Australia, which does have very high rates of illegal movie and television show downloads, in part because of the sometimes long gaps between their release in the US and their arrival in Australian theaters or on local television.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003ESo the MPAA thinks that Australia has \u0027very high rates of illegal movie and television show downloads\u0027 and this is \u0027in part\u0027 due to the \u0027sometimes long gaps\u0027 between content released in the US and that same content being released in Australia. Also, the MPAA can\u0027t say they weren\u0027t told that the best way to \u0027combat piracy is for the movie and TV industries to adapt to the digital age and make their products more readily available for download at reasonable prices and conditions.\u0027\u003C/p\u003E\n\u003Cp\u003EBut they\u0027d rather go to court.\u003C/p\u003E\n\u003Cp\u003EAs I see it, the situation playing out is capitalism and the free market in action, baby! Survival of the fittest! Those concepts that giants of industry always seem to hold most dear until the application thereof threatens their bottom line. Their solution \u2013 after losing legal proceedings \u2013 usually then being to demand that regulation (gasp!) be enacted to protect the monopolies and gravy trains that they so carefully constructed. Of course the incumbents prefer these methods, because if they were to actually adapt to the changing landscape instead, then that would mean that the gravy train might have to become more streamlined. It might have to start making fewer or different stops and no longer be able to dally at each station, waiting for every fat controller to take his share.\u003C/p\u003E\n\u003Cp\u003EI pay for Foxtel, which is the News Corp. owned, subscription TV company that services Australia. The other week, I missed most of an episode of the Daily Show (which plays on Foxtel\u0027s Comedy Channel) and I wanted to catch the interview section of that episode specifically. As happens sometimes, the interview was one that had gone long and the full piece was only available on \u003Ca href=\u0022http://www.thedailyshow.com/\u0022\u003Ethedailyshow.com\u003C/a\u003E. So at my computer, I click through to the \u0027Full Episodes\u0027 page on thedailyshow.com and I am greeted with a message telling me \u0027Sorry, this video is unavailable from your location\u0027. Fortunately I know how to get around this region lockout, but why the hell should I have to pretend I\u0027m a proxy server in order to watch a show that I already paid for? In any case, the ease with which this region lockout can be circumvented makes such measures just so much pissing in the wind. This kind of thing only annoys the customers that \u003Ca href=\u0022http://www.theverge.com/2012/1/15/2709659/rupert-murdoch-takes-on-obama-sopa-google-and-high-popcorn-prices-on\u0022\u003EMurdoch\u0027s\u003C/a\u003E companies should be bending over backwards for, and amuses the pirates they profess to be fighting.\u003C/p\u003E\n\u003Cp\u003EAs I write this, the Australian dollar is trading at 1.0529 US dollars, the Australian dollar has been more or less at parity with the US dollar for some months now. Why is it then, that the cost of tracks on the Australian iTunes store are well out of step with exchange rates? I\u0027ve heard it nonsensically argued that we wouldn\u0027t be able to handle a fluctuating price on the Australian iTunes store, better to make us pay AUD$1.69 when Americans are paying USD$1.00 for the same music because otherwise Australians will get confused and afraid, we will lose confidence in the market or something, I assume the argument goes. We\u0027re a simple bunch, you see. Better to rip us off than risk confusing us.\u003C/p\u003E\n\u003Cp\u003ECultural norms are changing, people are coming to expect on-demand content and if it is not \u0027readily available for download at reasonable prices and conditions\u0027 then people will find content readily available elsewhere at reasonable prices and conditions. No longer do people have no choice but to take the price-gouging crap they\u0027re served and call it ice cream, and you can\u0027t get a much better price than $0.00. But personally, I am happy to pay greater than $0.00 for a reasonable amount of convenience/quality/value. This is a primary reason why I buy stuff from iTunes when I know full well where I could get pretty much the same content for free. The small amount of time I save, the minimum guarantee of quality and the slight increase in value (e.g. I get a nice little cover image with my iTunes track, this is not always the case elsewhere) is worth a \u003Cem\u003Ereasonable\u003C/em\u003E price.\u003C/p\u003E\n\u003Cp\u003EIt seems to me that the price of digital music (barring stuff like the Australian iTunes japery I just mentioned) is pretty fair, at least from the consumers point of view. Having been a small-time semi-professional musician at one point myself, I don\u0027t think I could really justify demanding that a track cost much less than AUD$1.00 on iTunes and the like. But as a consumer, nor would I \u003Cem\u003Egenerally\u003C/em\u003E tolerate it being more than AUD$1.69.\u003C/p\u003E\n\u003Cp\u003EI will however, go on record as saying that the movie/TV industry will need to face the fact that their content is now well overpriced and its distribution now far too slow and conditional when compared to what the market is willing to accept. These industries know this, they don\u0027t have the will or inclination to modify their gravy train, and hence they have decided to litigate and lobby for government regulation instead.\u003C/p\u003E\n\u003Cp\u003EWhen one looks at the US domestic box office gross earned over the years 1990 \u2013 1999 (inclusive), i.e. largely before file sharing was an issue, and compares it to the US domestic box office gross earned over the years 2000 \u2013 2009 (inclusive), the total gross from 2000 \u2013 2009 is almost 1.6 times what was from 1990 \u2013 1999. More movies were released during 2000 \u2013 2009 (5410) than were released during 1990 \u2013 1999 (4625)\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E. So while I don\u0027t doubt that online file sharing has had and will continue to have some effect on copyright reliant industries, I don\u0027t think things are as desperate as the MPAA would have us believe and there certainly seems to be more than enough room for some fat trimming and experimentation with new business models to commence.\u003C/p\u003E\n\u003Ch3 id=\u0022an-artists-utopia\u0022\u003EAn artist\u0027s utopia?\u003C/h3\u003E\n\u003Cp\u003EThis information revolution we now find ourselves in is as massive a change as was the industrial revolution. It\u0027s big. Really big. And continuing. Sometimes it\u0027s easy to forget that the World Wide Web has only been around for 20-odd years now but look how much it\u0027s changed things already. Revolutions aren\u0027t usually very fair to all the stakeholders involved, but they happen none the less and some can\u0027t be stopped. With this one, I think one will have to get on board or face the proverbial guillotine.\u003C/p\u003E\n\u003Cp\u003EI have sometimes heard proponents of the copyright reliant industries argue in the vein that the current state of things should continue because these industries act as a sort of culture filter. After all, \u003Ca href=\u0022http://en.wikipedia.org/wiki/Sturgeon%27s_Law\u0022\u003Eninety percent of everything is crap\u003C/a\u003E and someone needs to direct the tide. Where would we be if big movie studios and record labels didn\u0027t have untold millions of dollars to produce and promote such cultural gems for the ages as \u0027Mission: Impossible \u2013 Ghost Protocol\u0027 or \u0027Sexy And I Know It\u0027, respectively?\u003C/p\u003E\n\u003Cp\u003EA possible outcome of the current upheaval within the creative industry establishment is a taking back of culture by the people. The Internet has given us back the means of culture distribution. To me it feels closer to the way that culture was transmitted in days gone by, from person to person, bard to audience, scribe to reader, only now thanks to the Internet, the whole world is our shire. In the extreme manifestation of this trend, maybe the multi-million dollar summer blockbuster no longer even exists or has changed so massively that its ancestry wouldn\u0027t even be evident. And so too for popular \u0027music\u0027. Perhaps our cultural artifacts will not seem as polished as they are now (for current values of the word \u0027polished\u0027), but perhaps they\u0027ll more often be more meaningful, closer to embodying the true purpose of art and less a commodity. All this is not to say that I don\u0027t enjoy the odd mindless blockbuster\u003Ca id=\u0022fnref:3\u0022 href=\u0022#fn:3\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E3\u003C/sup\u003E\u003C/a\u003E or pop music earworm... but big, massive revolution, remember? I\u0027m giving myself license to theorise outside the box here.\u003C/p\u003E\n\u003Cp\u003EI wonder what a world might look like where \u0027Big Copyright\u0027 is but a memory, and while copyright still exists in some form, things have become far more decentralised than they are now and distribution far more direct. The default is that people make art for its own sake, as individuals and as part of relatively small associations. Because the primary motivator is that they \u003Cem\u003Ejust want to express something\u003C/em\u003E, their art will more often outlast the Christmas retail season and less often be this kind of pastiche, feedback-loop art, popular because its popular, kick-started by the marketing dollar. There\u0027s still nothing wrong with selling art, but profit is a secondary motivator and there are far less middle-men to inflate the price and get in the way of efficient global distribution.\u003C/p\u003E\n\u003Cp\u003EI doubt anything like this will truly come to pass... unless the relevant industries maintain their steadfast refusal to adapt.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EI\u0027m thinking what if the T-1000 had elongated its self up out of the molten ore and quickly spread its body, paper thin, over as wide an area as possible, thus allowing the heated air above the liquified ore to float it to a position of safety? Essentially turning its self into a kind of hot air balloon? Eh? Eh? Yeah OK, my first attempt at fan fiction might need some work.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003ESee \u003Ca href=\u0022http://boxofficemojo.com/yearly/\u0022\u003EBox Office Mojo\u003C/a\u003E. Thanks to film critic \u003Ca href=\u0022http://www.marcfennell.com/\u0022\u003EMarc Fennel\u003C/a\u003E for pointing me to these data.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:3\u0022\u003E\n\u003Cp\u003EYes, I enjoyed the Michael Bay Transformer movies... DON\u0027T YOU JUDGE ME!\u003Ca href=\u0022#fnref:3\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2012-01-25T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2012/01/25/copyright-reliant-industries-are-the-t-1000",
      "summary": "The information equivalent of a nuclear bomb detonating over the Shima Hospital that is SOPA / PIPA last week would seem to have put a rather large question mark over the future of the these proposals ( thanks to Wikipedia et al.).",
      "tags": [
        "copyright",
        "culture",
        "open-web"
      ],
      "title": "Copyright reliant industries are the T-1000",
      "url": "https://binarybalance.com.au/2012/01/25/copyright-reliant-industries-are-the-t-1000"
    },
    {
      "content_html": "\u003Cp\u003EI was recently reading a blog post entitled \u0027\u003Ca href=\u0022http://blog.davidtate.org/2011/09/how-to-work-from-home-without-going-insane-purple-monkey-dishwasher/\u0022\u003EHow to work from home without going insane (purple monkey dishwasher)\u003C/a\u003E\u0027 by David Tate.\u003C/p\u003E\n\u003Cp\u003EThe post has a lot of good advice and observations in it, relevant to my interests because working from home is something I aspire to be doing more of.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EIn the section on interruptions, where \u2013 referring to adjusting from the more typical office environment to working from home \u2013 David writes:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EWhat you will realize is that outside of your normal distractions your body has learned to not focus for very long on anything.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EI stopped at that sentence for a moment, because whenever I come across someone talking/writing about how they have trouble focussing \u2013 and I come across this reasonably often \u2013 it makes me wonder why I \u003Cem\u003Eusually\u003C/em\u003E don\u0027t have this problem. I say \u0027\u003Cem\u003Eusually\u003C/em\u003E\u0027 because everyone has times when they can\u0027t focus, can\u0027t get in the zone, but for me \u2013 \u003Ca href=\u0022/2010/11/17/goldfish-in-a-sea-of-information\u0022\u003Eas I\u0027ve written about previously\u003C/a\u003E \u2013 it\u0027s not typically when I\u0027m working towards a goal that I have trouble focussing. I more often have the opposite problem: I forget to take breaks when I probably should. Not all focus is equal, though. While I generally have no issues focussing on a task, I sometimes do find myself getting side-tracked by what can turn out to be irrelevant details, call it \u003Ca href=\u0022http://c2.com/cgi/wiki?PrematureOptimization\u0022\u003Epremature optimisiation\u003C/a\u003E or not seeing the forrest for the trees. Such are the pitfalls of the perfectionist streak.\u003C/p\u003E\n\u003Ch3 id=\u0022in-any-case-why-do-i-usually-have-little-trouble-focussing\u0022\u003EIn any case, why do I usually have little trouble focussing?\u003C/h3\u003E\n\u003Cp\u003EI can make some educated guesses.\u003C/p\u003E\n\u003Cp\u003EI was introduced to meditation at an early age. Also from an early age my parents had an agreement with me that should I try an activity \u2013 for example, learning piano \u2013 then I had to do it for a minimum of three months before I could quit if I decided I didn\u0027t like it. I have no definitive proof, but I suspect that engaging in this kind of mental discipline in early childhood started me on the right track to being able to effectively focus for long periods of time.\u003C/p\u003E\n\u003Cp\u003EFurther development of my ability to focus happened rather organically as I explored other activities. From the age of about 9 I started to play \u003Ca href=\u0022http://en.wikipedia.org/wiki/Role-playing_game\u0022\u003Epen and paper RPGs\u003C/a\u003E such as \u003Ca href=\u0022http://en.wikipedia.org/wiki/Editions_of_Dungeons_%26_Dragons#Advanced_Dungeons_.26_Dragons\u0022\u003EAD\u0026amp;D\u003C/a\u003E and \u003Ca href=\u0022http://en.wikipedia.org/wiki/Rifts\u0022\u003ERifts\u003C/a\u003E. My parents being of the educated and logical persuasion, never put much stock in the \u003Ca href=\u0022http://en.wikipedia.org/wiki/Dungeons_%26_Dragons_controversies\u0022\u003Eoutlandish criticisms of RPGs\u003C/a\u003E, which at the time were still taken seriously by some.\u003C/p\u003E\n\u003Cp\u003EI began painting scale models/miniatures\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E, and playing tabletop war games such as the then relatively new \u003Ca href=\u0022http://en.wikipedia.org/wiki/Warhammer_40,000\u0022\u003EWarhammer 40,000\u003C/a\u003E franchise from a British company called Games Workshop. My father was a veteran of the British Army and he took an active interest in supporting my hobbies especially if they were anything to do with a military theme and if they were somehow British, then all the better! I can remember one day after completing the paint job on an anti-aircraft tank I had been working on for some time my father commented that he was impressed that I could maintain focus for so long. I didn\u0027t think much of it at the time, it was normal to me. Only later did I start realising that not everyone had the same patience and attention to detail.\u003C/p\u003E\n\u003Cp\u003EI\u0027m pretty sure I retained more useful fundamental math knowledge from playing pen and paper RPGs and tabletop war games than I did from any part of my schooling to that time. This could possibly have been because no one really told me that an attractive thing about math is that you can use it to model the world and do lots of actually interesting stuff. I figured this out for myself.\u003C/p\u003E\n\u003Cp\u003EI began reading fantasy and sci-fi novels. Initially this grew out of my interest in RPGs, but it was also spurred on by a teacher who implied that such literary works were probably beyond my ability at the age of 8 or 9. Within a few months I had a book shelf filled with novels that I had read. I suppose I should thank my teacher for his lack of faith, as the unintended consequence was that it helped my English studies considerably\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E. I began with the \u003Ca href=\u0022http://en.wikipedia.org/wiki/Dragonlance\u0022\u003EDragonlance Saga\u003C/a\u003E followed by just about every book written by \u003Ca href=\u0022http://en.wikipedia.org/wiki/David_Eddings\u0022\u003EDavid Eddings\u003C/a\u003E, eventually migrating mainly towards more modern and sci-fi writers like \u003Ca href=\u0022http://en.wikipedia.org/wiki/Frank_herbert\u0022\u003EFrank Herbert\u003C/a\u003E and \u003Ca href=\u0022http://en.wikipedia.org/wiki/Clive_barker\u0022\u003EClive Barker\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EI spent many an hour playing computer games. Starting with my parents \u003Ca href=\u0022http://en.wikipedia.org/wiki/SX-64\u0022\u003ESX-64\u003C/a\u003E, My friend\u0027s \u003Ca href=\u0022http://en.wikipedia.org/wiki/Amiga\u0022\u003EAmiga\u003C/a\u003E, on to my own \u003Ca href=\u0022http://en.wikipedia.org/wiki/Nintendo_Entertainment_System\u0022\u003ENES\u003C/a\u003E (which literally died in a fire, frowny face), my friend\u0027s \u003Ca href=\u0022http://en.wikipedia.org/wiki/Sega_Genesis\u0022\u003EMega Drive\u003C/a\u003E, my own \u003Ca href=\u0022http://en.wikipedia.org/wiki/3DO_Interactive_Multiplayer\u0022\u003E3DO\u003C/a\u003E, my friend\u0027s \u003Ca href=\u0022http://en.wikipedia.org/wiki/Playstation\u0022\u003EPlaystation\u003C/a\u003E and so on.\u003C/p\u003E\n\u003Cp\u003EBy my mid-teens I was interested in music and with the assistance of a few friends, taught myself to play guitar and became a bass player in a local band which played around local clubs and bars for a couple of years.\u003C/p\u003E\n\u003Ch3 id=\u0022um-ok\u0022\u003EUm, OK?\u003C/h3\u003E\n\u003Cp\u003ESo what are the common themes I see through all these activities and what can I extract to perhaps be more generally applicable?\u003C/p\u003E\n\u003Cp\u003EHours and hours and hours spent on things that are largely if not entirely devoid of passive consumption\u003Ca id=\u0022fnref:3\u0022 href=\u0022#fn:3\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E3\u003C/sup\u003E\u003C/a\u003E. Each activity I\u0027ve listed involved some degree of effort, imagination and creativity. And most activities presented some not insignificant barriers to the novice, i.e. they were not all instantly gratifying.\u003C/p\u003E\n\u003Cp\u003EBut it strikes me that many of the activities I\u0027ve highlighted are not particularly unusual ones to find in the general population of children or adults with geeky tendencies, and yet within this population is still a lot of people who apparently have trouble focussing. There is one activity that I believe is probably less common, both amongst geeks and the wider population: meditation.\u003C/p\u003E\n\u003Cp\u003EI was considering writing up a little intro to meditation, but I was recently reminded that \u003Ca href=\u0022http://www.two-shay.com/articles/mindful-march\u0022\u003EXavier Shay has already done one\u003C/a\u003E and \u003Ca href=\u0022http://www.two-shay.com/articles/mindful-march-recap\u0022\u003Ea follow up\u003C/a\u003E. So perhaps I can just build on his writings a little.\u003C/p\u003E\n\u003Cp\u003EThe illustrated guide to meditation for newbies that Xavier links to looks like a good, straight forward starting point. But I\u0027d also like to talk about another technique that one could use along side what is discussed in the illustrated guide: using a \u003Ca href=\u0022http://en.wikipedia.org/wiki/Mantra\u0022\u003Emantra\u003C/a\u003E. Read the previous link if you want a good overview of the rich history of the mantra. But for the purposes of this post, I\u0027ll tell you very simply what it is: it\u0027s a way to keep my mind occupied while meditating. One of the goals of certain types of meditation is to promote a clear mind, neither projecting into the future nor remembering the past, but rather, existing in the present. To me this basically translates into thinking as little as possible. If you\u0027ve tried this, you might know that it\u0027s far more easily said than done. But repeating a mantra in the forefront of my mind and having this to focus on blocks out other thoughts and on the occasion that a stray thought does manage to float its way in from the periphery, renewing focus on the mantra helps to let that stray thought leave as it had come. In this way, repeating a mantra in my head could be thought of as a kind of mind-hack for minimising thought while meditating. Besides any spiritual or cultural significance a mantra may have, I believe that keeping the mind occupied is a large part of the practical benefit of a mantra and why the practice has stood the test of time. The word or phrase that makes up the mantra \u2013 again putting aside any spiritual or cultural significance that a particular mantra might hold for some people \u2013 I don\u0027t believe to be that important. One could pick the mantra \u0027purple monkey dishwasher\u0027 and I personally feel this could be just as valid as using the more traditional \u0027Aum\u0027 or \u0027Om mani padme hum\u0027 or what have you\u003Ca id=\u0022fnref:4\u0022 href=\u0022#fn:4\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E4\u003C/sup\u003E\u003C/a\u003E. Indeed, the Japanese monk \u003Ca href=\u0022http://en.wikipedia.org/wiki/K%C5%ABkai\u0022\u003EK\u016Bkai\u003C/a\u003E said that there is no essential difference between the syllables of mantras and sacred texts, and those of ordinary language. I think that dude was onto something.\u003C/p\u003E\n\u003Cp\u003EWhich is a nice segue to talk a little about monks. In support of the efficacy of meditation, Xavier points out some pretty interesting abilities that can be pulled off if one has been practicing meditation for long enough. I might add a rather more confronting example of the incredible control that meditation can bestow, the case of \u003Ca href=\u0022http://en.wikipedia.org/wiki/Thich_Quang_Duc#Self-immolation\u0022\u003ETh\u00EDch Qu\u1EA3ng \u0110\u1EE9c, the Vietnamese Buddhist monk\u003C/a\u003E. Regardless of whether one agrees with the choice that Th\u00EDch Qu\u1EA3ng \u0110\u1EE9c made, sitting quietly while you burn to death is an amazing feat\u003Ca id=\u0022fnref:5\u0022 href=\u0022#fn:5\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E5\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EIf you\u0027ve ever seen a \u003Ca href=\u0022http://www.google.com/search?q=shaolin\u002Bmonk\u002Bdemonstration\u0022\u003EShaolin demonstration\u003C/a\u003E, that\u0027s some pretty amazing stuff right there. And although they certainly train physically very hard, not everything they do would be possible without the mental training to match.\u003C/p\u003E\n\u003Cp\u003EThe point of mentioning these extremes being that they are evidence that meditation can produce tangible effects and I believe its effects are not only limited to assisting with self-immolation or becoming fluent in the use of those cool floppy swords.\u003C/p\u003E\n\u003Cp\u003EIf you\u0027re having trouble focussing, maybe you need to find new and interesting challenges, and/or not give up easily, and/or try some meditation.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EPainting with a size 000 brush takes a fair amount of practice, patience and focus, as you\u0027d know if you\u0027ve tried it. Not to say that I was ever that good at it when compared to \u003Ca href=\u0022http://en.wikipedia.org/wiki/Golden_Demon\u0022\u003Ethe masters\u003C/a\u003E.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003EOn a slight tangent, I have often felt that as adults we underestimate the intelligence of children considerably. I remember one day I was walking to the shops with my Godfather, I was probably around age 7 or 8. My Godfather asked me if I knew why the human nose is shaped so that the nostrils face downward. I confessed that no, I didn\u0027t. My Godfather smiled and said it was because otherwise the rain would get in. I remember slowly smiling and laughing with him. But I also remember that at the time I was secretly disappointed that he didn\u0027t impart some detailed and apocryphal evolution-based explanation that might more fully explain the shape of the human nose. To be fair to my Godfather, I\u0027m willing to entertain the possibility that part of the evolutionary purpose of the shape of our noses is to deter the rain from getting in.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:3\u0022\u003E\n\u003Cp\u003EWhich is not to say that I never engaged in any passive activities. I watched TV and movies, I love TV and movies. But my parents didn\u0027t actually have a TV in our house until I was around age 5.\u003Ca href=\u0022#fnref:3\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:4\u0022\u003E\n\u003Cp\u003EI do wonder what difference it might make to use a mantra from a language I am fluent in, the words of which my mind instantly assigns a meaning to, as opposed to a mantra in a language that I do not understand such as Sanskrit, the words of which are just sounds to me. Or at least sounds whose meanings \u2013 if I know them \u2013 tend to encompass rather sprawling philosophical concepts, as opposed to the more bounded meaning that jumps to mind when I hear the word \u0027purple\u0027, for example. Perhaps from this point of view, using a mantra in a language other than my native tongue might be better for promoting the state of mind I\u0027m aiming for.\u003Ca href=\u0022#fnref:4\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:5\u0022\u003E\n\u003Cp\u003ERather coincidentally to my writing of this post, the subject of self-immolation practiced by Tibetan monks/nuns has taken a more contemporary relevance with the \u003Ca href=\u0022http://www.guardian.co.uk/world/2011/nov/10/burning-martyrs-tibetan-monks-fire\u0022\u003Enews of 11 such incidents just this month\u003C/a\u003E. All such self-immolations being particularly curious occurrences because Buddhism \u2013 unlike the Abrahamic faiths \u2013 does not have a strong tradition of martyrdom.\u003Ca href=\u0022#fnref:5\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-11-23T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/11/23/focus-geekiness-and-meditation-a-parable",
      "summary": "I was recently reading a blog post entitled \u0027 How to work from home without going insane (purple monkey dishwasher) \u0027 by David Tate.",
      "tags": [
        "focus",
        "meditation",
        "philosophy"
      ],
      "title": "Focus, geekiness and meditation - a parable",
      "url": "https://binarybalance.com.au/2011/11/23/focus-geekiness-and-meditation-a-parable"
    },
    {
      "content_html": "\u003Cp\u003EThere\u0027s not a huge amount of Debian specific Ruby/Rails tutorials on the web. I\u0027ve written a few in the past and with the release of Debian Squeeze and the recent \u003Ca href=\u0022http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/40527\u0022\u003Eofficial release of Ruby 1.9.3\u003C/a\u003E I thought it might be time to do another one.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\u0022http://packages.debian.org/squeeze/ruby1.9.1\u0022\u003ERuby 1.9.2 is already available in the Debian Squeeze repositories\u003C/a\u003E, so if you\u0027re happy with just using what\u0027s already easily available you can of course just install the ruby1.9.1 (or \u003Ca href=\u0022http://packages.debian.org/squeeze/ruby1.9.1-full\u0022\u003Eruby1.9.1-full\u003C/a\u003E) package and be done with it. Somewhat confusingly these packages are named with the version number 1.9.1, but this is apparently to indicate compatibility. Installing either package will give you Ruby 1.9.2.\u003C/p\u003E\n\u003Ch3 id=\u0022ninja-compilation\u0022\u003ENinja compilation\u003C/h3\u003E\n\u003Cp\u003EHowever, I think there\u0027s a better way to run Ruby and manage gems than just installing one of the above mentioned packages. What I\u0027m going to detail in this post will not be an entirely traditional way of compiling Ruby. I\u0027m going to be outlining the way of setting up Ruby that I now prefer and that I think is generally considered a better practice option in the Ruby community. Today I\u0027ll be installing and setting up \u003Ca href=\u0022http://beginrescueend.com/\u0022\u003ERVM\u003C/a\u003E. From the previous link:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003ERVM is a command-line tool which allows you to easily install, manage, and work with multiple ruby environments from interpreters to sets of gems.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003ERVM allows you to run an arbitrary number of Ruby interpreters, be they different versions of MRI (\u003Ca href=\u0022http://en.wikipedia.org/wiki/Ruby_MRI\u0022\u003EMatz\u0027s Ruby Interpreter\u003C/a\u003E), or entirely different Ruby implementations, such as \u003Ca href=\u0022http://www.rubyenterpriseedition.com/\u0022\u003EREE\u003C/a\u003E or \u003Ca href=\u0022http://jruby.org/\u0022\u003EJRuby\u003C/a\u003E for example, each able to have an arbitrary number of \u0027gem sets\u0027 (which are exactly what they sound like) and you can easily switch between them all. It brings a whole new level of flexibility to using Ruby. \u003Ca href=\u0022http://www.youtube.com/watch?v=kIfOjkB17BA\u0022\u003ENice\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003ERVM does take a little getting used to, but for me the slightly extended learning curve has been well worth it.\u003C/p\u003E\n\u003Ch3 id=\u0022assumptions\u0022\u003EAssumptions\u003C/h3\u003E\n\u003Cp\u003EI will be starting with a stock Debian Squeeze install, I downloaded the \u003Ca href=\u0022http://cdimage.debian.org/debian-cd/6.0.3/amd64/bt-dvd/\u0022\u003Edebian-6.0.3-amd64-DVD-1.iso\u003C/a\u003E image and installed from this image.\u003C/p\u003E\n\u003Cp\u003EI\u0027ll be using aptitude for package management and \u0027sudo\u0027 with a non-root user account. Adjust your commands accordingly if you don\u0027t do things this way.\u003C/p\u003E\n\u003Cp\u003EI\u0027m going to list terminal commands, but I\u0027m not going to list irrelevant output, I\u0027m assuming a basic working knowledge of Debian or at least a Debian-derived Linux distro.\u003C/p\u003E\n\u003Ch4 id=\u0022note-on-rubygems\u0022\u003ENote on RubyGems\u003C/h4\u003E\n\u003Cp\u003EI won\u0027t be using the RubyGems Debian package. I personally prefer just to have RubyGems working in the more typical way. So I\u0027m fine with RubyGems coming along with Ruby 1.9.x.\u003C/p\u003E\n\u003Ch3 id=\u0022installing-the-system-ruby\u0022\u003EInstalling the system Ruby\u003C/h3\u003E\n\u003Cp\u003ESo let\u0027s pop open a terminal and get down to it.\u003C/p\u003E\n\u003Cp\u003EThe first thing to do before we get into any real RVM business is install what in RVM terminology is known as the \u0027system Ruby\u0027. It does\u0027t really matter what version of Ruby is installed as the system Ruby, so I\u0027m going to go with what\u0027s available from Squeeze\u0027s \u0027ruby\u0027 dependency package, which is Ruby 1.8.7 p302.\u003C/p\u003E\n\u003Cp\u003EInstall Ruby 1.8.7:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ sudo aptitude install ruby\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EEasy. I love the Debian package management system, although it doesn\u0027t always love me back.\u003C/p\u003E\n\u003Ch3 id=\u0022installing-rvm\u0022\u003EInstalling RVM\u003C/h3\u003E\n\u003Cp\u003EThere\u0027s two ways of installing RVM:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003ESingle-User installation\u003C/li\u003E\n\u003Cli\u003EMulti-User installation\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003ESingle-User installation is good for a development environment, RVM will be installed into your $HOME.\u003C/p\u003E\n\u003Cp\u003EMulti-User installation will install RVM in a system-wide capacity, which will (not surprisingly, considering the name) be better for a multi-user environment or perhaps a remote staging/production server set-up. The Multi-User install used to be quite a pain in the ass to get working, but nowadays it seems that much of the pain in the Multi-User install has been alleviated.\u003C/p\u003E\n\u003Cp\u003EI\u0027m going to go with a Single-User install for this post, but the procedure for a Multi-User install is not that different. If you\u0027re wanting Multi-User, then you\u0027re probably going to find the \u003Ca href=\u0022http://beginrescueend.com/rvm/install/\u0022\u003ERVM install guide\u003C/a\u003E useful.\u003C/p\u003E\n\u003Ch4 id=\u0022prerequisites\u0022\u003EPrerequisites\u003C/h4\u003E\n\u003Cp\u003EThere\u0027s a few prerequisites that RVM requires, so we\u0027ll now install any that Squeeze doesn\u0027t already have by default\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ sudo aptitude install curl git subversion\u003C/code\u003E\u003C/pre\u003E\n\u003Ch4 id=\u0022install-rvm-using-git\u0022\u003EInstall RVM using Git\u003C/h4\u003E\n\u003Cp\u003E\u003Ca href=\u0022http://git-scm.com/\u0022\u003EGit\u003C/a\u003E is my version control system of choice and I\u0027m reasonably familiar with it. However, whole books have been written on the massive beast that is Git and a full explanation is well outside the scope of this post. If you aren\u0027t a Git user then fear not, there\u0027s really not a whole lot one needs to do with Git in relation to using RVM.\u003C/p\u003E\n\u003Cp\u003EInstall \u003Ca href=\u0022https://github.com/wayneeseguin/rvm\u0022\u003ERVM from GitHub\u003C/a\u003E:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ bash \u0026lt; \u0026lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENote that I didn\u0027t use \u0027sudo\u0027 with the above command. What just happened was that RVM was installed into your $HOME, in a hidden directory called \u0027.rvm\u0027. But you don\u0027t have to take my word for it. List the .rvm directory:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ ls -la ~/ | grep .rvm\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E24\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E18\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E51\u003C/span\u003E .rvm\u003C/code\u003E\u003C/pre\u003E\n\u003Ch4 id=\u0022loading-rvm-into-your-terminal-session-as-a-function\u0022\u003ELoading RVM into your terminal session as a function\u003C/h4\u003E\n\u003Cp\u003EPreviously, you\u0027d have to add a line to your ~/.profile or your ~/.bash_profile file (whichever you\u0027re using) like so:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ echo \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026#39;[[ -s \u0026quot;$HOME/.rvm/scripts/rvm\u0026quot; ]] \u0026amp;\u0026amp; . \u0026quot;$HOME/.rvm/scripts/rvm\u0026quot; # Load RVM function\u0026#39;\u003C/span\u003E \u0026gt;\u0026gt; ~/.profile\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EBut RVM now adds the required line to your ~/.bashrc file automagically. So there\u0027s no need for the above command anymore. If you want to see the line that\u0027s been added to ~/.bashrc for you:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ cat ~/.bashrc | grep rvm\n[[ -s \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;$HOME/.rvm/scripts/rvm\u0026quot;\u003C/span\u003E ]] \u0026amp;\u0026amp; source \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;$HOME/.rvm/scripts/rvm\u0026quot;\u003C/span\u003E \u003Cspan class=\u0022bb-code-comment\u0022\u003E# Load RVM into a shell session *as a function*\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EIn any case, you should now close your current terminal session and open a new one so that ~/.bashrc gets reloaded, which should activate RVM.\u003C/p\u003E\n\u003Ch4 id=\u0022test-it-out\u0022\u003ETest it out\u003C/h4\u003E\n\u003Cp\u003ECheck if RVM has been loaded correctly:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ type rvm | head -\u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EIf all is well, this should output:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003Ervm is a \u003Cspan class=\u0022bb-code-keyword\u0022\u003Efunction\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EYou can now also run:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm requirements\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EWhich will show you a helpful dialog that lists the requirements that you may need, specific to Linux and relative to what Ruby implementation you\u0027re interested in. I\u0027d recommend having a quick read.\u003C/p\u003E\n\u003Cp\u003EIf you did read the output from the \u0027rvm requirements\u0027 command, you\u0027ll know that for MRI (i.e. Ruby 1.9.3), \u003Ca href=\u0022http://rubini.us/\u0022\u003ERubinius\u003C/a\u003E and REE, we\u0027ll also need to install a few more packages that don\u0027t come standard with Squeeze:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ sudo aptitude install build-essential libreadline6-dev git-core zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf automake libtool bison\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAnd that\u0027s it! You\u0027re now running RVM!\u003C/p\u003E\n\u003Ch3 id=\u0022um-neat-but-i-wanted-ruby-193\u0022\u003EUm... neat, but I wanted Ruby 1.9.3!\u003C/h3\u003E\n\u003Cp\u003EAnd I am a man of my word!\u003C/p\u003E\n\u003Cp\u003EOutput a list of all Rubies known to RVM:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm list known\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThis should output something like:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# MRI Rubies\u003C/span\u003E\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.8.6\u003C/span\u003E[-p420]\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.8.6\u003C/span\u003E-head\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.8.7\u003C/span\u003E[-p352]\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.8.7\u003C/span\u003E-head\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.1\u003C/span\u003E-p378\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.1\u003C/span\u003E[-p431]\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.1\u003C/span\u003E-head\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.2\u003C/span\u003E-p180\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.2\u003C/span\u003E[-p290]\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.2\u003C/span\u003E-head\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.3\u003C/span\u003E-preview1\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.3\u003C/span\u003E-rc1\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.3\u003C/span\u003E[-p0]\n[ruby-]\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.3\u003C/span\u003E-head\nruby-head\n\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# GoRuby\u003C/span\u003E\ngoruby\n\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# JRuby\u003C/span\u003E\njruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E2.0\u003C/span\u003E\njruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E3.1\u003C/span\u003E\njruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E4.0\u003C/span\u003E\njruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E6.1\u003C/span\u003E\njruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E6.2\u003C/span\u003E\njruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E6.3\u003C/span\u003E\njruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E6.4\u003C/span\u003E\njruby[-\u003Cspan class=\u0022bb-code-number\u0022\u003E1.6.5\u003C/span\u003E]\njruby-head\n\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Rubinius\u003C/span\u003E\nrbx-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E0.1\u003C/span\u003E\nrbx-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E1.1\u003C/span\u003E\nrbx-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E2.3\u003C/span\u003E\nrbx-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E2.4\u003C/span\u003E\nrbx[-head]\nrbx-2.\u003Cspan class=\u0022bb-code-number\u0022\u003E0.0\u003C/span\u003Epre\n\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Ruby Enterprise Edition\u003C/span\u003E\nree-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E8.6\u003C/span\u003E\nree[-\u003Cspan class=\u0022bb-code-number\u0022\u003E1.8.7\u003C/span\u003E][-\u003Cspan class=\u0022bb-code-number\u0022\u003E2011.03\u003C/span\u003E]\nree-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E8.6\u003C/span\u003E-head\nree-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E8.7\u003C/span\u003E-head\n\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Kiji\u003C/span\u003E\nkiji\n\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# MagLev\u003C/span\u003E\nmaglev[-\u003Cspan class=\u0022bb-code-number\u0022\u003E26852\u003C/span\u003E]\nmaglev-head\n\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Mac OS X Snow Leopard Only\u003C/span\u003E\nmacruby[-\u003Cspan class=\u0022bb-code-number\u0022\u003E0.10\u003C/span\u003E]\nmacruby-nightly\nmacruby-head\n\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# IronRuby -- Not implemented yet.\u003C/span\u003E\nironruby-0.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E\nironruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E0\u003C/span\u003E-rc2\nironruby-head\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAll these rubies can be yours! Let\u0027s install MRI 1.9.3:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm install \u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.3\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EOnce you\u0027re back at the command prompt, switch to using Ruby 1.9.3:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm use \u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.3\u003C/span\u003E\nUsing /home/gaelian/.rvm/gems/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p0\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENow verify that we\u0027re using 1.9.3:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ ruby -v\nruby \u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.3\u003C/span\u003Ep0 (\u003Cspan class=\u0022bb-code-number\u0022\u003E2011\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E10\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E30\u003C/span\u003E revision \u003Cspan class=\u0022bb-code-number\u0022\u003E33570\u003C/span\u003E) [x86_64-linux]\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESo what just happened? Well, when you told RVM to use Ruby 1.9.3, RVM did some magic behind the scenes and switched you over to using the Ruby 1.9.3 interpreter installed within the ~/.rvm directory. Let\u0027s look:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ which ruby\n/home/gaelian/.rvm/rubies/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p0/bin/ruby\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESo Ruby 1.9.3 has been installed to \u0027/home/gaelian/.rvm/rubies/ruby-1.9.3-p0/\u0027. Astute readers may have also noticed that the directory where gem sets can be found is \u0027/home/gaelian/.rvm/gems/ruby-1.9.3-p0\u0027. But more on gem sets later.\u003C/p\u003E\n\u003Cp\u003EIf you want to switch back to the system Ruby (remember the system Ruby was MRI 1.8.7 p302):\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm use system\nNow using system ruby.\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAnd...\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ ruby -v\nruby \u003Cspan class=\u0022bb-code-number\u0022\u003E1.8.7\u003C/span\u003E (\u003Cspan class=\u0022bb-code-number\u0022\u003E2010\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E08\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E16\u003C/span\u003E patchlevel \u003Cspan class=\u0022bb-code-number\u0022\u003E302\u003C/span\u003E) [x86_64-linux]\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENow let\u0027s install Rubinius 1.2.4:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm install rbx-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E2.4\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EWhen you\u0027re again back at the command prompt, we can switch to Rubinius 1.2.4:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm use rbx-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E2.4\u003C/span\u003E\nUsing /home/gaelian/.rvm/gems/rbx-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E2.4\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E20110705\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAnd verify:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ ruby -v\nrubinius \u003Cspan class=\u0022bb-code-number\u0022\u003E1.2.4\u003C/span\u003E (\u003Cspan class=\u0022bb-code-number\u0022\u003E1.8.7\u003C/span\u003E release \u003Cspan class=\u0022bb-code-number\u0022\u003E2011\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E07\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E05\u003C/span\u003E JI) [x86_64-unknown-linux-gnu]\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENerdgasm imminent.\u003C/p\u003E\n\u003Cp\u003EYou can also set the default Ruby for future shell sessions:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm use \u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.3\u003C/span\u003E --default\nUsing /home/gaelian/.rvm/gems/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p0\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENow all future shell sessions will use Ruby 1.9.3 supplied via RVM unless you say otherwise.\u003C/p\u003E\n\u003Ch3 id=\u0022gem-sets\u0022\u003EGem sets\u003C/h3\u003E\n\u003Cp\u003EThe other facet of the hotness that RVM provides is gem sets. When you install a Ruby interpreter, like when we installed Ruby 1.9.3 or Rubinius 1.2.4 just before, RVM also sets up discrete gem set directories for use with your different interpreters. View the gem set directories for Ruby 1.9.3 and Rubinius 1.2.4:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ ls -la ~/.rvm/gems\ntotal \u003Cspan class=\u0022bb-code-number\u0022\u003E28\u003C/span\u003E\ndrwxr-xr-x  \u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E08\u003C/span\u003E .\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E24\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E18\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E51\u003C/span\u003E ..\ndrwxr-xr-x  \u003Cspan class=\u0022bb-code-number\u0022\u003E2\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E18\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E54\u003C/span\u003E cache\ndrwxr-xr-x  \u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E07\u003C/span\u003E rbx-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E2.4\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E20110705\u003C/span\u003E\ndrwxr-xr-x  \u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E08\u003C/span\u003E rbx-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E2.4\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E20110705\u003C/span\u003E@global\ndrwxr-xr-x  \u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E18\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E55\u003C/span\u003E ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p0\ndrwxr-xr-x  \u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E18\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E55\u003C/span\u003E ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p0@global\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESo we\u0027ve got Ruby 1.9.3 and Rubinius 1.2.4 installed with each of these interpreters having an un-named gem set and a \u0027global\u0027 gem set. Right now, if you were to install any gems, they\u0027d go into the \u0027ruby-1.9.3-p0\u0027 gem set because Ruby 1.9.3 is the interpreter that you\u0027re currently using and we haven\u0027t told RVM to use any specific gem set.\u003C/p\u003E\n\u003Cp\u003ELet\u0027s switch to the global gem set:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm gemset use global\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENow let\u0027s install a few gems:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ gem install hpricot rack rake\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAnd let\u0027s now look in the \u0027~/.rvm/gems/ruby-1.9.3-p0@global/gems\u0027 directory:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ ls -la ~/.rvm/gems/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p0@global/gems\ntotal \u003Cspan class=\u0022bb-code-number\u0022\u003E24\u003C/span\u003E\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E6\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E17\u003C/span\u003E .\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E18\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E55\u003C/span\u003E ..\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E6\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E18\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E55\u003C/span\u003E bundler-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E0.21\u003C/span\u003E\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E6\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E16\u003C/span\u003E hpricot-0.\u003Cspan class=\u0022bb-code-number\u0022\u003E8.4\u003C/span\u003E\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E17\u003C/span\u003E rack-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E3.5\u003C/span\u003E\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E6\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E17\u003C/span\u003E rake-0.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2.2\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EHere we see the gems we just installed (bundler is a dependency). But what if we have a particular project that we want to install some gems for and we\u0027d like them to be separate from these other gems we just installed? We can create a new gem set for Ruby 1.9.3 called \u0027project0\u0027 (you can name your gem sets whatever you like, I\u0027m just using \u0027project0\u0027):\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm gemset create project0\n\u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026#39;project0\u0026#39;\u003C/span\u003E gemset created (/home/gaelian/.rvm/gems/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p0@project0).\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAnd let\u0027s switch to it:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm gemset use project0\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENow let\u0027s install another gem into this \u0027project0\u0027 gem set:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ gem install rubyzip\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ELet\u0027s take a look:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ ls -la ~/.rvm/gems/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p0@project0/gems\ntotal \u003Cspan class=\u0022bb-code-number\u0022\u003E12\u003C/span\u003E\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E3\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E .\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E6\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E ..\ndrwxr-xr-x \u003Cspan class=\u0022bb-code-number\u0022\u003E5\u003C/span\u003E gaelian gaelian \u003Cspan class=\u0022bb-code-number\u0022\u003E4096\u003C/span\u003E Oct \u003Cspan class=\u0022bb-code-number\u0022\u003E31\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E:\u003Cspan class=\u0022bb-code-number\u0022\u003E19\u003C/span\u003E rubyzip-0.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.4\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENow let\u0027s add one more gem set and switch to it:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm gemset create project1\n\u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026#39;project1\u0026#39;\u003C/span\u003E gemset created (/home/gaelian/.rvm/gems/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p0@project1).\n$ rvm gemset use project1\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAnd we\u0027ll install one more gem in the \u0027project1\u0027 gem set:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ gem install bcrypt-ruby\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESo far so good. To re-cap, we\u0027ve got three gem sets that we\u0027re interested in for Ruby 1.9.3:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003Eglobal - contains bundler, hpricot, rack and rake\u003C/li\u003E\n\u003Cli\u003Eproject0 - contains rubyzip\u003C/li\u003E\n\u003Cli\u003Eproject1 - contains bcrypt-ruby\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003ENow let\u0027s just take a look at what gems we currently have installed:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ gem list\n\n*** LOCAL GEMS ***\n\nbcrypt-ruby (\u003Cspan class=\u0022bb-code-number\u0022\u003E3.0.1\u003C/span\u003E)\nbundler (\u003Cspan class=\u0022bb-code-number\u0022\u003E1.0.21\u003C/span\u003E)\nhpricot (\u003Cspan class=\u0022bb-code-number\u0022\u003E0.8.4\u003C/span\u003E)\nrack (\u003Cspan class=\u0022bb-code-number\u0022\u003E1.3.5\u003C/span\u003E)\nrake (\u003Cspan class=\u0022bb-code-number\u0022\u003E0.9.2.2\u003C/span\u003E)\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EWhat black sorcery is this?! It would appear that we are seeing the gems from the global gem set \u003Cem\u003Eplus\u003C/em\u003E bcrypt-ruby from the project1 gem set that we\u0027re currently using. This is a feature, not a bug. The global gem set for each interpreter is special in that the gems stored within will be available \u003Cem\u003Ealong side\u003C/em\u003E those of your current chosen gem set.\u003C/p\u003E\n\u003Cp\u003ETo illustrate, let\u0027s switch to using the project0 gem set and list our gems:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm gemset use project0\n$ gem list\n\n*** LOCAL GEMS ***\n\nbundler (\u003Cspan class=\u0022bb-code-number\u0022\u003E1.0.21\u003C/span\u003E)\nhpricot (\u003Cspan class=\u0022bb-code-number\u0022\u003E0.8.4\u003C/span\u003E)\nrack (\u003Cspan class=\u0022bb-code-number\u0022\u003E1.3.5\u003C/span\u003E)\nrake (\u003Cspan class=\u0022bb-code-number\u0022\u003E0.9.2.2\u003C/span\u003E)\nrubyzip (\u003Cspan class=\u0022bb-code-number\u0022\u003E0.9.4\u003C/span\u003E)\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENow we can see that we\u0027re still showing all the gems from the global gem set, but rubyzip (from our current \u0027project0\u0027 gem set) has appeared and bcrypt-ruby (from our deselected \u0027project1\u0027 gem set) is gone.\u003C/p\u003E\n\u003Cp\u003EYou can also set the default gem set for use with a particular interpreter:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ rvm use \u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.3\u003C/span\u003E@global --default\nUsing /home/gaelian/.rvm/gems/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p0 with gemset global\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENow the global gem set will be used by default with the Ruby 1.9.3 interpreter, unless you say otherwise.\u003C/p\u003E\n\u003Cp\u003EObserve:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ gem list\n\n*** LOCAL GEMS ***\n\nbundler (\u003Cspan class=\u0022bb-code-number\u0022\u003E1.0.21\u003C/span\u003E)\nhpricot (\u003Cspan class=\u0022bb-code-number\u0022\u003E0.8.4\u003C/span\u003E)\nrack (\u003Cspan class=\u0022bb-code-number\u0022\u003E1.3.5\u003C/span\u003E)\nrake (\u003Cspan class=\u0022bb-code-number\u0022\u003E0.9.2.2\u003C/span\u003E)\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EBecause we\u0027ve got the global gem set selected (not \u0027project0\u0027 or \u0027project1\u0027) we\u0027re only seeing the gems installed to the global gem set.\u003C/p\u003E\n\u003Cp\u003EEver wanted to switch between different versions of Rails with relative ease? Using gem sets, now you can.\u003C/p\u003E\n\u003Ch4 id=\u0022making-things-more-explicit\u0022\u003EMaking things more explicit\u003C/h4\u003E\n\u003Cp\u003EOne of the problems that I sometimes have is remembering which Ruby interpreter I\u0027m currently using or more often, which gem set I\u0027m currently using with my chosen Ruby interpreter. One way to make things more explicit - should you wish - is to have the current Ruby interpreter and gem set shown at the command prompt.\u003C/p\u003E\n\u003Cp\u003EAdd the required line to your ~/.bashrc file:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ echo \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026#39;PS1=\u0026quot;\\$(~/.rvm/bin/rvm-prompt) $PS1\u0026quot; # Outputs RVM details at the command prompt\u0026#39;\u003C/span\u003E \u0026gt;\u0026gt; ~/.bashrc\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EClose down your terminal session and open a new one. You should now see that your command prompt looks something like:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003Eruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.3\u003C/span\u003E-p290@global gaelian@squeeze:~$\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EYour current Ruby interpreter and your current gem set are now showing at the prompt.\u003C/p\u003E\n\u003Ch4 id=\u0022conclusion\u0022\u003EConclusion\u003C/h4\u003E\n\u003Cp\u003EIn this post I\u0027ve highlighted some of the useful features of RVM. I remember when I first started using RVM, I wasn\u0027t really comfortable with it until I had really grokked where all the gem sets were being kept and the idea that I now potentially had more than one Ruby install, each with potentially more than one gem set. That I could now add and remove Ruby interpreters and gem sets at will and so easily was a new paradigm. I was so used to the Ruby interpreter being this relatively entrenched piece of software sitting under everything else I was doing and it wasn\u0027t super easy to upgrade or run in parallel with other Ruby versions/implementations. Similarly, gems were a bit of a pain to manage across different projects when all I had was a single gem directory.\u003C/p\u003E\n\u003Cp\u003EAll this has changed. Ruby development is now far more modular and flexible thanks to RVM.\u003C/p\u003E\n\u003Cp\u003EShould you wish for the full lowdown on RVM, the \u003Ca href=\u0022http://beginrescueend.com/\u0022\u003Eofficial RVM site\u003C/a\u003E should probably be your first port of call, they\u0027ve got some pretty good documentation over there, which I must credit for assisting me to write this post.\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EUPDATE:\u003C/strong\u003E Thanks to reader fabio who provided a correction (it\u0027s the \u0027subversion\u0027 package, not the \u0027svn\u0027 package) and created \u003Ca href=\u0022https://github.com/fabiop/ruby-1.9.3-on-debian-squeeze%5D\u0022\u003Ea quick install script based on this post\u003C/a\u003E.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EThe full list of dependences can be found on the RVM website, but for convenience they are: bash (\u0026gt;= 3.2), awk, sed, grep, which, ls, cp, tar, curl, gunzip, bunzip2, git (for updating RVM itself, and for installing \u0027-head\u0027 versions of rubies) and subversion (for installing \u0027-head\u0027 rubies)\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-10-31T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/10/31/compiling-ruby-1-9-3-on-debian-squeeze",
      "summary": "There\u0027s not a huge amount of Debian specific Ruby/Rails tutorials on the web. I\u0027ve written a few in the past and with the release of Debian Squeeze and the recent official release of Ruby 1.9.3 I thought it might be time to do another one.",
      "tags": [
        "ruby",
        "debian",
        "rvm"
      ],
      "title": "Compiling Ruby 1.9.3 on Debian Squeeze",
      "url": "https://binarybalance.com.au/2011/10/31/compiling-ruby-1-9-3-on-debian-squeeze"
    },
    {
      "content_html": "\u003Cp\u003EIn \u003Ca href=\u0022/2011/10/03/it-is-time-to-chrome-my-web-browsing\u0022\u003Emy previous post\u003C/a\u003E I wrote about how I have now made the switch - full time - to Chrome as my default web browser. I\u0027d just about managed to sort out all the extra functionality I needed from existing Chrome extensions, but there was one little Firefox Add-on that I found myself missing, it\u0027s called \u003Ca href=\u0022https://addons.mozilla.org/en-US/firefox/addon/backpack-pages/\u0022\u003EBackpack Pages\u003C/a\u003E written by \u003Ca href=\u0022http://www.millssoftware.com/\u0022\u003EBen Mills\u003C/a\u003E.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EBackpack pages is a nifty little Firefox Add-on that gives you a quick way to access pages stored within your \u003Ca href=\u0022http://backpackit.com/\u0022\u003EBackpack\u003C/a\u003E account as well as allowing for quick entry of reminders. I spoke to Ben some months ago and he told me that even though he too had made the move to Chrome, he had not gotten around to porting over his Backpack Pages Add-on to Chrome. I felt that this might be a fun little project, so I set about working on a new Chrome extension inspired by Ben\u0027s Backpack Pages.\u003C/p\u003E\n\u003Cp\u003EWell I\u0027m happy to say that there\u0027s now a Chrome Web Store app for that. The \u003Ca href=\u0022https://github.com/gaelian/backpack-pages-for-chrome\u0022\u003Ecode can be found on GitHub\u003C/a\u003E. But for easy installation, get Backpack pages for Chrome free from the \u003Ca href=\u0022https://chrome.google.com/webstore/detail/dkdoklackhilpgldnnilognhcmjlpkpk\u0022\u003EChrome Web Store\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EThere\u0027s still a little fine tuning to do but I\u0027m 99% happy with this extension and I\u0027ve been using it with my own Backpack account for some time now. I hope others find some utility in it as well.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-10-03T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/10/03/backpack-pages-for-chrome",
      "summary": "In my previous post I wrote about how I have now made the switch - full time - to Chrome as my default web browser. I\u0027d just about managed to sort out all the extra functionality I needed from existing Chrome extensions, but there was one little Firefox Add-on that I found myself missing, it\u0027s called Backpack Pages written by Ben Mills .",
      "tags": [
        "chrome-extensions",
        "chrome",
        "firefox",
        "open-source"
      ],
      "title": "Backpack pages for Chrome",
      "url": "https://binarybalance.com.au/2011/10/03/backpack-pages-for-chrome"
    },
    {
      "content_html": "\u003Cp\u003ELate last year, I wrote a post entitled \u003Ca href=\u0022/2010/12/01/is-it-time-to-chrome-my-web-browsing\u0022\u003E\u0027Is it time to chrome my web browsing?\u0027\u003C/a\u003E wherein I took a look at how \u003Ca href=\u0022http://www.google.com/chrome\u0022\u003EChrome\u003C/a\u003E stacked up in comparison to \u003Ca href=\u0022http://www.mozilla.org/firefox/\u0022\u003EFirefox\u003C/a\u003E, specifically in relation to the Firefox Add-ons that I used and could not do without. At that time, I decided that - for me - the day was not yet ripe for a move.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EFast forward to ten months later and the situation has changed. For the last four months or so, I\u0027ve been trialling Chrome as my default web browser for both day-to-day browsing and development. Enough time has passed now that I can say with some certainty that I won\u0027t be going back. And it seems that I am not alone as \u003Ca href=\u0022http://www.computerworld.com/s/article/9220396/Chrome_poised_to_take_No._2_browser_spot_from_Firefox\u0022\u003EChrome is set to overtake Firefox\u003C/a\u003E as the second most popular browser before the end of this year.\u003C/p\u003E\n\u003Cp\u003EI will always have a soft spot in my heart for Firefox, the browser that saved us from the complacent evil that is \u003Ca href=\u0022http://www.ie6countdown.com/\u0022\u003EInternet Explorer 6\u003C/a\u003E, but Chrome\u0027s marked improvement in speed, stability and general streamlined-ness over recent releases of Firefox are just too clear to ignore. When I open Firefox now, I\u0027m struck by how... ugly it looks. Cluttered and kind of crufty\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E. Certainly on OS X, Firefox doesn\u0027t support the clean Apple aesthetic as well as does the OS X implementation of Chrome, but something similar could also be said for these browsers on Windows 7. In any case though, I am a developer and beyond most aesthetic concerns are concerns of functionality. The below Chrome extensions are what I have ended up with in order to more or less (mostly more) emulate the functionality I used to have with Firefox:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003ESession Buddy\u003C/li\u003E\n\u003Cli\u003EWeb Developer (toobar)\u003C/li\u003E\n\u003Cli\u003EPinboard\u003C/li\u003E\n\u003Cli\u003E1Password Beta\u003C/li\u003E\n\u003Cli\u003EAdBlock\u003C/li\u003E\n\u003Cli\u003ECurrency Converter\u003C/li\u003E\n\u003Cli\u003EFirebug Lite for Google Chrome\u003C/li\u003E\n\u003Cli\u003EGoogle Reader Notifier\u003C/li\u003E\n\u003Cli\u003EGoogle Dictionary\u003C/li\u003E\n\u003Cli\u003ESmooth Gestures/Smooth Gestures: plugin\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003ELargely, it\u0027s the development aids that are most important to me. With the development work I\u0027ve done over the last few months, even though I\u0027ve got Firebug Lite for Google Chrome installed, I actually haven\u0027t had to use it. The built in Chrome Developer Tools have been enough for my needs. The only thing I miss a little is the ease with which one can disable JavaScript using the Firefox version of the Web Developer toolbar, but I gather as soon as this is possible with the Chrome extension API, it will be implemented. The 1Password Chrome extension (still in beta) is nicely designed, although it has the one small annoyance of not being able to auto-fill login details when presented with basic HTTP authentication, you have to manually type/paste the details in yourself. As opposed to the Firefox 1Password Add-on which automatically fills in login details for basic HTTP authentication. There\u0027s only one semi-regular occasion where I need to login through basic HTTP authentication though, so this is no deal breaker. There is one other small Firefox Add-on that I miss, but more about this in my next post.\u003C/p\u003E\n\u003Cp\u003EI really like the overall way that the Chrome extension API has been constructed. If you know how to build a web page with HTML/CSS/JS, then you already pretty much know how to build a Chrome extension, the barrier to entry is low for a web developer. The extension API also encourages a more unified and straight forward approach across both the user interface of Chrome and it\u0027s extensions that simply isn\u0027t possible with Firefox. Though I wonder if perhaps a little more suggested or enforced design convention from Google - for example when it comes to the options pages for Chrome extensions - might have been a good look. But on the other hand, maybe this wouldn\u0027t have been realistic, considering the large variations in functionality between different Chrome extensions.\u003C/p\u003E\n\u003Cp\u003EI still find Firefox\u0027s \u0027AwesomeBar\u0027 a little more useful than Chrome\u0027s \u0027OmniBar\u0027. The \u0027as you type\u0027 suggestions from the \u0027AwesomeBar\u0027 just seem a little more relevant. But this is not enough to outweigh the other advantages I get from Chrome. The \u0027Chrome Instant\u0027 feature seems like a good innovation\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E in the majority of use cases, but I tried it out and quickly disabled it again after finding it annoying when I was working on a local development site and having my browser prematurely load local pages that I didn\u0027t want to go to.\u003C/p\u003E\n\u003Cp\u003ESo bearing in mind that this post is from a guy who had used Firefox for many years and was really looking for any excuse not to make the switch, is it time to Chrome my web browsing? Yes, yes it is.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EThis is my (only slightly) customised install of Firefox I\u0027m talking about and I am of course aware that buttons can be removed from the user interface and so on. My point is more that my installation of Firefox never looked cluttered or crufty before I got used to Chrome and subsequently, neither do I feel like I\u0027ve lost any truly relevant functionality.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003E\u003Ca href=\u0022http://www.google.com/support/chrome/bin/answer.py?answer=180655\u0026amp;hl=en\u0022\u003EPrivacy issues\u003C/a\u003E notwithstanding. I personally don\u0027t have much of a problem with the possibility that partial search queries will be sent to the search engine I\u0027m using as well as my full search queries which they would be getting regardless.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-10-03T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/10/03/it-is-time-to-chrome-my-web-browsing",
      "summary": "Late last year, I wrote a post entitled \u0027Is it time to chrome my web browsing?\u0027 wherein I took a look at how Chrome stacked up in comparison to Firefox , specifically in relation to the Firefox Add-ons that I used and could not do without. At that time, I decided that - for me - the day was not yet ripe for a move.",
      "tags": [
        "google",
        "firefox",
        "chrome",
        "browsers",
        "javascript"
      ],
      "title": "It is time to Chrome my web browsing",
      "url": "https://binarybalance.com.au/2011/10/03/it-is-time-to-chrome-my-web-browsing"
    },
    {
      "content_html": "\u003Cp\u003EFor what amounts to a long time in the short history of the Internet, Google has been a synonym for large scale. I vaguely remember a quote from a Google employee who \u2013 when talking about their work and just how early they need to start thinking about scaling a system up \u2013 said something like \u0027One day you get something kind of working and the next day you have 5000 users\u0027\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E. There\u0027s not many places where a developer is forced to deal with scaling issues basically from the very beginning of a project. Google developers must scoff at warnings about \u003Ca href=\u0022http://c2.com/cgi/wiki?PrematureOptimization\u0022\u003Epremature optimisation\u003C/a\u003E.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EThe amount of data that Google stores for people and about people is impressive, mindboggling, constantly growing and more than a little scary. The launch of \u003Ca href=\u0022http://en.wikipedia.org/wiki/Google%2B\u0022\u003EGoogle\u002B\u003C/a\u003E adds a new dimension that depending on your perspective, could exponentially add to the scariness factor of the information Google is keeping on us.\u003C/p\u003E\n\u003Cp\u003EEvery now and again a \u003Ca href=\u0022http://consumerist.com/2011/07/google-deletes-last-7-years-of-users-digital-life-shrugs.html\u0022\u003Ehorror story\u003C/a\u003E will come along which deftly highlights the fact that \u0027customer service\u0027 and \u0027Google\u0027 appear to be mutually exclusive concepts, at least as far as the general public is concerned. Accounts disabled, important data or one\u0027s entire online identity lost, with no recourse. Certainly \u003Ca href=\u0022http://twitter.com/#!/search/%23firstworldproblems\u0022\u003E#FirstWorldProblems\u003C/a\u003E if ever I\u0027ve heard one, but none the less I don\u0027t think calling them horror stories is an exaggeration.\u003C/p\u003E\n\u003Cp\u003EI use a number of Google\u0027s services/products:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EGmail\u003C/li\u003E\n\u003Cli\u003EGoogle Chrome\u003C/li\u003E\n\u003Cli\u003EGoogle\u0027s search engine\u003C/li\u003E\n\u003Cli\u003EGoogle Reader\u003C/li\u003E\n\u003Cli\u003EGoogle Apps\u003C/li\u003E\n\u003Cli\u003EGoogle\u002B (I\u0027m on there but I haven\u0027t actually used it much)\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003EThis doesn\u0027t include services or products I might use very rarely or in passing, such as Google Code.\u003C/p\u003E\n\u003Cp\u003EGmail is probably the service I use from Google that would contain the most personal information. I have years worth of emails stored in Gmail right now (including old imported emails back from before I started using Gmail), all being indexed by Google, to determine which adverts the Gmail browser based interface should be showing me depending on what I\u0027m talking about in a particular email conversation. I\u0027m well aware of the privacy implications of using Gmail (or any cloud based utility for that matter), but it\u0027s also by far the best way I\u0027ve found to synchronise and have access to my email from multiple devices and from multiple geographic locations. Not to mention that my email is constantly backed up and that I also appreciate that Google allows \u003Ca href=\u0022http://en.wikipedia.org/wiki/IMAP\u0022\u003EIMAP\u003C/a\u003E access to Gmail which I make heavy use of\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E. So the faustian deal I have made with Gmail is an acceptable one to me.\u003C/p\u003E\n\u003Cp\u003EI was going to talk a little about how one can best protect and inform themselves while using such hosted services as Gmail, but this feels like old news to me and there\u0027s \u003Ca href=\u0022http://news.ycombinator.com/item?id=2794529\u0022\u003Eplenty of discussion about this sort of thing available already\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EWhat I find more interesting to talk about is in the title of this post: why do I like Google more than Facebook? Seriously, I\u0027ve asked myself this question a number of times in the past and don\u0027t think I\u0027ve ever come to a fully satisfactory answer.\u003C/p\u003E\n\u003Cp\u003EWhy do I regularly use about a half-dozen services/products from Google but my only regular interaction (if you can call it this) with Facebook involves deleting the emails they periodically send me telling me that I haven\u0027t been to Facebook recently and here, look what I\u0027m missing! There\u0027s been X updates from friends and Y photos posted and Z events publicised during my inexcusable absence. Would I ever import all my emails into Facebook? No I wouldn\u0027t.\u003C/p\u003E\n\u003Cp\u003EOn the face of it (no pun intended), Google and Facebook are pretty much in the same business: selling their users as a commodity.\u003C/p\u003E\n\u003Cp\u003EI\u0027ve mentioned a Google horror story above and there\u0027s \u003Ca href=\u0022http://www.jeffbullas.com/2011/05/03/suspended-from-faceboook-5-facebook-horror-stories/\u0022\u003Esimilar stories out there about Facebook\u003C/a\u003E so ostensibly not a lot of difference between them on the customer service front.\u003C/p\u003E\n\u003Cp\u003EGoogle is a publicly traded company while Facebook currently is not. Speaking in generalisations, this should tip the scales in favour of Facebook for me\u003Ca id=\u0022fnref:3\u0022 href=\u0022#fn:3\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E3\u003C/sup\u003E\u003C/a\u003E, but it doesn\u0027t.\u003C/p\u003E\n\u003Cp\u003EDo I like Google more than Facebook because the story of Larry and Sergey appeals more to me than the story of Mark Zuckerberg and Facebook\u0027s creation myth (adapted for the silver screen, no less)? Or have I just fallen prey to clever \u003Ca href=\u0022http://en.wikipedia.org/wiki/Public_relations\u0022\u003EPR\u003C/a\u003E? Do I like Google more than Facebook because even as a publicly traded company, they apparently still have the self awareness to adopt the unofficial motto \u003Ca href=\u0022http://en.wikipedia.org/wiki/Don%27t_be_evil\u0022\u003EDon\u0027t be evil\u003C/a\u003E or is this just more clever PR? I\u0027m sure there\u0027s some spin at work here, but as communication continues to evolve \u2013 currently gravitating to the more personal, direct, person-to-person style that we lost for a while there \u2013 it\u0027s harder for the more brazen PR spin to be applied as it once was. At the least, larger kernels of truth are needed to build spin on top of now, because lies are becoming easier to uncover.\u003C/p\u003E\n\u003Cp\u003EDo I like Google more than Facebook because as bad as Google\u0027s typical developer driven user interfaces can sometimes be, I still like them more than the eye-gougingly annoying user interface that is Facebook\u003Ca id=\u0022fnref:4\u0022 href=\u0022#fn:4\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E4\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EDo I like Google more because they\u0027ve just been around longer than Facebook and I\u0027m more used to the \u003Ca href=\u0022http://en.wikipedia.org/wiki/Google_logo\u0022\u003Eblue, red, yellow and green\u003C/a\u003E? I\u0027m pretty sure I thought that multi-coloured logo was rather stupid looking, circa 1999. But it has grown on me over the years.\u003C/p\u003E\n\u003Cp\u003EDo I like Google more because it\u0027s in their interest (i.e. it\u0027s inline with the underlying profit motive) that the web be encouraged to move forward, and in an open, interoperable way? Where as the same cannot always be said for companies like Facebook and Adobe, Microsoft and Apple. Ah ha! I think I\u0027ve struck something. The more people who use and love the web, the more people will click on Google\u0027s ads. The more open and interoperable everything is, the more content Google has to index and slap advertisements around when people search for it.\u003C/p\u003E\n\u003Cp\u003EAs evidenced by both their \u003Ca href=\u0022http://en.wikipedia.org/wiki/Google_chrome\u0022\u003Esuccesses\u003C/a\u003E and \u003Ca href=\u0022http://en.wikipedia.org/wiki/Google_wave\u0022\u003Efailures\u003C/a\u003E I can\u0027t really fault them on their commitment to advancing the web and encouraging open standards while doing so. In their case, it\u0027s a by-product of the one thing you can always count on a corporation to do: single-mindedly follow the money.\u003C/p\u003E\n\u003Cp\u003EHopefully without sounding too dramatic, I believe that encouraging the web to evolve in an open and interoperable way will continue to pay off into the future for humanity as a whole in ways we can\u0027t even imagine now. I assume that this synchronicity we find within Google between their main cash cow and encouraging the open evolution of the web was a fortunate accident, but I wonder what other of these types of synchronicities might be found or already have been found. Thereby finding more ways to enlist the nature of the corporation into the service of humanity, rather than humanity into the service of the corporation.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EIf anyone can remember who it is I\u0027m paraphrasing and where I can find the quote in context, I\u0027d love to know, because it\u0027s driving me crazy and I\u0027m 90% sure I\u0027m not just imagining things.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003EI appreciate this because I know \u2013 as does Google \u2013 that allowing me to use a local client (\u003Ca href=\u0022http://en.wikipedia.org/wiki/Mozilla_Thunderbird\u0022\u003EThunderbird\u003C/a\u003E) to connect to my Gmail account lets me effectively cheat Google out of showing me their Gmail adverts most of the time. I suspect the Gmail guys at Google had enough presence of mind to know that people who use IMAP to pull down a local copy of their email are probably not the kind of user that would be madly clicking on ads anyway. Plus I suppose there\u0027s something to be said for heading off \u003Ca href=\u0022http://en.wikipedia.org/wiki/Competition_law\u0022\u003Eantitrust\u003C/a\u003E issues and what not.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:3\u0022\u003E\n\u003Cp\u003EIf I need to expand on this point, let me know. I have a feeling this could be a blog post in its self. But not necessarily a very interesting one.\u003Ca href=\u0022#fnref:3\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:4\u0022\u003E\n\u003Cp\u003EMessaging a friend via Facebook some time ago, I was struck by how I needed to change a default setting so that Facebook would allow the Enter key to do what it is supposed to when you\u0027re typing into a text field. I quite like being able to create paragraphs when I write, but apparently I must be in the minority that hold this view on Facebok.\u003Ca href=\u0022#fnref:4\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-08-25T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/08/25/why-do-i-like-google-more-than-facebook",
      "summary": "For what amounts to a long time in the short history of the Internet, Google has been a synonym for large scale. I vaguely remember a quote from a Google employee who \u2013 when talking about their work and just how early they need to start thinking about scaling a system up \u2013 said something like \u0027One day you get something kind of working and the next day you have 5000 users\u0027[^1]. There\u0027s not many places where a developer is forced to deal with scaling issues basically from the very beginning of a project. Google developers must scoff at warnings about premature optimisation .",
      "tags": [
        "google",
        "facebook",
        "open-web"
      ],
      "title": "Why do I like Google more than Facebook?",
      "url": "https://binarybalance.com.au/2011/08/25/why-do-i-like-google-more-than-facebook"
    },
    {
      "content_html": "\u003Cp\u003EA couple of weeks ago, I read a post by Brandon Hays called \u0027\u201CWhy I still don\u0027t contribute to open source\u201D:http://brandonhays.com/blog/2011/05/03/why-i-still-dont-contribute-to-open-source/\u0027 wherein Brandon lays out his reasons for not yet having contributed to any \u003Ca href=\u0022http://en.wikipedia.org/wiki/Open-source_software\u0022\u003EOSS\u003C/a\u003E projects.\u0026lt;!--more--\u0026gt; To reiterate Brandon\u0027s points:\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003EThere\u0027s no certification, ceremony, or merit badge that says, \u0027you\u0027re ready to contribute to OSS\u0027.\u003C/li\u003E\n\u003Cli\u003EIt\u0027s not obvious where to start.\u003C/li\u003E\n\u003Cli\u003EGuidelines often make a maintainer\u0027s life easier, and mine harder.\u003C/li\u003E\n\u003Cli\u003EOpen source is for people who are better at this than me.\u003C/li\u003E\n\u003Cli\u003ETrying to contribute and failing makes me feel stupid.\u003C/li\u003E\n\u003Cli\u003EThere\u0027s no time.\u003C/li\u003E\n\u003Cli\u003EIt\u0027s pretty lonely.\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003EI found Brandon\u0027s article interesting because I can definitely relate to a lot of what he says.\u003C/p\u003E\n\u003Cp\u003EHow do I know I\u0027m ready to hack on an open source project? And if I\u0027m not ready but jump in anyway, won\u0027t I potentially just be broadcasting my stupidity across the Interwebs for all to see? How do I know where to start? The code base seems so intimidating and I know nothing about it. Are any hazing rituals involved? Those guys are \u003Cem\u003Eso much better\u003C/em\u003E at hacking code than I\u0027d be after ten lifetimes, how the fuck did they get so smart? Or am I just really retarded? I\u0027ve got my own stuff I want to work on. All these sentiments I\u0027ve felt at one time or another.\u003C/p\u003E\n\u003Cp\u003EBut recently, I\u0027ve started contributing to open source projects anyway.\u003C/p\u003E\n\u003Cp\u003EThe rest of this post is devoted to a couple of small case studies in my open source contributions and the lessons that I have drawn from them, hopefully for the benefit of those of us who may be interested in beginning to contribute to OSS.\u003C/p\u003E\n\u003Ch3 id=\u0022enki-and-html-5-etc\u0022\u003EEnki and HTML 5, etc.\u003C/h3\u003E\n\u003Cp\u003EA few months ago, I decided to start a blog. Being partial to a bit of Ruby and Rails, I went looking for a solution based on these technologies and finally came to rest on \u003Ca href=\u0022http://www.enkiblog.com/\u0022\u003EEnki\u003C/a\u003E by \u003Ca href=\u0022http://rhnh.net/\u0022\u003EXavier Shay\u003C/a\u003E. Xavier\u0027s design philosophy appealed to me, I liked the straight forwardness of Enki. I can also credit my experience with Enki as being probably the largest single factor that got me comfortable with \u003Ca href=\u0022http://git-scm.com/\u0022\u003EGit\u003C/a\u003E and \u003Ca href=\u0022https://github.com/\u0022\u003EGitHub\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EAs part of sorting out my own blogging needs using Enki as a base, I felt like experimenting with a couple of features:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EAn \u003Ca href=\u0022https://github.com/gaelian/enki/tree/honeypot\u0022\u003Eimplementation of the honeypot anti-spam technique\u003C/a\u003E which is so far working really well for me.\u003C/li\u003E\n\u003Cli\u003EA \u003Ca href=\u0022https://github.com/gaelian/enki/tree/truncate-home-page-posts\u0022\u003Esimple way to include a text marker in posts after which the post body is truncated\u003C/a\u003E for display on the home page (possibly familiar to users of \u003Ca href=\u0022http://wordpress.org/\u0022\u003EWordPress\u003C/a\u003E).\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003EParticipating on the Enki mailing list, I noted that Xavier mentioned he was looking for some help to convert Enki to \u003Ca href=\u0022http://en.wikipedia.org/wiki/HTML5\u0022\u003EHTML5\u003C/a\u003E. This sounded like something I could tackle, so I put my hand up for it and a little while later had \u003Ca href=\u0022https://github.com/xaviershay/enki/compare/aa3ff...51704\u0022\u003Esome changes ready for review\u003C/a\u003E. This work wasn\u0027t hard, but it was pretty extensive and also required that Xavier update some of the Enki feature/spec files to tidy things up.\u003C/p\u003E\n\u003Cp\u003EA few months later, feeling encouraged by the reception of my previous contributions, I took on an \u003Ca href=\u0022https://github.com/xaviershay/enki/issues/7\u0022\u003Eopen issue\u003C/a\u003E for Enki and submitted a \u003Ca href=\u0022https://github.com/xaviershay/enki/compare/75870...e65e1\u0022\u003Epatch to close it\u003C/a\u003E shortly after.\u003C/p\u003E\n\u003Cp\u003EContributing to Enki has been enjoyable. I don\u0027t think I could have found a better introduction to open source contribution than this small foot print blogging system if I had planned to find an OSS project to contribute to from the beginning. As it was, I really hadn\u0027t been aiming to contribute to any OSS project, I was just looking for a blogging platform.\u003C/p\u003E\n\u003Cp\u003EThanks to Xavier Shay for writing Enki in the way he has and for being receptive and open to contributions from n00bs. His focus on creating a blogging app for developers that relies strongly on version control and hacking code over predefined preference user interfaces and plugin systems is what encouraged me to contribute to this project almost without realising I was doing it at first.\u003C/p\u003E\n\u003Ch3 id=\u0022paypal_adaptive-and-ssl-certificate-verification\u0022\u003Epaypal_adaptive and SSL certificate verification\u003C/h3\u003E\n\u003Cp\u003EI\u0027m currently working on a pet project where I\u0027m using the \u003Ca href=\u0022https://www.x.com/community/ppx/adaptive_payments\u0022\u003EAdaptive Payments API\u003C/a\u003E from PayPal. My project is a Rails app so I had a look around to see if anyone has done any \u003Ca href=\u0022http://en.wikipedia.org/wiki/Ruby_%28programming_language%29\u0022\u003ERuby\u003C/a\u003E based work with Adaptive Payments that I could build on top of. I found a few options, but eventually settled on the \u003Ca href=\u0022https://github.com/tc/paypal_adaptive\u0022\u003Epaypal_adaptive gem\u003C/a\u003E by \u003Ca href=\u0022http://tommy.chheng.com\u0022\u003ETommy Chheng\u003C/a\u003E. Tommy describes it as a light wrapper for PayPal\u0027s Adaptive Payment API. I chose it because it appeared to be one of the newer Ruby API wrappers for Adaptive Payments so there was a good chance it was still being actively maintained/developed\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E. And being the light wrapper that it is, it didn\u0027t seem too hard to get my head around the code base.\u003C/p\u003E\n\u003Cp\u003ESo I installed the gem and went to work. But not too long into integrating paypal_adaptive into my project \u2013 while testing my first remote API call to PayPal \u2013 I was hit by this error:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code\u0022\u003E\u003Ccode class=\u0022\u0022\u003ESSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EA little googling revealed that this exception is caused by Net::HTTP (the component of the Ruby standard library that paypal_adaptive uses to make remote calls to PayPal) not being able to find a root certificate bundle with which to verify SSL certificates (Net::HTTP can also handle HTTPS calls and that\u0027s what paypal_addaptive was trying to do). But I could find no mention of this issue in relation to the use of paypal_adaptive. Why was I hit with this issue and not other users of Tommy\u0027s gem, I wondered. I believe the likely answer was because I am using Ruby 1.9.2 and \u003Ca href=\u0022http://en.wikipedia.org/wiki/Transport_Layer_Security\u0022\u003ETLS/SSL\u003C/a\u003E connections done through Net::HTTP in Ruby 1.9.x by default try to verify SSL certificates whereas Ruby 1.8.x by default does not. So anyone using paypal_adaptive with Ruby 1.8.x wouldn\u0027t have unknowingly run into this issue.\u003C/p\u003E\n\u003Cp\u003EThere\u0027s a fair bit of information online about how to get around the \u0027certificate verify failed\u0027 error. Some recommend \u003Ca href=\u0022http://www.ruby-forum.com/topic/176626#773356\u0022\u003Ejust telling Ruby not to verify SSL certificates\u003C/a\u003E by setting the \u0027verify_mode\u0027 attribute of your Net::HTTP object to \u0027OpenSSL::SSL::VERIFY_NONE\u0027. But there\u0027s good reason why Ruby 1.9.x changed the default behaviour. If you\u0027re not verifying the SSL certificate of the party that you\u0027re connecting to, then you\u0027re only getting part of the benefit of using TLS/SSL. You\u0027re still getting the encrypted data transfer but you\u0027re not verifying that the the party on the other end of that encrypted data transfer is who you think it is. So for me \u0027OpenSSL::SSL::VERIFY_NONE\u0027 really wasn\u0027t an option. A better solution is to let Ruby know where it can find a root certificate bundle. But how best to do this considering that the relevant code is inside the paypal_adaptive gem?\u003C/p\u003E\n\u003Cp\u003ETime for some open source contribution! But before anything else, I wanted to do some recon. I sent Tommy an email discussing this issue, asking what he thought might be the best way to tackle it and whether he\u0027d be interested in a patch from me. After a couple of emails back and forth we\u0027d agreed on a plan of attack and I told Tommy that he could expect a pull request from me on GitHub once I\u0027d got something worth looking at.\u003C/p\u003E\n\u003Cp\u003EI put aside my pet project for a little while and got to work on modifying paypal_adaptive to \u003Ca href=\u0022https://github.com/tc/paypal_adaptive/compare/c3b78...12cbb\u0022\u003Einclude SSL certificate verification\u003C/a\u003E. After my first pull request was accepted, I realised that I had managed to introduce a minor bug in the new SSL certificate verification functionality, and I later submitted \u003Ca href=\u0022https://github.com/tc/paypal_adaptive/compare/1a34c...f06ec\u0022\u003Eanother pull request to fix\u003C/a\u003E the issue. Broadcasting my stupidity across the Interwebs? Check.\u003C/p\u003E\n\u003Cp\u003EI am now back to my regularly scheduled programming on my own project with the new and improved SSL certificate verification support in paypal_adaptive. Thanks to Tommy Chheng for writing paypal_adaptive and for being a responsive maintainer.\u003C/p\u003E\n\u003Ch3 id=\u0022lessons-learnt\u0022\u003ELessons learnt\u003C/h3\u003E\n\u003Cp\u003ESo what can I draw from the above case studies?\u003C/p\u003E\n\u003Ch4 id=\u0022github-rocks\u0022\u003EGitHub rocks!\u003C/h4\u003E\n\u003Cp\u003EGitHub works pretty damn well for me. Once I\u0027d gotten a basic familiarity with Git it was only a small step further to get familiar with GitHub. After which, a lot of the uncertainty and potential friction around the practicalities of contributing to any open source project that makes use of Git and GitHub are all neatly removed. Just fork, clone, hack, push, send pull request.\u003C/p\u003E\n\u003Cp\u003EI sometimes get the feeling that some developers wonder what all the fuss is about. After all, people have been hacking code and contributing to open source long before GitHub and its ilk hit the scene. Github is certainly not a necessity, but I can only speak for myself when I say that GitHub has made a real difference in my ability to feel like I\u0027m able to contribute to open source. The guys behind it have done a great job and they deserve all their success\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003ESo the first lesson I might draw would be to find a community enabler like GitHub. If you prefer \u003Ca href=\u0022http://mercurial.selenic.com/\u0022\u003EMercurial\u003C/a\u003E there\u0027s \u003Ca href=\u0022https://bitbucket.org/\u0022\u003EBitBucket\u003C/a\u003E. The centralised nature of older version control systems like Subversion and CVS don\u0027t seem to lend themselves well to such decentralised development as one sees with Git or Mercurial but I gather there are ways to \u003Ca href=\u0022https://github.com/blog/626-announcing-svn-support\u0022\u003Ebridge older systems\u003C/a\u003E at least.\u003C/p\u003E\n\u003Ch4 id=\u0022you-will-make-mistakes\u0022\u003EYou will make mistakes\u003C/h4\u003E\n\u003Cp\u003EMany introverted people \u2013 counting myself as one \u2013 really don\u0027t like to look silly, especially not in public. We can be overly self conscious and engaging in activities that contain the promise of some degree of public humiliation does not usually sit well. It\u0027s very likely that you will make mistakes from time to time when contributing to open source projects and yes, those mistakes will be publicly visible. But it\u0027s pretty damn hard to learn anything without making any mistakes.\u003C/p\u003E\n\u003Cp\u003EI wish there was some secret weapon I could provide here to get deftly past this fear of failure and ridicule. I have none. I can only observe that as I have grown older and more confident within myself, my ability to be comfortable with risking failure in pursuit of my goals seems to have grown, maybe for some people it just takes some time. It certainly helps not to take myself too seriously, a sense of humour about my short comings has helped me when I can summon it. Something else that tends to put things into perspective for me in an inspiring way is an excerpt from one of Theodore Roosevelt\u0027s speeches that has come to be known as \u0027\u201CThe Man in the Arena\u201D:http://en.wikipedia.org/wiki/Citizenship_in_a_Republic\u0027:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EIt is not the critic who counts; not the man who points out how the strong man stumbles, or where the doer of deeds could have done them better. The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood; who strives valiantly; who errs, who comes short again and again, because there is no effort without error and shortcoming; but who does actually strive to do the deeds; who knows great enthusiasms, the great devotions; who spends himself in a worthy cause; who at the best knows in the end the triumph of high achievement, and who at the worst, if he fails, at least fails while daring greatly, so that his place shall never be with those cold and timid souls who neither know victory nor defeat.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Ch4 id=\u0022its-true-scratch-your-own-itch\u0022\u003EIt\u0027s true, scratch your own itch\u003C/h4\u003E\n\u003Cp\u003EI realise this isn\u0027t a new revelation, but all my open source contributions to date have been of the \u0027scratch your own itch\u0027 type. This really does seem like the most natural way to get into open source contribution. As I found with Enki, doing it this way I almost didn\u0027t notice the transition between using the app and contributing to it. If you can find a personal itch to scratch then my experience suggests that this is the easiest way to start.\u003C/p\u003E\n\u003Ch4 id=\u0022talk-to-the-maintainers-first\u0022\u003ETalk to the maintainer(s) first\u003C/h4\u003E\n\u003Cp\u003EI have so far always spoken to the project maintainer before contributing anything to their project. I\u0027m not sure how just shooting pull requests at people out of the blue works, but my guess is it doesn\u0027t work as well. The maintainer knows their project best and I\u0027ve found it\u0027s important to clearly understand what their perspective is up front. When contributing to paypal_adaptive, Tommy Chheng actually ended up suggesting what I thought was a much better approach to the SSL certificate verification issue than the one I originally brought to him and from there we built a little on each others ideas to reach the final patch.\u003C/p\u003E\n\u003Cp\u003EIn communicating with the maintainer I usually come from a few assumptions:\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003EThe maintainer is a smart person\u003C/li\u003E\n\u003Cli\u003EThe maintainer is a busy person\u003C/li\u003E\n\u003Cli\u003EThe maintainer is a person\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003EBased off these assumptions I then try to keep my messages brief, to the point and respectful.\u003C/p\u003E\n\u003Cp\u003EI sometimes see in myself a reluctance to contact certain developers, particularly those who have some degree of Internet celebrity about them. I assume this reluctance partially stems from the same kind of \u0027star struck\u0027 reaction that might be common in the off-line world when meeting or interacting with someone whose qualities you admire. But beyond this, the thought that these people must get a lot of mail and might just be sick of talking to strangers about their silly little issues can weigh on my mind also. What I have found is that if I just stick to the above assumptions then my interactions (even with celebrity developers, as minor as those interactions may be) tend to go pretty smoothly.\u003C/p\u003E\n\u003Cp\u003EThere\u0027s another reason why I like to contact maintainers first and it\u0027s kind of the same reason why I tend to contact online stores before placing an order with them. I want to scope them out and see how responsive they are and what their style of communication is. In the case of paypal_adaptive, had I never heard back from Tommy Chheng, I then would have known that the better option was probably just to fork his project and continue on my own (see GitHub rocks!).\u003C/p\u003E\n\u003Ch4 id=\u0022start-small-and-easy\u0022\u003EStart small and easy\u003C/h4\u003E\n\u003Cp\u003EI\u0027ve deliberately tried to start off making small and easy contributions. I\u0027ve also concentrated on contributing to projects that are based on technologies that I already have some familiarity with (Ruby, Rails). This way the organisation of the code base is not entirely foreign to me, I have an existing frame of reference.\u003C/p\u003E\n\u003Cp\u003EI don\u0027t have a lot of time and I do have my own stuff that I\u0027m working on, so small and occasional contributions are really all I can commit to for the foreseeable future. I\u0027m not apologising for this and I don\u0027t feel that anyone is asking me to.\u003C/p\u003E\n\u003Ch3 id=\u0022conclusion\u0022\u003EConclusion\u003C/h3\u003E\n\u003Cp\u003EI hope this helps someone to feel like they\u0027re ready to contribute to open source, even if it\u0027s in the small ways that I have now managed. In my niche of the IT industry (i.e. web development) there\u0027s so much great open source software out there that we all rely on day in, day out and it feels good to give a little something back.\u003C/p\u003E\n\u003Cp\u003EOSS can look like a shark tank to newbies, but if you take it slow and steady, I think most of the sharks can be avoided.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EAlso, being a Ruby programmer I\u0027m fascinated by anything new and shiny, while simultaneously heedless of any backwards compatibility issues my penchant may engender.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003EI feel some acknowledgement should also go to \u003Ca href=\u0022http://en.wikipedia.org/wiki/Linus_Torvalds\u0022\u003ELinus Torvalds\u003C/a\u003E for developing Git its self. But it\u0027s not like any of us will forget that guy\u0027s contributions regardless of what happens from here on out.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-05-25T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/05/25/how-i\u0027ve-started-to-contribute-to-open-source",
      "summary": "A couple of weeks ago, I read a post by Brandon Hays called \u0027\u201CWhy I still don\u0027t contribute to open source\u201D:http://brandonhays.com/blog/2011/05/03/why-i-still-dont-contribute-to-open-source/\u0027 wherein Brandon lays out his reasons for not yet having contributed to any OSS projects.",
      "tags": [
        "open-source",
        "ruby",
        "rails",
        "development",
        "gems"
      ],
      "title": "How I\u0027ve started to contribute to open source",
      "url": "https://binarybalance.com.au/2011/05/25/how-i\u0027ve-started-to-contribute-to-open-source"
    },
    {
      "content_html": "\u003Cp\u003ERead an interesting book recommended by a friend the other day: \u003Ca href=\u0022http://rushkoff.com/2010/03/25/program-or-be-programmed/\u0022\u003EProgram or Be Programmed: 10 Commands for a Digital Age\u003C/a\u003E by Douglas Rushkoff. The main thrust of Rushkoff\u0027s book is that all media, all forms of communication, starting at speech, moving on to the first examples of an alphabet, to the printing press and now to online communication have a bias and one needs to be aware of a medium\u0027s bias when communicating through it. Bias in this context meaning that each medium tends to elicit particular attitudes and behaviours from it\u0027s users.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EIf I can attempt to paraphrase, Rushkoff infers that this last communication revolution based upon the computer is a very important one, because now we\u0027re actually getting to the point where the tools we are creating are taking on the characteristics of living things. They\u0027re not quite living things yet though and at least until the hypothetical \u003Ca href=\u0022http://en.wikipedia.org/wiki/Technological_singularity\u0022\u003Esingularity\u003C/a\u003E manifests, the people who program these almost living tools will continue to take on an increasingly important role. Conversely, in the years to come those who do not at least have a basic idea of how programming is done will be at an acute disadvantage (politically, socially, financially, culturally) much like the illiterate following society\u0027s adoption of the written word.\u003C/p\u003E\n\u003Cp\u003ESomewhat tangential to the main point of the book were a couple of things that stood out to me personally:\u003C/p\u003E\n\u003Ch3 id=\u0022social-media-and-commercialisation\u0022\u003ESocial media and commercialisation\u003C/h3\u003E\n\u003Cp\u003ERushkoff devotes one chapter entitled \u0027Do Not Sell Your Friends\u0027 to discussing the social bias of digital media and the friction that this can cause when rubbed against commercial interests. I won\u0027t try to do the chapter justice here in this short post \u2013 buy the book if you want the full picture \u2013 but one passage that stood out to me specifically was:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EThe real way to \u201Cgo social,\u201D if [businesses] wanted to, would not be to accumulate more page friends or message followers, but rather to get their friends and followers to befriend and follow one another. That\u0027s how to create a culture in a peer-to-peer, networked medium. instead of looking to monetise or otherwise intercede between existing social connections, those promoting networks should be looking to foster connections between people who are as yet unknown to each other yet potentially in need of each other. And then let them go about their business \u2013 or their socializing.\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003ESometimes one reads something and for whatever reason, it resonates. The above passage has given me reason to re-evaluate some of my own ideas about what it means for an organisation to \u0027go social.\u0027 I suspect that the idea of not trying to \u0027monetise or otherwise intercede between existing social connections\u0027 doesn\u0027t even occur to many businesses attempting to foray into the social media wilderness. Could there be sufficient pay-off in developing a culture around a brand that helps to sustain it without needing to exploit the data of your users? I hope so. But regardless of what implications and utility this approach may have for the commercial sector, I have a strong feeling that the strategy Rushkoff describes would work well for public sector organisations whose missions are often more wide-ranging than the generation of profit alone.\u003C/p\u003E\n\u003Ch3 id=\u0022the-command-line-and-the-gui\u0022\u003EThe command-line and the GUI\u003C/h3\u003E\n\u003Cp\u003EIn discussing the development of the modern computer user interface, Rushkoff states:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003ESo the people investing in software and hardware development sought to discourage this hacker\u0027s bias by making interfaces more complex ... The easy command-line interface (where you just type a word telling the machine what you want it to do) was replaced with clicking and dragging and pointing and watching.\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EI smiled as I read this passage as I have been a long time advocate of the utility of the \u003Ca href=\u0022http://en.wikipedia.org/wiki/Command-line_interface\u0022\u003Ecommand line\u003C/a\u003E. Anyone who\u0027s comfortable with development or system administration tasks on Unix or Linux based systems usually is. However, as much as I am a fan of the command-line, I don\u0027t want to go back to a world where my entire interaction with my computer consists of typing into a command prompt. \u003Ca href=\u0022http://en.wikipedia.org/wiki/Photoshop\u0022\u003ESome applications\u003C/a\u003E just wouldn\u0027t be possible using the command-line paradigm. And while I\u0027m very comfortable traversing a Unix or Unix-like file system via the command-line, there certainly are times when it\u0027s convenient to be able to interact with my files via a \u003Ca href=\u0022http://en.wikipedia.org/wiki/Graphical_user_interface\u0022\u003EGUI\u003C/a\u003E. There may be some out there who scoff at my words as they read them via their \u003Ca href=\u0022http://en.wikipedia.org/wiki/Text-based_web_browser\u0022\u003Etext-based web browser\u003C/a\u003E and if so, I\u0027m OK with that. I guess I\u0027m just not \u003Cem\u003Ethat\u003C/em\u003E hardcore.\u003C/p\u003E\n\u003Cp\u003EBut what I do take issue with is this perception I detect from time to time that if you\u0027re using a command-line then you\u0027re doing it wrong. The command-line is the less evolved ancestor of the GUI, you see. A vestige of a time when only the \u003Ca href=\u0022http://www.urbandictionary.com/define.php?term=neckbeard\u0022\u003Eneckbeards\u003C/a\u003E used computers and now that \u0027normal people\u0027 need to use computers, it\u0027s just not practical anymore. This seems to me to be what Rushkoff is warning against, \u0027normal people\u0027 need to be able to better understand the inner workings of the tools that they\u0027re using if they are to use them in an informed way that allows them to best protect themselves. Being able to grok the command-line and having a powerful implementation of a command-line interface available would be a step in the right direction.\u003C/p\u003E\n\u003Cp\u003EThis topic reminds me of an article by Vivek Haldar on \u003Ca href=\u0022http://blog.vivekhaldar.com/post/3339907908/the-cognitive-style-of-unix\u0022\u003EThe Cognitive Style of Unix\u003C/a\u003E. Haldar cites the research of a cognitive psychologist, Dr. Christof van Nimwegen, who has studied in quite some depth the benefits of the command-line over the GUI. They appear to be substantial and not always obvious to the casual observer.\u003C/p\u003E\n\u003Cp\u003EThe command-line has its place and I\u0027ll go on record here and now to say that it always will, at least as long as humans can\u0027t effect complex interactions with our machines via thought alone and do away with physical interfaces entirely.\u003C/p\u003E\n\u003Ch3 id=\u0022conclusion\u0022\u003EConclusion\u003C/h3\u003E\n\u003Cp\u003EProgram or Be Programmed was a good, punchy read. As I am in fact rather ignorant of what I gather is a quite prolific amount of writing and speaking that has emanated from Rushkoff, I look forward to catching more in the future.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003E\u00A9 2010 Douglas Rushkoff. Brief passages reproduced here for review purposes.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-05-13T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/05/13/program-or-be-programmed",
      "summary": "Read an interesting book recommended by a friend the other day: Program or Be Programmed: 10 Commands for a Digital Age by Douglas Rushkoff. The main thrust of Rushkoff\u0027s book is that all media, all forms of communication, starting at speech, moving on to the first examples of an alphabet, to the printing press and now to online communication have a bias and one needs to be aware of a medium\u0027s bias when communicating through it. Bias in this context meaning that each medium tends to elicit particular attitudes and behaviours from it\u0027s users.",
      "tags": [
        "culture",
        "gov-2.0",
        "social-media",
        "linux",
        "unix",
        "user-interface"
      ],
      "title": "Program or Be Programmed",
      "url": "https://binarybalance.com.au/2011/05/13/program-or-be-programmed"
    },
    {
      "content_html": "\u003Cp\u003EIt seems that \u003Ca href=\u0022http://en.wikipedia.org/wiki/Social_media\u0022\u003Esocial media\u003C/a\u003E is everywhere today. Live tweet our show using the hash tag \u0027#WhyJustWatchWhenYouCanCriticise\u0027! There\u0027s other websites as well as Facebook? But how do do your friends know about your inane comments on those ones?! One could be forgiven for thinking the read/write web is getting old hat these days.\u0026lt;!--more--\u0026gt; \u003Ca href=\u0022http://en.wikipedia.org/wiki/Web_2.0\u0022\u003EWeb 2.0\u003C/a\u003E, how unfashionable an epithet for use by today\u0027s modern web hipster.The read/write web has long past the point of a fad and has been recognised for what it is: an evolutionary step in a still relatively young communication medium: the network of networks known as the Internet\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Ch3 id=\u0022engagement-marketing-and-commercial-enterprise\u0022\u003EEngagement marketing and commercial enterprise\u003C/h3\u003E\n\u003Cp\u003ESo what\u0027s commercial enterprise using the read/write web for? The same thing they use the read-only web and every communication medium before that for, of course: \u003Ca href=\u0022http://en.wikipedia.org/wiki/Engagement_marketing\u0022\u003Eselling stuff\u003C/a\u003E. If your company doesn\u0027t at least have a Twitter account or a Facebook fan page these days, you\u0027ve fallen behind the times, man. How else will your customers be able to get that warm fuzzy feeling that can only come from having new channels through which they can imagine they\u0027re cared about by Megacorp Multinational. Cynicism aside though, social media is affording commercial enterprises of all sizes new ways to interact with their customers. New ways to handle both good and bad publicity. New and unrivalled ways to turn their customers into brand advocates.\u003C/p\u003E\n\u003Cp\u003EIt seems to me that the culture change required within most commercial enterprises to take up and start making the most of social media should be quite slight. While some degree of process change and assignment of responsibility for new communication channels is no doubt necessary, social media appears very suited to the objective of selling stuff. The culture change comes in when one realises that social media is not just another newspaper, television, or radio, it really is a read/write, two-way medium. One way it can be used effectively means reading and writing through it, engaging with the audience.\u003C/p\u003E\n\u003Ch4 id=\u0022g-star\u0022\u003EG-Star\u003C/h4\u003E\n\u003Cp\u003EOne of my personal favourite clothing brands, \u003Ca href=\u0022http://www.g-star.com\u0022\u003EG-Star\u003C/a\u003E has a Facebook fan page with a respectable following. As far as I can tell from a few minutes of perusing comments on their Facebook page, it doesn\u0027t seem like there\u0027s a whole lot of follow-up audience engagement going on. They post an update and people comment on it, to the sound of silence until another update is posted. Interestingly I did see a tendency for third parties to get in on the action, e.g. G-Star posts an update about their new Spring/Summer collection and some men\u0027s wear store that carries G-Star amongst other brands, comments about a sale they\u0027re having. Parasitic/Symbiotic marketing, another advertising frontier to explore... probably only new to me because I don\u0027t hang out on Facebook fan pages that much.\u003C/p\u003E\n\u003Cp\u003EIt actually took me more than 30 seconds of searching to find the official \u003Ca href=\u0022http://twitter.com/#!/GstarRaw\u0022\u003EG-Star Twitter account\u003C/a\u003E. Not sure why there\u0027s no blatantly obvious link to it from the G-Star website. While it seems that Twitter is being used as more of a two-way medium than Facebook, it\u0027s not as easily accessible as it could be.\u003C/p\u003E\n\u003Cp\u003EI am a little surprised, I would have thought that a company that projects such an avant garde image would be fully on board with maximising audience engagement. Perhaps they feel it unnecessary, particularly with a product such as expensive fashion that tends to carry with it an innate allure. If I were to guess though, I\u0027d say they\u0027re using social media as a largely one-way channel because it\u0027s easy. It takes very little \u2013 if any \u2013 culture change within the organisation and there\u0027s minimal new resource implications.\u003C/p\u003E\n\u003Ch4 id=\u0022zappos\u0022\u003EZappos\u003C/h4\u003E\n\u003Cp\u003ETo illustrate an alternative approach, I found \u003Ca href=\u0022http://www.zappos.com/\u0022\u003EZappos\u003C/a\u003E. Zappos sells clothes and accessories, from multiple brands it appears. But they\u0027ve got engagement marketing in spades. They\u0027ve got a \u003Ca href=\u0022http://twitter.com/#!/zappos_service\u0022\u003E\u0027Customer Service Experience\u0027 happening on Twitter\u003C/a\u003E. Every tweet I currently see in their Twitter timeline is a reply to one of their customers. On the \u003Ca href=\u0022http://www.facebook.com/zappos\u0022\u003EZappos Facebook page\u003C/a\u003E they have a \u0027Fan of the Week\u0027, hundreds of photos and many direct replies to comments. These guys are comfortable with engagement marketing, the social media is strong in this one.\u003C/p\u003E\n\u003Cp\u003EWhile I don\u0027t really feel like I\u0027m completely comparing apples to apples here, perhaps a lesson to take away from G-Star and Zappos is that it\u0027s easier to start with a company culture that facilitates online audience engagement than it is to retro-fit one.\u003C/p\u003E\n\u003Ch3 id=\u0022engagement-marketing-and-government-enterprise\u0022\u003EEngagement marketing and government enterprise\u003C/h3\u003E\n\u003Cp\u003EIt\u0027s an immutable law of the universe that government will be slower on the uptake of the scary newness than the commercial world. But social media has been around long enough now that even governments are adapting. \u003Ca href=\u0022http://www.readwriteweb.com/archives/social_media_obama_mccain_comparison.php\u0022\u003EPoliticians use it to campaign\u003C/a\u003E, and \u003Ca href=\u0022http://www.theage.com.au/opinion/society-and-culture/middle-east-upheavals-a-model-of-21stcentury-revolutions-20110217-1ay3x.html\u0022\u003Ecitizens use it to organise\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EIn the Australian Government, social media has been a relatively hot topic since at least the release of \u003Ca href=\u0022http://gov2.net.au/report/\u0022\u003E\u003Cem\u003EEngage: Getting on with Government 2.0\u003C/em\u003E\u003C/a\u003E from the Australian Government\u0027s Government 2.0 Task Force in December 2009. If you want a relatively short overview of what they mean by \u0027Gov 2.0\u0027 I suggest reading \u003Ca href=\u0022http://www.finance.gov.au/publications/gov20taskforcereport/summary.htm\u0022\u003Ethe report\u0027s executive summary\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EGovernment agencies can have a wide range of objectives. Often it\u0027s going to be pushing their government\u0027s agenda, but within and also well away from this, it can involve a massive array of tasks and responsibilities: service provision, regulation, oversight, research and so on. The problem for the government enterprise is that their objectives usually can\u0027t quite be defined as simply as \u0027selling stuff\u0027 and that the culture change required for government agencies to effectively engage the online audience is massive. Since the release of the Gov 2.0 report and it\u0027s subsequent conditional endorsement by the Australian Government, there\u0027s been a marked upswing in the willingness of agencies to dip their toes into social media and online audience engagement. But as the above mentioned report highlights:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EGovernment 2.0 will not be easy for it directly challenges some aspects of established policy and practice within government. Yet the changes to culture, practice and policy we envisage will ultimately advance the traditions of modern democratic government. Hence, there is a requirement for coordinated leadership, policy and culture change.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003ECulture change in government is damn hard at the best of times and when it comes to topics that many people don\u0027t really understand and may not feel that enthused by, then it\u0027s going to be even harder. What\u0027s there to be enthused by? Well, I agree with the Government 2.0 Task Force that the culture change being facilitated by the read/write web has the potential to \u0027ultimately advance the traditions of modern democratic government\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E\u0027 and that\u0027s a worthwhile outcome.\u003C/p\u003E\n\u003Ch4 id=\u0022the-department-of-defence\u0022\u003EThe Department of Defence\u003C/h4\u003E\n\u003Cp\u003EDefence is a mammoth beast, one of Australia\u0027s largest employers (and once my employer by proxy, I was a contractor at Defence for a time). It\u0027s so big in fact that I don\u0027t think it\u0027s really fair in many ways to discuss it as a single entity. The sheer scope of the organisation gives rise to varied cultures and policies. As with most large bureaucracies, cultures and policies across the organisation can be at odds with each other, the classic \u0027left hand doesn\u0027t know what the right hand is doing\u0027 kind of thing. But Defence does have a very specific and singular mission and one that they are well funded to pursue. One problem Defence has that money can\u0027t always solve is recruitment. Last I heard, all three branches of our defence force were finding it difficult to keep recruitment up, with the Royal Australian Navy having the most difficulty. Considering the youth of a lot of people in the Australian Defence Force (ADF) and the fact that the target audience for new enlistments is of comparable age, I\u0027d guess that they have a greater incentive to be hopping on the social media bandwagon than many government agencies. Working against this is the fact that it\u0027s part of their job to be opaque and secretive and they will generally err on the side of caution.\u003C/p\u003E\n\u003Cp\u003EBut from the civilian department and all three of the services I see quite an effort to make use of social media channels for audience engagement. The ADF has literally legions of people who can assist with keeping their Facebook fan pages busy. The Australian Army has recently been organising a recurring \u0027Facebook Chat\u0027 for people who are thinking of joining the reserves and are looking to ask questions.\u003C/p\u003E\n\u003Ch4 id=\u0022counter-examples\u0022\u003ECounter examples?\u003C/h4\u003E\n\u003Cp\u003EMy original plan for this post was to find some counter examples of agencies that are somewhat under using social media for audience engagement in a similar way to what I attempted to do for the commercial enterprise portion of this post. But after a not insignificant amount of searching, I\u0027m having some trouble finding examples of Australian Government agencies that fall somewhere in between reasonably \u003Ca href=\u0022http://twitter.com/#!/DBCDEgov\u0022\u003Epro-active\u003C/a\u003E \u003Ca href=\u0022http://www.facebook.com/officialhankjongen\u0022\u003Eonline\u003C/a\u003E \u003Ca href=\u0022http://twitter.com/#!/HankJongen\u0022\u003Eaudience\u003C/a\u003E \u003Ca href=\u0022http://twitter.com/#!/ato_gov_au\u0022\u003Eengagement\u003C/a\u003E and completely ignoring social media all together. I know of only one example... but I might need to plead the fifth on that one (regardless of the fact that I\u0027m not American)! So much for the neat symmetry of this post.\u003C/p\u003E\n\u003Cp\u003ESuffice it to say that using social media as just another one-way \u0027push\u0027 channel belies a basic misunderstanding of both the technology its self and the expectations of the audience that makes use of that technology.\u003C/p\u003E\n\u003Cp\u003EThe questions I\u0027m working my way towards are: what\u0027s required for a government enterprise to successfully engage the online audience in an on-going, useful and honest way? And while I\u0027m at it, what are the stumbling blocks for a government organisation if they wish to start making use of social media inspired technologies to potentially improve internal communication too? Why are some doing it well and others badly or not at all?\u003C/p\u003E\n\u003Ch4 id=\u0022the-generation-gap\u0022\u003EThe generation gap\u003C/h4\u003E\n\u003Cp\u003ETo \u003Ca href=\u0022http://en.wikipedia.org/wiki/Generation_gap\u0022\u003Equote Wikipedia\u003C/a\u003E on the subject of the generation gap between a child and their parents:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EAlthough some generational differences have existed throughout history, because of more rapid cultural change during the modern era differences between the two generations increased in comparison to previous times, particularly with respect to such matters as musical tastes, fashion, culture and politics.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EI might add to this that the pace of technological change over the last few decades has been astoundingly rapid and this underlies a generation gap relating to preference for and understanding of new technologies generally, and most relevantly to this post: new communication technology.\u003C/p\u003E\n\u003Cp\u003EMany senior people in government enterprises are not young. More often than not they\u0027ll be 50\u002B years old and while the more progressive will be at least open to the idea of utilising new modes of communication, it doesn\u0027t often seem that when it comes to actual hands-on use of social media tools, the older generations are that into doing it themselves even if they\u0027re supportive of the technology. They might get a colleague or assistant to post the tweet or write the update on Facebook for example.\u003C/p\u003E\n\u003Cp\u003EWhen it comes to using social media style communication within an enterprise, some senior people may not truly want more open communication across their organisation. Knowledge is power and change can be scary at the best of times, even when it isn\u0027t perceived as threatening the mini-empire that Executive X has worked hard to carve out or to make it harder to uphold the image that Executive X may be trying to project. More open and honest communication is not a friend of political manoeuvring or any activity that requires some degree of deceit.\u003C/p\u003E\n\u003Cp\u003ESenior people tend to be busy and may not want to take the productivity hit that learning something new can initially impose. The user interfaces that \u2013 being a long time computer/web geek \u2013 I find entirely self explanatory are not always so to the older generations. If you\u0027ve ever watched a grandparent (or are a grandparent) using a computer, you probably have an idea what I\u0027m talking about. The older (and occasionally younger) generations may quite often just not see any improved utility in this social media hullabaloo. Where\u0027s the win? What am I gaining by exposing myself to all this distracting noise? What some may fail to realise is that social media is a eminently customisable communication channel, e.g. if you\u0027re not finding much utility in Twitter, then possibly you just haven\u0027t effectively curated the accounts that you follow to serve your interests. You don\u0027t have to follow 65,000 people on Twitter, unless that\u0027s part of your marketing strategy. More noise might also be a by-product of barriers to communication breaking down and with the potential for a lower signal to noise ratio also comes potential improvements in cross-organisation collaboration, job satisfaction and morale. Not to mention the benefits on the macro level discussed in the Gov 2.0 report.\u003C/p\u003E\n\u003Cp\u003EThe general consensus is that if the goal is to use social media inspired technology to improve internal and/or external communication within and/or without an enterprise, then one of the best things that the organisation can do is have its senior people personally lead the charge from the front. This is possible to achieve today, some enterprises have done it. But there is no doubt in my mind that when the generations who have truly grown up with the Internet eventually replace their elders at the highest levels of enterprise management, there will no longer be much \u2013 if any \u2013 greater need to discuss strategies for use of social media and online audience engagement in the enterprise than there is to discuss strategies for the use of email today. That we are not there yet, if an enterprise doesn\u0027t at least have a small core of people that have an intuitive understanding of web based technologies and social media, who can act as scouts and guides then I\u0027d say the outlook for harnessing social media in that enterprise is not good.\u003C/p\u003E\n\u003Ch4 id=\u0022audience-and-objective\u0022\u003EAudience and objective\u003C/h4\u003E\n\u003Cp\u003EGovernment organisations like \u003Ca href=\u0022http://www.dbcde.gov.au/\u0022\u003EDBCDE\u003C/a\u003E and \u003Ca href=\u0022http://agimo.govspace.gov.au/\u0022\u003EAGIMO\u003C/a\u003E carry with them an expectation that they should be across new technologies and new ways of communicating. Their audience, their stakeholders expect this and it means the culture change within these organisations \u2013 while still no picnic \u2013 is easier and appears to have more of a mandate than it might have in say the \u003Ca href=\u0022http://www.finance.gov.au/\u0022\u003EDepartment of Finance\u003C/a\u003E, or the \u003Ca href=\u0022http://www.environment.gov.au/\u0022\u003EDepartment of Sustainability, Environment, Water, Population and Communities\u003C/a\u003E (is that what they\u0027re called this week?) whose core business might have differing objectives or priorities. Not surprisingly, the government agencies directly providing service to the public seem to be getting on board with social media and online audience engagement at a faster pace than those agencies that are more deeply buried in the machinery of government.\u003C/p\u003E\n\u003Ch4 id=\u0022internal-processes-to-support-online-audience-engagement\u0022\u003EInternal processes to support online audience engagement\u003C/h4\u003E\n\u003Cp\u003EI have heard of some government agencies being very pro-active, organising a small group of senior people who meet each morning and decide on a small number of issues they wish to push out via social media that day and these same people then spend a small amount of their time actively pursuing online audience engagement around topics of interest, be they the prearranged ones or ad-hoc from their audience. I like this kind of model.\u003C/p\u003E\n\u003Cp\u003EThe main requirements I see for this sort of model to be viable are:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003Esupport and participation from senior management, the more senior the better\u003C/li\u003E\n\u003Cli\u003Ea clear understanding of what the organisation is trying to achieve\u003C/li\u003E\n\u003Cli\u003Ea clear understanding of the macro and micro benefits that social media can potentially deliver and hence a justification for new resource implications\u003C/li\u003E\n\u003Cli\u003Ea clear understanding of how the organisation is going to authorise comment via social media, while not destroying the immediacy of communication that is expected by the audience\u003C/li\u003E\n\u003Cli\u003Ewhen using social media to engage with external stakeholders, then avoiding mixed messages and hypocrisy means that the organisation also needs to allow staff some degree of access to the same communication channels, which in turn means that acceptable use policies\u003Ca id=\u0022fnref:3\u0022 href=\u0022#fn:3\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E3\u003C/sup\u003E\u003C/a\u003E need to be clearly defined and other implications (information security, greater bandwidth usage etc.) must be considered\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003E\u003Ca href=\u0022http://en.wikipedia.org/wiki/Information_wants_to_be_free\u0022\u003EInformation wants to be free\u003C/a\u003E even in the enterprise. Organisations can reposition and take advantage of new opportunities or they can be dragged kicking and screaming to the party. After doing the research for this post, I must say I\u0027m more optimistic than I was when it comes to the social media evolution within the enterprise than I was at the outset.\u003C/p\u003E\n\u003Cp\u003EI look forward to seeing what\u0027s next.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EOn the other hand, maybe all fads are actually evolutionary steps, sometimes dead-end and sometimes not.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003EWhich I primarily take to mean that the \u0027Gov 2.0\u0027 culture change has the potential to promote a more open and participatory democracy.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:3\u0022\u003E\n\u003Cp\u003EThe APSC \u003Ca href=\u0022http://www.apsc.gov.au/circulars/circular096.htm\u0022\u003ECircular 2009/6: Protocols for online media participation\u003C/a\u003E is a pretty sane place to start.\u003Ca href=\u0022#fnref:3\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-04-22T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/04/22/online-audience-engagement-and-the-enterprise",
      "summary": "It seems that social media is everywhere today. Live tweet our show using the hash tag \u0027#WhyJustWatchWhenYouCanCriticise\u0027! There\u0027s other websites as well as Facebook? But how do do your friends know about your inane comments on those ones?! One could be forgiven for thinking the read/write web is getting old hat these days.",
      "tags": [
        "culture",
        "facebook",
        "twitter",
        "bureaucracy",
        "gov-2.0",
        "social-media"
      ],
      "title": "Online audience engagement and the enterprise",
      "url": "https://binarybalance.com.au/2011/04/22/online-audience-engagement-and-the-enterprise"
    },
    {
      "content_html": "\u003Cp\u003EFollowing on from my \u003Ca href=\u0022/2011/02/11/getting-to-sleep\u0022\u003E\u0027Getting to sleep\u0027\u003C/a\u003E post, now part two of what apparently will be at least a two part series on sleep related topics.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EMy introduction to lucid dreaming came at an early age. When I was four or five, I used to have this recurring nightmare. I was in my childhood home, quite a large house built down the side of a slope, it had two stories, plus a lower basement/flat level that was probably about half the floor space of each of the two floors above. So I used to have this dream where I was being chased around the house by a \u003Ca href=\u0022http://en.wikipedia.org/wiki/Wampa\u0022\u003EWampa\u003C/a\u003E from The Empire Strikes Back\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E. There was a central wooden staircase that connected all three floors of the house and it was constructed in such a way that there was a fairly large space between each step (or so it seemed to my child sized sense of scale), the kind that can make one slightly wary of climbing if you\u0027re unfamiliar with it, something to do with the perspective of seeing through the steps as one climbs them. To this day, I still have a distinct memory of crouching silently on the staircase, a few steps from the top, looking down through the gaps and seeing this giant monster walking past on the level below, looking for me.\u003C/p\u003E\n\u003Cp\u003EI remember telling my mother about this dream and how it troubled me. She told me that I had the power to control my dreams. That I needed to face the Wampa and either make friends or destroy him.\u003C/p\u003E\n\u003Cp\u003EI don\u0027t remember how long it took me, but one night after being chased around the house for a while by my shaggy white tormentor, something just clicked. I realised I was in a dream. I stopped running. I turned from where I was \u2013 poised to run down the last flight of steps into the basement \u2013 and walked back up the three or four steps to stand and look up at the Wampa. He wasn\u0027t doing anything, just looking down at me, it almost seemed like he was confused, this obviously wasn\u0027t the way things were meant to go. I held out my hand and said something like \u0027Do you want to see my toys?\u0027 The Wampa apparently agreed, and took my hand in friendship. Next thing I do remember, I\u0027m down in the basement, all my toys \u2013 which were usually in a different area of the house \u2013 are arrayed around the basement and I\u0027m giving the guided tour.\u003C/p\u003E\n\u003Cp\u003EI never had that dream again after that night. I never again had a recurring nightmare and any nightmares are quite rare for me.\u003C/p\u003E\n\u003Cp\u003EDuring my teenage years, I started to experiment a little more actively with lucid dreaming. I started to use a radio by the side of my bed as a signal to my unconscious self, I would leave it on with the volume down low and fall asleep. I found that it was important to not need to wake at a certain time the next morning, I needed to be able to wake at an organically determined time, so I would try my experiments on evenings where this was possible. After a few experiments over a few weeks of leaving the radio on low as I fell asleep, it started to work. I would be in a dream and I would see and hear a radio, then I would remember I was in a dream. Success.\u003C/p\u003E\n\u003Cp\u003ELucid dreaming is pretty cool. Some of the more memorable things I did would include jumping off the top of a six story office building. I remember falling, looking down and seeing a small mountain of empty brown cardboard boxes that I fell through and then touched down on the ground as if I weighed almost nothing. I interpreted the boxes as being a way for my mind to construct a vaguely believable reason for my survival. I was able to consciously make myself fly a number of times, though it actually seemed more like swimming through air than what one might think of as flying. Again, I think it was my mind trying to create an experience I had not really had by compositing ones that I have. Once I woke myself up from a dream. I was having a bit of a boring time, decided I was going to wake up from this dream, so I lie down on the ground in the dream and I wake up, feeling alert and refreshed.\u003C/p\u003E\n\u003Cp\u003ENow years later, sadly, a little like \u003Ca href=\u0022http://en.wikipedia.org/wiki/Puff,_the_Magic_Dragon\u0022\u003EPuff the Magic Dragon\u003C/a\u003E in the old children\u0027s tale, my lucid dreaming has mostly faded away with adult life being the culprit. I don\u0027t have much opportunity to facilitate lucid dreaming. Work and other regimented commitments take too much time and focus. I need ample free space in my mind to get my lucid on.\u003C/p\u003E\n\u003Cp\u003EI have heard some say that lucid dreaming is really sort of irrelevant, valueless, uninteresting. It\u0027s just fantasy and what value do dreams really have? I don\u0027t agree. My experience with lucid dreams taught me at an early age that this is \u003Cem\u003Emy\u003C/em\u003E mind, I have control of it. I am the master and if I try and want it enough, I can do amazing things.\u003C/p\u003E\n\u003Cp\u003EI recommend it.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EWhat was I doing watching The Empire Strikes Back at no more than the age of four or five? Having an awesome time, that\u0027s what.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-02-25T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/02/25/lucid-dreaming",
      "summary": "Following on from my \u0027Getting to sleep\u0027 post, now part two of what apparently will be at least a two part series on sleep related topics.",
      "tags": [
        "sleep",
        "lucid-dreaming"
      ],
      "title": "Lucid dreaming",
      "url": "https://binarybalance.com.au/2011/02/25/lucid-dreaming"
    },
    {
      "content_html": "\u003Cp\u003ESometimes I can\u0027t get to sleep, or perhaps more accurately I can\u0027t get to sleep as quickly as I\u0027d like. I\u0027ll be thinking about some project I\u0027m working on or what I need to do the next day. It doesn\u0027t help that I\u0027m pretty sure I\u0027m more nocturnal by nature. I suspect that if the schedule of the world didn\u0027t impose on me, I\u0027d likely keep the circadian rhythm of a vampire.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EI\u0027ve heard of many possible approaches to victory over insomnia: nightcaps, reading, TV, exercise, etc. All of these options have \u2013 at different times \u2013 had some positive effect for me. Particularly helpful is simply making sure that I\u0027ve consciously relaxed my body from head to toe, I find that I often retain tension in my neck or shoulders without really realising it. But in this post, I want to talk about a more specific technique, perhaps a form of meditation, that\u0027s floated around in my head for a while now.\u003C/p\u003E\n\u003Ch3 id=\u0022video-not-audio\u0022\u003EVideo not audio\u003C/h3\u003E\n\u003Cp\u003ELooking back at how I fall asleep in hindsight, I often will note that as I approach the threshold, that unremembered tipping point where I assume I must slip into what is described as \u003Ca href=\u0022http://en.wikipedia.org/wiki/Non-rapid_eye_movement_sleep\u0022\u003EStage 1 non-REM\u003C/a\u003E sleep, I sometimes start to see images in my mind, known as \u003Ca href=\u0022http://en.wikipedia.org/wiki/Hypnagogic_hallucination\u0022\u003Ehypnagogic hallucinations\u003C/a\u003E. If you experience these as well, you may remember them as being the kind that can trigger a \u003Ca href=\u0022http://en.wikipedia.org/wiki/Hypnic_jerk\u0022\u003Ehypnic jerk\u003C/a\u003E, jolting you awake because for a second, your body thought you were falling or something. I have come to know these hypnagogic hallucinations as being a sign that I am close to sleep and assuming they do not trigger a hypnic jerk, they are usually the last thing I will remember before the dream state. I\u0027m probably fortunate in that I\u0027ve never experienced \u003Ca href=\u0022http://en.wikipedia.org/wiki/Sleep_paralysis\u0022\u003Esleep paralysis\u003C/a\u003E during the hypnagogic state.\u003C/p\u003E\n\u003Cp\u003EMy feeling is that these hypnagogic hallucinations are almost like a trigger that causes a shifting of gears in my brain towards sleep. The content of the visions are very much like dreaming, they can be mundane or nonsensical, often having some relation to the activities of the past day, usually they come in short bursts and are not accompanied by any sound, they\u0027re just visual. Sometimes they come in the form of simple shifting or moving geometric shapes and/or textured surfaces, along side curious sensations of close or distant proximity to what I\u0027m seeing, this sensation is hard to put into words.\u003C/p\u003E\n\u003Cp\u003EI like to think of these hallucinations as video, where as when I\u0027m thinking silently to myself or I\u0027m remembering a song, it\u0027s more like audio (even though there\u0027s not actually any physical sound, it\u0027s all in my head). My theory is that audio thinking hinders me getting to sleep, while video thinking helps me get to sleep. Thinking about that coding issue I\u0027m wrestling with is audio, or having an \u003Ca href=\u0022http://en.wikipedia.org/wiki/Ear_worm\u0022\u003Eearworm\u003C/a\u003E stuck in my head is audio. I have found that if I can be disciplined enough to think only in video, then it helps me to get to sleep faster than if I just let my mind free-wheel through all the audio thoughts that it wants to think about. I see it as a form of meditation in so far as the idea is to direct thought in a specific way. Sometimes I will intentionally try to visualise simple 3D shapes of different colours, but I find I am most successful at achieving sleep if I can let go to a certain extent and allow my mind to spontaneously generate the video. This is when the more description defying stuff starts to present its self.\u003C/p\u003E\n\u003Cp\u003EThis got me to thinking about the old adage of \u003Ca href=\u0022http://en.wikipedia.org/wiki/Counting_sheep\u0022\u003Ecounting sheep jumping over a fence\u003C/a\u003E. I think the adage might have it half right. Placing it into the framework of my theory, visualising sheep jumping over a fence is video thinking, but counting them is closer to audio thinking. This could be why the Oxford University experiment cited in the previous Wikipedia link concluded that:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E... counting sheep is actually an inferior means of inducing sleep. Subjects who instead imagined \u201Ca beach or a waterfall\u201D were forced to expend more mental energy, and fell asleep faster than those asked to simply count sheep. Sleep, by the same token, could be achieved by any number of complex activities that expend mental energy.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003ESo the Oxford study is concluding that more complex visualisation expends more mental energy than simpler visualisation, with mental exhaustion leading to sleep. Maybe my video thinking just expends more energy than my audio thinking? It doesn\u0027t feel this way to me. To me, it feels more like video thinking is somehow more in tune with or more conducive to the sleep state. If anything, audio thinking feels to me to be the more exhausting, but at the same time more promoting of a type of focus that does not agree with getting to sleep.\u003C/p\u003E\n\u003Cp\u003EIt\u0027s easy to make the assumption that everyone\u0027s brain works the same way yours does, but this is not the case. Some people apparently have little or no ability to visualise, some can visualise certain things and not others. Some people are \u003Ca href=\u0022http://en.wikipedia.org/wiki/Synesthesia\u0022\u003Esynesthetes\u003C/a\u003E of varying types and I can only marvel at how their inner world must function. But for me and I suspect anyone who has ever experienced hypnagogic hallucinations and their occasional companion the hypnic jerk, what I\u0027m talking about in this post may have some application.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-02-11T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/02/11/getting-to-sleep",
      "summary": "Sometimes I can\u0027t get to sleep, or perhaps more accurately I can\u0027t get to sleep as quickly as I\u0027d like. I\u0027ll be thinking about some project I\u0027m working on or what I need to do the next day. It doesn\u0027t help that I\u0027m pretty sure I\u0027m more nocturnal by nature. I suspect that if the schedule of the world didn\u0027t impose on me, I\u0027d likely keep the circadian rhythm of a vampire.",
      "tags": [
        "sleep",
        "meditation"
      ],
      "title": "Getting to sleep",
      "url": "https://binarybalance.com.au/2011/02/11/getting-to-sleep"
    },
    {
      "content_html": "\u003Cp\u003EOn more than one occasion, I\u0027ve heard people say that happiness is a choice. It\u0027s easy to dismiss this phrase as a platitude, to lose it amongst other phrases with a similar resonance like \u0027Whether you think you can or you think you can\u0027t, you\u0027re right\u0027, \u0027Life is what you make it\u0027 etc. But in this post, I\u0027m going to talk a little about what the phrase means to me.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003ESo what is happiness anyway? Better philosophers than I have spent more words than I plan to use in this post trying to figure out a generally applicable answer to this ostensibly simple question. I don\u0027t think I could do the question justice here were I to seriously try and give a comprehensive answer. But I will try and define what I think it is for me. I might start with what I think it\u0027s not.\u003C/p\u003E\n\u003Cp\u003EHappiness for me is not sitting on a beach somewhere sipping margaritas, though this can be fun for a while before it gets boring. Happiness for me is not tied to being in a relationship with a significant other and all the fun stuff that can come along with this, though I have found that being in a relationship, a minimum level of calm and shared understanding between the partners is vital for promoting an environment where happiness can find root. Happiness for me is not having all the problems in my life worked out and organised into neat little boxes thus providing me with the space and time to be happy. Happiness is not what I finally hit once I\u0027ve shovelled all the shit in my life to one side.\u003C/p\u003E\n\u003Cp\u003EThe best short definition of what happiness is to me - true happiness, sustainable happiness not this high sugar, low substance, candy-like happiness that many people seem addicted to\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E - would be giving back to those people and things that I care about, doing my work in a way that I can finish for the day and truthfully think to myself that I did the best I could. Happiness to me is working on things that interest me in a way that interests me, figuring stuff out and knowing that I stretched myself just a little bit out of my comfort zone.\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003ELife is filled with trials and tribulations, problems and usually a lesser number of solutions. I don\u0027t believe that anyone living or dead has or had it all figured out. If I need to wait for everything to be perfect in my life before I can consider myself happy, I\u0027ll be waiting a long time, my entire life in fact. Because my life is never going to be perfect, and I can tell you life looks extra far away from perfect if you have the perfectionist disease like I do.\u003C/p\u003E\n\u003Cp\u003EThere have been and always will be times when I could not be anything like happy. The death of people close to me being probably the most obvious example that springs to mind. Like they say, I don\u0027t think one ever really gets over death, you just sort of learn to live with it. Either that or you let it consume and utterly destroy you.\u003C/p\u003E\n\u003Cp\u003ESo what are you going to do? What\u0027s your choice? Are you going to have the unrealistic expectation that one day, your problems will all magically be sorted out and on that day, that one glorious day and forever more afterwards, you can be happy? Are you going to keep chasing the false, \u0027sugar-high\u0027 happiness that our society promotes at every opportunity? Or are you going to make the choice to be happy whenever you can, however you can, doing whatever it is you need or want to do?\u003C/p\u003E\n\u003Cp\u003EI will close with a quote that I first heard in an interview of Brandon Lee, son of Bruce Lee. The interview was held while Brandon was filming one of my favourite old movies, \u003Ca href=\u0022http://en.wikipedia.org/wiki/The_Crow_%28film%29\u0022\u003EThe Crow\u003C/a\u003E. The quote is apparently originally from \u003Ca href=\u0022http://en.wikipedia.org/wiki/Paul_Bowles\u0022\u003EPaul Bowles\u0027\u003C/a\u003E book \u003Ca href=\u0022http://en.wikipedia.org/wiki/The_Sheltering_Sky\u0022\u003EThe Sheltering Sky\u003C/a\u003E:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EBecause we don\u0027t know when we will die, we get to think of life as an inexhaustible well. And yet everything happens only a certain number of times, and a very small number really. How many more times will you remember a certain afternoon of your childhood, an afternoon that is so deeply a part of your being that you can\u0027t even conceive of your life without it? Perhaps four, or five times more? Perhaps not even that. How many more times will you watch the full moon rise? Perhaps twenty. And yet it all seems limitless...\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EBrandon died in an onset fire-arms accident before The Crow was finished and shortly after he gave the interview in which I heard him recite the above quote. He had planned to add the quote to the invitations for his upcoming wedding to his fianc\u00E9e, Eliza. The passage is now inscribed on his tombstone. I\u0027m not sure if all this is ironic or not, but it sure is sad.\u003C/p\u003E\n\u003Cp\u003EDo you have the time to be unhappy? I don\u0027t think I do.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EExamples of which might be that giddy hormonally enhanced love/lust feeling you get when you start seeing a new partner. Or that fleeting excitement you feel when you buy something new and awesome. Not to say that these feelings aren\u0027t great, but they will transform over time if you\u0027re lucky or simply won\u0027t last if you\u0027re not. They\u0027re like a fix of a drug that will leave you wanting for more and are most dangerous when you\u0027re not aware of their true nature.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003EI will give the caveat that I am in the fortunate position to be able to address issues that could be described as being closer to the top of \u003Ca href=\u0022http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs\u0022\u003EMaslow\u0027s hierarchy of needs\u003C/a\u003E than the bottom. For those people in dissimilar life circumstances to me (financially, socially, culturally, racially, etc.), I could entirely understand why their understanding and definition of happiness would likely differ from mine quite substantially. Obviously as did Maslow, I can only speak from my own point of view.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-01-20T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/01/20/happiness-is-a-choice",
      "summary": "On more than one occasion, I\u0027ve heard people say that happiness is a choice. It\u0027s easy to dismiss this phrase as a platitude, to lose it amongst other phrases with a similar resonance like \u0027Whether you think you can or you think you can\u0027t, you\u0027re right\u0027, \u0027Life is what you make it\u0027 etc. But in this post, I\u0027m going to talk a little about what the phrase means to me.",
      "tags": [
        "happiness",
        "philosophy"
      ],
      "title": "Happiness is a choice",
      "url": "https://binarybalance.com.au/2011/01/20/happiness-is-a-choice"
    },
    {
      "content_html": "\u003Cp\u003ETraditionally in the website building and maintenance sector of the IT industry, there have been two sub-specialisations: the web designer and the web developer\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003ETo define my terminology more clearly, I\u0027ll risk stating the obvious: web designers tended to have more of a graphic design background. These people might end up doing the \u0027front end\u0027 work on websites. They\u0027d do the colour scheme, set the font, maybe do the logo and icons if they were good enough. As websites started to share the space with or become web applications, designers started to take responsibility for the user interface (UI) aspects, although UI design almost seems to have become yet another sub-sub-specialisation of it\u0027s own. Web developers typically had more of a programming background and worked on the \u0027back end\u0027 of the website or web application. Server side and client side scripting, maybe some server and/or database administration.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003Ebut as the web has matured, the line between these two archetypes has continued to blur and it is this middle ground that I personally find myself standing on.\u003C/p\u003E\n\u003Cp\u003EWhen I first started on my current career path, I perhaps naively thought that I would become a web designer. I\u0027d create pretty pictures (i.e front end website designs) and get paid for it. Because I was an artist, you see. I had played bass guitar in a band (my beloved six-string Ibanez) and wasn\u0027t interested in all that coding stuff. At least that\u0027s what I used to tell myself. More truthfully there was probably some part of me that didn\u0027t think I was up to it or didn\u0027t think I was suited to that kind of work, because I am always curious about anything with an air of the arcane about it.\u003C/p\u003E\n\u003Cp\u003EI remember a past band mate of mine - a Mac fanatic - would sometimes say to me that he thought I had the manner and mind of a person who would do well with computers. I would scoff at this and tell him I barely knew the first thing about computers these days\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E. The last computer I\u0027d spent much time on was my parent\u0027s \u003Ca href=\u0022http://en.wikipedia.org/wiki/SX64\u0022\u003ESX64\u003C/a\u003E and my knowledge of this computer pretty much extended to memorising a few commands that would allow a prepubescent me to load the game I wanted to play\u003Ca id=\u0022fnref:3\u0022 href=\u0022#fn:3\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E3\u003C/sup\u003E\u003C/a\u003E. I had mostly migrated away from computers to gaming consoles.\u003C/p\u003E\n\u003Cp\u003EThat was until I stopped playing music semi-professionally, I recognised that I would like to start earning some money and decided that I might get back into these computers I once liked so much. I had been around computers in at least a peripheral way for most of my life, but it was not until my mid to late teens that I started really paying attention to them again and this \u0027Internet\u0027 thing. Better late to the party than never, I guess.\u003C/p\u003E\n\u003Cp\u003EI studied both in the traditional and autodidactic way over a couple of years. I went from a person who found computers and the Internet frustrating and alien to a person who started to think of them as friends\u003Ca id=\u0022fnref:4\u0022 href=\u0022#fn:4\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E4\u003C/sup\u003E\u003C/a\u003E. I remembered the Operator character class from an old \u003Ca href=\u0022http://en.wikipedia.org/wiki/Rifts\u0022\u003ERPG\u003C/a\u003E that I used to play and thought how awesome it would be to have their supernatural power that gave them the ability to instinctively understand machines and software. The supernatural affinity for machines sadly never eventuated, but it appeared that my band mate had been right, I did have an attention to detail, patience, and a drive to know how stuff worked (I \u003Cem\u003Ereally\u003C/em\u003E need to know how stuff works) that served me well in my studies and career to date. Perhaps this need to know was also why I began gravitating more and more towards Unix and Unix-like systems. The openness of these systems right down to their core and the straight forward simplicity of things like the command line interface and plain text configuration files just clicked for me\u003Ca id=\u0022fnref:5\u0022 href=\u0022#fn:5\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E5\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003ESo finally we come back to my first web related job. I still felt what I now realise was a largely artificial distinction that required I identify myself as what I saw an artist to be, and while by this time I had a good general knowledge of computers, networking, server administration, databases, HTML and a little scripting, I still had it in my head that I would concentrate on developing my pretty picture creating capabilities. It turned out though that what was needed was someone to understand and develop the back end, they had enough people to do the pretty pictures, everyone could draw pretty pictures it seemed. So I jumped in head first, still quite unprepared, but somehow I managed to get by. I\u0027d be happy if I never see another line of \u003Ca href=\u0022http://en.wikipedia.org/wiki/ColdFusion_Markup_Language\u0022\u003EColdFusion\u003C/a\u003E for as long as I live\u003Ca id=\u0022fnref:6\u0022 href=\u0022#fn:6\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E6\u003C/sup\u003E\u003C/a\u003E, but I got by and did pretty well if I do say so myself. Jumping in at the deep end, I became more comfortable with saying \u0027I don\u0027t know\u0027 and moving on from there, \u0027I don\u0027t know, but I will do my best to find out.\u0027 It\u0027s became clear to me that admitting you don\u0027t know (particularly in the knowledge based IT industry) appears to be a mortal fear for many. It holds us back, it\u0027s silly, and with the complexity we deal with, not knowing is inevitable. Learn to learn, people.\u003C/p\u003E\n\u003Cp\u003EWhat I also slowly started to see was that the wall between such artistic pursuits as music and such ostensibly non-artistic endeavours as writing code is more porous than I had originally thought\u003Ca id=\u0022fnref:7\u0022 href=\u0022#fn:7\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E7\u003C/sup\u003E\u003C/a\u003E. These days I\u0027m probably better at developing than designing, but for a long time now I\u0027ve thought of myself as a \u0027web devigner\u0027 i.e. part developer, part designer. Though if a random person asks me what I do, I\u0027m still more likely to give the short answer that I am a web developer, otherwise they\u0027d probably think I travel the Internet looking for water with a magic stick or something.\u003C/p\u003E\n\u003Cp\u003EIn the past I have felt a little bitter, it seemed to me that the specialists on either end of the developer/designer spectrum were getting all the interesting work while the generalists just didn\u0027t seem to truly fit in anywhere. I worried that I had made the wrong choices. I realise now that I just needed to continue to become a better generalist and find a way to turn my skill set further to my own advantage. There is great utility in being able to serve as a bridge between technical and non-technical people and I found that I\u0027m pretty good at this too, maybe because I\u0027ve been both. A recurring theme throughout my life has been that I find myself standing between worlds and I figure I may as well embrace this curiosity. Web devigners are particularly valuable for small teams where one cannot afford to have specialists for everything. And if you\u0027re thinking of doing anything entrepreneurial, I\u0027ve found it helps to have a more generalist skill set.\u003C/p\u003E\n\u003Cp\u003EI now feel that many in my industry are feeling drawn towards the centre of the spectrum, demand for the web devigner is picking up. This is a natural side-effect of where the web is heading. I will rue the day if the web I know becomes completely dominated by a handful of large sites where you just keep a semi-personalised page that your friends can comment on. But it none the less appears that programming is becoming more about putting existing pieces of code together with some modification than it is about writing everything from scratch yourself. I\u0027m sometimes a little saddened that this tends to mean that it\u0027s near impossible to completely grok the mountain of code that you\u0027re usually working on top of, but that\u0027s just my pathological need to know how everything works again. I don\u0027t believe that the rise of cloud computing and the mega-social networking sites will be the end of DIY websites and applications, as some people I have spoken to seem to think. One site will never fit all, at least not for the web geeks. But the Internet is not surprisingly continuing to evolve and our skill sets must evolve with it.\u003C/p\u003E\n\u003Cp\u003EThe more complex and commonplace web applications become, the more need there is for developers and designers to work closely together and understand at least a little of what the other is doing. Better yet, they could do a little of both themselves and be less afraid to say \u0027I don\u0027t know but I will do my best to find out.\u0027\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EIf one was to reduce things down to a simplified binary sort of representation of what has probably always been a more analogue-like spectrum. But I\u0027ll get to this. I also haven\u0027t forgotten about the information architects, full time database admins and whatever else, but I have to draw the line somewhere or I\u0027ll be here all night, OK?\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003EWhere \u0027these days\u0027 was somewhere around 1995 when you were lucky to have a dial-up connection that didn\u0027t drop out every 15 minutes, the \u003Ca href=\u0022http://en.wikipedia.org/wiki/Bsod\u0022\u003EBSOD\u003C/a\u003E was a feature and you could still be expected to sort out your own IRQ settings for the new sound card you\u0027d just installed, or in my case, just broke because I had no idea what I was doing.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:3\u0022\u003E\n\u003Cp\u003ELOAD \u0026quot;*\u0026quot; ,8,1 for the win!\u003Ca href=\u0022#fnref:3\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:4\u0022\u003E\n\u003Cp\u003EI still remember the early days though, when I was afraid that hitting the wrong key would cause the computer to arc small blue bolts of lighting in all directions and explode, leaving only a black scorch mark on the desk. To be fair, I\u0027m pretty sure computers were much less idiot proof back then, but those of us who might classify ourselves as experts or power users would do well to remember more often how it felt when we were the n00bs.\u003Ca href=\u0022#fnref:4\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:5\u0022\u003E\n\u003Cp\u003EThough ironically perhaps, in most of the working environments I\u0027ve so far frequented, this seems to have made me something of a freak anomaly to the majority who seem to prefer the \u0027forest of dialog boxes\u0027 school of server administration (don\u0027t get me wrong, I\u0027m comfortable with Windows servers, I just prefer something else). Let it not be said that I don\u0027t \u0027go my own way\u0027 as Fleetwood Mac sung some years before my birth.\u003Ca href=\u0022#fnref:5\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:6\u0022\u003E\n\u003Cp\u003EA dynamic scripting language masquerading as a mark-up language? Really? People like me were this language\u0027s primary target market and I still thought it was bizarre.\u003Ca href=\u0022#fnref:6\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:7\u0022\u003E\n\u003Cp\u003EA related anecdotal observation I\u0027ve made is that an unusually large number of programmers are also musicians of one type or another.\u003Ca href=\u0022#fnref:7\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2011-01-07T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2011/01/07/the-designer-the-developer-and-the-devigner",
      "summary": "Traditionally in the website building and maintenance sector of the IT industry, there have been two sub-specialisations: the web designer and the web developer[^1].",
      "tags": [
        "culture",
        "design",
        "development",
        "music"
      ],
      "title": "The designer, the developer and the devigner",
      "url": "https://binarybalance.com.au/2011/01/07/the-designer-the-developer-and-the-devigner"
    },
    {
      "content_html": "\u003Cp\u003EI watched the video of \u003Ca href=\u0022http://37signals.com/svn/posts/2679-my-keynote-from-rubyconf-about-why-i-continue\u0022\u003EDavid Heinemeier Hansson\u0027s keynote address from RubyCon 2010\u003C/a\u003E the other day. It was unapologetically pro-Ruby, and delivered with the flair and showmanship that has made DHH and 37Signals the polarising force that they are. Being quite fond of Ruby, I found myself nodding along to most of what David had to say. But I don\u0027t wish to add even a small amount of new fuel to the programming language wars that seem to go on endlessly around the place. The purpose of this post is not to join in on any Ruby circle-jerking.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EOne of the things that particularly stood out to me in DHH\u0027s keynote was a quote from \u003Ca href=\u0022http://en.wikipedia.org/wiki/Larry_Wall\u0022\u003ELarry Wall\u003C/a\u003E, creator of the Perl programming language:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EThe very fact that it\u0027s possible to write messy programs in Perl is also what makes it possible to write programs that are cleaner in Perl than they could ever be in a language that attempts to enforce cleanliness. The potential for greater good goes right along with the potential for greater evil.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EThe potential for greater good goes right along with the potential for greater evil. This is a great quote and it rings very true for me. Along with some other parts of David\u0027s address, it got me to thinking about how the uniformity that we enforce in other aspects of life in order to minimise the potential for evil may also be minimising the potential for good. One such aspect of life that came to mind was the workplace. I have what I sometimes feel is a greater familiarity with the ways of the Australian Public Service that I would like. As with most government bureaucracies, the APS has more than its fair share of policies and guidelines. The APS also has more than its fair share of staff who almost seem to take an unreasonable amount of comfort in following \u2013 to the letter \u2013 every policy and guideline, regardless of whether reality may be indicating that the outcome may be better if just a little personal judgement was employed\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E. This kind of thing is not just confined to the public sector, I would imagine that similar shenanigans go on at almost any organisation once it becomes large enough and its hiring practices devolve sufficiently.\u003C/p\u003E\n\u003Cp\u003EThere seems to come a time when an organisation decides that it can no longer really trust its staff, there\u0027s too many of them, maybe they\u0027re too geographically disbursed. The usual solution seems to be to start making rules, lots of rules that govern each and every aspect of work. I could think of a few examples, but individually they wouldn\u0027t really convey the feeling I\u0027m trying to get across. It\u0027s that feeling that every extra little rule added to the top of the pile combines to become more than the sum of the parts and creates a work environment that no longer fosters innovation, passion, enjoyment. In their place are apathy, disinterest and buck-passing.\u003C/p\u003E\n\u003Cp\u003ESome time ago, I was at a job interview and the moment came around for an obligatory workplace diversity/occupational health and safety/industrial democracy question. The question was something like: \u201CHow do you foster productive working relationships with colleagues?\u201D\u003C/p\u003E\n\u003Cp\u003EI spoke about how I\u0027m a very unassuming and easy person to get along with, how I listen when people speak, how developing working relationships isn\u0027t just about talking shop it\u0027s also about discovering shared interests that may lie outside of what\u0027s directly work related, how my family is quite ethnically diverse and therefore ethnic diversity in the workplace is a normal situation for me, how doing favours for people not surprisingly makes them more willing to do favours for you, how you just need to treat people as people. There was a pause, and one of the interviewers then said: \u201CYes... But is there anything else?\u201D\u003C/p\u003E\n\u003Cp\u003EI thought quickly, and then remembering the nature of this organisation, I said something like: \u201CI also ensure that I\u0027m adhering to all relevant workplace harassment and diversity, occupational health and safety and industrial democracy policies.\u201D This seemed to contain the necessary keywords and resulted in much head nodding and notebook scribbling.\u003C/p\u003E\n\u003Cp\u003EToo many rules will at best cut off both ends of the bell curve and leave only the average workers at all gruntled with the situation. while the racist guy who got filtered out by the HR policies may be gone, odds are the clued up guy with the unconventional and original ideas also left because he\u0027s sick of having to wade waist-deep through red tape to get anything done. Start treating your workers like they can\u0027t think for themselves, and eventually that\u0027s how they\u0027ll become.\u003C/p\u003E\n\u003Cp\u003EHaving said all this, I\u0027m not deranged enough to think that organisations, especially large ones can get by on anarchy. As with all things, there\u0027s a balance to be found. I just think too much of the time this balance is eschewed in favour of slow death by policy.\u003C/p\u003E\n\u003Cp\u003EWhat\u0027s the solution? I honestly don\u0027t know. My hunch is that keeping the hierarchy as flat and open as possible might help (something like the Google model, perhaps). Trying to combat the silo mentality that can so easily befall large organisations would also help I think, doing things that encourage cross-team and cross-branch communication. A positive organisational culture is generated by people talking to one another each day, not by a boring rulebook nobody wants to read that\u0027s been handed down from on high. It would surely help to ensure that hiring practices do not devolve to the point where clueless HR staff are happy to put anyone on the books as long as they tick all the right boxes (tertiary education \u002B regurgitated the required keywords at interview? Tick, you\u0027re in).\u003C/p\u003E\n\u003Cp\u003EI guess the other option is to stay small and agile. I like the sound of this option the best.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EI always think of an old quote that I believe was from Yes Minister or Yes, Prime Minister that went something like: \u201CBut I am a public servant, and therefore forbidden to use my own judgement in any way.\u201D\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-12-12T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/12/12/policy-is-for-when-you-don-t-trust-your-staff-anymore",
      "summary": "I watched the video of David Heinemeier Hansson\u0027s keynote address from RubyCon 2010 the other day. It was unapologetically pro-Ruby, and delivered with the flair and showmanship that has made DHH and 37Signals the polarising force that they are. Being quite fond of Ruby, I found myself nodding along to most of what David had to say. But I don\u0027t wish to add even a small amount of new fuel to the programming language wars that seem to go on endlessly around the place. The purpose of this post is not to join in on any Ruby circle-jerking.",
      "tags": [
        "bureaucracy",
        "google",
        "ruby",
        "culture"
      ],
      "title": "Policy is for when you don\u0027t trust your staff anymore",
      "url": "https://binarybalance.com.au/2010/12/12/policy-is-for-when-you-don-t-trust-your-staff-anymore"
    },
    {
      "content_html": "\u003Cp\u003EI remember when I first heard of Google\u0027s new browser, dubbed \u003Ca href=\u0022http://www.google.com/chrome\u0022\u003EChrome\u003C/a\u003E. I was sitting at my desk at work, reading the news and for a moment I thought I could almost hear the wailing and gnashing of teeth emanating from clear across the other side of the world at Redmond.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EThere were some obvious wins for Chrome right out of the gate. Independent processes for tabs meant that if a page crashed it wouldn\u0027t take down the whole browser with it. Security was also enhanced with this model of tab isolation, if I remember correctly. There was the \u003Ca href=\u0022http://en.wikipedia.org/wiki/V8_%28JavaScript_engine%29\u0022\u003EV8 JavaScript engine\u003C/a\u003E, tests by Google in September 2008 showed that JavaScript execution in Chrome was about three times faster than \u003Ca href=\u0022http://www.mozilla-europe.org/en/firefox/\u0022\u003EFirefox\u003C/a\u003E 3.0 and about ten times faster than Internet Explorer 7. There was some debate over the real world applicability of these results, but little doubt that Chrome was kicking ass at JavaScript. A modern browser made to support the quickly burgeoning age of JavaScript heavy web applications.\u003C/p\u003E\n\u003Cp\u003EBut there was also the question of \u003Ca href=\u0022http://coderrr.wordpress.com/2008/09/03/google-chrome-privacy-worse-than-you-think/\u0022\u003Eprivacy\u003C/a\u003E while using Chrome. Google responded by saying that they would quickly render anonymous the data collected from people\u0027s use of Chrome. There was some \u003Ca href=\u0022http://news.cnet.com/8301-13739_3-10038963-46.html?tag=mncol;title\u0022\u003Ecriticism of this also\u003C/a\u003E. Looking at \u003Ca href=\u0022http://www.google.com/chrome/intl/en/privacy.html\u0022\u003EChrome\u0027s privacy policy\u003C/a\u003E today, it doesn\u0027t seem like much has changed. Although it would appear that you can disable most if not all of the possibly concerning features in Chrome. I\u0027m consciously being \u003Ca href=\u0022/2010/08/25/online-privacy-inspect\u0022\u003Eless paranoid about my online privacy\u003C/a\u003E these days and let\u0027s be honest, you\u0027d have to be a pretty atypical Internet user for Google to not have a million little clues to who you are and what you\u0027ve been doing online. So \u2013 unless you\u0027ve managed to abstain from all things Google related over the past 12 years or so \u2013 maybe it\u0027s time to just build a bridge.\u003C/p\u003E\n\u003Cp\u003EBeyond the pros and cons of Chrome, I had been a Firefox man for a long time by then and while I immediately had to download and try out this new browser, I knew that I wouldn\u0027t be switching full time to Chrome at least until it had the same add-on support and evolved add-on ecosystem that I enjoyed with Firefox. Chrome has had the ability to support add-ons for some time now and I haven\u0027t really had the time or the inclination to investigate how the current crop of Chrome extensions and features stack up against Firefox for my purposes. That is, until now.\u003C/p\u003E\n\u003Cp\u003ELooking at my Firefox add-ons currently, I\u0027ve got:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E1Password extension for Firefox\u003C/li\u003E\n\u003Cli\u003EAdblock Plus\u003C/li\u003E\n\u003Cli\u003EAll-in-One Gestures\u003C/li\u003E\n\u003Cli\u003EBackpack Pages\u003C/li\u003E\n\u003Cli\u003EChange\u003C/li\u003E\n\u003Cli\u003EColorZilla\u003C/li\u003E\n\u003Cli\u003EDictionary Search\u003C/li\u003E\n\u003Cli\u003EDOM Inspector\u003C/li\u003E\n\u003Cli\u003EEnglish (Australian) Dictionary\u003C/li\u003E\n\u003Cli\u003EFirebug\u003C/li\u003E\n\u003Cli\u003EGoogle Reader Watcher\u003C/li\u003E\n\u003Cli\u003EImage Zoom\u003C/li\u003E\n\u003Cli\u003ELive HTTP Headers\u003C/li\u003E\n\u003Cli\u003EMeasureIt\u003C/li\u003E\n\u003Cli\u003ENoScript\u003C/li\u003E\n\u003Cli\u003ESession Maanger\u003C/li\u003E\n\u003Cli\u003ETab Mix Plus\u003C/li\u003E\n\u003Cli\u003EWeb Developer\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003EThat\u0027s a fair list, though I\u0027m guessing not as full as some people\u0027s Firefox installs. There\u0027s probably at least a few add-ons in that list I could get rid of and not really notice any difference. But some I can no longer live without.\u003C/p\u003E\n\u003Ch3 id=\u0022web-development-add-ons\u0022\u003EWeb development add-ons\u003C/h3\u003E\n\u003Cp\u003EThere\u0027s an unsurprising theme evident: many of these add-ons are related to web design and development. ColorZilla, DOM Inspector, Firebug, Live HTTP Headers, MeasureIt and the Web Developer toolbar would all fall into this category for me. Out of these tools, Web Developer and Firebug I cannot do without.\u003C/p\u003E\n\u003Ch4 id=\u0022web-developer-toolbar\u0022\u003EWeb Developer (toolbar)\u003C/h4\u003E\n\u003Cp\u003EWhether it\u0027s having two easy clicks to disable JavaScript while I test something, resize the browser window to an exact height/width to see how a page behaves at a certain viewport size, or selectively disable stylesheets, \u003Ca href=\u0022https://addons.mozilla.org/en-US/firefox/addon/60/\u0022\u003EWeb Developer\u003C/a\u003E is there to make my life easier. Having first installed this add-on years ago now, there\u0027s still a whole bunch of features in it that I\u0027ve never used, but looking through the drop-down menus, I feel comforted just knowing they\u0027re there.\u003C/p\u003E\n\u003Cp\u003EA version of Web Developer has been created for Chrome, but it\u0027s lacking some stuff that I would miss. \u003Ca href=\u0022http://chrispederick.com/work/web-developer/help/\u0022\u003ELike disabling JavaScript and the cache\u003C/a\u003E.\u003C/p\u003E\n\u003Ch4 id=\u0022firebug\u0022\u003EFirebug\u003C/h4\u003E\n\u003Cp\u003EHow did people write JavaScript before \u003Ca href=\u0022https://addons.mozilla.org/en-US/firefox/addon/1843/\u0022\u003EFirebug\u003C/a\u003E? I\u0027m having trouble remembering but I\u0027m pretty sure it was like pulling a heavy wooden cart with square wheels filled with screaming monkeys flinging their faeces at the back of your head\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EThere is no direct corollary for Firebug on Chrome, though I did find \u003Ca href=\u0022http://getfirebug.com/releases/lite/chrome/\u0022\u003EFirebug Lite\u003C/a\u003E. And Chrome\u0027s built in Developer Tools are a good alternative that \u003Ca href=\u0022http://blog.stormid.com/2009/06/chrome-developer-tools-vs-firefox.html\u0022\u003Eseems to have won some converts\u003C/a\u003E.\u003C/p\u003E\n\u003Ch3 id=\u0022general-purpose-add-ons\u0022\u003EGeneral purpose add-ons\u003C/h3\u003E\n\u003Cp\u003EOf the add-ons not directly related to web design/development, probably the five I use the most are 1Password extension for Firefox, All-in-One Gestures, Backpack Pages, Dictionary Search and Google Reader Watcher.\u003C/p\u003E\n\u003Ch4 id=\u00221password-extension-for-firefox\u0022\u003E1Password extension for Firefox\u003C/h4\u003E\n\u003Cp\u003EAn extension that comes with and hooks into \u003Ca href=\u0022http://agilewebsolutions.com/onepassword\u0022\u003E1Password\u003C/a\u003E, my password management software of choice, there has just recently been released a version of \u003Ca href=\u0022http://help.agile.ws/1Password3/google_chrome_support.html\u0022\u003Ethis extension that supports Chrome\u003C/a\u003E.\u003C/p\u003E\n\u003Ch4 id=\u0022all-in-one-gestures\u0022\u003EAll-in-One Gestures\u003C/h4\u003E\n\u003Cp\u003EMouse gestures are awesome. When a friend first recommended \u003Ca href=\u0022https://addons.mozilla.org/firefox/addon/12\u0022\u003EAll-in-One Gestures\u003C/a\u003E, I remember thinking this was like using the mouse gestures in Peter Molyneux\u0027s ambitious game \u003Ca href=\u0022http://en.wikipedia.org/wiki/Black_and_White_%28game%29\u0022\u003EBlack and White\u003C/a\u003E to cast miracles, but in your browser! I don\u0027t even often use the full plethora of gestures available. Probably 99% of the time I\u0027m just using back/forward (draw a line right to left/left to right) and drawing a line up over a link to open in a new tab. But I\u0027ve gotten so used to just these three simple gestures that I\u0027m always momentarily confused when I go for a gesture and happen to be working at a foreign computer, using a browser that does not have a mouse gestures add-on installed.\u003C/p\u003E\n\u003Cp\u003EDoes Chrome have mouse gestures? Yes it does. But apparently \u003Ca href=\u0022http://code.google.com/p/chromium/issues/detail?id=28226\u0022\u003Enot yet for Linux or Mac\u003C/a\u003E. That dog don\u0027t hunt.\u003C/p\u003E\n\u003Ch4 id=\u0022backpack-pages\u0022\u003EBackpack Pages\u003C/h4\u003E\n\u003Cp\u003E\u003Ca href=\u0022https://addons.mozilla.org/firefox/addon/1544\u0022\u003EBackpack Pages\u003C/a\u003E is a Firefox add-on that lets you access your \u003Ca href=\u0022http://backpackit.com/\u0022\u003EBackpack\u003C/a\u003E from an icon on the right hand side of the Bookmark Toolbar in Firefox. I\u0027ve been a Backpack user since 2005 when I read an \u003Ca href=\u0022http://www.salon.com/technology/feature/2005/08/10/37signals/print.html\u0022\u003Earticle on Salon.com\u003C/a\u003E. I wanted to see what this \u003Ca href=\u0022http://rubyonrails.org/\u0022\u003ERuby on Rails\u003C/a\u003E stuff was producing and I liked what I saw.\u003C/p\u003E\n\u003Cp\u003EI\u0027ve found \u003Ca href=\u0022http://productblog.37signals.com/products/2010/02/google-chrome-extension-lets-you-create-new-reminders-in-backpack.html\u0022\u003Eone extension for Chrome\u003C/a\u003E that allows manipulation of Backpack reminders, but I\u0027m looking for a bit more than that.\u003C/p\u003E\n\u003Ch4 id=\u0022dictionary-search\u0022\u003EDictionary Search\u003C/h4\u003E\n\u003Cp\u003EThere is not surprisingly at least two \u003Ca href=\u0022https://chrome.google.com/extensions/detail/mgijmajocgfcbeboacabfgobmjgjcoja?hl=en\u0022\u003Eperfectly\u003C/a\u003E \u003Ca href=\u0022https://chrome.google.com/extensions/detail/ipdjaafajlfiopcppipdinmcjbcpofhd\u0022\u003Egood\u003C/a\u003E Chrome equivalents for \u003Ca href=\u0022https://addons.mozilla.org/en-US/firefox/addon/68/\u0022\u003EDictionary Search\u003C/a\u003E.\u003C/p\u003E\n\u003Ch4 id=\u0022google-reader-watcher\u0022\u003EGoogle Reader Watcher\u003C/h4\u003E\n\u003Cp\u003EGoogle Reader being a Google product, I\u0027d again be surprised if there wasn\u0027t an equivalent for the Firefox \u003Ca href=\u0022https://addons.mozilla.org/en-US/firefox/addon/4808/\u0022\u003EGoogle Reader Watcher\u003C/a\u003E add-on. Enter \u003Ca href=\u0022https://chrome.google.com/extensions/detail/apflmjolhbonpkbkooiamcnenbmbjcbf\u0022\u003EGoogle Reader Notifier\u003C/a\u003E.\u003C/p\u003E\n\u003Ch3 id=\u0022conclusion\u0022\u003EConclusion\u003C/h3\u003E\n\u003Cp\u003EI\u0027ll be sticking with Firefox as my primary browser for now. But does it have to be an either/or? Not really. I have heard of people who might use Chrome or Firefox as their development browser and switch to say, Safari for general browsing because they just like the cleaner interface. Or maybe Chrome for the JavaScript performance.\u003C/p\u003E\n\u003Cp\u003EHowever, I seem to be something of a browser monogamist. Part of this I\u0027m sure is just habit. But part of it is because for me there\u0027s often a pretty blurred line between development browsing and general browsing. Often I\u0027ll be surfing along, come to a site, see something cool and think \u0027I wonder how they did that.\u0027 At those times I like to be able to have my arsenal of web development add-ons at the ready to delve into the site and see what I can find.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EIt felt kind of like this before Prototype and jQuery too, but the monkeys had Rabies.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-12-01T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/12/01/is-it-time-to-chrome-my-web-browsing",
      "summary": "I remember when I first heard of Google\u0027s new browser, dubbed Chrome . I was sitting at my desk at work, reading the news and for a moment I thought I could almost hear the wailing and gnashing of teeth emanating from clear across the other side of the world at Redmond.",
      "tags": [
        "ruby",
        "rails",
        "google",
        "firefox",
        "chrome",
        "browsers",
        "javascript"
      ],
      "title": "Is it time to chrome my web browsing?",
      "url": "https://binarybalance.com.au/2010/12/01/is-it-time-to-chrome-my-web-browsing"
    },
    {
      "content_html": "\u003Cp\u003EThere\u0027s been a fair bit written about how people are noticing that the Internet is changing the way our minds work in subtle and perhaps disturbing ways. The gist of it being that the always on, fire hose of information that the Internet has become is turning us into \u0027\u003Ca href=\u0022http://news.bbc.co.uk/2/hi/1834682.stm\u0022\u003Edigital gold fish\u003C/a\u003E\u0027 and could be the cause or enabler of such coined maladies as \u0027\u003Ca href=\u0022http://www.randsinrepose.com/archives/2003/07/10/nadd.html\u0022\u003ENerd Attention Deficiency Disorder\u003C/a\u003E\u0027 (somewhat tongue in cheek) or \u0027\u003Ca href=\u0022http://gigaom.com/2005/04/08/internet-anxiety-disorder-anyone/\u0022\u003EInternet Anxiety Disorder\u003C/a\u003E\u0027 (less tongue in cheek). The previous links are a little old, but the \u003Ca href=\u0022http://www.dailymail.co.uk/sciencetech/article-1312119/Facebook-internet-wire-brain-shorten-attention-span.html\u0022\u003Emore recent articles on this subject\u003C/a\u003E are pretty much \u003Ca href=\u0022http://www.allword-news.co.uk/2010/11/16/is-your-attention-span-shrinking/\u0022\u003Estill saying the same thing\u003C/a\u003E. There was even a book written on the subject called \u003Ca href=\u0022http://www.theshallowsbook.com/\u0022\u003EThe Shallows\u003C/a\u003E.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EAt first I scoffed at the idea that the Internet was having any tangible effect on the way my mind worked. I read a few pieces on how the Internet is ostensibly contracting people\u0027s attention spans and thought well, that\u0027s not me... I can concentrate like some kind of concentrating machine developed solely for the purpose of concentrating, often beyond my body\u0027s ability to keep up. Many a weekend I have spent attacking various projects over lengthy time periods. When I finally look around I realise I\u0027ve just spent the better part of 8 or 10 hours sitting in front of my computer without having eaten and barely having gotten up for a break\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EBut I\u0027ve been noticing something in my own behaviour that may have some relationship to this Internet goldfish business: I\u0027m reading things too quickly. I\u0027m finding that when I read an article or something on the Internet, I\u0027m skimming over words, occasionally whole sentences or paragraphs, I\u0027m not really taking them in and I have been doing this in a largely unconscious way. The obvious question I then posed myself was why am I doing this? The best answer I can come up with is: because there\u0027s so much out there to learn and know, I feel like I\u0027m always having to rush to keep up. A facet of \u0027Internet Anxiety Disorder\u0027 perhaps\u003Ca id=\u0022fnref:2\u0022 href=\u0022#fn:2\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E2\u003C/sup\u003E\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EI most often find that I\u0027ll be entering into this unconscious skimming mode when I\u0027m idly consuming random content on the Internet. I might be perusing an article found on \u003Ca href=\u0022http://news.ycombinator.com/\u0022\u003EHN\u003C/a\u003E or \u003Ca href=\u0022http://reddit.com/\u0022\u003EReddit\u003C/a\u003E and bam! I find I\u0027ve just read an article, skimmed over some amount of it and have retained not as much as I would have hoped. Just yesterday I replied to \u003Ca href=\u0022http://news.ycombinator.com/item?id=1908993\u0022\u003Ea thread on HN\u003C/a\u003E, where I actually took the time to write an 85 word reply without realising that the premise of my reply had already been plainly ruled out by the original post. D\u0027oh. I was indeed quite tired from a day of computering and this surely had something to do with it but later on I started to wonder if something a bit more systemic was going on here. On more than just this one occasion I realised I had been reading stuff too quickly, not taking it in properly and I can\u0027t blame tiredness alone for all of these occasions.\u003C/p\u003E\n\u003Cp\u003EContrast this with my previously mentioned weekend projects where I can have the opposite problem, I\u0027m perhaps sometimes too focused and don\u0027t take breaks when I should, be it because I\u0027m just tired or because I\u0027m frustrated with a problem that I can\u0027t think of a way to solve and rather than take a break and come back to it with a clear mind, I stubbornly refuse to quit (you can\u0027t beat me, you bastard code!). In any case, lack of attention isn\u0027t usually the problem on these occasions.\u003C/p\u003E\n\u003Cp\u003EThe main difference I see in these two types of activity is the mental energy that they require. I can read random articles on the Internet without much presence of mind. However, writing code, playing with databases and website interfaces usually takes all the focus I can throw at it. Plus tinkering with websites and web applications is an activity that I usually quite enjoy, that probably has something to do with it as well.\u003C/p\u003E\n\u003Cp\u003ESo what tentative conclusions or action items will I draw from all this? firstly I\u0027m going to actively try and read articles and posts more slowly. Like probably most people who spend an inordinate amount of time on the Internet, I can read pretty damn fast and I\u0027m starting to think that this isn\u0027t always a good thing. I\u0027m going to consciously stop myself when I start feeling like there\u0027s too much out there and I need to keep up with it all.\u003C/p\u003E\n\u003Cp\u003ESecondly, one possible way to combat \u0027Internet Anxiety Disorder\u0027 or the goldfishing of your brain or whatever one wishes to call it might be to find activities that you enjoy (or at least that you don\u0027t dislike) that are also quite mentally taxing or engaging, things that require some depth of focus. Find stuff that you simply can\u0027t skim if you want to do it right and then do it right. For those of us who write code or participate in related areas of interest, this is a pretty obvious candidate. But I suspect that other fields containing subtlety or intricacy, requiring some commitment might work as well. Perhaps philosophy, economics or mathematics for example. Maybe even just something as simple as reading a novel might do.\u003C/p\u003E\n\u003Cp\u003EI wonder how the younger generations will deal with and be affected by this issue though. I gather I would generally be considered as being one of the last of \u003Ca href=\u0022http://en.wikipedia.org/wiki/Generation_X\u0022\u003EGeneration X\u003C/a\u003E or less commonly one of the first of \u003Ca href=\u0022http://en.wikipedia.org/wiki/Generation_Y\u0022\u003EGeneration Y\u003C/a\u003E. While some of my earliest memories involve my parents \u003Ca href=\u0022http://en.wikipedia.org/wiki/Commodore_SX-64\u0022\u003ESX-64\u003C/a\u003E and I would certainly say I grew up with computers and gaming consoles, I would not consider myself to have grown up with the Internet. I didn\u0027t really start taking a lot of notice of it until around the mid to late nineties, during my teenage years. The kids today really are growing up with the Internet, with Facebook, Twitter, YouTube and all the rest. I wonder if this may mean that for them, actively practising the ability to focus in depth may be more important than it is for me. Perhaps the years of my youth that I spent geeking out sans the Internet have given me some kind of partial immunity to the goldfishing of the brain that they may not have. I spent a huge amount of time reading when I was young. I was into comics, fantasy and sci-fi novels, pen-and-paper based role playing games like \u003Ca href=\u0022http://en.wikipedia.org/wiki/Editions_of_Dungeons_%26_Dragons#Advanced_Dungeons_.26_Dragons\u0022\u003EAD\u0026amp;D\u003C/a\u003E, \u003Ca href=\u0022http://en.wikipedia.org/wiki/Rifts_%28role-playing_game%29\u0022\u003ERifts\u003C/a\u003E and \u003Ca href=\u0022http://en.wikipedia.org/wiki/Champions_%28role-playing_game%29\u0022\u003EChampions\u003C/a\u003E. When I think about them now, all of these activities cultivated focus. Or maybe I\u0027m completely wrong and young people these days (or at least young geeks these days) are getting exactly the same kind of inoculation that I imagine I may have gotten, the only difference is they\u0027re just playing \u003Ca href=\u0022http://en.wikipedia.org/wiki/World_of_Warcraft\u0022\u003EWoW\u003C/a\u003E instead. I\u0027d be interested to hear what Gen Y and Z members think about this topic.\u003C/p\u003E\n\u003Cp\u003EThe Information fire hose may be making it easier for us to become a race of article skimmers with 9 second attention spans but I believe this isn\u0027t a foregone conclusion that we are all steadily trudging towards whether we like it or not. I believe we have control over our own minds and how we use them, even on the Internet.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003EI don\u0027t unreservedly see this as a good thing and I don\u0027t mention it as some kind of badge of honour. Being \u0027\u003Ca href=\u0022http://en.wikipedia.org/wiki/Flow_%28psychology%29\u0022\u003Ein the zone\u003C/a\u003E\u0027 can be great, but as I get older I realise that I am beginning to pay a larger and larger price for this kind of heedless, obsessive focus. My current plan is to put a little more structure into it to ensure that I can get the benefits of being \u0027in the zone\u0027 but at the same time, not adversely affect my health.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli id=\u0022fn:2\u0022\u003E\n\u003Cp\u003EWhile this is not particularly relevant to the main discussion at hand, I have mixed feelings about society\u0027s tendency to slap a diagnosis aiding label on seemingly any and all problems that a person may face in their lifetime. From one point of view I guess it can make sense, giving a problem a name can be a way of focusing attention and resources on the issue. However, all too often I get the feeling that issues - particularly those of a psychological nature - are labelled at least partially for the purpose of turning them into a syndrome that can then be addressed by the supply of drugs that really only treat the symptoms.\u003Ca href=\u0022#fnref:2\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-11-17T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/11/17/goldfish-in-a-sea-of-information",
      "summary": "There\u0027s been a fair bit written about how people are noticing that the Internet is changing the way our minds work in subtle and perhaps disturbing ways. The gist of it being that the always on, fire hose of information that the Internet has become is turning us into \u0027 digital gold fish \u0027 and could be the cause or enabler of such coined maladies as \u0027 Nerd Attention Deficiency Disorder \u0027 (somewhat tongue in cheek) or \u0027 Internet Anxiety Disorder \u0027 (less tongue in cheek). The previous links are a little old, but the more recent articles on this subject are pretty much still saying the same thing . There was even a book written on the subject called The Shallows .",
      "tags": [
        "focus",
        "facebook",
        "twitter"
      ],
      "title": "Goldfish in a sea of information",
      "url": "https://binarybalance.com.au/2010/11/17/goldfish-in-a-sea-of-information"
    },
    {
      "content_html": "\u003Cp\u003EI\u0027ve always found it interesting and kind of cool how in the programming world, one of the ways you can tell you\u0027ve made an impact is if people refer to you by your initials and everyone else knows who they mean. \u003Ca href=\u0022http://en.wikipedia.org/wiki/Richard_Stallman\u0022\u003ERMS\u003C/a\u003E, \u003Ca href=\u0022http://en.wikipedia.org/wiki/Jwz\u0022\u003EJWZ\u003C/a\u003E, \u003Ca href=\u0022http://en.wikipedia.org/wiki/David_Heinemeier_Hansson\u0022\u003EDHH\u003C/a\u003E and \u003Ca href=\u0022http://en.wikipedia.org/wiki/Paul_Graham_%28computer_programmer%29\u0022\u003EPG\u003C/a\u003E are the four that I can think of off the top of my head and I\u0027m sure there are more.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EIt seems like this practice is not surprisingly more common with people who have long names. It also seems that more of the older guys seem to have ended up with the initials moniker. The practice no doubt mostly stems from the limitations of the medium through which these people and those that talk to or about them direct much of their communication: text. Usernames, email, instant message, blogging, Internet forums etc, etc. I guess it comes down to \u0027the less keystrokes the better\u0027. Programmers are nothing if not a generally logical and practical bunch.\u003C/p\u003E\n\u003Ch3 id=\u0022the-plain-text-aesthetic\u0022\u003EThe \u0027plain text\u0027 aesthetic\u003C/h3\u003E\n\u003Cp\u003ERichard Stallman has been quoted as saying:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E\u0027Richard Stallman\u0027 is just my mundane name; you can call me \u0027rms\u0027.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EThe use of initials as one\u0027s primary moniker and possibly even valuing it over one\u0027s full name as RMS seems to, speaks to me of what I will term the \u0027plain text\u0027 aesthetic. I see this quality in myself and some other people who spend any reasonable amount of time programming or pursuing related technical activities. When I say \u0027plain text\u0027 I don\u0027t strictly mean that we only like plain text, though in some situations this may be true (I\u0027m looking at you, email). What I really mean is that it seems like people who have this \u0027plain text\u0027 aesthetic don\u0027t mind and may even prefer a website, or an interface that\u0027s visually simple - some maybe even describing it as lacking in styling or presentation - as long as it effectively coveys the required information or effectively allows for the desired interaction. Indeed, part of this effectiveness may be that the website or interface lacks distracting design features that otherwise may have been added for the sake of form over function. You could look at a command line UI as one example of an interface that might be in line with the \u0027plain text\u0027 aesthetic, maybe \u003Ca href=\u0022http://pinboard.in/\u0022\u003EPinboard\u003C/a\u003E as an example of a website. I\u0027m sure one could argue that it\u0027s not so much that programmers like the \u0027plain text\u0027 aesthetic, it\u0027s that for the most part they\u0027re not graphic designers, ergo any website or interface designed by a programmer will look pretty straight forward and bare. There\u0027s probably a fair bit of truth to that, but it\u0027s not the whole story. More than this, I believe that I am often drawn to the simplified and straight forward over the ostentatious or overly styled, it\u0027s a deliberate choice for me in many cases. One of the things that drew me to Pinboard (aside from it\u0027s tag line: \u0027Social bookmarking for introverts\u0027) was that it was more minimalist than \u003Ca href=\u0022http://www.delicious.com/\u0022\u003EDelicious\u003C/a\u003E and that this minimalism carried through to the visual design.\u003C/p\u003E\n\u003Cp\u003EI suspect I have to be careful with this personal preference for minimalism though. It doesn\u0027t seem like a lot of the general population shares the \u0027plain text\u0027 aesthetic and I would do well to remember this when promoting or designing my own products or services to all but the least common niche markets that may share my personal taste (e.g. geeks). Where people like me might be happy to judge a book by it\u0027s contents, the cover is still what matters to most people and the marketing industry is well aware of this. Perhaps the \u0027plain text\u0027 aesthetic is in part a cynical reaction to the marketing spin and superficiality that\u0027s so prevalent in the world today.\u003C/p\u003E\n\u003Cp\u003EThe pantheon of initials and the \u0027plain text\u0027 aesthetic; small artifacts of what is still a relatively new culture with new norms of communication and new views on identity and taste. Maybe I should start using my initials, I have three as well. Or not.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-11-01T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/11/01/the-pantheon-of-initials",
      "summary": "I\u0027ve always found it interesting and kind of cool how in the programming world, one of the ways you can tell you\u0027ve made an impact is if people refer to you by your initials and everyone else knows who they mean. RMS , JWZ , DHH and PG are the four that I can think of off the top of my head and I\u0027m sure there are more.",
      "tags": [
        "identity"
      ],
      "title": "The pantheon of initials",
      "url": "https://binarybalance.com.au/2010/11/01/the-pantheon-of-initials"
    },
    {
      "content_html": "\u003Cp\u003EIn my younger days I used to find that during social interactions online I would end up in a lot of \u003Ca href=\u0022http://xkcd.com/386/\u0022\u003ESomeone is wrong on the Internet\u003C/a\u003E kind of debates. I\u0027d be arguing with some anonymous stranger(s) about some relatively pointless issue. At that time I almost exclusively used a pseudonym, so the other person would be doing the same thing from their point of view.\u0026lt;!--more--\u0026gt; One afternoon, after what turned out to be a particularly uncivilised and ultimately unsatisfying exchange over an online forum about the merits and accuracy of using the acronym \u0027DHTML\u0027 in today\u0027s modern web industry, it hit me that this anonymous person looking out of my eyes who is so intent on proving themselves correct across the Internet to someone they don\u0027t even know is really doing this primarily because of a largely unacknowledged fear that he\u0027s not good enough, that he\u0027s not smart enough, that he doesn\u0027t know enough, and so he needs to prove that he is worthy to anyone he can. The anonymity that can be afforded by the Internet means that I could be far more aggressive in pursuing online arguments than most people would dare to be in the offline world and in a funny way, this seemed to offset the fact that I was trying to prove myself to a person I don\u0027t even know and whose opinion should objectively mean very little to me. But that day, I decided to stop. I\u0027d stop the pointless arguments, I\u0027d stop with this driving need to prove myself correct to anonymous strangers and I would try and stop similar (though far less pronounced) behaviour in the offline world as well. I like to think this was one of those relatively rare, palpable moments when you actually see yourself growing up a little. I kept travelling the Internet under a pseudonym for some years after that (and in some places I still do) but generally I would \u003Ca href=\u0022http://en.wikipedia.org/wiki/Lurker\u0022\u003Elurk\u003C/a\u003E more, comment less and try and be civil when I did comment. I still occasionally, almost inexplicably would find myself getting drawn into pointless debates but at the least, I would realise what\u0027s happened and disengage more quickly.\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\u0022/2010/08/25/online-privacy-inspect\u0022\u003EI\u0027ve recently come to the point\u003C/a\u003E where I believe another small yet palpable positive shift is to start using my real identity more online. I realise that for any extroverts out there, much of what I\u0027ve just written may sound sort of ridiculous, but for those of us of the more introverted persuasion, yes these can be the kind of issues that occupy our mind.\u003C/p\u003E\n\u003Ch3 id=\u0022hacker-news-hn\u0022\u003EHacker News (HN)\u003C/h3\u003E\n\u003Cp\u003EI\u0027ve been a member of the \u003Ca href=\u0022http://news.ycombinator.com/news\u0022\u003EHacker News\u003C/a\u003E community for a little over 2 years now. For almost all of that time I\u0027ve used a pseudonym and had no information listed in my profile. I\u0027m now nutting up and using my own identity online in more places than I used to. I decided that Hacker News is going to be one of these places.\u003C/p\u003E\n\u003Cp\u003EI wanted to create an entirely new account because the pseudonym that I had previously used on HN I still use elsewhere and while I don\u0027t go to great lengths to maintain complete anonymity while using this pseudonym, I would still like to keep it at least \u003Cem\u003Esomewhat\u003C/em\u003E distanced from my real (for \u0027real\u0027 read \u0027offline\u0027 or \u0027birth name\u0027) identity.\u003C/p\u003E\n\u003Ch3 id=\u0022gathering-a-little-data\u0022\u003EGathering a little data\u003C/h3\u003E\n\u003Cp\u003EI was interested to know how many other people used their real identity on HN. From browsing the site, I had a feeling that there was a relatively large number of people who used their real identity on HN but I was interested in going some way towards confirming this. I remembered that you can post a poll on HN and using this feature seemed ideal for my little experiment.\u003C/p\u003E\n\u003Cp\u003EHN has a reputation system whereby users can vote submitted posts up and vote comments on those posts up or down (known as \u0027upmodding\u0027 or \u0027downmodding\u0027), this is one of the ways by which the website tries to facilitate quality discourse, while discouraging pointless debate, name calling, etc. Each user accumulates a certain amount of \u0027karma\u0027 points which are a reflection of how much that user\u0027s submissions/comments have been voted up or down by other users. Only users whose karma points are beyond a particular threshold are able to downmod comments, flag inappropriate submissions for review by the site administrators and create a poll asking HN members to respond to a question.\u003C/p\u003E\n\u003Cp\u003ESo that was the catch, I didn\u0027t want to use my old pseudonym to post the poll and my very new de-anonymised account did not have enough karma points to allow me to post a poll. In a serendipitous turn of events, I happened to be contacted by Alex Le who had noticed in \u003Ca href=\u0022http://news.ycombinator.com/item?id=1778659\u0022\u003Eone of my comments on HN\u003C/a\u003E that I had mentioned that my partner is in the wedding industry and as Alex\u0027s startup (\u003Ca href=\u0022http://marrily.com\u0022\u003Emarrily.com\u003C/a\u003E) is related to weddings, he was wondering if we were interested in trying out his site, giving a bit of feedback, etc. The idea popped into my head that perhaps Alex could post my poll for me! I sent an email back to Alex telling him my partner and I would of course be happy to check out his site but if he wouldn\u0027t mind, could he post a poll for me on HN? Alex was kind enough to facilitate my somewhat unusual quid pro quo, and I had \u003Ca href=\u0022http://news.ycombinator.com/item?id=1791108\u0022\u003Emy poll up on HN\u003C/a\u003E in short order. Thanks Alex!\u003C/p\u003E\n\u003Cp\u003EBoth myself and - I suspect - Alex were surprised at the popularity of the poll. It seems to have run its course now, having dropped off the front page of HN and I\u0027m happy to say that (at the time of this writing) the poll has attracted a total of 1,247 responses to my question and 96 comments. There is some irony in the fact that this is without a doubt the most successful post that I have ever contributed to HN... and I wasn\u0027t the one who posted it.\u003C/p\u003E\n\u003Ch3 id=\u0022the-results\u0022\u003EThe results\u003C/h3\u003E\n\u003Cp\u003EIt would seem that my hunch has held water. 1048 people indicated that they would consider themselves to be using their real identity on HN and 199 indicated that they would not. So that\u0027s 5.26 non-anonymous users for every anonymous one. This is a more skewed proportion than I was actually expecting.\u003C/p\u003E\n\u003Cp\u003EThere was comment that my poll question \u0027Do you use your real identity on Hacker News?\u0027 was somewhat ambiguous. For the record I did not strictly mean do you use your birth name as your username on HN, I meant do you use an identity that could easily be connected to your real identity. Examples of this might include using a pseudonym for your username but having information listed in your HN profile that states your birth name and who you really are, or using a pseudonym for your username that could easily lead to your real or birth name via a little Googling or Facebooking or the like. While I didn\u0027t intend to travel down the philosophical rabbit hole of asking what \u0027identity\u0027 truly is (I\u0027ll leave this to someone with more time on their hands), most people seemed to interpret my question as I had intended and I actually think it was an advantage that people had to decide for themselves whether they thought they were using their real identity or not because they are probably in the best position to make that judgement.\u003C/p\u003E\n\u003Cp\u003EAs with any relatively popular submissions on HN, my poll generated some insightful comments. The top rated comment on the poll was from Jacques Mattheij who said:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EYes, absolutely. I think that unless you have something to say that can immediately hurt you when it is linked to your identity the general mode of conversation on the internet should be tied to your real world identity.\nThere are two reasons for that:\nThe first is that you will be aware that you\u0027re saying stuff on your personal title and that if you decide to go postal on someone that it will reflect bad on you in the longer term. Anonymity seems to bring out the worst in people.\nThe second is more subtle. When you say stuff attached to your name you\u0027re putting a calling card out there, people will remember the overall tone of your content and they\u0027ll build up a mental image of the person that goes with that content. Over time this will translate in to more concrete (for instance real-life or collaborative) relationships to grow out of the more casual online ones.\nSo reserve the anonymous stuff for the \u0027leaks\u0027 and the \u0027revelations\u0027, don\u0027t bother with the anonymous attacks and the trolling. And do the rest as you.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EI pretty much agree. The point Jacques makes about \u0027putting a calling card out there\u0027 and this leading to \u0027more concrete (for instance real-life or collaborative) relationships to grow out of the more casual online ones\u0027 is a large part of the reason that I decided to start using my real name online in more places. Living in a location that\u0027s not particularly hard-wired to the heartbeat of the technology scene, I have found it difficult to make new \u0027real-life or collaborative\u0027 relationships with people of like business interests to my own (i.e. entrepreneurship with a technological bent, web development/design, the Internet/eCommerce in general) and I realised that this was never going to happen more easily if I didn\u0027t get myself out there.\u003C/p\u003E\n\u003Cp\u003EI also suspect that a part of why HN still enjoys a relatively high quality of submissions and comments and - as far as I can see - very little overt \u003Ca href=\u0022http://en.wikipedia.org/wiki/Troll_%28Internet%29\u0022\u003Etrolling\u003C/a\u003E is that so many people are using their own identity or something very close to it on HN. As opposed to sites like Reddit\u003Ca id=\u0022fnref:1\u0022 href=\u0022#fn:1\u0022 class=\u0022footnote-ref\u0022\u003E\u003Csup\u003E1\u003C/sup\u003E\u003C/a\u003E or 4chan where free expression enabled by anonymity is the focus.\u003C/p\u003E\n\u003Cp\u003EHN user araneae said:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EIronically, I find myself self-censoring with a fake identity in HN more than in real life.\nA few comments ago, I posted something (which netted me total, about -40 points) that I wouldn\u0027t have hesitated to say IRL. And I also posted it under my real name on Facebook (a friend posted the same article there.)\nBut I did hesitate to post it here. And there are many occasions when there are things I haven\u0027t said that I would in person.\nAnd that\u0027s because unlike real life, how much you \u0026quot;downvote\u0026quot; is invisible. Downvoting someone else has no consequences for you. There are new HN controls (like you can\u0027t downvote responses to your posts) but that still is a blade of grass on a lawn.\nIn the real world, people might think less of you if you say something (some might consider) sexist, but they\u0027re not going to do anything to you at all. So you\u0027re protected from backlash. But when people are allowed to anonymously punish you, it makes you hesitate a bit more.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EThat\u0027s an interesting viewpoint, but not one I can say I identify with personally. Anonymity for me has always allowed for greater free expression (for better and worse) and whether someone can downmod my anonymous online identity for saying something they don\u0027t like has never been of great concern to me. I was never interested in competing in the karma stakes on HN. I also suspect that just because the backlash of saying something controversial offline may not be as obvious as losing karma points on HN, this doesn\u0027t necessarily mean that a backlash doesn\u0027t occur.\u003C/p\u003E\n\u003Cp\u003EHN user j_baker said:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EOn the other hand, your internal censor has a way of making things more constrained and mediocre. You probably eliminate a lot of the bad and trollish comments, but you probably also cut out a lot of the good comments.\n(For the record, I use my real name as you can tell. But there are times where I\u0027ve wished I could be anonymous and say what I \u003Cem\u003Ereally\u003C/em\u003E feel.)\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EI find this a more compelling reason for staying anonymous. I don\u0027t think anyone can seriously argue that free expression is not aided by anonymity. But free expression - at least as it tends to manifest on the Internet - is not the best fit for every venue. Spending any amount of time on the /b/ random board at 4chan can show one both the extremes of hilarity and some of the darkest aspects of human nature. While I will always support such anonymous gathering places and the kind of free form discourse that they allow, I come to HN for something different.\u003C/p\u003E\n\u003Cp\u003EHN user Dove said:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EAs widely as possible. My real name is accessible from my profile. My handle is my most widely used internet handle in non-gaming contexts; using it is a means to recognition, not anonymity.\nMy reasons:\n(A) When I was 14, I embraced anonymity online out of a (perhaps justifiable) fear of internet stalkers. Now that I am an adult, sound of body and mind, I\u0027m not so worried about that. I use my real name almost everywhere online.\n(B) This particular community is about real life things like jobs and businesses. There\u0027s a strong possibility I\u0027ll someday get a job / start a business / join some serious real-world undertaking based discussion and contacts here. If that\u0027s the case, I\u0027d rather be \u0026quot;Catherine Darrow from Seattle\u0026quot; than \u0026quot;Dove from the internet\u0026quot;.\n(C) I think it is wrong to judge people in one context based on controversial opinions held in another. I don\u0027t vote for politicians based on religion; I don\u0027t ignore the technical opinions of programmers with wacky political views; I don\u0027t disrespect the high level manager who likes to live it up on weekends. Not everyone holds this view, and aliases are a way to defend yourself against people who don\u0027t. But I would rather that tolerance became common courtesy, and \u0026quot;don\u0027t judge people in a professional context based on random forum comments\u0026quot; became simple common sense. By establishing a gentle tie between some of my more controversial views and my real identity, I take a small risk to make a small point.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EThere\u0027s some great points there, but the one that stands out to me the most is (A). The Internet can be a scary place and it behoves those who have grown up with the Internet and who now are becoming parents to educate their children on its use and how they can adequately protect themselves from the possible dangers. Remaining anonymous (or at least mostly anonymous) on the Internet until one is confident in their own ability to navigate the seas of information would be something I would heartily recommend, particularly for those who do not live and breath the Internet as most on HN probably do.\u003C/p\u003E\n\u003Cp\u003EHN user sethg said:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EJust about anything I might post under a pseudonym, or otherwise shielded, could be  connected with my real-world identity if enough people try hard enough. So I\u0027d rather make everything open, and think before I say something I might regret, than rely on the sense of security that a pseudonym would bring.\nEvery once in a while I suspect this attitude marks me as an old fogey; I feel like people who have grown up with the Internet are more sophisticated about online identity management.\nI\u0027m not sure if they\u0027re more more sophisticated about online identity management, they strike me as just being more blas\u221A\u00A9 about it. Maybe that\u0027s the way things are moving, some part of me feels that greater openness throughout society is a good thing in general and I agree with Dove when she said: \u0027... I would rather that tolerance became common courtesy, and \u0026quot;don\u0027t judge people in a professional context based on random forum comments\u0026quot; became simple common sense.\u0027 But I\u0027m too cynical to think that the way most people - at least non-technical people - regardless of age, manage their identity online comes from any degree of deliberate sophistication and that it doesn\u0027t open them up to more possible risk than they probably realise.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EHN user alexophile said:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EI was originally registered under my \u0027real\u0027 name (amohr) but, due to a mixup with the password reset, I wasn\u0027t able to access it for a while, so I took the opportunity to make this account. However, if you\u0027re someone looking to google me for whatever purposes, searching for \u0026quot;alexophile\u0026quot; will yield more accurate results than \u0026quot;Alex Mohr\u0026quot; as I\u0027m competing for pagerank with a cg researcher from Pixar and a multimedia networks researcher (the jerk that took alexmohr.com)\nBasically, using a unique nick is nice, not for anonymity, but for more convenient aggregation of my online identity.\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EThis is actually a viewpoint that never even occurred to me and one that HN user Dove also touched on in her quoted comment above. Possibly because my \u0027real\u0027 name is pretty unique as \u0027real\u0027 names go. But as counter intuitive as it might have seemed to me at first glance, this makes perfect sense. Sometimes (maybe a lot of the time) a more unique name you give to yourself makes it easier for your identity to remain coherent than using the name you were born with.\u003C/p\u003E\n\u003Ch3 id=\u0022in-conclusion\u0022\u003EIn conclusion\u003C/h3\u003E\n\u003Cp\u003EI\u0027d like to thank HN for humouring my curiosity. From all indications it doesn\u0027t seem like HN needs much encouragement, but I would urge people to consider using their real identity on HN if they do not already. In my humble opinion, the advantages of doing so far outweigh the disadvantages. Indeed, had I not switched to using my real identity and contact details in my profile on HN, Alex Le would never have contacted me, I would not have had my poll up on HN when I did and I would not have had the fun of writing this blog post today.\u003C/p\u003E\n\u003Cp\u003EUsing our real identities on HN and being accountable for what we say there is not surprisingly one more small way that we can help to ensure that HN stays the place of quality discourse that we all know and love. Even if this may mean at times that we self-censor some of what we might really like to say. But hey, you\u0027ve got Reddit and 4chan for that stuff.\u003C/p\u003E\n\u003Cdiv class=\u0022footnotes\u0022\u003E\n\u003Chr /\u003E\n\u003Col\u003E\n\u003Cli id=\u0022fn:1\u0022\u003E\n\u003Cp\u003E\u003Ca href=\u0022http://reddit.com\u0022\u003EReddit\u003C/a\u003E is the website that the majority of Hacker News\u0027s sense of humour has been transplanted to.\u003Ca href=\u0022#fnref:1\u0022 class=\u0022footnote-back-ref\u0022\u003E\u0026#8617;\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003C/div\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-10-17T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/10/17/story-behind-the-do-you-use-your-real-identity-on-hacker-news-poll",
      "summary": "In my younger days I used to find that during social interactions online I would end up in a lot of Someone is wrong on the Internet kind of debates. I\u0027d be arguing with some anonymous stranger(s) about some relatively pointless issue. At that time I almost exclusively used a pseudonym, so the other person would be doing the same thing from their point of view.",
      "tags": [
        "identity",
        "hacker-news"
      ],
      "title": "Story behind the \u0027Do you use your real identity on Hacker News?\u0027 poll",
      "url": "https://binarybalance.com.au/2010/10/17/story-behind-the-do-you-use-your-real-identity-on-hacker-news-poll"
    },
    {
      "content_html": "\u003Cp\u003ELast week my partner asked me to buy her some printer ink cartridges at a particular online store that sells such things so armed with her Visa card I undertook the quest.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EI found the desired ink cartridges and proceeded to check out. I arrive at a page that tells me it has been detected that I am a part of the \u201A\u0027Verified by Visa\u0027 program and that I will be sent to a page to facilitate said verification by Visa. I\u0027m redirected to a page that by the URL and branding I assume is owned by the bank that provides the merchant facilities for the ink cartridge website. This page partially loads but then dies because my \u003Ca href=\u0022https://addons.mozilla.org/en-US/firefox/addon/722/\u0022\u003ENoScript Firefox Add-On\u003C/a\u003E disallows the JavaScript on the page. I\u0027m left looking at a button that says something like \u0027Click to enter your password\u0027 but due to JavaScript being disabled, it does nothing when you click on it and even if it did, I would not know what password to enter. I do some Googling on Verified by Visa and how it might relate to our particular bank, but find very little other than pages filled with sales-speak on how Verified by Visa makes things lots more secure.\u003C/p\u003E\n\u003Cp\u003EConversation ensues:\u003C/p\u003E\n\u003Cp\u003EMe: \u0027Do you have a password for your Visa card?\u0027\u003C/p\u003E\n\u003Cp\u003EPartner: \u0027Password? I have a pin number...\u0027\u003C/p\u003E\n\u003Cp\u003EMe: \u0027No I think it\u0027s different to your pin number.\u0027\u003C/p\u003E\n\u003Cp\u003EPartner: \u0027I have no idea what you\u0027re talking about.\u0027\u003C/p\u003E\n\u003Cp\u003EThe temperature starts to rise as it\u0027s late and it\u0027s been a long day for both of us. The conversation escalates but is defused just in time before a nuclear strike is called in by either side.\u003C/p\u003E\n\u003Cp\u003EBack to the Interwebs, I enable JavaScript, the page then reloads and errors out because now it\u0027s been detected that I\u0027ve done something out of the ordinary flow and it\u0027s all bets off. I get back to the original ink cartridge website to find my shopping cart empty.\u003C/p\u003E\n\u003Cp\u003ESelecting all the products I wish to purchase for a second time and not realising at this stage what Verified by Visa actually is and my tired and befuddled mind already convinced that the bank has enrolled my partner in some added security scheme and that she\u0027s forgotten that they gave her a password, I try using my own MasterCard and find out that I hit the same thing, only with MasterCard it\u0027s called MasterCard SecureCode. Fortunately since I enabled JavaScript last time, I get through and interestingly without having to enter any password, even though the explanatory text still told me I would need to.\u003C/p\u003E\n\u003Cp\u003EThe next day, my partner goes to the bank, the person behind the counter has no idea what Verified by Visa or MasterCard SecureCode actually is. They tell her they do not supply passwords for credit cards. My partner then calls me and asks me to explain what happened to the person at the bank, more frustration. My partner eventually finds someone at the bank who knows vaguely what she\u0027s talking about and he tells her that they don\u0027t supply passwords for credit cards, but that you should be able to set one up at some point during the checkout process on this random, not particularly trusted website that she buys printer cartridges from.\u003C/p\u003E\n\u003Cp\u003ESo. Much. Win.\u003C/p\u003E\n\u003Ch3 id=\u0022wtf-just-happened\u0022\u003EWTF just happened?\u003C/h3\u003E\n\u003Cp\u003EAfter doing some more research, it turns out that this is in fact some kind of partially aborted implementation of a what\u0027s known as \u003Ca href=\u0022http://en.wikipedia.org/wiki/3-D_Secure\u0022\u003E3-D Secure\u003C/a\u003E an added layer of security used by Visa and MasterCard under the names Verified by Visa and MasterCard SecureCode respectively.\u003C/p\u003E\n\u003Cp\u003EI\u0027m going to have to put some of the blame for this whole amusing (in hindsight) cluster fuck onto myself because I\u0027m meant to know about this stuff, I\u0027m paranoid enough to be using NoScript and the night in question was not my most blindingly brilliant moment of deductive reasoning. But none the less, this was still without a doubt the worst sales experience that I have had in all the years I have been buying stuff off the Internet. Regardless of the merit of 3-D Secure it\u0027s self, if this is the current state of its implementation then yeah, no thanks.\u003C/p\u003E\n\u003Cp\u003E3-D Secure? More like... \u003Cem\u003E3-D Manure!\u003C/em\u003E Sorry, couldn\u0027t resist.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-10-12T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/10/12/three-whole-new-domains-of-secure",
      "summary": "Last week my partner asked me to buy her some printer ink cartridges at a particular online store that sells such things so armed with her Visa card I undertook the quest.",
      "tags": [
        "ecommerce",
        "fail"
      ],
      "title": "Three whole new domains of secure",
      "url": "https://binarybalance.com.au/2010/10/12/three-whole-new-domains-of-secure"
    },
    {
      "content_html": "\u003Cp\u003ENot too long ago, I was brought in on a failing website development project. The client had commissioned a website from one of their local web design/development companies, that company had sub-contracted the development of the site out and the web developer in question had skipped the country without finishing the project, never to be heard from again. The client was understandably perturbed by this and had lost faith in the company that they originally hired to do the work.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EThere is a saying that will be familiar to many developers: \u0027Hell is other people\u0027s code\u0027 and I have found this saying to be quite accurate much of the time. So I\u0027m often reluctant to come in at the end of a project that\u0027s ostensibly at the FUBAR stage. But this time, circumstances were such I decided to see if I could pitch in and sort things out.\u003C/p\u003E\n\u003Cp\u003EI got a hold of the source files, an SQL dump of the database and set the site up on my local machine. What I found was quite possibly the most egregious example of what I can only refer to as \u003Ca href=\u0022http://en.wikipedia.org/wiki/Cargo_cult#Other_uses_of_the_term\u0022\u003Ecargo cult\u003C/a\u003E web development that I have ever seen. This version of the website in question never went live so I have no reservations talking about it here. But I will not be naming the website or those involved in order to protect the innocent.\u003C/p\u003E\n\u003Ch3 id=\u0022investigation\u0022\u003EInvestigation\u003C/h3\u003E\n\u003Cp\u003EThe site initially appeared to be typical \u003Ca href=\u0022http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29\u0022\u003ELAMP\u003C/a\u003E based fare. The MIA developer had apparently decided that he would create a very basic content management system with a browser based admin area from scratch. Looking deeper I first noticed that the source files were a mess. There were three or four different versions of the website stuffed into various sub-directories. Within each of these sub-directories were copies of the same file with names like \u0027sys_delete_file_a.php\u0027, \u0027sys_delete_file_b.php\u0027 and \u0027sys_delete_file_c.php\u0027. There were three different files in different locations, each containing the same database connection details. A version control system was not this developer\u0027s friend. Looking at the tables in the database its self, I noted that the table containing login details was storing passwords in plain text. The alarm bells had begun.\u003C/p\u003E\n\u003Cp\u003EThis is the kind of thing that gives PHP developers a bad name, I thought to myself. But the best was yet to come.\u003C/p\u003E\n\u003Ch3 id=\u0022the-admin-interface\u0022\u003EThe admin interface\u003C/h3\u003E\n\u003Cp\u003EI mentioned that the original developer had created a browser based UI for administering aspects of the website. I punched in the URL for the admin area and was presented with a login page. A pretty standard login form appeared on the page:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-html\u0022 data-language=\u0022html\u0022\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etable\u003C/span\u003E width=\u0026quot;526\u0026quot; border=\u0026quot;0\u0026quot; align=\u0026quot;center\u0026quot; cellpadding=\u0026quot;0\u0026quot; cellspacing=\u0026quot;0\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n  \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n    \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E height=\u0026quot;30\u0026quot; valign=\u0026quot;top\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u0026amp;nbsp;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\n  \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n  \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\n\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E width=\u0026quot;526\u0026quot; height=\u0026quot;323\u0026quot; valign=\u0026quot;top\u0026quot; background=\u0026quot;images/splashWelcome.gif\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\t\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etable\u003C/span\u003E width=\u0026quot;482\u0026quot; border=\u0026quot;0\u0026quot; cellspacing=\u0026quot;0\u0026quot; cellpadding=\u0026quot;0\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n      \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n        \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E width=\u0026quot;50\u0026quot; height=\u0026quot;164\u0026quot; valign=\u0026quot;top\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u0026amp;nbsp;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n        \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E width=\u0026quot;432\u0026quot; valign=\u0026quot;top\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u0026amp;nbsp;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n      \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n      \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\n        \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E width=\u0026quot;50\u0026quot; valign=\u0026quot;top\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u0026amp;nbsp;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n        \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E width=\u0026quot;432\u0026quot; valign=\u0026quot;top\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Eform\u003C/span\u003E id=\u0026quot;form1\u0026quot; name=\u0026quot;form1\u0026quot; method=\u0026quot;post\u0026quot; action=\u0026quot;sys_menu.php\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\t\t  \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etable\u003C/span\u003E width=\u0026quot;100%\u0026quot; border=\u0026quot;0\u0026quot; cellspacing=\u0026quot;0\u0026quot; cellpadding=\u0026quot;0\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n            \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n              \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E valign=\u0026quot;top\u0026quot; class=\u0026quot;formlable\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003EUsername:\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n              \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E valign=\u0026quot;top\u0026quot; class=\u0026quot;formlable\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003EPassword:\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n            \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n            \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\n              \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E valign=\u0026quot;top\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Einput\u003C/span\u003E name=\u0026quot;MyUsername\u0026quot; type=\u0026quot;text\u0026quot; class=\u0026quot;formInput\u0026quot; id=\u0026quot;username\u0026quot; size=\u0026quot;25\u0026quot; /\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n              \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E valign=\u0026quot;top\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Einput\u003C/span\u003E name=\u0026quot;MyPassword\u0026quot; type=\u0026quot;password\u0026quot; class=\u0026quot;formInput\u0026quot; id=\u0026quot;password\u0026quot; size=\u0026quot;25\u0026quot; /\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n            \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n          \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etable\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n          \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u0026amp;nbsp;            \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n          \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n            \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Einput\u003C/span\u003E name=\u0026quot;cmdLogin\u0026quot; type=\u0026quot;submit\u0026quot; class=\u0026quot;ncopyright\u0026quot; id=\u0026quot;cmdLogin\u0026quot; value=\u0026quot;Login\u0026quot; /\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n          \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\n          \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u0026amp;nbsp;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n          \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Eform\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n        \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n      \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n      \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n        \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E valign=\u0026quot;top\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u0026amp;nbsp;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n        \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E valign=\u0026quot;top\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u0026amp;nbsp;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n      \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n    \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etable\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\n\t\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n  \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n  \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n    \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E valign=\u0026quot;top\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Ediv\u003C/span\u003E align=\u0026quot;center\u0026quot;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n      \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u0026amp;nbsp;\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n      \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Ediv\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etd\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n  \u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etr\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Etable\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EUsing tables for layout, non-breaking spaces all over the place... the developer was obviously not of the school that keeps such considerations as semantically correct use of (X)HTML in mind and this markup looked needlessly verbose to my eyes. But hey, there\u0027s plenty of people who still use tables for layout so I decided not to hold this against him.\u003C/p\u003E\n\u003Cp\u003EI punched in the username and password that was stored in the database, the form POSTed to sys_menu.php and I was in. After poking around the admin UI for a while, I decided I would take a look at the code in sys_menu.php to see what this developer had done to secure his admin area. Here is the piece of code that greeted me at the top of sys_menu.php:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code\u0022\u003E\u003Ccode class=\u0022language-php\u0022 data-language=\u0022php\u0022\u003E\u0026quot;;\n\n\t\t\t//exit();\n\t\t}\n\t}\n\u0026lt;/script\u0026gt;\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EI\u0027m not going to step through the code, explaining line by line, it\u0027s pretty standard (if ham-fistedly implemented) stuff and most of it is not really relevant. I did find the use of \u0027\u0026lt;script language=\u0026quot;php\u0026quot;\u0026gt; ... \u0026lt;/script\u0026gt;\u0027 to be bizarrely amusing yet enlightening, as I must admit that I wasn\u0027t even aware that you could use this (again) overly verbose syntax with PHP when just \u0027\u0026lt;?php ... ?\u0026gt;\u0027 or even the less universally accepted \u0027\u0026lt;? ... ?\u0026gt;\u0027 is the norm, The More You Know, hey? I also liked the way this guy prefixes some of his variable names with \u0027My\u0027 or \u0027my\u0027, it\u0027s important to know which variables are yours after all. I assume he\u0027s taking the \u0027my\u0027 keyword from Perl and applying it as a - IMO rather pointless - convention in PHP. But what really stole the show was this excerpt from the above:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code\u0022\u003E\u003Ccode class=\u0022language-php\u0022 data-language=\u0022php\u0022\u003Eif ($MyLogedIn == false) {\n\n\t$url = \u0026quot;index.php?pid=2\u0026quot;;\n\n\techo \u0026quot;\u0026quot;;\n\n\t//exit();\n}\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EIt couldn\u0027t be, I thought to myself. But it was. This guy had secured his admin UI \u003Cem\u003Eusing JavaScript\u003C/em\u003E. When the supplied username and password are not found in the database the PHP code outputs inline JavaScript that redirects the user back to the login page with the query string containing \u0027pid=2\u0027 which incidentally just signals to the login page that it should show an \u0027Invalid username and password\u0027 error message.\u003C/p\u003E\n\u003Cp\u003Ein order to just make sure what I thought was happening actually was, I logged out of the admin area, disabled JavaScript in my browser and clicked the \u0027Login\u0027 button without entering any username or password in to the form. I was straight in to the admin area and looking at the sys_menu.php page! I was close to speechless. I\u0027d seen some pretty dodgy code in my time but nothing like this. The only saving grace of this \u0027authentication system\u0027 is possibly that no one would ever think that any web developer would be brain damaged enough to use JavaScript to secure a website admin area and would never think to try exploiting such a flaw. But I don\u0027t think relying on a malicious user not to realise just how retarded you really are is a viable security strategy.\u003C/p\u003E\n\u003Ch3 id=\u0022the-contact-form\u0022\u003EThe contact form\u003C/h3\u003E\n\u003Cp\u003ENow I was enthralled with this website. I needed to know what other amazing jewels of incompetence it may be hiding. There were many, but none really worth mentioning beyond this one more.\u003C/p\u003E\n\u003Cp\u003EThe site sported a contact form. The form contained an implementation of a \u003Ca href=\u0022http://en.wikipedia.org/wiki/CAPTCHA\u0022\u003ECAPTCHA\u003C/a\u003E. This was an image CAPTCHA and looked pretty standard upon visual inspection. It appeared that the image showed four characters and one had to type these four characters into the provided text box in order to submit your message. But looking at the source code of the page I found this:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-html\u0022 data-language=\u0022html\u0022\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Eimg\u003C/span\u003E src=\u0026quot;images/captcha/6.gif\u0026quot; width=\u0026quot;50\u0026quot; height=\u0026quot;50\u0026quot; /\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Eimg\u003C/span\u003E src=\u0026quot;images/captcha/3.gif\u0026quot; width=\u0026quot;50\u0026quot; height=\u0026quot;50\u0026quot; /\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Eimg\u003C/span\u003E src=\u0026quot;images/captcha/F.gif\u0026quot; width=\u0026quot;50\u0026quot; height=\u0026quot;50\u0026quot; /\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Eimg\u003C/span\u003E src=\u0026quot;images/captcha/2.gif\u0026quot; width=\u0026quot;50\u0026quot; height=\u0026quot;50\u0026quot; /\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\u0022bb-code-tag\u0022\u003Einput\u003C/span\u003E name=\u0026quot;hfdCaptcha\u0026quot; type=\u0026quot;hidden\u0026quot; id=\u0026quot;hfdCaptcha\u0026quot; value=\u0026quot;63F2\u0026quot; /\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026lt;\u003C/span\u003E/\u003Cspan class=\u0022bb-code-tag\u0022\u003Ep\u003C/span\u003E\u003Cspan class=\u0022bb-code-punctuation\u0022\u003E\u0026gt;\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EIgnoring the invalid nested paragraph tag, I realised that the CAPTCHA image was in fact not a single image, it was four images set next to each other, and each image displayed a single character of the CAPTCHA! What\u0027s more, each image was named after the character that it displayed. So from this snippet of source alone and without being able to see the actual images on the page, can you tell what characters need to be input in order to solve this CAPTCHA? That\u0027s right it\u0027s \u002763F2\u0027. Just in case you can\u0027t figure that out from the four img tags, there\u0027s a convenient hidden form field that contains the required string as well. When the form is submitted the string stored in this hidden form field is compared to the string entered by the user to solve the CAPTCHA and if they\u0027re the same, then the CAPTCHA is considered solved.\u003C/p\u003E\n\u003Cp\u003EOn the server side, this was the code that generates the CAPTCHA images:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code\u0022\u003E\u003Ccode class=\u0022language-php\u0022 data-language=\u0022php\u0022\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESo the code constructs four img tags out of the possible 0-9 and A-H gif images stored in a directory on the server and they are output to the page. Totally. Awesome. A better example of cargo cult web development I have never seen. This implementation of a CAPTCHA deftly and completely negates the reason for its own existence. As with the previous admin area \u0027authentication\u0027 system, the only possible saving grace of this CAPTCHA might be that no one writing a spam bot would think that anyone would be this stupid and would likely not have written their spam bot to take advantage of such obvious buffoonery.\u003C/p\u003E\n\u003Ch3 id=\u0022happily-ever-after\u0022\u003EHappily ever after\u003C/h3\u003E\n\u003Cp\u003EThere was a happy ending to this story. The client\u0027s website has been live for some time now and I\u0027m relieved to say that none of this hilariously bad code made it onto the production website. In fact, most of the website was trashed aside from the visual design.\u003C/p\u003E\n\u003Cp\u003EJust because a website looks presentable on the surface doesn\u0027t necessarily mean that it is any good underneath the facade. And it\u0027s too bad this isn\u0027t more obvious to the people who typically commission such websites.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-09-25T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/09/25/cargo-cult-web-development",
      "summary": "Not too long ago, I was brought in on a failing website development project. The client had commissioned a website from one of their local web design/development companies, that company had sub-contracted the development of the site out and the web developer in question had skipped the country without finishing the project, never to be heard from again. The client was understandably perturbed by this and had lost faith in the company that they originally hired to do the work.",
      "tags": [
        "lamp",
        "php",
        "fail"
      ],
      "title": "Cargo cult web development",
      "url": "https://binarybalance.com.au/2010/09/25/cargo-cult-web-development"
    },
    {
      "content_html": "\u003Cp\u003EI\u0027ve never created a Ruby gem before, although I use other people\u0027s gems a lot. So I decided recently that I might have a go at making one myself. I needed to find something nice and small to start off with.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Ch3 id=\u0022some-background\u0022\u003ESome background\u003C/h3\u003E\n\u003Cp\u003EA while ago I came across a web startup called \u003Ca href=\u0022http://notifo.com/\u0022\u003ENotifo\u003C/a\u003E. They\u0027re one of the companies funded by the well regarded \u003Ca href=\u0022http://ycombinator.com/\u0022\u003EY Combinator\u003C/a\u003E venture firm. Notifo basically does one thing and does it pretty well as far as I can tell: they allow people to send notifications when stuff happens. You can join up to Notifo and create a \u0027service\u0027 that other Notifo users can subsequently sign up to and be notified when something happens. One example is the \u003Ca href=\u0022http://push.ly/\u0022\u003Epush.ly\u003C/a\u003E service that pushes a notification to you via Notifo when someone mentions your username on \u003Ca href=\u0022http://twitter.com/\u0022\u003ETwitter\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003ENotifo users need to download one of Notifo\u0027s apps in order to receive notifications. At the moment they have an iPhone app, an app that hooks into Growl for OS X and browser add-ons for Chrome, Safari and Firefox. I gather they are working on Android and Black Berry apps as well as something for Linux.\u003C/p\u003E\n\u003Ch3 id=\u0022some-foreground\u0022\u003ESome foreground\u003C/h3\u003E\n\u003Cp\u003EI wasn\u0027t so much interested in the Notifo \u0027service\u0027 side of things. I just wanted to create a really simple way that I could send myself notifications (to my iPhone) from my own Rails apps when something interesting happens. Enter \u003Ca href=\u0022http://github.com/gaelian/self-notifo\u0022\u003Eself-notifo\u003C/a\u003E. Full instructions for use are at the previous link. You can install with:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E$ sudo gem install self-notifo\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThis gem in its current form is quite tied to Rails and the normal convention in this case seems to be that you would usually release your code as a Rails plugin rather than a gem. But for a number of reasons - not the least of which being that I just wanted to write a gem - I went with a gem rather than a Rails plugin.\u003C/p\u003E\n\u003Cp\u003EIf you\u0027re looking for something in Ruby that does take into account the Notifo \u0027service\u0027 side of things as well and isn\u0027t tied to Rails specifically, \u003Ca href=\u0022http://github.com/jot/notifo\u0022\u003Etry this library\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EDisclaimer:\u003C/strong\u003E I have no affiliation with Notifo whatsoever, I just like the cut of their jib.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-09-19T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/09/19/new-gem-self-notifo",
      "summary": "I\u0027ve never created a Ruby gem before, although I use other people\u0027s gems a lot. So I decided recently that I might have a go at making one myself. I needed to find something nice and small to start off with.",
      "tags": [
        "ruby",
        "rails",
        "notifo",
        "gems"
      ],
      "title": "New gem: self-notifo",
      "url": "https://binarybalance.com.au/2010/09/19/new-gem-self-notifo"
    },
    {
      "content_html": "\u003Cp\u003E\u003Ca href=\u0022/2010/09/10/compiling-nginx-and-phusion-passenger-on-debian-lenny\u0022\u003EContinuing on from my previous post on compiling Nginx with Phusion Passenger\u003C/a\u003E, some configuration is now in order.\u003C/p\u003E\n\u003Cp\u003ETo give credit where due, I\u0027d like to mention that I found much help on the \u003Ca href=\u0022http://articles.slicehost.com/\u0022\u003ESlicehost articles and tutorials site\u003C/a\u003E and adapted some of their instructions for parts of this post. Thanks Slicehost!\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EI\u0027m using the root account, so there\u0027ll be no \u0027sudo\u0027 command used herein. Adjust your commands accordingly if you don\u0027t do things this way.\u003C/p\u003E\n\u003Ch3 id=\u0022adding-an-nginx-init-script\u0022\u003EAdding an Nginx init script\u003C/h3\u003E\n\u003Cp\u003EAs I compiled Nginx from source, this meant that no init script was created as it would have been were I to install Nginx via a Debian package. So one needs to be created.\u003C/p\u003E\n\u003Cp\u003EIf you have Nginx running, stop it:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# kill \u0060cat /usr/local/nginx/logs/nginx.pid\u0060\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ECreate the file that will become the init script:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# nano /etc/init.d/nginx\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EPaste this into /etc/init.d/nginx:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E#! /bin/sh\u003C/span\u003E\n\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E### BEGIN INIT INFO\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Provides:          nginx\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Required-Start:    $all\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Required-Stop:     $all\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Default-Start:     2 3 4 5\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Default-Stop:      0 1 6\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Short-Description: starts the nginx web server\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Description:       starts nginx using start-stop-daemon\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E### END INIT INFO\u003C/span\u003E\n\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\nDAEMON=/usr/local/sbin/nginx\nNAME=nginx\nDESC=nginx\n\ntest -x $DAEMON || exit \u003Cspan class=\u0022bb-code-number\u0022\u003E0\u003C/span\u003E\n\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Include nginx defaults if available\u003C/span\u003E\n\u003Cspan class=\u0022bb-code-keyword\u0022\u003Eif\u003C/span\u003E [ -f /etc/default/nginx ] ; \u003Cspan class=\u0022bb-code-keyword\u0022\u003Ethen\u003C/span\u003E\n        . /etc/default/nginx\n\u003Cspan class=\u0022bb-code-keyword\u0022\u003Efi\u003C/span\u003E\n\nset -e\n\n\u003Cspan class=\u0022bb-code-keyword\u0022\u003Ecase\u003C/span\u003E \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;$1\u0026quot;\u003C/span\u003E \u003Cspan class=\u0022bb-code-keyword\u0022\u003Ein\u003C/span\u003E\n  start)\n        echo -n \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;Starting $DESC: \u0026quot;\u003C/span\u003E\n        start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \\\n                --exec $DAEMON -- $DAEMON_OPTS\n        echo \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;$NAME.\u0026quot;\u003C/span\u003E\n        ;;\n  stop)\n        echo -n \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;Stopping $DESC: \u0026quot;\u003C/span\u003E\n        start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \\\n                --exec $DAEMON\n        echo \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;$NAME.\u0026quot;\u003C/span\u003E\n        ;;\n\n  restart|force-reload)\n        echo -n \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;Restarting $DESC: \u0026quot;\u003C/span\u003E\n        start-stop-daemon --stop --quiet --pidfile \\\n                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON\n        sleep \u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E\n        start-stop-daemon --start --quiet --pidfile \\\n                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS\n        echo \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;$NAME.\u0026quot;\u003C/span\u003E\n        ;;\n  reload)\n      echo -n \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;Reloading $DESC configuration: \u0026quot;\u003C/span\u003E\n      start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \\\n          --exec $DAEMON\n      echo \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;$NAME.\u0026quot;\u003C/span\u003E\n      ;;\n  *)\n        N=/etc/init.d/$NAME\n        echo \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;Usage: $N {start|stop|restart|reload|force-reload}\u0026quot;\u003C/span\u003E \u0026gt;\u0026amp;\u003Cspan class=\u0022bb-code-number\u0022\u003E2\u003C/span\u003E\n        exit \u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E\n        ;;\n\u003Cspan class=\u0022bb-code-keyword\u0022\u003Eesac\u003C/span\u003E\n\nexit \u003Cspan class=\u0022bb-code-number\u0022\u003E0\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EMake the file executable:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# chmod \u002Bx /etc/init.d/nginx\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAdd the script to the default run levels:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# /usr/sbin/update-rc.d -f nginx defaults\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENow you should be able to start, stop and restart Nginx just as with any other service:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# /etc/init.d/nginx start\u003C/span\u003E\n...\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# /etc/init.d/nginx stop\u003C/span\u003E\n...\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# /etc/init.d/nginx restart\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EMake sure you actually use the full path as above, rather than typing something like:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# nginx restart\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EBecause if you type just \u0027nginx restart\u0027 from some random directory on your server, you\u0027ll actually be calling the Nginx binary rather than the Nginx init script and things will not work as expected.\u003C/p\u003E\n\u003Cp\u003EThe init script will also be called on a reboot, so Nginx will automatically start.\u003C/p\u003E\n\u003Ch3 id=\u0022mirroring-the-standard-debian-layout-for-nginx\u0022\u003EMirroring the standard Debian layout for Nginx\u003C/h3\u003E\n\u003Cp\u003EIf you\u0027ve used Apache on Debian, you\u0027ll probably remember that it makes use of particular conventions regarding its files and directories. Most notably - and I think this is Debian specific - it makes use of two directories: \u0027sites-available\u0027 and \u0027sites-enabled\u0027. The \u0027sites-available\u0027 directory contains the configuration files for all virtual hosts and you then symlink specific configuration files from \u0027sites-available\u0027 to the \u0027sites-enabled\u0027 directory in order for those sites to be, well, enabled. If I had installed Nginx via a Debian package, this is the layout I would have ended up with and I like these conventions, so this is what I\u0027m going to mirror for my compiled form source Nginx.\u003C/p\u003E\n\u003Cp\u003ECreate the two main folders:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# mkdir /usr/local/nginx/sites-available\u003C/span\u003E\n...\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# mkdir /usr/local/nginx/sites-enabled\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Ch4 id=\u0022edit-the-default-config-file\u0022\u003EEdit the default config file\u003C/h4\u003E\n\u003Cp\u003ECreate a backup of the default Nginx config file (just in case):\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENow edit the original:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003Enano /usr/local/nginx/conf/nginx.conf\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EDelete the contents of nginx.conf and paste this in its place:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003Euser www-data;\nworker_processes  \u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E;\n\nevents {\n    worker_connections  \u003Cspan class=\u0022bb-code-number\u0022\u003E1024\u003C/span\u003E;\n}\n\nhttp {\n    include       mime.types;\n    default_type  application/octet-stream;\n\n    sendfile        on;\n\n    keepalive_timeout  \u003Cspan class=\u0022bb-code-number\u0022\u003E65\u003C/span\u003E;\n\n    gzip  on;\n\n    passenger_root /usr/local/lib/ruby/gems/\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.1\u003C/span\u003E/gems/passenger-2.\u003Cspan class=\u0022bb-code-number\u0022\u003E2.15\u003C/span\u003E;\n\n    include /usr/local/nginx/sites-enabled\u003Cspan class=\u0022bb-code-comment\u0022\u003E/*;\n\n}\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESave and close the file. Note the line \u0027include /usr/local/nginx/sites-enabled/*;\u0027 this is what tells Nginx to look in our \u0027/usr/local/nginx/sites-enabled/\u0027 directory for extra configuration files.\u003C/p\u003E\n\u003Ch4 id=\u0022create-a-default-virtual-host\u0022\u003ECreate a default virtual host\u003C/h4\u003E\n\u003Cp\u003EWe\u0027re next going to create a default virtual host config file:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# nano /usr/local/nginx/sites-available/default\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EPaste this into the file:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003Eserver {\n    listen       \u003Cspan class=\u0022bb-code-number\u0022\u003E80\u003C/span\u003E;\n    server_name  localhost;\n\n    location / {\n        root   html;\n        index  index.html index.htm;\n    }\n\n\n    \u003Cspan class=\u0022bb-code-comment\u0022\u003E# redirect server error pages to the static page /50x.html\u003C/span\u003E\n    \u003Cspan class=\u0022bb-code-comment\u0022\u003E#\u003C/span\u003E\n    error_page   \u003Cspan class=\u0022bb-code-number\u0022\u003E500\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E502\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E503\u003C/span\u003E \u003Cspan class=\u0022bb-code-number\u0022\u003E504\u003C/span\u003E  /\u003Cspan class=\u0022bb-code-number\u0022\u003E50\u003C/span\u003Ex.html;\n    location = /\u003Cspan class=\u0022bb-code-number\u0022\u003E50\u003C/span\u003Ex.html {\n        root   html;\n    }\n\n}\u003C/code\u003E\u003C/pre\u003E\n\u003Ch4 id=\u0022create-the-symlink\u0022\u003ECreate the symlink\u003C/h4\u003E\n\u003Cp\u003ESo Nginx only looks in \u0027/usr/local/nginx/sites-enabled/\u0027 for extra configuration files and our new default virtual host config file is in \u0027/usr/local/nginx/sites-available/\u0027, this means we need to now create a symlink from one to the other:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# ln -s /usr/local/nginx/sites-available/default /usr/local/nginx/sites-enabled/default\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ERestart Nginx and browse to whatever URL is the default for your server and you should get the standard \u0026quot;Welcome to nginx!\u0027 page. If you ever want to disable this default virtual host, just delete the symlink and restart Nginx.\u003C/p\u003E\n\u003Ch3 id=\u0022finishing-touches-to-rails-support\u0022\u003EFinishing touches to Rails support\u003C/h3\u003E\n\u003Cp\u003ESo the above should get you going OK for serving up basic pages with Nginx using virtual hosts. But I\u0027m actually wanting to run Rails apps on top of Nginx. When I compiled Nginx I added in the Phusion Passenger module so now I just have to enable it with the virtual host for a Rails app.\u003C/p\u003E\n\u003Cp\u003ELet\u0027s assume that DNS is all set up and you want to create an Nginx virtual host to run your new Rails app at http://fizzbuzz.com/.\u003C/p\u003E\n\u003Cp\u003ECreate the location that will store your website files:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# mkdir /var/www/fizzbuzz.com\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EPut your Rails app\u0027s files into this new directory. Note that you really can create this directory anywhere and call it whatever you like. I\u0027m just once again roughly following Debian conventions and my own preference here.\u003C/p\u003E\n\u003Cp\u003ECreate the virtual host config file:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# nano /usr/local/nginx/sites-available/fizzbuzz.com\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EPaste this into the file:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003Eserver {\n\n            listen   \u003Cspan class=\u0022bb-code-number\u0022\u003E80\u003C/span\u003E;\n            server_name  www.fizzbuzz.com;\n            rewrite ^/(.*) http://fizzbuzz.com/$\u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E permanent;\n\n           }\n\nserver {\n\n            listen   \u003Cspan class=\u0022bb-code-number\u0022\u003E80\u003C/span\u003E;\n            server_name fizzbuzz.com;\n            root /var/www/fizzbuzz.com/public;\n            passenger_enabled on;\n\n            access_log /var/www/fizzbuzz.com/log/access.log;\n            error_log /var/www/fizzbuzz.com/log/error.log;\n\n            }\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESome things to note are that the first server block just rewrites \u0027www.fizzbuzz.com\u0027 to \u0027fizzbuzz.com\u0027, if you have a desperate need for the \u0027www\u0027 then you can switch this around and change the \u0027server_name\u0027 in the second server block accordingly.\u003C/p\u003E\n\u003Cp\u003EThe second server block sets the public root of the Rails app, enables the Phusion Passenger module for this virtual host and sets the location for a couple of log files. You may also have to manually create these log files to start off with:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# touch /var/www/fizzbuzz.com/log/access.log\u003C/span\u003E\n...\n\u003Cspan class=\u0022bb-code-comment\u0022\u003E# touch /var/www/fizzbuzz.com/log/error.log\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ECreate the symlink:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# ln -s /usr/local/nginx/sites-available/fizzbuzz.com /usr/local/nginx/sites-enabled/fizzbuzz.com\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ERestart Nginx and you should be all set to ride Nginx down the rails.\u003C/p\u003E\n\u003Cp\u003EI haven\u0027t mentioned the use of anything like \u003Ca href=\u0022http://www.capify.org\u0022\u003ECapistrano\u003C/a\u003E for deployment. I may get around to writing about Capistrano at some point, but it\u0027s not like I really need to, there\u0027s heaps that\u0027s been written on it already and I\u0027m hardly an expert. If you\u0027re looking for a more automated way to deploy a Rails app that\u0027s probably a bit safer (at least for more complex projects) than just uploading to a directory and restarting the web server, then I encourage you to check out Capistrano. Sometimes though, uploading files and restarting the web server is exactly the straight forward process that I want and just using Nginx plus Phusion Passenger makes this easy.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-09-18T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/09/18/configuring-nginx-and-phusion-passenger",
      "summary": "Continuing on from my previous post on compiling Nginx with Phusion Passenger , some configuration is now in order.",
      "tags": [
        "debian",
        "rails",
        "ruby",
        "phusion-passenger"
      ],
      "title": "Configuring Nginx and Phusion Passenger on Debian Lenny",
      "url": "https://binarybalance.com.au/2010/09/18/configuring-nginx-and-phusion-passenger"
    },
    {
      "content_html": "\u003Cp\u003EAfter \u003Ca href=\u0022/2010/08/28/compiling-ruby-1-9-2-on-debian-lenny\u0022\u003Ecompiling Ruby 1.9.2 on my Debian Lenny web server\u003C/a\u003E, the next thing I wanted to do was get an actual web server going for serving up Rails apps. I\u0027ve been an Apache user for a long time but I\u0027d been hearing about \u003Ca href=\u0022http://nginx.org/\u0022\u003ENginx\u003C/a\u003E and how it\u0027s kicking ass and taking names, so I thought I might give it a go. I also needed some way to hook Rails up with Nginx.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EBack in the day, it could be a real pain in the ass to deploy Rails apps. There was \u003Ca href=\u0022http://www.modruby.net/en/\u0022\u003Emod_ruby\u003C/a\u003E for Apache which tried to be for Ruby what mod_php is for PHP. But it had issues when trying to run multiple applications and the project seems pretty dead.\u003C/p\u003E\n\u003Cp\u003EFor a time Zed Shaw\u0027s original Mongrel web server was the popular choice. One could set up a number of Mongrel instances working as application servers and have another web server, such as Apache sitting in front and proxying requests back to the Mongrels. But times have changed and Zed has moved on to new things (one of which is his \u003Ca href=\u0022http://sheddingbikes.com/posts/1283412933.html\u0022\u003EMongrel2 web server\u003C/a\u003E be interesting to see how that project matures).\u003C/p\u003E\n\u003Cp\u003EBut as I wanted to try out Nginx, I settled on \u003Ca href=\u0022http://www.modrails.com/\u0022\u003EPhusion Passenger\u003C/a\u003E (AKA mod_rails or mod_rack). It\u0027s a module that can be used with either Apache or Nginx and will take care of the action between a Rails app (or other Ruby based web app that follows the \u003Ca href=\u0022http://en.wikipedia.org/wiki/Rack_%28web_server_interface%29\u0022\u003ERack\u003C/a\u003E interface) and the web server.\u003C/p\u003E\n\u003Cp\u003EPhusion Passenger can make deploying a Rails app about as straight forward as using PHP and MySQL/Postgres with Apache.\u003C/p\u003E\n\u003Ch3 id=\u0022enough-with-the-history-lesson-get-on-with-it-god-damnit\u0022\u003EEnough with the history lesson, get on with it god damnit!\u003C/h3\u003E\n\u003Cp\u003EOK, so Nginx is available in the Debian repositories. Phusion Passenger can also be more automagically installed using \u003Ca href=\u0022http://www.modrails.com/install.html\u0022\u003Eother methods\u003C/a\u003E. But I wanted to get a better understanding of what\u0027s happening a little deeper under the hood, so I went for the more manual procedure.\u003C/p\u003E\n\u003Cp\u003EI\u0027m going to assume you\u0027ve got Ruby installed and working. I\u0027m also using aptitude for my package management and the root account, so there\u0027ll be no \u0027sudo\u0027 command used herein. Adjust your commands accordingly if you don\u0027t do things this way.\u003C/p\u003E\n\u003Ch3 id=\u0022if-you-wanna-be-a-passenger\u0022\u003EIf you wanna be a passenger\u003C/h3\u003E\n\u003Cp\u003EGrab the Phusion Passenger gem:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# gem install passenger\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThat\u0027s all we have to do with Passenger for now.\u003C/p\u003E\n\u003Ch3 id=\u0022drivers-start-your-nginx\u0022\u003EDrivers, start your Nginx\u003C/h3\u003E\n\u003Cp\u003EChange to the /usr/local/src directory:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# cd /usr/local/src\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThis is where we\u0027re going to be doing our work.\u003C/p\u003E\n\u003Cp\u003EDownload the Nginx source:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# wget http://nginx.org/download/nginx-0.7.67.tar.gz\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAt the time of this writing, 0.7.67 was the latest stable version of Nginx.\u003C/p\u003E\n\u003Cp\u003EExtract the files:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# tar xvzf nginx-0.7.67.tar.gz\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EChange into the newly extracted directory:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# cd nginx-0.7.67\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ETake care of some dependencies:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# aptitude install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ERun the configure script:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# ./configure \u2014sbin-path=/usr/local/sbin \u2014with-http_ssl_module \u2014add-module=\u0060passenger-config \u2014root\u0060/ext/nginx\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ENote that the \u0027passenger-config \u2014root\u0027 command you can see nested in there will be substituted with the path to the root of the Phusion Passenger gem that we installed earlier, it\u0027s just a shortcut so that you don\u0027t have to type in the full path. On my system, \u0027passenger-config \u2014root\u0027 would output \u0027/usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.15\u0027 but this may differ for you if you have Ruby installed somewhere else, you use a different version of Ruby or you install your gems somewhere else.\u003C/p\u003E\n\u003Cp\u003EA whole bunch of output should fly by in the terminal and you will eventually be presented with a summary of the Nginx configuration that looks something like this:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003EConfiguration summary\n  \u002B using system PCRE library\n  \u002B using system OpenSSL library\n  \u002B md5: using OpenSSL library\n  \u002B sha1 library is not used\n  \u002B using system zlib library\n\n  nginx path prefix: \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;/usr/local/nginx\u0026quot;\u003C/span\u003E\n  nginx binary file: \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;/usr/local/sbin\u0026quot;\u003C/span\u003E\n  nginx configuration prefix: \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;/usr/local/nginx/conf\u0026quot;\u003C/span\u003E\n  nginx configuration file: \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;/usr/local/nginx/conf/nginx.conf\u0026quot;\u003C/span\u003E\n  nginx pid file: \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;/usr/local/nginx/logs/nginx.pid\u0026quot;\u003C/span\u003E\n  nginx error log file: \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;/usr/local/nginx/logs/error.log\u0026quot;\u003C/span\u003E\n  nginx http access log file: \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;/usr/local/nginx/logs/access.log\u0026quot;\u003C/span\u003E\n  nginx http client request body temporary files: \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;client_body_temp\u0026quot;\u003C/span\u003E\n  nginx http proxy temporary files: \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;proxy_temp\u0026quot;\u003C/span\u003E\n  nginx http fastcgi temporary files: \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;fastcgi_temp\u0026quot;\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EYou might want to take note of this summary, as it can come in handy for knowing where config files are located etc.\u003C/p\u003E\n\u003Cp\u003ENow we make:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# make\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EMore output should fly by.\u003C/p\u003E\n\u003Cp\u003EUsually the next step is to type \u201Cmake install\u201D but as I\u0027ve mentioned elsewhere on this blog, I\u0027m a bit obsessive about keeping my file system clean and this is Debian, so I like to use checkinstall to wrap my compiled software up into a neat Debian package that can later be more easily removed.\u003C/p\u003E\n\u003Cp\u003EIf you don\u0027t have checkinstall, grab it:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# aptitude install checkinstall\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAnd we can press on:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# checkinstall -D make install\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThe \u0027-D\u0027 flag means that we\u0027re going to build a Debian package. Now checkinstall will ask you if you want to create some documentation for your new Nginx package:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003EThe package documentation directory ./doc-pak does not exist.\nShould I create a default set of package docs? [y]:\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EYou don\u0027t have to do this but I\u0027m going to, just for the hell of it. So let\u0027s answer \u0027y\u0027.\u003C/p\u003E\n\u003Cp\u003ENext you\u0027ll get:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003EPlease write a description \u003Cspan class=\u0022bb-code-keyword\u0022\u003Efor\u003C/span\u003E the package.\nEnd your description with an empty line or EOF.\n\u0026gt;\u0026gt;\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EType a description, something like:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u0026gt;\u0026gt; Nginx HTTP and reverse proxy server (\u003Cspan class=\u0022bb-code-number\u0022\u003E0.7.67\u003C/span\u003E)\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThen hit Enter and then Enter again as the description ends when you enter an empty line.\u003C/p\u003E\n\u003Cp\u003EYou should get something that looks like this:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E*****************************************\n**** Debian package creation selected ***\n*****************************************\n\nThis package will be built according to these values:\n\n\u003Cspan class=\u0022bb-code-number\u0022\u003E0\u003C/span\u003E -  Maintainer: [ root@server.domain.com ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E -  Summary: [ Nginx HTTP and reverse proxy server (\u003Cspan class=\u0022bb-code-number\u0022\u003E0.7.67\u003C/span\u003E) ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E2\u003C/span\u003E -  Name:    [ nginx ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E3\u003C/span\u003E -  Version: [ \u003Cspan class=\u0022bb-code-number\u0022\u003E0.7.67\u003C/span\u003E ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E4\u003C/span\u003E -  Release: [ \u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E5\u003C/span\u003E -  License: [ GPL ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E6\u003C/span\u003E -  Group:   [ checkinstall ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E -  Architecture: [ amd64 ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E8\u003C/span\u003E -  Source location: [ nginx-0.\u003Cspan class=\u0022bb-code-number\u0022\u003E7.67\u003C/span\u003E ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E9\u003C/span\u003E -  Alternate source location: [  ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E10\u003C/span\u003E - Requires: [  ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E11\u003C/span\u003E - Provides: [ nginx ]\n\nEnter a number to change any of them or press ENTER to continue:\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EIf you\u0027re happy with all that, then just hit Enter again. If you want to change anything, type the number of the line you want to change and hit Enter. Let\u0027s change the email address of the maintainer, type \u00270\u0027, then Enter. You should get:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003EEnter the maintainer\u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026#39;s name and e-mail address:\n\u0026gt;\u0026gt;\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EType in an email address and hit Enter:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003EEnter the maintainer\u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026#39;s name and e-mail address:\n\u0026gt;\u0026gt; not@any.com\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EWe should end up back at:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003EThis package will be built according to these values:\n\n\u003Cspan class=\u0022bb-code-number\u0022\u003E0\u003C/span\u003E -  Maintainer: [ not@any.com ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E -  Summary: [ Nginx HTTP and reverse proxy server (\u003Cspan class=\u0022bb-code-number\u0022\u003E0.7.67\u003C/span\u003E) ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E2\u003C/span\u003E -  Name:    [ nginx ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E3\u003C/span\u003E -  Version: [ \u003Cspan class=\u0022bb-code-number\u0022\u003E0.7.67\u003C/span\u003E ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E4\u003C/span\u003E -  Release: [ \u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E5\u003C/span\u003E -  License: [ GPL ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E6\u003C/span\u003E -  Group:   [ checkinstall ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E -  Architecture: [ amd64 ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E8\u003C/span\u003E -  Source location: [ nginx-0.\u003Cspan class=\u0022bb-code-number\u0022\u003E7.67\u003C/span\u003E ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E9\u003C/span\u003E -  Alternate source location: [  ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E10\u003C/span\u003E - Requires: [  ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E11\u003C/span\u003E - Provides: [ nginx ]\n\nEnter a number to change any of them or press ENTER to continue:\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAssuming we\u0027re now happy, we can just hit Enter.\u003C/p\u003E\n\u003Cp\u003EAnother bunch of output should fly by in your terminal until you get something that looks a bit like this:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E**********************************************************************\n\n \u003Cspan class=\u0022bb-code-keyword\u0022\u003EDone\u003C/span\u003E. The new package has been installed and saved to\n\n /usr/local/src/nginx-0.\u003Cspan class=\u0022bb-code-number\u0022\u003E7.67\u003C/span\u003E/nginx_0.\u003Cspan class=\u0022bb-code-number\u0022\u003E7.67\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E_amd64.deb\n\n You can remove it from your system anytime using:\n\n      dpkg -r nginx\n\n**********************************************************************\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESo as you can see, a new .deb package has been created in the Nginx source directory that you can \u2013 in the future and should you wish \u2013 install in a similar way to any local .deb package. The only caveat is that I gather any dependencies of a package created in this way are not taken into account when it is installed.\u003C/p\u003E\n\u003Cp\u003ELet\u0027s see if Nginx is present:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# nginx -v\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EShould output:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003Enginx version: nginx/\u003Cspan class=\u0022bb-code-number\u0022\u003E0.7.67\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EIn the words of Mr Burns: \u201Cexcellent\u201D.\u003C/p\u003E\n\u003Cp\u003ENext time I will cover some post installation configuration for Nginx \u2013 namely creating an init script, setting up virtual hosts, enabling the Phusion Passenger module and actually running a Rails app.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-09-10T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/09/10/compiling-nginx-and-phusion-passenger-on-debian-lenny",
      "summary": "After compiling Ruby 1.9.2 on my Debian Lenny web server , the next thing I wanted to do was get an actual web server going for serving up Rails apps. I\u0027ve been an Apache user for a long time but I\u0027d been hearing about Nginx and how it\u0027s kicking ass and taking names, so I thought I might give it a go. I also needed some way to hook Rails up with Nginx.",
      "tags": [
        "debian",
        "rails",
        "ruby",
        "phusion-passenger"
      ],
      "title": "Compiling Nginx with Phusion Passenger on Debian Lenny",
      "url": "https://binarybalance.com.au/2010/09/10/compiling-nginx-and-phusion-passenger-on-debian-lenny"
    },
    {
      "content_html": "\u003Cp\u003EI\u0027ve just recently been setting up my Debian Lenny web server to run Rails apps. So I thought I might document some of what I did for posterity and as a way to give back a little in return for all those blog posts and general instructional texts found on the Internet that have helped me over the years.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\u0022http://packages.debian.org/lenny/ruby1.9\u0022\u003ERuby 1.9.0 is already available in the Debian Lenny repositories\u003C/a\u003E, so if you\u0027re happy with this version you can of course just install the ruby1.9 package and be done with it. You could also check what backports are available and stuff. But I can\u0027t leave well enough alone though so if you\u0027re like me, read on.\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\u0022http://www.ruby-lang.org/en/news/2010/08/18/ruby-1-9.2-released/\u0022\u003ERuby 1.9.2\u003C/a\u003E has been officially released. Shiny.\u003C/p\u003E\n\u003Cp\u003EOf particular note to me was this entry in the FAQ section:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EThe standard library is installed in /usr/local/lib/ruby/1.9.1\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003ESeems a bit weird, but OK. Yay for backwards compatibility I guess?\u003C/p\u003E\n\u003Ch3 id=\u0022note-about-rubygems\u0022\u003ENote about RubyGems\u003C/h3\u003E\n\u003Cp\u003ERubyGems comes with Ruby 1.9.x so you won\u0027t need to install it separately. There is some debate about how RubyGems should work on Debian and the version of RubyGems that is available in the Debian repositories has been customised. I personally prefer just to have the standard RubyGems working in the standard way. So I\u0027m fine with RubyGems coming along with Ruby 1.9.x.\u003C/p\u003E\n\u003Cp\u003EYou\u0027ll need at least the libmysqlclient15-dev package before installing the mysql gem in order to use MySQL with your Rails apps, but as people don\u0027t always use MySQL as their database engine and this post is just about compiling Ruby, I\u0027m not going to get into that stuff here.\u003C/p\u003E\n\u003Ch3 id=\u0022forward-not-backward-upward-not-forward-and-always-twirling-twirling-twirling-towards-freedom\u0022\u003EForward, not backward, upward, not forward and always twirling, twirling, twirling towards freedom\u003C/h3\u003E\n\u003Cp\u003EI\u0027m using aptitude for my package management and the root account, so there\u0027ll be no \u0027sudo\u0027 command used herein. Adjust your commands accordingly if you don\u0027t do things this way.\u003C/p\u003E\n\u003Cp\u003EWe will be installing Ruby into the /usr/local directory, change to the /usr/local/src directory:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# cd /usr/local/src\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThis is where we\u0027re going to be doing our work.\u003C/p\u003E\n\u003Cp\u003ENext, we need to ensure that we\u0027ve got all the required build dependencies for compiling Ruby:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# aptitude install libc6-dev libssl-dev libreadline5-dev zlib1g-dev\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThe libc6-dev package \u003Cstrong\u003Eshould\u003C/strong\u003E be already installed on Debian Lenny. But I thought I\u0027d list it anyway.\u003C/p\u003E\n\u003Cp\u003EDownload the Ruby 1.9.2 source files:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p0.tar.gz\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EExtract the files from the tar ball:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# tar xvzf ruby-1.9.2-p0.tar.gz\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EChange into the newly extracted directory:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# cd ruby-1.9.2-p0\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ERun autoconf:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# autoconf\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ERun the configure script with the desired options:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# ./configure \u2014prefix=/usr/local \u2014with-openssl-dir=/usr \u2014with-readline-dir=/usr \u2014with-zlib-dir=/usr\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ELots of output should fly by as the configure script does its thing.\u003C/p\u003E\n\u003Cp\u003ENow we make:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# make\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EEven more output should start flying by in your shell terminal.\u003C/p\u003E\n\u003Ch3 id=\u0022obsessive-compulsive-software-compilation\u0022\u003EObsessive compulsive software compilation\u003C/h3\u003E\n\u003Cp\u003EUsually at this point the next step is to type the \u0027make install\u0027 command, but wait! I must digress for a moment.\u003C/p\u003E\n\u003Cp\u003EThe only thing I hate about compiling new software (other than when it doesn\u0027t work) is that once I\u0027ve installed the software into the sub-directories of /usr/local there\u0027s often no easy way to uninstall all the files if and when the time comes to do so. Some source includes the ability to run \u0027make uninstall\u0027 from the original directory that you compiled the software in, but in my experience to date, most don\u0027t. I could install everything into a single sub-directory (such as /usr/local/ruby) but this can cause issues later on when other software might be expecting compiled binaries and other files to be in certain locations when they\u0027re not. There are mitigations for this issue, but I think I know of a better solution.\u003C/p\u003E\n\u003Cp\u003EDebian package management is awesome. It allows you to easily add and remove packages at will with succinct commands, while dependencies are largely taken care of transparently. But what if like me, you\u0027re a bit obsessive compulsive about keeping your file system neat and you\u0027d like to have a similar capability even when compiling your own stuff from source? Debian to the rescue! If you don\u0027t already have it, grab the checkinstall package:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# aptitude install checkinstall\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThe checkinstall package will allow you to install your newly compiled software as a package that can then be managed (and most importantly to me, removed) like any other Debian package.\u003C/p\u003E\n\u003Cp\u003ENow we\u0027re going to install Ruby using checkinstall:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# checkinstall -D make install\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThe \u0027-D\u0027 flag means that we\u0027re going to build a Debian package. Now checkinstall will ask you if you want to create some documentation for your new Ruby package:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003EThe package documentation directory ./doc-pak does not exist.\nShould I create a default set of package docs? [y]:\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EYou don\u0027t have to do this, but it might be kind of fun. So let\u0027s answer \u0027y\u0027.\u003C/p\u003E\n\u003Cp\u003ENow you\u0027ll get:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003EPlease write a description \u003Cspan class=\u0022bb-code-keyword\u0022\u003Efor\u003C/span\u003E the package.\nEnd your description with an empty line or EOF.\n\u0026gt;\u0026gt;\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESo we can type in a description, maybe something like:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u0026gt;\u0026gt; Ruby Programming Language (MRI \u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.2\u003C/span\u003E)\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThen hit Enter and then Enter again as the description ends when you enter an empty line.\u003C/p\u003E\n\u003Cp\u003ENext up you should get something that looks like this:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E*****************************************\n**** Debian package creation selected ***\n*****************************************\n\nThis package will be built according to these values:\n\n\u003Cspan class=\u0022bb-code-number\u0022\u003E0\u003C/span\u003E -  Maintainer: [ root@server.domain.com ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E -  Summary: [ Ruby Programming Language (MRI \u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.2\u003C/span\u003E) ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E2\u003C/span\u003E -  Name:    [ ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2\u003C/span\u003E ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E3\u003C/span\u003E -  Version: [ p0 ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E4\u003C/span\u003E -  Release: [ \u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E5\u003C/span\u003E -  License: [ GPL ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E6\u003C/span\u003E -  Group:   [ checkinstall ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E -  Architecture: [ amd64 ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E8\u003C/span\u003E -  Source location: [ ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2\u003C/span\u003E-p0 ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E9\u003C/span\u003E -  Alternate source location: [  ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E10\u003C/span\u003E - Requires: [  ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E11\u003C/span\u003E - Provides: [ ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2\u003C/span\u003E ]\n\nEnter a number to change any of them or press ENTER to continue:\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EIf you\u0027re happy with all that, then just hit Enter again. If you want to change anything, type the number of the line you want to change and hit Enter. Let\u0027s change the email address of the maintainer, type \u00270\u0027, then Enter. You should get:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Enter the maintainer\u0026#39;s name and e-mail address:\u003C/span\u003E\n\u0026gt;\u0026gt;\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ELet\u0027s just type in an email address and hit Enter:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Enter the maintainer\u0026#39;s name and e-mail address:\u003C/span\u003E\n\u0026gt;\u0026gt; not@any.com\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EWe should get back to:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003EThis package will be built according to these values:\n\n\u003Cspan class=\u0022bb-code-number\u0022\u003E0\u003C/span\u003E -  Maintainer: [ not@any.com ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E -  Summary: [ Ruby Programming Language (MRI \u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.2\u003C/span\u003E) ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E2\u003C/span\u003E -  Name:    [ ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2\u003C/span\u003E ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E3\u003C/span\u003E -  Version: [ p0 ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E4\u003C/span\u003E -  Release: [ \u003Cspan class=\u0022bb-code-number\u0022\u003E1\u003C/span\u003E ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E5\u003C/span\u003E -  License: [ GPL ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E6\u003C/span\u003E -  Group:   [ checkinstall ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E7\u003C/span\u003E -  Architecture: [ amd64 ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E8\u003C/span\u003E -  Source location: [ ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2\u003C/span\u003E-p0 ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E9\u003C/span\u003E -  Alternate source location: [  ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E10\u003C/span\u003E - Requires: [  ]\n\u003Cspan class=\u0022bb-code-number\u0022\u003E11\u003C/span\u003E - Provides: [ ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2\u003C/span\u003E ]\n\nEnter a number to change any of them or press ENTER to continue:\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EAssuming we\u0027re now happy, we can just hit Enter.\u003C/p\u003E\n\u003Cp\u003EAnother bunch of output should fly by in your terminal until it stops at:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003ESome of the files created by the installation are inside the build\ndirectory: /usr/local/src/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2\u003C/span\u003E-p0\n\nYou probably don\u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026#39;t want them to be included in the package,\nespecially if they are inside your home directory.\nDo you want me to list them?  [n]:\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EI\u0027m not really interested in a list, so I type \u0027n\u0027 and checkinstall comes back with:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003EShould I exclude them from the package? (Saying yes is a good idea) [y]:\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EI\u0027ll take checkinstall\u0027s word for it and type \u0027y\u0027. A bit more output is generated and then:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E**********************************************************************\n\n \u003Cspan class=\u0022bb-code-keyword\u0022\u003EDone\u003C/span\u003E. The new package has been installed and saved to\n\n /usr/local/src/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2\u003C/span\u003E-p0/ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2\u003C/span\u003E_p0-1_amd64.deb\n\n You can remove it from your system anytime using:\n\n      dpkg -r ruby-1.\u003Cspan class=\u0022bb-code-number\u0022\u003E9.2\u003C/span\u003E\n\n**********************************************************************\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ESo as you can see, a new .deb package has been created in the Ruby source directory that you can \u2013 in the future and should you wish \u2013 install in a similar way to any local .deb package. The only caveat is that I gather any dependencies of a package created in this way are not taken into account when it is installed.\u003C/p\u003E\n\u003Cp\u003EBut the important thing from my point of view is that Ruby 1.9.2 is now installed on my server and I can remove it quite easily by typing:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# dpkg -r ruby-1.9.2\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ELet\u0027s just verify that Ruby is all happy and working:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# ruby -v\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThis should produce something similar to:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EOK, and typing:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003Eruby -ropenssl -rzlib -rreadline -e \u003Cspan class=\u0022bb-code-string\u0022\u003E\u0026quot;puts \u0026#39;Ruby appears to be working OK with openssl, zlib and readline support.\u0026#39;\u0026quot;\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EYou should get the expected output of:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# Ruby appears to be working OK with openssl, zlib and readline support.\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003ELastly, let\u0027s check out RubyGems:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003E\u003Cspan class=\u0022bb-code-comment\u0022\u003E# gem env\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThis should produce something like:\u003C/p\u003E\n\u003Cpre class=\u0022bb-code bb-code--highlighted\u0022\u003E\u003Ccode class=\u0022language-bash\u0022 data-language=\u0022bash\u0022\u003ERubyGems Environment:\n  - RUBYGEMS VERSION: \u003Cspan class=\u0022bb-code-number\u0022\u003E1.3.7\u003C/span\u003E\n  - RUBY VERSION: \u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.2\u003C/span\u003E (\u003Cspan class=\u0022bb-code-number\u0022\u003E2010\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E08\u003C/span\u003E-\u003Cspan class=\u0022bb-code-number\u0022\u003E18\u003C/span\u003E patchlevel \u003Cspan class=\u0022bb-code-number\u0022\u003E0\u003C/span\u003E) [x86_64-linux]\n  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.1\u003C/span\u003E\n  - RUBY EXECUTABLE: /usr/local/bin/ruby\n  - EXECUTABLE DIRECTORY: /usr/local/bin\n  - RUBYGEMS PLATFORMS:\n    - ruby\n    - x86_64-linux\n  - GEM PATHS:\n     - /usr/local/lib/ruby/gems/\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.1\u003C/span\u003E\n     - /root/.gem/ruby/\u003Cspan class=\u0022bb-code-number\u0022\u003E1.9.1\u003C/span\u003E\n  - GEM CONFIGURATION:\n     - :update_sources =\u0026gt; true\n     - :verbose =\u0026gt; true\n     - :benchmark =\u0026gt; false\n     - :backtrace =\u0026gt; false\n     - :bulk_threshold =\u0026gt; \u003Cspan class=\u0022bb-code-number\u0022\u003E1000\u003C/span\u003E\n  - REMOTE SOURCES:\n     - http://rubygems.org/\u003C/code\u003E\u003C/pre\u003E\n\u003Cp\u003EThere you have it. Ruby 1.9.2 and RubyGems 1.3.7 installed on Debian Lenny, using checkinstall for easy removal.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-08-28T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/08/28/compiling-ruby-1-9-2-on-debian-lenny",
      "summary": "I\u0027ve just recently been setting up my Debian Lenny web server to run Rails apps. So I thought I might document some of what I did for posterity and as a way to give back a little in return for all those blog posts and general instructional texts found on the Internet that have helped me over the years.",
      "tags": [
        "ruby",
        "debian"
      ],
      "title": "Compiling Ruby 1.9.2 on Debian Lenny",
      "url": "https://binarybalance.com.au/2010/08/28/compiling-ruby-1-9-2-on-debian-lenny"
    },
    {
      "content_html": "\u003Cp\u003EI\u0027ve been working in the web industry for about a decade now. My first job was customer facing technical support for an ISP, but I soon moved towards web design and development.\u003C/p\u003E\n\u003Cp\u003EThroughout my life and career, I\u0027ve never kept a blog (until now). I almost exclusively posted on forums, mailing lists, chatted on IRC etc. under a pseudonym. I stopped really even thinking about it, it became just the way I rolled.\u0026lt;!--more--\u0026gt;\u003C/p\u003E\n\u003Cp\u003EI only created a Facebook account in late 2007 mainly to see what all the fuss was about and to appease a friend who wanted to initiate me into the \u003Ca href=\u0022http://www.facebook.com/apps/application.php?id=13066336846\u0022\u003ETransformers Archive\u003C/a\u003E. I got onto Twitter in early 2009. I suspect that I created a LinkedIn account only last year also. So what\u0027s the reason for this impressively late uptake of some of the most popular online social networking sites, especially for a person who works with the web every day?\u003C/p\u003E\n\u003Ch3 id=\u0022paranoia-not-the-role-playing-game\u0022\u003EParanoia (\u003Ca href=\u0022http://en.wikipedia.org/wiki/Paranoia_%28role-playing_game%29\u0022\u003Enot the role playing game\u003C/a\u003E)\u003C/h3\u003E\n\u003Cp\u003ESomewhere along the way, I picked up this notion that one really needs to be careful to maintain one\u0027s privacy. If the general attitude many people seem to have towards online privacy these days is any indication, I think I can safely say that my own attitude towards the subject may be viewed by many as quite paranoid.\u003C/p\u003E\n\u003Cp\u003ESo where did my burning desire to maintain privacy come from? While I am about as far away from being a celebrity as one can get (and quite happy about this), other people close to me have had a mixed relationship with publicity at one time or another. It also seems to be getting easier and easier to transgress against \u003Ca href=\u0022http://theirtoys.com/sexblog/sex-offender-paranoia-weve-gone-too-far.html\u0022\u003Elaws that make no sense\u003C/a\u003E as our societies grind steadily onwards. Add to these points that I am a relatively introverted person by nature and this probably goes a ways to explaining where my robust desire to maintain privacy stems from.\u003C/p\u003E\n\u003Ch3 id=\u0022just-because-youre-paranoid-doesnt-mean-they-arent-after-you\u0022\u003EJust because you\u0027re paranoid doesn\u0027t mean they aren\u0027t after you\u003C/h3\u003E\n\u003Cp\u003ELike probably most Internet geeks, I enjoy memes and the one place that\u0027s responsible for more than its fair share is \u003Ca href=\u0022http://en.wikipedia.org/wiki/4chan\u0022\u003E4chan\u003C/a\u003E. 4chan or perhaps more specifically the particular the section of 4chan known as /b/ is quite inextricably linked to the fascinating Internet phenomenon known as \u003Ca href=\u0022http://en.wikipedia.org/wiki/Anonymous_%28group%29\u0022\u003EAnonymous\u003C/a\u003E. Alternatively known by various names depending how the party doing the naming views the actions being taken by Anonymous at the time. I see Anonymous as a bit like a modern incarnation of a capricious god from Greek myth who might one day be your greatest saviour, guiding you to wealth and victory over your enemies, while the next day deciding to give you boils and screw your wife... \u003Ca href=\u0022http://www.reddit.com/r/IAmA/comments/cxqzb/as_requested_iama_very_early_4chan_user/\u0022\u003EIf that god was largely confined to the Internet\u003C/a\u003E. Surely are not all our gods shards of a mirror that reflect the collective attitudes of humanity.\u003C/p\u003E\n\u003Cp\u003EBut back to privacy. There\u0027s been more than a few occasions where the \u201CInternet Hate Machine\u201D has decided that its \u003Ca href=\u0022http://knowyourmeme.com/memes/jessi-slaughter\u0022\u003Ecollective wrath\u003C/a\u003E shall be brought down upon \u003Ca href=\u0022http://www.reddit.com/r/IAmA/comments/ba5t0/iama_person_who_has_been_badly_harassed_by_4chan/\u0022\u003Ean individual\u003C/a\u003E. Whether these individuals deserved the harassment they received is irrelevant to my discussion today. What I think can be pretty well undisputed is that all of these individuals must have deeply regretted not keeping an iron grip upon their online privacy.\u003C/p\u003E\n\u003Cp\u003EHarassment from Anonymous has never really concerned me personally. Like I said, I\u0027m an Internet geek. I understand Internet culture and while I am not active on /b/ and have never participated in any raids, I do feel a certain affinity with the peoples who inhabit the subcultures enabled by the Internet.\u003C/p\u003E\n\u003Cp\u003EBut online harassment and stalking in general terms has always been one factor that I kept in my mind when considering how much of myself I should be putting online.\u003C/p\u003E\n\u003Ch3 id=\u0022facebook\u0022\u003EFacebook\u003C/h3\u003E\n\u003Cp\u003EI created my Facebook account with my eyes open. I knew the Zuckerberg back story and that any value Facebook has as a business is tied pretty tightly to how well they walk the line between \u003Ca href=\u0022http://www.telegraph.co.uk/news/uknews/1562752/Facebook-under-fire-over-targeted-advertising.html\u0022\u003Eexploiting the data they store\u003C/a\u003E for their users and not \u003Ca href=\u0022http://www.msnbc.msn.com/id/38324957/ns/technology_and_science-tech_and_gadgets/\u0022\u003Epissing those same users off too much\u003C/a\u003E. Even if one trusts Facebook its self, third party applications using Facebook as their platform seem like a minefield of possible privacy issues.\u003C/p\u003E\n\u003Cp\u003EThere are definitely legitimate privacy concerns related to Facebook but I have found some advantage to being there, occasionally someone I\u0027ve lost contact with will find me through Facebook and that\u0027s cool. Working in the web industry makes me feel that I should at least keep a finger on the pulse of what\u0027s going on with the famous websites of the day. But the time sink aspect of the site I just don\u0027t go in for, I\u0027d rather be doing something productive or even vegetating on the couch more than poking and throwing sheep or whatever the kids are doing these days. To be honest, it\u0027s not even the privacy concerns that turn me off Facebook the most, it\u0027s the interface, the feel of the eco-system that Facebook has become. It\u0027s so sprawling and busy. Can there be such a thing as too much AJAX? If there\u0027s a site that might suggest the affirmative, it\u0027s Facebook. So in any case, I joined, immediately locked down my account and visited the site occasionally.\u003C/p\u003E\n\u003Ch3 id=\u0022twitter\u0022\u003ETwitter\u003C/h3\u003E\n\u003Cp\u003EI joined Twitter around the time that I last moved workplaces. Some of the people I began working with were on Twitter and I decided to finally give in and try it out. The simplicity of Twitter when compared to the monstrosity of jumbled features that is Facebook was a welcome difference. Although some \u003Ca href=\u0022:http://www.theaustralian.com.au/business/media/geo-tagging-tweets-a-great-tip-off-for-burglars/story-e6frg996-1225890465121\u0022\u003Eprivacy concerns\u003C/a\u003E remained in my mind, most criticism I see of Twitter usually cites \u003Ca href=\u0022http://leoville.com/buzz-kill\u0022\u003Einanity\u003C/a\u003E more so than privacy. \u003Ca href=\u0022http://www.joelonsoftware.com/items/2010/03/14.html\u0022\u003EMr Joel Spolsky puts it quite well\u003C/a\u003E:\u003C/p\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E\u201CAlthough I appreciate that many people find Twitter to be valuable, I find it a truly awful way to exchange thoughts and ideas. It creates a mentally stunted world in which the most complicated thought you can think is one sentence long. It\u0027s a cacophony of people shouting their thoughts into the abyss without listening to what anyone else is saying. Logging on gives you a page full of little hand grenades: impossible-to-understand, context-free sentences that take five minutes of research to unravel and which then turn out to be stupid, irrelevant, or pertaining to the television series Battlestar Galactica. I would write an essay describing why Twitter gives me a headache and makes me fear for the future of humanity, but it doesn\u0027t deserve more than 140 characters of explanation, and I\u0027ve already spent 820.\u201D\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Cp\u003EI agree with Joel that Twitter is an awful way to exchange thoughts and ideas but I don\u0027t use it for that very often. Twitter to me is a broadcast medium and I am most often in a consumer role, using it mainly to stay updated on people, projects and news that\u0027s of interest to me. If I want to have anything approaching meaningful two-way communication then Twitter would not be my first choice of tool. Besides, I like Battlestar Gallactica. So in any case, I joined, immediately locked down my account and visited the site more than occasionally.\u003C/p\u003E\n\u003Ch3 id=\u0022google\u0022\u003EGoogle\u003C/h3\u003E\n\u003Cp\u003ESo now to the big one, the Internet giant trying not to be evil and what I suppose is the turning point in my little tale. I switched to using Gmail as my primary email provider last year. I thought long and hard about this. I knew about the \u003Ca href=\u0022http://en.wikipedia.org/wiki/Gmail#Privacy\u0022\u003Econtext-sensitive advertisements\u003C/a\u003E and this alone was enough to keep me away from using the service for anything other than in a very limited capacity since Gmail launched. My primary email address was provided by my ISP, and I kept and backed up all mail locally. The main reason I finally switched to Gmail? Probably the main reason many people do: Convenience. I got an iPhone and wanted an easy solution that would allow me to synchronise email across my home desktop email client, iPhone and other Internet connected computers I might be using. Gmail and Google Sync sounded worth a go. While I still keep local backups of my data, the idea of having an extra off-site backup of my emails in \u201Cthe cloud\u201D seemed like a nice bonus. The trade-off is that some automated process on Google\u0027s end now reads my email... in aggregation with millions of other people\u0027s email. Sure, it was a little creepy the first time I noticed an advert in the Gmail browser based interface about accommodation in Japan while I was conducting an email conversation with a friend about a planned trip to Japan, but I got over it.\u003C/p\u003E\n\u003Cp\u003ESo began in earnest my slight but definite shift on the issue of online privacy.\u003C/p\u003E\n\u003Cp\u003EFor a long time I used to do funny things like log out of my Google account before actually Googling anything, in the (no doubt vein) hope that this might make it harder for Google to associate my search queries with my identity. Now I don\u0027t care.\u003C/p\u003E\n\u003Cp\u003EI started using Google Reader as my feed aggregator, so now not only can Google read my email and know what I search for, but they know a fair chunk of what I read online too. And I don\u0027t care.\u003C/p\u003E\n\u003Ch3 id=\u0022do-i-have-a-point\u0022\u003EDo I have a point?\u003C/h3\u003E\n\u003Cp\u003EBy this stage dear reader, I\u0027m starting to wonder this myself. But yes, I do have a point:\u003C/p\u003E\n\u003Cp\u003EYou can\u0027t live in fear.\u003C/p\u003E\n\u003Cp\u003EIt\u0027s time to try something a little different. Yes, that\u0027s what I\u0027ve written. Yes, that\u0027s what I\u0027ve searched for. Yes, that\u0027s what I read. Yes, that\u0027s what I think and I\u0027m willing to stand behind it all. Living involves accepting and calculating degrees of risk on a daily basis and I feel it\u0027s time for some recalculation.\u003C/p\u003E\n\u003Cp\u003EI\u0027m absolutely not advocating ignoring the issue of online privacy. Certainly there are areas of my life that I would prefer remain somewhat compartmentalised. I won\u0027t be posting my credit card number online for all to see or anything stupid like that and certain personal information about me will remain scarce.\u003C/p\u003E\n\u003Cp\u003EThere\u0027s still a little voice somewhere deep down that says \u201CWhat are you doing?! You know they can find you!\u201D But I\u0027ve spent a long time in consideration of these issues and I\u0027m happy with my decisions. Granted it\u0027s probably a little easier for me because I work in the web industry and by now have a pretty intuitive understanding of what privacy issues exist in this space. Before you punch your credit card details into an online store, do you instinctively glance up at the address bar of your browser to see if the URL of the page you\u0027re on begins with \u201Chttps://\u201D and that the domain is what you expected it to be? If you don\u0027t feel sure to manage your online safety and privacy on your own then may I suggest that you find a friendly Internet geek to assist.\u003C/p\u003E\n\u003Ch3 id=\u0022living-in-the-future\u0022\u003ELiving in the future\u003C/h3\u003E\n\u003Cp\u003ESo I\u0027m starting a blog, I\u0027m unlocking my Twitter account and I will continue to use a number of Google\u0027s services in a \u2013 to borrow a phrase \u2013 \u201Calert but not alarmed\u201D kind of way. I might even get around to filling out my LinkedIn profile at some stage. But I have a feeling I still won\u0027t be doing that much on Facebook, that place is a hole.\u003C/p\u003E\n",
      "date_modified": "2026-06-25T00:00:00.0000000\u002B00:00",
      "date_published": "2010-08-25T00:00:00.0000000\u002B00:00",
      "id": "https://binarybalance.com.au/2010/08/25/online-privacy-inspect",
      "summary": "I\u0027ve been working in the web industry for about a decade now. My first job was customer facing technical support for an ISP, but I soon moved towards web design and development.",
      "tags": [
        "privacy",
        "twitter",
        "facebook",
        "google",
        "anonymous"
      ],
      "title": "\u0022Online Privacy\u0022.inspect",
      "url": "https://binarybalance.com.au/2010/08/25/online-privacy-inspect"
    }
  ],
  "language": "en-AU",
  "title": "Binary Balance",
  "version": "https://jsonfeed.org/version/1.1"
}