Category Archives: Web Design

Broadcasting “Likes”

I figured out exactly what bugs me about Twitter and Facebook showing your friends’ “likes” in the timeline. It’s not just that they’re public — that’s true on Tumblr or Flickr or Instagram too, but you only see them when you choose to look for them.

It’s that broadcasting likes in the newsfeed blurs your intent.

  • A “like” is a message to the original post’s author (and a bookmark for yourself).
  • A retweet or share is a message to your friends or followers.

Putting them in your followers’ feeds turns a “like” into a message to them as well, even though it’s not what you intended. (If you wanted to share it, you would have shared it, right?) It’s a step above completely frictionless sharing, but it still messes with the signal/noise ratio of the timeline.

Why I Hate Infinite Scroll

Infinite scroll is like finishing a sandwich, and the server plops another one in front of you without asking what you want on it, or if you want it at all. If you’re full, or you don’t like what they chose? Too bad, it’s on your plate now! To make matters worse, sometimes if you put the sandwich down for a moment to eat some chips, they’ll think you’re done and swap your sandwich for a different one!

Slate just replaced pagination with infinite scroll on their articles. Yes, pagination sucks. A multi-page article on the web is like a burger that’s been sliced up into wedges, and you only get one wedge at a time, forcing you to go back to the counter every few bites. But infinite scroll isn’t an improvement.

Both approaches impose the wrong structure on a single unit. Search results and timelines are one thing, but for an individual piece of content, the best way to map it to a web page…is to just map it to a web page.

Update (Sep 2016): Combined with giant images and complex layouts that slow down browser rendering (*cough* CBR), it’s even worse. To continue the lunch analogy:

  1. You order a sandwich with a cup of soup and a side salad.
  2. After an interminable wait, you get the sandwich and soup, but no salad, and no spoon. The waiter rushes off before you can say anything.
  3. Eventually you’re able to flag someone down and ask for the spoon and the salad.
  4. You munch on the sandwich by itself, which is at least a decent sandwich.
  5. Finally the waiter comes back with a whole pizza, and takes away your half-eaten sandwich.
  6. You still don’t have a spoon, but that doesn’t matter because the waiter took the soup too.

Feedly 404 Feedback Loop

I set up 404 Notifier when I moved my Les Mis commentary to its own blog, to catch anything I might have missed while getting content moved and the new site set up. I then added the RSS feed to Feedly.

After a few weeks, I started noticing some odd links showing up to /r/bienvenu, but I couldn’t find anything that linked to that URL. Then I looked closer and realized it was Feedly itself that was hitting the link!

Basically:

  1. Broken URL gets hit.
  2. 404 Notifier adds the hit to the feed.
  3. Feedly retrieves the feed.
  4. Feedly follows the URL!
  5. Return to step 1.

The timing is inconsistent, but I think Feedly might be hitting the URL whenever I look at the list of “articles,” maybe checking for an image to use for the card in magazine view. And based on the first instance in the DB, I think it may have been a URL I used to test the plugin when I first installed it, then forgot.

For now, I’ve just removed the feed from Feedly. I’m considering altering the plugin to skip hits from Feedly, but I can probably just turn it off now that the blog has been up for a month. It’s served its purpose. If anything, it might make more sense to put it on this site to see if I missed any redirects (though I haven’t actually removed the old copies of the posts yet).

Recent Links: Geography, Internet and Comics

A few interesting links that I’ve been meaning to post for a while now.

Geography and History

Using and Building the Internet

  • Warren Ellis has given up on Facebook and Google+ because it’s just so hard to reliably reach or listen to people. Think of how many posts in your news feed you miss each day just by not being online at the right time, never mind the pre-filtering Facebook does to the firehose.
  • Page Weight Matters – an engineer at Google led an effort to cut Youtube’s bandwidth requirements by a factor of ten. Strangely enough, when they started a live test, average page load time went up. It turned out that people on low-speed connections had found out about it and started using it even though it took two minutes to load where they were…because even that was still better than the 20 minutes they’d been stuck with before. (Via Raymond Camden)
  • If you run an email newsletter, keep in mind that many of your readers will try to read it on a phone. Keep that in mind when designing your format. Giant images with no text aren’t going to be too helpful.
  • How to keep electronics going when you lose power for days: Generators, batteries, car chargers, solar or kinetic chargers, etc.

Comics

  • Some of the earliest UNIX daemon art was drawn by none other than Phil Foglio of Girl Genius fame.
  • Saturday Morning in Front of La Salle De Justice is a painting by Rey Taira in DC Comics’ gallery show, inspired by Seurat’s famous painting Sunday Afternoon on the Island of La Grande Jatte (the painting at the center of Sondheim’s Sunday in the Park with George), but recast with the Justice League and other DC Comics heroes. It’s making the rounds again now, but I first saw it on Firestorm Fan a few months back.

cfspreadsheet + GetTempFile() = NullPointerException

Every once in a while I encounter a problem with something so blindingly simple that

  1. I can’t imagine I haven’t tried it before, and
  2. I can’t believe no one else has documented the problem either.

ColdFusion 9 and later has a tag called <cfspreadsheet> which makes it dead simple to read, update, or create an Excel file. Want to plug the results of a query into a spreadsheet? Literally one tag with just three parameters.

There’s also function GetTempFile() that will create a guaranteed unique file on the server that you can then manipulate.

The obvious solution if you want to create a spreadsheet to download is to create a temp file, write to it with cfspreadsheet, then serve it up.

<cfset filename=GetTempFile(GetTempDirectory()) >
<cfspreadsheet action="write" overwrite="true" filename="#filename#" query="myquery">
<cfheader name="Content-disposition" value="attachment;filename=MyFile.xls">
<cfcontent type="application/msexcel" file="#filename#">
<cffile action="delete" file="#filename#">

It turns out this won’t work. You’ll get a Null Pointer Exception in the logs. Not because of anything you’d expect, though…it turns out that cfspreadsheet is relying on the file extension, and since GetTempFile() gives you a file ending in .tmp instead of .xls, it isn’t sure what to do with the file.

Solution: Find some other way to name your temporary file, and give it an .xls extension.