Atwood’s Law at work…


Any application that can be written in JavaScript, will eventually be written in JavaScript.
Jeff Atwood

Before working at the company, I had programmed mainly in C, C++, and PHP (and therefore MySQL).  During my interview, I said that my favorite programming language was C (and it was).  I had been working as both a web programmer and research assistant.  As a web programmer, I had done a few tricks with JavaScript, but the websites were driven by PHP and CSS.  I hadn’t yet discovered jQuery.  When I had to develop a network traffic blaster and receiver, I wrote them in C++.

Today, I write all webpages in pure JavaScript.  There is a single HTML page: index.html.  It only serves to load the necessary CSS and JavaScript libraries and application  The <body> is empty, except for a single onload="init();".  I use jQuery to build the DOM.  And I’ve recently started using D3.js to build data-driven documents.  Yesterday I stumbled upon Bootstrap, which I plan on integrating when I don’t need jQuery UI widgets.

And if I had to build that network traffic generator again, I would do it in Python, which is now my preferred non-web language.  If it’s not on the browser, I write it in Python.

This is a really boring post, but I’m going to post it anyway.

More exciting: I am playing Dead Space 3 (not as good as the first two–the first was the best), and Borderlands in now on my Steam Wishlist.

The old school trend continues…

For about a month now, Sav has been trying to get me interested in shaving with an old double-edge safety razor.  She got an old Gillette at a thrift shop, and loves it.  I was doing some late-night shopping at Walmart last night a stumbled upon a safety razor.  Apparently there are some companies that now make them (in China), but there must be a market, so they’re being produced.  Sav paid about the same as this was going for new, and not being one to browse thrift shops, I decided to jump on this bandwagon.

Sav was excited, and it wasn’t long before she’d shown/explained just how much of a community of enthusiasts there is.  Some are near obsessed with the “art”, I guess.  I don’t plan on getting obsessed.  I’ve got enough obsessions to last be a while, and I prefer to be obsessed about things like mechanical keyboards or fountain pens.  I don’t think I like shaving enough to become obsessed with “the art of shaving”.

Nonetheless, I tried it out for the first time today.  Definitely a bit of a learning curve, and definitely different, but I have to say that I think that my first time shaving with a double-edge razor was just as good as I’ve ever had with my Gillette Mach 3.  The shave soap is a lot more fun than an aerosol can.  Using the brush made me feel like a boss.

I might have to get my dad into it as well.  Thanks to the internet, you can get supplies on the cheap very easily.

I can hear Sav wrestling our son in the other room—sounds like he’s getting into something.  Better go check on that, as well as check on the top round London broil that’s smoking in the Traeger.

Currently listening to “Rain Dance” by Dan Curtis

Testing out the new keyboard…

Don’t you love the sound of the doorbell when you’re expecting a package?  It’s like a miniature Christmas morning.  I have to say, I don’t think I really knew what to expect in a mechanical keyboard, other than figuring it would be a lot like the old keyboard that I sometimes use at work (not my computer — it’s an old Hänel inventory system).  It is very similar, only my new keyboard feels, well, newer.

It’s definitely a different experience.  It’s a more pleasant tactile experience.  You don’t have to wait for your fingers to be abruptly stopped in order to get feedback, or for the character to register.  Moreover, the sound that the keyboard makes when the switch actuates is pleasant and gives immediate feedback.  It’s a lot like typing on a manual typewriter, but requires much less movement of each key.  But a very pleasant sounds as each character is typed is there.

So my five minute review of the CODE Mechanical Keyboard:


Currently listening to “Sunrise” by Doug Hammer

Going mechanical…

I’m geeking out over my most-recent nerd upgrade.  A mechanical keyboard.  And not just any mechanical keyboard, but a mechanical keyboard designed specifically for programmers.

The funny thing is that this will probably end up being at work 90+% of the time, since I don’t actually do a lot of programming at home.  (But maybe that would change if I had a keyboard like this.)  Anyway, my work keyboard is just a cheap generic HP keyboard that came with my PC.  I swapped it out for a Microsoft Natural Keyboard for about a week before switching back.  But the cheap keyboard isn’t pleasant to type on.  Indeed, I would prefer my laptop keyboard to the one I have at work.

