February 2005 - Posts
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.
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. :)
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
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.
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!
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).
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.
I haven't seen this linked to elsewhere. A little deeper than the typical soundbite interview... http://abcnews.go.com/WNT/story?id=506354&page=1
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()
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.
More Posts Next page »