Goodbye Prism, Hello Fluid

Well, it’s finally happened. Google has dropped support in Gmail for the version of Gecko used by Mozilla Prism. This means that Gmail has to fall back on basic html mode. So, clicking on an email causes it to open up a new Firefox window for the email – rendering Prism completely unusable.

Of course, it was just a matter of time. Prism hasn’t been updated in almost 4 years – ever since Mozilla stopped developing an embeddable version of Gecko, and tied it into Firefox development. And, it seems like the idea of Site-Specific Browsers (SSBs) never took off.

Personally, I’m a huge fan of the concept. For rich web-apps like Gmail, it just makes so much sense! I love having a dedicated Gmail window that is sandboxed from the rest of my browsing environment, giving me the full power of the Gmail web client, without having to keep my main browser signed into Google. It also means that I can put it up on it’s own monitor!

Fortunately, while the concept hasn’t really taken off, there is still a solution, at least for the Mac. For $5, I picked up a copy of Fluid, which allows me to set up a sandboxed SSB using a modern version of WebKit, giving me my Gmail app back. There are still a couple of quirks that I need to get used to, but it’s nice to know that I’m not going to have to drastically change my workflow.

Wireless mice and cordless phones

Learned something new this week about (modern) cordless phones – they can interfere with wireless mice.

Customer had a problem with their wireless mouse (mouse + dongle, rather than Bluetooth). Whenever they were using it on their desk, it would act wonky, especially if a YouTube video was running, or the computer was under similar load.

Customer tried replacing both the mouse and the mousepad (in case something was screwing with the laser) with no luck, and the mouse worked fine on my workbench. So, I went over to take a look and check for sources of wireless interference. There was nothing obvious (no microwaves in the office, wireless router was on the other side of the room, etc.), but the customer had two cordless phone base stations on the desk. I couldn’t think of anything else, so I tried unplugging them, and all of a sudden the mouse started behaving properly.

Both phones were DECT 6.0, so *in theory* should not have affected the wireless mouse. That being said, most people only keep one on their desk, so perhaps something about the two being right next to each other was causing the interference? If anybody has any, I’d love to hear some theories on the phenomenon.

Moving on up

After spending a month trapped in certification limbo, I am happy to announce that I’ve officially finished my Windows Server 2008 certifications, giving me my MCSA: Windows Server 2008 and my MCITP: Enterprise Administrator on Windows Server 2008 certifications. This means that I just have to write two more exams to get to the Windows 8/Windows Server 2012 level, and then decide if I want to pursue an MCSE.

MCSA_2013(rgb)_1481_1458MCITP_2013(rgb)_1085_1314

 

 

What was particularly fun about this set of exams was the time limit. I learned in early January that several exams that I needed to write were scheduled for retirement at the end of January. This meant that in order to get my credentials, I had to finish 5 exams in about 4 weeks. I did it by the skin of my teeth, with plenty of late nights and lots of studying.

I even learned something interesting about the Microsoft exam system. It seems that an exam’s retirement date is simply the last day that you can register to write it. You can still actually write it up to 8 weeks out (at least based on Prometric’s scheduling system), but there is no second shot if you fail. Going into this, I didn’t know that, so had to take a gamble that I would be able to write the last exam that I needed, the 70-643, which was scheduled to be retired on January 31. My options were to either write it in Kelowna on January 30, which in January is a dangerous drive from here, or to schedule it for February 4th and risk not being able to write it or get the credit.

I wasn’t willing to risk the Coquihalla in January, so I took the risk and wrote and passed the exam on February 4th. Of course, that wasn’t the end of it. It can take 7 to 10 days for Prometric to report the results to Microsoft and get the exam added to your transcript. So, I waited patiently, if anxiously, until February 20, and still had not received a response. Worried, I sent an email to the appropriate department, who, after checking into it, promised to fix the problem within 3-5 business days.

As of last night, everything has finally registered properly in the portal, so I can breathe a sigh of relief, proudly display my new credentials, and move onto the next challenge.

Adventures in Retrocomputing: Troubleshooting a GS-RAM Plus

One of the outstanding items on my IIGS checklist has a bigger RAM card, because while 4mb is nice, I want to be able to push this thing to its limits. Fortunately, I’ve recently come a bit closer to completing the checklist. I sourced a 6MB Applied Engineering GS-RAM Plus for about $100 – a very reasonable price for a card like that, especially considering that the seller said that the card was tested to be in good working condition.

So, I bought the card, got it home and tried it in my IIGS – no luck. A little bit of research suggested that a GS-RAM plus would not work correctly on a ROM 03 IIGS if it had the 1A version of the GAL instead of the 1B version. This one, of course, had the 1A version. So, I popped it out, pulled my ROM 01 IIGS out from under the desk and tried it on that one. No luck there either. Got the same “checkerboard” screen on both machines, which can apparently indicate RAM or CPU problems, improperly seated chips, or a bad add-in card. Since the machine was working both before I installed the new RAM card, and after I took it out, I figured that it must be the culprit. So, I took a closer look:

m_45738_1As you can see, the chip right above the connector, on the left, has a hole in it. (This is the eBay seller’s original picture, so it must have happened in between the testing and the listing.) That, to me, looked like a likely culprit.

So, I contacted the eBay seller, asking their permission to try and fix the problem myself before returning the card (recycledgoods.com – they were an absolute pleasure to work with) and set out to find a replacement chip. Fortunately, just about every chip on that card is socketed (a nice feature of late 80’s technology), so it would be easy to replace.

The trick, of course, is finding the right one. The hole was right in the middle of the model number on the chip, rendering the middle two characters unreadable – so I had to find another source of information. The product manuals were of no help, being mostly concerned with how to install the card. So, the next best option was to find a picture of the card (which appears to have gone through a couple of revisions) in a high enough resolution that I could read the model number off the chip. I busted out a little Google-fu, and eventually found this image kindly uploaded by the folks over at ReactiveMicro:

GS-RAM Plus - 6 Meg Board ShrunkFortunately, it was a GS-RAM Plus of the correct vintage, and the picture was high enough resolution to make a positive identification of the chip (The full sized picture is huge! 6068px × 2028px and 10MB – it was easy to read the fine print on all of the chips).

Now that I had a model number, the next step was to find out what the chip actually did. Fortunately, it was an off the shelf part (made by Samsung) and Google makes finding datasheets easy. With the datasheet in hand, I was able to determine that it was designed to be used in “implementing buffer registers, I/O ports, bidirectional bus drivers, and working registers.” Or, in other words, it would not contain any custom program logic or configuration, so can be easily replaced.

Fortunately, these are still readily available, so I checked out a few chip suppliers. Unfortunately, they all wanted me to buy in quantity, so it was back to eBay. I tracked one down for $1.78 plus shipping and had it sent out. It got here a few weeks later, arriving last night, and I swapped it out, plugged the card into the IIGS, and everything booted up just as expected.

It’s always nice when the problem ultimately turns out to be simple, even if it takes a bit of Internet spelunking to figure out the details!

Building a Baby Monitor

For our son, we have a video baby monitor mounted over his crib so that we can keep an eye on him while he is sleeping. This way we can tell if he is tossing and turning, or if he is actually asleep. This is something that we have gotten very used to, and perhaps even spoiled by. When we are visiting his Grandparents, for example, and he is supposed to be napping in his playpen in the other room, he often doesn’t want to go down nicely. We can hear him if he cries, but if he is quiet, can’t tell if he is actually asleep. So, we wanted a video monitor that we can take with us when we travel.

His regular monitor is mounted to the wall, so we can’t easily take it with us, and a new monitor is fairly expensive – at least relative to how much we would expect to use it. So, I had to come up with another solution. Being a technical person, I have bins full of old, cast off and left-over parts, including about a half-dozen routers, and a couple IP cameras left over from an old project.

So, I pulled one of the routers, and one of the IP cameras – a TRENDnet TV-IP422W.

TV-IP422W_a1It’s a few years out of date, and only supports Wireless-G, and 640×480 video at 30 FPS, but the price is right. Not to mention, this camera has Pan/Tilt/Zoom, infrared night vision, a microphone, and an iPhone app – perfect for use as a baby monitor!

Unfortunately, while the camera does support ad-hoc wireless networking, it only supports WEP “security”. So, to make sure that we have a reasonably secure wireless network, I need to pack along the router as well. And, since I needed to use the router anyways, I figured that I would just connect the camera using the wired connection. It is significantly quicker, and I have always had trouble getting a decent frame rate from the camera over wireless. It also means that I can connect to the router using Wireless-N instead of Wireless-G.

So, after a bit of grief requiring me to set everything back to factory settings on all the devices, (That’s what happens when you use devices for various projects and just throw them back into the box without resetting them first), I plugged the camera into the router, configured a network with the necessary security settings, and connected up my old iPhone, which will be pressed into service as a monitor station when we travel.

It works great! just goes to show you what you can do when you have a few boxes of old parts lying around and can do a little bit of creative thinking.

EDIT: Forgot to add, you need to get the TRENDNet SecurView Mobile application off iTunes to support these old cameras. The TRENDnet SecurView Pro app only supports the newer ones. Both apps are free though.

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.

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!

Messing with Credit Card Scammers

Yesterday, we had a scammer call into the office from “Visa” offering to lower our credit card interest rates. It was actually a pretty decent scam, because he was able to pull publicly available information about his target (name and address), give the phone number. Since it was a slow afternoon, we decided to mess with him a little.