So I’m joining the keyboard cult (a term used by Jeff Atwood, co-creator of the CODE keyboard).  I’m pretty excited about it.  I spend 90% of my working day in from on my computer, and probably 90% of that with both hands on the keyboard.  If this makes that time more enjoyable, then I’m all in.  I just hope the keyboard isn’t too loud.  I mean, a little bit would be great, but not too much.

Currently listening to “Open Your Eyes” by Snow Patrol

I’m mostly likable…

This post is a story.  A story about the workplace.  I generally try to avoid the topic of work ever since I started working at a company that has bi-yearly confidentiality training.  But this story is about my interactions with people, not anything product-related, so I think I’m safe.

It’s been a bit of an interesting year.  Around the end of last year, I was extremely busy.  But around the beginning of this year, there was a project that I needed to be moved to (I was still busy, but not as bad).  Another engineer had had the project for 4+ months and was struggling to get the software on a new platform into a production-worthy state.  In all fairness, he was completely out of his element.  Our manager had decided to let him spin his wheels–sink or swim–and he sunk.  When I got brought in to audit the code, I found numerous errors, and many code releases went out without fully resolving these errors.  I took over, and the previous engineer was given a workload that required far less development–because it was maintaining programs that I had worked on for the past two years.  The majority of the maintenance that I was doing was given to a second engineer so that I could focus on the new program/platform.

In two weeks, I had completely overhauled the program, stripping out all unnecessary bloatware and simplifying the work of future engineers.  I don’t mean to toot my own horn, but it was simply a difference in skill sets–having the right man for the job.

Unfortunately, during the auditing process of the first engineer’s attempt to develop the code, I called out a lot of his mistakes.  You have to understand: multi-million dollar decisions could be made based on the data gathered by these programs–we can’t afford to release bad code, literally.  But at one point, there was even a slight confrontation between this coworker and myself.  We had had a meeting a few days previous, and he had been given an action item to change a number of things in the code.  I took it upon myself to modify a script that I had written to check the code for needed changes.  I modified the script, but this engineer didn’t ask me for the data.  Instead, he made a couple changes and then made a program release.  When I caught the error–that the agreed-upon changes had not been made–I sent out an email to him and our manager(s).  His quick response was that he thought the script had been run and that everything was fine–basically, he pushed the blame over to me because I was in charge of this script that should have done his work for him.

As fate would have it, neither his manager nor our common manager was at work that day.  I was mad.  I don’t remember now if it was the same day or the next, but at one point I asked him point-blank, face-to-face if he was blaming me.  Oh, he quickly backed down from that one.  No, he wasn’t blaming me (now).  And then later he has the gall to say to me that “he would appreciate it if we didn’t use raised voices” in further discussion.  I had to just turn on my heel and walk back to my desk before I hit him in the face.  (Don’t worry, this coworker is still alive, and I happily help him at least once a week, albeit, slightly amazed at the simple debugging that stumps him–he’s not a programmer.)

So when I took over his project, there may have been some feeling that I took it from him or got him kicked off the project.  And that’s partly true.  I told my boss to put me on the project.  But it wasn’t because of any ill-will.  I wanted the best for our team and the best for our company.  I wanted the program done right.  And yes, I was the guy sitting on the bench, yelling, “Put me in coach!  Put me in!”  I wanted to jump on that sinking ship and save it.  And I did.  I threw out any work the previous engineer had done (it was in a completely wrong direction, an example of “better to start over than try to salvage”).  I started with a fresh fork of the program (we borrow code from another group).  And I’m not exaggerating when I say that I had a stable production release within two weeks.  My coworker, bless his heart, did not understand the program, didn’t really know what he was doing, and he was only able to complete a fraction of the total program requirements.  I mean no disrespect, but I can say with complete confidence that he never would have gotten the program where it needed to be.

Well, most of this is water under the bridge.  It’s been over 4 months since this all went down.  And like I said, my coworker comes to me for help with his current work.  And I like him–he’s a nice guy.  Not a great programmer, but very few people are.  I sometimes get frustrated that he’s working 100% of his time on something that used to be ~10% of my time, but I’m doing my best to deal with the fact that not everyone works at the same rate.  But despite my griping, I want to get along and work well with him.  And I think I do.  At least I hope I do.

