Ok Glass, Write a Review

Hello. My name is David and I am a Glasshole. I realize after a month with Glass you get that monicker whether you use Glass obnoxiously or if you just quietly go about your business with it. That’s one of the issues with Glass but it’s not the only issue.

The Bad

That’s hot

And not the way Paris Hilton used to call everything “hot,” I mean this thing actually gets uncomfortably warm after extended use.

This is heavy

And not like Marty McFly used to say, I mean it weighs a lot for glasses. The device is actually startlingly light, but it’s heavy by the standard of glasses and after about an hour I have to give my right ear (the one bearing all the electronics) a break.

Crashes and reboots

The latest update seems to have fixed a lot of this issue, but it was still a huge pain to have it reboot out of nowhere or worse; during use.

Turn off and stay off

Glass seems to power itself on when it’s plugged in. I powered you down and plugged you in because I’m not using you, Glass. Don’t turn on because I plugged you in, that will just make you charge slower. And speaking of charging…

Battery life

The battery life is less than stellar, even with only moderate use. On the other hand, the device is so small and is doing so much network heavy stuff it’s impressive the thing lasts as long as it does.

Okay. I get it. It’s kind of (incredibly) dorky. It’s apparently also a terrifying invasion of everyone’s privacy (unlike the super futuristic spy device we all carry around all the time in the shape of a smartphone), but the constant remarks and snide comments are benefiting exactly no one. Relax.

Only some notifications

This one is a little petty but it’s one of the big reasons I’m looking forward to Android Wear so much; I want ALL of my notifications to go to my second screen, not just some of them. If I even allow a notification at this point it’s because I want to know about it.

The Good

Screencasting

People will constantly ask you what it’s like and you can cast what you’re seeing on Glass to your phone screen.

Hangouts are awesome

When they work, which isn’t always, but being able to show someone what you’re looking at live and remotely is pretty cool. Particularly if you have a new baby and live far away from your family. Which is also why…

Photos are surprisingly good

The photos glass takes are actually really solid. And with a dedicated shutter button (plus the voice command and ridiculous wink action) it’s super fast to snap a photo of whatever is in front of you. This is probably the deal-maker feature for me because I can play with my daughter and snap pictures of her without a camera separating us and interrupting.

As a lifelong gamer, having a HUD map with my destination marked and my path highlighted is kind of a childhood dream come true. Now I just need Bluetooth low energy speakers everywhere to play situation appropriate music when I’m around.

The Conclusion

Google Glass isn’t magical, but it has magical moments. It’s usefulness to average people is debatable, but when it is useful it’s really useful. It gets a thumbs up from me because it is an incredibly future thinking project. The main complaint people have about Glass is that it’s dorky (a close second being a tie between battery life and “privacy concerns”) but if it looked indistinguishable from regular glasses, or somehow was in a contact lens (or just became stylish over time) then people would hail it as a revolution in computing. HUDs and wearables are going to happen, and we need to be willing to engage in these experiments and wackiness to find out what works, what doesn’t, and what the social boundaries of cutting edge technologies are.

Why I Code Part 2

Early this month I wrote a post about why I code (tl;dr time is valuable to me), but there is another equally important reason I appreciate software: human error. Right or wrong, computers only do what we tell them, whereas people do basically whatever the hell they want and frequently aren’t even aware of what they’re doing. Guess which one causes more problems?

I’ve spent all of my professional career in academia, which is the only organizational culture that gives politics a run for it’s money on red tape and nonsense. Human error comes into play is when we take our beautiful, powerful, super-magic-future tools and use them as glorified typewriters. Got a survey to send out? Let’s do it on paper and then transcribe the results! Got thousands of records to make minor changes to? Sounds like a job that needs to be spread out over days or weeks as each row is changed in excel by hand. Need to coordinate a meeting with a large number of busy colleagues? Plain text emails to the rescue!

You cannot complete lengthy, time-consuming, monotonous tasks without human error. Anyone who says otherwise is either a liar or a robot disguised as a human. Yet day in and day out I encounter people who insist on doing things by hand even though it’s boring and unfulfilling work that will generate more work when they have to fix the problems caused by their errors. And there will be errors.

The first “real” software I wrote was to automate a boring task I was asked to do by hand. After a few weeks of nearly falling asleep due to boredom (and causing tons of errors in the process) I decided to try my hand at automating it. When I told my boss I had automated the task and it would no longer take me 20 hours/week of wasted time they had no idea what I should do instead because my time was budgeted for this ridiculous task. Did I mention that awful task had been performed by hand for years before I started working there?

And the bar for accuracy isn’t even very high; as long as my code didn’t generate so many errors that I spent more time fixing them then I would have spent doing the task by hand then it’s still a win long term. The only two reasons that leap to mind of why someone would keep doing things by hand when it could be automated are:

  1. They don’t know any better
  2. Having a horrible monotonous task no one else wants keeps them employed

