Archives

Archives / 2005
  • An update on my life

    I used to blog here so much when I was writing my book, and I've kind of slacked off ever since. I'm lame.

    The primary reason I haven't blogged as much here this year is because I had a really, really bad year in terms of my personal life. With that came a waning interest in coding and a lot of questioning about what the hell I'm doing with life in general.

    If you read this blog back in 2004, you'd know that one of the things I continually struggled with is what I wanted to do in terms of work. Working for The Man resulted in a lot of dissatisfaction. I spent a good portion of 2005 working a pretty good contract job, which I eventually left in the fall so I could concentrate on coaching volleyball. Fortunately my Web sites produce enough revenue to get by, but all this time later I'm still trying to figure it out. In the interest of just challenging my brain, I'm once again looking at some contract gigs. I don't mind working for someone else when it's interesting work, so I'm crossing my fingers that something I can really get into is at the other end of these recruiter calls.

    As for my own projects, I'm surprised at how many people downloaded my simple ghetto blog app. I've only really used it seriously, with some mods, for the CoasterBuzz Podcast site, but I'm pleased with the way it works. Not complicated at all, and shows how easy you can whip something up with ASP.NET and Visual Studio.

    Probably my biggest neglect has been toward POP Forums v8. I'm ashamed at how little I've worked on it in the last year. The shame is more inwardly directed because it's something I can use. I know others would love to use it, but it has always been secondary to my own use (you get what you pay for ;)). There are two issues that I struggle with in finishing it. The first is that there are so many features I want to add to it, and it just gets daunting. The second issue is that I'm not happy with the way the user data is tied into it. I just can't break it out enough without sacrificing performance.

    My ad serving software, while not having great UI, is surprisingly still kicking ass for me. If I could get the reporting to perform better, I think I'd release a beta of that. I've tried some tricks aggregating data, but the hold up is that SQL doing math is slow. I've never really taken the time to find a better way.

    So the truth is that I still have a lot I'd like to be doing, I just haven't had the motivation to stick to it. I'm hoping 2006 will be different.

  • Search for Xbox 360

    How fast can you whip something up with ASP.NET? Pretty fast.

    http://www.searchforxbox.com/

    I don't know if anyone will actually go to the site, but it took me all of two hours to do and $8 for the domain name, so it's worth a shot. If I generate that much in AdSense, I broke even. :)

  • How do I really copy a List<T> object?

    OK, color me annoyed. I want to copy a List<T> object because I want to manipulate the junk in it. The junk is in the ASP.NET cache, so if I alter it, it gets changed and the change is reflected on the next request.

    For example... right now I have

    List<Foo> list = Foo.GetFromCache();
    list[0].MyString = "yo";


    As you would expect, that MyString property is going to be "yo" next time I get it. I tried using List<T>.CopyTo() to copy it to an array, but that array is still a reference to the original.

    It's gotta be easier... right?

  • Getting sucked into Ajax

    I actually bought a book at Borders today, something I never do anymore. Computer books in particular are rare purchases for me because there are few that I need or want to learn from.

  • First day with the final Visual Studio 2005

    I finally have Visual Studio 2005 and SQL Server 2005 installed here on my local machine following the MSDN subscription stuff, and it's hard to believe after all of this time with alphas and betas that the new world has finally arrived. It's a good day!

    I've managed to write a couple hundred lines of code today, and even test code using the new stuff (I have the VSTD version). I'm digging it. I mean, I knew what it was going to be anyway, but I'm pleased at how well it all seems to be working. The goofy little bugs I had been dealing with the last 18+ months are obviously gone.

    I've got a project I'm trying to knock out in the next week or so, but I'm not being a good code monkey and executing the way I should. I'm hoping for some bout of inspiration to push me here. Maybe if I won that Xbox 360 launch invite. ;) I mean shit, I'm all about the Microsoft stuff. Hook me up!

  • MSDN is slooooooooooow

    Since I never got a "welcome e-mail" from MSDN, I began relentlessly pinging the form for a subscriber number lookup on Sunday. Finally, this morning, it worked and I got my number. I started downloading Visual Studio. Twelve hours ago. Still only two-thirds the way there. Getting 35k/second.

    That's pathetic. How does a company the size of Microsoft offer a very high-end and premium download service and not have the bandwidth to support it. I keep seeing people in various forums and blogs post excuses, but there is no excuse. People are paying big money for this stuff.

    What a disappointment.

  • MSDN... still not in real time!

    Since I guess I still haven't done enough to impress anyone in the community (or perhaps because my intentions frequently involve profit), I never got an MVP and free access to MSDN, so I paid for it. I scored the old "Enterprise" version from Amazon for about $1,400, so that upgrades me to the Team System for Developers version. Score. Beats $5k.

    That said, I'm shocked that it's still not a real-time affair. Back in 2001, the first time I subscribed, I accepted that as just being with the times, but still? I activated my membership on the phone (since the Web site was down, also disappointing), and I have to wait the three or four days until they send me a membership number.

    It's disappointing that access isn't nearly instant. You'd think Microsoft would be better than that for such a crucial function for its developer community.

  • HttpHandlers and big files

    I use an HttpHandler on my podcast site to catch the requests for MP3's and increment a download counter. This seems to work pretty well, and I haven't had any problems to date. It also helps force the "save as" dialog so people aren't viewing them in their browsers.

    However, when I try to apply the same concept to big video files, it chokes. iTunes says the network connection is reset while Firefox simply says the document contains no data.

    What might be going on here? The code is what you've likely seen in countless examples elsewhere, like this:

    public class MovHandler : IHttpHandler
    {
        public MovHandler()
        {
        }
       
        public bool IsReusable
        {
            get { return true; }
        }

        public void ProcessRequest(HttpContext context)
        {
            context.Response.Clear();
            context.Response.ContentType = "video/quicktime";
            string path = context.Server.MapPath(context.Request.FilePath);
            NewsItem item = new NewsItem(Path.GetFileName(context.Request.FilePath));
            item.Downloads++;
            item.Update();
            context.Response.WriteFile(path);
            context.Response.End();
        }
    }

  • Visual Studio 2005 on Amazon

    I noticed today that Visual Studio 2005 is now listed on Amazon. The pro version lists for $809 with a release date of November 28. The Team System MSDN skus are also up there for $4,929.99, same release date.

  • Apple is pissing me off

    For all of the love I generally give Apple, they're really annoying me right now. iTunes v5 and v6 won't burn CD's for me. Nothing else has changed on my system, so it's not my problem. Everything was peachy with v4.9, and has since gone down the tubes.

    What's particularly annoying is that there are widespread cases of the same error on their forums, and it has been well over a month now since they broke something. People with purchased music are getting blown off, which is pretty lame. Replacing my perfectly functional drive is not a solution!

  • MSSEARCH is the devil!

    Despite defragging my server's hard drives, I was still getting crazy disk gnashing and it was bringing everything to a crawl. I finally fired up the SQL Profiler and I was astounded to see crazy hits to one of my fulltext indexes over and over. It appeared that the incremental population of one of the indexes was "stuck" on something and just couldn't recover.

    I prototyped a self-standing search engine for POP Forums v8 a few months ago, and it performs a lot better and with better results. I'm still working on cleaning up the word indexing (junk words I've got, but I need to get the punctuation and HTML out), but it works. I even ran some tests against a large (800mb) forum and it seems to work really well.

    I need to get back on the horse and ramp that stuff up again!

  • Visa/Mastercard settlement: I get $19!

    I've complained before that Visa and Mastercard screw you with fees. Well, apparently they're settling an antitrust suit.

    I got a settlement notice in the mail indicating I'm entitled to $19! Whoo hoo! I can finally buy that Porche!

  • Content is cheaper, but it still isn't free!

    I've been watching with great interest the podcasts and IPTV projects of the various TechTV alumni. These folks are reaching hundreds of thousands of people every week without a traditional broadcast network, and that's incredibly awesome.

  • POP Forums finally looking like an application

    POP Forums v8 is finally looking something like a functional application. I finally got around to prioritizing the work and feature list so I don't feel so overwhelmed. The plan now is to get it to a state similar to that of v7.x, and from there start working on the newer features. I'll probably put out a preview at that point.

    I have to say that I'm not pleased with the render times using templated controls for topic and post lists, but I could be over-reacting. On one hand, I'm looking at .2 seconds, but for someone running a site without a ton of traffic, that shouldn't even matter. For my own sites I think I want it to be below .1, which is kind of the benchmark I use for everything else I have running right now, and I think to do that I'll need to resort to custom controls. So I might introduce two versions of the UI, one for tweak monkeys and one built for all-out performance that isn't as easy to hack.

    I had a discussion about the importance of creating a Usenet-style UI for threads, and I wonder how important that really is. When you discuss it with geeks, they stand up and say, "oh yeah, I want that." When you discuss it with everyone else, they say, "Usewhat?" It's so weird how the Internet has been with us for such a relatively short period of time, yet the experience gap is enormous, especially from thirty-somethings to early twenty-somethings.

  • Bonus action on my book

    With the poor marketing and positioning of my book, I'm pretty sure I'm going to have to live with the idea that it's never going to meet the sales target I hoped for. That's a real bummer. I should have retained the copyright. Now I know better.

  • The ups and downs of templated data-bound controls

    I've spent way too much time in the last year writing code for back-end stuff. Now spending quality time with UI is causing me headaches.

    Mind you, my problems are relative to my standards, I suppose. Today I was working on the thread display for POP Forums v8. In the past, I would pre-process the data into a DataTable, then bind that to a repeater. I had no problem keeping page rendering times under .10 seconds. Doing that was less pretty, but it very quickly allowed me to build HTML or do empty strings for stuff I didn't want to display.

    Using a templated control is much cooler for the tweak monkey that likes to change layout or whatever, but the databinding can be slow when you have to perform some logic or render some nested control. For example, I put a derived Image control in the template that took the member information as a parameter, and if they had no avatar, it set the image's Visible property to false. That nearly doubled the render time of the page!

    If I just do a straight bind of a List<Post> object to my control, and just display data from those Post objects, no problem. It's very very fast. I need to rethink the approach a little, because I'm just not happy with the performance.

  • News Corp. buys IGN... wow

    The Internet content business has been an interesting one to watch, because not many companies survived. C-Net and IGN are the only real pure-players I can think of. IGN was an interesting one because it grew out of some relatively independent gaming sites.

  • What happened to the Repeater in v2?

    As I mentioned in my last post, I'm trying to implement my own data-bound templated control. Everything went pretty swimmingly, as I modeled it quite a bit after a simplified version of Repeater, even using Reflector to see what it does.

    However, binding data to each instance of the template was taking about .1 seconds, which is of course completely unacceptable. My first thought was that I was doing something wrong. Then I applied the same data to a Repeater, using the same stuff inside the template. It actually performed slightly worse!

    Thinking this was just some kind of crazy fluke, I fired up VS 2003 and tried to do nearly the same thing with a Repeater. Binding data to the old repeater took .001 seconds total, as in, all items combined. WTF?

    I'm at a loss to explain this other than to say it's beta software.

    EDIT: You know... it was something that I was doing. Duh. I hate it when like a moron I do something stupid and then blame it on the software. I was doing some text parsing on the fly that, to say the least, was not particularly efficient.

  • Why is my data-bound templated control so slow?

    I've been working on a templated control, and I'm astounded at how slow it is. I looked at the execution times and narrowed it down to the actual data binding of a particular item...

    TemplateItem item = new TemplateItem();
    item.DataItem = simpleContainerClass;
    ITemplate template;
    if (_postTemplate != null)
    {
        template = _postTemplate;
        template.InstantiateIn(item);
        this.Controls.Add(item);
    }
    item.DataBind();


    This block of code runs once for each item in the collection of data items in the control's CreatChildControls() method. The TemplateItem class is just a container class with one property called DataItem. The last line, the DataBind() method, takes nearly .1 seconds for each item. That's obviously not acceptable.

    Am I missing something here or is there just something slow about using this? I'm using v2 of .NET, by the way.

  • DHTML is a pain in the ass

    I have to say that every time I try to do a little DHTML, I start to curse the world. I found a neat little Javascript function that finds the position of an element, which makes it handy to position another element on the page relative to that one.

    It works like a champ... in IE. It doesn't work in Firefox. The weird thing is that it doesn't throw any kind of error in the Firefox Javascript console either.

    Stuff like this makes it amazing to me that anyone ever gets ajax stuff to work in most browsers.

  • I should be podcasting

    You know, given my radio and television background, you'd think that I would have been podcasting ages ago. The thing is, I can't think of anything particularly exciting to talk about. I suppose I could do one in conjunction with CoasterBuzz, but God only knows how interesting that might be. I guess it would depend on who I conferenced in, and I wouldn't do it without at least one woman in the mix. That scene is a sausage party as it is.

  • POP Forums getting sexy

    I'm really starting to get excited about POP Forums v8 now. It's finally starting to feel like something I could actually use in production. And the part that gets me most excited is that my goal of making it "hackable" is really coming together, with features that other ASP.NET forums don't have. It truly will be a forum for developers that want to work with look and feel on their own terms.

    It's also fun to solve new problems. There are little things I've always wanted to implement that you'll find in the various PHP forums out there, but never really got around to it. That stuff is coming together quickly.

    And just a side note, I'm really impressed with the generic List<T> collection. I did some performance tests just adding and iterating and it beats the pants off of ArrayList. I realize that's what is supposed to happen, but the tweak monkey in me had to see for myself!

  • OS X on Intel... it's for real

    Actually, the theory is that OS X has been running on Intel CPU's for a long time internally at Apple. But anyway, the build that went out to developers, that was supposed to be tied to special prototype machines with a DRM chip, was hacked and it's all over the Internet now.

    I watched one of the video clips someone did, where the thing boots natively on a laptop with a 1.6 GHz mobile Pentium. It loads really, really fast. I can't wait to see this thing run on actual Apple/Intel hardware next year.

    Yeah, I'll buy one. I've always loved the Apple hardware, and OS X, but being a Windows developer, it's not like I can totally switch. Give me a box that I can run Windows and OS X on, and you've sold me, especially a laptop.

  • Perhaps self-publishing is the answer

    No one is interested in picking up my next book proposal, and they all seem to have a ridiculous number of books in the pipe. A lot of them are the kind with a dozen authors that they can crank out quickly but generally aren't very good at teaching the subject matter. (I've been approached about writing on these... no thanks.)

    I had heard about it before, but forgot about LuLu.com until I heard one of the founders on This Week In Tech. There's a service that speaks my language. It may not offer the really broad distribution that book stores offer, but if you have something you really want to get out there, now you can. If I could sell a dozen or two copies a month, I'd be more than thrilled.

    I still believe in books. I'm not sure I believe that publishers are making the right decisions though on what to publish. I probably wouldn't have published my book unless it was part of a bigger strategy, a real understanding of where it fit. The publishers don't really have the expertise to sit down and look at the big picture in terms of the potential audience, then map out a strategy to give them a sensible offering. The old Wrox did this well, but obviously they made a lot of bad decisions financially.

    Does anyone have any self-publishing experience to share?

  • To delete or not to delete, that's a tough question

    I had a discussion with a "customer" (or I guess technically it's a freeloader ;)) about why the old version of POP Forums didn't allow you to delete a forum. That's a good question.

    The truth is that in terms of the database, there is a mountain of data that is eventually connected to a forum record. It has topics, which in turn has posts, favorite topics, e-mail notification, search word records, moderator associations, moderation log entries... I'm sure I'm forgetting something. That's a whole lot of relational data. Even with the database set up to cascade deletes, that's a whole lot of data. I could do it in a new thread so it didn't time out or hang up the page, but I'd hate to see what happens to a live forum in terms of performance. The biggest pool of data I have involves about 400,000 posts in a single forum, so I don't even have that big of a data pool to test against.

    Despite all of that, you can simply turn a forum off, which for end user means it's essentially not there, but I can see how someone on a shared SQL Server account might have limits and they need to blow away a particular forum.

    It might still happen... but not by the first beta.

  • Editing web.config through the configuration API is less than ideal

    While it's pretty cool that you can programmatically mess with web.config, I'm starting to feel that it's not entirely practical because of the security implications. NETWORK SERVICE needs permission to write to it, or you need to use impersonation. Regardless, this is not xcopy deployment.

    If there's a simple, streamlined way to work around this problem, I'd love to hear about it.

  • Oh my God! The sky is falling on .NET v2!

    What the hell is going on in the .NET community? By reading some blogs lately, you'd think that .NET v2 was going to suck and be a tragic mistake, based entirely on the premise that they won't fix bugs in beta 2 or won't provide feature "A" or make feature "B" the way one person or another wants.

    Has the entire community lost its mind? I mean, we do all develop software for a living, right? I have a hard enough time after weeks of requirements gathering trying to develop and deliver a product that is exactly what a hundred people want, let alone what hundreds of thousands of people want. It feels a lot like all of the VB6 people that felt kicked in the nuts because they weren't getting their way back in 2001.

    I guess this is the down side of having a very public and open beta process. On one hand, you get valuable feedback and improve the product, but on the other you get hundreds of people declaring a worst-case scenario. Then perfectly smart and rational people make it worse by spreading irrational FUD about how Microsoft won't fix whatever, or won't issue a patch or service pack, etc. I wasn't aware that so many developers had access to Crystal Ball .NET!

    The way I see it, I've spent years now with a Visual Studio that "mostly works" and put up with it. Maybe fight it is a better word. VS 2005 is like a breath of fresh air, and if there are quirks in it, or the framework or C#, I'll deal with those quirks. There comes a point where you just have to roll with it or the project will never ship. Never shipping is worse than living with quirks.

    Am I making excuses for Microsoft? Nope. I don't think they should ship crap either. But that's just it... my perspective is such that I don't see crap in the pipe. It's all relative to your perspective. I think some people have lost perspective. On a scale of "good enough" to "outstanding," I think they're a lot close to the latter than the former.

    Must get back to developing software now...

  • Does ASP.NET v2 allow you to do the "wrong" thing?

    A post today from Paul Wilson got me thinking about what the "right" thing to do is in terms of how you organize code in a Web project. One of the replies in particular implied that the allowance to put code right on the page (which you could do before anyway, without Intellisense) reinforces the old script way of doing things. I don't entirely agree.

    One of the goals of my book was to teach former script people (like me) that the world object-oriented programming was worth understanding and implementing. In thinking about the things that cause a mental block for developers in transition, clearly Visual Studio's codebehind model was one of the problems. Not only did we expect the developer to think of objects and classes (oh my!) in more of an abstract sense, but we also wanted them to think about a system of files (assemblies, codebehind, pages) that were also spread apart in an unfamiliar way. The truth is, if you fought against VS, you could do things "the old way" anyway, it was just a pain.

    Now v2 comes along, and we can comfortably put our code right there in the page. The design of an application can still be bad, just as it was in v1.x. I should know... the first port I did of POP Forums put the crap all over the place with no true reuse of code. It was a nightmare, but familiar ground for someone coming from the ASP.old world.

    PHP is huge, and it's not going away. It's easy to learn. ASP.NET, as of v2, is also a lot easier to learn. The simplicity of the physical file layout makes it easier for a beginner to get their head around what's going on. The challenge is to get them to the next level, and this is what I've been telling bloggers, authors and publishers for two years now. I feel like no one is listening. You can't start bantering about design patterns with a transitional developer before they even understand what a class is. One does not go from script person to uber-code monkey. There are interim steps. In a world where we use iterative development every day, you'd think people would get that!

    I guess what I really mean is, don't jump out there and say, "You're doing it wrong, stupid!" Tell people, "This is a better way to do it, and this is why."

  • POP Forums v8... it does exist!

    Tonight I did more meaningful work on POP Forums v8 than I did probably in the last 12 months combined. Yes, it does exist, and in terms of basic functionality, it works. It even has Membership, Role and Profile providers in place.

    I struggled in my mind for a long time about how I would build out the application. On one hand, I could be clever, OOP it to death, and wind up with something that beginners could never alter in a way to suit their own needs. That would be great for me, but not so good for the target audience. The PHP guys have been kicking our asses for years because their forums are fairly easy to hack and slash. That's what I want. The happy medium I've come up with is to build a nice rich class library, but avoid hard-coding UI into it. That means templated controls and UI glue code right in the pages, where the beginners and in-between folks are used to seeing it (and where it's perfectly acceptable in a VS/VWD 2005 world).

    Another thing I've charged myself with is really stepping away from the UI that has been around since UBB and think about how it could be better. POP Forums was the first forum to use a crude rich text editor (that's the honest truth... I searched everywhere for one that did it back in the ASP.old days). Now I want it all to make more sense in the context of human conversations. I don't even know what that means, but I'll let you know if I have any ideas.

    The project is not without its scary stuff. There was no way I was going to totally start over from scratch, so the class library did start from v7.x. Back in those days (October, 2003), I didn't even know what NUnit was, so there were no unit tests. I have written some tests, but they're crude, and mostly done to address changed stuff. I could write more tests to cover more code, but that's a huge undertaking with thousands of lines of code, and of course writing the tests after the fact taints the tests with code monkey bias.

    I don't know if the text parsing engine is 100%, but that was something I rewrote out of unit tests. That has been the bane of my existence since I first tried writing a forum back in 1999. One drastic improvement is that I also hacked apart my less than stellar rich text control and almost started over. The new one is much cleaner, works in Firefox, and is far less bulky than FreeTextBox. It does all of the basic formatting, sans fonts and colors, because as a site owner, frankly I don't want people messing up the color scheme I work so hard to make not suck. ;)

    I wish I knew when it would be done, but it's too hard to say given the day job contract I'm working right now (not to mention coaching high school volleyball). I hit a nice stride tonight, and met a few milestones I was anxious to get to.

  • Is List<T>.IndexOf() broken?

    I was messing around with a List<T> object today and found that IndexOf() never calls T's int IComparable<T>.CompareTo(T t) method. I used to do this with arrays of container objects all of the time in v1.x and it worked like a champ. Is it broken in beta 2?

    EDIT: OK... it calls it for BinarySearch(), but it gives up before getting to the end of the collection. That's still weird!

  • DropDownList still doesn't support optgroups?

    Am I crazy, or am I seeing that you still can't do optgroups in a DropDownList in v2 of ASP.NET? It's one thing making the controls XHTML compliant, quite another having them do everything the XHTML schema will allow. You can't even inherit ListItem to hack out your own version. Lame!

    Not that it's hard to implement, but come on guys... don't take short cuts!

  • Why we still suck at teaching people how to code with ASP.NET

    I use "suck" too much in blog titles.

    I've mentioned here and there that an experience gap and general poor education leads to a developer community that just isn't what it could be. Maybe the thing that bothers me the most is that authors and People Who Know(TM) don't teach very well.

    I tried to do what I could with my book, and I've had almost universally positive feedback. Hey, I'm not that far removed from the people I'm trying to teach, so I feel their pain. I've been trying to post more often in the www.asp.net forums as well, but that happens in brief spurts. I'm doing what I can, when I can.

    I still find stuff from time to time that I have to learn myself, and I find it staggering that Web examples and books always suck at this. The approach is always either too complex or short but lacks explanation. That's seriously annoying. For example, I recently wanted to build some templated controls. One of the books I have (name withheld to protect the guilty) spends five pages of code then 40 pages of explanation to build something so insanely complex that it's nearly worthless as a teaching tool. A Web-based article on MSDN was better, but still introduced complexity irrelevant to explaining the process. Eventually I figured it out, but only because I have a good feel for how stuff is supposed to work in general. I'd hate to be someone with less experience.

    So for those of you generating content intended to teach people, whether it's by book, magazine, Web or whatever, keep it simple, stupid! The first application of new knowledge is rarely an instance of having to design space craft or a new microprocessor.

  • Really irritated with credit card fees for merchants

    When you swipe your credit card to pay for something, you probably don't think much about it. It doesn't really cost you anything directly, if you pay off your balance every month. But the truth is that it does cost you something, because the merchants get screwed and they have to pass that cost on to you.

  • 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.

  • 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.

  • 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.

  • 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">
            <providers>
                <add name="MyProvider" type="MyProvider, MyAssy" connectionStringName="Whatever" />
            </providers>
    </mySection>


    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.

  • 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.

  • 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.

  • 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:
    /WebResource.axd?d=PhPk80h_UWEcbheb-NHNP5WshV_47UOpWqAOl1_li
    UFfN4cNofL74cFlQ1fvpFSf0&t=632573240669964903


    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!


  • Why exactly did I write a book?

    In my last post, I think maybe I set myself up a little with regards to why it is that I wrote my book. So let me explain a bit.

    First off, I never suggested that I wanted to make a living as an author. I've worked in literally every form of popular media except film, and every one of them is a little like being a starving artist. You love what you do, but the pay generally sucks. I never expected writing a book to be any different. That's why I've still got a day job! (Well, not exactly... I'm a contractor, which isn't entirely like a day job. Or a job at all. What is it I do again?)

    That said, I'd like to make it worth my time as well. A-W let me write the book I wanted to write. I think I got a good contract and a good cut, but of course that means it has to sell. If it sells 10,000 copies, I'll be happy as a clam.

    While making a few bucks is nice, my true motivation for this endeavour has always been to teach. I coach high school volleyball and get all of $1,500 for my trouble, but I do it because I love it. I love showing a kid something and seeing the light bulb turn on. In face-to-face training, I get the same thing with developers.

    The truth is that the market I'm after, those people in transition form script monkey to OOP guru, is something that tens of thousands of developers are in. The feedback I get from people who have read it is almost universally positive, and at the level of "it changed my life." No joke. I'm as surprised as you are. Given my background as a professional communicator, I guess I had better get it right!

    The challenge is reaching those people. Ever show someone how to write a class by writing the test first? A practical reason to write an HttpHander? How to inherit and repurpose a drop down list? A simple way to turn Membership plumbing to your own data store? I had several moments like that with "the new guy" at my current project today. Somehow, we (me and the publisher) need to figure out how to reach those folks and convince them this will change their life. The very ad-hoc and reference-style books out there do little more than to reinforce script habits, and that's not helpful. I was that guy four years ago. If my book had been written back then, it wouldn't have taken me so long to get to where I am today.

    I think it has been slow out of the gate, but I do think it can get better. I obviously need to get off of my ass and start contributing more to the community, something I'm very guilty of not doing. With 700 to 1,000 people dropping by uberasp.net, someone must care about what I have to say. I guess I need to start saying something more.

    And I know that it might sound a little arrogant to say that I really get it and everyone should listen. But the thing is, a good teacher is confident, embraces their authority on the subject, admits they don't have all of the answers, and above all, never stops learning. That's me. Like I said... I was the audience just four years ago.

  • Book sales not what I had hoped

    I got some preliminary numbers on book sales in the first three months and they weren't nearly as strong as I had hoped. Feedback from customers has been extremely good, but I don't know that the publisher is reaching the right people, or anyone for that matter. That's frustrating.

  • Air pressure in your computer

    I was listening to This Week In Tech today and I think it was Robert Heron that mentioned a tip he got from Yoshi regarding your computer case. Keep the fan pressure of the intake fans higher than the output fans. By doing this, you don't get dust getting pulled in through every little crack in the case. In the case where your intake fans have a filter, that means you should have virtually no dust in the computer.

  • Simple rich text conquered

    I have a confession to make... I've barely touched POP Forums v8 in a year. Frankly, I'm glad I didn't get too involved because so much changed in .NET v2 beta 2. Anyway, one of the things I struggled with was making a very simple rich text editor that worked in Firefox and IE. I've had one for years that worked in IE, but I haven't even used IE myself in 18 months. Oddly enough, and as best I can tell, my forum was the first anywhere to include rich text editing.

    People ask me, "Jeff, why don't you just use FreeTextBox?" Annoying little bugs aside, the thing has just become too huge and cumbersome. There's a lot of bulk in that control, most of which I don't need.

    There's some philosophical debate I've had with, er, myself, about what kind of formatting to include. Most major forum packages now support text sizes and color, but I don't think I will. I'm not sold on size yet, but color for sure. In this day and age where we change the look of a site with a few CSS tweaks, it seems pretty stupid to allow color changes within the text. "Everybody's doing it" isn't a compelling reason for me to do it.

    So what I've settled on are the basics that are generally useful... bold, italics, links, lists, code and quotes (using the [quote] tag format).  In seven years of running online forums, I've never seen any need for other things that would enhance communication.

    In any case, after a great exchange on the official Mozilla forum, I got it straightened out, and I feel like I'm beyond a silly roadblock. The new control I wrote is fast and beautiful. The one thing I still need to figure out is how to embed graphics into the assembly, and the stream those out of the assembly via an HttpHandler. I'm sure a little Googling will get me there, but feel free to drop links in the comments if you see something.

  • J Allard is my hero

    I'm still a month behind on reading Wired, but there's a great article about Xbox 360 and J Allard. Seriously, this guy is my hero.

    Why? Because he's a badass that says what he thinks. I respect that. I respect that even more that he's able to do it in a huge corporate structure like Microsoft. (And by extension, I respect his superiors more that they'll put up with, and listen to, his foul-mouthed e-mail.) I get the strong sense that his personality is a lot like mine... strong opinions, not content with mediocrity, not concerned about others' perception of him, 30-something, and perhaps walks the line between confidence and arrogance. That's me.

    I tried to work that way once in a corporate environment, while at Penton Media. That didn't work out because it was a horrible yet classic example of a good old boys club, with a bunch of fat old white men that figured the status quo would continue to work. They didn't want to listen to some 28-year-old kid at the time tell them what the Internet really meant.

    What did I have to say? While it wasn't my idea, one of "our" people suggested building a Web-based CRM product for internal use and to sell to our customers. I mean, we were a B2B media company, why not? I pushed the concept around in the business units I worked in. They said it would never work and no one would buy into it (this opinion was largely based on their lack of sales of Web-based ads). Morons. Salesforce.com got there and made people rich. Those assholes all got canned, Penton was delisted from the NYSE, and that was the end of that. I left for other things before it went down.

    I wouldn't say I'm bitter as much as I hate that I worked in an environment where new ideas were never given a chance for discussion. You'd think they'd stand up and listen to the "kid" that sold a domain name for $100k, but they were so stuck in the print world that they didn't understand the company's evolving role for our customers. The key to success is a combination of identifying customer needs and innovating.

    But who knows, if it were a different company, maybe I would've had the kind of success Allard has had. I really admire the guy because, if you believe everything that has been written about him, he's never backed down from the winner-take-all attitude for risky business. Who in their right mind would create a business plan to take on Sony and Nintendo? And walk into a room with Gates and Ballmer to sell it? He's even smart enough to see the potential for other Xbox uses, even if he sees the thing as mainly a game machine. Frankly his vision makes a hell of a lot more sense than the whole Media Center approach. If he has Gates' ear, hopefully he's listening.

    So I raise my glass to J Allard... someone who really gets it.

  • Stuck on v2 ConfigurationSection class

    This will teach me to write a ton of code on the first beta...

    Back in "the day" of beta 1 of .NET v2, I could:

    XmlNode myNode = ConfigurationSection.GetRawXml().SelectSingleNode("myNode");

    Well, that GetRawXml() method has since gone away. How do I do the same thing? Brain hurts getting my head around the changes.

  • Inexpensive SSL, great support

    If you need an inexpensive SSL, try Instant SSL. I've been using them for a few years. When my latest renewal wasn't working, I e-mailed support, got a response in five minutes, on a Friday night (which would be overnight for them... I think they're in the UK). Turns out they updated their root certificate and I didn't install that on my server.

    It seems so rare these days to get that kind of service.

  • Microsoft's recruiting practices

    Interesting article on News.com today about Microsoft's recruiting practices. I wholly agree with some of the assertions made about the company, and it's probably the reason I've never bothered applying with Microsoft.

    The whole "brain teaser" thing in particular is annoying. Yeah, ask me about the obvious stuff that shows I know what I'm doing, but don't play games with me. I'm a grown up. In fact, I would go as far as to say that even a less knowledgeable person with the right personality beats the heck out of a PhD with the personality of a complete jackass. I just hired a guy for my current project who has only nine months of working in .NET in earnest, but it was the little things, some technical, some not, that sold me.

    A company selling itself really is important. This ain't 2001 anymore. The good people shouldn't be expected to feel lucky to have a job. I need to know up front why I should work somewhere, because life is too short to be wasting time in a place where I can't thrive and be happy. Frequently it's the intangibles that are more important than the money. Although money is still good. The more the better.

    I'm sure that the article doesn't represent the way things go everywhere in Microsoft, but still, I've heard enough stories like those to know I'm not sure I'd want to go there. And that's coming from someone that loves the company's products.

  • Annoyed with Enterprise Manager

    I'm really annoyed with Enterprise Manager. When I try to access a database properties dialog, it gives me the world-famous "Microsoft Management Console has encountered a problem and needs to close" error. None of the solutions I've encountered fix it. It seems to have developed since installing the SQL Express Manager, but I'm not positive of that.

    Has anyone else encountered this?

  • Easy, hackable blog/news roll app for ASP.NET v2

    I wanted to bang out a little application that did simple news rotation, kind of a blog roll of sorts. I have a need for this, but everything currently "out there" is overly complex for what I needed to do. So I decided I'd build something that met my needs and give it away.

    So I created CliqueSite® NewsBlog. It's built more in the ASP.NET v2 paradigm with the classes in /App_code and such, and is meant to be easy to change and maintain. It does RSS feeds, categorization, comments, etc. Really simple, really easy to change, really easy to use.

    So where can you get it? I'll let you know soon!

  • ASP.NET v2: Smart between the ears

    I was setting up a handler to parse a particular URL (kinda like this), when I was pleased to see that the link to a style sheet between the head tags of the master page was smart enough to alter it to the correct path. How cool is that?

    Of course, I don't know if it's proper to use the link tag anymore. Is it? I thought you were supposed to use CSS imports instead these days.

  • Tech driving ideas is all backward

    I was going through the stack of "new economy" business rags I've been neglecting and reading about companies that succeed and fail. (Oh, and I know "new economy" is a stupid thing to call them since, uh, 2000, but what I'm getting at is that they're not Business Week or The Wall Street Journal.) I usually get pretty fired up when I read these and I want to do something awesome.

    The business I've been running the past five or six years has been about 90% Internet content related. It has only been profitable (though still debt-laden) for about two years. The thing that comes to mind is the urge to jump-start revenue with something new and exciting.

    But I see myself falling into the same trap that most technology related self-starters seem to fall into... What can I do with the technology?

    That's not right. The tech can't drive the idea, the idea has to drive the tech. We frequently get caught up in software, platforms and products. Certainly these things can inspire us to create something, but they shouldn't dictate how we develop an idea.

    I look at the kind of community sites I run, and I feel I've got it backward. I consider rewriting my forum software to take advantage of the next version of the platform, and never stop to ask myself why I'm doing it. Instead of spending time thinking about what I can build, I should be searching for the ideas that make that community a better idea, and use the technology available to me to support the idea.

    Some day I'll figure it out.

  • Where did Attach to Process... go?

    I installed Visual Studio 2003 on my new laptop, and oddly enough, "Attach to Process..." isn't in the debug menu. What's up with that? Is that possibly a part of remote debugging in setup? I mean, you can do it out of the Debug -> Processes... dialog, but that's one extra step.

    Ideas?

  • Girls want boyfriends with skills, gosh! (So do employers... you listening, Microsoft?)

    I interviewed a bunch of people for a code monkey job I have for the next three months. What a pain in the ass. People suck. They pad their resumes with so much crap then can't answer simple questions.

    And let me take this opportunity to slam Microsoft's certification process. It clearly only teaches people to pass tests (either that or the applicants lie about what certifications they have). When someone with a certification can't give you an example of why you might use an HttpModule, something just ain't right. I don't think that's a very hard question for someone that is supposed to have Microsoft's blessing.

    The ASP.NET community isn't horrible, but I feel that Microsoft isn't doing everything they could to get more experienced people into the world, which can't be particularly good for moving product. The next generation stuff is a mixed bag too. The express products are good. Very good. This ridiculous fragmentation for the rest of the Visual Studio line is beyond asinine, and I'm sorely disappointed and annoyed that Microsoft is sticking to the skus they announced. Not giving every version of VS the testing tools, in a world embracing test-driven development, shows just how much marketing people don't talk to people using the product. Stupid.

    It always seems like two steps forward, one step back.

  • Dude, I got a Dell

    Awhile back I mentioned I needed to replace my HP laptop because of the power connector. I was never really fond of it anyway because it got too hot (regular desktop Celeron), fans were too loud, it was heavy, had two or three annoying bright/dark pixels, crappy video hardware, horrible battery life. It did have pretty blue LED's though.

    I had never really considered buying a Dell, for whatever reason. Still, I posted about the problems I was having and someone linked to a coupon for Dell where you could get $750 off a certain model configured to $1500 or more. So I got mine to $1506.

    Specs: Inspiron 6000, Pentium M 1.6 GHz, 256 MB Centrino chipset, 802.11g, 1680x1050 15" widescreen, 60 gig drive, CD-R/DVD. Not fully loaded at all, but certainly more than adequate for most anything other than gaming. It really addresses all of the problems I had with the HP. Most importantly it runs cool and quiet.

    I've barely used my desktop since I got it. I can park on the couch, the bed, the deck, whatever, and it's a solid performer. For $756, it was an absolute steal. The only minor complaint I had was that I had to blow away the entire hard drive and nuke all of the crap that Dell loaded on it. Seriously, it took several minutes to boot, so I figured it was easier just to start over and download the drivers.

  • How do YOU unit test data access code?

    I see fairly regular, very academic, debates about what exactly you should unit test.

    So how do you test data access code? It seems pretty typical these days to write a class that inherits some abstract class and does all the actual data store touching, so how do you test that code?

    I do it a particular way, sure, but I would rather ask about the typical practice instead of looking silly. ;)

  • An author's validation

    Some person I don't know sent me an IM, and it went like this...

    xxx: Hi, I have been reading your book.
    xxx: I think it's awesome...
    popworldCP: thanks!
    xxx: this book helped me fully grasp the concept of OOP
    xxx: loving it!
    popworldCP: awesome... that was really my mission, and i'm glad even one person "gets it" now.
    xxx: it takes less coding to do something and it's easier to read
    xxx: haha
    xxx: i read well over 7 books on this subject
    xxx: they never fully go into explaining the concept
    xxx: your whole book is about OOP
    xxx: thank you so much for a great book!

    If the book never sells more than ten copies, that made it worth it.

  • Can't install Visio with Visual Studio 2003

    I'm in the process of installing all the stuff on my new laptop (which I previously mentioned, but haven't blogged about the new box yet).

    So here's the pickle... I have Visio for Enterprise Architects, got it with Visual Studio 2002. However, I'm not going to install the 2002 version because I don't need it. I only intend to install Visual Studio 2003, which did not have an updated version of Visio. The problem is that it won't let me.

    There has to be some way around this, and I suspect someone has encountered the problem. A little help?

  • Free POP3 assembly?

    I swear... I have done my share of searching, but I can't find an OK free POP3 class library out there. I know one exists, because I saw it a few years ago. As long as it can split off attachments, I'm sold. I just don't want to write my own... I'm far too lazy for that!

    Suggestions?

  • Why is PHP popular?

    Wow... I have really neglected my self-imposed blogging duties lately. I suck.

    Anyway, a graduating high school kid asked me via IM why PHP was so popular and why I'm a .NET guy. He wasn't trying to start an argument or anything, he actually was looking for an answer.

    I told him that PHP is popular because it's relatively easy to learn. While I don't have any particular data to point to, I think that it's safe to say that the vast majority of sites on the Internet are not maintained by computer science people. These same people are probably not running Match.com either, so a PHP site makes perfect sense because it's easy to learn and serves its purpose.

    And why am I a .NET guy? Well, I probably could've been a Java guy too, but since I started in ASP.old, it seemed like a logical progression. Once you really get object-oriented programming, it's hard to do anything else, especially script. In big, distributed applications, it's just the right tool for the task.

    Normally discussions like that degenerate into pissing matches, but the availability of PHP has certainly been good for the Internet. I don't know why people can't admit that. It's just not something that would work for the things that I do.

  • Laptop follow-up

    I got the replacement part for my laptop power connector yesterday. I managed to get it soldered into place, but it was a struggle because the board is all melted from the short. Kinda scary. It's a little fragile, and I worry about how long it's going to hold.

  • Moblog specifications?

    OK, I need a distraction. Now that my wife has a camera phone, I'm slightly more interested in moblogging. Is there some specification for sending photos from the phones to Web sites that is fairly consistant? Google isn't pointing me to anything really useful.

    Naturally if I'm going to do anything with it, I want to build it myself and not rely on someone else. :)

  • Busted laptop

    My HP laptop has had a problem with maintaining a good power supply connection since I got it in 2003, requiring you to sometimes jiggle the cord at the laptop to get it to maintain power. Finally, yesterday, it stopped working entirely.

    I downloaded the service manual and took it apart, and I was horrified to see that the power connector on the motherboard was entirely broken off now, and that it apparently was being held in place with a small piece of electrical tape! Yeah, it was shipped to me from Taiwan with a piece of electrical tape securing a broken power connector on the motherboard.

    Even more scary is all of the scoring from what I assume was a frequent short. I think I'm lucky the thing never caught fire.

    I'm seriously pissed off about this, especially seeing as how I need the thing for my job. There's no point in me trying to put the thing back together, and I can't solder the connector back on. I can try to find a replacement, but I doubt I can find one that will fit the motherboard exactly.

    Needless to say, I sent a very strongly worded message to HP about this. In the mean time, I have to figure out what the hell I'm going to do, because I can't stop working over this.

  • Inserting text into Firefox rich text editor

    I'm trying to build a light-weight rich text editor that works in Firefox. So far so good, as I have the usual bold, URL, image, etc., stuff working. Where I'm stuck is inserting text. For example, if you want to insert "forum tags" for quotes, which we don't put in as HTML, how is that done? In IE, you can do it like this...

    var box = document.getElementById(ctrl).contentWindow;
    box.document.designMode = "on";
    ...
    function makeQuote(cmd)
    {
    var edittext = box.document.selection.createRange();
    var original = edittext.htmlText;
    edittext.pasteHTML('['+cmd+']'+original+'[/'+cmd+']');


    So in this case, selecting text in the editor then triggering the event would yield something like:
    [quote]this is a quote[/quote]

    How is this done in Firefox?

  • Windows Media is still a poor video compression format

    I was looking at some press release video today that was encoded with Windows Media and it's still pretty horrible compared to the alternatives. It does talking heads really, really well, but when it comes to video with a lot of motion, it's really horrible until you get into high bit rates.

    For example, I recently compressed a few video clips for a client with high motion in QuickTime with Sorenson Pro (the codec generally used for movie trailers) and WM. I was able to get total bit rate with stereo audio at 320x240x30fps to around 120k with only a few minor compression artifacts. To get the same level of quality on WM I had to get the bit rate up to around 400k. What's up with that?

    The funny thing is, Sorenson Pro 3 has been out now for at least three years.

  • I made Wired's Rants + Raves (re: IE)

    So it has been sitting around my house for weeks, but I noticed today that I had the first letter in the Rants + Raves section of the April 2005 issue of Wired. Weird to see your name as the first thing in you read in a magazine.

    Back in my more ambitious journalism days I used to write newspapers and magazines constantly, and I managed to get into virtually every one I wrote to. If I got anything out of being a columnist in college it was an understanding of how to push buttons, especially from the editors. Now I always think about writing but never do. The Wired thing was just a thing where my wife's iBook was sitting next to me so I pecked something out.

  • Set a theme from a MasterPage?

    Am I missing something ridiculously obvious? MasterPage has no Theme property, but it would certainly make sense to me to be able to set a theme at the MasterPage level. Searching the asp.net forums, it appears it can't be done.

    Please tell me this will be changed for beta 2. I just can't imagine having this great feature and not being able to do it at the higher level.

  • My first bad book review

    I got my first bad book review on Amazon. It doesn't bother me that much aside from the fact that the author is clearly not even remotely a part of the target audience. I see that quite a bit in Amazon reviews. I remember one ages ago, I think for one of Alex Homer's books, where the reviewer went on and on about how the book doesn't tell you about this or that, and it was a beginner book! I've always been a fan of his writing style, and if it wasn't for him I don't know if I would've ever started coding again.

    Fortunately the feedback I've been getting via e-mail has been pretty good. A guy from Spain, despite an apology about having poor English skills (apparently he's never seen teen chat-speak by American kids?), simply said, "I get it now." That's the greatest compliment I could ever get, because that was always the intention of the book.

    Now that I've been away from it for awhile, I think the one thing I would do differently is perhaps do another example chapter that applies basic OO concepts. I went with the data access/container object example because the thing I've seen more than anything in bad code is repetitive data access, though I'm kind of a hypocrite because I rarely combine data access and some kind of object representing the data into one thing anymore. Then again, perhaps that's a natural progression for a learning developer. It certainly was for me.

  • Spring fever is setting in

    Now that we have our last snow storm out of the way (and the idiot driving that comes with it), it looks like we might finally be enjoying spring here on the North Coast.

    This makes working a real pain, because being indoors in this kind of warm and sunny weather is absolutely intolerable. I'm only working this contract part-time and it's still killing me!

  • What do you do for miscellaneous data buckets?

    What do you do when an application has to store extra data that varies? For example, some customer data requires number of cats, others require number of felonies. This is not data I need to search, and I can obviously sort it pretty easily in business objects.

    How do you store it? I thought that the ASP.NET v2 scheme for profile data was kind of clever. I also suppose you could dump some simple XML into a text field in the database.

    What would you do?

  • Software rights... you have only one

    My last post about the wacky open source nuts wanting to rewrite their BIOS brought out the typical responses. One of the recurring themes was about what you have a "right" to do. Bah. You have only one right with ANY product: To not buy it.

    Whether it's software or a bag of Idaho potatoes, the only implied agreement between you and the vendor is that you don't have to buy it.

    Software comes with an agreement, terms of use. Software vendors invest money into creating something, and to ensure that they get a return on their investment they have conditions for its use. If those are terms you can agree to, you can buy the software. If not, you don't buy it. All of these peripheral discussions about being able to "fix" it or whatever are irrelevant. If I want to sell software, I'll do my best to accommodate the end user and meet his or her needs, but at some point I'll make some level of compromise to ensure that my neighbor can't duplicate what I did and cut into my revenue. I've got a mortgage and cats to feed.

    Clearly a lot of people don't agree with that, and that's why we have things like Linux out there. I'm cool with that. I say it's great that the market can accommodate that. However, if the rest of the world really wanted or needed that, then we'd all be code monkeys and we wouldn't buy software.

    Let's get something straight here... I work with Microsoft products. Not only will I admit that, I'll proudly declare it, and I even wrote a book about ASP.NET. That said, in my entire career, technology has never been the reason for any business failure I've encountered. Not even once, and I've been laid-off more times than I care to mention. People tank businesses and fail. Rarely is software, or any technology, the stumbling block. If you really want to look at business risk, look at the people.

  • Open source isn't any less evil than corporations

    Inspired by the story on News.com about people wanting open source BIOS (and the ensuing discussion), it occurred to me that the open source zealots aren't any more evil than big corporations, except that the corporations actually get paid. :)

    What is all of this nonsense about freedom and power anyway? Richard Stallman, who has left the realm of computer science and actual consumer markets and migrated to religion, wants the ability to do whatever he wants to his BIOS. Well good for him, but what does that have to do with consumers? I can't get computer users to find the power button, and this guy wants people to have access to their BIOS? Good God, I'm a developer and I don't care about the BIOS, or even the innards of Windows for that matter. Thanks, but I'll gladly plop down my $80 for Microsoft to figure out how to build an OS for me.

    The whole notion that Microsoft is inherently evil is stupid. Stallman says he wants to "escape" from the evil companies. Huh? If you have to escape from something, that implies you're trapped. Anyone here feel that their computer has trapped them? Sure, I could use open source software, but there isn't anything I can't do with my Windows computer or my iBook. Seeing as how I'm a developer, and I have higher demands than John Q. Consumer, I'd say that's far from being trapped. Even my parents, running Windows 95, seem to be able to do whatever they need.

    And that's where Stallman doesn't get it. The market dictates what it needs, and companies make products to meet those needs. The open source folks are like a loosely coupled company too, and if they'd spend less time waving their flags and find leadership that can stand up and say, "Hey, the market needs this," then we'd all be using Linux and Microsoft would be shaking in its boots.

    Here's a newsflash... every year computers and other devices become less about geeks and more about everyone. The success of things like the iPod came about because it solved a problem and a pre-schooler could use it. Linux has had no impact on the desktop because the average person can't install it and can't maintain it. I'm not suggesting that a Windows install is easy and flawless, but your chances sure are better with it.

    Imagine for a moment that consumers could change the firmware on their toasters or refrigerators. Do you think anyone would care? Of course not! The market reality is that people don't care about the innards of a machine, and computers are becoming more and more like that every year. Consumers want it to turn on and work. Gates has been saying for years that people want stuff that just works (so has Jobs, for that matter). If you can do that better than Microsoft and Intel/AMD, then I'll use your product.

    Until then, keep the religion in church and come back to market reality.

  • Real work getting in the way of community work

    I got all inspired and wrote a quick article yesterday because there are so many things that I learn, practically every day, that I'd like to share.

    But this contract gig I'm on... it kind of gets in the way of sharing. By the time I get home I just want to watch TV or read something from dead trees. The work isn't hard... I've yet to write any code or even requirements after billing north of 80 hours. It's just that leaving the house and being around software all day makes me less interested in my little pet projects. I hate that, because my personal projects allow me to both share expertise and serve as the foundation for bigger picture things (like a long-overdue CoasterBuzz rewrite).

    Alas, this is still the first gig I've been on in five years that I feel is interesting and has good people to work with. While I could afford it financially to just up and split, it's not professional and I don't want to leave these people high and dry. They've been dealing with bad software for years, and I want to save them.

    A month ago I was planning out how to waste time this summer, and somehow I got sucked into working for a client I like. What a strange world. This fall, one way or another, will still be all mine.

  • RHS on Hungarian notation

    Whoops, I closed the window that had the other blog that referred to the one I'm referring to (got that?), but RHS has a good post on why Hungarian notation doesn't make sense in the modern world.

    I have to admit that I used it, and it was a throw back to when I had to use VBscript in ASP.old pages. I made the mistake of having code samples out there using it today and I still get blasted for it, and justifiably so. Early last year I finally let it go because I was lazy, and because the contract I was on (auto insurance giant Progressive) adhered strictly to the standards set in various Microsoft docs.

  • Frans gets it too, about communities

    I think Frans more or less agrees with me in his post, although for slightly different reasons, that Microsoft sponsored communities are a mess of doomed kingdoms. I already said my peace about it.

    The only thing I might slightly disagree with is that all Microsoft initiatives are doomed to fail and that the people in the trenches really drive the community. I don't totally think that's true. Like I said, eliminating duplication of effort would be a good start.

    I thought GotDotNet was very cool when it started, and my login there is one of the earlierst. I racked up hundreds, perhaps thousands of posts. Then it stopped working because the site was (and still is) a poorly coded mess that doesn't work half of the time. Then I stopped going to the ASP.NET forums because they weren't working half of the time. I guess the reasons there were technical, and not community driven at all!

  • Amazon's affiliate program can make you a buck or two. Who knew?

    Naturally I have Amazon affiliate links all over creation for my book, partly to promote it and partly to make an extra $1.50 or so on every copy I sell. Truth be told, I've only sold a little more than a dozen copies in the last three weeks.

    The shocker is that people still went on to buy all kinds of other weird stuff, and I'll get a nice check from Amazon for my trouble. The stuff I ended up selling was 80% things not my book. Classic CD's like String Quartet Tribute to Godsmack and a Barbie doll with light-up wings. Weird.

  • Yet another little Microsoft kingdom

    The latest Microsoft kingdom: CodeZone.

    I don't get it. No one at Microsoft talks to each other about anything. I've mentioned more than once that Microsoft takes several directions at once, all in the name of entrepreneureal spirit, when the company could get it right and consolidate resources and build real live centers of activity that eliminate the duplication of effort.

    For example, ASP.NET is my thing. I can get information about it on asp.net, GotDotNet, MSDN, Channel 9, this new site, and God knows where else. Isn't that a little ridiculous?

    I've seen it posted many times over that getting anything posted to the "proper" Microsoft sites is a pain and takes forever, so these little projects have launched all over the place. That's great, but the resulting mass chaos of URL's is the polar opposite and just as bad. Surely there must be some kind of middle road?

    Someone in Redmond needs to take charge and resolve this. Lots of little kingdoms do little more than water down the overall value of what the company could be doing in a consolidated fasion. No one should have to visit a half-dozen sites to figure out what's going on.

  • Video and the Internet

    Scoble has been talking about video on the Internet lately, which got me thinking a bit in a retrospective manner. Long before I became a code monkey and author, I was a broadcast monkey. I was one of those rare types that did it all, from air talent to engineering.

    When I made the professional transition around 1999, broadcast video was really just starting to make a widespread conversion into the digital world, and even then that was only with regards to acquisition. Sony had its DVCAM and Panasonic had its DVCPRO (what I used in my facility), and consumer miniDV was catching on, if a bit on the expensive side. DV-based video editing more or less sucked, because the only thing any normal people could afford was Adobe's horrible Premier. To really get things done, you needed something from Avid or Media 100.

    Today I use Avid's Xpress Pro HD, which is a fabulous product that shares the same interface as the stuff used right up to feature films. They're stubborn about hardware compatibility, but really no one can touch what they have. It's hard to believe a software-only solution is really this good. Ditto for Apple's Final Cut Pro, which I haven't done anything more than play with but it certainly seems really solid.

    Figuring in the Internet has always been an interesting process. Video distributed over the Internet is still of marginal quality (in my broadcast eye), and because of all of the compression, you can't edit or remaster it without killing the quality. Anything under native DV isn't usable for further production.

    Of the various formats out there, Windows Media is OK for talking heads, Real blows if for no other reason than the player is a bloated piece of crap, and QuickTime, in my experience, still gives you the best bang for the buck. You can do simple HTTP streaming with it, and the Sorenson codec is still at the top of the heap. There's a reason most movie trailers are released in this format. People pay me money to encode video, and I always get them the best quality in QT with Sorenson.

    Broadband penetration sure has made things easier. You can do really nice stuff on the Internet at a resolution that can actually be seen as something more than a low-resolution slide show. Thank God that old modems are becoming more rare with each passing year. Access and bandwidth are probably still the biggest limitations to distribution of video, but I'm encouraged by lower pricing for the connections and computer hardware. We've still got a long way to go.

  • In and out of work routines

    That contract job I was excited to start has more or less stopped because the client is enduring several IT issues outside of the scope of the app I'm supposed to architect, so I've been at home for a week. Last week it wasn't a big deal, especially since I spent the weekend in Baltimore for volleyball, but they're still not pitching the "big picture" proposal until later this week. That's annoying.

    My biggest beef is that I got all excited that I'd be able to really knock out my taxes without having to endure any huge financial hit because I'd have this extra work. The blow will certainly be cushioned, but I could still use the extra cash to support the J-Pizzie lifestyle.

    My own business, the ad-supported and subscriber supported content stuff, is not doing particularly well because of really soft ad sales in the first quarter. I'm sure it's just a phase, but the timing stinks. It's totally offset by stuff I sold directly, but I was kind of hoping the direct sales would have been more of a bonus.

    Since this is already a rambling post, I guess I'll throw in that I'm trying to use this week to be disciplined and get POP Forums v8 rolling along. Last week I moved all of the caching code out of business objects and into the data access layer. With SQL 2005 and the new cache dependency scheme, it seemed to make more sense having the caching there where it can play to the strengths (or weaknesses) of any built-in capabilities that the data store might have. I haven't had any time to play with SqlCacheDependency, so I don't even know if there's any advantage to using it over the scheme I've been using. That's a project for another day, way down the road.

  • Microsoft marketing got it all wrong with VS 2005

    I think that finally, years later, we can finally put the name-everything-.NET fiasco behind us. But our friends in the marketing division of Microsoft have managed to get it wrong again. I'm absolutely astounded how the product development teams can think up great things, be in touch with the world, and listen to customers, while the people down the hall can't get even a single clue.

    There has been a lot of chatter about it, but I see two particular issues.

    The first is that the entire Visual Studio product line has been fragmented to death. The differences between standard and pro are silly enough, but the Team System skus are even more ridiculous. Collaboration my ass. Whether it has been in a small team of two or in a giant corporation, I've always had to have all of the tools on my computer to get the job done. That includes requirement management, defect tracking software, testing software, quality tools, Visio, Office, the IDE itself, etc. The arrangment of the VS skus pretends that we all live in these discreet little spheres and never cross into other areas, especially the VSTS products. What a shame.

    The other issue is the one about the server product for Team System. That one doesn't stick quite as close to home, but it's still certainly an issue. How it's tied to MSDN subscriptions is even more ridiculous, and the consultants get the short end of that stick. Seriously, what's the fear there? We've been getting the enterprise version of SQL Server for years. You don't think we're using that kind of thing in production, do you? Why would it be any different for this new server product? Good luck getting that into the enterprise when consultants can't even get their hands on it as part of their subscriptions.

    Congratulations to the development teams bringing these products to us. We're glad that you've been listening. Now go kick down the doors of the marketing people and blast them for wasting your time.

  • Microsoft to developers: Here are the toys, now let the grown-ups play

    About a year ago I was chatting with an MS evangelist that felt pretty confident about the future pricing of VS 2005 and the associated tools. To his credit, he was right in some respects. The standard and pro versions of Visual Studio are certainly more affordable than they used to be and address a certain market.

    But what they really did is pushed off what we already had and made it less expensive, and decided to charge more for the really useful stuff that makes it worth the upgrade. Look at the feature matrix. Can you spot the problems? I don't know about you, but the idea that users of the standard or pro versions don't need unit testing is absurd. Look around, Microsoft... everyone is doing test-driven development these days. It's as essential as the debugger.

    I guess the reason I'm so annoyed is that I, like a huge percentage of developers out there, have to wear many hats. I'm more often than not a one-off developer and/or architect working in a team on a contract basis with my own hardware and software. I need all of these tools so I can get away from the nightmare combination of NUnit, NAnt, VS, etc. So unless I can score an MVP nod for my projects or site (something not getting any easier by making posts like this, I'm sure), or for being the author of an ASP.NET book, I have to shell out more than two grand for an MSDN subscription to get what I really need. I refuse to believe that my situation can't be duplicated among thousands of other developers.

    This is the kind of thing that makes for such great fodder among the open-sores zealots. For those on the fringe of choosing a platform, this is not exactly going to make Microsoft a slam-dunk for anyone.

  • CliqueSite.Ads Beta 1 available for download

    I've posted the first beta of CliqueSite.Ads. You can download it here.

    This version will time bomb on July 1. So far I've been able to tweak it to the point where it can easily serve about 1.5 million ads per day on mediocre hardware, so for the bulk of future customers that need only a couple hundred thousand per day, this will take care of you, no problem. I've been running this on my production sites doing around 150k impressions per day, and that's on the same box as several forums, content management apps, SQL Server on the same box, etc.

    I'm not sure how it will be priced, but I'm certainly open to feedback on that.

  • Are Comcast and G4 run by 13-year-old kids?

    Just when you thought it couldn't get worse, G4 has decided to rename The Screen Savers, formerly the best tech show anywhere on TV, to "Attack of The Show."

    Do you ever wonder who is running that network? They obliterated a well-known brand, alienated and dismissed an audience that bought BMW's and Oracle software instead of monetizing it, and decided that running video game shows all day, every day, most of them repeats what a good idea.

    Rarely do I say that I want a business to fail, but this one should. They deserve it. No media acquisition in recent memory has made less sense than this. Read the various blogs of the people that either got canned or left, and it gives you a good perspective about what goes on there. Paul Allen should be ashamed for ever having sold the network.

    The irony in all of this is that the one last TechTV hold-over is X-Play, and it has gone relatively unchanged. It's ironic because TechTV did that one show better than G4 did the rest of the network.

  • I suck at project estimation

    Today I sat down with the project manager that I'm working with on this contract project to figure out how long it will take to build the product. Actually, all we really did is map out the time for requirements, which we're pretty sure will actually take more time than the actual development (as well it should be).

    But based even on our preliminary SWAG on the client's needs, and a look at the horrible system we're going to replace, I have such a hard time guessing how much time it will take to build. With solid requirements, my feeling is that it shouldn't take more than six weeks. All of the hard work will be done in the requirements and design process.

    As kind of aside, what do y'all use for requirements tracking, and does it have some kind of bug tracking capability as well?

  • "Wicked" dead at 33

    I saw on Frans' blog that Billy "Wicked" Wilson died at age 33. He was the creator of Voodoo Extreme, a gaming site that, as he would say, "kicks more ass than Gary Coleman on a crack binge." It was essentially a blog site, back in the days when no one knew what the hell a blog even was. He linked you to the good stuff, every day, and gave you his opinion the way few people could. I think he coined the term "thimble dick," which to this day makes me giggle.

    VE eventually got too big in that era where great sites got expensive to run and the advertising dollars just couldn't cover the expense. I don't know the specifics, but apparently he nearly lost everything, got divorced and the domain was eventually sold to IGN. Some of the stuff I've found indicates he was too proud to ask his audience for money. He fairly recently co-founded Gaming Groove, where you'll find several postings about his death.

    Billy's version of VE really inspired me, and honestly it was the reason that I started CoasterBuzz. He demonstrated that you didn't have to be a corporate tool or follow traditional media conventions to attract, entertain and retain an audience. It was editorial-journalism about the journalism and the gaming industry.

    Details on his death aren't clear, but he was apparently sick in the hospital for a few days. Regardless, it sucks. He is survived by his ex-wife and son.

    Edit: Apparently he died of liver disease...
    http://ve3d.ign.com/articles/596/596034p1.html

  • Maximizing ASP.NET: Real World, Object-Oriented Development is shipping!

    After bugging Amazon a bit, and worrying about it, Amazon is finally shipping my book.

    You can order the book here.

    Thanks to those of you that offered encouraging words in the last post, and indeed in the 16 months that the project has been on my mind. If you're interested in evaluation copies, I suppose you'll have to contact Addison-Wesley directly. You can't have any of my copies. :)

  • Microsoft listens, even when you're not talking to them

    In a post from Tom Arnold, PM and ninja for VSTS Test, he says in response to my post that the stuff I didn't like about the testing stuff will be fixed in beta 2. Rock on. That's good news. In particular I hope that they deal with the clickable trace output. That would be sweet.

    See, Microsoft does listen. For all the crap MS catches about being arrogant or monopolistic or whatever, I tend to think they're humble and want to build products that customers actually want. I've read nonsense about how all this tool integration is designed to give the company a "stranglehold" on the market and lock people in or something like that, and I find that outright stupid. Put aside the fact that Microsoft is not a charity, but it behooves them to build stuff people want. How crazy is that?

    I'm reading the Head First Design Patterns book (you know, the one with the cute barefoot blonde girl on the cover) right now. It's actually a Java book, but if you know C# you can mostly get it. While I bought the book to find something not dry and boring to formalize what I thought I already knew, as an aside I see more than ever how Java-like C# is. And I say, who cares? Java is C-like, so it's all evolutionary. I don't recall anyone at Microsoft ever saying, "We created this new thing that no one ever thought of."

    I guess that tangent is just to comment that I still see people post stupid things like "M$" and hate on the company for no good reason other than it's fashionable. Microsoft does listen (unless you're a disgruntled non-evolving VB6 coder), and in a world where open source gets all kinds of press, you can be damn sure that Microsoft will continue to develop products people want. What alternative do they have? If they don't, they'll eventually die.

  • Online book retailers are weird

    Someone pointed out to me that Bookpool already sold out of my book, which means either they didn't get very many copies or they sold a bunch. Meanwhile, Amazon is sitting on a mess of pre-orders (via my affiliate link) and telling people it won't ship until the first week of May! What's up with that? The book is clearly out because a few people already have their copy. I've got a bunch too!

    I'm nervous as hell about the success of the book, not because of any financial reasons, but because I really want it to help people. I'm still confident there's a strong audience for it and the marketing message I think is mostly right. I guess like anyone that produces some kind of work, I need to let it go and let the world take care of it at this point.

  • Criteria for deploying .NET v2 beta 2 apps

    Trent asked, "What is your plan for evaluating Beta 2 when it comes out? Do you have a general set of criteria before you decide on using it for production code?"

    In terms of the tools, honestly they were mostly working better than the RTM of VS 2003. I'm already sold there. As a Web jockey, having an HTML editor that won't f-up my code is a nice change after years of the super-nasty 2003 version.

    In terms of the framework itself, I don't have anything that I think I'm ready to put "out there," but when I do, I'm basically looking for the ability to perofrm under load for days, not break, and pass tests. I'm not that demanding. Or am I? :)

  • Back to NUnit I go

    I gave the unit testing facilities in VSTS the old college try, but it's not good enough (see previous post). I can't possibly work with it if I can't debug running tests.

    I realize we're still in the early stages for the product, but I just can't imagine having to go on using NUnit, NAnt, Cruise Control, etc. in the typical development process. Hopefully Microsoft can address some of my concerns, because I doubt I'm the only one.

  • Unit testing in VSTS: Good and bad

    With Scott's suggestion, I decided to install a newer build of Visual Studio 2005, namely the one with Team System in it. I had been using the older beta 1 just because I wasn't really using VS 2005 much anyway since finishing my book. I was most interested in the unit testing, and Scott's suggestion that the testing framework ran in an ASP.NET context. Here are my impressions thus far:

    Good:

    • Configuration just works. I copied the would-be web.config to app.config in the test project and the tests had no problem getting data.
    • No need to leave Visual Studio.
    Bad:
    • Test attribute names changed from NUnit. Stupid. I can't think of a single good reason for this.
    • Looking at the stack trace from a failed test doesn't let you click a code line number the way you do on a failed build to go right there. Right-click -> Go to source code sends you to the test code from the trace, which is almost never the real source of the error.
    • The UI in the test explorer kind of blows. NUnits did this better. I tend to group my tests in a class that tests a class, and I like to be able to test just that test class. You can group the tests by class, but then there's no box to check for just that class.
    • Assert.AreEqual fails. Expected: <1>, Actual: <1>. Huh?
    • If there's a way to test in a Web context, I don't know how to do it. As per my last post, I don't know I can test to see if Server.MapPath("~/whatever") will work.
    • If there's an obvious way to attach the debugger to the testing framework, that isn't obvious either.
    Honestly if I could figure out those last two points, I'd be sold. I realize it's beta software, of course, but the documentation out in the world is kind of thin right now. A gold star to anyone that can fix those last two problems. :)

  • Wrox network programming book reincarnated

    Back in late 2003 I suggested a friend pick up Professional .NET Network Programming from Wrox Press. He never did find it, as I think that was the time when Wrox started to go down the tubes, but as it turns out, he found that Apress got their hands on it.

    Looks like it was reorganized a bit, but I'm sure it's still a good read, if for the chapters on the stream classes alone. Check it out.

  • Still annoyed with unit testing Web app components

    I'm sure I remember blogging about this a year ago, but I'm still annoyed with trying to unit test Web components. It's still hard to test something specific to such an application (like when you call HttpContext.Current.Server.MapPath("~/somefolder") for example).

    I know the ASP.NET runtime can be hosted outside of IIS, obviously, but has anyone come up with a really good base class to derive from for Nunit tests?

    Look at me, I'm worrying about this on a Saturday evening. I sure know how to party!

  • Diggin' on ASP.NET v2... today it's configuration

    With a little help from Fredrik's blog post, I finally got around to cleaning up the configuration and data provider parts of POP Forums v8. I seem to have broken a few unit tests here and there, but I can deal with that. Wow... this is stuff I've been away from since last fall, and I just haven't had time to revisit it.

    In the last six months or so I kind of got bored working with v2 because, well, I had stuff to build for real to use in production! It's fun to come back to it though, and I'm starting to get excited about it. I'm actually kind of worried that my book came out before beta 2 did, because I cover a fair amount on Membership and Profile, among other things in there.

    The next thing I'm looking most forward to at this point is the Team System stuff. It will be nice to have a lot of those tools integrated into the product instead of having to have several things running outside and via command prompts and such.

  • Apple: Brilliant minds, stupid lawyers

    In case you didn't see it, Apple won the first round in court to get the sources of leaked information to some Apple fan sites. That's not right.

    Just because it's not The New York Times doesn't make it any less journalism. If The Times posted the same information, nothing would ever come of this. You know I'm right. This nonsense about what is a "bona fide news agency" is ridiculous. If there were any real standards to hold a news outlet to, Fox News would have been sued and disgraced years ago. Indeed, this same standard must be applied to The New York Times, ABCnews and my local Medina County Gazette. The precedent has been set.

    The most disgusting thing about it is that Apple suffered no loss, and more than anything benefited from the publicity. The information wasn't leaked early enough for any competitor to act on it, and just as is the case every time there's a leak, it built hype for the company.

    This is about chest thumping at Apple, sticking it to the guy with no lawyer. That's really lame, Steve. Taking on your fan base is a really stupid idea.

  • Reverse engineering Membership: Help me out

    I've been looking at the code for the new Membership API in .NET v2, using .NET Reflector (I love that tool). It's all very fascinating, but there's one thing I still don't get. How is the Membership class' static Initialize() method ever called? That's the method that creates instances of the providers, and I can't for the life of me understand when it gets called.

  • Working for The Man isn't so bad after all

    When I quit the last day job I had last May, I was fairly bitter toward The Man. I had some odd realization then that The Man had been keeping me down and beating me into submission. Going solo was a liberating experience in that respect, because there was no one to tell me what to do.

    Two weeks ago I picked up a contract job because I need extra money if I'm to avoid getting IRS'd into oblivion. Was I reluctant to take it? You bet. The money thing didn't even concern me as much as I thought I was failing myself in some way, falling just short of generating enough income to pay taxes.

    These last two weeks have changed my perspective. For one thing, I might be working on a W-2 basis, but everything is structured in a traditional contract consultant format. I work when I want, and unlike a contract, I can walk away whenever I want. It's just like any other gig only the checks are made out to me instead of POP World Media, LLC.

    The other thing is that The Man isn't always evil. Heck, this time it's not even a man! The client of the company I'm working for is full of good people that care very much about their business and want experts to help them get where they need to be. One of the execs even ordered a copy of my book, even though he has no idea what it's about! Working for good people makes you work harder and take more pride in what you produce. That's a good feeling.

    It's exciting to work part-time too. I'm finally at that stage in my career where I can work 20 hours a week and still make a nice bit of coin, so combined with what I'm already making from my own business, it's not about the money. Getting paid feels a lot more like a bonus for doing something I like, and this from someone that doesn't do anything free unless it's for charity.

    The bottom line is that The Man, for the better part of the previous six years, was an asshole, and that's what made me hate working for other people. When The Man is good people, it changes everything.

  • Amazon bait-and-switch with shipping

    You've seen it before when you buy Amazon merchandise. "Free super saver shipping." You also see something like, "Usually ships in 24 hours." So you would think that at least snail UPS will take a week from when it ships, like the next business day. Nope.

    I asked them what the deal was on a recent order and they had this to say: "The shipping method selected for this order is our free Super Saver Shipping option.  As stated on our web site, when you choose Super Saver Shipping, you can expect your order to take a few days longer to ship out than if you select our standard shipping option."

    Well if the type of shipping dictates how long Amazon sits on the order (which makes no sense), then they need to stop posting "usually ships in 24 hours" right under the "free super saver shipping." The type of shipping should only affect how long it takes from the time it leaves the DC to the time it arrives at my door, not how long they sit on the order doing nothing. That's lame.

    That's bait-and-switch.

  • The angry VB6 folks are still around!

    Read this post about how VB6 r0x0rz and VB.NET suX0rz. I thought we were beyond this back in 2001.

    Speaking of 2001, that was the year I first got my hands on .NET, bought an MSDN subscription on employment and played with VB6 for the first time. VB6 was really neat stuff because it was comfortable, like VBscript was for ASP. Meanwhile, as I got deeper into ASP.NET and VB.NET, it became more and more clear every day that to use .NET I had to think differently. I struggled with that even after switching to C#, and probably didn't really start to "get it" until early 2003. But hey, college journalism major here. No CS background. Once you go OOP, you don't go back.

    It's true... VB.NET is not VB6. I say, who cares? VB6 had a ton of shortcomings, and its "forgivingness" was the root of exceptionally bad code everywhere. I think VB6 was a liability because people tried to do too much with it, thus its reputation.

    But anyway, the linked post is filled with fun quotes. "It's 'basically' impossible to migrate programs written in earlier versions of Visual Basic to the .NET version." OK, assuming for a moment that's true, why do you need to migrate it at all? Corporations are still maintaining COBOL programs from 20 years ago (twice the age of VB), because they still work.

    "But those product managers aren't the poor bastards faced with rewriting millions of lines of source code to reinvent crucial applications, nor do the Microsofties have to swallow hard while they lose dependable business logic refined over decades." There's a cliche about wheels in there somewhere. :) Oh, and VB1 came out in 1991. Maybe he uses a different metric for decades.

    "...with the release of .NET, I'd be farkled, fubar'd, and frazzled. Like many other developers, I don't have the time, energy, or desire to un-learn the substantial skills I've acquired in over 20 years of coding with Microsoft Basics, and re-learn some new thing that's marketed as Visual Basic, but is, in fact, radically different." Give me a break. Fire up the VB6 IDE and tell me how it's anything like QBasic. Ha! And "un-learn?" Would you forget how to speak English if you learned Spanish? I have to admit that even as an author (I try to work that in whenever I can now!), I am not that clever. Yet, despite my lack of formal training, my lack of cleverness and my general disregard for the hardcore academics of computer science in general, I managed to achieve a commanding position in terms of pay and respect in just a few short years. Not bad for a guy that used to spin top 40 CD's on a really bad Cleveland radio station. If I can do it, certainly someone with "decades" of experience can.

    As for the petition, good God, let COM go. I mean seriously, it was a nightmare. To me it was even a barrier to entry into writing really useful Windows software. Why register controls when I can, uh, just copy them?

    Good times. Bring on the flames.

  • A retrospect on writing a programming book

    It's still so weird to see this bound book here with my name on it. My wife (who kept her last name, and of course has the dedication in the book) noticed that the spine simply says "PUTZ" and that's bound to get at least a few people to look it over. ;)

    I first wrote the proposal, sample chapter and preface for the book back in November, 2003. On December 16, 2003, I sent the proposal out, unsolicited, to every publisher I could find contact information for. I felt that the idea was solid, to write a book that took beginning ASP.NET developers solidly into the realm of object-oriented application development, instead of script-based, one-off page development. I felt that forums everywhere were filled with developers struggling to make that transition, and that market was being ignored.

    I only got two responses back after sending the proposal to a dozen publishers. I won't say who it was, but the first one was absolutely brutal (in a non-helpful kind of way) and unprofessional. I was shocked to get a response with incorrect spelling and poor grammar, and frankly would expect that they wouldn't manage a first-time author very well anyway. This was a major publisher too.

    The second response I got was from Addison-Wesley Professional. This was about the time that they started publishing all of those .NET books with the spiffy checker-board style covers. I felt they were quickly becoming the new Wrox Press in terms of covering .NET subjects in a very complete way. The editor there said she was sending out the proposal to various folks for editorial review, and she'd send the responses in a couple of weeks. At that point, even if no one liked it, at least I wasn't having my dreams crushed by one grammatically challenged guy not in touch with what was going on in the world.

    In mid-January, eight reviews came back. Two of them were anonymous, and not flattering or helpful. The rest were critical, but helped enormously in getting me to think about how to revise the proposal into something more marketable and more focused. Most of the reviewers felt I was on to something, but revisions were in order before moving forward.

    Most intimidating was a review from Alex Homer. It's not that he wrote anything awful, it's just that this is the guy I credit with getting me out of the dark ages of static HTML. It was his ASP books that started me down the path. Now I wanted to write something to sit on the shelf next to his books? That was a little scary to say the least.

    Based on the feedback, I revised the proposal, it went through another round of reviews, and in March I got to read those. While some were contradictory in terms of what each reviewer thought the book should be, they were overall a lot more positive. The executive editor pitched the proposal to the sales and marketing folks, and in April I got a contract. I was going to be an author!

    In early May, I quit the contract job I was working at Progressive to focus on the book. My time there heavily influenced my decision in particular to devote some time to test-driven development. I had some basic familiarity with the subject, but once I saw it in action on the scale that it was being used there, it seemed not only like an important topic, but one that made a pretty obvious case for developing applications in an object-oriented manner. The point of the book was, after all, to get the audience thinking in those terms.

    Editorial reviews began on a rolling basis as I submitted a few chapters at a time. By September, the book was essentially "done" in the broad sense of the word. The following months would lead to more editorial review and revisions, until it was finally ready for production I think in October.

    The copy editing was surprisingly painless. I expected the editors to hack apart everything I had written, but that wasn't the case. They made a lot of things more clear (which makes me look good), and so much of it was stuff I was too close to notice. That was really cool.

    I think it was January that I got the first PDF's of the laid-out book. Tracking down errors at that stage was pretty easy, I assume because whatever automated process they use just makes really obvious mistakes.

    Then today, when I got home from a morning meeting with a client, there was the UPS package at my door. What a great feeling to finally hold the thing in my hands. I'm really pleased with the result. The entire process, however long, was really a great experience. I love that AWP helped me develop the project early on, then run with it once we had a solid outline. It really is a classy organization, and it's an honor to have my name on the same spine as the A-W logo.

    Would I do it again? Absolutely. I have no idea what I'd write about, but I'd love to do another one. I did write a proposal for another book, but it appears the timing is pretty bad as there is a predictable flood of new titles on the way and being developed.

    As of right now, if I never saw another dime for the work (outside of the advance), it would still be a success in my mind. On the other hand, if I'm ever going to write another one, this book better sell well enough that I don't get dissed. :) The way the crazy royalty payments are worked out, I won't see anything more until October for sales in the first half of this year (yep... that's 22 months after I wrote the proposal). While this project has never been about the money, it will be nice to see what at this point just feels like "extra" income in the fall. Oh, and remember, I get an extra $1.20 or so if you buy via my Amazon affiliate link!

    I can cross off one significant thing on my life-long to do list. :)

  • Do you use SharePoint for requirements management?

    The company I'm contracting for is trying to formalize its requirements process to something beyond a folder full of Word documents. They're exploring a lot of options. There are some who are already saying we must use Rational RequisitePro, but that feeling seems to come from people that have never used anything else.

    I'll be honest, I've only encountered ReqPro myself. It's not horrible, but I wouldn't consider myself a fan. I've seen articles here and there showing how to use SharePoint in this capacity, and I have to say that I like that idea because of the familiarity factor.

    Does anyone have any stories or advice to share?

  • Lame amateur site-o-the-weak: PlayersARC

    Any site that blocks you from using it based on the browser you use deserves public humiliation. Today's example: Players ARC, a college recruiting site. Go ahead, check it out in Firefox or on your Mac.

    http://www.playersarc.com/

    In fact, I might as well slam them for their ridiculous business too, which preys on the hopes and dreams of kids that don't have a snowball's chance in hell of being recruited for a college sport. I coach junior Olympic 17's in volleyball, arguably the most competitive level below college, and I can tell you that all of these services are crap, setting up false expectations. If you're curious to know what your chances are to play in college, I wrote an article that pretty much sums it up here.

  • How do you make your datastore as versatile as your code?

    I'm not an expert on design patterns at all, even though I use them even when I don't realize it. It just happens in OOP. (This is a good time to mention that the Head First book is surprisingly awesome for a topic that's otherwise a snoozefest. The examples are Java, but easy enough to get if you know C#.) I certainly have no problem coding stuff that applies different business rules and logic depending on what you throw at it.

    Where I struggle a little is the persistence of data. For example, I'm on a project now where it's clear that different data will be required in certain cases for certain customers, but I can't anticipate what those new data items will be. Modifying the structure of the database constantly is not a very good option.

    How do you deal with that? If I suddenly have a new group of customers that need to track a user's hair color, what do I do in terms of my database to accommodate that?

  • R.I.P. TechTV

    Comcast obviously has given up trying to save any of the TechTV audience. They've officially switched the name to G4, "Video Game Television."

    Bastards.

  • Dogfooding is good for the soul

    John Lawrence posted some stats about the use of Visual Studio Team System internally at Microsoft, referring to the practice of "dogfooding," or using your own products internally before you ship. I totally believe in doing that to make better software, whenever it's practical.

    For me, virtually everything I've been involved with personally was developed for something I was doing. POP Forums has been that way from the start, as is my forthcoming ad server, CliqueSite.Ads. The only real negative is that sometimes I'm not as open to the feedback of other users, because it generally works just how I want it to work. :)

    I think that building something that will be used by developers, like an IDE or an open-source Web package or whatever, opens you to more scrutiny than you might otherwise get from consumer shrink-wrapped stuff. It's a tough audience. All the more reason to spend time with the product you want others to use.

    I'm starting to get excited about VS 2005 again. It's exciting to see beta 2 just weeks away, and I have to say that Team System offers a lot to be excited about. I might have to get an MSDN subscription again (unless someone knows who to talk to get authors hooked up).

  • ComponentArt's Menu control sure is cool

    I'm not sure if you've seen it before, but ComponentArt's Menu control for ASP.NET sure is cool. I first encountered it in SmarterMail's Web interface, and I have to say I'm seriously impressed. It works in all of the normal browsers and it renders pretty fast.

    For about $700, you can get a license to redistribute all of their controls, royalty free, and I think that's a bargain. Sure, the pages in which you use these controls get a little fat, but for the beautiful, rich UI they generate, I think it's well worth it. The hassle of getting this junk to work when you try it yourself is a pain.

    Anyone else have an opinion about these controls?

  • U.S. education sucks, and other observations

    When the top folks at Intel and Microsoft think our education system is, to understate things, inadequate, I think that's a good reason to sit up and listen.

    All the bullshit accountability that the Bush administration, and to a certain degree the Clinton administration, has forced on the public school system has done is force schools to teach kids how to beat standardized tests. I know it's a common complaint for young teachers that they feel like they've become a slave to this nonsense.

    On my current contract gig, I work with an Indian guy that also spent a lot of time in Singapore. Culturally, he found it odd that I have no formal education in computer science, but accepts that I've made up for that in terms of real experience. Still, he makes a strong case for off-shoring not in terms of cost, but in terms of available brains.

    One thing he said that struck me as not-so-obvious is that India and Singapore spent so much time under British rule that one of the biggest influences that came out of that was one of European education. He feels that India's constantly expanding middle class exists because there's so much emphasis on learning technology trades, in the way that the U.S. once emphasized industrial trades. The problem is that we never switched our focus. There just aren't as many well paying blue collar jobs around anymore.

    Personally, I see the failure of our educational system every day on the message boards I run. I don't want to call the kids stupid, because I don't think that's it. They're just so incapable of forming complete, written thoughts (with actual grammar and spelling) that what they say is not readable. Heck, my wife sees this failure all of the time as a graduate assistant grading undergrad papers.

    What's the solution? I don't actually know. I'm not suggesting that we should be a nation of rocket scientists, but if we don't get our shit together, we will fall desperately behind the rest of the world. Trade issues can't be solved by legislation... we're living in a global marketplace now.

  • Jeff: The architect? Another twist in my career

    Yet another unexpected event in my ever-evolving career...

    It was an interesting day at the contract job. It became obvious to me, and anyone else that saw it, that the ASP.NET project we were given to do a face lift on is in dire need of being scrapped entirely, along with the backend system and Windows app that go with it. It's the most poorly designed application ever. I hesitate to even call it an application.

    After an "I saved your ass" security fix that unintentionally made me look like a hero, we explained the state of things to the client over lunch. While certainly not happy about it, I think they started to grasp that if they want to continue growing the way they have, they're going to have let someone rebuild their system, and do it correctly.

    So what does this have to do with me? Well, the project manager asked if I felt comfortable in facilitating the requirements gathering and design of a new system. That's somewhat tricky because this is the client's busiest time of year, and frankly they have no requirements. The possible plan he laid out was perfect, as it would likely not be a full-time thing (given the limited availability of the client's experts), it would be a chance to be the point man on the architecture of an enterprise-class system, and I would continue working on an hourly W-2 basis (something I insisted on because it's a lot harder to take advantage of you).

    While I've been exposed to plenty of giant and grand application plans (the mother of which is easily the one I was involved with at Progressive), it has always been a following role, not a leadership role. I've had leadership and management roles many times before, but generally at a lower level in the grand scheme of things. This would be the first time that I get to actually decide on how to build the beast. The scale is much bigger than what I've had to do for previous gigs (and personal projects) where I was the architect. This could be a remarkable learning experience.

    Earlier this week, I felt as if I had somehow failed as an entrepreneur because I went back to a job that required me to put pants on in the morning. Now I'm starting to realize that perhaps I've been a little too critical of myself, and when I take inventory of the last two years, I've come a long, long way.

    First off, I went from negative revenue in 2003 to a point where I made enough to at least survive (if not live the J-Pizzie lifestyle). During the last year I wrote a book and didn't do much else. Even without a bona fide business plan going forward, there's still plenty of opportunity for growth. Generating a coulpe grand in profit a month for doing a few hours of work a week is a good start.

    Second, about five years ago, I wasn't a code monkey at all. See previous points. That's a hell of a shift to make in terms of career.

    Third, going back to a day job hardly makes you a failure when you've built your qualifications to the point that recruiters are calling you or sending you e-mail every day. Boy did I feel stupid when I realized that. I have friends that wish they had that problem.

    In any case, I made a lot of realizations today about myself, my career, and most importantly, what kind of experience and work would better qualify me to do certain jobs or even allow me to be better prepared to work for myself. Recognizing your deficiencies is such a ridiculously obvious way to better yourself, even though it's not always obvious!

  • How do you persist enumerations in SQL Server?

    This is one of those developer pulse questions. How do you prefer to persist values from an enumeration in your database? I've seen people suggest using its corresponding numeric value as well as a string.

    And for those of you really looking to the future, how do you do it for SQL Server 2005? If I understand it right, since you can use your own types in the database, it sounds like a good idea to do just that. What I'm not sure of is how you deploy the enumeration from your humble dozen lines of code to something that lives in the database.

  • Yahoo says: No SOAP for you!

    Yahoo's new Web service API is pretty cool, but they say they aren't supporting SOAP.

    My first gut reaction was, "Lame!" But then I thought about it, and I guess it's not that a big deal. Let's face it, the XML exchange for something like getting search results isn't exactly complex. The only bummer is that lazy jerks like me can't pop in the WSDL and crank something out in five minutes.

    I'd really like to see what MSN Search comes up with. Their results are still hit or miss, but the frequency of getting irrelevant results is dropping like crazy for me.

  • First time in an office in ten months

    I started a one-month contract gig today, and it's the first time I've been in an actual office in about ten months. I agreed to take the gig because it's largely on my terms, and I still maintain a large degree of independence, aside from the fact that doing the work requires me to be there to interact with a very small team.

    At first glance, I'm not sure if the project has a high chance of success, but since I'm not a stakeholder and it's so short-term, that doesn't really bother me. They understand that I have strong opinions and will give them if I think they're going to tank everything. They were so adamant about it being an at-will contract that it's good for both of us. If I don't like them, or they don't like me, either party can quit at any time. It's amazing how much more honest that seems to make everyone.

    In the mean time, I need to finish up CliqueSite.Ads and get that out to the people that volunteered to test it (2 million impressions a day on crappy hardware, baby!), and some other little miscelaneous things. I also need to schedule my book launch party, although that might have to wait until April at this rate.

  • If you want help, start by helping yourself

    I got an IM today from a guy trying to get POP Forums to work. At first he was just asking if I had the Visual Studio solution file to give him. I insisted he tell me what the problem was first, and after some coaxing, I finally got him to tell me about the error he was getting. One class or another was defined in more than one place, so I knew he obviously had the compiled assembly in there along side of the one he was compiling. Rookie mistake, no big deal. Everyone made it at one time or another.

    Then nothing would happen, he'd only get empty UI. He again started asking me for a solution file. He was being persistant and kind of rude, but I told him to ditch the autoeventwireup="false" from the page, as I knew that was the problem. Again, rookie mistake, but also one mentioned in the readme.

    Next he started getting an "object reference not set to an instance..." or something like that. I told him to fire up the debugger and see where it was happening. In the back of my mind, I think I already knew it was a missing element in web.config, but again he wanted me to do the work for him, and running the debugger wasn't an option for him. Maybe he didn't know how. Beats me.

    Regardless, he then began telling me my install instructions suck and I have no pride in my product and whatever. What good is it if no one can use it, etc. I was more than a little taken aback, considering he got the code for free. I'll be the first to admit it's not something flawless, but a little basic ASP.NET knowledge should get you up and running pretty quickly. I get enough e-mail from people using it that thought install went pretty smooth, so I'm not inclined to think it's a lost cause.

    I politely told him that he had a funny way of asking for help and that I was done talking to him.

    As someone who has done a fair amount of training for other developers, even at the introductory level, I have a fair amount of patience for people who don't quite get it. Heck, that's why I wrote my book. However, the "teach a person to fish" metaphor certainly applies, and it's one I stick by. I've forged some really good relationships with people that want to learn and help themselves. I have literal tolerance for people that don't want to do the work though.

    Anyway, speaking of the book, it looks like it will start shipping in less than two weeks, ready to ship to distributors on or around March 3. I'm really excited, as it will provide some much needed motivation and confidence. Please buy it. Tell a friend. :)

  • Weather.com still suX0rz teh big one!!!!11

    I did give them a chance and send them feedback, but the crack monkeys at The Weather Channel still haven't fixed their site. My local page 90% of the time has some kind of HTML problem that prevents most of the page from displaying, including the ever critical radar.

    The worst thing is that they have to be losing out on ad revenue, unless they don't actually have any way to audit what actually gets displayed. I'd be kind of irate if I was an advertiser.

    What weather site do you use? One of our local TV stations has a fairly useful site.

  • Successful tweaking

    Last night's tweak fest and refactoring yielded really significant results. As I mentioned, it was session capping ad delivery that was bringing me down, and I think I've resolved that issue. On my old cheap hardware I've been able to get an average of 1.5 million ad impressions per day under a simulated load. Disk isn't getting overwhelmed, CPU time is around 75%, and delivery is under 0.1 seconds. I could easily push it harder, probably to 2 million impressions per day.

    I wish I could get my hands on some real hardware to see how it would perform!

    I think there are a few more areas I can tweak. I'd like to get to 3 million impressions per day on my ghetto box.

  • Shameless plug: Looking for contract work

    If anyone out there is looking for someone to do short-term .NET contract work, please drop me a line via the contact link at left. I'm pretty flexible as long as I can work electronically and don't have to move anywhere!

    Jeff needs a little work to pay his taxes on time!

  • Performance tweaking is fun!

    CliqueSite.Ads is coming along, finally. My intent to date has just been to make it work and perform well enough to meet my needs. It does that no problem, but I'm ready to really beat on it and tweak it a bit.

    So far my biggest bottleneck is in checking for frequency and session capping. It drags down performance to about 20% of what it can do otherwise. I'm not surprised, really, because it's checking user data against the entire impression table. I'm not sure how I'm going to overcome that. I could do something in-memory for the session tracking, but then I couldn't use it in a farm. The overall frequency capping has to be in one place. Regardless, there's no reason in either case to have to do that count every time. I'll have to think about a faster way to profile users.

    I like tweaking stuff and even refactoring big parts of an app to work faster. That explains why I briefly got addicted to overclocking my computer (before I realized that I was already getting framerates higher than my monitor could display in Doom 3).

  • Google: Doing evil?

    There's a lot of noise over Google's new toolbar function that puts new links in pages for "relevant" information. While they (for the moment) indicate that it's mostly harmless in terms of what they want to link you to, it sure sounds like something that Microsoft caught a lot of crap for a few years ago. More to the point, as someone that makes 90% of his living from the sites he publishes, I'm not a big fan.

    My biggest issue is that I've worked hard to keep people visiting my site, and hopefully even clicking on ads now and then. I've done a pretty good job of cultivating an audience that delivers a lot of impressions considering the relatively small potential audience overall. I don't want people to have a reason to go elsewhere. (For the record, I also have alternate means of revenue, including premium/subscription content.)

    Of course this all comes to the age-old debate about who owns the bits after they come down the wire. I'm not naive enough to think that I should have full control of that content when it lands on the client, but I'm not going to side with the inevitable response from Google that will go something like, "It's good for our customers." (Where have we heard that before?)

    It will be interesting to see how this pans out in the court of public opinion.

  • How do I find the application path in an HttpModule timer?

    Here's a pickle (to me, anyway)... How do you determine an application's path from an HttpModule inside of a running timer? I tried the obvious by passing in the application context and looking it up from Request.ApplicationPath, but that works only when the app first starts (which makes sense since there is no request when the timer fires). Code looks something like this...

        public class Module : IHttpModule
        {
            public void Init(HttpApplication application)
            {
                timer = new Timer(new TimerCallback(this.myMethod),
                    application.Context, TimeSpan.Zero, new TimeSpan(0, 15, 0));
            }

            static Timer timer;

            private void myMethod(object sender)
            {
                // this works the first time, but not on subsequent calls
                string path = ((HttpContext)sender).Request.ApplicationPath;
            }

            public void Dispose()
            {
                timer.Dispose();
            }
    }

  • XML in .NET is not that scary

    I have to admit... I don't use XML that often in anything I do. I mean, I use Web services frequently, but you don't need anything more than a fundamental understanding of XML to use them (that and an understanding about efficiency in the resulting SOAP messages).

    But when I do have a need to use XML for something, whether it be writing or reading an RSS feed or making some little widget to write and read configuration files, it never ceases to amaze me how easy it is. I think it's one of those things for Web developers that, if the practical example is there, would be learned right off the bat. I had been using .NET (ASP.NET, specifically) for more than a year before I had any reason to think about XML in .NET.

    Thinking back to the various books I was reading at the time, honestly, I skipped over most of the XML chapters. Sorry authors... you just didn't give any compelling reasons to read them. Hopefully authors of future beginning ASP.NET books (or new editions) will come up with more practical applications to encourage n00bz to dive in and use this stuff. It's useful for so many things.

  • Introducing CliqueSite.Ads

    I mentioned that I was building some ad serving software, and I think I'm ready to start getting it out there. CliqueSite.Ads is nearly in good enough shape to put it in the hands of some people that are willing to test it. If you're interested, please drop a comment here or e-mail. The best I can really do is give you a free license when it's done.

    I'm not yet sure how I'll price it and license it. I want it to be affordable because this stuff isn't really brain surgery, it's just time consuming to build. I will say that other similar products (those based on .NET, anyway) are ridiculously over-priced.

    CliqueSite.Ads can serve most ad formats that I can think of. It will do any size, pop-ups, rich HTML, etc. It does frequency and session capping. It aggregates data so you don't end up doing massive counts for every little report. The only thing I haven't added that might be useful is day/time blocking to restrict ads to certain times.

    Like I said, if you're game, drop me a line! I hope to get something out by the end of the weekend.

  • Props to a useful PHP application

    I've blogged about good ASP.NET apps before, but I wanted to point out one written in PHP that I like. This one is for the Ohio Valley Region of USA Volleyball, the region that I coach in.

    The region is the largest of any of the regions, with around 14,000 members. The regions (and USAV) is the governing body for junior Olympic volleyball, and the girls program makes up the largest portion of the membership. It's the girls juniors section of the site that I use the most. In addition to being a great resource for the bookkeeping of the giant membership pool, the app is also used to schedule tournaments and officials, register teams, show real-time results and rankings, etc. Like any good data-driven app, everything is cross-referenced.

    For example, my team is listed here. It shows my roster and our registration numbers. It also shows the tournaments that we're registered for. You can see what the current rank is for your team in your division. That in turn links to tournament results listed by team (we don't have our first tourney results posted yet). You can also shop for tournaments and check an event page to get directions and other info, as well as see which teams you'll play. You can even e-mail club directors and coaches associated with a particular event.

    It's not perfect, of course. There are some slow pages here and there, but considering that the whole thing is run by a volunteer, it's good stuff. The other real issue is that it's hard to get people trained to use it correctly. For example, there are only two tournaments listed on my team page. We're registered in more tournaments, but the tournament directors don't have us listed yet with our registration numbers, and therefore they don't show up. We used to have a lot of issues with results getting posted quickly for the same reason. Still, it's getting better, and it's easily the best site of any of the regions.

  • Looking for more examples of custom config sections in .NET v2.0

    As the title suggests, I'm looking for some more detailed articles on how to programmatically mess with a custom configuration section in v2.0. I already get how to derive from ConfigurationSection to make various attributes in the section's opening tag, but it's not clear to me if there's an easy way to put elements inside that section (like add, remove, vegetarian, naughtyWords, etc.).

    Can anyone point me in the right direction? Unfortunately the current docs still don't have a code sample.

  • What's up with POP Forums v8?

    I had really hoped to have the base class library for PF v8 finished by now, but alas, it has taken a back seat to other stuff. I had to get my ad serving software more in order to setup some campaigns I sold, but the good news is that the "distraction" may actually lead to software you can buy. It's a lot cooler than I thought it would be.

    The original plan was to get something quasi-functional out by the time Whidbey beta 2 was out, but I don't think that's going to happen. I'm not content with the way things are in terms of features and architecture. I don't want to just hash out a Whidbey-ized v7.x, so I'll take some time with it. Perhaps I can get it done in time for the RTM.

    Someone asked why I don't just open it up as a collaborative effort. There are two reasons. First is that the forum continues to be my lab and my education. This thing has been with me now in one form or another for six years. The second thing is that it must meet my needs first. It currently serves as the basis for nearly all of my sites and various projects I've worked on in the last few years.

  • No go on second book proposal

    I got word from the publisher of my first book that they're not interested in the proposal for my second. That's a real bummer. They say it wouldn't stand out enough, despite the fact that it had an endorsement from someone inside of Microsoft.

    I partly think that maybe the marketing folks just aren't in touch enough to understand why they're wrong. That's not so much their fault as much as it is mine for not pitching the concept in terms they would understand. The book is essentially an end-to-end case study book that follows the development of a product from idea to publication, including requirements, design, how to do test-driven development and solutions to at least a half-dozen problems that you encounter in practically every app.

    Oh well... I'll keep pitching to other publishers and she what happens. One way or another, I'm going to get it "out there" even if I have to publish it myself. It's a natural next step to my first book.

  • I don't like being tested

    I talked to a developer today that was checking me out for a recruiter. Unfortunately, he was one of these jerks more interested in trying to establish his superiority than finding out what I can do. Don't quiz me about some obscure design pattern that you read about in some book. I'm not impressed.

    I'm a problem solver, not an academic. I make things work, and acquire knowledge as it's required of me. That's how I roll, and so far it has served me pretty well.

    After encounters like that, I don't think I can go back to cubicle hell.

  • MSN Search is good for everyone

    With the MSN Search service officially going live, I think it's a great thing. I love Google, and they're good at what they do, but they're far from perfect. I'm sure Microsoft is far from perfect as well, but the point is that having a little competition should light a fire under their collective asses to do it better. Who will win? Who cares? If it leads to better search I don't care.

    I mentioned before that I'm conditionally more fond of MSN Search at the moment because three of my sites are top-four in the listings for their primary search terms. A number 1, 2 and 4. I can't complain about that!

  • I'm done! The dead trees are six weeks away.

    I signed-off on the last proofs from my book today, er, yesterday. I'm done! The book will be in my sweaty little hands in about six weeks or so. There will be a party, and oh yes, it will be good. I'm finally feeling accomplished.

    Even though the book has acknowledgements, I'd like to point out here in the community that Brian Goldfarb, the product manager in the Web Platform and Tools group, is the man. He was my connection to Microsoft while writing, and he kept me in the loop on changes despite what I can only assume is a ridiculous schedule. People like him are the reason that we have such cool toys to play with for a living.

    On to the next thing... I wish a publisher would hurry up and pick-up the proposal for my next book. Must strike while the iron is hot and I'm still motivated enough to write another one.

  • CoasterBuzz.com turns five-years-old

    On January 30, 2000, I launched CoasterBuzz.com, a news/portal site for roller coaster enthusiasts. It was kind of a hobby, but it was something I wanted to be a big deal in the long run.

    Back in those days, there were new coaster sites every day. It was hard to keep track of them, so I figured having a directory for them was a good idea. It was also hard to keep up on news from around the industry, so having a central place for that seemed like a good idea. We were doing similar things at Penton Media back in those days for the vertical markets we covered, so in terms of design and content, I didn't need to do anything radically different. The more interesting twist was that news would come from not just traditional news sites, but also from these niche enthusiast sites out there.

    Five years later, it hasn't changed much. It has been rewritten two and a half times since its launch (the half coming with changes to POP Forums). It still serves many thousands of visitors every day. It's also home base for an enthusiast club, CoasterBuzz Club.

    Keeping up with it has really been easy most of the time. The day-to-day time requirements of running the site aren't significant. I spend probably less than an hour a day looking for news, since most of it is user-contributed anyway. Moderating the forums isn't a big deal either, because for the most part the community is self-governing. I can't remember the last time I had to delete something inappropriate, aside from the occasional spamming incident.

    Hopefully the site is at a turning point. Back in the days when I spent a lot more time on it (because content management wasn't as easy at the time), I used to have to spend a lot of money as hosting costs went up and ad revenue went down. These days, there's a lot of money to pay back from that era, but expenses are relatively insignificant compared to what they were. If I could only pay off that business credit card, life would be grand.

    The highlight of running the site these days is probably the events we do. In particular, we have a great event at Paramount's Kings Island every year that is a total blast. Last year we had well over 200 attendees. I'm not the hardcore enthusiast I used to be, but I enjoy spending a full day in the park on that day.

    The site is more of a business than a hobby these days, and I'm happy to see it thrive. There is certainly a revision in the site's future, but it's more of a function of my writing projects than it is a deliberate need to update. The site doesn't really define me the way it used to, as my interests have diversified quite a bit over the years. I need to keep in mind though that the site has been the testing ground for so many other things I've done professionally, not the least of which is write a programming book. It deserves my ongoing attention since it and its community are bigger than my own needs at this point.

    So after five years, I hope that there will be five more. In terms of the Web, not many things have stuck around that long. It's weird to realize that there are things (other than my marriage) that I've really committed to long-term. :)

  • Hooray! Someone pre-ordered my book!

    Someone followed the link to my book on Amazon and pre-ordered it. Now if only 10,000 more or so people order it, it will be considered a "reasonable success" according to those familiar with the publication of computer books.

    Remind me in October to thank everyone who ordered when I finally see some cash for it! :)

  • Who is the crack monkey at The Weather Channel?

    The Weather Channel changed the layout and organization of their local pages again. Whoever is in charge of usability or approved the changes should be fired. What a mess.

    The old layout showed the current conditions, the radar and the 10-day forecast. It was very convenient and told you really everything you wanted to know, right there. Now, there's the local conditions, some pointless Flash below it, some totally irrelevant text ads that I don't even see, a 36-hour text forecast (with a link to a very poorly laid out 10-day with irrelevant graphs), more ads, then finally the radar.

    Can they show more advertising now? Yes. Is it effective? Hell no. With the old layout, there was a prominent 300x250 ad that was a great tool for branding. I could tell you, for example, that there was a Claritin ad there during allergy season. Now I can't tell you what's there, because I'm searching all over the damn page for the information I wanted (everything in the old layout).

    Like I said, someone should be fired.

  • Copyright, community and common sense

    I noticed (via Scoble) that Microsoft is giving this guy a hard time regarding some screen shots for the next mobile OS. I hate to say it, but that's pretty lame.

    Microsoft has gone a very long way to open up their development process and get stuff out into the open early. Most of the program managers and leads that blog think this is an awesome practice, because they're getting real customer feedback much earlier in the release process than they ever used to before. It's good for Microsoft, and it's good for customers.

    But then you get lawyers involved. A part of me always wanted to be a lawyer, because I love to argue, but it has become the profession of ill-repute. Here's a guy being given a hard time for something that is out there on a PowerPoint. As far as I'm concerned, the gloves are off at that point and it's a bona fide news event and the standards of fair-use in reporting should be applied. If that's not the case, then it shouldn't be put out there for public consumption.

    I realize there's a time and place. I'm on an NDA list for ASP.NET and tools stuff, so I could get the right information while writing my book. That's a lot different, certainly, and I of course would never reveal anything told to me that wasn't put out there for public consumption. But this guy was treated poorly, and it's a step backward in an era where code monkeys are finally respecting Microsoft and its products.

    In the amusement industry, which I cover for CoasterBuzz, there are two kinds of amusement parks you run into. The first kind want total control over everything, and won't allow you to post anything. The second kind will announce a new attraction, send you photos and video, invite you to construction tours, and basically do whatever they can to foster a fan community. While one could argue that these communities are a relatively small portion of your audience, are they really when the rate of information dissemination is so fast? That's a hard question to answer, but when you're Microsoft, pushing around the community is certainly not going to win the hearts and minds of anyone.

  • AOL cutting off Usenet

    Yep, it's true... AOL is ditching its Usenet service. My feeling is so what, but then again I feel very different about Usenet.

    Usenet is nearly useless as far as I'm concerned. It wasn't always that way, but spam and trolls have destroyed it. There were a few groups I used to visit now and then, but I quit years ago. There are better Web-based forums out there.

    It comes down to moderation. On one hand, Usenet is mentioned in the same breath as being totally free of moderation or its authority, but just as anything else that grows in number of participants, those numbers inevitably bring in the poor element too.

    It's not the death of free speech. Any idiot can put up a Web site these days (I'd know!).

  • Can you believe we get paid to play games?

    I just saw a TV spot for some "school" that teaches game development. This goofy girl and a typical diverse group of kids are all sitting around at computers playing games. It's hysterical. I love when the girl says, "Can you believe we get paid to play games?"

    And if you're lucky you'll get to work at EA and kiss your home life goodbye! :)

  • Long beta periods yield better software

    There was a time where I would bang out a change to an application, see that it basically worked, and bust it live to production all in the same day. For the most part, this isn't a horrible practice when you're using test-driven development, but it's not a great practice either.

    For example, I've been sitting on a minor forum upgrade for about a month. After a week or it being in production on one of my sites (which I generally use as a live test), I saw one particularly odd problem that wasn't covered by my tests. Then last night I found an issue with a regular expression that was tagging the CPU big time.

    Would it have been a tragic failure to release it a month ago? Not by a long shot, but I am saving customers (not that they're paying me) the trouble of having to find the problems and then wait for an upgrade.

    In this respect, I don't think it's such a bad thing for Microsoft to have really long beta periods. I know they've caught some flack for that. I can't be the only person that remembers Windows ME. I'll concede that I wish .NET v2 was out yesterday, especially Visual Studio, but look at how horrible that designer in VS 2002/2003 was. That should have never been released.

    The definition of "on time" has to find some middle ground between adequate testing and getting to market in a timely fashion. Getting crap to market (like RollerCoaster Tycoon 3) by a deadline and having it suck is frustrating for customers.

  • The CPU-eating RegEx

    The following Regex takes upwards of five seconds to get through a couple paragraphs of text:

    text = Regex.Replace(text, @"(.*)((?<!(\A|<blockquote>|</blockquote>|</p>))(<blockquote>|<p>))", "$1</p>$2", RegexOptions.IgnoreCase | RegexOptions.Compiled);

    I'm at a loss to explain why, because I've never had any expression choke like that. I theorize that it might have something to do with the "or" options in the groups, but I don't know for sure. Or perhaps something is causing it to recursively scan the entire text over and over, I'm just not sure what.

  • MSN Search using ASP.NET v2 Profile? Nope.

    I was just reviewing the proofs for my book chapter on ASP.NET v2.0's anonymous Profile feature and wondered if perhaps MSN Search was using it for the storage of settings. Looking at the cookies stored, it would appear not because the cookie names have "SRCH" in them. Still, there are GUID's in there, so they are storing the settings on their end.

    Oh well, it just would've been super cool to see them using an off-the-shelf ASP.NET feature, a beta feature at that, for their killer search app. Certainly they'd be using their own Profile provider, but still, it would've been a neat thing to see!

  • Nofollow seems a little silly to me

    So in the grand spirit of "we'll show them," the major search engines agree to treat hyperlinks in pages with rel="nofollow" differently as an effort to combat blog comment spam. I can't be the only person that finds this a bit silly.

    First off, the spamming is most obviously automated. At this point, it's still going to go on anyway. Second, at least on the .Text system, we can moderate or delete the comments anyway (which we know about instantly with the e-mail notification). The stuff doesn't stick around long enough to ever get indexed.

    People are acting like there has never been spamming on the Web in cases where anonymous posting can take place. Give me a break. It has been going on for as long as discussion boards have been around. The only reason anyone cares now is because everyone has a blog that they own, unlike the countless message boards they visit but don't own. I especially find it funny that some people go as far as to say, "My blog is important and visited by millions, and a single link can skew page rank!" Wow.

    The whole discussion misses the point: Free advertising is free advertising in the mind of spammers. It doesn't cost them a dime to send out thousands of e-mail messages, and it won't cost them a dime to spam thousands of blogs. I don't have the answer, but this certainly isn't it.

  • Getting play from MSN Search

    The various Webmaster forums and search engine optimization gurus are all abuzz about MSN Search. It would appear that its results are starting to find their way into the mainstream MSN site.

    I couldn't figure out why CoasterBuzz had two 12,000+ visitor days in a row. That's normal for the summer season, but not January. A peak at the stats, and now I know why.

    I'm not married to Google, so I'll have to give the MSN Search a try and see what kind of results I get next time I'm looking for something. Plus I can feel good that something with .aspx in the URL got me there. :)

  • Free MPEG to DVD burner?

    I've been looking for a simple, free download that will burn an MPEG file to DVD. I use BeyondTV as my DVR, which happens to make nice .mpg files that are easily burned to DVD using more advanced authoring software. I just want something that takes the .mpg and burns it sans chapters or anything like that.

    Any suggestions?

  • The ugly process of dealing with headhunter and recruiting agencies

    I've got my resume out there. I'm open to short-term contract jobs if they're a good fit, even though I'm hell bent on being mostly self-sustaining. I don't even mind going through a third party to pick up the gig. However, it's getting too hard to find the good stuff in all of the noise.

    The problem is that so many agencies put the commission over the fit, and that drives me nuts. It's not good for the employee or the client. If you can't tell me specifics about the job over e-mail, I'm not interested. I have wasted so much time over the last year responding to agencies that have crap I don't want. Which part of "short-term local contract for ASP.NET or C# development" sounds like "contract-to-hire VB6 in Louisville?"

  • The obligatory "what I'm up to, in case you're wondering" update

    Weird that I haven't posted anything in awhile. I guess it's because I think some of the "in the moment" thoughts I have would not generally be interesting to anyone, but then again this is probably the one thing on the Internet that I don't care about in terms of who is reading it.

    I'm making a little progress on my ad serving software. As I mentioned at some point previously, it works fabulously well on the serving side, it just had no admin UI. I need to figure out a way to really test the crap out of it. I probably will sell it, so to do so I need to make some statement about its scalability. I'm not going to pretend it's Doubleclick DART for your own use, but to date it has had no problem serving millions of impressions per month without breaking a sweat. I have to decide when it starts to sweat.

    I'm reviewing the PDF's of my book. It's seriously weird. It's finally starting to feel real. Bummer that it won't feel like I really get paid until later this year! Publishing is a very weird business in terms of schedules. The good news is that it appears it will be more pages than I expected. Not that size matters, or something.

    Self-employment taxes suck. I think I'm going to need to sell a few of my FUN units to pay taxes. Seriously, the only thing that keeps me from feeling really comfortable in working for myself is that damn check I have to write once a quarter.

    I need to write an app to do event registration for CoasterBuzz Club. To date I've posted PDF forms and had attendees send them in with checks or credit card info, and that's a bit labor intensive. It should be easy enough, but the biggest issue is that events essentially have four prices depending on whether or not the attendee is a club member and whether or not they have a season pass to the park where we're having the event.

    I hoped to be really pressing forward on POP Forums right now, but that's not moving along as fast as I hoped. I haven't fully documented the requirements, so I haven't done much else. One of my more experienced coding friends said I should take comfort in knowing that the fact that I'm endeavoring in requirements at all shows I'm a "grown up" developer. I think that's good, right?

  • Real book pages, good will, and a career crossroads

    Yesterday I got an e-mail message out of the blue from one of the people that did some of the editorial reviewing for my book. It was a very kind message in which he congratulated me on writing the book and said he thought it was going to be a big deal. It was really nice, and unexpected.

    Then today I got my first proofs back of the laid-out book. I can't even begin to explain how weird that feels. A year ago I wasn't sure there was even the slightest chance that I'd ever write a book, but here it is. In another two months or so it'll be a pile of dead trees in my hands that I can show to my friends. That's really, really weird. I hope it doesn't suck.

    This week also marks the first anniversary of the week I started the last day job I had. It was a contract job at Progressive. It was a really big deal for a really big deal company. I ended up leaving that job after five months for a number of reasons. The biggest reason was the book. It was just too impossible to research, write and go to a job that was an hour each way. The other reason was that I was stuck in an area that really wasn't right for me. They have a really outstanding IT organization, and they have absolutely brilliant people there. The problem was that, working through a contract agency, I couldn't just get to the right position the way I could as an employee (the HR folks there don't like to lose anyone, they will get you to a place where you're satisfied with your job).

    So I've been "self employed" since last spring, and it has allowed me to really enjoy life in ways that I didn't think were possible. Generally speaking, I've been more relaxed, notice more of the subtle things in the world (like bug noises outside, for example), and I'm getting better, more focused results than ever out of my volleyball coaching. I'm writing better code too!

    The only real sticking point is that I'm not making quite enough money. I'm spending more than I'm making. When I finally see some royalties from my book (assuming it sells well), then things will be a little easier, but until then I need to find something else to generate a little revenue. My ad serving software is almost done, so a few licenses a month would help there. One of my frequent clients is trying to throw a little work my way. I've got an ad sales campaign underway for one of my sites, and I've got a few sold campaigns in the pipe (that won't see money for a bit). Surprisingly enough, short-term and part-time contractor jobs aren't as easy to come by as I thought. Everyone wants you in on a year or more, and I can't commit to that if I sell my next book.

    So this is it. This is the year, or half-year, where I figure out whether or not I can make it on my own. Will I continue to do things my way, or have to go back to The Man? Stay tuned...

  • Sumi Das on CNN

    You may recall that Erica Hill made her way from TechTV to CNN Headline News as an anchor. Well, the absolutely lovely and very smart Sumi Das, once the host of Fresh Gear on TechTV, has made it to CNN as a reporter. I saw her today reporting from the presidential inauguration grounds.

    I hate to talk about her as a pretty face, but I totally had a crush on her when I first got TechTV at home. I loved when she had the little bob, but she's still quite striking with long hair.

    Thank God another former TechTV personality has moved on to much better things.

  • Old code can be scary

    In replacing the payment gateway I was using, one of the things I did was replace an ASP.old script. Ugh... how did we get anything done in those days? Looking back now, I can see why someone with an object-oriented background would want to use COM objects as much as possible. Sure, installing them was a pain, but not any worse than dealing with that awful script.

    Slightly more pleasant, but not entirely unscary, I decided this week to actually finish the ad serving software I half-wrote back in 2002. Basically the scenario was that I needed to write something quick to serve a campaign I sold at the time. I wrote the serving part, but didn't write a single line of UI code, so I had to do everything by manually plugging stuff into the database.

    The code wasn't horrible, but there was a lot of room for improvement and a better approach. I was able to refactor it pretty quickly into something I was comfortable with, and some initial testing shows it'll perform a little better.

    I have a new found appreciation for reporting the statistics though. Millions of impressions create a lot of data. Data warehousing is not something I have a lot of experience with, but creating aggregate data on a regular interval seems pretty straight forward. The biggest decision is figuring out how much detail is really necessary. I'm guessing hourly stats are fine.

    I know I've mentioned this before, but I wonder if revisiting old code ever becomes less scary.

  • PayQuake and Authorize.net versus my prior processor

    After nearly five years, I finally dropped GoEmerchant.com and Nova as my credit card gateway and merchant account bank. For reasons I couldn't understand, the gateway went unchanged for the entire time I was a customer, never improved. I think it was physically even the same server. I signed up a client through them and it was a totally different interface. Never got the referral credit for it either. They were too expensive for the volume I do, and they were incapable of actually responding to support e-mail.

    So I dropped them like a bad habit and signed up with PayQuake, which does its own merchant account and uses Authorize.net for a gateway. The transaction-related costs are a little higher, but without monthly fees and "statement fees" and other such nonsense, they cost about half of what I was being charged before.

    Authorize.net has a nice admin interface and good tools. I like that you can require certain AVS conditions in order to accept the transaction. I haven't had a lot of chargebacks (two or three when I used to sell POP Forums), but being able to require a total match for street and zip is nice. Of the chargebacks I had, none of them made that match.

    I haven't had to call PayQuake for support, but they seem to have a pretty good reputation in various Webmaster forums. Hopefully I can keep using them without a swtich for many years to come.

  • MVP drama

    The post has since been removed, but I know a bunch of people linked to someone's blog where the owner indicated he was "pissed" about not being an MVP.

    What's the big deal? Seriously... I'm asking. I don't entirely understand what the benefit of said recognition is other than to say that you have it. For me at least, knowing that I can help out a client (and get paid for it) or that someone will buy my book is good enough for me in terms of professional accomplishment.

    People aren't defined by the external recognition they receive.

  • Using WebRequest... what the heck is wrong?

    I'm changing credit card gateways, using Authorize.net. I whipped up a class that I can use on all my sites, the key method being this one:

    public void Submit()
    {
        string postElements = "?x_login=" + _login
            + etc...;
        WebRequest request =
     WebRequest.Create("https://secure.authorize.net/gateway/transact.dll"
     + postElements);
        request.Method = "POST";
        request.Timeout = 60000;
        WebResponse response = request.GetResponse();
        StreamReader sr = new StreamReader(response.GetResponseStream());
        string result = sr.ReadToEnd();
        sr.Close();
        response.Close();
        _rawResult = result;
        string[] results = result.Split(new char[] {'|'});
        if (results[0] == "1") _approved = true;
        _errorText = results[3];
        _avs = results[5];
        _transactionID = results[6];
    }


    This works great from a unit test that calls it something like this:
    Transaction t = new Transaction();
    t.Address = "3412 Beaumont Dr.";
    etc...
    t.Submit();


    But when I try to use the exact same code in my Web app, it ALWAYS times out on the request.GetResponse() call. What gives? How is that possible? It times out both on my own box (the one that runs the unit test fine) and on my production server.

  • LiveJournal acquisition and blogging as a business

    I can't take credit for seeing this first, but someone else posted a link to this blog that says Six Apart is buying Live Journal. The question becomes, what the hell for?

    Between Google buying Blogger and the start of MSN Spaces, I keep scratching my head wondering how it is anyone expects to make a buck with a blog site. Sure, I have CampusFish, and it's not free, but I built that largely for myself and as a coding experiment (it's based entirely on POP Forums). I basically made enough this year from that to cover the SSL and domain name registration.

    So what is the business plan for blogs? I keep seeing little hints of companies getting back into the "we have eyeballs" frame of mind. I learned circa 2001 that I could care less how many "eyeballs" I have. I would sooner have a thousand paid customers than a million people who visit a site and pay nothing.

  • Half-Life 2 demo and Steam: Crap

    Since the only thing that really showed off my 6800GT video card was Doom 3, I thought I'd give the Half-Life 2 demo a shot. After all, GameSpot says it's super pretty.

    It starts by installing this stupid Steam crap. Why do developers think that everyone should be OK with loading crap upon crap every time you start Windows? Why the hell does anyone need a program to run at startup to play a freaking game? Sorry, but if it's not anti-virus software, it doesn't need to run.

    Then I get to the game, and as soon as it starts with me on the train, it starts to choke and the audio gets choppy until it eventually freezes. This is after one of the most ridiculous load times I've ever seen. Made Doom 3 loads look like a cartridge-based console game. Since the Steam crap was running, I could tab-out, and kill the process, which took a few minutes.

    Thanks, but no thanks. I'm not going to drop $50 on a game that you require me to register for, load a startup program and then crash. Nice going, Valve!

  • Inside view from G4-TechTV

    I've made a lot of posts regarding my disdain for the merger between G4 and TechTV. I swear it was the most ass-backwards thing to happen in television. TechTV had finally been making great strides in the ratings for shows like Call For Help and The Screen Savers, and regular viewers really enjoyed seeing the people on the show.

    Two former on-air personalities have shared their experiences online. The first is Dan "Foo" Huard, who started as an intern for The Screen Savers back in the days that Megan Morrone, Leo Laporte and Patrick Norton. He worked his way up to producing even through the move to LA, before they let him go. He gives his account of his entire time before and after the merge.

     I didn't know this, but Wil Wheaton (yeah, the Star Trek kid) was apparently hosting G4's "Arena" show. Things went to shit with him too and he left on his own terms.

    Both of these stories have a common theme: Executives and producers that had no idea what the hell they were after. The Comcast morons see the video game industry as this giant multi-billion dollar industry and they want a piece. TechTV, while apparnetly never making mad profit, saw a bigger market in technology in general, both in terms of helping and educating viewers and keeping them informed of what was going on in the world. If you ask me, that was the right direction considering you had people like BMW and IBM on your advertiser list.

    But no, gaming entertainment seemed like a better idea for the Comcast folks, and they somehow think that expanding the subscriber base ten-fold would magically cause the cash to roll in. Instead, they've managed to alienate the huge audience that TechTV cultured, and killed any credibility they had with the G4 gamer audience. Both audiences are smart enough that they can smell bullshit like a fart in a car, and boy does it stink in there.

    I guess the worst part, as someone that used to work in various broadcast jobs, is that the people that really make the "magic" are the ones that suffer the most at the hand of executives and a company that has no clear leadership or vision. TechTV had a lot of brilliant people on and off camera, and it came through in their programming. People like Leo Laporte, who had a wide appeal but was apparently not hip enough for G4, will always have work, but the young people like Foo, Yoshi, Sarah Lane, Kevin Rose and others may not be able to bounce back in a broadcast job if things go down the tubes. This is not to say that life would be over (look at Megan Morrone, who has a beautiful daughter and is now carrying twins!), but you hate to see talented people get underservingly screwed.

    In business, it's rare that good people leave a bad situation to form a new company and do great things, and it's especially hard to do when starting a TV network, but wouldn't it be amazing if just such a thing could happen?