Create Awesome

web design and development for people who think the Internet shouldn't suck

Resolving the ssh-dss Error With GoDaddy Linux Economy Shared Hosting

As I mentioned in my last post, has been around for a while—over a decade, in fact. And this entire interval—an eternity in Internet time—it’s been hosted on the same crummy GoDaddy Linux Economy shared hosting account.

It’s definitely legacy software, and the latest version of OS X has finally decided (and not without reason) that my host’s OpenSSH version was simply too old and janky to support. If you come across a connection error with the following message:

Unable to negotiate with hostname: no matching key exchange method found. Their offer: ssh-dss

it’s a pretty safe bet that that’s your issue, too.

If you’re a command-line kinda guy, you can still make it work by adding -oHostKeyAlgorithms=+ssh-dss to your regular ssh command in Terminal, e.g.:

$ ssh -oHostKeyAlgorithms=+ssh-dss user@hostname

But that gets tedious fast, and won’t work for third-party apps like Cyberduck.

To make it possible to connect to anything that uses ssh, you can (on OS X and most Linux flavors, anyway) edit your SSH configuration. I think the easiest way to do it is via command line and vi. Open Terminal and enter the following:

$ vi ~/.ssh/config

This file is probably empty, so hit “I” (this puts vi into INSERT mode…don’t get me started) and paste the following

Host hostname

Once that’s entered, hit escape and then shift+ZZ (or any of the other similarly byzantine quit-and-save vi commands). You should now be able to connect to your shamefully legacy hosting account as easily as you did back in 2014 or so.

But as much as I’ve enjoyed fighting this and other legacy GoDaddy battles, I think it’s finally time to turn the page. “Smart http” git, https, and a host of other nifty new things simply don’t work on the platform. I’m sure I’ll still be able to make use of its unlimited bandwidth and storage for static content, but for the new toys I’d like to build, an improved host account is in order. Stay tuned. 4.0

If Internet Archive is to be believed, today I rolled out the fourth iteration of my personal website. It’s an updated digital resume that invites the user to poke into the code and responsive layout as much as the content. It’s built to be bold and bright and playful—an updated demonstration of my skillset that’s well-written and entertaining, both inside and out.

The previous version, from mid-2012, served its task well and I am sad to see it go. Built as the sun was setting on the Golden Age of Open APIs, this just-retired was proof that I could code—PHP scripts self-populated the site with regularly-updated content from web services I use nearly daily, like Strava, Twitter, and Instagram.

But as companies began to lock down, and RSS was supplanted by the timeline, its Jenga-towered screen-scrape kludges became harder to maintain. The site also hid my meatiest programming from the user—an at least reasonably elegant system of caching and and includes kept site load snappy and hosting load down, but as server-side code, no one could see it.

The front-end code that the user could see—a clever, tag-driven filtering system for my wide-ranging work experience—didn’t look particularly tidy in dev tools, and also may have presented my abilities too broadly. So in addition to being much cleaner from a code POV, this version is much more closely focused on my dev skillset.

To that end, the new site is also W3C-valid HTML 5, fully responsive and mobile-first, extremely accessible, and rolls in a host of cute functionality tricks to keep the code semantic and SEO-friendly, while accommodating a unique, even idiosyncratic layout between breakpoints. There’s also an inside internet joke or two, to be explained in forthcoming blog posts.

While I could (and almost certainly will) keep tweaking, it’s just time to get this beast out there. Let me know what you think and what errors you encounter, and If I’m ever at a point where I’m happy with it, a github repo won’t be far behind.

The Year the Year-in-Review Clip Show Died

I find myself hoping 2014 is the swan song of algorithmically generated year-in-review mini-films on the various social networks. We’ve all seen Mad Men. We’ve all seen the Carousel/Facebook Timeline mashup. Nostalgia is powerful. Bond with the product. Etc. Yadda. But beyond the logo, these clip shows haven’t got a damn thing to do with the services they promote, and more often than not, they’re pretty lousy products in themselves.

read more>>

Introducing BrainHole — an Outbrain-style Widget for

I’m a big fan of ClickHole, the Onion’s satirical take on the clickbait stories that, with the advent of gullible olds like your Grandmother, have rendered your Facebook newsfeed all but useless. But as much as I liked the headlines, stories, and execution the fabled satirical publication brought to ClickHole, something wasn’t quite right. read more>>

Put Strava Routes on your Suunto Device with Movescount

I’ve long been unsatisfied with Garmin’s cycling GPS devices. After a particularly bitter unexplained ride deletion last fall, I finally took the leap on a Suunto Ambit2. It’s been great so far, with the added benefit that it works very well for the non-cycling activities I do.

Unfortunately, the device is really tied to some substandard Suunto products. I understand how the proprietary USB connector helps keep the Ambit2 thin, but it’s finicky and fragile.
read more>>

Your Team Needs Hackers

Cool to see Bicycling moving into the rich content (or whatever they call it) sphere for longer articles. But that white text over white-heavy art? Not cool, man:


read more>>

Twitter unAuth – The Web Scrape API

Twitter has been scaling down access to its API for some time now. But last night, it turned off unauthorized API requests entirely, breaking an armada of web widgets that didn’t route users through the awkward workflow of authentication.

If you’re anything like me, you find the notion of requiring a login for data that users have made explicitly publicly-available repulsive. So a couple of months ago, I threw together a little webscraper to return data I could publish in almost the same way as their API.
read more>>

Installing Python Libraries on GoDaddy Shared Hosting

If you’ve got a GoDaddy shared hosting account, you’re probably none too pleased with the Python support. After all, SSH in, type “python”, and you get a message telling you your version is horribly out of date:

$ python
Python 2.4.3 (#1, Nov 11 2010, 13:34:43)

But after six years of hacking around on their boxes, I’ve learned that the trick to getting the most of your $9/month is just knowing what hoops to jump through read more>>

Let’s Bring faux-column to CSS

If you’ve ever built anything from the ground up with HTML/CSS you know the issue: <div> only expands vertically to fit its contents. Put some of those <div> tags side by side to make columns and chances are, they’ll end up hanging awkwardly above where you want them to be.

The cannonical fix is the Faux Column, a slender, repeating image in the background behind the columns, colored to match the <div> elements that don’t quite make it to the bottom of the screen. read more>>

Redirecting * Pages to your Blog

I’ve talked before about my much-diminished stoke for Tumblr as a platform.

Fortunately, I’m not the only one who sees things this way, and a lot of great tools exist to help you migrate your setup to WordPress. There’s a built-in tool that pulls in your Tumblr blog into a WP install more-or-less intact, and if you are using a custom domain, you can point it to your WordPress install and use this plugin to redirect your old URLs in a line of code.

But what to do about all those [your-account] URLs? read more>>