I don’t blame people for reason #1 and I try to spread the good word of technology whenever possible. I absolutely blame people for reason #2, especially when their excuse for not modernizing is “I’ve always done it this way.” Technology is not always the answer, but it is the answer for human-error prone monotony.

And if you’re the kind of person who actually wants to spend their career doing horrible boring error-prone work that could easily be done by a machine, freeing you up to do something more interesting, than I just don’t understand you.

Why I Code

Want to learn to code? There are no shortage of initiatives, startups, after school programs, TED talks, blog posts, and more all telling you where to learn to code, how to learn to code, and why to learn to code. The why is the part that comes under fire quite a bit. There are many opponents of the “everyone should learn to code” movement, and since I am not professionally employed as a developer, it gave me pause; why do I want to code?

The reason can be summed up thusly:

Time is valuable to me.

– David Lyons

There are lots of other reasons:

  • $$$
  • I enjoy it
  • I’m not half bad at it
  • It opens up lots of career options
  • It seems to be the way “things are going”
  • You get a sweet title like ninja or guru

But none of these other reasons matter because I’d still do it if all it did was save me (and others via my efforts) time. Because it’s never really just the time of doing the thing, it’s also the time of planning the thing, scheduling the thing, being interrupted to do the thing, remembering to do the thing, fixing the thing when you screw it up because you’re not a robot and boring tasks bore you…

Every time I catch myself doing some repetitive task that is a prime candidate for automation I am first angry that I didn’t identify the task as an automation candidate earlier and then elated that this task I hate is an automation candidate then I automate it because time is valuable to me.

Geeks and Repetitive Tasks

Of course there are lots of other things about coding that are fun and interesting: solving real problems, furthering mankind’s understanding of the universe, making reddit bots, but if all I ever get out of coding is making my own life easier (I don’t have to do the task anymore), faster (robots are faster than I am at most things), and less error prone (don’t get me started on human error) then that is reason enough for me.

I may have also just convinced myself to write a sequel post to this entirely about human error.

Over Promising Makes Me Hate You

I could make the title slightly longer and say that constantly over promising makes me hate you eventually, but it’s long enough and true enough.

We deal with over promising all the time in advertising and casual conversation:

“Greatest. Movie. Ever.”

“This pill will make you thin without dieting or exercise!”

“This is my favorite food. I could literally eat it all day every day.”

“Learn French in just 30 seconds per day!”

But those are ads and conversations with friends. We know they’re hyperbolic either to try and convince us to buy something or for comedic affect and that is just fine. What I’m tired of is when I’m relying on someone and they swear up and down it shall be done and then they fall short. Really short. Every. Single. Time.

Things happen. People make mistakes. There are unknown unknowns. I get that.

Demotivational Poster: Unknown Unknowns

But people who constantly and wildly over promise aren’t optimistic fools, they aren’t just unable to assess a situation before they predict an outcome; they’re inconsiderate at best and outright liars at worst. Everyone knows someone like this: the friend who is always late and brimming with excuses, Dante’s boss in Clerks always making him work on his “day off”. It’s annoying. It’s unacceptable. It needs to stop.

I won’t tell you how to deal with the over promisers in your life, but I’ve decided I am just going to avoid them as much as possible. Too often I’ve been left scrambling to salavage a project to go on tolerating their nonsense. If, on the other hand, you’re one of the people I’m talking about, stop being such an unreliable git. No one appreciates this behavior, in any setting, anywhere, ever. (And that’s no hyperbole.)

Walking the Security Walk

Almost every day I witness security atrocities: weak passwords, using the same password on every site, unlocked smartphones, unprotected wifi, people walking away from unlocked computers, and one of the worst of all, sharing passwords.

Share passwords, get slapped.

This is what I imagine doing every time someone tells me they gave someone else their password.

Why should you care about having strong and unique passwords? A different big site seems to get hacked just about every week, and if you’re using the same username and password all over then the bad guys can get into all of your other accounts. And if you’re thinking you don’t care about your online accounts think of these two things:

  1. the damage someone can do if they can “be” you on social networking and other public forums is very serious
  2. if bad guys get into your email they basically own you because they can now reset passwords to other things… like your bank

There is no denying it; as security increases, usability decreases. Until we have some sort of un-fakable way of identifying a person we’ll probably keep using the username/password combo, and as long as we have usernames and passwords people will use password or fido1 and other crappy guessables. (Sorry to all the people whose passwords I just posted.)

Fortunately password managers are a thing, and they’re dirt cheap and pretty simple. I use LastPass myself because it works everywhere. Recently I went through the Security Check they offer and I was repulsed by my results. I had duplicates! And weak passwords! Unacceptable!

