Personal Project

I’ve always been of the mind that to really learn how to do something, you need a project.  A good project is one where you can use the new technology you’re learning to work with, but which has it’s own goals that aren’t necessarily perfectly in line with that technology.  You’ll learn where that tech is strong, where it’s weak and how to work with it.

A consistently designed technology will work similarly across its various parts.  Going deep gives you that kind of knowledge, down to the how of the tech.  A broad, light view of the tech is also useful, so you know what it can do — I find I can get that from reading a book, but to get that deep knowledge requires a project.If the project is something that you really need or want, even better.

So, one of my larger hobbies is gaming — which for me is a combination of my first love: pen and paper role-playing games, and my second love: computers.   I enjoy single player video games well enough, but the cool thing about the internet, is that it connects us to one another, and lets us (among other things) play games together.  Google+’s hangout feature means I can now see and hear those other people, but to play games with them, you often need something else.

In D&D that’s a battle map with figures on it.  For other games it’s a board or cards or something else — something that is a shared view of the state of the game, just like the different parts of a blog are the shared views of the posts and comments on the blog.   I’ve been working with G+ to run some games for friends, but we’ve not found a good virtual table top — they do exist, but the computer requirements for G+ are too high to really run another program on top of it.

I’ve also got a friend, Corvus Elrod who is working on a new RPG that will make heavy use of board game affordances.  The character sheet is essentially it’s own little board game, plus there’s potentially a shared board much like in other role-playing games.  This means you need even more visual input if you’re going to do things online.

As I unpacked the idea, I realized that most board games and virtual table tops have similar design methods, and play in similar ways, once you abstract it out.  This mostly applies to turn based games as opposed to continuous ones, which until WebSockets are more widespread is a better fit for the web, anyway.

I also floated the idea, on twitter, of writing up the project as I went along — dead ends, bad code (that gets better) and all.  I’ll start that next week, with a general design discussion, and some forays into real code.  The project is up, but there’s not much to see yet at  (It also needs a decent name…)


And Speaking of JavaScript

Khan Academy has decided to make JavaScript it’s introductory language.

As I’ve said before, I think this makes a lot of sense.  JavaScript isn’t your typical language, I admit. Functions are first-class types; it’s prototypal, not object-oriented; it’s been much-maligned (and even by me).  My attitude about it has changed much in the past six years as I’ve been able to do real, interesting (and in production) things with it.

But more importantly, it reminds me of when I was 13 (thirty years ago) and our school got its first AppleII computer.  It had games (we played Oregon Trail, and Lemonade), but more importantly, built right into it at the command prompt was a BASIC interpreter. (Two of them, actually, AppleBASIC and IntegerBASIC.)  IBM PCs and their clones had GW BASIC or MS BASIC.   Commodore had it, Atari had it, I think TRS-80 had it, and my Time/Sinclair 1000 had it.  It was right there, on the chip in many cases, in the computer you were using.  There were no barriers — there were no IDEs either, but you could type

10 PRINT "Hello World"

And you were good to go.

Now of course, everyone with a modern computer — or even one not particularly modern — has a web browser, which for programming purposes is nothing but a JavaScript interpreter, sitting right there.  And if you’re running Chrome or have FireBug installed, you’ve got something I never had when I was poking around writing programs to solve quadratic equations — a full on, interactive debugger.

All those tools make working with JavaScript pretty reasonable, and the price is excellent.  There are no barriers, something we’ve missed for a while in programming education.  And I think, in the coming decades, being able to program a computer (even in limited ways) is part of computer literacy, something everyone needs to know.  So this is a great thing, and I completely get and support what Khan Academy is doing here.

What I Want : Responsibility with Trust

I’d made the transition to consultant fairly early in my career.  I worked for a company while I was in college, and then when I left, I worked as a consultant for them for a brief period, and started getting contracts on my own at the same time.  I’m not very good at the marketing thing, so after a few months of that, I found a consulting firm in Charlotte, where I wanted to move, and started doing that sort of work.

Consultancy is interesting on some level, you have a specific thing you are working on, and it’s your job to put your skills and knowledge to use to help the client make good decisions, and then implement the decisions of your client.   Consultants lack the context and investment needed to make business decisions, so one of the skills is to understand when such decisions aren’t technical ones, but business ones, and to take them to the client, discuss the benefits and risks of both sides, and let them decide.  This isn’t a bad skill to have, since often you want these things separated in your code: functional technical code on one side, business rules (which always change) on the other.  Encapsulate it well, and the business side is more flexible because IT can support them more rapidly.

