Tuesday, May 29, 2007

One Hour Per Day

Dig into Blender. Get Cinelerra to compile on the MacBook. Read Domain-Driven Design. Write my build-management app. Find more pictures to delete. Take more pictures.

…or…

Spend time with my wife.

I get (or should only use) one hour of time for myself every evening. Sometimes more, sometimes less, but after chores that’s usually what is left. And yet I’ve got all these great things that I would like to get done:

I want to dig into Blender because a) it’s a great tool, and b) I really want to generate a first-rate virtual walkthrough of the new building. Even if I just settle for rendering photorealistic interiors, there’s a lot of time to be spent learning the tool, modeling, texturing, lighting, etc.

I want Cinelerra to compile because it’s probably the best video editor I’ll own for under $300 (if you can ignore the file format problem). That it costs no money at all is even better. However, it certainly isn’t free. I’ve already spent a HUGE amount of time trying to get it to work, so far without success. By the time I finally get it working, I’ll be able to spend $100 for Adobe Premiere Elements for Mac and be done with it, anyway.

I want to read <b>Domain-Driven Design</b> to a) help with my build-management app, but mostly b) to help with my career. It looks like the kind of design book I’ve been needing to read. And after that, there’s the Fowler book. Then LINQ. And I can always practice by developing a tool that will help at work – my build-management app.

And photography is probably my life hobby. Even when I “stored” the camera in the bedroom, it came back out after a week. I just can’t leave it alone.

But, of course, I am married to a beautiful girl. I really enjoy spending time with her: talking with her, laughing about the day, planning for the next, and all the other things that husbands and wives do.

One hour per day.

It is kinda funny, but also infinitely wise that God provided two great ways for us to reveal,.judge, and improve our character – money and time.

We get as much money as the world thinks we’re worth, and each person is (rightly or wrongly) valued differently. How we spend our money, however, is a function of character, not income. Both upper and lower economic classes have people with both good and bad character. And their checkbooks usually tell the tale.

But God gave each of us the same number of hours in a day. Twenty-four of them. None is richer, none is poorer; we all have the same amount of time in a day. Sure, you could say that some have more days than others. But no one knows how many days they have left. So we’re stuck with the time we have today.

When the better priority sleeps next to me every night, why do I feel so driven to get it wrong?

Wednesday, May 23, 2007

Florida Was AWESOME!

Sorry about the utter lack of activity over the last couple of weeks. We were in Florida last week - St. George Island, to be specific. Heavenly. Did absolutely nothing but swim and take pictures. Some friends from Memphis (Collin and Vicki) came with us, and Collin brought all his photography equipment. Being able to play with a studio flash and softbox for a whole week was truly...illuminating. Got some great pictures with it, and had fun at the same time. And it sounds like I got him hooked on Lightroom in the process.

Anyway, I'll be posting pictures later. I'm still excited about Cinelerra (trying to get it to compile under OS X right now), and I'm also rediscovering Blender. But I'm still catching up both at work and at home, so I must leave again for a bit.

Later!

Wednesday, May 09, 2007

Cinelerra - The Wow started last night

I’ve finally gotten Cinelerra installed at home, and I am in love.

A couple of nights ago I finally got Cinelerra to compile on my Ubuntu Fiesty installation on my desktop. (The instructions I was following didn’t mention the gettext package as a requirement. I may email the author.) And after some file format confusion, I started playing around and going through the HV manual.

As I began to learn about and understand the interface, I realized just how powerful of an editor Cinelerra is.

I’m really looking forward to what they call “two-window editing.” I’ve never done editing like that before (except in the backwards implementation that is iMovie HD). It’ll be an adjustment from the straight-up timeline NLE I’ve been using (Vegas Video). But I was impressed with the two-window editing idea, really impressed with the keyboard shortcuts (especially the numpad-based shuttle controls), and I was also pleasantly surprised at how easy color correction was. I have some reservations about adding transitions (since I’m so accustomed to automatic crossfades when I drag one “edit” to overlap another). But I expect my editing workflow (and my output) to improve dramatically.

While I haven’t done anything “serious” with it yet, I’ve got a project for church that I’ll probably start in a couple of weeks. It’s good enough that I might just install Ubuntu on my MacBook just to play with it on a more powerful machine. I may even convert my desktop’s 300GB SATA drive to EXT3 (which is read/write under XP with the right driver), just so I’ll have room to do proper editing.

Friday, May 04, 2007

To Read: Two DI frameworks

I really need to make time to read about these frameworks:

Spring.net
The Castle project

Three-Girl Circus