It took the better part of a day (no reason it had to be done all at once, but hey), and I brought my security score from 65% to 88%! Why not higher? Sadly some organizations are still stuck in the 90s and have a short maximum length to their passwords, or they don’t allow special characters, or some other ridiculous set of rules that compromises security. Also, a couple of accounts are still being upgraded because they had other issues that had to be resolved first. Finally, I have to maintain a few passwords for other people’s accounts (!!) for work, and their passwords suck, so I get punished for it in the audit.

65% all the way up to 88% in one day

One of the biggest wins was actually killing off tons of old accounts. That 65% score was for over 220 accounts, and the 88% is only 171. Whenever I came across an account I didn’t want anymore I closed it instead of improving its password. Sorry some random website I commented on 6 years ago, I don’t need an account anymore. A surprising caveat to this is that most forums apparently do not let you delete your account so they can maintain the integrity of your posts even if you never posted (remember when you needed an account just to search a forum?) In these cases I just made my password super strong and resigned myself to otherwise forget about it forever. Another surprising thing was how often people on these forums said “Why delete your account? Why don’t you just never come back?” To which I say “How about you just delete my damn account since I’m never coming back?” I did not expect this indifference towards orphaned accounts.

The long and short of it is that using a password manager makes having strong and unique passwords trivial. Two-factor auth, and device encryption are also awesome (and I’ll post about them later), but you can vastly improve your situation just by making your passwords not suck. There are no valid excuses. Use LastPass, use 1password, use RoboForm, but use something.

I Have Plenty of Time, This Just Isn't a Priority

I’ve been trying for a long time to get the phrase “I didn’t have time” out of my speech and replace it with (some variation of) “I didn’t make this a priority”. It forces me to be more honest with myself about what I did with my time.

When someone says “I didn’t have time” they’re probably saying one of the following:

  • “I didn’t make this a priority”
  • “This was on my list but other tasks took more time than expected”
  • “Something unexpected came up that changed my priorities”
  • “I over promised what could be accomplished with the resources I had available”
  • “I have no intention of ever making this a priority”

So why not just say the thing you actually mean? Partially because it means potential reprisal from the person you’re talking to (“What do you mean this isn’t a priority?!”) and partially because you’re lying to yourself. You’re a good person, right? You do what you say you’ll do. You just didn’t have enough time!

It’s not my fault! Time just got away from me!

The real problem is when you’re reflecting on your day, week, year, or life, and you think “I didn’t get that thing done because I just didn’t have time,” when in reality you just never made it a priority.

  • Why aren’t you in shape?
    • No time to exercise!
  • Why didn’t you write that novel?
    • No time to write!
  • Why don’t you [anything]?
    • NO. TIME.

When you admit that things aren’t a priority it helps you recognize what is actually important to you. If you’re making things a priority that aren’t important to you then you need to make a change. If you watch tv for hours every night before bed instead of starting a business but you’re happy with that, then just admit that starting a business isn’t really a priority to you and stop acting like it is. On the other hand if you lay in bed every night and think you wasted your time you need to figure out why you aren’t prioritizing the things that are important to you.

Maybe those things are not important to you. Or maybe you need to work on your discipline and change your priorities. I think people are happier when they’re honest with others, and with themselves; I know I am.

Flipping Tables Podcast Launched

Flipping Tables Podcast logo

When you’ve got a lot of projects going on what’s the smartest thing you can do? Add another project, of course! So I did, and it’s a podcast.

I do so love to talk. It’s particularly fun to debate geeky topics near and dear to my heart like gaming, movies, and technology, chiefly because there typically isn’t a right answer. My friend and colleague, Michael Edwards, suggested we do a podcast some months ago but I dragged my feet until recently. He told me to stop being a lazy ass We finally decided to just go for it and the Flipping Tables Podcast was launched!

If you’re into tech, gaming, culture, and (╯°□°)╯︵ ┻━┻, then go have a listen and subscribe in your favorite podcatcher.

Institutional Knowledge and Axe Murderers

“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.”

Those are wise words to live by, and I think they apply equally well to institutional knowledge.

According to Stack Overflow the above quote is attributed to John F. Woods on a 1991 forum post. It’s pretty well known in developer circles, but I think it should be slightly augmented and posted on the walls of offices everywhere:

“Always work as if the person who ends up doing your job next is a violent psychopath who knows where you live.”

The difference is subtle, and it’s all about Institutional Knowledge or all the crap that only you know that over time has become essential to the function of your organization. If you got hit by a bus tomorrow (too grim? Let’s say you won the lottery and quit) could your team go on without you?

Think about all the times you answer the same question because “you’re the one who does that” and think of all the times something you’re working on grinds to a halt because the person who knows the answer is on vacation. “I guess I’ll finish this when so-and-so gets back,” you sigh and say.

