The New Project

One of the things I’ve really enjoyed about my current assignment is that I’ve learned a lot about  new web technologies. One of the secrets to longevity in technology is to keep your skills and knowledge up to date.  The trick is often picking which technologies to watch and which ones to ignore.  Several years ago, I had the choice between learning Flash or HTML5/Canvas and JavaScript.  My thought was that while Flash was pretty healthy (at the time), it’s days were numbered.  This wasn’t a hard guess – Canvas was widely supported, and it didn’t look like Flash was ever going to be properly supported on iOS.

The advantage for working for a company doing web and interactive tech is that I can see what tools are being used, what technology other developers are excited about and find out about things I’d not seen uses for in the past. Then what I need, of course, is a project to work on. Sometimes work provides those, but it’s usually a good idea to build something yourself before you commit to your work that a thing can be done.  Plus you then have a good idea of what the sweet spot for the tech is, and how to use it — or know to stay away from it.  My hard dives are littered with half-started projects that I abandoned after seeing how the library functioned in a real project — or didn’t.

A few weeks ago, I was considering a text editor, or rather, a word processor.  I use Google Docs for a lot of my personal text editing, but there’s a feature that I want that it doesn’t have — and it’s not open enough for me to write a plugin for it. The idea was that I wanted an index alongside my document, but not part of it.  I’m not looking for headers, but rather an outline. I want the outline to be there when I’m editing, but not be there in the document, cluttering things up.  The document sections can be any size, so it needs to visual expand as I type, but keep the outline it’s attached to right there with it, so I know what section I’m working on. Google Docs doesn’t have a plugin architecture, and I don’t really want to rewrite a word processor just to get this feature, so I shelved and let it sit.