Eventually I started to settle down and was looking for something more permanent.  At the advice of one of my bosses, I took a job at Bank of America. It was through a consultant firm, but was a contract to hire position, something I’d not done before, but I was getting tired of the vagaries of consulting and consulting firms, and was getting to a point where I wanted to have a longer term commitment.  I had the option to stay with the consultant firm, of course; and Bank of America had the option to not hire me.  I’ve come to like this sort of hiring, both as the potential hiree, and as someone on the inside, evaluating the fit of a fellow employee.

At any rate, I got to a point were I hit one of those “business rule” things.  It was fairly clear to me what the decision should be, but my consultancy days had taught me that I needed to be sure, so I took it to my boss.  He looked at me, “What do you think is the right thing to do?” he asked.  I told him what I thought.  “Well just to that, then,” he said.  “And don’t bring little stuff like this to me anymore, if you know what is right, just do it.”

I’m sure he didn’t want to be peppered with a million little questions, and I know now that this was what my life would be like when I was hired (as I was six months later), but it was like a revelation to me.  I had the responsibility for the code — I’d had that as a consultant all along.  Certainly the direct client had ultimate responsibility to their superiors, and I was just a contractor, but it was my reputation and responsibility that was on the line.  But I’d been handed something much more important to me: trust to do it right.

I’d moved from something where I was working on a fairly narrow charter, to something where I was given broad responsibility, and trust to get it done.  This was part of the BoA culture at the time, where employees were encouraged to notice and fix problems, even if they were normally considered outside the scope of their duties.  I wound up staying there until we moved to Columbus.

There’s something good about being trusted, and earning that trust through good work.  It’s empowering and makes me wake up in the morning ready to go to work and do great things, knowing they will be allowed and have the ability to do them both with my technical skills, and in the culture of my work.  With new management where I am now, or with a new job I may find, I’ll have to enter a phase where I earn that trust again — I know that — but any place I’m happy to work will allow me to do that, and the space to do good work for them, and for me.

As I’ve thought about this now, I realize this is how I manage my assistant now.  I’ve tried to instill him (or develop with him) goals for what we need done, and set priorities.  He seems to thrive under this as well, although I suspect I’m still learning about managing people.


I’ve been putting together a portfolio, which I understand I should have been doing all along.  There’s a link to it at the top of the site, and I’ll be updating it with projects I’ve enjoyed working on or have done something cool with.  But, kind of like an Artist’s portfolio, it’s work I’ve done that is a thing I can show you.  A lot of the work I’ve done at my current job, for instance, isn’t something tangible as what I have there.

Part of why I’m looking for work is that things here aren’t changing in the ways I need.   The other is that I’m starting to finish many of the things I started.  It feels like there’s more behind me than there is in front of me.  Maybe I’m wrong (and maybe that’s one way having a new boss will help things) but I do want to look at what I’ve accomplished here.

Some of the agencies here get all their tech support directly from the central Data Center — they are small, have very well defined needs, and don’t have the staff and size to support an IT position.  The one I work at is the second largest agency, and we have 250 or so people, all of whom need to interact with IT somehow every day that they work.  A vast majority of them don’t have their own computer, or use one for more than 15-30 minutes a day, but they all do at some point.

This mix of things means that with support from the Data Center for things like networking, email and some server support, a small IT department of 2 or 3 people (it’s 2, but we could use another in my not so humble opinion) can manage our IT needs.

I worked in my assistant’s position for a couple of months before turning down my current position due to it being a bad fit at the time.   A year later, they’d been without IT for a while, and had hired someone who was a good fit for the assistant.  That and the office environment had changed and I was willing to come in here.  The pay was still not good, so I’ve worked as a contractor/temp while that is being resolved.  {It’s lack of resolution is one of the issues here.}

So, when I got here in my current incarnation, I had some knowledge of what was going on, but they’d been without any real IT for a year, and there were problems.  It took me a few weeks, but I realized that I got calls that the server was acting badly every 8 days.  There was no development environment, no test server, no source control.  There was only an inventory because my assistant had just completed one.  The budget for the year was woefully inadequate as it was the one that had been used the year before and was just barely what we needed to complete.

The quick response was to reboot the server weekly, and put some monitoring code into place, and find out what was causing it.  That led me to find some major problems that were killing memory, and fixing them.  Fixing these issues was vital, and done surgically as they whole thing, I quickly discovered, needed to be overhauled and replaced.  And that meant building infrastructure for test and dev, and making a real environment to work in — even if I was the only one doing work, with occasional help for my assistant.