So fast-forwarding to today.   I think me and this coworker above get along alright–we’re able to work together as necessary at the very least.  (I mean, we’re not hanging out on the weekends, but I don’t think we have much in common anyway.)  So the surprising part of this story (and really the part that prompted this post) is what happened with a different coworker.  Engineer A above actually interviewed with our group before I joined the company.  He was hired into a different group originally.  Engineer B used to work with engineer A back at their previous employer.  I believe it was engineer B that referred engineer A to the company.  Engineer B was my cube-mate for almost two years.  We got along pretty well.  Eventually, engineer A was placed into our group by upper management.  And that’s how we all ended up working together.

Then one day during the drama/excitement mentioned previously, walking to lunch together, another coworker made a joke or comment about engineer A’s code or something.  (As both this coworker and I had been brought in to audit and help with engineer A’s project when we both had more than full workloads, we were frustrated with A and kind of surprised at some of the errors he had made–and we talked about this at lunch sometimes.)  It wasn’t something awful, but I remember thinking, “Oh no.  We probably shouldn’t talk about this around B,” and I quickly changed the subject.  But I must have been right, because after that day, B stopped having lunch with us.  And after I took over A’s project, he really turned a cold shoulder.  I tried several times to invite him to lunch, each time being declined.  He no longer just talked to me in the cube.  If we did chat, I was the one initiating the conversation, and it was short.  There were a lot more whispered conversations between A and B.  Generally, the atmosphere that had been friendly turned very cold.  I flat-out told my best coworker (as I will call him) that I don’t think B likes me.  A couple interactions in the last few weeks have cemented this in my mind.  Nothing horrible–just chilled.

Now, I know I’m not prefect.  Heck, I’m writing a long blog post about work drama.  But I like to think that I’m a mostly likable person.  I know that I’m confident about my skills, and that might seem cocky or arrogant to some.  And that might rub some people the wrong way, especially when that attitude puts me in a place to take over your project (or your coworker/friend’s project).  But it’s also the attitude that makes some coworkers happy to hear that I’ll be handling work that will directly affect them (or disappointed to hear that you no longer handle work that affects them).  I’m not going to give 10% just so that someone else’s 100% looks better.  I’m going to give 110%, and if that put me ahead, then that’s life.  That shouldn’t be held against me.  I didn’t have a vendetta against A.  I just saw a sinking ship, that’s all.

You can’t win ’em all.  If someone doesn’t like you because you worked to help your company and your team, even if some feelings and egos might have been bruised, then that’s not really someone whose approval or appreciation should be sought.  It is what it is, I guess.

But when all that’s said and done, it would still be nice to be liked.

The cloud dilemma…

(I started this back a couple days.)

Ever since I set up my own server, I’ve been debating abandoning all cloud services that I can.  I’ve already stopped using Facebook (because it’s Facebook more than because it’s a cloud service).  But I’ve also considered switching from Gmail to a personal email server.  It’s scary how important my email account is.  But of course, I’m also nervous about the security of the server itself.  (Of course, the recent heart bleed vulnerability affected almost everyone, and I probably patched my server faster than the majority of the internet.)  (At least once I knew about it—thanks xkcd!)

Where do you draw the line?  When does it become more important to own your data, to own your email address?  Because whoever owns your email address also owns most of your other accounts across the internet.  I mean, if Google said tomorrow, “The data center with our Gmail servers exploded yesterday.  We don’t have any backups, and we’ve decided to simply drop the service and all support.  It’s in the terms.  Have a nice day,” what would we do?  Ok, I know that this is unlikely, but who says it can’t happen?  I mean, Google decides to stop supporting services all the time.

This is something I think about every once and a while.  And yet I keep using Gmail.

It’s been a couple days, and I thought of a very good reason for me to use Gmail, as well as anyone else who’s able to setup their own personal email server: credibility.  My thought is that if I were to attempt to use an email message that is stored only on computers under my control (other than possibly the sender, who may have lost/destroyed any trace of sending the message, or may be simply withholding it) as evidence of some kind, it could be easily argued that I could have created a fake email on the server, since I have root access.  The same cannot be said of Gmail, as I do not work for Google, nor do I know anyone personally who does.  So a message sent to me from a bank or online payment system confirming payment (for example) must be authentic, and could be used as proof of payment.

