Jeff and .NET

The .NET musings of Jeff Putz



My Sites


July 2005 - Posts

Component Art is good stuff
If you haven't seen the beta version of the new Component Art Web.UI Suite, check it out.

I was already planning on using this stuff for the project I'm on right now, and with the addition of their new Grid control, now I'm thinking I might want to get it even for my own stuff. It's not cheap, true, but I think their new Grid control beats the snot out of the Infragistics stuff (in part because half of their site doesn't even work in Firefox). The Callback control, wrapping pretty much anything into an AJAX control is sweet.

These guys are really clever, and I look forward to seeing their source code too. Not a cheap subscription, but I think it will be worth it.
Posted: Jul 30 2005, 01:28 PM by Jeff | with 12 comment(s)
Filed under:
My ten years in the wired world

Wired published a ten-year retrospect about stuff that changed the world. It's a really interesting read if you lived through all of that, and it makes me quite nostalgic! I've been writing code all day, so I need to write something humans can understand tonight. Thus... 10 Years That Changed The World (of Jeff Putz).

I graduated from Ashland University with a double major in radio/TV and journalism. The Web was pretty cool, and I remember that spring screwing around in Windows 3.1 with Winsock and Mosaic so we could figure out what the hell this was on the back of the labels of the then-trendy girl beer. I spent the summer working at CompUSA and bought my first Intel-based PC, a 75 MHz Pentium with 8MB of RAM and a 200 MB hard drive. I found a local ISP and began looking at the Web from my room at my parent's house. You could spend hours looking at stuff back then.

After surviving the launch of Windows 95, I finally got into my "real" career with a full-time overnight gig at "Cleveland's Hit Music Station, the new Jammin' 92.3!" Garbage came to town, I was spending days here and there with Stephanie back at AU, and in the back of my mind I could see that the Internet held a lot of potential as a new form of media.

I got laid-off from the radio station and haven't been behind a microphone since (this is something that I sorely regret, even though commercial radio completely sucks). Back to CompUSA, modems got faster, PC's got faster, and there was this site called Yahoo you could search for hours.

That summer, I got a job with the City of Medina, Ohio and the school district, charged with creating a government, and eventually public, access cable TV facility. I would get to buy about $150,000 in pro TV gear, and be well on my way to doing everything I loved about TV... engineering, production, talent... the whole thing. But I also thought it would be cool to have a domain name, so I shelled out $100 to buy, thinking that maybe I could eventually build some kind of site as a hub for radio people. I got an apartment with Stephanie as well.

I coached freshman volleyball and it was a total disaster. I had no idea what I was doing. But the job was going well. We moved into a bigger apartment as well, after a near-meltdown nearly split us apart. I was screwing around looking for something meaningful to put on the Internet. Nothing came to mind. I'm pretty sure this was the first time I bought a book on Amazon. Putting video on the Web was really interesting though, and I started to experiment with it.

