Wednesday, July 07, 2010

latest developments

Books read:

  • Forest of Hands and Teeth -- Like someone mashed up The Village with Zombies. Pretty good, except for the teenage angsty bits.
  • Ariel -- Post-apocolyptic, technology-fails, SCA members finally feel superier, boy-meets-unicorn story. You know, that old chestnut. Enjoyed it more than S.M. Stirlin's Dies the Fire.
  • Boneshaker -- Zeppelins, Zombies, Zteampunk. Fun and exciting.

Movies:

  • Valkrie -- Interesting story I'd heard bits of before. Unrealistic-sounding, preachy dialog about their motives kind of took you out of the story. Not that the end result of what they were trying for was bad... just that at least the politician's motives seemed more realistic, while the military guys were more pie-in-the-sky. But, maybe that's how it actually went down.
  • Undead or Alive -- Chris Kattan and James Denton as cowboys during a zombie outbreak. Suprisingly good and funny in a shut-off-your-brain kind of way. The zombies were too unkillable, but still fun. Navi Rawat was as annoying as ever.

Tuesday, March 16, 2010

roomba: better than jesus?

Had a Roomba 550 for a month now. In non-Roomba online forums, read a few bad reviews
about shoddy parts and difficulty with returns on the 5XX series. Decided to get it at
Costco since their return policy is ludicrously good.

So far, so good. It deals w/ electrical cords and rug tassles without any issues. It also
doesn't appear to have any problems transitioning between rug and hardwood floor. Only
have one extra-fluffy bathroom rug that it has trouble with.

The scheduling feature is great. I can schedule it to clean up automatically while we're
at work. I come home and it's waiting for me on the charger, ready to have its bin
dumped. Typically, I'll clean it out, then set it loose in the basement while we're
spending the evening upstairs. And when I go to bed I clean it out again and put it back
on the charger for its automated run the next day.


On the whole, really really like it. We'd typically only vacuum once a week, and with the
dog and cat that meant big dusty hairballs at the end of the week. Roomba's taken care of
those.

Definitely still need our other vacuum, since roomba's just bouncing around
semi-randomly. But, I don't have to worry about neighbors popping over and getting
swallowed by a dust bunny.

Friday, March 12, 2010

UnitTest++ == teh awesome

Been using UnitTest++ for the last couple months on my work project. So far, enjoying it. Very simple to:
  1. set up
  2. add new tests
  3. explain to the other developers
  4. ?
  5. profit

Our unit tests are part of our project's Visual Studio solution file. Each unit test's project is setup to run the unit test as a post-build step. So far, it's caught a number of 'simple' fixes that broke some.

I've also setup a Hudson server to automatically build our project... But, I didn't want it to fail the build if the tests failed. And, I wanted to collect the XML reports when it's built from the continuous integration server.

So, rather than always just blindly calling UnitTest::RunAllTests() in the unit tests's main() function, I made a utility library that'll look at an environment variable to determine how it should run the tests.

In the unit tests's main() :



int main(int, char const *[])
{
return myUnitTest_runAllTests("my_test");
}

The utility function:




#include "cstdlib"
#include "fstream"
#include "iostream"

#include "boost/filesystem.hpp"

#include "UnitTest++/UnitTest++.h"
#include "UnitTest++/XmlTestReporter.h"


namespace bfs = boost::filesystem;

struct True
{
bool operator()(const UnitTest::Test* const) const
{
return true;
}
};



DLLExport int myUnitTest_runAllTests(const char* const testName)
{
char* xmlDir = 0;
size_t len;
errno_t err = _dupenv_s(&xmlDir,&len,"UNITTEST_XML_DIR");

if (err || len == 0)
{
// env var not set, just run the test w/ standard mechanism
return UnitTest::RunAllTests();
}
else
{
bfs::path p = bfs::path(xmlDir);

// free memory from _dupenv_s
free(xmlDir);

// if necessary, create output directory
if (! bfs::exists(p) || ! bfs::is_directory(p))
{
if (!bfs::create_directories(p))
{
std::cerr << "Problem creating directory " << p << std::endl;
return -1;
}
}

std::string fname(testName);
fname += ".xml";

// use / operator to append filename onto path
bfs::path fpath = p / fname;

std::ofstream f(fpath.file_string().c_str());
UnitTest::XmlTestReporter reporter(f);

UnitTest::TestRunner runner(reporter);

// if we're outputting to XML, don't return failure as return code
// this way tests can fail without it making the automated build think the build failed.
int ret = runner.RunTestsIf(UnitTest::Test::GetTestList(),NULL,True(),0);

return 0;

}
}