That was a long thought, but that’s what it comes down to: the fact that I do not own the server storing my email gives the messages credibility.  (At least I hope it does, since I am not a lawyer, and I don’t care enough to research this—I would rather go to bed.)

Dear Adobe…

Last night, I was using Adobe Acrobat 9 on my wife’s MacBook.  Doing a little OCR on a scanned PDF.  And it was awesome.  But my computer is about 5x faster, so I thought, “Hey, I’d really like this on my computer.”

And so I searched for “adobe acrobat” (obvs).  Then I thought, “HOLY CRAP!”  I debated whether I could get past the student verification, and when I realized that was a negative, I thought, “Better not get rid of this Mac—it’s got a lot of expensive software on it!”

In case you’re wondering, there are 5 useful features of Adobe Acrobat:

  1. You can rotate pages (and save the file).
  2. You can make a PDF into a form.
  3. You can reorder and renumber pages.
  4. You can reduce the size of your PDF by compressing images and reducing the fonts saved in the file.
  5. You can OCR a scanned PDF, which makes the text selectable (and a cool feature, ClearScan, actually makes fonts based on the image figures to reduce the file size and make it more readable).

Everything else it can do?  Just fluff.  Ok, signing a document is handy if you actually need to do that.  And changing the properties is also useful.  So we’ll make it 8 useful features.  5 + 2 + 1 extra for something someone else might use.

You don’t need Acrobat to create PDFs, just edit them.  And it’s not worth $300.  $50?  Definitely.  Heck, don’t tell Sav, but I probably would have bought it if it had been $50.  All I wanted to do was reorder and rotate some pages in our HOA’s CC&Rs, then do that fancy OCR stuff (OCR isn’t new, but it’s handy).  But if it came to it, to save $300 bucks, I would go down to the courthouse and scan them myself, or even type the whole things up myself.  And then I could print my own PDF.  Heck, I’d do it in \LaTeX and would be able to create awesome PDFs.

My point is, what’s the point of selling $300 software if you could sell 10x more by reducing the price to $50?  Heck, I’m sure they’d sell more than twice as much if it was just half the price.  Could have made $50 last night, but instead I’m going to learn how to do everything Adobe Acrobat can do with open source software, and then I won’t ever have to buy Acrobat.  $50 now is better than $300 never.

Currently listening to “Wing Cap Theme” by Nintendo (from Super Mario 64)

The joys of home ownership…

My least favorite joy of home ownership is easily the lawn.  I hate my lawn.  Actually, I very much like that we have a lawn.  What I do not like is that there is a creek very near the lawn that provides it with fresh weeds, spiders, and gophers every year (or more often).  I’m constantly at war with this axis of evil.

This year started with gopher holes popping up in the middle of our backyard.  Luckily I saw them probably hours after the first one appeared, and I quickly started my favorite tactic: Gopher Gassers.  In fact, my first attack, I taped three gassers together and threw them down the large fresh hole that had appeared literally overnight.  That kept them at bay for about a week, then a couple more holes.  A gasser (or two) in each of those holes, and we had a few weeks of peace.  I even bought a new solar-powered vibrating stake to ward them off (they had worked well the first year, but moisture (winter) had killed them).  I thought we were free, but then another hole popped up one morning.  Unfortunately for the gopher, it was a weekend, and I again gassed them.  That was a few weeks ago (I believe).  Victory.

This weekend though, we waged war on the weeds.  Actually, this was more like the rebuilding of the lawn after the end of last year’s war.  No matter how much weed killer with crabgrass control I sprayed on the crabgrass last year, the crabgrass would not be controlled.  So I got desperate and mixed up some full-blown weed and grass killer, and I went to town.  Apparently I underestimated the grass in “weed and grass killer” and also might have mixed it a little strong.  I did kill the crabgrass, but I also killed large patches of grass around the crabgrass.  So while the houses across the previously mentioned creek started having beautifully green lawns as spring sprung, we did not.

