mike hodnick

Point your browser to www.hodnick.com for Mike's latest content.

Notice:

You are viewing Mike's old, archived site. For new content, navigate to hodnick.com

Latest From Twitter...

The Blog

June 2005 Entries

Last night I made more progress on drawing Minnesota geography.  I spiffed up the UI a bit to allow the user to pick the cities they want to include and also added some zoom/panning controls.  Right now everything is just with text boxes - ultimately I'd like to use sliders.  Below is a screenshot with some of the metro cities along with some outstate cities:

Next I really want to start getting the zoom and panning functions to work. IW Kid gave me a few suggestions about how to tackle it. His suggestion was to draw the graphics on a "canvas" and then use a "camera" to view the canvas at any point. Avalon DOES have a Camera class that is used in a ViewPort3D object. So what does this mean? This means I have to go 3D.  My app will need to go to “11“. Right now I'm just drawing everything as 2D.

This idea is turning out to work pretty well so far. I haven't parsed and hooked up any of the census data yet, but I think that will be icing on the cake compared to drawing all of the city, state, and zip code boundaries on the screen.

posted @ Thursday, June 30, 2005 7:57 AM | Feedback (0) |

I'm not into Halo 2 as much as I used to be, but I've had my eye on the new Relic map since I heard about it and saw glimpses of it.  There's a new article on it over at Bungie.net that describes it in detail.  Like Zanzibar, Relic looks and feels like no other map.  I think that's because of its asymmetry and its “natural” appearance and environment.  Teams will have to put a lot of brain power into CTF and assault, and the map has many unique features that will keep things interesting.  The article does a good job of explaining the map along with some strategic details.

There's also a video that highlights some gameplay and a few of the neat features of the map (available on a halo.bungie.org video page: http://nikon.bungie.org/misc/maptacularvids.html).  The video page also has videos of some of the other newer maps. 

While I'm eager to see and play the new map, I'm skeptical I'll actually enjoy it as much as I hope.  I just don't meet up with friends online or in person to play Halo 2 as much as I used to. 

 

 

 

 

 

 

posted @ Wednesday, June 29, 2005 4:23 PM | Feedback (0) |

http://www.tsn.ca/columnists/bob_mckenzie.asp

This column gives just a wee little bit of insight as how the 2005 NHL draft might be conducted in the wake of a cancelled season. The main point of the article was to describe really how random the draft could end up this year since it will be a 100% lottery. The International Scouting Service (ISS) conducted a mock draft where each team took part in the lottery. Essentially, each team got at least one ping pong ball, earned additional ping pong balls for consecutive years they weren't in the playoffs, and lost ping pong balls for each year that they received a 1st overall pick.

In the mock draft, four teams (out of 30) had the largest number of balls (three). In the end, a team with only one ball picked first, and the three teams with four balls picked 2nd, 13th, 14th and 20th. Two "high powered" teams in recent years ended up with top 10 picks.

I don't know how final or concrete the ISS's lottery system is compared to the real draft that will take place, but I hope that it is not as random as the article describes.  Teams that have done poorly for many consecutive seasons such as Florida, Buffalo and Pittsburgh should be guaranteed a top 10 pick. Either that or increase the potential to get more balls based on recent performance. With only 30 teams, it's no wonder their mock draft ended up looking so screwy and unfair. If they really want to give some weight to the poorer performing teams, they should be giving them 5-8 balls.

This sounds like a question from a past Statistics exam: "There are 30 different colors of balls. In a bag, there are 7 green balls, 7 red balls, 7 yellow balls, 5 white balls, 5 orange balls, and 1 of every other color. What is the probability that a green ball will be chosen from the bag?"

Hopefully somebody at the ISS is asking questions like that.  What percent chance do they want a historically poor performing team to get the #1 pick?  To get a top 10 pick?  What percent chance do they want an excellent performing team to get a high pick?  Those questions can be easily answered through common probability computations (although I don't have any references available to check it myself).  Maybe they've answered those questions and have made their decisions about the number of ping pong balls each team gets.  If so, then I think they've made the wrong decision because teams that don't deserve a high pick will get one.

Forget using CGI+.  If I go ahead with my Demographics idea I'm going to use Avalon.  I managed to spit this out last night in an Avalon app:

The XAML for the page is very straightforward. There's a button, a text block to show some info, and a Canvas that holds the geometry:

<Page x:Class="Demographics.Sandbox2.Page1"
    xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
    xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"
  Loaded="PageLoaded"
    >
 <StackPanel>
  <StackPanel>
   <Button Name="goButton" Click="GoButtonClicked">
    <TextBlock TextContent="Go" />
   </Button>
  </StackPanel>
  <DockPanel VerticalAlignment="Bottom">
   <TextBlock Name="infoTextBlock" />
   <Canvas Name="drawCanvas" />
  </DockPanel>
 </StackPanel>
</Page>

The interesting part of the "code behind" is looping through the X,Y coordinate data (in a DataSet) and drawing the geometry:

 //Get a dataset of the state's X/Y coorindates.
 //The dataset has two columns we're interested in
 //that hold the X/Y coorindate data: ScaledX and ScaledY.
 DataSet ds = Boundary.GetPointsForBoundary(BoundaryTypes.State, 1, 50, 4900, 2500);

 //clear the canvas
 drawCanvas.Children.Clear();

 // Create a Path element to render the shapes.
 Path myPath = new Path();
 myPath.Stroke = Brushes.CornflowerBlue;
 myPath.StrokeThickness = 1;
 myPath.Fill = Brushes.Goldenrod;

 // Create a PathGeometry to contain a PathFigure.
 PathGeometry myPathGeometry = new PathGeometry();

 // Create a PathFigure to describe the shape.
 PathFigure myPathFigure = new PathFigure();

 //draw the starting point in the figure
 int startX = Convert.ToInt32(ds.Tables[0].Rows[0]["ScaledX"]);
 int startY = Convert.ToInt32(ds.Tables[0].Rows[0]["ScaledY"]);
 myPathFigure.StartAt(new System.Windows.Point(startX, startY));

 //loop through X/Y coordinates and add lines to the figure
 foreach (DataRow row in ds.Tables[0].Rows)
 {
   myPathFigure.LineTo(
     new System.Windows.Point(
       Convert.ToInt32(row["ScaledX"]), 
       Convert.ToInt32(row["ScaledY"]))
   );
 }

 //close the shape of the figure, and add the figure
 //and geometry objects into the canvas
 myPathFigure.Close();
 myPathGeometry.AddFigure(myPathFigure);
 myPath.Data = myPathGeometry;
 drawCanvas.Children.Add(myPath);

Last night I just took a "proof of concept" approach to see if I could even get this far. Ultimately I'd like to add some features so that the user can zoom and pan around and also allow them to select what types of boundaries they want to see (state, zips, or cities).

posted @ Wednesday, June 29, 2005 8:49 AM | Feedback (1) |

Before spending an hour or more wondering why databinding isn't working on a listbox, check to make sure that there is at least one record in the database.

posted @ Tuesday, June 28, 2005 2:19 PM | Feedback (3) |

The coolest thing I've seen in the last five minutes: http://earth.google.com/

Not sure if I'll ever use this for anything other than wasting time, but I could see this being useful for visualizing a driving route or finding restaurants/businesses in places I'm visiting.  The animation of the maps is very cool, and the “tilt” angles are even better.  The tilt is really what puts the icing on the cake to me.  Even though it's 2D data, the angled visualization makes a huge difference in following a route. 

I'm not nearly as much as a gamer as I used to be, so it's a big deal when I go out and rent or buy a new game :) Anyway, I rented Forza Motorsport this weekend and played it a bit. As far as racing games go, I've been loyal to the last three generations of the Grand Turismo games on PS2, so much of my evaluation of Forza is in comparison or contrast with GT.

Likes:

  • XBox Live integration. Instantaneous leaderboard updates, auto clubs, etc etc etc.
  • Paint and decal customization. This is sweet. When I first started playing I thought for sure that customizing your car's appearance would come at a cost, but it's completely free in the game.
  • Damage. The GT games have no damage visualization whatsoever. Seeing my front hood crumple up for the first time was a joyous sight.
  • Sound effects. I really like the sounds of the engines, crashes, bumps, brakes, and roads. Much more realistic than GT.

Dislikes:

  • The soundtrack. I don't know what it is specifically that bugs me. The classic rock feel? The thin sound of the snare? I don't know. Minor detail.
  • Hrmmmm. I think if I played it more I'd find some more, but otherwise I can't think of any others.

