Programming

Websites shouldn’t close at 10pm

HealthCare.gov is getting a lot of flack for being inaccessible and just generally bad, so I thought I’d check if Minnesota’s state insurance exchange website is any better. I learned this:

And once the website is up and running, it won’t offer 24/7 service. Instead, it will operate from 6 a.m. to 10 p.m. Monday through Saturday, officials said. There will be no Sunday hours.

MNsure spokesman John Reich said the website’s limited hours won’t be permanent.

“The initial hours are so that we can continually update and improve the user experience and add new features,” he said in an email.

(via TwinCities.com)

I can understand (but don’t agree with the idea of) having some planned downtime when you deploy major new changes (like, maybe an hour), but shutting down every night at 10? That’s especially bad for a website targeted towards people who might be working two jobs and don’t get a chance to visit the site until they get off work late at night. They’re out of luck.


Shameless plug: At Automattic, we continually update and improve the user experience and add new features to products like WordPress.com as often as fifty times per day without making the site unavailable 43% of the time.

(If that sounds good to you, come work with us.)

Standard
Life

Eggs and Toothpicks

In our high-school physics class (a dozen years ago), our fun year-end project was to construct a container out of toothpicks and Elmer’s glue that could prevent an egg from cracking when dropped from a height of about ten feet. The idea was to build toothpick crumple zones around the egg such that the egg’s deceleration would be slowed enough that it wouldn’t crack.

I took a different approach:

2293948192_a3a7ac62e2_o

That’s a parachute made entirely out of dried glue. Not only is the parachute made out of glue, the strings connecting it to the egg basket are made out of glue too. I only used twelve toothpicks for the basket, definitely setting the class maximum for glue and minimum for toothpicks.

So how did it perform?

2293304470_45628d4010_o

Not well. The parachute didn’t catch the air until about a foot from the ground, and the toothpick basket was so flimsy that the egg didn’t stand a chance. The glue strings held up though, so I think that if I had dropped it from thirty feet, it would have had a pretty good chance of landing safely.

If there needs to be a moral to this story, I guess it would be “Don’t put all your eggs in one basket if the basket is made out of twelve toothpicks and attached to a glue parachute, unless you’re going to drop the basket from a height greater than ten feet, in which case, you might be ok.”

Standard
Life, Woodworking

I built a Minneapolis table

Earlier this year, I had an idea to build a table that is an inverted 3-D model of a metropolitan downtown. Take a bunch of 1×2 boards, cut them to scale lengths of the buildings in downtown Minneapolis, glue them together, and you’d have something like this:

1

Invert it, and you can see the city a little more clearly:

2

Each piece of wood represents half a city block between Hennepin and Portland Avenues. (The three tall ones in the middle are the IDS, Wells Fargo Center, and the Capella Tower.)

To get started, I cut a bunch of 3/4″ x 2″ stock I had laying around to the correct lengths and laid them out. (They’re miscellaneous woods, but I think oak, birch, and maple are represented.) Unfortunately, after cutting all 234 pieces of wood, I realized that my miter saw’s blade wasn’t true — it was off by about 1ยบ — so I had to re-trim the ends of all of the blocks with a different saw.

After making those cuts, I glued the adjacent blocks together. I only have about a dozen clamps, so this took about ten gluing sessions.

3

The next step was to drill a hole in each block pair that would accept a threaded insert.

4

The original plan was to just glue all of the pieces to each other, but it’s likely (a.k.a. probable) that the table would fall apart as the wood moved due to humidity. I decided to bolt each piece to the bottom of a separate piece of wood, allowing all of the wood pieces to grow and shrink without colliding with each other. The threaded inserts allowed me to disassemble and reassemble the table as many times as I needed without tearing out any screw holes.

Here’s the top with the bolt holes mapped out; for each bolt, I drilled three holes: 1 pilot hole, one countersink to hide the head, and one for the shank of the bolt to pass through. In the picture below, I’ve attached the legs, drilled all of the pilot holes, and started drilling the countersink holes. (The big board is a glue-up of five maple boards.)

5

Here’s a closeup of the pilot holes.

6

Drilling the countersink holes generated a lot of shavings.

7

Same step, but without the shavings.

8

Here was the first dry-fit. How much would you guess that this table weighs?

9

I procured my first belt sander in order to clean up the edges of all of those pieces. Here’s an example of a pair before: there’s some glue leakage, and the two pieces of wood aren’t exactly the same width, so they don’t line up perfectly. Also pictured: my toe.

10

And here’s the same piece after belt sanding. I love belt sanding.

11

The tabletop is attached to the base with dowels and glue. Here’s the underside of the tabletop:

12

After staining both top pieces, reattaching all of the “buildings” underneath, making sure they were all square to each other, gluing on the top, and adding eight coats of shellac, this is the finished product.

14

A comparison between an updated render and the final product. Looks like I got all of the buildings in the right place!

15

The view from underneath. I thought this looked neat.

16

And from the front.

17

From the first cut to the last shellac coat, it took me about 25 hours over a month of nights and weekends, and I’m very pleased with it — I really enjoy having a one-of-a-kind piece of furniture.

Standard
Open Source

Reminiscing about old code

I imported some long-forgotten CVS repositories into GitHub last night: anyInventory and Toby Web Mail (which contains the first commits I ever made to a version control system). They are nine years old and eight years old, respectively.