It looks like my sweet wife has finally written her first blog post! While I'm no big-time blogger, it's cool to see her get started. I'm really looking forward to reading her blog, even though I live in the circus!

Anyway, check out my link to the Three-Girl Circus at right to see what she has to say.

Domain-Driven Design

I finally bought Domain-Driven Design, and I got it yesterday. I'm still just in the first chapter, but it really is a fascinating book. Evans isn't giving a lecture on design; he's telling stories from his experience, and letting the stories educate the reader. And he's such a good storyteller that not only am I learning quickly, but I actually hate to put it down! I expected to learn and be interested, but I never thought a book on software could be this engaging.

As you may have seen from the flurry of posts I've been submitting recently, the topic of better software design has been stirring in my head for a few months now. I'll elaborate on that in another post. It is sufficient for now to say that my purchase of Domain-Driven Design was exceedingly well-timed. Despite my recent lack of faithfulness to God, He seems to be heaping grace upon me anyway - educating me and helping me in my career despite myself.

God never ceases to amaze me.

Thursday, May 03, 2007

Technique Digestion

Try the following policies on for size:
  • GAC - Only interfaces and the DI container engine ever get put in the GAC
  • Interfaces - All application- or layer-boundary interfaces should go into the GAC. Application interfaces may share the application's namespace, but the application's interfaces must reside in a separate assembly. The interface assembly(ies) must go in the GAC; the implementation assembly(ies) must NOT go in the GAC.
  • DI Container - Goes into the GAC, and has machine-level config info telling it which class versions implement which interface versions. Should support interface version redirection, preferably by reading policy files stored in the GAC.
  • Domain interfaces and implementations should follow the same rules as an application's interfaces and implementations.
  • Domain classes and interfaces should NOT share either assemblies or namespaces with application-specific logic. This will allow them to evolve independently, and makes domain object reuse across applications much easier.
  • Both domain objects and application- and infrastructure-specific services must always be instantiated via the DI container, or returned from factories that reside in the domain class's assembly.

Technique Indigestion

Gnawing questions:

Why do we tie domain objects and service interfaces to specific applications, sometimes all in the same assemblies and namespaces?

How can application interoperability survive the evolution of the business' domain knowledge/model? When applications finally get rewritten, they're typically also renamed, and frequently application borders are redrawn. This happens largely due to evolution of business domain knowledge. How can application interoperability survive? One answer: The new app can implement the old app's interfaces w/ proxies - in their own namespaces and assemblies - that consume the new app's interfaces. While the temptation in a DI-enabled environment might be to just have the new app directly implement the old interfaces, that presents a growing burden on successive iterations of software. Better to have independent proxies that can cascade, and that can be dropped as needed.

Think about what best practices would incorporate all of the following in enterprise-level apps:
  • Dependency Injection
  • Interfaces
  • Domain objects
  • Namespace boundaries
  • Application boundaries
  • Assembly boundaries and version numbers
  • What should be in the GAC, and what should not
Think about all this while reading Domain-Driven Design in Florida.

MacBook Hard Drive Upgrade Successful (part 2)

It's kinda funny, the psychological effect that RsyncX has had on me. Maybe funny, maybe not.

I've been planning to write my own sync program (yes, called Sync) in mono for quite some time. And my intent has always been to maintain a mirror of my Lightroom database and pics.

Now, RsyncX can maintain a bootable mirror of my MacBook's whole hard drive.

I don't know what to design anymore.

I still find myself out of habit re-entering the design process for Sync whenever I get a minute or two of spare CPU time. And right about the time I have to return my attention to whatever I'm supposed to be doing, I remember RsyncX, and realize I've just wasted several minutes of downtime.

Maybe I'll pick back up that project build-management design I was working on during my infatuation with RoR.

Or, maybe, I'll just read a good book.

MacBook Hard Drive Upgrade Successful


I must confess I was a little scared about upgrading the hard drive in my MacBook. Apple's computers are things of beauty, not collections of parts lacking a soul.

But thanks in large part to the ease-of-use and shocking functionality of RsyncX, it was easy to make a bootable backup on an external drive's partition, swap the hard drive, and boot to the external backup for the restore.

Kudos, Apple and RsyncX! Now I've got my entire Lightroom library on the internal drive!

Hello 2007 (yawn)

My dear, sweet wife has been reading blogs by Christian moms for several weeks now. She has recently decided that our family should have a blog, too. And her sudden interest in blogging finally reminded me that I have a blog.

So, to remind myself what blogging feels like, here's my first post in eleven months.

Cheers!