Other characteristics like graphics, the feel of driving, car upgrades, equipment tuning and adjustments, and career mode were on par with GT. The feel of driving was different than GT, but the attention to detail was there (e.g. how the controls reacted to oversteer/understeer, etc).

Overall it has some nicer features than GT, but I'm on the fence about buying it. I could tell after a few hours that I'd get a little bored with it after a while. I haven't played GT for a while for that reason. The XBox Live aspect of the game seems like a lot of fun, but I just don't see myself interacting very with very many other gamers. There's one guy I know who plays Forza a lot. I've just never really been the type to make friends on XBox Live.

This weekend I worked a little bit on my "Demographics" project (codenamed Demographics). At a high level, I want to see what I can do with 1) United States geographic data and 2) year 2000 US census data. Census data is available by state, zip code, city, etc, and the geographic data is available in the same. Add some GDI+ in there and you can connect the dots and see where I'm going with this...

Anyway, in the first iteration I wanted to capture all of the geographic data for the state of Minnesota and get it into a SQL Server database. The data is available as flat ASCII files, and with a little parsing it was very easy to get the data into some SQL tables. The files are split up into "metadata" files and "data" files. The metadata files contain the "ID" values of zip codes and cities, and the data files contain relative latitude and longitude sample points of the zip codes and cities.

An example of a "metadata" file:

1
"27"
"58144"
"St. Vincent"
"58"
"city"
2
"27"
"68224"
"Warroad"
"58"
"city"
3
"27"
"30446"
"Humboldt"
"58"
"city"
...

And an example of St. Vincent's latitude and longitude data. Each x/y point is a "boundary point" around the city. The x/y points are degrees relative to the origin defined as the intersection of the prime meridian and equator.

         1      -0.972276240387044E+02      0.489697772158653E+0 
-0.972163930000000E+02       0.489781780000000E+02
-0.972162220000000E+02       0.489688210000000E+02
-0.972162220000000E+02       0.489688210000000E+02
-0.972159450000000E+02       0.489593250000000E+02
-0.972308592858529E+02       0.489590100136644E+02
-0.972308592858529E+02       0.489590100136644E+02
-0.972308592858529E+02       0.489608912273079E+02
-0.972314603800898E+02       0.489624368972520E+02
-0.972324908278287E+02       0.489638966984927E+02
-0.972375410000000E+02       0.489653410000000E+02
-0.972388820000000E+02       0.489665730000000E+02
-0.972392090000000E+02       0.489686840000000E+02
-0.972380250000000E+02       0.489751430000000E+02
-0.972381661711172E+02       0.489780631362595E+02
-0.972381661711172E+02       0.489780631362595E+02
-0.972163930000000E+02       0.489781780000000E+02
END

And here's a screenshot of the killer parsing app:

One-button, single-click applications are the best.  208,842 individual coordinate points were captured in the process.

The next iteration will involve drawing cities and zip codes on a screen. Should be fun :)

posted @ Monday, June 27, 2005 11:16 AM | Feedback (1) |

My new double-bass pedal arrived on Friday. After the LAN party Friday night, I couldn't wait and opened it up and tried it out (quietly) at 1:00 a.m. Over the weekend I had a few chances to actually play out more and break it in a bit. All I can say is that my left leg is sore today :) Imagine that since you were 13 you've known how to ride a bike, but the only bike you've ever ridden only has a pedal on the right side. Now you get a new bike and it has pedals on both sides. It's not completely foreign to me, but when I attempt to try some fast or more complex licks, my left foot and leg just can't keep up.

Another detail I'm trying to get used to is the pedaling technique with double-bass. I've always played so that the bass drum beater strikes the head and then rebounds off, leaving the head to resonate fully and get a punchier sound. But double bass is a different story. In order to play with both legs, I have to sit closer to the kit, and as a result there is more downward force on the pedals (rather than sitting farther away with my leg stretched out a little bit). This makes it nearly impossible to allow the beaters to rebound off the head and instead are buried into it with each stroke.

There's nothing wrong with burying the beaters. Many, many drummers do it. It's just a weird feel for me because I've never done it. One point of compensation though is that I have to tune my bass drum header lower so that it is looser. If it's too tight, the beater rebounds naturally from the tension in the head, but the weight of my foot tries to bury it and there's actually a little bit of a double-stroke or extra "tap".