I saw HD television for the first time at a vendor demo. I was absolutely floored. I figured we were just a few years away from having this in our house. Stephanie bought our first DVD player, a Sony that cost a whopping $500! (It's still sitting in the rack.)

Digital video was starting to become a serious reality. I started to push for the stuff at work, and bought into Panasonic's DVCPRO tape format, and scored a non-linear editing system from Media 100. It changed everything about the way we did TV. I couldn't believe it. No more shuttling through tapes, generation loss, pre-roll, etc. It was amazing.

It was also the first year that I put entire video programs on the Internet, and I think it was the year we first had broadband, in the form of DSL. 512k download speeds were amazing. This was the year I started Guide to The Point, an unofficial site dedicated to Cedar Point amusement park. In December of that year, I made $11.09 by putting ads from Burst Media on the site. I wondered what might happen if I had more visitors.

By this time I was getting seriously annoyed with the idiot politicians I worked with. I wasn't getting paid what my peers in other cities were, and I was tired of being referred to by asshole school principals as a kid. That summer, I had my first true Internet job with Penton Media.

The new job was awesome. I was surrounded by like-minded people that saw the Internet's potential as a means to connect people and reach a broader audience. Unfortunately, the idiots we all worked for didn't see anything outside of the tired old magazine model, but that melt down was still two years off.

I consider this the best year of my life, the highlight of which was my marriage to Stephanie. I really felt like I was living the American dream, with a spicy new marriage, an incredible honeymoon in Hawaii, a great job that paid well and fed the soul, Stephanie was teaching high school (her first job after getting her masters in biology), Friday lunches at Moe's with work friends, a nice apartment... really good times.

It was also the year that two other important moments happened for me. The first was that I sold that domain... for $100,000. Some Brits wanted it to promote Pepsi and the Spice Girls or some such shit. They first offered me $1,000 and I laughed my ass off. I knew who they were working for. Eventually I banked the huge coin that paid-off my car, credit card debt, my wedding, my honeymoon and the down payment on the house we'd buy the next year.

The second big moment was that I founded This coaster enthusiast site was based in part on some of the ideas we had at Penton in terms of creating a gateway to all things serving a particular market. I pushed it one step further by taking user-contributed content, something inspired by the site Voodoo Extreme years before. By this time I was fairly comfortable writing ASP code and developed my first significant version of POP Forums, which I sold for $175 per license (including to Burst Media).

This year was not so good. Penton started going into the crapper because the moron executives thought that anything with ".com" in the company name was good to buy. They didn't empower people to do the right things, and group managers and publishers were stuck in their print kingdoms.

But I moved on to a small publisher called Pfingsten Publishing and we bought a house with money. Stephanie went back to school. The summer showed a lot of promise with new things. I even spent the spring coaching junior Olympic volleyball, which was much more satisfying than high school.

Then on September 11, 2001, everything changed, as it did for most people. The event caused a catastrophe in the company and I got laid-off. (If I would've stayed at Penton, I would've been employed about two months longer.) The timing was bad, because I just signed a contract for a T-1 at the house to run my servers from. The advertising at that point did support it, barely, but it was scary. To make things worse, my biggest-paying ad agency, DoubleClick at the time, dropped me. To keep from paying that grand a month myself, I started the CoasterBuzz Club, a premium ad-free subscription to the Web site. It saved my ass, and maybe my house.

Not able to find a job, my self-esteem hit an all-time low. I was depressed. Winter sucked. The only good thing that came out of it was that I sucked it up and bought an MSDN subscription to get all of the new Microsoft stuff, and I learned all about ASP.NET (well, not a ton, but a start).

My six months of unemployment finally ended in April when I started working for a payroll processor, charged with developing their Web front-end. I was drawing a paycheck again, even though the work, well, when there was any work, was not interesting. That summer I got my first digital SLR camera, and I rediscovered how much I loved photography.

CoasterBuzz Club really started to take off, and picked up the slack quite a bit from the crappy advertising market. We had a great event at Paramount's Kings Island and we've had it every year since. I would never be rich with this site, but I was making enough to make it worth my time, even though I racked up a ton of debt the previous years with servers, software and the T-1.

It was clear that my job, where I had nothing to do, was sucking the life out of me. I spent time working on the forum at work from time to time to stay busy, and it was the year that object-oriented programming finally sunk in enough that I "got it." For the first time since leaving the broadcast world, I felt like a "real" programmer. I knew my job would go away eventually, but I really felt at peace about the whole thing. I'd roll with it this time. Sure enough, in October, they dropped me.

But technology was interesting. I was coming into my own as a code monkey, I got this really cool thing called an iPod, and bandwidth got so cheap that I could finally rent a server somewhere instead of doing the T-1. The timing was good too because my cable company finally finished an upgrade to provide broadband service.

Walt, my partner to combine GTTP with his Virtual Midway (that next spring), suggested as I was helping him that my advice sure would make a good book, so I decided to write a chapter and start sending it to publishers.

Being unemployed was different this time, as recruiters were calling like crazy. It was then that I realized that I could bill more than $50 an hour as a consultant if I could live with the weirdness that might bring. So I went to work as a contractor for Progressive in late January.

Progressive was, as far as I could tell, securing developers in part to make sure they had them. The Cleveland market was being sucked dry. I had nothing to do. The commute was an hour each way. I was quickly getting unhappy despite the gigantic paychecks I was getting.

Then Addison-Wesley offered me a contract to write my book, and I decided I'd take the summer off to do just that. I got up when I felt like it and did what I felt like, even though the money from CoasterBuzz didn't entirely pay the bills. At least I was doing what I wanted to do. In fact, I think I was almost too relaxed, because at one point Stephanie asked if I was depressed. In retrospect I was certainly working things out in my mind about my place in the world, reaching no conclusions, but I don't think I was depressed. Just very contemplative.

This one is still obviously a work in progress. This year I started working a contract job that has allowed me to really work in my own world, on my terms, the way I want. I'm also coaching high school volleyball again. Overall, I like where I am professionally. The part of me that suffers is my emotional side in terms of relationships and self-care. I'm trying very hard to repair those.

The past ten years were interesting, with more ups and downs than I could have ever thought possible. Professionally, I still get excited about all that might be. The only regret I have is that I never got to be a part of something big the way some people did (like the founders of Yahoo or Google or whatever), but I've had so many little victories in life that it's OK.

I wonder what I'll have to write about ten years from now?

Posted: Jul 29 2005, 10:17 PM by Jeff | with 3 comment(s)
Filed under: , ,
Upgrading with an Athlon 64

I upgraded Stephanie's computer today with a shiny new Athlon 64 3000+. She's had a 2 GHz P4 for almost three years, so it was time for an upgrade.

Actually, she did most of the work. She gutted the machine and rebuilt it, except for me clamping down the heat sink. Then I f'd around with Windows because it couldn't just do a repair install, it needed a fresh install. I hate that about Windows. With XP I've never had "OS rot" like in the Windows 95 days, but I still upgrade CPU's and motherboards about once every two years, and that's when I run into this.

Anyway, I bought a nice Abit motherboard with an AGP slot because her video card (Nvidia 5700) is still serving her well enough, so no reason to get a PCIe board. That's the third Abit board I've bought in the last year (one for my desktop and one for my HTPC), and they seem to be nice stuff. I love the optical audio outputs and the ton of connection options for USB and Firewire ports.

The chip itself, with the stock cooler, runs insanely cool. Even after messing around in Half-Life 2, it never got very warm. I was seriously impressed. Lower clock speeds apparently pay off there.

At some point it might be interesting to hook her up with the 64-bit version of Windows, but maybe we'll just wait until Longh... I mean... Windows Vista ships. And heck, since most of these socket 939 boards also support the lovely dual-core chips, upgrading will be smooth!

Posted: Jul 27 2005, 11:38 PM by Jeff | with no comments
Filed under:
The default button on enter on an ASP.NET form
I haven't really thought about this in a long time, but after searching a bit and finding some really complex solutions, I figured out a way to fire a "click" based on pressing enter in a text field. It works OK in IE and Firefox, which is good enough for me, and it only requires one line.

EmailTextBox.Attributes.Add("onKeyPress", "javascript:if (event.keyCode == 13) __doPostBack('" + LoginButton.UniqueID + "','')");

"EmailTextBox" is as you might suspect a text box control, while "LoginButton" is a link button. All it does is render an extra attribute in the rendered tag that checks for a key press, and if it's the enter key, it fires ASP.NET's __doPostBack method with the unique ID of the button that you want to virtually press. That in turn fires off whatever server-side event handlers you've wired up. You could pass in the eventargument as the second parameter in that Javascript if you wanted to.

I can't understand why this wasn't included somewhere in v2. They did offer a default button for the entire form, but I think that only works if you have actual buttons (I use LinkButtons almost exclusively). You could actually wire up any control name here if you wanted.
Posted: Jul 26 2005, 03:25 PM by Jeff | with 61 comment(s) |
Filed under:
Virtual Earth is so "me too" and kinda sucks

Have you seen that Microsoft launched Virtual Earth? Yeah, it's a rip off of Google Maps and Google Earth I guess, but it kind of sucks.

For example, their image data is a bit old, or of poor quality. Not only can you see the World Trade Center, but the image was taken apparently at dusk given that the shadows of NYC buildings block out virtually everything. You may have also heard about how Apple headquarters doesn't exist either.

I don't much care for it just because the UI sucks. I mean, why would permalink open up a little window? You can't drag the zoom slider. The only thing I really like is that it will fill the entire browser window with images.

I guess it just reeks of "me too." I'm generally a Microsoft fan boy, but I guess I just don't entirely get the point. (After installing Google Earth, I felt similarly, I might add.)

Posted: Jul 25 2005, 06:26 PM by Jeff | with 14 comment(s)
Filed under: ,
Populating a ProviderCollection from custom config in beta 2
I'm a little lost. I'm not clear on how to populate a ProviderCollection based on a custom configuration section. The way I first learned it (pre-beta) isn't possible anymore, and of course all of the docs appear to be placeholders.

For example, in web.config, I have something like this:

<mySection defaultProvider="PopForums">
            <add name="MyProvider" type="MyProvider, MyAssy" connectionStringName="Whatever" />

Then my custom config section looks something like:

public class MySection : ConfigurationSection
   [ConfigurationProperty("defaultProvider", DefaultValue = "Whatevah")]
   public string DefaultProvider
      get { return (string)base["defaultProvider"]; }
      set { base["defaultProvider"] = value; }

   [ConfigurationProperty("providers", RequiredValue = false)]
   public ProviderCollection Providers
       get { return (ProviderCollection)base["providers"]; }

Now how do I get this stuff initialized? The code I'm revisiting from a year ago doesn't even compile because the classes I used, some of them anyway, are gone. I can't find any newer examples.
Posted: Jul 24 2005, 08:30 PM by Jeff | with 2 comment(s)
Filed under:
Windows Vista... it's about time
The next Windows has a name, and finally, I feel like we can at least get somewhat excited about it.

The hype machine is important. Getting to beta 1 is important. Now it feels like a product that might ship some day.
Posted: Jul 22 2005, 05:45 PM by Jeff | with no comments
Filed under:
Monitor swap quick and painless
While getting the "support" guy from Dell to understand that I knew what I was talking about was a pain, the swap to a replacement was fairly painless. UPS dropped off the replacement today, and it included a DHL tag to put on the defective monitor.

And here's a surprise too... DHL doesn't seem to suck as much, or maybe that was just the Airbrone Express component that sucked. I called for pick up and there was a guy at the door 30 minutes later. The attention I needed to give for the entire monitor swap was just over 30 minutes. Not bad.

I'm enjoying burn-in free computing again... hopefully on a permanent basis.
Posted: Jul 21 2005, 11:11 PM by Jeff | with 1 comment(s)
Filed under: ,
GTA Hype: Typical American stupidity

So it would appear that now Best Buy is going to pull Grand Theft Auto: San Andreas off of the shelf following the discovery of some kind of nudie patch you can download to let you undress characters and make them do sex acts.

This is a violent game where you can shoot people, cut their heads off, kick people in the nuts, etc. Now how is it that, in this world, we can be OK with the violence, but as soon as we see pixelated boobies on screen we need to call the morality police? I personally don't have a problem with any of it (wouldn't let my kid play it), but how is one worse than the other?

