I set a bunch of goals for myself last year, publicly, and while I didn’t meet them all exactly, I think it was a worthwhile exercise, and really helped to focus me throughout the year. One of the activities that Brian H. Prince suggests in his “Driving Your Career” series is very similar: sit down every year and figure out what your goals are, because they may change from time to time.
I’ll have a number of personal and internal-to-my-employer goals that I won’t list here, so what follows is only a subset of my overall goals set:
- Read books. I’ve already purchased way more books than I need to. Attending the book club that I helped organize last year is practically out of the question due to schedule changes, but among the books I plan to read on my own include: Domain Driven Design, at least one F# book, Beautiful Code, James Bender’s new TDD book, among other non-dev books like Soul of the Lion and Atlas Shrugs.
- I don’t really have any certification goals, but to keep my PMP I probably need to get some PDUs this year. Attend PMP user group meetings and sessions, that sort of thing.
- I will put at least one app into an Android Marketplace, hopefully one free app and one pay app.
- Conferences and presentations a-go-go: I’ve already got speaking engagements scheduled at two conferences in Louisville and Detroit, not to mention a remote speaking engagement for a college, and probably other events as the year goes on. I also intend to attend the normal array of events, including Stir Trek, Central Ohio Day of .NET, GiveCamp, etc. My goal last year was 3 speaking engagements. At this rate, I’ll quadruple that in this year.
- User group involvement: as an officer of the local .NET group now, I will definitely be involved in a major way for regular meetings and special events. I doubt this will involve much speaking, as it will a lot of behinds-the-scenes work, which is totally fine. I will do my best to help this community grow and improve as much as I can, not only in CONDG, but the community as a whole.
- Project Euler: while I definitely overachieved on this last year, the amount of time I’ve spent on it in the last quarter has dropped drastically. I’d like to get at least another 25-30 of these problems knocked out this year.
- Blogging: I’m nowhere near the volume I used to do in the pre-MBA, pre-children days, but my blog posts are rising back up, in volume certainly, but also in quality (I hope). This is in major part due to the much more interesting and fulfilling work I’m doing full-time these days.
I have some other surprises up my sleeve too, which I won’t reveal until the appropriate time. Suffice it to say, I’m very, very busy, but this could really be a red-letter year for me (and my family, of course).
So: keep me honest. If you see me slacking, or haven’t heard from me in a while, beat me over the head on Twitter, or in a comment here, or in person for that matter.
A project that I’m working on has a number of web pages that need to be tested for performance, and the tool we’re using is Visual Studio Team System 2008.
Previously, I had a single ‘web test’ that sent out a ‘get’ request to every page that needs performance tested. This works fine, but has room for improvement: it’s difficult for me to make changes en-masse to each of these pages. For instance, if I want to send out a ‘get’ request before each report that clears various caches before running the perf test, so that each page is running against a ‘cold’ database and web server. I could put each test in its own webtest, but now I’m essentially copy & pasting everything, and as the number of tests grow that can be a real hassle.
So I took a queue from collegue Mel Grubb who is an expert on using T4 to generate code. I decided that a T4 template is the best way to maximize flexibility while minimizing work. To add a T4 template, just create a file with a ‘tt’ extension. This should work in Visual Studio 2008 (SP1?). I created a template not dissimilar from this one:
I simply lifted the XML in TestXml from a WebTest that VS built for me (all those test files are just plain old XML). I plugged in some string.Format stuff where necessary. I then have a hardcoded dictionary that contains all the information I need to generate individual web tests. Once I save this template, I’ll have files “BrowserReport1.webtest” and “BrowserSummaryReport.webtest”, etc. I have to add those files into the project manually, but there are ways of adding those files automatically with T4. Since this is something of an adhoc situation, I’m not really concerned with that at this point.
Now to run those tests, just go to ‘test view’ in Visual Studio, select the reports you want to run, click the “run selection” button (looks like a ‘play’ symbol) and away you go:
Since I’m looking at performance, I had to add columns for Start Time, End Time, and Duration to the “Test Results” window by right clicking on the header and using “Add/Remove Columns”.
This approach saves me time, because to add a new test, I simply add another entry into that hard-coded dictionary. To make tweaks to all the tests (add/remove/update those cache-buster hits, for instance) I simply make the change in the single template.
I can’t possibly thank and praise everyone who deserves it, but here goes:
Thank you Jim Holmes and the whole CodeMash board for doing all the tough grinding that goes into the delicious CodeMash sausage. Best dev conference in the world.
Thank you all the amazing speakers, including but not limited to: Shawn Wallace, Jon Kruger, Phil Japikse, Chad Fowler, Josh Holmes, Joe O’Brien, Bill Sempf, everyone! Your hard work results in insightful, inspiring sessions.
Thank you to all the awesome sponsors, including but not limited to: Rich Dudley (ComponentOne), Bart, Tim, and all the Quick Solutions guys, Pillar guys, Sophic/Improving Enterprises guys, Brian Noll and JetBrains, everyone! You guys have possibly the most thankless jobs at CodeMash–your hard work and efforts are noticed and appreciated.
Thank you to all the random friends & acquaintances (new and old) that I sat down with during meals, cocktail parties, at the bar, in the game room, etc. Including but not limited to: Arnulfo Wing and the other munchkin guys (Matt Ruma and Johannes), Dean Weber, Seth Petry-Johnson, Alexei Govorine, Kendall Miller, the guys from the MonoDroid open space (Kirk and Jeffrey), Kevin Hazzard, and, well, we would be here all day if I had a better memory. Some of the best parts of CodeMash are the conversations outside the sessions.
Thank you to the Kalahari staff. A crowded hotel packed full of nerds has to be challenging sometimes, but the service and friendliness from every staff member is never short of amazing.
Another big thank you to Bill Sempf, who gave me the opportunity to contribute in a small way as a presenter, among a lineup of superstar speakers that I otherwise have no business even being mentioned in the same breath. Bill is a remarkable man.
That wraps up another stellar CodeMash. Now I need to get cracking on my personal & professional goals for 2011.
I got a Literati eReader from The Sharper Image for Christmas. The hardware itself isn’t half-bad, but the software is atrociously lacking in features. So how do I hack this thing to make it better?
Well, I haven’t been able to, yet. But here’s what I’ve observed so far:
- It’s running some form of Linux. I don’t know this for a fact, but based on the GPL/LGPL/BSD/MIT license information in the manual, and what I’ve read about it in reviews, it’s a safe bet.
- The firmware can be loaded from an SD Card by holding down “Q” while powering on. I don’t have a copy of any firmware to work with though…
- A port scan of the device when connecting to my router reveals ports 25, 110, 119, 143, 465, 563, 587, 993, and 995 but I’ve be unable to connect to any of them to do anything useful or get any useful information.
That’s all I got on the software front. I also cracked the thing open to see if there’s anything easily hackable in the hardware. I couldn’t find anything, but here’s how I did it in case you’re interested. Make sure to turn it off first:
Make sure not to lose any of the tiny screws. I used a small pocket knife as a screwdriver, but obviously a glasses-repair sized phillips head would be preferable. There are four tiny black screws that hold the main circuit board in place, but as you can see above, there’s plenty of solder and wiring that keep the main board from really going very far.
I was hoping to find an SD card or some sort of internal USB port, or…something. Unfortunately, everything looked very hard-wired and unhackable (at least unhackable by me).
All-in-all, a disappointing experience. I post this with the hope of either saving someone else the time, or helping some smarter hacker than me to spark an idea.