I also need to play around with all of the settings, such as the pedal tension and beater angles. I'm used to playing with a lot of tension and more angle so that the beater can really slam into the head for a strong sound. However I don't think that type of setup will work very well for fast, repetitive patterns. Neither my left OR my right foot will be able to keep up.

It'll take some practice and tweaking, but I'm really enjoying it so far.

Take the MIT Weblog Survey

posted @ Friday, June 24, 2005 11:49 AM | Feedback (0) |
It's out to Victoria for the next one. With a little luck we'll be able to play some of the new Halo 2 maps depending on who is bringing an XBox that has XBox Live. Should be a good time.
Directions
Food
Please plan on brining a little cash for ordering out. If you'd like something special to drink, please bring your own beverage.
Helpful Resources
Check out the LAN party page for some links to helpful Halo 2 gameplay resources.
Roster
Click on a person to view their information (if available).
# Name Xbox Controllers TV Halo Copies
1 Mike Hodnick 1 4 1 1
2 Jason Bock 1 1 1 1
3 John Schreifels 1 4 1 1
4 Jason Lambert 1 4 3 1
5 Chad Thieling 1 7 1 1
6 Russ Donahue 1 4 1 1
7 Mike Dahl 0 0 0 0
8 Jason Melquist 0 0 0 0
9 Mike (Chad's brother in law) 0 0 0 0
Total: 6 24 8 6

tags:

posted @ Friday, June 24, 2005 9:51 AM | Feedback (0) |

I used to get together with a whole bunch of people I know and play Halo. Now we get together and play Halo 2. Below are some links to Halo resources, interesting tidbits, and other info:

LAN Parties

Date Place Details Images
1/6/2006 5:00 PM John Schreifels's House Details n/a
10/28/2005 5:00 PM Jason Bock's House Details Images
6/24/2005 5:00 PM Jason L's House Details n/a
4/15/2005 5:00 PM John's House n/a n/a
2/4/2005 5:00 PM Russ's House n/a Images
12/8/2008 5:00 PM Mike's House n/a n/a
11/12/2005 5:00 PM NPI Office n/a n/a
9/17/2004 5:00 PM Russ's House n/a Images
4/30/2004 5:00 PM John's House n/a Images
2/6/2004 5:00 PM John's House n/a Images

posted @ Friday, June 24, 2005 9:45 AM | Feedback (4) |

Suddenly I've immersed myself in a number of programming and website related tasks.  It's been a long time since I've wanted to stay hunched over my keyboard while I'm at home, but now it's like my inner-geek wants out and I'm letting it have its way because its been locked up for so long. 

So as you've probably guessed by now, I've redesigned my website.  It's like clockwork.  About once every two months I get my mind set on updating the site and creating a new skin.  I've done it so many times now that it probably only takes me about 4 - 5 hours to do.  Basically, I got the urge late, late, late last night and threw it together.  I put a little more effort into this one with some subtle graphics to help smooth things out.  Originally I had a vision for an army green color with orange highlights, but it really looked stupid.  So, I'm sticking with blue.  Blue rocks.

I've also been looking into Avalon.  It's research for work, but I've become pretty consumed in wanting to learn more about it.  So far I've gone over the basics of creating Windows applications with Avalon, but now I really want to dive under the hood and get a deep understanding of what it really is and how it really works. 

I think it's somewhat ironic that while I'm looking at Avalon, and I'm also getting into GDI+ for the first time.  I've done next to no work with graphics in Windows apps in .Net 1.x.  Anyway, I'll just say that I have an idea that involves GDI+ in .Net, 2000 US census data, and United States geography.  I don't know where this idea is going to go yet, but I plan on blogging about it as I find time. 

When am I actually going to have time to do any of this stuff?  I have no idea.  I've already been cancelling other personal activities and have been insanely busy with other rehearsals, concerts, working on the basement, LAN parties, childbirth classes, and maintaining the evil entity that is known as my lawn.  We'll see what happens. 

posted @ Friday, June 24, 2005 9:28 AM | Feedback (2) |

If you know me and want to come to a Halo 2 LAN party, let me know.  It's out in Victoria, so it'll be a bit of a drive for a lot of folks, but not for me :)  So far we'll have 6 Xboxes/TV's to use and about 10 people.  It'll be a huge mix of people with some regular die-hards coming from Duluth and some newbies from around the area.  It won't necessarily be filled with intense, skilled matches, but the emphasis will be on talking smack and having a lot of fun (can you say Neelder-ball??!!  hrm, maybe not). 

