Nik's Picks: iSSH

iSSH is a wonderful SSH client that goes beyond a simple terminal client, to nearly the remote access Swiss army knife of SSH on the desktop.

SSH is commonly used as both a remote terminal and also as a sort of VPN to access remote systems graphically. Apple has limited the iPhone in such a way that this is impossible. A SSH connection can only be maintained in a single app, and when that app is closed, so is the SSH connection – no other apps can access it.

iSSH gets around this by bundling in the two most common remote management systems: VNC and remote X11 applications. It also permits multiple simultaneous connections, so you can manage tasks between more than one server. (very useful in disaster recovery and server migrations)

As a terminal, iSSH is quite good. It supports custom fonts, different keymaps, copy and paste, and is in all ways a good solid terminal. Unlike other SSH apps, it also supports the legacy Telnet protocol and ANSI terminal emulation, in case you need to get your Tradewars on.

It also has a pretty easy way to get at non standard keys, such as arrows and modifier keys. A row of small buttons line the top of the screen, and you can scroll left and right to reveal more commands. This works all right, but I sometimes clicked the wrong key, even when scrolling, since the buttons are so small. This can be quite frustrating, and it made me miss TouchTerm’s floating key palettes.

iSSH also has the option of a “key pie” menu. This brings up a floating round control that reminds me of a remote control for a TV. It can contain multiple sets of fully custom buttons that can be used as modifiers, macros, or arrow keys. I wouldn’t mind seeing this concept completely replace the modifier keys at the top of the window.

VNC is well thought out and very flexible, thanks to the underlying SSH system for secure connections. You can connect in the clear, or using SSH tunneling, as well as tunneling to one server and then connecting openly to a second. Once connected, you have the normal sort of control, including window scaling, keyboard and mouse, and all the modifier keys you’d expect.

The winning feature here is the tunnel support. Performance over 3G is worse than some other VNC clients. Jaadu VNC can do the same SSH tricks and is generally a better VNC client, but it’s also much more expensive. For lighter or infrequent remote management, iSSH is great, especially for the price. (note that VNC is perfect for remote control of presentations – one more use for iSSH!)

X11 forwarding is very impressive, and quite a bit faster than SSH over slower connections (especially if you use something lighter weight than KDE or Gnome) But it’s limited to pure Unix systems, and more complex to set up than VNC, so it’s only a real benefit to the most die hard *nixers. That said, it works great, up until you run out of memory. (Which, on my 3G, was after just a couple of KDE apps – a 3GS would fare better)

The one limit on remote management is that only one graphical (VNC or X11) session can be active at once, although any number of terminals can run at once. (until you run out of memory, at least)

To wrap up, iSSH is fantastic. It gives you all the tools you need to remotely manage Unixish servers from your phone. (Windows, too, if you install the right open source tools) It might be just the thing to let a IT professional take a vacation without needing to drag along a laptop and stay near wifi in case disaster strikes at the datacenter. Or, for $5, it’s also just a handy tool for any *nix hobbyist.

Written on September 26, 2009

iPhone Users Aren't Cheapskates

I keep hearing developers complain that “iPhone users are cheapskates who won’t pay for a quality application.”

Most iPhone users have spent over $200 and around $100/month for a telephone. Why can’t you sell a high tech piece of software to someone with a $1,500/year gadget habit?

My guess: They’re too distracted by all the cheap/free gadgets they can get. If what they want is the gadget, and not productivity, that may be very hard to break through.

At the same time, there are app users like me who are more than willing to shell out for a quality piece of software. I use Jaadu VNC almost every day, and was happy to pay $25 for trouble free VNC, even though there were cheap remote control and free VNC clients available. Likewise, I paid plenty for OmniFocus on the iPhone, and for the desktop as well. I get more than $100 worth of productivity from it.

In both cases, I had a recommendation from a trusted source. OmniFocus was built by one of my favorite software houses, and was recommended by many people I’d met while exploring Kinkless GTD. Jaadu was recommended by my geek-buddy, Aaron.

Again, it’s marketing outside of the app store. What does it take for your app to get that precious recommendation?
Written on August 3, 2009


I just started working with the Drupal Mailhandler module. I got jealous of Posterous, but I like geeking in Drupal so much that I couldn’t bear switching over. (And yes, I know Posterous can handle cross-posting to Drupal – I like this better) Very cool stuff. I can attach images and do all kinds of neat things.
Drupal continues to impress me with what it can do. I just think about something, like “can I post by email?” and a short search later, I find out that I can. It’s wonderful.
This couldn’t be more of a test post, so please don’t worry yourself about all the images and files. I’m just working on themeing things. Or maybe not. :)