Those two projects were my introduction to participating in the Open Source ecosystem. It felt magical that strangers were emailing me, asking if they could help develop and translate these projects that I had previously been working on by myself, albeit in the open.


It’s painful to read some of the code, knowing how insecure it is. There aren’t any indications that I knew about XSS or database query paramaterization. That being said, the applications still work. I was able to install anyInventory on my Web server in about 90 seconds. Thank you, PHP backwards compatibility.


My commit messages were not so great back then:

“Various trivial changes”

The commit? 12 changed files with 227 additions and 195 deletions.


Here’s the Slashdot post that was the impetus for anyInventory. I left a comment suggesting that users could solve their inventory problems by just sending all of their uncatalogued junk to me, and I included my actual mailing address. Despite concerns from other users about a physical Slashdot effect, not one Slashdotter took me up on my offer. (Also note the then-requisite SCO comment at the end of the thread.)

Drew Hearle, who submitted that Slashdot post, ended up working on the anyInventory project with me for a while.

I credit the amount of time I spent on Slashdot for my stances on open source, Web standards, and pony pranks.


I wrote Toby Web Mail so that I wouldn’t have to use Outlook Express any more, and it eventually became the basis of my college senior-year independent study project, anyMail. I think, but cannot confirm, that at one point, there were Web hosts offering both Toby and anyInventory as one-click installs. The thought of this now terrifies me. (See the security section above.)

Standard
Ideas, Plugins, Programming, WordPress, Writing

Inline Preview Plugin for WordPress

Problem: When creating a post in WordPress, previewing your post in a separate tab can be slow and/or complicated.

Solution: Show the preview right next to the editor.

Screen Shot 2013-06-11 at 1.32.59 PM

Inline Preview is a plugin for WordPress that adds a zoomed out preview of the current post next to the post editor when the user clicks Preview instead of opening in a new tab.

It’s just an idea I’m playing with for streamlining the post creation process, and if it feels familiar, it’s probably because it is: through version 2.1, WordPress contained a preview iframe at the bottom of the post editing screen, but this is a more elegant implementation. Feel free to install the plugin and try it out for yourself.

Update: I’ve updated the plugin to add a close button (a translucent “X” in the upper-right of the preview) and to make the preview frame resizable by dragging its left edge. The new width of the preview is persistent each time it opens, even across pageloads.

Standard
WordPress

What software is being conceived right now that, in ten years, will fundamentally alter the landscape of the Web? Who is hacking on a personal project that will eventually be used by millions of people?

Asked ten years ago, the answers to these questions would be WordPress and Matt Mullenweg & Mike Little. I’m not sure what the answer to the first question will be ten years from now, but I hope I’m a part of the second answer.

Decade

Aside
Browser Add-ons, Mozilla, Mozilla Firefox, RSS, RSS Ticker

Major RSS Ticker Update Coming: What You Need to Know

RSS Ticker has been an alternative to Web-based feed readers since 2006, displaying feed updates directly in users’ browsers. It hasn’t seen significant change in a while, but some of the internal Firefox code used by RSS Ticker has changed enough that in order for it to remain functional in Firefox 22, its entire architecture would have to change. That’s a lot of work.

RSS Ticker

I didn’t want to abandon RSS Ticker’s users (especially with the shutdown of Google Reader imminent, already leaving one less feed reading option), but I also couldn’t dedicate the time to completely rewrite the add-on and keep all of its features. So here’s what I’ve done:

RSS Ticker has been completely rewritten. This has given me the opportunity to use the knowledge I’ve gained in the last seven years of programming to improve the overall design of the ticker and to restructure the code to play nicely with the new Firefox APIs.

What hasn’t changed? RSS Ticker will still scroll your feeds in your browser. You can still choose to put it at the top or bottom of your Firefox window. You can still exclude specific feeds. You can mark as read, mark feeds as read, open in tabs, open all in tabs, etc. You can temporarily disable the ticker. You can change the ticker speed, smoothness, and direction. You can hide the ticker automatically when it’s empty.

What has changed? In order to continue supporting RSS Ticker, I’ve had to drop a number of features. Here are some things you can no longer do with RSS Ticker:

  • Manually refresh the feeds.
  • Specify how often the feeds should refresh.
  • Randomize the order of the ticker items
  • Limit the number of items per feed
  • Display items that have already been read
  • Show unread items in bold
  • Manually limit the width of ticker items
  • Customize the context menu

I know some of you liked and used these features. I’m sorry I had to remove them, but it was the choice between removing them or abandoning the add-on altogether.

A few features haven’t been removed, but they have been changed (a.k.a. “improved”):

1. All of the remaining options (six of them, down from a total of 37) are displayed inline in RSS Ticker’s section of the Add-ons Manager.

RSS Ticker Options

2. If you want to temporarily disable the ticker, just uncheck it in the View > Toolbars menu.

Disable RSS Ticker

3. To remove a feed from the ticker (but not from your bookmarks), right-click on it in the Bookmarks Manager and uncheck “Show in RSS Ticker.”

Show a feed in RSS Ticker

This new version will be available in a couple of weeks after some more testing, but if you’d like to test it early, leave your e-mail address in a comment or ping me at chris@efinke.com and I’ll send you a copy.

Standard