A Few Key Posts

For those who feel 2+ years of a blog qualifies as TL;DR.

Posted in Feelings, myExperience | Leave a comment

Open Letter to Potential Employers

I would do it for half this. In fact, I’d take a 50% cut in my current salary (which is nowhere near this high) for a job that was fun, creative, challenging, and otherwise stimulating.


I had to euthanize my heart and soul a couple years ago to stop the pain. I’m studying my ass off and I can feel a new heart and soul growing inside me. I can’t wait to offer them to someone …

Posted in Career, Feelings | Leave a comment

Breaking Stuff Is Good

In preparation for integrating what I’ve learned in the Grow With Google Challenge Mobile Web course into my rockin’ app, I did some spring cleaning. Getting rid of all the files with duplicate-ish names like handle_albums2, handle_albums3, handle_albums4, handle_albums_test, and so on.

I broke the app.

I’m sure I was saving those for a reason but I was also sure I was being a hoarder.

In my attempts to fix it, I realized there was a much more efficient way to organize everything that would fix some ongoing issues. So now I’m doing that.

Progress is good because I am so dying to start the Data Visualization part of the app which is, ultimately, it’s whole purpose. I’ve been dying to put stats up using the data I’ve gathered so far but it would be with graphs made in Excel and … that’s cheating … I want to use D3 … so … no wasting time with stats and trivia that could be spent improving and nurturing the app.

Meanwhile, I am on my biggest David Bowie kick since the 80s. My top five artists change their order and slots a lot but the top five generally stays the same. David Bowie is always there but it’s been a long time since he was the #1 top rotation in my music collection. He wasn’t even #1 when he died. I was too busy crying and did not want to be one of those “I love David Bowie!” people jumping on the bandwagon just because he just died. Yeah, I’m that pretentious prick. I know. I’m sorry.

Finally listening to Blackstar. The videos were so creepy they scared the crap out of me and I couldn’t listen to the title track or Lazarus. And since I couldn’t listen to those, I just didn’t listen to the rest of the album.

The Next Day, however, is easily in my top three Bowie albums. It’s been #1 on my Bowie list since it came out.

Posted in Learning, myProjects | Tagged | Leave a comment

Fixing iMac WebCam

I keep meaning to post about anything that breaks and I learn to fix. I do that a lot but nowhere near as often as I learn and fix things. My latest issue was my iMac‘s webcam not working. I’d just get a black “screen” where my face usually is.

Fortunately, the fix was less scary (sometimes, just typing stuff I don’t know or understand into the terminal is frightening but I’m so desperate, I can’t wait) and much easier than usual.

If your iMac webcam isn’t working in PhotoBooth or FaceTime, for example, type the following into the Terminal:

sudo killall VDCAssistant

You’ll probably have to type your administrator password.

I didn’t even need to restart PhotoBooth.

Posted in Mac OS | Tagged | Leave a comment

My Future In Data Journalism

Is there a cooler phrase in the English language than “Data Journalism”? I didn’t think so!

The hottest thing on my To Do list this very second is Google‘s Data Journalism course.

Directly Related links:

Indirectly Related links:

Ugh … what was the site from which I first heard of “data journalism”?

Note to self … it’s bookmarked in your browser at work.

Ah-hah! It was ProPublica! Because of their Data Store! Yay!

Seriously, I’ve written about the mind-bogglingly awesome gamified eLearning at AlJazeera.com … but I can’t find that post (right now) to link to …

Posted in elearning, Google, Open Data | Tagged | Leave a comment

Procrastinating Is Now A Tradition

I say “tradition” because, if it’s really a “habit,” that makes me very sad.

It turns out, My Second Cron Job didn’t do it’s job. I looked at it (after the first few of the new batch of reminder emails) but couldn’t figure out why it didn’t work. The tutorial mentioned in that post might just be wrong, I still need to check on that …

… someday.

On the bright side, My First Cron Job has been faithfully gathering data from Spotify. Once I have a little time — this isn’t procrastination, honestly, it’s time management with school, job, wife, kids — I need to write the other scripts to gather not just Artist data but also albums and tracks.

I really, really need to not put off security tasks because at best, somebody’s shizzle is compromised and, at worst, I can’t be a smug, self-righteous prick when others have security issues without being a hypocrite.

Posted in myProjects, UNIX | Leave a comment

Promises for Five-Year-Olds

This is a work in progress …

I’m happily going through the Grow with Google Challenge Scholarship: Mobile Web course at Udacity. We use javascript promises throughout which I kinda sorta basically understood the basic concept of. I didn’t completely get it but I knew we’d cover it later and everyone in the forums raved about Udacity’s standalone JavaScript Promises course so I planned on taking that after finishing Mobile Web. I wasn’t worried. I understood the structure just enough to put things together and pass the quizzes (eventually) by basing my answers on examples we were given.

I got the How (they worked structurally) but not the What (they were doing) or the Why (would I use them versus callbacks and/or Event Listeners).

I got to the Promises part of Mobile Web and it still didn’t really make sense to me. So I stepped out and started the JavaScript Promises course. That was great for a few minutes then I was lost again. I can’t tell you how many times in both courses I’d said, “Wait, wait … what?!”

This isn’t a criticism of those courses and sections. My learning style is just incompatible with certain teaching styles. I don’t do well when people say things like, “A promise is a promise that returns a promise—get it?”

No. No sir or ma’am, I don’t.

I posted a question in the forums, “ELI5 How Promises Work” and gave a couple examples of how I thought they worked based on the only thing I really knew about them – they were an ES6 replacement for callbacks … right?

I didn’t wait for answers because I was scared I’d get buried under other terminology and crap that meant nothing to me and would only confuse me more. I grabbed my Google Search box by the throat like Jacob wrestling with God and shouted, “I’m not letting go until you explain promises to me!”

