Wednesday, June 25, 2008

I went to a Geek Dinner last night at Botanas restaurant in Milwaukee.  This was different than the Nerd Dinners that we used to have.  The Nerd Dinners boiled down to people from the User Group socializing in a more free-form fashion than is practical before/after user group presentations.  The Geek Dinner we did last night was different.  The goal here was to bring together technologists, business people/entrepenuers, and people looking to invest/veture capitalists.  The result was a very cool time, for me at least.  There were several "idea" people there with something they were trying to accomplish.  It was fun (and I hope useful for them) to bring up potential pitfalls in the ventures they are trying; I believe I may now be a tech advisor for some neat things going on in Milwaukee.  I hope this becomes a regular occurance.

Wednesday, June 25, 2008 10:57:32 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [3]  |  Trackback
 Tuesday, June 10, 2008

Larry Clarkin called me out in a question on software development going around the blogosphere.  Here are my answers.

How old were you when you started programming?

I was 11, we were living in a town of 600 people in southern Missouri.  I was very into arcade games and the few games we had for the PC which was an 8086.  My father, a very technical man but very cheap at the time, was loathe to shell out for a new video game.  At some point in a stroke of intuition, I realized those guys must create these games somehow. 

Damon: “Dad, if I can’t have a new game, I’ll make one.  How do those guys do that?”

Dad: “Oh, that’s with programming languages son”

Damon: “Do we have any of that?”

Dad: “Here’s the GW-Basic book that came with the PC”

I did the basic infinite loop printing my name, then learned the power of GOSUB and created a subroutine that would draw a spaceship and a subroutine that would shoot lightning bolts out of said spaceship.   I didn’t understand anything about how game worlds were animated though, the “tick” concept, and though that every on-screen object must be a Thread or something.  I left it alone until years later, living in Waukesha, my Dad brought home a Turbo Pascal compiler for our massively powerful 386. 

What was your first language?

GW-Basic, later Pascal

What was the first real program you wrote?

Well, the spaceship game was vaporware so I can’t say that one, but I did briefly experiment with audio on the 8086.  There was some kind of PlaySound(frequency, duration) function in GW-Basic, and I thought I’d need to write music for my eventual spaceship game.  I painstakingly assigned every letter of the alphabet a frequency inside a subroutine and checked the key stroke to see what letter was pressed.  I would type out various things that are not fit to print here in an attempt to see what words and phrases might make cool game music.  This program worked and met the intended scope.

What languages have you used since you started programming?

GW-Basic, Pascal, C, C++, Dephi, Q-Basic, Java, Javascript, VB.NET, C#

What was your first professional programming gig?

My internship of my Junior year in college ended up lasting through my Senior year, so nearly a year.  I was a C++ developer at Great Lakes Higher Education Corporation.  We were doing code on DB2 and Solaris of the kind JSP developers would soon become familiar with.

If you knew then what you know now, would have started programming?

Absoultely.  There’s few other things I could picture myself doing.  That sounds like a good blog post “What would you do if you couldn’t create software?”

If there is one thing you learned along the way that you would tell new developers, what would it be?

I would tell them to take an interpersonal communication class, or to spend some time as a real professional consultant.  Many early times in my career I got in trouble, or nearly got in trouble, by being cocky or not recognizing when situations were politically charged.  Even if you just want to write code, you must be aware of these things.

What’s the most fun you’ve ever had programming?

There are lots of small things along the way where things were fun for 6 months or so, but when I think about times I was most looking forward to going to work, it was actually (and I can’t believe I’m saying this) a project I did at Assurant health.  They forced me to use VB.Net which I hate, they gave us slow computers with mandatory virus scanning, and the schedule required heroics and a lot of cleaning up bad offshore code.  However, I had some excellent people to work with that I still stay in contact with years later.  I am now a client of The Clarkinator.  DeMilde, Terski, VanDyke, and others: it was a good time.

Who am I calling out?

Aaron Staves

David Snopek

Dan Vanderboom

Matt Terski

Tuesday, June 10, 2008 10:21:17 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Monday, April 07, 2008

Deep Thoughts from Deeper in .NET 2008

