Tuesday, March 31, 2009

15 Helpful Tips from Scott Bellware's Behavior Driven Class

On March 24th, last Tuesday, I attended Scott Bellware's helpful seminar on "Test-Driven Development and Behavior-Driven Development". A few of my take-aways:

  1. One bug takes a unit of time to fix, but with multiple bugs the time goes up exponentially since the bugs can interact. Moral: Code in steps and only introduce one bug at a time.
  2. Ask if the test you are about to write is a valuable test.
  3. Code-DB impendence mismatch example: If orders have links to customer in the db, in code the customer has links to the orders.
  4. Using "static" methods between layers is bad, it's like welding the objects together.
  5. Inheritance is strong coupling, to be used as a last resort.
  6. Scott and his team removed an entire layer of testing when they realized it provided less value than it took to maintain.
  7. Databases are places for dead objects, not logic.
  8. Someone at the meeting said Microsoft doesn't really do domain applications like we do, so they cannot really offer much advice on how to code.
  9. "Reuse" is not a good goal.
  10. You can overwrite tests, simple things are tested in more complicated tests.
  11. Don't use prepopulated databases with test data. Start with an empty database, and end with an empty database.
  12. When Scott asked the participants "Who does unit testing?" 80% of the 25 people raised their hands. "Who uses MSTest?", one hand.
  13. Regression tests are a side effect of Test Driven Development, not the primary goal.
  14. Doing traditional OO analysis (nouns, verbs,...) creates more objects than needed.
  15. Don't directly expose an object's collections; use helper functions on the object. (Use Customer.Add(obj) instead of do Customer.list.add(obj))

Monday, March 09, 2009

Sunlight turns carbon dioxide to methane

sunlight
Craig A. Grimes and friends at Penn State have produced 20 times the previous amounts of methane from sunlight and water with the aid of a catalyst of titanium dioxide nanotubes. This is important for many reasons:
1. The solar energy is storable as methane. The methane can be compressed into tanks and burned late at night when the sun does not shine.
2. Methane can be processed to produce liquid fuels for our cars so we don't need to import as much foreign oil.
3. To create energy this way just requires panels of the catalyst and water facing the sun. Unlike with many biomass energy crops which need arable land, water, warm temperatures, plowing, fertilizing, pesticides, and post-processing, this method is simple and direct.
4. The resulting fuel is carbon neutral.

The story is illustrative of how early on this science is. To get maximum yields they are trying different combinations of catalysts like copper and platinum. I look forward to the day when researchers don't have to randomly try different materials to achieve maximum efficiency, but that we will have a sufficiently advanced knowledge of materials we can calculate the exact proportions of elements to create methane from sunlight.

Our governments should be dumping money from helicopters on projects like this.

Friday, February 20, 2009

Yesterday's Model View Controller Training in Austin

MVC
Yesterday Eric Hexter and Jimmy Bogard from Headspring gave an excellent free four hour overview class on the ModelViewController framework from Microsoft(see previous post). The framework is currently available in preview form, but the 1.0 version is rumored to be out this month. The MVC framework is Microsoft's answer to Ruby on Rails. (Why did Microsoft call it the MVC framework, the same name as it's concept? I guess to be consistent with their bad naming of other technologies. I guess "C# on Rails" would have been too obvious. Why not name F# "The Functional Language"?)
Anyway, I'm very excited about the new framework.
MVC

Tuesday, February 17, 2009

NUnit + Extension Methods + NBehave.Spec.NUnit = Smile

I used a tiny bit of NBehave today and it made me smile. I used the extension methods in NBehave.Spec.NUnit so my NUnit tests can be a little more Englishy.
Instead of

Assert.IsTrue(sum.Equals(13));

I can write

sum.ShouldEqual(13);

which just gives me a warm, almost Rubyisque feeling, deep inside.

Wednesday, February 11, 2009

Windows is like that

Right before our last scheduled upgrade, one of the staging servers in the UK started acting badly. It was confused between the US date format, MM/DD/YYYY and the UK format, DD/MM/YYYY. All during testing on both sides of the Atlantic everything was fine. The server's identical twin in the farm had no such confusion. We double checked the windows regional settings, the config files, the C# code, and found no problems.
Out of desperation we restarted the web server, IIS. The sun broke through the clouds, birds were singing, and all was right with the world. The box was no longer confused about transatlantic dates. We did nothing but restart IIS. It was very scary.
After additional testing we did the upgrade and everything is fine. Which reminds me of a Haiku:

Yesterday it worked.
Today it is not working.
Windows is like that.

Monday, February 09, 2009

Austin .Net User's Group Meeting

2009/2009-02-09-DotNetUsersGroup.jpg
Matt Hinze presented a good introduction to "Practical Dependency Injection" to about 100 people at the Austin .Net Users group.
2009/2009-02-09-DotNetUsersGroupMattHinze.jpg
Two important announcements:
1. Headspring Systems will give a free class on the new Model View Controller on Thursday Feb 19th from 1-4:30.
2. Austin Code Camp is Saturday May 30th.
Lots of pizza consumed:
2009/2009-02-09-DotNetUsersGroupPizza.jpg

Wednesday, February 04, 2009

Great Video on Finding our Energy Future

I was very impressed with the enthusiasm of Bill Gross about energy and his careful research to design something for our future. Maybe he could start work on our 404 flying cars?