And then you just point Hudson's xUnit plugin at the generated reports. Came together suprisingly easy

Tuesday, March 09, 2010

movies

Stayed up waaaay too late last night watching movies...

  • Balls Out: Gary the Tennis Coach. Bizarre. Funny. If you enjoy Sean William Scott acting goofy, you might like this movie.
  • Boondock Saints. Meh. Not sure if I can say I watched this since really I fast-forwarded through most of it... especially parts with Willem Dafoe chewing up the scenery.
  • No Country For Old Men. Tense. Exciting. Good
  • The Reader. Good thing I saved this feel-good hit for last... OMG. Downer. But very good.

won't you please help... provide a MILF-related punchline

We got the following notice at work today

Subject: Mountain Lion Warning

The following warning has been issued for the Research Park area:


Building management has recently noticed unusual wildlife activities around the Williams Building property. Specifically several mountain lions have been sighted in and around the parking deck. Building management is working with the Utah Division of Wildlife Resources with regard to this activity however we want to make you aware of the following guidelines from Wildlife Resources should you encounter a mountain lion when entering or leaving the facility:

  • Do not panic. Most lions will try to avoid confrontation.
  • Raise your arms to make yourself appear as large as possible. Lions prefer smaller prey.
  • Slowly back away. Never run and never turn your back toward the cougar. Yell at the lion and wave your arms as you back away.
  • Do not make direct eye contact. Lions perceive eye contact as aggressive behavior.
  • If you are attacked, fight back. Try to prevent the lion from getting behind you.

Please let us know if you notice any unusual wildlife activity in & around our parking lot.

Tuesday, January 19, 2010

dust of dreams

Feels like I've spent the last 2 months catching up on all the plot threads by reading the last handful of books in the Malazan series, all in preparation for book 9.

Finished said book #9 last night. Dust of Dreams by Steven Erikson last night. Very good. A few huge cliff hangers for the final book. And a very exciting ending.

It's going to be a long wait for the next book.

Tuesday, December 01, 2009

doxygen weirdness

Spent most of my day getting Doxygen working with Visual Studio 2008. Finally happy with the output after lots of fiddling and trial-and-error. Now my API documentation is getting generated every time I do a build (and tested with UnitTest++).

Some oddities I had to deal with:
  • doxygen doesn't report an error if you've got \msc in your docs, just silently puts a invalid image reference into the HTML. Doesn't seem to actually try to do anything with the \msc command unless you set MSCGEN_PATH
  • I've got doxygen/dot/mscgen checked-in to subversion relative to my project's source code. Running doxygen from a Visual Studio post-build step, and decided to wrap it with a batch script. At least on windows, doxygen seems to have trouble reading an environment variable to set DOT_PATH / MSCGEN_PATH. Seems like it expands the env variable just fine, but it reports an error saying it can't find dot. Ended up just putting the relative path into the config file. Annoying since now I can't share the config file w/ multiple projects at different levels of the tree... but hey, free-ish UML sequence diagrams via mscgen.
  • If I enable HAVE_DOT, lots of unhelpful error messages whenever it tries to run dot. A little googling turned up the problem -- doxygen tries to avoid re-doing some work if it thinks it doesn't have to regenerate some files. Not sure why it isn't working, but you can work-around the problem by creating a pre-build step that deletes the document-output directory.
When I wasn't messing with Doxygen, I was waiting in line at the DMV to renew my driver's license. Whee.

Monday, November 30, 2009

mingw vs. cygwin -- mingw fail

Cygwin has its warts. But, at least it has a single installer.

There's documentation on the MinGW site with install instructions. Many, many pages w/ seemingly contradictory information. And then you've got to navigate SourceForge's horrible file download interface. Ick.


Wednesday, November 18, 2009

quit stealing my bits

The new job is going well. Working closely with a couple other developers to design and implement some functionality for our new system.