I had a great time at Deeper in .NET 2008 this Saturday, but was it educational? Read on!

Geo 2008

I work with some Geocoding technology on the side but I had not heard of some of the cool Geocode support built in to SQL Server 2008.  There are about 70 functions for things like radius and intersection built right in.  I’ve never wanted to be inescapably locked in to the Microsoft platform so badly before…

Get a Twitter Account

While I can claim to be an earlier than early adopter of the whole blogging thing, I just now got my twitter account.

https://twitter.com/damonpayne

Implement Unisex Compilers

This seemed incredibly funny on Saturday.  If I hear “So, we say ‘Mr. Compiler’ …“ one more time I’m going to crack.   Someone who shall remain nameless casually leaned over to me and says “Just so you know, Damon, the compiler is Male”.  I had to leave the room to avoid being disruptive…

LINQ to Link

You’ll either think this is hilarious, or not…

 

            var updownupdownleftrightleftrightbabaselectstart =

                from rupees in Hyrule

                      select rupees;

            foreach (var rupee in updownupdownleftrightleftrightbabaselectstart)

            {

                //...

            }

It seemed funny on Saturday.

You talking to me?

On some of the LINQ demos shown during the day, the following was present in the database code:

        /**

         * This code was generated by a tool.

         **/

Personally, I don’t like the framework mocking me.

Click Once

Late at night, as the drink-tickets flowed, I got into a discussion about ClickOnce and limited user accounts, as well as what is and is not possible to do with ClickOnce.  I can see that I’m going to have to revisit this topic.

 

Monday, April 07, 2008 9:42:08 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Friday, April 04, 2008

I went to my first Nerd Lunch in a long time today.   It was good to see some of the Milwaukee peoples from the user group and introcude Mr. Vanderboom to some new people.  Some nerd celebrities are in town too, for Deeper in .NET tomorrow.  I can now say I've met Richard Campbell of .NET Rocks fame.

I'll be at Deeper in .NET tomorrow, unless my wife goes into labor!

Friday, April 04, 2008 2:55:35 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Monday, February 11, 2008

Starting in my department today is Dan Vanderboom, programmer and software architect extraordinaire.  You can check out Dan's blog here: http://dvanderboom.wordpress.com/

Dan will be rocking the CF and WPF world with me at CarSpot, but I'm still hiring!

Monday, February 11, 2008 11:12:48 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Monday, January 28, 2008

CarSpot has just expanded onto the 5th floor of the building above the Ale House and behold, I get an new office.  I think this is one of the nicer ones; I think I managed to get this one because no one else was willing to sit next door to the President.

I feel like I need to put some UML diagrams up in order to make it feel cozy.  We got this space from a creative company who was up here previously.  We threw out all the iMacs but kept the general decor.  There's an Agry Coal Miner's Bowling Night theme going on everwhere but I kinda like it.

I used to play billiards a lot.  One of my uncles was a pool hustler, but that's a story for another day.  I think I'll be able to get back into practice.

We also have a full kitchen.  I'm still hiring too....

Monday, January 28, 2008 10:47:05 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Wednesday, December 26, 2007

http://thirstydeveloper.com/2007/12/23/Episode6ProjectEuler.aspx

My podcast regarding Project Euler is up. Go check it out.

Wednesday, December 26, 2007 10:10:27 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, December 11, 2007

I shall be attending the Wisconsin .NET User's group holiday bash tomorrow night, after I attend my four year old's holiday play at her daycare.  I'll be there late, but I will have at least one 'grok-talk' style quick presentation and perhaps two if I get some time tomorrow.  I hope to see some famliar faces there.  I've been out of the UG loop for quite a while but my wife will soon be working days so I can rejoin the world of user group goodness.

Tuesday, December 11, 2007 12:11:40 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Sunday, October 21, 2007