Instead of shrugging it off, let these moments inspire you to pull this useful and mission critical knowledge (much of which does not seem that important but it is) out of your brain and put it into a team wiki.

Or something.

Even a long word doc with headers is better than letting all this information travel by word of mouth only.

We have writing. We have computers. We have the freaking internet. Why does most of the useful information in an organization still travel by oral tradition and bard song?

The Registrar is DRM for Education

The longer I work in higher-ed the more sure I become of the titular fact: the Registrar’s office is the DRM of the educational system.

Think about how DRM works on software and other digital purchases

  • it limits/prohibits what you can do with something you paid to “own”
  • it limits/prohibits access
  • it limits/prohibits sharing
  • it makes simple tasks like moving and accessing your own content difficult or impossible
  • it does absolutely nothing to stop people from circumventing it

I have never heard of a DRM system that stops people from pirating content. Amazon books? Beaten. iTunes purchases? Beaten. Blu-ray discs? Beaten. Steam games? They apparently have a plan for this that doesn’t screw users.

My point is these DRM systems only hurt legitimate, paying customers who want to support your [whatever] and purchase your [whatever you make]. This is particularly true of education, and it is more true today than it has ever been. If you want to learn about anything you can do it for cheap or free and often times faster with superior results outside the traditional education system. The only bastion left is that higher-ed is the degree granting authority and you need a degree to get a good job. No, it turns out most people realize that’s not true.

Why then are these institutions so arrogant that they turn people away, turn money away, and turn away new opportunities to extend their reach? Of course there are lots of factors

  1. tradition
  2. resistance to change
  3. preference for the old ways
  4. “we’ve always done it this way”
  5. institutional inertia
  6. etc.

Institutions that continue with the ivory tower gate keepers of knowledge model are going to find themselves in a very precarious position very soon. And by soon, I mean 10 years ago.

Ok, so some DRM is hilarious.

On MOOCs And Course Quality

If you are involved in education, technology, or just have been alive in recent years you’ve likely heard of MOOCs. Some people hail them as the savior of higher ed. Some people say they’re a massive waste of resources. Then some other people teach a MOOC and make sweeping and ridiculous generalizations about online education. Guess which one this post is about?

This post has been a long time coming, but it was finally brought out of me in response to an article on dailycamera.com about MOOCs offered by CU Boulder.

Full disclosure I work, and have worked, in academic technology for my entire career. I am a strong supporter of online education, but I know that it isn’t a magical cure all. I also know, and mountains of research will agree with me (seriously Google it, it takes like 5 seconds,) that online education can be every bit as effective as face to face courses or better.

Why do I stress “or better”? Because there is a prevailing notion in education that online courses have to prove their quality (there are quality metrics and certifications by the boat load) but face to face courses are assumed to be good because that’s the way we’ve always done them. Even though there are studies that show lecturing is most often not the best way to teach, it’s the prevailing way classes are taught.

So let’s consider one of the examples from the article:

  1. Instructor teaches a classroom section of Physics by lecturing
  2. The same instructor teaches a MOOC that is as close as possible to the classroom version (recorded lectures)
  3. Students who complete either course have nearly identical grade distributions
  4. Instructor concludes MOOC was a failure

…what?

He arrived at this conclusion because only 2% of the students finished the MOOC. So even though the students that finished performed as well as his classroom students, it’s not an effective instructional modality because of the low completion rate.

BUT WAIT. If this was an experiment, as the instructor himself called it, didn’t he notice that his two sample populations were radically different, had different motivations, and received different rewards? Well call me a skeptic, but I’m pretty sure that makes this quote

“My conclusion is that online education works for about two percent of students, namely those who have this extraordinarily strong sense of dedication and self-discipline,” he said. “For them, online education works. For the vast majority, no.”

difficult to justify.

His classroom students are young men and women, socially pressured to go to college, who probably took on debt to be there, who receive credit for completing the course, and are taking the course on their way to receiving a diploma.

His MOOC students

“were generally older and most already had a bachelor’s degree — they were “lifelong learners” taking the course to gain knowledge.”

and received no credit and were not pursuing a degree. Doesn’t anyone think that’s relevant? Never mind that 2,720 students finished these MOOCs which is substantially more than were served by his classroom course with nearly equivalent performance.

I suppose he also thinks libraries are failures because we aren’t all inside pouring over the free learning materials. So to those of you who do go to libraries and learn something or teach yourself a skill or just enjoy the available knowledge as a hobby; tough shit. If it isn’t education sanctioned by a degree granting institution your learning is worthless!

Even with successful data staring them right in the face, people still dump on online courses because it’s in their interest for them to fail. This MOOC, now created and shown to be at least as good as the face to face course (which remember, may be awful but whatever…) is done now. It can continue to be offered with minimal facilitation as long as the material is accurate.

Over and over.

At a minimal cost.

To a substantially larger audience.

With the same outcomes.

That means you don’t need the talking head anymore. And higher education has a lot of heads that enjoy talking.

Google Authorship

Did you know you can get your face to show up in Google search results for content you’ve authored? It’s true! Google actually anounced this feature quite a while ago, but I’ve been dragging my feet. Turns out it’s incredibly easy to setup.

Now (actually within a few days, according to Google) when one of my blog posts comes up in Google search results, it’ll be accompanied by my G+ profile photo. Neat.

It’s simple to setup too, from Google’s webmaster tools site:

  • Create a link to your Google+ profile from your webpage, like this: <a href="[profile_url]?rel=author">Google</a> Replace [profile_url] with the your Google+ profile URL, like this:

<a href="https://plus.google.com/109412257237874861202?rel=author">Google</a> Your link must contain the ?rel=author parameter. If it’s missing, Google won’t be able to associate your content with your Google+ profile.

  • Add a reciprocal link back from your profile to the site(s) you just updated.
  • Edit the Contributor To section.
  • In the dialog that appears, click Add custom link, and then enter the website URL.
  • If you want, click the drop-down list to specify who can see the link.
  • Click Save. To see what author data Google can extract from your page, use the structured data testing tool.

Side note about the profile URL: custom URLs only partially work. Even though google.com/+DavidLyons will take you to my profile, the authorship feature only works with plus.google.com/+DavidLyons.

You can check if it’s setup correctly, and see what it will look like, using the Structured Data Tool Google Authorship Preview

Just what the internet needs, more of my face.

Heroku's Good Guy Email Default

Heroku opt-out default

I got this email from Heroku recently and it made me smile. I don’t use Heroku heavily so I don’t really want a lot of email from them and it turns out they don’t want to bother people who didn’t ask to be bothered. What a novel concept.

Like anyone working in the tech community (or any office environment, really) I get a ridiculous amount of email on a daily basis. A very large portion or which is not relevant, not actionable, or outright spam. This is in addition to the email I receive at my numerous personal accounts which is also largely spammy.

That’s what makes this behavior on Heroku’s part so excellent. They know everyone gets too damn much email so their assumption is to not bother you unless you ask for it. I wish more companies, and frankly more of my colleagues, beahved this way.

Kudos, Heroku. Kodus.

Wordpress To Jekyll, For Real This Time

I’ve tried to use Jekyll (the static site generator built on ruby) before at least twice and all attempts ended in dismal failure. This time I made the leap and I’m not turning back. Lots of factors came into play but the one that really pushed me over the edge, I’m sorry to say, was money.

My hosting was coming up for renewal and the prospect of spending on it (even if it is cheap, all things considered) did not sit well. I used my hosting provider exclusively for my blog and there are any number of free alternatives.

  • Wordpress.com would have been free… if I was willing to have ads and nonsense on my site. I’m not against ads on the internet, but this definitely isn’t an ideal situation.
  • Blogger is… well… nah.
  • Ghost is the sexy new kid on the block and it’s easy to see why. Lots of nifty features: markdown writing, pretty analytics, and built on node.js. All the features an ironic mustache sporting twenty something wants in their blogging platform. Honestly if it was free or really cheap I probably would have gone with Ghost. The Ghost software is free but you have to host it somewhere and shared hosting does not play friendly with node, apparently.
  • etc, etc, etc

Then there’s Jekyll. It’s not exactly simple or friendly; you have to edit Liquid templates, build your site from the terminal, and be comfortable with github to really get the most out of it.

But that’s why it’s awesome.

Writing posts in markdown, generating static HTML (which loads wicked fast), and being forced to use the terminal and hack to add features is something I want to do. Jekyll is just the right amount of work to be interesting, with the rewards (for someone who wants to work with ruby) that make it worth the hassle for what should be a simple task: blogging.

Because it generates static pages you can move your content from host to host at the speed of uploading small HTML files. That portability is a great feature in an era where vendor lock-in is on everyone’s mind.

As for money, Jekyll is free to host if you use the amazing Github Pages. Not much to say there, just awesome that this is available.

If you’re interested in making the jump I used this wordpress plugin to get my posts exported, and after my Jekyll blog was setup I added the archive which I found on this blog.

Now I just need to make sure I’m not the guy who makes everyone drink.

@holman tweet

The LMS Grade Book Isn't Complicated, You Are!

Over the years I have seen thousands of course grade books and a disturbing quantity have glaring errors. This phenomenon isn’t limited to a specific institution or LMS. Some of them are misuses of the tool, some of them are misunderstandings, and a lot of them are just negligence. The scary part is that this means tens of thousands of inaccurate grades are reported every semester.

