Spoiled by modern technology – Multiple Monitors

Jeff Atwood over at Coding Horror has been writing about the value of multiple monitors for years, and I have to say that I completely and totally agree with him, especially after the last week. You’ve seen what my desk at work looks like. (Although I’m thinking of getting rid of the 4th monitor. It’s a bit too much). At my previous job, I talked the boss into a dual monitor setup, and was ultimately responsible for getting dual monitor setups for everybody in the office. It’s amazing what a difference it makes for productivity.

Personally, I love the 3 monitor setup. My typical development environment is set up as follows:

  1. Left monitor: Emulator/Debugger/Logging tools, etc.
  2. Middle Monitor: Code – either a collection of text files, or IDE. Depends on what I am working on.
  3. Right Monitor: Reference Materials – usually one or more Firefox windows with a couple of dozen tabs open between them.

This allows me to quickly glance between windows without requiring a mental context switch. This is especially useful when referring to code and logging/debugging info at the same time or to code and reference material – without having to keep switching windows and risk dropping all of the variables that I am juggling in my head.

Over the past week or so for Christmas break, I’ve been home, so I’ve been developing on the laptop. I finished adding support for Tiny Tiny RSS to FeedSpider! (Now if HP would just release the thing to the app catalog…) But, it meant that I was stuck using the laptop’s tiny 17” inch screen. (Yes, I know, it’s a big laptop. But it’s a drastic change from dual 23” monitors.) I tried using Spaces and that is almost as good – at least the best experience that you’re going to get on a single screen. For my environment, it is very useful to be able to tie apps to individual spaces and switch between them with a keystroke. But, you’re still stuck mentally context switching.

So, I’m spoiled. While the laptop works, I don’t think that I could ever go back to a single monitor setup permanently. I’m looking forward to getting back to the office and getting some development done on a real setup.

The Joy of Creation

Nothing is quite as satisfying as finishing a project that you’ve been working on for some time, especially if its been sitting on your desk for a while – important but not urgent. For me, that has been adding Feedly integration to FeedSpider over the last week or so. That is now complete, and I am just waiting for the guys over at Feedly to push my new client id to production so that I can release the app. (As a bonus, I also added support for BazQux Reader. It only took about half an hour thanks to their very Google-like API.)

The biggest challenge was implementing OAuth support (detailed in my last post), but between a few false starts with AOL reader, which requires the same technology, and work piling up at my day job, I got it done. The rest of the project was merely tweaking the app to support Feedly’s API, which is Google-like, but just different enough to create it’s own challenges, especially on the platform that I’m working on. And now, that’s finished too.

While I can’t take credit for building the app from the ground up, (Darrin Holst did an excellent job of architecting it), I have done some significant tinkering under the hood, and am very proud of reworking the API and login/credential layers so that the app can properly and easily handle multiple providers with different requirements. This was aptly demonstrated by how easy is was to integrate BazQux Reader. I just had to drop in a new app API, and add the service to the service list. No other changes required.

One of the things that I love about programming is the feeling of having built something, even if it’s just a bunch of bits. It gives you a certain satisfaction and an energy that can’t be duplicated – make you feel like you can take on the world, and makes you feel ready to go energetically into the next project. That’s something that’s feels like its missing nowadays – and why I intend to keep programming and building computers and systems for many years to come.

Programming via clever hack

I picked up an HP Touchpad shortly after the firesale back in 2011, and have been using it as my daily driver ever since – I even picked up a Pre 3 a little later to replace my aging iPhone 4. Suffice it to say, I’m a big fan of the webOS operating system, even though it’s been a while since it was updated.

Of course, with no new hardware on the horizon, and no official updates coming down the pipe for these devices, (although LG is still working hard on developing Open webOS), developers have left for greener pastures, and apps and services have slowly stopped working. One of the main things that I use my devices for is consuming RSS feeds. Until it was shut down, I used Google reader, and one of the best Google Reader apps for webOS: Feeder. After it shut down, we were kind of in a bind, as many Google Reader alternatives sprang up, but no apps supported them, and the developer had left for greener pastures.

