I've been converting most of my recent apps from my old automation process using ANT to use Grunt, primarily because there are almost limitless options available via NodeJS modules -- something that can't quite be said about ANT.
One of my favorite Grunt tasks is the watch task, which can be configured to watch various sets of files for changes and run specific tasks when they do change. The way this works is that as you start working on the project you open up a tab in your terminal and start the watch task:
grunt watch. This runs continuously until you kill it with
Today I found myself wishing Grunt would reload changes to my Gruntfile automatically so that if I change the path of a file or add a new fileset to be watched I don't have to restart it manually. Of course a quick google found the answer. Simply add this section to your Gruntfile:
...And that will take care of it. Of course, you probably already have other watch tasks running which is why you want this addition in the first place. Here's what mine looks like right now, all combined:
Published 2014-01-22 @ 09:00 in
The biggest news this time around is that we now have a shiny new logo!*
As ever, the full release notes for Taffy 2.2.0 are available on GitHub.
In addition to the new logo, my second favorite addition is that Taffy now returns additional headers that show you where time was spent on the server, to help find any performance bottlenecks that may pop up. These values are listed in milliseconds and are not perfect because there is some rounding involved.
- TIME-IN-ONTAFFYREQUEST should be obvious, this is the time it takes for your OTR function to run.
- TIME-IN-PARSE is the time needed to figure out what's being requested. This can get somewhat complex at times. I would expect the value to go up if you're using a bunch of tokens, for example.
- TIME-IN-RESOURCE is the amount of time spent inside your resource cfc, for example, running the GET method.
- TIME-IN-SERIALIZE is the amount of time needed to serialize the data to the requested format. Handled by your custom representation class or the framework default -- either way it will be reported here.
- TIME-IN-TAFFY is the end timestamp minus the start timestamp of the request, minus the other duration values above. It's conceivable but unlikely that this might go negative! Again, that would just be a rounding error -- no big deal.
I'm so glad that Richard Poole requested this feature because while I always knew that Taffy is ridiculously fast I didn't have any numbers to back that up. Now I do, and Taffy is even faster than I expected!
Thanks to Richard Poole, Jesse Franceschini, Cody Martin, marbetschar, Lee Howard, Bill Rawlinson, Aaron Martone, Tony Junkes, Andy Matthews, and w1nterl0ng for your bug reports and other contributions to this release!
* Stroz can "occupy me" if he doesn't like it.
Published 2014-01-21 @ 10:00 in
This was my desk yesterday morning, and this is my desk now, as I write this at about 1:00am this morning.
I upgraded to a 4K Monitor!
Yesterday after it arrived I did an unboxing livestream for a few friends in the early afternoon:
What follows are my initial thoughts, and considering the time of
day night, I'm not going to try for fancy exposition. It's going to be kind of stream-of-consciousness, so I apologize in advance if it's not some of my best writing.
How it came to be:
Late last week I saw a post on Reddit with the headline 4K is for Programmers and didn't really think anything of it -- I didn't read the article or the comments at the time. Then a day or so later, Steve sent me the link and we bantered about it a bit. The more I thought about it, the more I thought it might be a good fit for me.
Considering Amazon was selling them for $500 and my current external monitor was only a marginal upgrade over the 24" 4:3 monitor I got in college for ~$600, it seemed like a damn good deal!
Note: As I write this the price has gone down to $477.32 and Amazon does have a low-price guarantee so that if the price goes down or you can find a better deal online within 14 days, they'll refund you the difference. I'll be calling about that partial refund shortly!
As expected, this thing is pretty huge. 39" diagonal and a little over 35" horizontal. As you can see from the pictures, I ended up removing my desk's hutch -- I had to, and I knew that before I bought it because I wisely measured the hutch and compared it to the product specs.
An unexpected bonus: I'm really glad that I will have less stuff in my face all day. I bought the desk with the hutch because it looked convenient, and I put stuff on the shelves because I had them, but now that they're gone it feels much like a stark web-design. By limiting what you can fit into your field of vision, you have to decide what's important and what's not. I've really cut back on a lot of junk that was on my desk because it had no better place to go, and I already appreciate the decreased clutter. I'm not really into "Zen" but if I were, this would be it. I'm thinking I might install 1 or 2 small shelves at some point, but I would try to keep the minimal feel.
The resolution it's running at for me (1920x1080) is larger than my previous external monitor by a fair margin (pro), though not really even in the ballpark of what the screen can handle (con). When I get a new laptop or possibly trashcan-inspired mac pro in a year or two it should be more than capable of putting out the native resolution of this screen (3840x2160).
Because of the increased resolution, I can now drive a full-screen Chrome window with dev tools open on the side, and still have the web page viewport comfortably up to 1200px wide. It's a debugger's dream come true. Alternately I can see easily replacing that debug panel with Sublime Text. That should be a nice layout for coding.
I'm sitting approximately 36" away from the screen and it does not feel too close. It's a lot like having 2 monitors, except you don't get the bezel breaking them up in the middle.
Whoever designed my desk is a jerk. Removing the hutch required detaching the desktop from the drawers, removing the hutch, and then re-attaching the desktop. That probably added an hour or so over what it would have been if the hutch were designed to be easily removed. (Obviously no points lost for the monitor on this one.)
There is a dead pixel cluster (con) for which Amazon agreed to replace the unit (pro) with one-day shipping (bonus)!
As you might expect when upscaling from 1920x1080 to 3840x2160, it's not the clearest picture. The default settings have the sharpness turned up pretty high and I found that turning it down to almost 0 greatly improves the readability of text, but it's still not perfect.
I understand that the color settings could use some tuning. It's decent out of the box but I can see what others have been complaining about. I imagine that with some research and brute force fiddling I can dial it in. If your bread and butter comes from graphic design, photography, etc then I would urge you to buy with caution -- heck, probably don't buy a Seiki. If your living comes from creating visually appealing pixels, you should probably stick to Samsung, Sony, etc. (Though my problems may stem almost entirely from having a video card that can't output the native resolution of the screen. It's possible that the higher resolution could solve all of these problems.)
I hear that there's a firmware update available, so I'll try that and see if it improves the text display. I am not overly optimistic about that, because I believe it's mostly attributable to the hardware/software doing the video upscaling.
I did hear that the firmware update makes some changes to the way that the brightness setting works: My understanding is that currently the backlight does not dim at all when you lower the brightness setting, but the color changes. The firmware update is supposed to address this.
All in all, I'm pretty happy with my purchase.
And with that, I'm off to bed!
Published 2014-01-15 @ 08:30 in
I just finished a nice toasty chicken salad sandwich of my own making -- our New Year's Eve chicken has become our New Year's Day chicken salad -- and I'm feeling a little bit introspective. Whether you attribute it to a full belly (and maybe a sneaky 12:30 beer), or year end/beginning mindfulness... What follows is atypical for my blog; and perhaps a sign of things to come.
2014 is the year in which I am no longer a gun for hire.
Since graduating college I've been fortunate and happy to continually find jobs that pay well enough to cover my lifestyle, and later my burgeoning family. I cut my teeth doing odd IT jobs and spotty programming assignments during high school; took an internship-turned-full-time-job in college working on Accounts Receivable integration software to interface modern software with Perdue's aging mainframe systems; left that to consult in web development; was acqui-hired into an international consulting firm several orders of magnitude larger; left that to work on business simulations and "serious games" for the Wharton School's Learning Lab; and eventually left that to land where I am currently: I make mobile device apps, REST APIs, and data warehouse and management apps for higher education.
Steve and I have been talking for the now almost two years that he has been signing my paychecks about our vision for the company. We have a product that we've been iterating on, in chunks, for the last 2 years, and in 2014 we want to tie it together, brand it, and challenge a mostly unchallenged (and therefore, we believe, slow-to-innovate) player in a highly profitable and sorely underserved market. That's about as specific as I'm prepared to get at this point!
This is new for me. I'm sure it's partly because I am 50% of the company. When there are only two of you, there is no such thing as letting management worry about what's on the horizon. Instead of showing up to work every day and checking things off of someone else's list, I'm helping make the list. And for the first time I (we) have a nemesis. (The benefit of having a nemesis: A topic for another post, for sure!)
I don't promise that I will have a lot of insightful blog posts about running a small business in the coming months and years. Maybe I will, maybe not. But I can say with extreme certainty that in the recent months I've been culling my RSS feeds of technical blogs and following more and more small business blogs because I've been learning more from the latter than the former. I am particularly fond of LessAccounting and Unicorn Free, to name but two. Both have a refreshingly personal and opinionated voice, which I don't always completely agree with, but in which I do always find value. We're also both big fans of Fake Grimlock!
What I am most looking forward to this year is making the leap.
This is new -- though not completely uncharted -- territory for me. And that sense of the unknown is somehow comforting. I've always enjoyed change, and challenge.
Between the two of us we clearly have the technical ability to accomplish our goals (technical ability is the minimum, and the easy part) and we have a combined ~15 years of experience serving our target market. We're already bootstrapped. All that we need to do now is make the right decisions and execute on them.
It's going to be a good year!
Published 2014-01-01 @ 01:30 in