I'm hoping to maybe bring along a notepad to jot down what games we play and any other interesting information.  I'll post what happened if I actually remember to write stuff.  Should be a good time.

posted @ Tuesday, June 21, 2005 4:47 PM | Feedback (3) |

http://www.sithsense.com/flash.htm

It's the same as www.20q.net, but it's a lot more fun with Vader's commentary and taunting.

Turns out I would be a great asset to the Dark Side.  I stumped him on 'drumstick' after 30 questions.

I just bought a set of these:

I haven't bought any drum equipment in... years? I don't know exactly how long, but I think it's been more than two years. I also bought some new drumheads and sticks with the pedals. I tried these out at Guitar Center on Monday, but they didn't have them in stock and I ordered them online at samash.com. For the money they were the best. My first choice would have been some Tama Iron Cobras but I'm not willing to spend that much. And they're built much tougher than what I'll be using them for.

I just received this email from a person who contacted me via my website:

bonjour, je souhaiterai commandez des fleur (hibiscus,coquelicot)pour ma mére merci de rentrer en contact avec moi

Performing a rough translation yielded this result:

hello, I will wish order flowers (hibiscus,coquelicot) pour my mére thank-you to return in contact with me

Simply put, I'm a little confused as to 1) how this person came across my site looking for flowers and 2) how my site actually gave this person the impression that I sold flowers. I suppose I could send the guy/gal a reply, ask them for their name and credit card info, and try and sell them something. However, doing so would likely result in me looking up the definition of "launder" in the dictionary and serving a 4-year sentence in a federal "pound-me-in-the-ass[1] prison.

[1] http://www.imdb.com/title/tt0151804/

So today I randomly decided to refinish one of my snare drums (view all the pictures here).  All I got done today was disassembling the drum and sanding off the original finish. 

Unfortunately, I never took an picture of the original drum before I started working, but in this picture you can see some blotches of the old color on the inside of the shell:

Next, the challenge will be to actually find time to paint and laquer the damn thing. Sanding took about 15 minutes tops with a power sander. But painting is a more delicate and patient process. In the past I've always put on at least two coats of stain or paint, plus about 3-4 coats of laquer. Each coat has to dry, etc etc etc. This time I want to do at least 5 coats of laquer, as all of my drums in the past haven't turned out as shiny as I've wanted them.

I also have to choose a color. I'm leaning toward a really in-your-face yellow. I'm not going to stain it this time - I really want a solid color without the wood grain showing through. There really aren't a lot of good colored stains out there anyway unless you either want to pay a ton of money or settle for some basic colors.

If you don't ever check in on www.sidetrackedproject.net, then you don't know that there are video footage and images from last night's practice.  Find them all here.

Since we're in the first real storm cycle since winter, watch out for over-hyped weather segments on the local stations tonight.  It's nothing but a ploy to increase ratings and get sponsors.  However, if you have even an ounce of a sense of humor you can watch the weather forecasters and laugh hysterically.  They're actors with makeup, not scientists.

Lots of stuff in the car at the moment...

