Job Ads Should Always Be Edited

Aug 1, 2015

I plan to write a larger blog post on “An Employers Guide To Hiring Better Programmers” later but for today I just wanted to tackle one of the most irritating parts of a job search - reading job ads.

Frankly job ads are all terrible, just some are more terrible than others. A job ad is an ad — it’s one way a prospective employee is attracted to possibly making contact. The whole point is to get someone to send you their resume and possibly begin an evaluation process. This is really no different than a billboard telling you why you should buy a Hyundai, or a flower attracting bees, or a political ad getting people to vote for someone. Would you buy a car if the ad included “frequent breakage and snail-like acceleration”, or would you fly to a flower in the shape of a raid can, or vote for a politician who said “sometimes I lie”?

Job ads frequently contain language that screams “don‘t apply here, we‘re stupid people” or “danger, Will Robinson, terrible pain ahead”. The job ad should give just enough information so the job prospect knows they might be a match, enough positive spin to make it at least seem like a good place to work, and hopefully enough financial information to make it seem worth the effort. Nothing more!

Read the rest of the article…

Why Do People Still Not Expect The Spanish Inquisition?

Jul 31, 2015

Not a day goes by that there isn’t a new story about companies or agencies getting hacked and user data exposed.

Yet every one I read about is the same, they failed to properly protect their databases and systems and someone leaked or stole or exposed valuable data.

It’s like people have never seen the Monty Python sketch where someone remarks “I didn’t expect the Spanish Inquisition” and in jump the 3 cardinals who yell “no one expects the Spanish Inquisition”. Even during that Monty Python episode where this was introduced after the first attempt everyone expected them.

Read the rest of the article…

Sequencing Multiple Node Animations In Swift

Jul 30, 2015

In learning Swift 2.0 I am writing little game which hopefully will be shipping when iOS 9 does.

One of the things I needed to do was to sequence animations on groups of nodes which is something SpriteKit does not provide any support for. It has lots of ways to group and sequence animations on a single node but you can't run animations on several nodes, then other animations on other nodes when the first set is finished, and so on. So I came up with these two simple classes.

import SpriteKit

class Animator
{
  typealias functionType = (Void -> Void)?
  var function : functionType
  var parentNode : SKNode

  init (function:functionType, parent : SKNode)
  {
    self.function = function
    self.parentNode = parent
  }

  func execute()
  {
    if let f = function
    {
      f()
    }
  }

  func isDone() -> Bool
  {
    var count = parentNode.children.count
    for node in parentNode.children
    {
      if !node.hasActions()
      {
        count--;
      }
    }
    return count==0;
  }
}

class AnimatorSequence
{
  var animatorStack = [Animator]()
  var currentAnimator : Animator?

  func startAnimator()
  {
    currentAnimator = animatorStack.removeAtIndex(0)
    currentAnimator!.execute()
  }

  func addAnimator( animator : Animator )
  {
    animatorStack.append(animator)
    if currentAnimator==nil && animatorStack.count == 1
    {
      startAnimator();
    }
  }

  func process()
  {
    if let anim = currentAnimator
    {
      if anim.isDone()
      {
        currentAnimator = nil
        if animatorStack.count > 0
        {
          startAnimator();
        }
      }
    }
  }

  func somethingAnimating() -> Bool
  {
    return !(currentAnimator==nil)
  }
}

The Animator class is given a closure and a parent node. The AnimationSequencer continuously executes any available Animation until it is complete (the process function is called in update(:)). The closure can animate on any group of nodes as long as they are contained in the parent node—this version determines completion when there are no more animating nodes in the parent. Of course that could be defined in some other way but it works for my needs. Since this all happens in the main thread there is no issue with synchronization.

Read the rest of the article…

Sometimes Google Doesn’t Seem To Care

Jul 16, 2015

Google can be an amazing company, willing to get involved in almost anything and try to build any kind of product. It seems like there is nothing they won’t take a shot at. Even pouring money into automatic cars, which is about as far from a search engine as you can get, is a big deal.

At the same time Google can abandon products people depend on (Reader) or leave them hanging in the wind (Finance) or put a lot of effort into and then fade away (Analytics). The most maddening thing is you have no way to reach out to anyone to complain, or query, or for all I know offer them money.

This is a crazy way to run a company.

Read the rest of the article…

After 3 Decades In Programming, Looking At the Next 3 Decades

Jul 10, 2015

If you had a time machine and went back from today to my first day of work as a programmer in October, 1981, and told me what I would be doing today and what things would be like in the programming world I wouldn’t have believed you.

Predicting what programming we will be doing 3 decades from now is of course fraught with difficulty. We can only speculate and extrapolate from what we know today because things that haven’t been discovered or invented yet are hard to imagine.

On my first day as a programmer at a big defense contractor I worked a bit on learning the IBM mainframe environment and a bit of JCL. Even though ARPANET existed I didn’t know anything about it. I had never heard of email which was only used by our executive’s secretaries at that point I think. I had seen a modem but didn’t have one and there was nothing to connect to anyway. Unlike most people I did have a computer at home, an Apple ][+ but had never seen a hard drive. Phones had dials and were plugged into the wall. Networking was a mainframe thing. I knew Basic, Fortran and a little APL and I had heard of a few other languages, plus I knew 6502 assembly. Open source software didn’t exist (I wasn’t aware of Unix or anything like that). Of course there was no way to contact people around the world or get help remotely or anything like that unless you used mail, as in paper, or a long distance call.

Read the rest of the article…