• Fiddling with NeXTSTEP

    I bought my first Mac just 3 or 4 years ago. Before that I used to alternate between Windows and Linux, mostly sticking to Linux. The flexibility and complexity was something I liked most about Linux. Compiling a new kernel each time I inserted a new piece of hardware into my computer and fixing errors until a game or application would compile and install successfully used to keep me entertained for days and nights on end. The absence of these exact things is what made me buy an Apple later; it just works.

    This week I realised that while I’m quite familiar with the history of DOS, Windows, Linux, Amiga, C64, BeOS and so on, Mac OSX’s predecessors are a mystery to me. A few brief experiences with NeXT workstations and iMacs in public places aside, I’ve never used the system before OSX. Obviously exploring this makes for a perfect spare time project. I managed to install NeXTSTEP in Parallels and tried to get past greyscale graphics, which proved to be difficult. After reading some experiences by others I swithed to VirtualBox, which allows you to customize hardware properties, like ethernet cards and sound devices. VirtualBox with OPENSTEP (NeXTSTEP with OpenStep) and the latest update almost provides a plug and play experience due to much improved driver support. I took some screenshots running OPENSTEP 4.2 at 1024x768 pixels with 32bit colors (a setup that cost about $ 15,000 when it was released).

    Danger Cove A screenshot of OmniWeb (like all browsers at the time) lacked support for stylesheets, or almost any of the features we’re used to today. Enabling javascript caused every site I tried to crash.

    Facebook & Doom This screenshot shows Facebook, looking rather broken, and DOOM in the front. id Software used NeXT systems to create the famous first person shooter. Relying on the Objective-C based development environment to create most of the tools, like the level editor. Speaking of which..

    Interface Builder While Xcode 4.2 and InterfaceBuilder 4.2 were released almost two decades apart, they feel strikingly similar; dragging and dropping components and attaching their outlets to ‘First Responders’, it’s all there.

    EDIT: Over at Hacker News, Zev provided a link to a video of Gene Backlin giving a talk at SecondConf last year, titled ‘NeXT to X’. About 21 minutes into the video Gene walks through a screenshot supported comparison of creating the exact same app using development environments that were created 20 years apart.

    YouTube has some pretty cool videos that show Steve Jobs demoing NeXTSTEP. Like this one, where Steve talks about what he calls ‘interpersonal computing’:

    Or this ‘secret’ video, supposedly only for the eyes of fresh NeXT employees:

    Fiddling around with NeXTSTEP has been fun. It reminded me that I tried, but never really liked, the Linux window manager called WindowMaker, which I did knew was based on NeXTSTEP. WindowMaker to me felt out of place on Linux and inferior to Gnome, KDE, Enlightenment and other window mangers at the time. Like OSX today, the NeXTSTEP interface feels a lot more comfortable on the system that it’s been designed for.

    Some sites to help install OPENSTEP yourself:

  • Apps for the Planet talk

    I gave a talk a the Apps for the Planet event. It’s about doing rapid creative projects and contains a couple of examples of projects I did, a more extensive walkthrough of a particular project and a rundown of tools and principles I like to use.

  • Html5-boilerplate gem and no more posting/deleting etc.

    For no apparent reason all the post/delete/put requests I was doing in my brand new Rails project where failing… Forms would not create anything. The problem only appeared occurred on my live server running Phussion Passenger. No issues on WEBrick.

    After a little searching I found the issue in the .htaccess files. Created by the html5-boilerplate gem in /public/.htaccess.

    Comment the following lines on line 348 and the problem goes away:

    <IfModule mod_rewrite.c>
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
      RewriteRule ^(.*)$ /$1/ [R=301,L]

    I’m guessing the other rewrite rules are problematic as well. A better fix would be to only rewrite when using GET.

  • TTResponds update

    I’ve updated TTResponds to include some requests people have made.

    • You can now specify if you want to send HTML emails.
    • You can set the sheet being used for the form (defaults to the first one).
    • You can limit the amount of emails being sent. Just the first 10 entries for example (-1 is unlimited).

    The script has been submitted to the Apps Script Gallery, but may take a while to appear. You can grab it right now from Github.

    Notice: if you’re already using a previous version of the script. Remove the config sheet. Open the scripts editor, copy-paste the new script over the old one. Run the createMenu method. And then select Create config from the TTResponds menu item. This will make sure the new configuration options appear on your configuration screen.

  • Omniauth strategy for Google OpenID+OAuth Hybrid Protocol login

    Quite the title and quite cool to use. The Hybrid Protocol combines OpenID and OAuth in such a way that with one flow you can ask for authentication (and get someones account information, like name and email) and authorization (a token) for a set of services specified in a scope.

    Apart from providing a much cleaner user experience, it’ll save you a bunch of code. Especially via Omniauth.

    I’ve created a fork (read update) that contains the google_hybrid strategy and an example project that implements it.

    UPDATE: My strategy just got merged into Omniauth’s master branch. So just use Omniauth instead of my fork.

    To see how it works, try this demo.