I gave a talk at Jasig Sakai 2012 about common pitfalls of the grade book but a more accurate title would have been “You Suck At Grading And You’re Terrible For Not Caring More”, though that talk would have had a harder time getting accepted. The reality of the situation is the grade book tools in all the various LMSs I’ve used are not that complicated, but instructors make them complicated. Here are some poor decisions I see frequently:

  • Grading with fractions of points instead of integers
  • Using percentages instead of points (or worse, percentages OF percentages)
  • Monolithic lists of undifferentiated items
  • Overly complicated grading schemes (there are 147 quizzes but I just take the highest 32, then I curve against the 2nd best and 13th worst students)

Another title for that talk could have been “You’re Not As Good At Math As You Think”. It’s not that you can’t make these weird grading methods work, but why should you? What benefit is there to having a wildly complicated grading scheme? It’s more error prone, it’s more difficult for your students to understand, and it’s way more error prone because you are not as good at math as you think.

Want to eliminate most errors from your grade book in just a few easy steps?

  1. Grade with points (not fractions of a point, and not percentages, letters, or anything else)
  2. Check two students final grade by hand calculation (if it’s different than your grade book, check again, then ask someone for help. If it’s too complicated to check by hand that’s a sign that it’s too damn complicated!)
  3. Chant over and over to yourself that a dash in the grade book is not the same as a zero. You need to zero out unsubmitted work to accurately reflect a student’s final grade
  4. Seriously, do not ignore step three. That error alone is responsible for a mountain of inaccurate final grades

Please don’t be afraid to ask your colleagues, your instructional designers, or your technical support, for assistance. Assigning a letter to something as ethereal as “learning” is already kind of spurious; let’s at least assign the correct letters.

"Digital Native" is a Misnomer

You know what happens when you have an idea for a post and you sit on it for too long? Someone else gets to it first! Luckily it happens to be the awesome PBS Idea Channel and they also happen to posit a lot of the same beliefs I have, albeit more democratically than I do.

You see, while they have opened a discussion around the idea of the Digital Native, I flat out disagree with it. Working in Academic Technology gives me an excellent view of both stereotyped groups (young and naturally gifted with technology versus old and hopeless with technology) and I’m prepared to tell you they’re totally wrong!

Sort of.

It’s true that given a random sampling of people from a younger demographic (of middle class and raised in the west) they are more likely to be comfortable with technology then a random sampling of older people from the same area and income level.** The key thing here is that educators and decision makers are conflating familiarity with expertise.

I’m familiar with cars because they’ve been around all my life, but that doesn’t make me a mechanic. Consider this before you make assumptions about anyone’s ability with technology. I’ve encountered young people handling technology with all the grace of an elephant playing a viola, and there are countless examples of people from the pre-digital-natives-generation that were absolutely stellar with technology (for example: all the scientists and engineers with the work whom we wouldn’t have any modern technology). This is particularly tricky when discussing security and privacy because not only is the grasp of technology not necessarily what you assume, but the cultural concept of what those things even are might be different. What we would call sharing some cultures would call spying. What we call cheating some cultures call collaborating.

Anyway, go watch the video (but just the first half, as the second half is always reserved to respond to comments of the previous episode).

Also, stop using the phrase “digital native”.

** Note: I admit this video made me catch myself in the fallacy of thinking of a world comprised only of people in my slice of it. A middle-class child born in 1990 to techy parents that live in California probably has a different relationship with technology than a middle-class child born in 1990 to farmers in Turkey, and it’s important to know whom we’re discussing when we label everyone under 35 as a Digital Native; particularly with education’s increasing focus on globalization.

Discipline vs Motivation

I’ve been really digging the Seinfeld Productivity Method. Basically you build habits by not breaking a chain of days you successfully did that habit. What you’re building (through guilt) is discipline, and it’s awesome.