And as for all of the people that think that self-regulation of the video game industry is a failure, here's a clue... try letting parents be parents for a change. The feds can't, shouldn't have to, and certainly shouldn't pay for a check to see that parents actually take interest in what their kids are doing.

Posted: Jul 21 2005, 04:30 PM by Jeff | with 6 comment(s)
Filed under:
Using WebResource.axd for embedded resources
Wow, and actual .NET post. I must not be feeling well.

Anyway, anyone that has tried to use embedded resources in compiled assemblies using ASP.NET v2 has probably had the urge to beat their head against the wall. The documentation, as of now, pretty much sucks. However, after using our friend Reflector, I think I get what's going on now.

Say that you're building a control and you want to embed an image in the compiled assembly. Then you want to use the handy built-in HttpHandler WebResource.axd to serve that bad boy up. I've seen at least three different stories indicating the way it should work, but I couldn't get any of them to work. This is what worked for me:

1. Add the image to your project.
2. In the solution explorer, click the file, and in the property window, change build action to "embedded resource."
3. Add the following to your AssemblyInfo.cs file:
[assembly: WebResourceAttribute("MyNameSpaces.Resources.MyImage.gif", "image/gif")]
Important note here... the "MyNameSpaces" comes from the default namespace indicated in the project properties. The "Resources" comes from the fact that I happened to put the image file in the "Resources" folder I made.
4. In your control rendering code, you'll need the following to produce a usable URL for the image:
Page.ClientScript.GetWebResourceUrl(typeof(MyNameSpaces.MyControl), "MyNameSpaces.Resources.MyImage.gif")
Notice I used the same naming convention here.
5. Compile away.

This should produce a URL in your rendered control that looks something like:

Now, the issue that I have with this is that I'm sure it involves some kind of reflection or something, and frankly I don't know if it's caching the object/stream/graphic. One of the instructions I saw said to add the images as resources in the project property page, but doing so only generated a Properties\Resources.cs file with more mangled name spaces. So if there's a more "correct" way to do this, someone please share!

Posted: Jul 18 2005, 11:44 PM by Jeff | with 21 comment(s)
Filed under:
More Posts Next page »