This weekend was mow, dethatch, and reseed.  Mowing alone made the poor lawn look better.  The reseeding went well, and while I watered, I decided to also preemptively strike at the third member of the axis of evil.  Using the new hose in the newly installed hose reel, I sprayed the lawn for bugs while I watered the new seed (can’t spray weed killer on new grass, so I couldn’t do that).  I highly recommend the Ortho Dial ‘n Spray that attaches right onto the concentrate bottles.  I have a tank sprayer that I’ve used before, and the hose sprayers are 1000x easier, plus you can spray your whole lawn instead of just spot treating.  (For bugs/weeds.)  Plus, I found these handy quick connect hose accessories, and they’re super handy.  They’ll be very handy for watering the lawn every evening since the irrigation available quite yet.

Sav would like a nice lawn for the kids to be able to play in, and I’m trying hard to make that a reality.  It’s definitely going to take some TLC this year.  Instead of weird guys trying to sell me lawn services coming to my house, I wish someone would tell me that I could get my whole lawn replaced with astro turf on the cheap.  A man can wish…

I do have one comfort with all this lawn drama.  A single coworker of mine recently bought a house.  I hope that he finds out just how fun maintaining a house is.

Websites, servers, and blogs, oh my!…

A funny thing happened over the past few months.  When we moved, we had the pleasure of becoming members of an HOA.  I’m not a fan of HOAs in general, but it seems to be how things are done here.  Personally, I think it’s a way for the local city government to get out of installing and maintaining things like street lights.  Nonetheless, it wasn’t like we had a choice.

Well, after we’d been here almost a year, the HOA got turned over from the developer to the members.  At the first meeting we had as a new HOA with the board to discuss things like higher dues, I asked if they had thought of having a website for the HOA.  I thought they would jump at the opportunity to have someone take on this project (for free!).  What’s more, I had already registered the perfect domain name (a .org domain, because I do things right), and I offered to host it free of charge.  So I had offered the HOA free site development, maintenance, and hosting.  But they didn’t take me up on the offer.

So when it came time to renew the domain, I let it expire.  Around that time, we got a new HOA board (and thus, new HOA president).  Well, the secretary sends out and email asking if anyone would be willing to assist them in the creation of a new HOA website (and if anyone had the knowledge and ability).  After banging my head against the table a couple times, I quickly emailed them back saying, “Funny you ask…”

I got in touch with the HOA president, which wasn’t easy for me because I’m very bad at remembering non-work stuff while at work (I guess I enter “work mode” or something.)  The best part is by that time, the domain had passed the grace period and was now in “redemption status”.  Meaning that I either had to pay $200+, or wait a month or so until it again became available to anyone.  That has the risk of jerks like GoDaddy or NetSolutions buying your domain as soon as it’s available and asking a “premium” price.  I was very careful not to visit the site, so that it wouldn’t look attractive, and only checked its availability at my original registrar (which is the best:

But fortunately it became available this week, and I snagged it again.  Auto-renew this time (for all my domains–you know that’s right).  Now begins the adventure of training a bunch of retired people and middle-aged housewives how to use WordPress.  I figure WordPress is perfect — they want a couple of static pages with CC&Rs, forms, and stuff like irrigation information, plus the ability to post news or announce upcoming events.  The design, look, and feel is going to fall on me, and that might be a pain, but I think I can make it work.

That’s one of most exciting things happening to me this week, outside of my confidential work stuff.  It’s very hush-hush.  Well, it’s way too late for this idiot to be blogging.  Good night.

Currently listening to “Piano Sonata No. 2 in E-Flat Major, Op. 45: Andante sostenuto” by Artur Pizarro (performed by the London Philharmonic Orchestra)

Eureka, but without the nudity…

…like Archimedes.

I started this a while back, and for some reason, I never finished it.  So here it is, though kinda boring.

One of the most rewarding parts of my job is solving problems with software.  Usually it’s Python scripts or webpages written in PHP and Javascript.  Today, it was Python.  And it was a good one.  Been working on it for about a week, and today I got it working.  And it works perfectly (once I worked the bugs out of it).  There’s still a bit of tweaking and improving to do, mostly to purge the data of human error.  There’s nothing quite like the feeling of writing a couple hundred lines of code from scratch and seeing it work, gathering hundreds of megabytes of information and outputting a usable data file.  I love it.