I'm sitting at my kitchen table tonight burning about a dozen podcasts for my commute.  For a while I stuck to Dot Net Rocks but I've been throwing in the occasional Hanselminutes and Audioholics into the mix as well.  Tonight is the first time in a while I donn't truly have to do anything right now.  I still can't make any public announcements on the work situation but suffice to say my typical day is go to work --> pick up daughter --> put kiddo to bed at 8pm --> work till 12pm; throw in some required travel and marathon meetings and I'm more than a little tired.  I have two solid, relevant articles I need to complete and just haven't had the time.  In the next two weeks I'll be getting our new WPF based product into a demoable state and preparing for a talk in front of 600 people in Atlanta.

Tonight shall be spent catching up on Netflix night with my friend M. Chateauneuf du Pape and little else. 

Some people I know personally got an invitation to see Bram Stoker's Dracula on BD this weekend as one of my two Halloween movie nights this month.  I would encourage Milwaukee area nerds to try to make this one, in addition to the screening of one of my favorite films someone has promised to bring over a Halo edition 360 for some 106" front projection large and loud H3 action. 

Sunday, October 21, 2007 7:31:16 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Wednesday, October 03, 2007

I need to hire some people into my department at CarSpot.com, I cannot share very many details right now but I'm hoping to get clearance to make some kind of announcement before Q1 2008.  I am looking for the following full time positions:

  • An entry level person, hiring from now to December.  UW-Whitewater, UW-Madison, MSOE, UW-Milwaukee December grads with .Net classroom experience are encouraged to apply.  This is a good chance to start your career doing real work.  May 2008 graduates, save my address.
  • An Electrical Engineer:  I can't share solid requirements on this position yet but will open dialogue with interested parties.
  • A very solid mobile/compact framework person, or an extremely solid .NET developer who can demonstrate ability to very quickly become a mobile superstar.  This position is unique in that it offers a combination of maintenance of current products, creation of new products, and will involve some open-ended R&D.
  • An all-around .NET person.  Windows Forms, Web Forms, Web Services, SQL skills, knowledge of UML, design patterns, likes NUnit and NCover, possibly interested in doing high level design.

It would be fantastic if one of these people had strong Win32/COM/C++ skills.  I will also consider local consultants for some specific work.

As I mentioned before,  I can't make any public announcement right now, but I can share the details in person with serious candidates.  I don't think I can over-state how f()*&*!ng cool CarSpot is right now.  We are taking over a very large space in our current building above the Milwaukee Ale House with a pool table and other niceties.  We've got .NET/Windows people, Linux people, MAC people, and there are some very cool things happening right now which should be obvious if I'm considering bringing four people on board.  There aren't many places in Milwaukee where beer-infested programmer meetings are expensable, you can get a wireless data card and work in the park, and the department head (moi) will feed you ribs and sweet corn during the summer.  Flexibility is critical here, once trust is established and it's shown that you get your work done, you are given a long leash.  I work from home sometimes, I work from the bar downstairs sometimes, some people work from the park, etc. 

We will be working with recruiters very soon, but for now forward resumes to damon.payne@carspot.com .

Wednesday, October 03, 2007 9:08:05 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Saturday, September 01, 2007

I participated in the ritual known as Podcast Recordification on Friday for the first time.  Recording in the Milwaukee Ale House I referred to this as a BeerCast, though no beer was consumed until after our discussion was done.  Rumour has it this podcast shall find its way to Channel 9, and we hope to do more discussions.  You can see some pictures of the gear poor Mr. Clarkin has to lug around here, Microsoft is taking this podcast thing seriously and outfitting the evangelists with nice equipment.

 

 

Saturday, September 01, 2007 10:56:02 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, July 26, 2007

It was suggested that virtualization with Virtual PC might be a solution to the problem of future hardware crashes (and re-crashes) making me unproductive for days on end.  First, the last I checked, Virtual PC does not support USB ports for performance reasons.  PDA and Digital Camera development is a lot of my time and requires those newfangled USB ports.  In addition to this drawback I like my programs to be responsive.  VS2005 is now very responsive with my new machines but Outlook 2007 (while I like the program and its functionality) is barely tolerable and can still hang the entire system for several seconds during a send/receive.This is after following the performance improving ideas from Scott Hanselman and others.  I still can't fathom how anyone actually likes web based email. 

