Weekend Reading — 80 seconds per hash

Published on

By Joe Dator

Design Objective

Off By One Half Attention to detail is what sets products apart:

If your wrist size lands in the “medium” zone on the Sport band, switching from the “Medium/Large” to the “Small/Medium,” or vice-versa, could be just the adjustment to help fine-tune the grip of the watch to your wrist.

okoeroo "Accidental Escher"

Tools of the Trade

The Ruby Community: The Next Version I also feel that Rails got too focused on the act of creation, at the expense of long term maintenance:

I remember being at a RailsConf where the new feature everyone was excited about were the project generators, which would allow you to build project templates so you could pre-integrate all your favorite libraries and then just bang out a bunch of cookie-cutter projects for each gig you were working. At the time I was trying to figure out what to do with a three-year-old Rails codebase and hadn’t created a new Rails project in about three years. I realized I was surrounded with smart, focused people who had totally different jobs, and that I needed to find some tools which were better equipped to solve the problems I had.

cut-release CLI tool for quickly cutting a new npm release.


As of Chrome 43, we can now (finally) copy to the clipboard programmatically w/o Flash. Demo:

Using Images in HTML Email Everything you need to know about images in email clients.

Working Copy Git client for iPhone/iPad which lets you clone, edit, commit and push, oh my.

Spotify Developer API Easter egg in the search API:

The field filter tag:hipster can be used in album searches to retrieve only albums with the lowest 10% popularity.

milessabin "This is what we had before data warehouses ..."

Lingua Scripta

Monolithic Node.js Stop what you're doing and go read this. We can avoid building dread monoliths, using small modules and microservices, two things Node does remarkably well:

If you believe that these large-scale Node.js systems will resemble the large-scale Java and .Net systems you have known and loved, then the answer is, emphatically, no. JavaScript is far too weak a language to support the complexity inherent in systems of such scale. … Despite this, we’ve managed to build quite a few large-scale systems at my company, nearForm. Here’s what we’ve learned, and how we do it.

We have a problem with promises TL;DR promises are shitty for flow control: you're replacing callbacks with callbacks, except with this new abtraction that's a powerful magnet for bugs. But then, ES7:

This is a huge boon to JavaScript as a language. Because in the end, these promise anti-patterns will still keep cropping up, as long as our tools don't tell us when we're making a mistake.

The beauty of ES7 async/await is that, for the most part, your mistakes will reveal themselves as syntax/compiler errors rather than subtle runtime bugs.

Promise errors in io.js Speaking of error handling in promises, make sure your code catches unhandledRejection. This works with built-in promises in latest io.js, and many promise libraries, like Bluebird (I use a blend of both).

Benchmarking JavaScript Slides from the Goto Conference, about V8 optimizations, and this one weird JavaScript trick:

18% speedup by replacing o.f() with (0,o.f)() in the code that never executes

The Big Kahuna: Underscore + Lodash Merge Thread The spirit of reconciliation is strong with the Node community.

JavaScript Framework Developers Anonymous

Lines of Code

Why the way we look at technical debt is wrong Absolutely:

So — I’d argue it’s actually OK to accrue technical debt in areas of your application that are not going to change often. The reason is this:

Technical debt is only debt in that it hampers agility. Codebases that are poor take more time to develop new features against. Testing is slower. Switching domain modeling is more painful. Financial debt, however, accrues interest and hurts more regardless of what it is incurred for.

Why Good Developers Write Bad Code TL;DR organization and team structure.


RT @liammclennan: “functional programming won. Regretably no one noticed.” #ylj15 < that's cos there were no side effects

youfoundryan "The official lullaby of @lambda_conf by @extempore2"


Developer Accused Of Unreadable Code Refuses To Comment

Like Minded

awesome-slack A list of communities powered by Slack.

Blab It's like, but you get to watch tech teams teleconference.


@github needs Craiglist's "Is not OK to contact the owner of this repo to their personal email address for support questions"

GitHelp This is one way to solve the support problem for open source projects. It provides a UI that parallels Issues, but for asking questions and requesting help, with easier code sharing, 1:1 sessions, and I'm assuming some payment options.


Organizational Debt is Like Technical debt — But Worse

Unless they were planning to flip this company, organizational debt was going to hit faster than they could imagine. They needed a plan to “refactor” organizational debt. And Tom wasn’t going to get it from his board.

10 great ways to impress a software engineer on their first day A good on-boarding process goes a long way.

10 things the best speakers never say Choke full of good advise, my favorite is keeping your slides short and text large (5/6), think Twitter not Medium:

The rule is to make the font size on your slides twice the size of the average age of the audience. That means that if you expect the audience to be 40 then you are stuck with a font size of 80 points.


Never attribute to malice what can be attributed to a sufficiently amount of unanswered email

Locked Doors

Secrets, Lies, and Account Recovery: Lessons from the Use of Personal Knowledge Questions at Google Security questions offer questionable security. You know that, in case you need to convience others, this research paper will help:

Our analysis confirms that secret questions generally offer a security level that is far lower than user-chosen passwords. It turns out to be even lower than proxies such as the real distribution of surnames in the population would indicate. Surprisingly, we found that a significant cause of this insecurity is that users often don't answer truthfully.

Logjam: the latest TLS vulnerability explained 1990's export restrictions on cryptography, the gift that keeps on giving.


The first rule of smartphone is absolutely no one else gets to use your phone. They don't even get to be alone in a room with it.

hacks4pancakes Re: AdultFinder hack:

So, here's this unwritten law of data breaches: they will probably happen to the most embarrassing site your email address is registered on.



It's adorable how you refer to what you do as "engineering"

assaf "Clouds. VMs. Containers."

None of the Above

Updated Chess pieces

Notes on the Surrender at Menlo Park All about Facebook Instant Articles, sharecropping media, and new advancements in sponcon. But also about this:

And to the various Facebook employees who have expressed surprise and disappointment, in public and to me directly, at the constant criticism their company receives: It’s not about you. It’s not about your ideals. It’s about a reasonable concern, based on the history of the internet and the modern economy in general, that the priorities of powerful partners usually change, eventually, in the partners’ favor. That this seems complex and mystifying from both sides of this arrangement is an example of the incredible power of professional rationalization.


Welcome to @Twitter, @POTUS! One question: Does that username stay with the office? #askingforafriend

Bitcoin mining on a 55 year old IBM 1401 mainframe: 80 seconds per hash The hacker spirit:

The IBM 1401 is almost the worst machine you could pick to implement the SHA-256 hash algorithm. The algorithm is designed to be implemented efficiently on machines that can do bit operations on 32-bit words. Unfortunately, the IBM 1401 doesn't have 32-bit words or even bytes. It uses 6-bit characters and doesn't provide bit operations. It doesn't even handle binary arithmetic, using decimal arithmetic instead. Thus, implementing the algorithm on the 1401 is slow and inconvenient.