The MDN documentation had me for just a moment or two as well but also lost me.

For the life of me, I couldn’t understand how Promises were related to Callbacks when (I thought) one was replacing the other and it seems to me callbacks were doing all the work anyway. And … eventListeners, right?

The ridiculously awesome Jake Archibald wrote a legendary thingy on Promises that finally started me down the road to understanding. First of all, I realized callbacks aren’t asynchronous … they’re merely blocking, meaning … well, I love Jake’s explanation (which I’ve paraphrased a wee bit):

Sneezing is a blocking function. All current activity must be suspended for the duration of the sneeze. You don’t want to write code that’s sneezy.

That made perfect sense to me. Callbacks aren’t asynchronous … nothing is happening and I’ll do other stuff while it’s happening and when it’s done it will let me know … everything stops while I do this thing and when I’m done doing this thing everything starts up again. Got it.

Jake also said,

“Promises are a bit like eventListeners except … we’re less interested in the exact time something becomes available than reacting to the outcome.”

Okay. That makes sense. Jake also gave a couple examples that, at first, smacked me into “Wait, what?” land again but I took a deep breath and re-read it … and felt I had a loose grasp on it all. I’ve been there before, though, and those cookies of understanding can crumble and fall through your grasp right before your eyes.

Sadly, Jake soon lost me.

As it turns out, Promises are pretty freakin’ easy … until people try explaining them. Eventually, I found two resources that changed all that. The two most valuable things I dug up:

Don’t just read the chosen answers at each. I read through all the comments and answers and replies and they are both a treasure trove.

Even just the titles made me feel much better about my confusion.

Aviv Cohn, the author of Aren’t Promises Just Callbacks? gave this ridiculously short and simple of a callback in his question and all of a sudden I finally understood callbacks so I made some real progress even before reading the replies! Cohn then explains promises in his own words,

“A Promise is an object that represents a value which might not yet exist [emphasis mine]. You can set callbacks on it, which will be invoked when the value is ready to be read.”

That sentence immediately made sweet love to things Jake had said and gave birth to some more understanding on my part. Cohn then gave the promise version of his callback code and concluded by asking,

Is there actually a real difference? The difference seems to be purely syntactical.

The first response started to beat the crap out of me with,

“Yes: callbacks are just [insert crap I couldn’t understand]. Promises are [more crap I didn’t understand] … a composable mechanism to chain operations on values.” [emphasis mine]

Oh. Okay. I don’t know what “composable” means (more on that later) but the rest of the bit in italics made more stuff click into place. Another answer blessed me with,

It is fair to say promises are just syntactic sugar. Everything you can do with promises you can do with callbacks … The deep reason why promises are often better is that they’re more composeable, which roughly means that combining multiple promises “just works,” while combining multiple callbacks often doesn’t.

First of all, thank you for defining “composeable.” Second, this person then goes on to drop a whole bunch of other magical wisdom explaining the difference and how they work and why — in freaking English — including working with values and errors and this:

For the example you gave of a single callback versus a single promise, it’s true there’s no significant difference. It’s when you have a zillion callbacks versus a zillion promises that the promise-based code tends to look much nicer.

Posted in Frustration, JavaScript, myLearning | Tagged | Leave a comment

So-Called Newbie Mistakes (We Often Never Stop Making)

I’ll be fleshing this out over time … for right now, it’s just a bulleted list … or maybe a little better …


You’re not stupid, you didn’t do anything wrong, you just forgot a semicolon, or a parenths or a curly-brace or it’s case sensitive or … a large part of “debugging” is proof-reading … before you waste hours or days … check your “spelling.”

Chasing Your Tail

You’ve exhausted every idea and solution. You’ve deleted everything and started from scratch multiple times. You always start with the same clean line of code you copied and pasted from … wait … what?

The Tutorial (or Documentation or Book or instructions) Is Wrong

It might not be you at all. This guy wrote a freaking book — it couldn’t possibly have mistakes in it! Right?

The worst part of being a newbie is you don’t know what you don’t know. You assume the resource that’s supposed to be teaching you is correct. There may be typos. The instructions may be wrong. The documentation may be out of date.

Some Ingredients Don’t Mix

The language you’re learning may have changed significantly. I started learning D3 using version 2 … maybe v3 … I picked it up again and changed my links — switching from local files to these fancy, new-fangled CDNs … and my code didn’t work at all anymore.

Most of the JavaScript you’ve learned is what we call ES5 then you find this great new tutorial teaching ES6 witchcraft … and they don’t mix. Your editor won’t even let you type it.

What are YOU doing wrong? Nothing. You just aren’t aware of … everything … yet. And you never will be. But the list of essential stuff you don’t know will continually get smaller.

Overthinking It

You know more than you think you do. Sometimes your instincts are correct. Sometimes it is just that easy.

Wanting to Be Great Before You’re Even Good

Is there a better way? Yes. Probably. Does your code need to be beautiful, awe-inspiring, and make seasoned hackers faint because they’re so overwhelmed with your talent? No.

If it works, it’s right. I know you want it to be elegant. I know you do.That’s a good thing and it will come with time. In martial arts, you want to learn technique and accuracy before you build speed. Code is the same thing. No white belt looks graceful. Nobody’s first poem is impressive. Not even mine.

Are there people who will make fun of you and be mean? Yes. They’re called assholes. Fuck those people. Don’t worry about what people will think when they look at your code. Grownups will know that you’re learning. Even if you’ve been doing it for years, grownups can teach you and mentor you without being dicks. Those people on StackOverflow who belittle and kick people while they’re down and having problems are called trolls for a reason — because they’re ugly and live under a bridge with their mom.

Posted in Coding After 40, Coding After 50, Learning | Leave a comment