Skip to Navigation | Skip to Content

Kelli Shaver

I'm a software developer who specializes in building great web applications, with a passion for future-friendly code, human and device accessibility, and open data.
I've moved! You should go here

My Foray into CoffeeScript

I finally decided to bite the bullet and learn me some CoffeeScript, something I’d been avoiding for a while, because, frankly, I just didn’t see the point. 

"Learning" CoffeeScript feels weird. It’s not like learning a new language, it’s learning to apply a different syntax to a language you already know. So, obviously, the main benefits you get out of CoffeeScript are syntactical.

It was slow going at first, but after getting my head around a few key concepts, my script started to come together pretty quickly.

But is it worth it? Yes and no. 

I find plain vanilla JavaScript easy to write and easy to read. I’ve done it for years. For me, CoffeeScript doesn’t ease this process any, because I’m already very comfortable with the language. I don’t know that it’s (for me) any faster or better, just different. 

Having said that, I’m not sure I would use it on some stand-alone project where I was just writing a lot of JavaScript. That opinion may change as I use it more, but for now, that’s not where the appeal lies for me.

But here’s where I DO like it:

It fits really nicely into the Rails workflow. The CoffeeScript compiler gem outputs errors via the standard Rails error reporting, giving you nice messages and helpful stack traces. The integration feels almost seamless.

Even nicer is that this different syntax feels quite natural when working in this environment. CoffeeScript eliminates a lot of the context switching that my brain otherwise has to do when jumping between Ruby and JavaScript, because of the syntactic similarities. I’ll admit, even when this simply comes down to semicolons and curly brackets, it feels less jarring, cleaner and more fluid.

I also found that I, quite subconsciously, tended to write shorter methods and shorter lines, more like I would write Rails code. Syntax aside, this in and of itself increases modularity and readability. So, while you don’t have to use CoffeeScript to code in this style, the fact that CoffeeScript facilitates this so well is, in my mind, another added bonus.

Rebuilding Itemize for the 2013 Rails Rumble

This weekend I participated in the 2013 Rails Rumble - mostly. I had some other things I also needed to do this weekend, given that I’ve been out of the office a lot lately, so I haven’t had the full 48hrs to devote. It’s a shame, but that’s the way the scheduling worked out in order to attend the conference and spend some long overdue time with a very good friend.

Last year’s Rumble was kind of rough on me. This year, I decided to relax and have fun with it!

How’d it go? Well, I think. I rebuilt which I had originally created in Sinatra about a year and a half ago. I never was happy with the look or function, and I have been wanting to redo it for a while.

So given the limited scope of the project and the fact that I didn’t want to completely decimate my schedule, that’s exactly what I did. 


The idea is simple - Go to the site, click a button, fill out a form wizard to create an invoice, deliver it to your client via email or by sharing the link, maybe download the invoice as a PDF. That’s it. No sign-up, no accounts, no complex CRM or reporting stats. Itemize is meant to be a simple invoicing tool for small jobs and one-off projects. I originally created it for projects I do for friends and family that I wanted to keep separate from my normal business record keeping. 

So what’s new, aside from a complete facelift? I added a few more features to this new and improved version of Itemize, in addition to completely updating the look. Those include:

  • Sales tax support
  • Item descriptions (optional)
  • Item codes (opational)
  • Ability to add a logo (optional) with previewing
  • More efficient PDF exporting
  • Much better mobile support

As before, your personal info (and now the tax rate as well) are saved to localStorage whenever you enter them, so you don’t have to fill out that part of the form every single time. I thought about doing the same with clients and implementing some sort of auto-complete using the client-side info, but then I decided that if you’re doing a lot of recurring billing, Itemize probably isn’t the right took for you.

Despite its simplicity (or maybe because of, since it gave me more time to focus), I did get to try a few new things and learned a bit. I paid more attention to things like method abstraction to keep my controllers clean and got to use a couple of gems I hadn’t worked with before, built a multi-step, multi-model form wizard, and I got to work with the HTML5 file reader API in the browser, which I’ve done before, but it was kind of a mess, so a clearer look at it was nice.

So that’s the new Itemize! Head on over and if you like what you see, go vote!

My adventure with a standing desk

A short while ago I decided that I was spending way too much time sitting around and that this was becoming detrimental to my health. We’ve all heard that sitting too much is bad for you, but I was actually beginning to feel the effects and it was both unpleasant and worrisome. 

So, last week I ordered a second monitor and keyboard and dusted off the Magic Trackpad (I normally use a Magic Mouse). I cleared off space on the bookshelf, which is perfectly suited to both my height and needs in terms of accommodating my poor vision, and set about to create a standing workstation.

I don’t plan to stand all day. I know people who do that for a living and standing in one spot all day is harder than walking around, and probably not much better for your health than sitting. My goal is to be able to do either, without the need to rearrange a bunch of hardware or reconfigure software settings. I want to be able to easily go from one to the other; to mix it up and move around more.

I’m on day three and so far, so good. I had some low back pain the first day, just because I wasn’t used to it, but that’s now gone away. My feet get tired/sore after a bit, but again, it’s a matter of adjusting (I do find I’m starting to recover from it more quickly). I’d say I’ve stood about 3 hours more today than I normally would have and aside from sore feet, I’m really not as achey and tired as I usually am at the end of the day. In particular, I’ve noticed a dramatic decrease in shoulder and wrist pain, so the effects seem pretty immediate.

I’m still mostly doing light work while standing; email, reading, phone calls, typing up notes, but today I did do some coding here and there. Once I get over the sore feet, I don’t think focusing will be as big of an issue as I feared it would be.

I also find that I’m a lot more prone to pacing around the room and thinking, instead of just sitting and thinking if I’m already standing. That means more moving around (good for my health) and has also lead to better thinking.

I’ve also noticed that when I’m done working, if standing, I tend to be more likely to wander off and do other things, rather than just continuing to sit and mindlessly surf the interwebs. As it turns out, I seem to naturally favor “wander off” at that point over “just sit down at the desk.” As a result, my kitchen is a lot more organized and that coil on the air conditioner that I’ve been meaning to clean for the past six months is now cleaned.

Quick Tip: Canonical URLs

Building a site that handles link submissions? Check submitted links for a canonical URL tag to avoid duplicates.

def canonical(url)
    page = Nokogiri::HTML(open(url))

Similarly, if you’re a content creator and you’re not using the canonical URL tag, you should be!

Page 1 of 16