Grant's idea of ghosting your machine once in a while got me thinking.  A fantastic backup scenario for hardware failure would be as follows: when you want to take a backup you use a tool (I'm thinking a new improved Virtual PC) and just tell it "build a virtual machine image out of my current configuration".  This would make one giant virtual drive and image out of all of your programs and files.  This file could then be backed up and in case of a catastrophic hardware failure you copy this image out of your backup and continue from your last backup from inside virtual PC on whatever hardware is available.  Equally swell would be the option (you would certainly not always want to depending on the age of your last backup) to take your work from the virtual machine image and installify it onto your real physical hardware after repairs were done.  Yeah, that would be great.

This may already exist but I don't think so.

Thursday, July 26, 2007 12:13:17 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [3]  |  Trackback
 Monday, July 02, 2007
MVP

My day was off to a late start today as my wife and I were both standing up in a wedding last night.  Nonetheless, when I finally waded through my email I was pleased to see that I have officially been awarded the 2007 Microsoft MVP award in the category "Visual Developer - Solutions Architect."  Thanks go out to my nominator (you know who you are) and I hope to keep living up to this title over the next year.

Monday, July 02, 2007 10:28:04 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Sunday, May 27, 2007

A respectable fellow recently asked me where I was on the Unit Testing spectrum: Skeptic <----> Zealot, or in between.  Fair question.

I am right-leaning towards zealot though far from what I'd call a unit testing zealot.  For one thing, I'm not into Test-first development.  I've heard the arguments enough times but its not a mental barrier I care to break down.  After years of struggling with laziness and mulling over the value of different approaches, this is a summary of my Unit Testing habits today:

  1. I use NUnit, TestDriven.Net, and NCover.
  2. I don't like unit testing strictly GUI aspects: Web Forms or Windows Forms, UserControl, etc.  I know that there ARE ways to do this but it doesn't resonate with me right now.  I somewhat dogmaticaly use Model-View-Presenter in ASP.Net and the desktop to minimize what is in the code behinds anyway.  I use NUnit.Mocks to work with Mock instances of my View interfaces.
  3. I do a lot of up front design before I write anything non-trivial but I do not create models at the Implementation level.  Writing the code is the first validation of my design, writing the unit tests is the second validation of my design.  Sorry for bludgeoning the deceased equine but if I can't get at method to test it and it also doesn't make sense to test said method through some other calling method, then there's likely a smell in the design.  I will typically revisit my preferred tool (currently StarUML) to see where the smell is, reimpliment, and take another stab at creating the appropriate tests.
  4. Unit tests are the most appropriate artifact you can leave behind for a project.  It seems to me that I run across very few people who do what I would call Real modeling and fewer who make an effort to update models as a system evolves.  I don't update models as a system evolves, but I do update unit tests.  The tests are only valuable as an artifact if they pass and if they can be shown to actually exercise the system.  See #5 regarding this.
  5. Code Coverage is the piece that finally made Unit Testing really click for me.  Forming the habit of using NCover directly from Visual Studio via TestDriven is the single largest improvement to the quality of my code, ever.  I find that I have difficulty inciting the same excitement about Coverage in other people, maybe because it forces one to admit they need to write more unit tests.  So you've tested everything you thought of on the first iteration and NCover shows only 80% coverage of your business logic assembly.  Sometimes you'll see you only tested the "Main success" flow through the code and you need to test the alternates and exceptions.  Sometimes you will see NCover highlighting code that is absolutely never going to be called from your application.  Many times I have caught "premature abstracting" using Ncover, classes or methods I assumed I'd need but nevered ended up needing.  This may not be a defect but I'm of the opinion that if I ever need it I'll recover it from version control so I delete unused methods/properties/classes to make my assembly smaller and compile faster.  Code Coverage is also a good aspect of a Code Review, if you're into those.
  6. I shoot for > 95% code coverage.
  7. While we work on stabalizing a release, testers sometimes find bugs!   As I look at each bug, I think, could this have been caught before acceptance testing if there'd been a specific unit test?  If I can think of a unit test for the bug situation, I add one.
  8. This one should be very obvious: I feel much better making huge changes to important code if there is a unit test suite.

 

Sunday, May 27, 2007 10:04:05 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Thursday, May 03, 2007