So, as a developer, what am I to do but roll my own? Fortunately, Feeder had been open sourced when the developer finished with it, so I forked it and have been working on “FeedSpider” ever since, adding support for The Old Reader and InoReader. But that’s not the clever hack. Both applications cloned the Google Reader API (mostly) and allowed support for simple authentication using ajax calls, so adding support was pretty easy.

Where the clever hack comes in is when dealing with Feedly. Feedly is the largest of the Google Reader successors, and just opened their API up to the public fairly recently. What makes this challenging is that Feedly uses OAuth for authentication, which webOS does not support very well. Fortunately, somebody else already came up with a clever hack for that, which, in short, captures the OAuth authorization code from the browser when it redirects to redirect uri and allows the app to use it. The library mostly works for Feedly, but not quite.

My contribution to the clever hacks list is two-fold. There is a bug in webOS on tablets that causes it not to pop up the keyboard when using a webview inside an app. (Works fine on phones, and I need to use this method to keep support for old devices) that I had to hack around by manually causing the keyboard to pop up then you go to the Twitter, WordPress and Google OAuth providers. I did that by watching for the urlChanged event and acting accordingly.

The more interesting part of the hack was that Feedly forces you to register your redirect URI with them, and will only let you use the one that you registered. Since I’m currently in sandbox mode, they gave me two options, http://localhost, or urn:ietf:wg:oauth:2.0:oob. Localhost won’t work on a webOS device. The browser will just time out. It never actually tries to do the redirect in a way such that I can catch it. The other one will try to do the redirect, but, it generates a “MIME type not supported error.” Here’s the fun bit – this raises a “Mojo.Event.webViewMimeNotSupported” event, which returns the URL that it is trying to redirect to. So, I catch the event, feed it to the filter and get the OAuth code, allowing me to log in, and we’re in business! (Yes this means that I am making good progress on Feedly support and hope to deliver it as a Christmas gift).

This is one of the fun parts for developing for poorly supported operating systems – there’s always a clever hack that will let you do what you want to do, even if the path is a little roundabout at times.

Adventures In Retrocomputing: IIGS Project Update

It seems like with any sort of popular product, there is a certain cycle regarding it’s availability. At first, you can buy it new at retail fairly easily, then the next new thing comes out and it gets harder to find at retail, but is marked down significantly. Then the secondary market opens up (ie. eBay, Craigslist, Garage Sales, Flea Markets, etc.) and you can get whatever you were looking for for dirt cheap because everybody wants to blow it off. Then, finally, as things get more rare or collectable, they begin to fetch higher prices. I’ve noticed classic video game consoles start to trend this way within the past few years – still highly available, but people are beginning to ask more for them (more about that in another blog post), and the Apple II seems to be heading toward the tail end of this cycle.

Looking at various info sources, it looks like even as recently as 5 years ago, old IIGS hardware and accessories were cheaply and readily available through eBay. Nowadays, basic systems are still plentiful (for example, I could have picked up a full Limited Edition “Woz” last week for $150 plus shipping) but they typically don’t come with much in the way of upgrades, and it is becoming more and more difficult to find the upgrades on their own. For example, a Transwarp GS card was listed a couple of weeks ago, and sold for $425. One of those might pop up once every few weeks to a month.

That being said, as long as you are patient and keep an eye on the auctions, you can find the occasional gem. While the Apple 1MB RAM cards are still relatively plentiful (even if most of them are only fitted with 256kb) 4 and 8MB RAM cards are almost impossible to come by on eBay nowadays (although you can still purchase Sirius cards from 16sector.com. They’re a bit pricy though.) – fortunately for me, I managed to find a 4MB Sequential Systems RAM GS card for a decent price, and it works! So, with 5MB of RAM total, I’m now able to take better advantage of the hardware and run GS/OS software and games that I couldn’t before. Another item off the checklist!