I developed tools that would let us know what our budgetary requirements for years out would be, and began looking outside our immediate needs.  We had systems on systems that had been sitting unmaintained.  I found a PC from the mid-80s which was still running, but (obviously) on its last legs.  To fix it though required ripping out the system it was a part of and replacing it entirely.  This was not expensive, nor the work of a single year.   We did the same with a security system, and those for other trades.

One trade had a suite of software tools that were old, and due to licensing had to run on a machine that was inadequate for use six years prior.  We now have yearly agreements with those vendors for upgrades, and an keep the equipment updated as a result.  This was a practice I implemented across anything that involves tech — and in the current world, everything involves tech.

I’m in the process, this year, of getting rid of the last of those server applications — one with a purchase from a vendor, the other bits of code I’ll write as they’re very tied to our business model.  They’re in modern, Open Source languages, and can run in a LAMP stack (but don’t because of external standards we have to abide by). I don’t know where we are on the Joel Code (probably not too high, as we don’t primarily develop code) but we’re stable and have good practices in what we do, across the board.  And those practices are now understood by the agency, and we’ve got support from them we didn’t have when I started, because they’d been treated poorly by IT for so very long.

I’ll probably find some new system this year that’s been running fine for 10 years and needs upgraded, and we’ll find some way to keep it working until next year when I have the money to fix it. And it’ll be one less thing out of date.  And maybe I won’t find anything, maybe after six years of this we’ve found most of it, and engendered in our users an understanding that they not only can tell us about things, they need to.

The other thing I’m proud of is that my assistant now has an A+ certification, and is working on networking and routing certifications as well.  There’s no easy path from his position to mine, so I imagine he’ll leave for something better.  I spent a lot of time convincing him to do this, and made sure there was money and support for that as well.  I hope that by working for me, he’ll have a better life, because that’s the right thing, but also because he’s made my life better in this job by just being a good employee.

When I look at this, I don’t see huge amounts of project code. I have written some cool things here, and improved things vastly with small lines of code here and there, and fixes to interfaces that were bad and punishing.  I still have more of that work to do, but it’s getting to a point where I’ve done the major things I wanted to when I got here.

So time for a new plan or a new person, but whether I’m here or not — new challenges..


What I Want : Variety And Challenge

I originally meant to post this weeks ago, but then I realized that unpacking and getting it right were both important and difficult.  I’ve spent some time looking at what positions are available, and thinking about what has traditionally  made me happy and thought about what I’m good at.  While I’ve gotten some good thoughts about that, I can’t put a job title with what feels like a match.  But I do have some idea of the shape of the thing is, so let’s talk about that, and figure the rest out later.

Today we’ll start with the first one: Variety and Challenge.

Variety And Challenge

I think pretty much all jobs are made up of routine, everyday tasks.  Things that just need doing.  Any programmer who has been working in a business has written an application that’s 90% “CRUD”.  Heck, we even call it that, but it’s much of what we do.  But I know for myself, and for many of the other IT Professionals I’ve work for is that we enjoy variety in our work, and work that is a challenge of some kind.  I’ve enjoyed work that was outside my comfort zone — I’ve worked organizing sports team, and organizing housekeeping and carpentry tasks.  I’ve also sat down and figured out how to do finite scheduling for a textile mill, and delved into systems to find answers to one-time questions that are almost — but not quite — in the data stored there.

Those jobs were I was asked to find hard answers or familiarize myself with new environments and people — that kept me learning and expanding my skills were the jobs I liked the best.  They were jobs I’d go home energized and exhausted at the same time, glad I’d done something interesting that day.  I think this is what drew me to consulting in the early part of my career — things changed every six months to a year, and I was learning new systems (bureaucracies are systems, too) and ways of doing things.  I learned a lot about things and that was good.  My current job is about as far away from the financial services things I did before I moved to Ohio, and maybe the next one will be different from both, too.

None of these jobs have been tumultuous.  There was almost always a plan for every day.  A list of things to get done from the mundane to the tedious.  That’s a simple fact of work, and the way it is.  But there was the potential for something new to work on in the best of them, and I thrive on that.


Where I Am

So, part of the purpose here is to figure out and communicate where I am, where I want to be, and how to get there.  So let’s start with the easiest of those three.

Currently, I work for a county agency as their primary technical employee.  I have someone who ostensibly reports to me.  The county structure is such that there is a primary IT department, the Data Center — they handle the network, server management, mainframe computing, and set standards for PC deployment, etc.  Our agency is large enough that we have unique needs.

So our IT department was born.  We do primary support for people — fixing computers, both hardware and software. Part of that is just customer service, some is figuring out who in the Data Center can solve this problem.  We do this because we have other systems — everything from trouble ticketing to security systems to signage — that we handle instead of the Data Center.

I am the primary — and only — coder on many of those systems, and I also make purchase decisions about what kinds of software — from small to enterprise — that we buy.  I or my employee run the projects for install and maintenance on them, and I create and manage the IT budget for our agency, which — ignoring payroll — has been as much as $1 million in the six years I’ve been here.  We get our money from sales tax, so the past couple of years have been lean,  and that’s a different challenge.

Every day is a bit different, I’ve got my hands in a lot of different kinds of software and uses for things.  I’ve fixed computers in jails, repaired a 20 year old computer (that was still mostly running!), migrated our systems from really old ColdFusion and horrible database designs to more modern PHP based systems. I work with people who know computers really well, and some for whom they are alien and strange, and domy best to  support them all with all my knowledge and respect.

It’s a great job, really.

So, why am I unhappy? Why am I looking for work?  Well, when I got here, that wasn’t the description for the job.  There was less to it, and it was mislabeled and underpaid.  So I came here as a temp — first as a 1099 employee, then through a county-approved temp service.  Then through another when they lost their county contract.  Since I’m a contractor — or more accurately, a temp — I don’t have all the real authority I should have.   I don’t have those wonderful county benefits that are the real lure  to working here (as the county government has probably the lowest salaries for positions in the area).

And I’ve been in this position for six years.  My boss who was trying to get me hired is retiring, and the new boss is understandably busy getting her feet under her.  It’s going to be months before they open the position up.  Honestly, I’ll apply if I’m still here.

But I’m tired of waiting.  So it’s time to move on.  To where, though, is the question. Running away is bad, but running toward is good.  I’ll post that on Monday.

A letter to my congresspeople.

Today I sent this to my two senators and representative in the US congress.


I am a constituent and I urge you to reject the Internet Blacklist Bills (PROTECT IP Act in the Senate and the Stop Online Piracy Act in the House). Yesterday, many sites went dark to protest these two bills, and many of you have surely heard from other constituents, such as myself, who oppose these bills on both political and technical grounds. I hope you will join me in opposing these bills which are poorly constructed and won’t have the actual effect that they purport to have, not to mention the chilling effect they will have on innovation and expression as a side of effect of their passage.

Perhaps you have already decided that this is the proper course of action after yesterday’s protest. If so, I applaud you, and warn you to be vigilant. Last year COICA was defeated because it has similar bad effects, and next year there will certainly be another bill attempting to stop online piracy, but which will almost certainly have a deleterious effect on ordinary citizens who are merely trying to share their ideas, experiences, and their culture.

You may feel that there is some way to write a bill which can somehow separate the two. However, I believe that no law will be able to do this: neither PIPA nor SOPA can achieve it, COICA couldn’t, and the DMCA certainly hasn’t worked. In fact, the DMCA has been routinely mis-used and mis-applied by those with more resources and power against those with less — even when those every day citizens were doing something that would be considered “fair use” or acting in ways that the IP holder condoned.

I am both a published writer, and a technical professional who has over twenty years of experience working with and on Internet technologies. Copyright has been an issue since the early Internet, and continues today, by virtue of the way the Internet and general purpose computers work. I’m typing this on a computer, and when I email it to you, every machine it touches — the machines which serve as mailboxes on both ends, and all the servers in between will make a copy of it before passing it on. Unlike a regular letter whose physical presence passes from mail box to mail truck to mail box, this letter will leave copies of itself everywhere.

I do this without thinking, and without pause. But any other form of digital copying is just as easy, given the right tools. Just as once I know a song I can sing it, once I’ve got an mp3 on my computer, I can copy it — and do, every time I play it. In order to circumvent this process of copying, you have to break the way the Internet works, and the way computers work. And that means breaking computers and the Internet, neither of which is a goal I think you desire.

The real problem here is that we are looking for solutions in the wrong place. Copyright was created in a time when copying was difficult, and only available to those with means. It was created in order to enrich our culture, and to reward those who choose to create and add to our culture. Today, however, copying is easy, and those very individuals who want to make use of their culture are being told that it is not possible, and is in fact illegal to participate in their culture. Copyright is working at odds to its intended purpose, and it is here that we must focus our efforts to enrich our culture and reward those who would make the works of art that add to our culture.

I am a technical person and a copyright holder, but not a legislator. I can see that there are problems, and can tell you what they are, but I don’t know how to fix the function of copyright. From where I sit, it doesn’t seem to work very well at all — and doesn’t perform its original purpose. Please oppose and continue to oppose these bills that break one of the best tools for freedom and expression in our modern times, and look for solutions to fix the real problem: intellectual property law.


Java[Script] Online Learning

I’ve been doing the JavaScript classes, and following along with Code Year.  I don’t really need to know how to, say, code a function in JavaScript.  But JavaScript has intrigued me for a while now, particularly after I got over my early animus against it, back when I felt it’s name was just a confusion for Java, and a dangerous new development. [I have been online for a very long time.]  I think it makes an interesting choice as a first language,  much like BASIC when I was first learning programming, JavaScript is there on every machine available to the budding programmer.  And also on their tablets, smartphones and any other device which has a graphical browser.

It’s also just good for me to see how other people program– perhaps especially those who know their code and style will be visible.  In my current position, I manage a single other tech employee, and while the county does have other programmers, we are organizationally separate from them.  IT professionals (or as I usually cal l us “Geeks”) learn from each other.  It’s hard to get that kind of training from college, because just a  few years out of college and the tech has changed, the best practices have altered, and things are new again.  We have to always keep learning, and we do that primarily from each other.  Thankfully there’s an Internet full of us geeks out there to learn from. so I’m not completely isolated.

A friend pointed me to CodingBat which has both Java and Python coding puzzles and practice.  I’ve been working through the Java ones, which highlights even more of the differences it has with JavaScript, even without considering object models or language style and ethos.  I have been fighting with Java’s substring on several of these (often going about the code in a different, if equally efficient method) but I’ve hit several that really need to make use of substring.

In PHP, which is the language I’ve spent the most time in, substring takes three parameters: the string, the start index, and the length of the substring you want.  (Strings aren’t objects in PHP like they are in Java and JavaScript.)   This seems reasonable to me.  I want the four characters starting with the second one, in php I say


And if I pass in the string “Hello World”, I get “ello” out.

JavaScript opts for a different implementation, taking the first index, and the final index.  So in the same example, but in javascript I’d get something that looks like this:


That seems reasonable to me, start and finish.  It’s like an interval in math (although a closed one).

Java pretty much confounded me though, I tried both of those and neither worked, so I finally did what I should have started with, and searched the docs.  Now I’d looked at it, but it was just substring(startIndex,endIndex), which matched my understanding so I hadn’t looked further.  But when I read it today, I realized  that endIndex is actually not inclusive in the Java implementation.  Which means that the proper code for Java is:


Of course, in Java I also have to make sure my string is at least 7 characters long before invoking that. JS and PHP will do something intelligent (returning “”, for instance, or just returning what is there, and not necessarily 4 full characters).   Which makes me wonder sometimes at the mindset of the Java people.  I’m not saying boundary checking is bad — it’s necessary.  But it could have been in the function, and built into the language instead of elsewhere.  I guess this makes sense because substring length = endIndex – startIndex. But somehow it seems counter-intuitive to me.

Ultimately though, it’s what it is.  Languages all do the same thing, or so my college COBOL professor said,  “Input, Processing, Output.  Learn that and you have the key to all languages.”  Most things are just syntactical sugar, so program with your help docs handy and you can do pretty much what you want with any language.  You’ll just stumble occasionally, which is one more reason why you keep learning and testing your skills.


Here I Am

I’ve been online since before there was a web, but I’ve never written as me on the web before.  I come from a generation of alias users, shocked by the “younguns” who give their real names on Facebook, and we’re pretty cagy about our privacy.

And yet, I’m a technology person, and I have daily struggles and triumphs with it, which I’d like to write about and share.  I’m also starting a job search — even if I get hired in my current temp position, that’s part of the search.  That’s stressful and uncertain, and it’s hard to get across in 800 characters exactly what it is I want to do and what I’m good at.

I’m not naive enough to think people will read this and learn it, but I’ve found that writing honestly about something is a good way to figure it out for yourself.

So, I’m Bill Farrar.  I live in Columbus, OH, and I’ve worked in technology for 19 years.  I’ve been online for over 20. This is my home, and I’ve got things to say.