I'm sure you are often sitting at your new Vista desktop wondering "I wish I knew what the standard options and factory colors of a 2005 BMW M3 were and all I have is this VIN of my friend's M3."  Well, you may be in luck.  I have created a VINTool as a Vista desktop gadget, shown below.  Right now I'm just framing something in while a proper interface is created.  I have to make sure I'm cleared to release this, as its not 100% certain if there will be a licensing issue with some of our data.  In addition we may create some type of Vehicle notification so that you can say "I'm searching for a Triumph TR6 within 100 miles" and you'll see a message if such a thing is added to our systems.  Useful?  Useless but cool?  Neither useful or cool?  You decide.

Thursday, May 03, 2007 3:00:21 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Wednesday, May 02, 2007

Thanks to Mr. Heidenreich I lost most of my free time this afternoon.

I had posted about the programming problems on Project Euler and Mr. Gerry Heidenreich got addicted right away and we had been talking back and forth about some of our solutions.  He pings me to tell me that he is having dreams (nightmares?) about Problem 10 in the set.  It was taking too long to run, way too long since the problems should complete in less than one minute.  We both have almost the same computer oddly enough, a 2.13ghz Core 2 Duo.  If you’re too lazy to follow the link, the problem is to add the prime numbers that are less than 1 million.

I started with his algorithm and got the run time down to about 80 seconds with some plain code optimizations and expanding upon the Sieve he was using for eliminating factors of primes.  To be fair this took a while.  To be even more fair, there are probably Math-only optimizations that would eliminate the need for what you are about to see, but there is a larger lesson here.

I’ve been saying to anyone who’ll listen that chip-makers have been letting us down for about 3 years.  We can no longer expect significantly faster and faster sequential processors to speed up the more complex apps we are using and writing.  The Consolation Prize is ubiquitous multi-core chips in laptops, desktops, and servers.   I have engaged in various debates about the magnitude of the benefit of this approach, especially for Game Programming or other tasks where the solutions (at least the currently practiced and taught ones) are fundamentally sequential in nature.  I had been meaning to look into the cost of context switching, memory copying and synchronization primitives for problems that don’t immediately appear to lend themselves to SMP.  My mediocre math skills gave me a test problem. 

My first attempt was lightning fast but gave the wrong results due to an obvious synchronization issue.  I decided to give this problem at least a fraction of the thought it deserves and came up with some initial goals.  I wanted to make a class that can encapsulate a chunk of the work.  Some sort of controller class should organize the chunks of work, and be able to handle work broken up into arbitrary #s of slices.  The controller should be able to make sure all work is done before calculating the final solution.  To solve my obviously sloppy threading issues, tasks running concurrently should be able to safely share some sort of read/write context that may be necessary to manage dependencies between chunks of work or at least the final results.

To skip to the punchline, the multithreaded method using the pattern I came up with is almost twice as fast as the single threaded method, gets the correct result, and has given me food for thought on future problems requiring significant computing.  Almost twice as fast on 2 procs as on 1 is about as good as you can get so at least I got that part right.

Now, to rewind to the solution. The first thing that jogged my memory was watching the single-threaded method run.

CPU usage would not peg the CPU even when setting the process to Highest priority and turning off everything else that was running.  I know very little about the details of the Core 2 Duo but unlike hyperthreading its two real processors, so somehow either Windows, the BIOS, or Intel are spreading the load across two processors while half of my overall horsepower goes wasted.

Here is a model of the first iteration of my work-splitting solution:

 

WorkUnit made the most sense for the Command class name, not to be confused with other Unit-Of-Work patterns.

Obviously one goal is to make something I can keep refining as I come across new problems and have a .NET pattern/framework for speeding up execution of large tasks in the future.  The problem I’m solving here is probably one of the simplest examples of concurrent tasks with data interdependencies both constantly during execution was well as result assembly when all WorkUnits are done.  In this case the shared context is that all threads of execution will be reading and writing to an array of flags.  These flags mark numbers later on in processing as “Not possibly a prime candidate” when they are factors of already processed numbers.  The process in action looks something like this:

Now I ran with two WorkUnits, each sharing part of the range of possible prime #s and calculating their own sub-sums to be contributed to the final tally when all analysis was done.  I was happy to see a different CPU load…

… as well as obtaining the correct answer at the end and in far less time than single threaded solution.  I think there is still room for improvement, quite a bit in fact.  As soon as the one work unit is done the CPU load goes back down to 50% while the WorkUnit with the larger #s completes.

I have some other initial thoughts on this framework that I’ll get to later tonight, time permitting.

Wednesday, May 02, 2007 7:16:24 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Tuesday, May 01, 2007

Someone asked me the following today (paraphrased)

"If I have versions 1.0.0.0 and 2.2.2.2 of TestAsssebly both in the gac, and a program TestApp.exe that needs TestAssembly, can I instantiate classes from each assembly inside the same app domain.  Can I use both versions of the Foo class in my program?"

So I sat down to do a simple experiment.  Two versions of Test Assembly are created in the GAC and a console program is run.  Foo.ToString() returns the full name of the assembly that the Foo instance comes from.

Program:

using System;

using System.Collections.Generic;

using System.Text;

using System.Reflection;

using TestAssembly;

 

namespace TestApp

{

    class Program

    {

        static void Main(string[] args)

        {

            try

            {

                Console.WriteLine("Loading Foo...");

                Assembly foo1 =

                AppDomain.CurrentDomain.Load("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=612615ef384d0cd0, processorArchitecture=MSIL");

 

                Foo f = new TestAssembly.Foo();

                Console.WriteLine("Typeof Foo: " + f.ToString());

 

                object f2 = foo1.CreateInstance("TestAssembly.Foo");

                Console.WriteLine("Typeof f2: " + f2.ToString());

 

                Foo f3 = (Foo)foo1.CreateInstance("TestAssembly.Foo");

                Console.WriteLine("Typeof f3: " + f3.ToString());

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex);

            }

        }

    }

}

Output:

C:\Projects\StrongNameTest\TestApp\bin\Debug>TestApp.exe
Loading Foo...
Typeof Foo: TestAssembly.Foo TestAssembly, Version=2.2.2.2, Culture=neutral, Pub
licKeyToken=612615ef384d0cd0
Typeof f2: TestAssembly.Foo TestAssembly, Version=1.0.0.0, Culture=neutral, Publ
icKeyToken=612615ef384d0cd0
System.InvalidCastException: Unable to cast object of type 'TestAssembly.Foo' to
 type 'TestAssembly.Foo'.
   at TestApp.Program.Main(String[] args) in c:\Projects\StrongNameTest\TestApp\
Program.cs:line 25

The part in bold is entertaining, at least.  I have a strong suspician that if I interact with f3 as an Object only, using Reflection to Invoke properties and methods then I could in fact use all the version 1.0.0.0 Foo functionality (which is vast and important) within the same app domain.

I also hit a bit of a snag when testing this application.  I was previously unaware that Visual Studio does not let you add references to assemblies added to the GAC via gacutil on the local machine.  See: http://msdn2.microsoft.com/en-us/library/wkze6zky(VS.80).aspx

 

Tuesday, May 01, 2007 1:29:02 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Thursday, April 12, 2007

I am hiring into my department @ CarSpot.com in downtown Milwaukee. 

Right now I am hoping for one Summer intern and one full time person based on the work that is going on.  We are doing cool stuff and growing.  As we staff up we are hoping to have some Google-eque policies such as spending part of your time on fun research projects.  I'm setting up a Quake server tomorrow as well.  We are not a .com company, however.

Do you...

  • Have .NET skills in C#
  • Understand design patterns
  • Understand UML
  • Enjoy drinking beer (we are upstairs from the Milwaukee Ale House)
  • Like an ultra-flexible work schedule
  • Like a small company environment
  • Multi-task well (we all wear many hats in a small company)
  • Like working with NUnit, CruiseControl, NCover
  • Have interest in developing cutting edge stuff that is far ahead of its time?

Ok, I had to throw the last one in.  There is room for help in Windows Forms, Compact Framework, ASP.net web services, ASP.net web forms, some win32/C++  dev, and probably some things I'm forgetting.  Forward your interest to damon.payne@carspot.com

 