Over the next few weeks I developed some extensive code in node.js for work, as well as a simple video game that also used That was fun, and I’m really liking some of the things you can do with the two technologies (I even wired up some php server code to talk to I have, over the past few years become a huge fan of JavaScript and what can be done with it.  I know there are complaints about it, but that’s been true of every major language ever, and following best practices tends to help. [There’s a post in here about  callback hell and how I never really got into it because of the way I code, which I’ll write later.]

One of my co-workers is working on an internal app that’s data-centric, and using angular.js for that.  We talked about it a bit, and I grabbed a copy of it, and messed around with it. It’s kind of interesting, I can see using Yii or Cake’s REST API routing  (and dropping their front end generation)  to build an app with it  At the same time, that feels like overkill for a lot of things.

But what I did realize is that angular.js and some clever JS and HTML could deal with the data issues I would have with the text editor + outline. I could have an app that could save and load files locally perhaps, or use cloud storage. I did a bit of research on databases with node, and most things are supported. However, I’ve been spoiled by the models in Cake and Yii, so I don’t want something where I’m constantly writing SQL statements and messing around at that level.

The key storage for node, though, seems to be MongoDB, via mongoose.  MongoDB is a no-sql database that’s quite different from what I’m used to.  I loved my DB classes in college, relational algebra, set theory, it’s all nice. The first half of my career was really writing SQL code, stored procedures and things like that. But the world is changing, and exactly that kind of experience is starting to age a bit.

So it’s time to move on, and while we’re moving on, let’s use all knew technologies, and basically write everything in one language: JavaScript.

So, that’s the new project: an outline-based word processor written as a web application, using AngularJS for the frontend and  Node/MongoDB as the backend.  There’s a few features that we’ll have to support, but I’ll go into them in the next blog.

Labor Day

Today is one of those holidays that feels particularly ironic.  Everyone gets a day off, except those of us with no work days.  It almost feels like I should get more done today than I would normally (aka: nothing).  I do think that I can’t really afford breaking my schedule, so I went ahead and followed it today.   Of course, it was helped that our family’s wage earner went to work today, probably getting overtime pay.  So I have to honor that by doing my own part.

Ultimately, getting back into routing was what cleared my head last week. I got a lot of comments from various sectors about keeping your mind clear and not abolishing hope — which wasn’t my intent, but it can feel that way when you’re depressed.  I spoke with one of the connections I had, and learned that I did make a good impression, there just wasn’t work (or money for work) yet.  That job may not be full time, but if things come up, it can be a source of much needed income.  Plus, it feels much better to know why you’re being rejected (at least when it isn’t about you.)

This week, I’m putting together my consulting profile, and I’m going to see if I can get some of those kinds of jobs.  I’m reasonably good at doing them (it’s keeping them coming in the pipeline that is hard).  It also means I can work from home, which I like — but which I don’t prefer.  It depends on who I’m answering to — I’ve found driven small business owners to be good bosses in that respect: they demand excellence and feedback, which keeps me on my ‘A’ game.  It’s a good synergy, if you will.

I also got good news about the unemployment situation which looked like it might take another week or two to resolve.  The good news is that it’s resolved.  We now have some cash flow, that will keep the rent paid and food on the table. It’s still going to be tight, but we’re making strides there.  It concerns me a bit how we can get by on half what my take home pay was.  It implies to me that we weren’t being good stewards of our income.  And that we can do some of the things we thought weren’t possible, if we’re more careful.

Finally, I got invited to the StoryNexus beta, which is interesting, and which I doubt I’d have done much with if I’d been working.  Now, however, I’m considering entering their Fall contest.  It gets me some recognition on the site, which might ultimately turn into profit.  (They have a plan for story creators to be able to monetize their work.)  I’ve also almost completed the novella for Amazon.  Drafting that is today’s big goal.

Unreasonable? Hope

There comes a time in the process where you become afraid of hope.

This is not good place to be in the fight against the depression, and I admit, I’m not sure how to battle it.  But let me explain it a bit more, since I’m living it today.

A recruiter calls, says, “I can have you working today or tomorrow, even.”  He describes the job, it’s one you can do, and you get excited. He negotiates with you about when you can do phone calls, if you’ll have time for ” a callback today.” You make the time, of course, you’re out of work. You Google the place you might work, you get directions on how to get there.  You contact the family and let them know things might change for the better. You tell you best friends.

Then, two days later with no call you sit alone at your desk and feel like shit.

And you feel like that bad feeling is in direct proportion to how excited you got, and you don’t want to get excited about anything, anymore. It’s hard to do your daily routine, it’s hard to do all the other things you need to take care of yourself. Your mind plays it’s soundtrack of all the other times people have talked to you and nothing came from it.  “If I’m so great,” the thinking goes. “Why does no one call me back?”

It’s that feeling of “they want me they really want me! no they hate me”.  You’ll get whiplash with changes like that.

And the rational part of me knows I was writing about this feeling two weeks ago. I know I need some patience, and with the direct hire positions, I have that.  But with the fast turn around stuff, when it doesn’t turn around fast, that’s hard.  I knew I’d have days like this, and I have my routine to keep me going.  Of course, in the excitement I’d let some of my routine go, after all I was going to be working again, soon. And that was part of the mistake.

I just don’t know if having real hope and getting excited is also a mistake.  How much is too much? If I get my hopes up too high, does it hurt more to have them dashed?  Or is it just that I was already stressed from two weeks without work that I’m feeling a bit fragile today?

How do you deal with this kind of thing?


The stress is building up, which is part of why I’ve not posted in two days, or walked.  That’s bad, and I need to deal with it, so let’s start with the easier of the two for now, and the one that will clear my head.

I’ve had a lot of recruiter contacts, I’d estimate I’ve been approached for 4-5 positions, some full time some contract.  Now we’re in the waiting part of the game.  Which for me is stressful. I can wait fairly well, but I’ve got little to do but think about what might or might not happen.  This can be bad in it’s own way, which is why I have other projects to work on.

On the other hand, we misunderstood how unemployment worked, and instead of restructuring our bills earlier, we paid them.  This isn’t necessarily a bad thing, but we’re not getting any income until mid September, and that’s stressful. We aren’t alone here, at least, — I remember being alone in Charlotte and really bottoming out on life.  I’ve never been alone here in Columbus, even if you don’t count Tam. We’ve got a few close friends, and family so things are going to be okay.  Our landlords, at least, will work with us if we communicate, so that’s good too.

The real problem, of course, is that we weren’t prepared for any kind of financial emergency.  We can’t just exist for a month with no income and not stress about it.  That’s a real problem, and one we’re going to fix.  I think we can even start now, and Tam and I have had some conversations about it.  It means changing the way we use and think about our money, but as Americans, that’s probably a good thing.

I want to say that we’re much better than we were ten years ago, when I was making a lot more money, and our household brought 2-3 times what it does now. Our bills weren’t appreciably higher (food was slightly higher, as there were more people involved), but we were still scratching by, paycheck-paycheck.  This isn’t about resources so much as how you deal with them.  We can do better, and we have to.

Noting all this stress is important, as it’s a potential driver of depression.  There has to be some to move you forward, but too much and it gets into “I can’t handle it” land, and things fold.  Paying attention is one of my five important rules and this is no exception.

And like I said, there’s potential good news: there’s a lot of nibbles out there, but as my grandfather used to say, nibbles could just mean all the minnows are eating your bait.  That ties into something else I worry about, and will write about tomorrow: unreasonable hope.

Recruiter Contacts

So today I have two recruiter contacts.  I call them that instead of interviews, basically because recruiters can’t hire you.  They’re just a middleman/contact person.  Someone you can tell your story to who can then turn around and sell you to the company.  They’re important in that way even if they are often difficult to deal with.  Some are much better than others at treating you like a person instead of a product with certain attributes (eg, PHP 12 years; SQL 19 years). I’ve been lucky this time around to deal with a few of the better kind of recruiter, although I’ve seen the others as well.

Part of it is that the skill set that makes you a technical person is often very different (and sometimes counter to) the skill set that makes you a recruiter.  We’re very different kinds of people, and it often doesn’t mesh well.  Yet, they need us as (at it’s base level) products to sell, and we need them because of that selling skill set.  Because often we are not very good at it.  I know I”m not a great salesman, I’ve tried it in the past.  I have to have an incredible belief in the product to sell it. It’s got to be somethign I value and like and think other people would benefit from.  In that way I do okay selling myself, and often my friends.  There are very few actual things I do well at selling.

The thing about these contacts is that they are so preliminary you may walk away with them with nothing.  I had one last week that was “Hi, My name is X, a recruiter for Y company.  I’m just catching up to you to tell you I’ve got nothing.”  Usually the contact is good, just so you can talk to someone and tell them your story.  Because the resume, while it is a list of facts that becomes a story, when you talk to a living person, you have a story to tell.  It’s your story, the story of how you got to where you are now, and what you want to be doing, and you want to tell a compelling one.

An important component of the story is to be as positive about things as possible.  You didn’t leave the last job because they were a bunch of shitheads — even if that’s possible.  Maybe you went on to pursue a more interesting technology.  In IT one good reason to move from job to job is to keep your skills fresh.  It shows that you are career minded, and moving forward with your career. A lot of IT people are happy doing the same thing they were always doing; for me that’s not who I am.  Both stories are good ones, but they are about different people.  Figuring out what that story is is important.

It helps you remember who you are, and to communicate it to other people.   And if you’re an IT person who thinks stories are just stories, or just fiction, and that you can’t tell “stories” since they aren’t true by some measure of things.  (Or not completely true, as part of storytelling is to pick what to focus on and what to leave out.) I just want to remind you that as human beings we are story telling creatures. (It seems that even some of the other high-order mammals may also be story tellers.) It’s something that we share across all humanity, and it’ something you share with that recruiter sitting across from you.

A compelling story is one they buy into and carry on to the client/future employer.

As a friend of mine often says, “So, what’s your story?”


So, yesterday’s post was about scheduling, and I broke my schedule yesterday (although I may make a refinement of it to allow for Wednesdays).  As far as things go, yesterday was a four-checkmark day when I was done, which is good enough. It just wasn’t the checkmarks I’d planned on.  Add that to a bout of self-doubt and feeling like a fake/failure last night, and I’m not excited about how my day went.  So today, I need to be productive and get the wheels back on the road.

So we’ll start with one of the things I didn’t do yesterday, namely: write about my schedule.

I admit I do very well with a regimented day.  I’ve got a morning routine that gets everything done and me out the door (or I did, anyway).  I had a rhythm to my day, and that helped.  Since I worked in a job that was very flexible in its duties, there were a lot of varied things to be working on, and having a schedule helped me to focus on which ones I’d be working on, and set aside certain parts of the day for that. It didn’t always work, as I also had to respond to emergencies or support calls, and those can’t be scheduled. (I.T. WISHES!)

When I was unemployed the last time, I didn’t have a schedule, and I also got very depressed, so I slept a lot.  And my schedule rotated around. If I didn’t have my family and my time obligations with them (date nights, gaming nights, that sort of thing) then my schedule would have been worse. I still have that kind of structure, but I can do better.  As I wrote, on Sunday I sat down and wrote down four major projects.   Then I broke them down some into larger tasks, and the closer in tasks got broken down some more in to check-mark worthy chunks.

I changed my alarm from 5 to 6, since I don’t have a morning commute anymore.  My commute was the one time I regularly walked (to and from bus stops), so I added in a morning walk, which I still need to figure out how long it is. After that, I shower and get dressed. A mundane element of my schedule, perhaps, but it means something to be clean and to be dressed.  It means I’m not just lazing around, and I’m here to do some work.  Breakfast is in there as well (still finding it’s best spot, and with the dotter starting school this may be a bit flexible for now).

Then I sit down at my task lists on Any.Do and I decide which things I’m doing every day. I’ve got coding, writing, and job-finding tasks I can do at my computer, and a house-cleaning task for each day which also needs to get done. Today, for instance, I’m pulling the couch out and going on an archaeology mission. I mean, cleaning out from under it.  But more on cleaning tasks later.  They are an important part of the depression-fighting, though.

Hopefully by 3 or 4 o’clock, I’ve gotten 4-5 check-marks.  Then I can assess how I’m feeling: Am I almost done with a task? Am I at a good stopping point? Is there anything urgent that still needs doing?  Whose cooking dinner? At that point, I can unwind — I’ve probably been working for 8-9 hours at that point, so it seems fair.  That leaves my evening open to relax, recharge and focus on my family.  Yesterday, I did that part in the middle of my day, and came back to it later and got one or two things done.  That might be okay, but it’s much harder to relax during those times that I haven’t quite finished yet — as there’s always the chance I won’t get them done.

The other reason that that afternoon review is important is that part of this isn’t just getting things done, but me knowing and acknowledging that I got things done.  One of my goals is keeping my spirits up and depression at bay, and you can’t do that unless you keep self-aware of what is going on.


The first thing I need to do is get some control over what’s going on.  I think that’s a human reaction to massive change and uncertainty, even if I may sometimes be a bit control-freaky.  I just like things in a certain order, and now the order I had is all gone.  And that feeling of disorder is part of what I’m fighting against.

So my first task, which I did on Sunday was to start getting things organized.  That meant applying for unemployment, getting set up with food stamps, and going through all my automated payments, and trying to make decisions.  I cancelled my kickstarters, except for one which is totally awesome.  I cancelled some of the tools I use that have monthly payments: for instance — it’s only $3, but I don’t need it anymore.  The same is probably true of DropBox, since I only have the home network to share with anymore.  I doubt I need all that space.  I’ll probably clear it out today and shut down the service there. [And, frankly, I’ll probably go to Google Drive if I need the space again, it’s cheaper/GB.]

I set down a schedule for the work I need to do, giving myself four major projects: getting a job, finishing and publishing a video game, finishing and publishing my writing (on Amzaon), and getting the house in shape (particularly my office).  That’s a lot of work, and maybe more than I had going before since I was just idling away at these tasks, and now I’m ramping them up.  I do better with too much work than too little — one of the problems I was having (exacerbated by the budget crisis there) was that I just didn’t have enough work to do to keep me busy and engaged.  I won’t have that problem as my boss, in fact it’s just the opposite.

I’ve decided to use  for tasks, as it looks great on my Nexus 7.  I’m using Joe’s Goals  as well, as it serves a different function.  Basically, is a task list, with folders/projects that have specific tasks and goals in them. (The trick is making these the right size, so they’re all about the same energy cost.)  Joe’s Goals is more like a checklist — you list things you want to do every day or on a schedule, and when you do them, you give yourself a check mark.  Some of my goals are “Do a Get Hired Task” or “Write 300 words”.   I can look at the total number of checkmarks for a day, and I can know whether I had a good day or not.  And that’s how I can give myself permission to relax and enjoy myself.

Because we can work our butts off trying to accomplish something — and feel like failures until we do accomplish it.  Or we can set reasonable goals, and take care of our needs.  Needs which include time with family, time relaxing and recuperating from the stress of work.  Just like programmers shouldn’t be working 10 hour days 7 days a week, you can’t either.  But the thing about being unemployed is that it never, ever leaves your mind. No matter what you are doing, what you aren’t doing is earning any money.  And you know that, and it hurts.

So you want to play cards with your daughter? You can’t do it, or you can’t do it and not feel guilty.  Or, you can set reasonable goals, and know you did enough that day, and give yourself permission to enjoy life.  You’ll need that recharge to keep things going in the long run.  And you have to plan for the long run — if things work out in a week or two, no big deal; but you can’t count on that.  Doing this and having things work out early is awesome.  Not doing this and having it not work out: totally not awesome.



And so things change

So, I started this blog as I was starting my job hunt.  I wish I could say, “And now that job hunt is done”, but it isn’t.  In fact, now it has begun in earnest.  The position that I had (where I was a Temp waiting to be hired permanently) is now gone — it was never funded, so really the position is gone.

I’m home today and my mission to find work has broadened and been pushed to 100%.  That doesn’t mean everything I will be doing will be job hunting, but that everything I’ll be doing will be in support of that.  Part of that is blogging here — because keeping myself focused and in good spirits is a large part of being successful at anything, and I really need to be successful.

I’ve started today, putting in some routine, and applying for jobs.  I’ve also done things to take care of my family: I’ve filed for unemployment, we’re discussing food stamps (my wife was also laid off a few weeks ago, so getting all this in order is necessary for us to survive. It’s a bit scary and daunting, which is pretty motivating as well.  It’s not just me, and it hasn’t been in a long long time.

The last time I was unemployed, it didn’t go super well. It was rough on my marriage, it was rough on me, and we had real problems.  I don’t want that to happen now, so I’m taking some of the lessons I learned then (and since) and applying them now in the hopes I’ll be doing better. And since it’s possible I’ll learn something interesting that can help other people, I’ll blog about it as well.

So, here I am.  I’m ready to work, and ready to go.

Let’s do this thing.

Board: A Step Back For A Moment

In case it wasn’t obvious, I missed my goal date for the features I wanted — mainly multi-user logins, with the virtual tabletop working alongside that.  My date was keyed on when I needed the tools, which was Sunday.  Now, this wasn’t a disaster.

First, I had a backup plan – to use the original code I wrote and which worked well enough four weeks ago.  It’s always good to have a backup plan, because things happen — I got sick, and had a guest for a week, both of which ate into my development time.  This happens all the time; every job I’ve worked had some moment where the priorities of the business changed around the project, and the project had to change as a result.  Successful projects made the change; the ones that didn’t change weren’t successful.  I once had the business culture change enough that the project was no longer necessary, or at least 90% of it wasn’t.  Which meant it was costing the business to keep me employed working on it — so we transitioned the 10% to the approrpriate teams, and phased our project out of the workflow.  I consider that a success, because we did the right thing for the customer, even if I was looking for work at the end of it.

Secondly, the game wound up getting cancelled — which happens fairly often, but isn’t something you can plan.  I’ve had projects which were ‘saved’ by the customer just not having time to evaluate the code.  This certainly shifts the date out (and I had one ongoing project where my clients were so busy that they could only do one feature a month, no matter how big or small it was, so a slip like this could push everything out in increments of a month), but it’s something the customer understands.  Even if you have to shift a date out, making sure the customer understands and agrees keeps things successful.  No project plan lasts the course of a project, but it’s good to take a moment when things change and re-evaluate what’s going on.

And that’s what I’m taking some time to do today.  I’ve been using the YAML CSS project as the base of my design (this is different from the YAML markup language, which I may also use).   I noticed last week that I’d edited my templates down to where I wasn’t compliant with their license, and that they’d updated to a more flexible responsive layout.  I’d planned on dropping it after reading about more responsive flexible layouts, since it seemed to want to force me into two or three column layouts that didn’t feel natural.  As it is right now, doesn’t look that great because of the hacking I’ve put on it in the past four weeks.

This includes the user input section where some radio buttons seem odd, and there’s a bit of a mishmash of css around the whole thing.  I was working with that last week and just kind of threw my hands up — did I finish the user stuff so I could meet the deadline, or do I step back and fix the CSS now? I didn’t know the answer then, but today, after my deadline, it seems pretty clear that I need to fix my structure some, and get it ready for a decent design.

I’ll use the User pages — both the administrative and user-centric pages — as my test for the design before moving onto the boards themselves, with a hopefully cleaner css.  The virtual table really  needs a clean CSS design, as it depends on some positioning features, and anything that’s off or not quite right will make it harder to get it working.

So that’s the goals for the next couple of days.  I’ll have a post on Wednesday — all else going well — about how the whole login and signup process works, and then once that is done we’ll finally start talking about Games, Boards, and Tokens which the actual work of the site depends on.

Board: Logging in With Google

So, a bit behind on this which I’d hoped to have done last Wednesday, but head colds and real life wait for no one, particularly people who do development on their own time.  This pushes me up against my weekend deadline, but I have the old code to rely on, and, frankly, a little time pressure is a great way to get work done, eh?

A bit of research uncovers that while Google uses OAuth, it’s often limited to which service that you’re trying to access.  A bit more research shows that they also support OpenID, and in a way that meshes with their OAuth.  So, while I thought I’d be doing OAuth today, instead we’re going to work on OpenID.

The “Auth” in OAuth is actually more Authorize than Authenticate. For the boards app, I’m more concerned with Authenticate.  OpenID is only an Authentication method.  It does have a way to get some basic details about a person — a nickname, possibly an email, a few other tidbits, mainly about identity and the way people want to be seen.  There might even be a user icon, depending on the service.  That may matter more when we’re into Tokens, but it’s good to note now.

The same person who wrote the OAuth component for Cake also wrote one for OpenID.  OpenID is a bit more complicated than OAuth (for all that OAuth is perhaps a bit more secure, and supports doing more than just confirming identity.)  A good portion of this is that OpenID has had a chance to evolve, and can be (and has been) implemented by a lot of different people.  There’s signed and unsigned requests, two different ways to request information about the user (like their email or name), and within one of those ways there are multiple ways to make the request.  Typically only one of these ways is supported (if any are — and they aren’t required) so getting information back is tricky and not completely certain.

The only information you can really count on is a field called identity_url, which sits at the base understanding of what an OpenID is.  Basically, an OpenID is a URI which identifies a single person.  It’s like an email address in that way, really, and in fact, Google’s OpenID is based around your GMail account (or Google Apps mailing address).  It still returns a valid http URI, which uniquely identifes a user, and that’s good enough for us.

Using the cakebaker OpenID sample, I’ve got a method to allow for someone to enter their OpenID URL (which might not be the same as their identity_url), and log in using that information.  For Google, we already know the endpoint url, we’re using, and it builds the users’ identity_url for us, once that user logs in and agrees to our information request.  For now, we’re storing that url with the key ‘openid’ (just as for Twitter OAuth, we’re using ‘twitter’ and their user id that we got back from Twitter).

I again filled this in with my information and codes, and I’m logging in with Google.  The next piece will be what to do when someone who we don’t find in our database tries to log in.  We’ll want them to set up a new account, and for that we’ll want to grab a little bit of information from the auhentication provider, if we can.  That could be a username/nickname or an email,  and hopefully, a profile picture (which will allow us to set up a user token for the new person).   And we’ll need a way for them to modify this information, or provide the parts we don’t have so we can set things up.