Written on July 31, 2009

Your iPhone App is a 99¢ Lawnmower

Vlasic, one of the world’s top pickle producers, delivered a top selling item to Walmart – a gallon of pickles for about $3. It was huge, Walmart shoppers went pickle crazy, and bought them by, well, the gallon. The only problem was that the gallon jugs of brine were only minimally profitable – picklers make their real money on cut and prepared pickles. But Walmart and Vlasic were caught up in the pickle-fever, and Vlasic ignored the shrinking margins as their business shifted from premium gherkins to dime-a-dozen salted cucumbers. Finally, Walmart’s continued pressure to lower the cost of a gallon of pickles, and the total loss of more profitable business, forced Vlasic into bankruptcy.

Simplicity Manufacturing, a premium lawnmower manufacturer, was offered the opportunity to become Walmart’s house brand of lawnmowers, guaranteeing millions of sales. But that would have watered down Simplicity, forced them to lower their standards, and to reduce their profit margins. Ultimately, they said “no,” and continue selling high priced and high quality lawnmowers today. They haven’t filed for Chapter 11.

Your iPhone application is a shiny red lawnmower, and you’re selling it for 99¢ a gallon.

It would be flattering to call the App Store Walmart on Black Friday. Sure, it generates a ton of traffic, but that traffic is a bunch of sweaty bargain hunters digging through endless shelves of games and applications, guided by $1 flashlight applications, haphazard search and vague and untrustworthy reviews. It’s a great place to sell if you’re willing to sell your app at the absolute lowest possible price (quality be damned!), and be in cutthroat competition with the next guy who can give the Walton family some pickles for half a cent less per gallon. Unless you’re as good at the low price game as Walmart, you’ll be in a race to the bottom.

Remember Simplicity and their shiny red lawnmowers? Not only are they unavailable at Walmart, they’re also nowhere to be found on Amazon, or at Sears, or most anywhere else. They’re sold exclusively through certified dealers, each of which is equipped to be a full service support shop for the mower. There are two such dealers within 100 miles of my house. But that’s all right, because if I’m going to spend over three grand on a lawnmower, I’m happy to make the trip.

You’ve got this great application that’s well worth a premium price. Why are you trying to draw people in who are window shopping at Walmart’s app store? It's time to to quit bitching and build your dealer network.

Start with your own storefront – make it a killer website with the sort of depth and trustworthiness that makes people happy to shell out a thousand bucks to upgrade their copy ofAdobe Creative Suite. Heck, make ten killer websites, each targeted at a specific market segment or use for your app. Or give away a thousand copies of your app as coupons in MacHeist-like promotions to get the word out. Put a quarter of your money into advertising and search marketing. Get endorsements from the people in your very particular market niche telling other enthusiasts and professionals how critical your app is to their lives. And keep investing in quality, design, and support, the last thing you can afford is customers who feel cheated. 

Yes, this costs money, and time, and has huge risks. Welcome to the world of business. And seriously, what’s the alternative…?

Pickles, that’s what.
Written on July 30, 2009

BBEdit HTML to Text

This script uses BBEdit to convert HTML to lightly formatted text. Unlike BBEdit’s “Translate” utility, this maintains links, image ALT text, and even formats headers and bold text as all-caps. The formatting is ideal for making plain text versions of HTML email messages – which is the reason I created it in the first place.

For best results, drop this in the BBEdit Scripts folder. (you can open it from BBEdit’s script menu!)

Written on March 31, 2009

Easy Apache Redirects and Site Aliases

Everybody knows about using .htaccess files to redirect, say, to There’s lots of cookbooks out there for doing this. But I was in a different situation; I registered,,,,,, and!

(Note: “Everybody” refers to apache sysadmins, and foo refers to a domain name that I do not want to advertise at this time.)

One way to handle this would be to set up a ServerAlias entry in the httpd.conf file for every one of these domains. While this works, it doesn’t redirect the domain. Instead I end up with duplicate content for every one of these many domains.

I could handle this by writing a .htaccess file that covers every combination of, say,,,, and so forth for every domain, but that seemed like an awful lot of typing. Yet, for some reason, I couldn’t find much of anything on the web to make this easier.

It turns out this can all be handled in your httpd.conf file using the “Redirect” directive.

What you need to do is set up two virtual hosts. One is for the domain you’re re-directing to, and the other is for any and all domains you want to redirect from. Then you add a “Redirect permanent” directive as appropriate.

Here’s an example, in which I try to route to