Helmet: Betty - I've almost burned a hole through this disc because I've listened to it so many times. If I was forced to only keep one CD in my entire collection, this would be it.
Helmet: Aftertaste - The last CD from the Hamilton/Stanier/Bogdan lineup. I don't think it's their best, but there are a lot of great moments.
Soul Coughing: El Oso - Their last studio CD. I got to see them at Roy Wilkins after they released this CD. They put on an excellent show.
Soul Coughing: Ruby Vroom - It's good.
Fugazi: Repeater - It's good.
The Melvins: The Maggot - My favorite Melvins disc, and maybe their heaviest. Some signature Melvins riffs. Perhaps the best part about the CD is that each song is split right down the middle into two tracks.
The Melvins: The Bootlicker - While The Maggot goes to 11, this one goes to about 5. You know it's the Melvins when you listen to it, but it's toned down with clean guitars. Some great tunes. I saw them perform some of these tunes live, and they play them at 11.
311 The "Blue" album - A lot of die-hard 311 fans dislike this one because it really broadened their fan base. So what. It's a straight-ahead in-your-face rocker that kicks ass.
311: Music - The 311 debut. The production is a little weird in my opinion, but it's a debut. This one is full of 311 classics and it's interesting to hear how broad their style was even with their debut. Plenty of rock/metal, hip-hop, reggae and dancehall flavors in all of these tunes.
311: Soundsystem - I got to see 311 a 2nd time while they toured with this album. Not their greatest but has some good stuff.
The Mars Volta: Frances the Mute - I really haven't gotten into this one yet even after a couple of listens. It's definately an album you have to listen to. A lot of great playing, but it's tough to really get attached to any of the songs. Kind of like orchestral music: I used to be big on a lot of orchestral works - especially Rachmaninoff, Shostakovich, Samuel Barber, and Ravel. But after I got a job and life got busy I stopped listening to it. It takes time and effort to get into that stuff because the music takes so much longer to develop and there are more ideas to get across. Now I just want a quick fix when I turn on the CD player in the car. :)
Radiohead: Hail to the Thief - I think this one is their most diverse. Lot of different sounds from acoustic to electronic. This album captures a lot of their songwriting and performing talent, but I like Kid A, Amnesiac, and The Bends much better.
Radiohead: OK Computer - It's good too.
Tool: Aenima - What needs to be said? It's Tool.
Meshuggah: Nothing - I saw them open for Tool a while back. They put on an incredible performance. A bunch of Scandanavian guys wearing hockey sweaters unleashing a severely complex wall of brute sound.

The way I was managing images/photos on my site was starting to get out of hand.  I basically used a big Xml file that held all of the folder and image data such as paths, names, and descriptions.  I was also using a home-grown thumbnail generation app to create all of the thumbnails.  In short, the process of generating thumbnails and adding data to the Xml file was getting annoying since I had to go through it even if I wanted to just add one image to a folder.  Sure, I could just write my own image library app in ASP.Net, but I'm not willing to spend the time to make it as good as I would want it to be and there are already other ASP.Net-based apps out there that already have such functionality.

Enter nGallery.  I'm now using nGallery to store and display all of the image libraries on the site.  nGallery doesn't have 100% of the features I'd want, but it's a significant improvement from what I had before and was simple to get set up and running.  To get to the new gallery, you can either click on the Pictures link at the top of the site or navigate to http://www.kindohm.com/nGallery.   

This weekend I finally got all of the basement lighting finished.  I don't mind doing electrical work at all, but I hate lighting.  The fixtures are crammed up in the ceiling and its difficult to work with.  I'll take a switch or outlet near the floor any day over a light fixture. 

I discovered a big mistake in my approach to wiring the recessed lights in the main living area, so I had to re-wire all of them.  The cool thing though is that I've learned a lot and now I feel like I can wire up anything.  I didn't fully understand residential circuitry before, and now it's cake.  Perhaps the best part about this weekend is that there is light in the entire basement now.  It's not so dull and dark anymore.

The only electrical left will be to wire up all of the outlets in the rooms - and I'm not 100% I need to do that for the inspection.  Other than that, here's what's left before drywall:

  • Install some support framing for electrical boxes and HVAC vents
  • Re-do the ceiling framing in the hallway to the bathroom
  • Run the bath fan exhaust line to the outside of the house
  • Install framing around the music room window
  • Run phone lines
  • Run cable for and install a smoke detector in the storage room.
  • Finish up telephone/data/audio cable drops
  • Install insulation

That's about it.  I should be able to knock off more than half of that list in a half day.  It's getting closer...

I posted a few audio snippets of what Jason and I have been doing with the Sidetracked Project.  Take a listen at http://wss.kindohm.com/sidetracked.

Nikki and I finished cleaning out the new baby room and prepped it for painting yesterday.  Thus, I moved all of my music gear out of the room down into our storage room in the basement.  I didn't realize how much crap I actually owned until I had to move it all.  Guitars, amps, comptuers, mixers, etc, etc, etc. 

Last night I really wanted to get some music-related work done, so I set up shop right in the storage room among shelves of camping gear, christmas decorations, the furance, the water heater, etc: