johnk's blog

In defense of crappy programming languages

I've been doing a lot of Javascript and Python lately, and they're both kind of crappy, quirky languages, but are fun. There aren't many languages that aren't quirky. C and Scheme and Lisp come to mind. Maybe Java and C#, too.

Javascript Double Exclamation

It's a way to cast any variable to a boolean.

var x = true;

!!x === true; // this is a fact

Sometimes, we do a check on an object:

if ( {

However, if we assign a variable like this:

var isFoo =;

isFoo will now contain a reference to 
If you want isFoo to contain the truthyness of, you do this:

var isFoo = !!;

A Few Ideas for Mobile Augmented Reality Apps

I've been playing a game called Ingress and it's got a lot of interesting ideas in it, because it's like a tour guide to public artwork. Here are some ideas for more apps, specifically around LA.

LA tour of the Mexcian-American war.

LA tour of the old Chinatown and the New Chinatown.

Something that lets you record audio at a location, and when someone else goes to that location, they can hear the audio.

The same thing for historic photos and photos.

The same thing for poetry and spoken word texts and written texts.

The same thing for music.

Nesting Angular Directives

I've been learning how to write directives, and it's really tough to grok how to do it. This blog post's been rewritten three times so I don't come off as totally ignorant about the "right way" or "the Angular way" to do things.

What I'm trying to do it implement a menu display with lightweight, role-based control over what is displayed.

My first iteration was done entirely with controllers, HTML, and jQuery and plain Javascript. That was clearly not the Angular way, so I revised it a little bit - CSS animations, and let's use directives.

Angular Service and Factory

I was reading the docs, and read things that seemed to contradict what I thought. I thought that Services were singletons, and Factories were instantiating new instances. It turns out that's not quite right. It's explained well here.

Base32 Encoding and Decoding in Javascript

This is a simple implementation of base 32 encoding and decoding that conforms to RFC 4648.


I just had to update my JS toolchain of node on up. NPM is insane. Not just the tool, but the packages.

CSS Animations via Styles (similar to jQuery animations)

This article is a little obsolete, because the latest way to do animations is via CSS Transitions but browser support isn't all there yet. This explores how to do CSS-style based animations, where the animations are controlled via Javascript code that adds and deletes class names from the className property.

Cloud Storage Reviews Dropbox, OneDrive, Google Drive, iCloud

If you want to read some professionally written reviews, I read these:
PC Advisor
PC Mag
My review will be a lot shorter: Dropbox. Explanations below.

I Think I Got Scammed - My Battery Desulfator Experience

I just bought one of those "battery desulfator" devices on ebay. The brand was, but there are numerous different brands, and there are some that are added to battery chargers. This essay explains why I got bamboozled.

A funny RAID 1 failure factoid: you will fail more

A funny thing about RAID 1 disk mirroring, is that if you implement it on your computer, you're more likely to experience a failure. The trade off is that the failure won't be catastrophic.

Sign up for Ebates to support this site (and get cash back)

Ebates is a shopping aggregator that passes along a small portion of the sales commission to you. For example, they negotiate to get 3% commission on a sale, and pass 1% on to you. Combine that with a 1% or 2% cash back on your credit card, and some other discounts, and you can save a little more money.

If you sign up through the link below, I get a commission for your signup. This helps pay for this site, which is free for all readers.

Sign up using this referral link.

Blog comment response about burrito survey.

I was reading an old blog post, and found an annoying comment, and responded at length with some info which i've learned in the past decade or so.

John 2/3/14, 2:03 PM

Los Angeles Auto Repair

I own an old car, and am holding out until the used hybrids are a little cheaper (and less old, I guess). Besides, it's a 95 Corolla with only 100k miles on the engine. It can go another 50k to 100k. Here are the places where I've gotten auto service, and trust, and would hire again:

Potrero Auto Electric on San Gabriel Bl. in Rosemead
Rivera's Auto Repair and Transmission on Mott and Whittier.
Vermont Auto Center, Vermont and 22nd in LA

I've also heard good things about the following, but haven't been to:
Sako's in ELA, Aloha in SSG.

Django, forcing a specific migration

Migrations are awesome magic, until the magic fails. Then it's an awesomely frightening engine of change that threatens to wipe out your entire database.

So, before doing what I say, backup your database.

I had to enforce a "unique=True" constraint on a model. Migrations are supposed to automatically create a constraint in SQL, as well as its implied index. A quick look at the indexes (SHOW INDEXES FROM Model) didn't show the index.

Syndicate content