Maybe “guilt” is a little heavy handed, but when you see that chain of days you’ve been exercising and today you don’t feel like exercising what do you do? Do you break the chain? Hell no! You get off your ass and exercise. The same goes for any other habits you’re trying to build; writing, programming, practicing something, etc. There is a lot of debate about the best way to keep track of your chain, but I’ve been enjoying lift.do which has a web app and mobile app. (And if you want to give me props, here is my profile.

At the root of this habit building is an emphasis on discipline over motivation. Motivation is a feeling that comes and goes. When you don’t feel like doing something you don’t do it. When you have discipline you do the thing whether you feel like it or not. It’s all about making a little bit of progress every day and learning to do the work because it needs to be done, not because you feel motivated.

You don’t have to make monumental progress every day. It’s about a lot of small progress adding up to real improvement over time. I can hear the naysayers (because I was one) saying “You’re tracking meditating; but you only meditate for one minute?” Correct! And after a year I will have meditated for 365 minutes (over six hours!) by utilizing a small amount of discipline whereas when I relied on motivation I meditated for 0 minutes (approximately zero hours!) If you’re keeping score: 365 minutes is greater than 0 minutes.

It’s not that motivation is worthless, but it is fleeting. Discipline is king for long term improvement. If you want to learn a new skill, improve a relationship, hone an existing skill, write, draw, play music, learn a language, or anything else, then practice deliberately a little bit every day.

Motivation lets you roll up your sleeves and spend a whole Saturday cleaning the garage.

Discipline makes you put things away after you use them so the garage is always clean.

Learn discipline.

Start now.

TFaaS - Table Flipping as a Service

Tweet asking for table flip as a service

It started with a tweet, and now it’s a reality.

It can be difficult to figure out what to work on next when you’re not a full time developer. With the need for code coming randomly at work, and no passion project on my plate, the time between focused visits to Vim can be too far between for my liking. Fortunately there are those little jokes that just scream “I know this is dumb, build it anyway,” and build it I did!

This isn’t a complicated project. It wasn’t particularly difficult. It doesn’t even solve a real need. What it is good for was getting me writing code, thinking about a project from a “client’s” point of view, and even using the open-source code of my peers to enhance my code.

Find a “need” and fill it!

Table Flipping as a Service - Heroku, Github

(╯°□°)╯︵ ǝɯoɔlǝʍ sʇsǝnbǝɹ llnd

Terrible Conference Talks

I’ve attended a variety of conferences; vendor, OSS, education, technology, developer. I’ve delivered a few talks, lead a few discussions, and sat through a ton of sessions and through it all I’ve realized something: most conference talks are terrible. Like really terrible.

Here is (some of) what makes a good talk:

  • 30 minutes long
  • As few words as possible on slides, with a goal of **
  • Clear point
  • Clear take away for the audience
  • Speaker is confident (enough)
  • Speaker is knowledgeable (enough)

Notice I didn’t say “speaker must be a trained orator” or “speaker must be expert in field”. Those things aren’t bad, but they don’t guarantee or preclude a good talk. A good speaker can share their experiences and try to save others the trouble they went through, or connect through relatable grief/success. A good speaker can pose questions for discussion (extra points if it’s weird/unexpected and really makes the audience think).

Here is (some of) what makes a crap talk, and what I’ve been seeing entirely too much of:

  • 60+ minutes long
  • Speaker is obviously unprepared
  • Speaker has no point and rambles
  • Audience doesn’t know what the take away was
  • Slides are ugly walls of text
  • Speaker reads directly from slides

My plan to combat this tide of boring badness is

  1. offer constructive feedback to bad speakers and encourage the good ones
  2. give more talks!

Yes! I want to be part of the solution! Maybe these bad speakers don’t know they’re bad. Maybe the good ones need more kudos so they’ll keep giving talks. Most importantly, I need to walk the walk. It’s easy to complain, but I can do a lot by trying to give my own quality talks and helping to set an example.

From here on out, I won’t attend a conference without submitting a proposal. If they have lightning talks, those are also a must. Together, we can help end terrible conference talks.

Dropbox Referrals and Google Adwords

My hosting company has been sending me promos for Google Adwords for years now, and the trick of buying an ad to get dropbox referral credit seemed like a low risk way to turn an already awesome free Dropbox account into an even awesomer free Dropbox account.

Before we get started I want to be clear that I know I am not the first person to think of this. In fact one of those articles is probably where I first heard of this scheme. I use Dropbox enough that I wanted more space, but not enough to justify the monthly expense, so I decided to give the Adwords route a try!

It turns out that this plan is plagued by two issues: 1. saturation, 2. indifference. The first people to do this probably did it about 5 seconds after the first company offered referral credit. Combine that with the popularity of Dropbox and you have a lot of people who have already done this or are doing it currently. The second problem is that people are freaking lazy. Look at this partial list of my referrals:

Dropbox referrals waiting for install

7 people who have waited days to install the Dropbox client. And there are 20 more people in that list who also haven’t completed the install process.

No install = No referral credit

I did take a queue from one of the articles and reached out to all of the no-install folks with a friendly little email, but so far none of them have budged. I would easily hit my maximum referral credit if even 1/5 of those folks would finish the setup. So was it worth it? Yes! In less than one week and for the low cost of $25 (plus the $100 Adwords credit) I now have an additional 11.5GB of Dropbox storage. And if some of those slackers finish the setup it could creep up another 4.5GB.

If you don’t already have Dropbox account feel free to sign up using my referral link, just make sure you actually finish the setup.

Refactoring with Class

If you ever want to know if you’re making progress on a skill, go back and look at your earlier work compared to your recent stuff. I was reviewing some of my old scripts on Github and I was surprised how simple and linear they are. They got the job done, but only just barely…

Now I’m not a full time coder, so I haven’t exactly gone pro since then, but I have moved from the ultra simple scripts of yore, to more intelligently formatted and reusable code.

Oh and classes, classes are cool.

Let’s look at a script I wrote not that long ago. It concatenates some CSV files together and gets them into the format I need them.

require 'csv'

courses = "courses.csv"

altered = []

CSV.foreach(courses, { :headers => true, :header_converters => :symbol }) do |course|
  altered << course.headers unless altered.size > 0
  course[:start_date] += "T01:00:01-6:00" unless course[:start_date].match(/T\d\d:\d\d:\d\d-/)
  course[:end_date] += "T22:59:59-6:00" unless course[:end_date].match(/T\d\d:\d\d:\d\d-/)
  altered << course
end

CSV.open(courses, "w+") do |csv|
  altered.each do |row|
    csv << row
  end
end

teachers = "enrollments_t.csv"
students = "enrollments.csv"

CSV.open(students, "a") do |csv|
  CSV.foreach(teachers, { :headers => true, :header_converters => :symbol }) do |teacher|
    csv << teacher
  end
end

sections = "sections.csv"

altered = []

CSV.foreach(sections, { :headers => true, :header_converters => :symbol }) do |section|
  altered << section.headers unless altered.size > 0
  section[:start_date] = ""
  section[:end_date] = ""
  altered << section
end

CSV.open(sections, "w+") do |csv|
  altered.each do |row|
    csv << row
  end
end

teachers = "users_t.csv"
students = "users.csv"

CSV.open(students, "a") do |csv|
  CSV.foreach(teachers, { :headers => true, :header_converters => :symbol }) do |teacher|
    csv << teacher
  end
end

Oh the horror. It does the job, but it has a lot of smells (and probably more then I even realize.) The most obvious is the duplication. Second (but related) is the complete lack of functions; if I need to concatenate more than just the four files I’d have to extend the script each time. Next is the most up to date version.

require 'csv'

FILE_TYPES = ["courses", "sections", "users", "enrollments"]

class CSVFixer

  attr_reader :rows

  def initialize(csvs_name)
    @csvs, @rows = [], []
    @csvs_name   = csvs_name
    @csvs        = get_csvs
    read_csvs(@csvs)
  end

  def get_csvs
    @csvs = Dir.glob("csvs/*#{@csvs_name}*", File::FNM_CASEFOLD)
  end

  def read_csvs(csvs)
    csvs.each do |csv|
      CSV.foreach(csv, { :headers           => true, 
                         :header_converters => :symbol, 
                         :encoding          => "windows-1251:utf-8" }) do |row|
        @rows << row
      end
    end
  end

  def write_csvs(folder, file_name)
    CSV.open("#{folder}/#{file_name}.csv", "w", 
             :write_headers => true, :headers => @rows[0].headers) do |csv|
      @rows.each do |row|
        remove_section_dates(row) if file_name == "sections"
        extend_course_end_date(row) if file_name == "courses" && row[:end_date] == "2013-12-14"
        csv << row
      end
    end
  end

  def remove_section_dates(row)
    row[:start_date] = ""
    row[:end_date]   = ""
  end

  def extend_course_end_date(row)
    # Horrible magic number change for Fall 2013
    row[:end_date] = "2013-12-25"
  end
end

def make_folder
  folder_name = Time.now.strftime("%Y-%m-%d %H%M%S")
  while File.exists?(folder_name)
    sleep 1
    folder_name = Time.now.strftime("%Y-%m-%d %H%M%S")
  end

  Dir::mkdir(folder_name)

  return folder_name
end

output = make_folder

FILE_TYPES.each do |type|
  fix = CSVFixer.new(type)
  next if fix.rows.empty?
  fix.write_csvs(output, type)
  puts "Processed #{fix.rows.length} rows for #{type}.csv"
end

So this version is 20 lines longer, but it adds so much goodness in those 20 lines. First, a class is used to declare and make accessible the commonly needed functions, and a CONSTANT holds the names of files (that are now DIR::glob-ed for). This means that I can now make the entire tool also process groups.csv but just adding "groups" to the FILE_TYPES array. I can also concatenate any number of partial files, so if I have users.csv, users1.csv, users2.csv and users3.csv, it will read in all the lines and cram them into one (UTF-8!!) file.

This little tool still isn’t perfect. It assumes the files are formatted correctly (they come from a machine source so that’s fairly likely) and it does use a magic number, but all in all it’s infinitely more extensible and reusable the the original iteration.

The time I spent writing this little utility didn’t just save me many hours of boring (and error prone) manual concatenation of files, but my coworkers got to benefit from using it while I was away from the office.