His objective was to get credit card information out of us – our objective was to keep him busy as long as possible so that he couldn’t try and scam someone that would actually fall for it. Our guy was on the phone beside me, and after the introductory spiel was asked for his card’s issuing bank , and what type of card it was (ie. Standard/Gold/Platinum/Infinite), as well as the last 12 digits of the card number – for “verification purposes,”of course.

This is pretty clever, actually. The first 6 digits of a credit card are considered well known and identify the issuing bank and type of card. So, given the bank, type and last 12 digits, he can use a service like BinDB or even the Wikipedia page to figure out the full 16 digit number while saying say that he doesn’t have to ask for it.

Our guy started out by just making up a credit card number. That, unfortunately, didn’t fly. The scammer’s system performed at least a basic validation on the credit card number using the Luhn Algorithm, and it came up as invalid, so he asked us for the full 16 digit number.

Fortunately, it is very easy to generate a credit card number that will pass the validity check, but is not useful in any other way. We used www.getcreditcardnumbers.com, cross-referenced against the Wikipedia page to produce a different credit card number, and gave that to him, saying “try this one instead”. It validated against his system, so he asked us for the expiry date and CVV. Fortunately for our purposes, these don’t matter unless they try to run a transaction against the card, so we made some up. At this point, satisfied, he tried to get us to give him another card, but we were done wasting his time.

In the end we strung him out for about 25 minutes before we got bored of it and ended the call. If you get the chance, you should do the same. Try checking out the tools that I’ve mentioned here and have some fun of your own.

Adventures in Retrocomputing: The Apple IIGS

When I was a kid, the Apple IIGS was the computer to have. It was the cream of the Apple ][ line, with a great library of games and software. Unfortunately, I didn’t get one as a kid. Instead, I got a Macintosh LCII, which was definitely the right decision in 1992. The Apple ][ line was just about dead, and the Macintosh was the future. I got many good years out of that computer, and last time that I checked, it still works.

However, one of the nice things about growing up, (and the invention of eBay), is that you can now afford to get the “toys” that you really wanted as kid, usually for a reasonable price. The same principle applies to those who collect classic cars.

So, starting last February, I did a bit of research, then took to eBay and started collecting parts. By consulting various sources, I came up with the following list of must haves to assemble a capable “modern” IIGS system:

  • A IIGS CPU (ROM 01 or ROM 03)
  • A color monitor (either an AppleColor Composite Monitor or the preferred AppleColor RGB monitor)
  • A monitor cable (harder to come by than you’d think)
  • A Keyboard, Mouse and Joystick
  • A printer (Probably an Imagewriter II – a Laserwriter if I’m really lucky)
  • Disk drives (At 1, preferably 2 each of the 5.25” and 3.5” floppys)
  • A Memory Expansion card (Min 4MB, 8MB preferred)
  • A SCSI card (Apple Fast SCSI preferred)
  • A hard drive
  • A CD-ROM drive
  • An uthernet Ethernet card (http://www.a2retrosystems.com/)
  • An accelerator card (a Transwarp GS or ZipGS)

Long list, eh? I also needed media, and a way to get software from a modern computer to the IIGS. The community has long had a solution for in the form of ADTPro.

I’ve been making good progress down the list, acquiring a ROM 03 IIGS, an AppleColor RGB monitor, (although it took me another 6 months to get the cable for it) and a disk drive. I even wound up acquiring a complete ROM 01 IIGS system with composite monitor, keyboard, mouse, joystick, 2 disk drives, and printer (and bonus Kensington SystemSaver IIGS) because it was cheaper to buy the whole system and only use what I needed, rather than to buy individual parts. Unfortunately, the printer got destroyed in shipping, but insurance covered it.

By the beginning of the summer I had all of the components together, but the ROM 03 system that I had was fairly barebones – I think that it may have originally come from a school – so it had no expansion cards, and even with the ADTPro software, it was rather tedious to copy floppy images over. Pickings were slim on eBay, so I put the project on hold. I was not too keen on investing in a 30 year old hard drive anyways, especially when much more modern technology was available.

Back in February, I had put myself on the waiting list for the next run of CFFA3000 cards. These let you plug in a CF Card or USB flash drive and load disk images (both hard drive and floppy images) from it, allowing you to use modern solid-state technology to replace old magnetic media entirely. In September, Rich Dreher announced that he would be starting the new run of cards, so I put in my order, and received it early in November.  This let me put the system properly through its paces, installing GS/OS 6.0.1 and trying out a few games. Everything worked great!

Now I just need to source some more software, and a Memory upgrade, SCSI card, and a CD-ROM drive to bring the system to it’s full potential. An accelerator would be nice, but not necessary, and I have some good news on the uthernet front – a new production run should see the light of day before too long. No hard dates of course, but the project is still alive.

It’s nice to see that the community is still alive and active, and I look forward to getting deeper into this project, as soon as I can scrape up the last few parts that I need.