# This is the master domain

DocumentRoot /var/www/

# Redirect to

Redirect permanent /

Okay, this is actually more text that an .htaccess mod_rewrite statement, but look at what happens when I add ServerAliases to the redirecting virtual server:

# Redirect everything to

ServerAlias *
ServerAlias *
ServerAlias *
ServerAlias *
[and so on...]
Redirect permanent /

I can use the same syntax to do a 302, 303, 401 or any other sort of redirect as well.

If you have a fairly simple array of virtual hosts, you could also use the default “catch all” virtual host to redirect to your main site, thus avoiding any need to explicitly define tons of ServerAlias entries.

Written on January 22, 2009

Sync Hole

Syncing the iPhone is a mess. Apple really dropped the ball by not providing a generalized sync framework to support third party apps.

Every time I want to take my iPhone out on the road with me, I need to go through and sync up every application individually: Here’s the song and dance for a full sync:

  1. Open up 1Password on my Mac and on my iPhone, choose Sync from the iPhone, and wait for it to complete. (Sometimes I need to click through some password errors, too.

  2. Open TextGuru on my iPhone and the TextGuru server application on my Mac and copy over any text files I’d like to share between the devices.

  3. Open up Stanza on both my Mac and my phone and then open each book I want to carry with me and send it to the phone; one-by-one.

  4. Load any files I want to take with me into FileMagnet uploader, open the app on my iPhone, and send them over. (Or, if I’m using Briefcase, turn on remote login on my Mac and browse it – I’ll cover file viewers/transfer apps in a later post.)

  5. Open up SpeakEasy Connect to grab any recordings I want on my Mac from my phone.

  6. Sync OmniFocus to .me (and then when I open it on the iPhone, it syncs up, so that’s something at least!)

  7. Open up ByLine to pick up my Google Reader RSS feeds.

  8. Likewise with Instapaper.

  9. Did I mention I don’t use Safari as my main browser? So that’s a trip to BookDog to sync up my bookmarks from OmniWeb to Safari so that I’ll have ‘em on the phone.

  10. Finally I’m ready to sync with iTunes, but to be sure I get the most out of this sync, I’ll check for new podcasts and application updates.

  11. Dangit! I’m out of space for all my new files on my iPhone. Time to trim playlists, swap out movies, etc. I sure wish I could autofill the thing like I could on a shuffle!

And that’s if I happen to be on an available wifi network. Otherwise I also have to deal with Internet Sharing on my Mac!

Yeah, this is a worst-case scenario, of course. I don’t necessarily need to pick up new files or books, and I don’t always need to grab recordings. But if I intend to spend some time on an airplane or otherwise need to keep everything updated, this whole rigamarole can take as much as half an hour of fidding.

But because this is so time consuming, it’s not uncommon for my iPhone to be out of date, so I don’t have my latest passwords from 1Password, or I don’t have the movie I just rented from iTunes or eBook I’ve downloaded. (since I have to transfer it to the one device it lives on – grr!) Likewise, my Mac’s out of date from files I have on my phone. What a drag!

Some of these applications use Mobile Me or some other online service as an intermediary, so that I can sync asynchronously from my Mac or iPhone to a central server. Or ByLine syncs directly with Google Reader, so it acts like a normal RSS reader that way. But if I intend to be outside of wifi range, I have to remember to sync.

Compare this to my Palm handheld (recently retired in favor of my iPhone). I put it in the cradle and pressed the “sync” button. Any e-books or files waiting for transfer would transfer, passwords would be updated, content on the device would push back to my Mac. One click, and I was done. Palm provided a standard framework that developers could use to sync their applications’ data with my Mac and its programs.

Apple has done the same thing in the past, through iSync and Mobile Me/.Mac. However, they failed to extend this to the iPhone. Instead, every developer needs to build their own synchronization solution, with no standards whatsoever. Additionally, since there’s no background processing, there’s no method to keep the desktop and the phone in sync without forcing a manual process of opening every syncing program and doing your business, one program at a time.

Obviously there’s an underlying sync framework in iTunes, which can handle multiple content types (music, photos, email, contacts and calendars) from multiple data sources (Outlook on the PC; iPhoto, Mail, Address Book and iCal on the Mac; Google and Yahoo hosted services; and, of course, video and music through iTunes). And that’s all in addition to the built-in Mobile Me and IMAP services!

Apple dropped the ball on syncing with the iPhone. They need to build a synchronization API for developers, and they need to build it quickly before more programming time goes down the drain building half-assed custom sync solutions.

Written on November 25, 2008