Thursday, April 12, 2007 3:53:10 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Wednesday, November 15, 2006

I spent a bit of time yesterday hacking Codus to work on .NET 2.0 and generate generic classes and collections for data access.  Talking to Sean from Adapdev a bit it looks like I'm going to try to clean this up and contribute the changes so they're available in future Codus and Adapdev.Net releases.  So, if you have been looking for .Net 2 support in these excellent tools, it seems its on the way.

Wednesday, November 15, 2006 11:11:13 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Sunday, August 13, 2006

I am done with my stint in the Land of Beer, and with being a consultant. 

Long story short, I am going to start building the .Net development department at a product-oriented technology company in Milwaukee.  Having been a consultant for my entire career this is a new direction for me to go in.  I have no complaints about SafeNet at all, and I'd still highly recommend talking to them if you want to do consulting in SE Wisconsin.

The details of my new gig will leak out over the coming weeks as titles are finalized and things take more form.  In the meantime, I need to start writing about technology again.

Sunday, August 13, 2006 7:50:58 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, July 25, 2006

I am doing a new gig at the Land of Beer, Miller brewing.  Sean McCormack got me involved in an agile project here on a short time frame so I've not had a ton of time to blog lately.  There's a lot to talk about as this project slows down though.

I cannot say that I am a test driven development expert by any means.  However, upon arriving on this project and trying to retro-implement unit tests for a bunch of code that had no tests before I have come to a new understanding of the value of unit tests for regression testing, and for a specific aspect of the TDD paradigm.  Upon arriving and going over the projet I'd seen that the team lead was printing out class diagrams, going through the unit test packages, and checking off Method names that had a test.  I had kept meaning to look at code coverage tools in the past and the sheer amount of tests odewe needed made me look a little more seriously.  As it turns out they were already using TestDriven as part of the developer setup.  TestDriven is by itself a great tool and will have a place in my toolbox henceforth.  TestDriven installs an interesting right-click menu in VS2005 that gives you various options for running tests at the class/method/project/solution level.   More interesting to me at the time was the "Test With --> Coverage" option.  If you don't have Team System it tells you to go install NCover which I had not used before.  NCover is actually a very solid code coverage tool.  You can probably see where this is going and certainly TDD experts will file this under the "duh" department.  TestDriven + NCover + NUnit = tells you how much of your code is covered by unit tests.  NCover is smart enough to show you if, for example, you covered all the various "if()" branches inside a method and such.  This is Very handy and not just for unit tests.

We found, in general, that the application had "thong-level coverage" from unit tests; as any good christian will tell you the thong leaves too much uncovered!  We strove to get it to "Burqa-level" coverage and made a lot of progress before the timeline demanded we start on new development.

Upcoming rants:

"About Casting"

"Funny Stuff I've heard at work recently"

"Indirect paths to success"

Looks like I have some invalid HTML in here somewhere, the visual styles on the links are hozed.

Tuesday, July 25, 2006 9:32:51 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Tuesday, May 16, 2006
Tomorrow night I will be speaking at the Fox Valley .NET User's group, giving a presentation of the Compact Framework version 2.  If you're in the Appleton area, stop by and say hi.
Tuesday, May 16, 2006 1:53:47 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [3]  |  Trackback
 Tuesday, March 28, 2006

If you are in the Milwaukee area you need to think about attending Deeper in .NET 2006 on April 22nd this month.  You can see the information at http://www.wi-ineta.org/DesktopDefault.aspx?tabid=104

All of the speakers are good, but I should call out two of them for special consideration.  Scott Hanselman is someone I admire for his technical expertise, attitude, and sense of humor.  I've subscribed to his blog for over a year now, and I got a chance to see him speak about Software Factories at TechEd last year.  He's a great speaker.

Jason Beres is also a great speaker and a very technical and fun guy.  Also, I can attest that he is a formidable drinker of beer and has excellent taste in steaks. 

If you are in the area, you must come to Deeper in .NET 2006.

Tuesday, March 28, 2006 10:02:06