The bad part is... we all have very similar personalities and development styles. All of us are tending to get caught up in the 'big picture' and losing sight of the functionality we need to implement in the near-term. Looooooong conversations about the N number of ways we could do X, Y, or Z.

We need the big picture view to plan the total functionality we need, and to schedule the resources we'll need. But, none of us are being very decisive about limiting the options we have to choose from.
Scarily, I'm probably the least introverted of us -- and, since I'm the 'new guy' I have fewer responsibilities -- so I'm the one writing documents, drawing diagrams, and giving presentations.

In many good ways, I've had to leave my comfort zone. But, today in particular it became clear I'm going to have to be the one to keep us on task and moving forward.

Stupid shoes on other feets.

Monday, November 02, 2009

dependency repository for visual studio / nant / msbuild / whatever

Dear LazyWeb,

For Java builds, you've got both Ivy and Maven as mechanisms to publish / discover inter-project dependencies.

Are there similar tools for C# or C++? Particularly within Visual Studio?

Googling has turned up vague hints about running Ivy from within a NAnt script. And a Visual Studio Dependency Manager on Codeplex that sounds like it might fit the bill, but doesn't have much documentation to judge.

We've got a bunch of thirdparty dependencies, as well as inhouse dependencies -- individual projects might change multiple times a day, or only every year. It'd be nice to have a Ivy-like repository that we can publish new releases into.

Ideally I'd like something integrated with Visual Studio to make our developers happy, as well as something easily scriptable/controllable to make our CM people happy.

Monday, October 26, 2009

argh

I was playing around with some python code a couple months ago. Nothing that special, just a few hours work figuring out how to parse some text files. Nothing too elaborate, but I remember being particularly pleased with one or two pieces of it.

Finally getting back to it tonight and it's nowhere to be found... I've found tons of unrelated crap I saved off and will never use again. The time I'm not anal about putting some experiments into version control is also the time I deleted it without realizing it.

I think it must have also been when I was fiddling with eclipse+pydev+IronPython, and I hadn't bothered to change the project's path from the default place in the default Eclipse workspace. Normally I always change one or both of those...

Sometime in the last few weeks I must have done my usual iteration of "eclipse is acting a little wonky, time to delete it and re-install it and all my usual plugins. Oh, and this workspace directory I never use."

Argh.

I also distinctly remember thinking that I should make a blog post of some of the code. Didn't happen.

Double argh.

Thursday, October 22, 2009

gentlemen broncos

Saw Gentlemen Broncos tonight at a screening.

Yup. I've got the inside track on the Hollywood big time. My friends dog is in the film. The dog has bit me on the bum. I'm not sure how many degrees away that now makes me from Kevin Bacon.
Update: My buttocks are 4 degrees away from Kevin Bacon


Tuesday, October 06, 2009

fall 2009 status

  • dog still good. Other than chomping on the neighbor's cat.
  • new job still good. Fixed a long-outstanding bug in the code. Waiting to get more bugs to work on, and in the meantime working on a new tool to help ease our transition from ClearCase to Subversion. Getting to play in python most of the day, good times.
  • Best book I've read lately: Soon I Will Be Invincible, by Austin Grossman.
  • Best audiobook I've listened to lately: How to Succeed in Evil, by Patrick McLean
Odd that both the book and the audiobook are superhero satire/homage.

Currently reading: Matter, by Iain M. Banks

Tuesday, September 08, 2009

things learned on my first day at the new job

  • eclipse is positively snappy on a 8-core workstation
  • lotus notes still exists
  • there is such thing as too big a monitor. So far, not liking the ginormous widescreen. Would much rather have 2 or more 19"-20" monitors.

Monday, September 07, 2009

good presentation on TDD

http://www.infoq.com/presentations/tdd-ten-years-later

daemon

Just finished Daemon by Daniel Suarez. Very good, devoured it in a day this weekend. Not sure if I liked how it ended -- very clearly setting up the sequel, which isn't due until 2010.

Sunday, September 06, 2009

Saturday, July 25, 2009

losing my geek cred

Finding pydev + eclipse a decent IDE for playing around with python. That place in my heart used to be held by Vim.

The very new IronPython integration in pydev is surprisingly functional.

interesting dynamic languages on .net talk from 2008