Thursday, June 11

I declare "Spymaster" a #fail

This game had real potential. Good spam control (even if it did still somewhat encourage self-serving spam), new behaviors and equipment available with level-ups, the ability to purchase revenue-generating assets, to transfer money between players, to assassinate your frenemies.

Unfortunately they failed on a few counts. They totally bungled the handling of an exploit that was reported by active users -- the game staff replied by wiping out those users' accounts. OK, that's a mistake, maybe a forgivable one. Unfortunately there's a more fatal failure: you hit level 30, which took about a week of regular play, and wham, you hit a wall. No new content.

The game staff promised new content "hopefully by Friday" -- of last week. Friday the 5th of June. Today is Thursday the 11th. Still no new content, no way for people to advance, so instead a lot of players are getting slaughtered by the more aggressively-situated players, losing their hard-earned weapons and armored cars, with no way to fix it or get around it. At best, those players will have a TON of ground to make up if the yahoos at iList ever get around to adding new content like they promised.

Fail. Completely frustrating, disappointing fail. But hey, I hope you guys at least got the viral benefits out of this for iList while failing a quickly devoted community. What a piss poor lack of prior planning and foresight. #fail #spymaster

Monday, June 8

I've become a believer

In LINQ. Well, at least in LINQ to SQL, and some of the neat LINQ-to projects like LINQ to flickr and those sorts.

I'm not quite so sure about LINQ to XML -- I still find myself using a lot of XPath, which I thought LINQ would let me get away from. Sure, LINQ to XML is nice for WRITING XML, but reading? I'm not sure it's a big win.

But let's get back to the subject at hand: LINQ to SQL. For quite some time, I felt that LINQ to SQL reduced developer knowledge of the data model below acceptable levels, provided a nearly unnecessary level of abstraction, and coddled the drag-and-drop Mort crowd.

Some of that may still be true, but when building a quick system like one project I've been working on the past three or four weeks and another the past five days, LINQ to SQL, in my mind, gives .NET the feel of something more dynamic like PHP or Ruby. This reduces development pain on short projects, mockups/prototypes or architectural spikes IMMENSELY. You can be much more agile in evolving your data model and business logic without paying the price of a brittle, static data tier. Yes, I found myself dragging-and-dropping tables, over and over again -- and I felt almost no shame in doing so.

According to Microsoft, LINQ takes measures against SQL injection -- one of the topmost reasons for using stored procedures. One of the other big reasons for SQL Server stored procs is performance of course. On small datasets, performance is adequate. I haven't had a chance to test on large datasets yet, or under scale conditions. There are steps you can take to improve performance I plan on exploring.

But of course you can still use stored procedures with LINQ, dragging-and-dropping again, and calling them like a standard .NET method via the wrapper LINQ and the Entity Framework create.

I'm not sure you lose anything with LINQ, and you certainly gain quite a bit in a number of scenarios. I suspect I will be using it quite frequently in the future.

Sunday, June 7

My work on Times Square billboard tomorrow :)

I had mentioned on Thursday that I had a killer little project underway. I was contacted by Ashley John Heather of dotbox for some rush assistance in their Best Friends Day campaign for the charity

I'm taking #bff tagged results from and pulling them into a local SQL Server 2005 database. The intake procedure filters for banned words, banned users, prioritized users. Then 10 at a time, pre-filtered tweets are put in front of a human moderator using a WinForms interface (yes, WPF would have been sexier, but I had <4 days to get this done) where the user can choose to "Display", "Prioritize" or "Ban" based on the tweet's text content and author. Content is batched for publishing to the ticker to be displayed on the bottom of the billboard.

OK ... that sounds like pretty run-of-the-mill CRUD work, right, so what's the point? I hear ya! Here's the kicker: the tweets approved in the moderation process will be published to Time Square's largest billboard, the Clear Channel billboard, from 8am-8pm Monday (tomorrow) June 8th, six out of every 15 minutes:

Yeah, how friggin' cool is that?

Thursday, June 4

I told myself I'd blog every day for a week

But I just can't do it! It's driving me insane!

I kid. This blog has done nothing to contribute significantly to my overall levels of insanity.

Apologies, but today's entry is going to be a bit weak. Not sure if I'll make it tomorrow yet or not.

I thought I had time. I thought I was essentially on a paid vacation. Turns out not to be so much the case. Met with the good people at Apprenda, the Tech Valley startup that creates SaasGrid, catching up with a client who's been blowing up (in a good way!, trying to get to a little bit of REST for a certain ISV, and some discovery/research/proposal work on two other projects, one heavily Twitter-centric, one a standalone custom web app for doing some business process management (BPM). But none of that is what is about to swallow my time for 3-4 days straight.

Not going to talk about it too much now -- if all goes well I will of course follow up with details, and at least a link, maybe a video feed, of the result :)

Wednesday, June 3

Best notebook accessory ever?

The first time I saw a notebook cooler, it looked like a clunky, cheap piece of junk.

A year or so later, I purchased my Dell Vostro 1500, and was introduced to the life of living with medium-rare thighs. (I sit in a lot of places where my work gets done in my lap.) I learned to live with the pain. To love it. OK, not to love it. To tolerate it.

The sensation did get me thinking, however, that perhaps a cheesy-looking notebook cooler might be worth the dent to my cool-factor. (Because I'm super-cool. Don't kid yourself. You don't know anybody cooler than me.) to the rescue with the BYTECC Aluminum Notebook Cooler Model NC-500 (USB):
This thing looks reasonably cool, doesn't break the bank, doesn't sound like a jet taking off, IS lap-comfortable, and isn't greedy with your USB ports -- the Bytecc is USB-powered with passthrough, so the port is still usable. Best of all? My notebook is running 10-20F cooler. I kid you not. My thighs are no longer red. My notebook keyboard and underside are no longer warm or hot to the touch. The air coming out the exhaust vents is notable cooler as well. Performance seems smoother.

Definitely a thumbs up.

Tuesday, June 2

Vista + SP2 == clock one hour off? FIXED!

I took the plunge and installed Vista/2008 SP2 after rebuilding my Vista notebook twice last week.

Let me take a step back. My Dell Vostro 1500, running Vista x64 with a Dell 1505 Draft-N WiFi adapter since late Fall of 2007, started BSOD'g like crazy for no apparent reason. No driver changes, no software installs. I did the usual spyware and AV routine, came up with nothing. Let the computer cool off completely, overnight, no improvement. Removed and reinstalled the network drivers, but BCMWL664.SYS errors kept bringing me down. (This is a Broadcom driver for my WiFi adapter I believe.)

I'd been meaning to rebuild this notebook for a while -- 18+ months is a long time for a development machine to go un-rebuilt, especially with a new, clunky OS like Vista, ESPECIALLY with 64-bit drivers. Plus, I have licenses for Ultimate, and wanted to move up from Business. So I bit the bullet, took the plunge, reinstalling Vista while also putting in a new 7200 RPM Hitachi drive, stepping down to 32-bit Vista for peace of mind. (For the most part x64 has been good to me, but with all the BSODs, I wanted to remove as many variables as possible. The loss of .5 GB is tolerable for now, and ReadyBoost seems to help.)

At first, things seemed good ... but BSODs showed up 12-15 hours in, getting more and more frequent. This time the driver was still for WiFi, but it was coming up as BCMLW6.SYS -- despite network drivers being installed from the same package from Dell in both cases. Maybe something didn't update properly with the old install ...

After days of Googling and fiddling and event log trawling, and lots of frustrating BSODs and reboots, I eventually stripped down my WiFi adapter (Device Manager -> Network Adapters -> your device's Properties -> Advanced tab), disabling A-band, set AP Compatibility to "Broader Compatibility" rather than "Higher Performance," Roam Tendency to "Conservative," and decided to set all options possible to prefer G-band.

I also made sure Windows did not power the device down (Device Manager -> Network Adapters -> your device's Properties -> Power Management tab). Since day one, I've heard issues about weird packets floating around, giving Vista issues, so I killed N-band on the router, forcing the adapter to operate G-band only, matching all the G-band preferences I'd just set.

I can't be sure which of these actions did the trick, but I've been BSOD-free for days. I'm not sure what started it -- this hardware operated nominally fine for the better part of two years with no recent changes -- but I seem to be back in business. At some point I'd like to narrow down the variables and figure out precisely what the issue is, but for now, after 5 days of BSODs, I'm too busy being productive and happily connected.

OK, so with that out of the way, Office and Visual Studio and Firefox and plugins reinstalled, I decided to install Ubuntu 9.04 Server to my notebook as well now that I had a 100GB partition dedicated to it on the new hard drive for dual-booting purposes. Unfortunately the Server install dialog is a little less user-friendly than the old Desktop install dialog I was used to, and I managed to make a rookie mistake ... one I haven't made in a decade: I toasted my Windows partition when the Linux installer started making partition decisions. Whooops.

Back to reinstalling Vista. Only this time, since I hadn't heard any real rumblings about bad things happening with Vista SP2, I decided I might as well take a leap off that cliff too. The download and install process was a bit lengthy, but tolerable. Auto reboots are nice. The OS came back up, my tools still work. Happy days! Except for one nagging issue.

The clock was an hour off. Yes, the right time zone was selected. Resync'g wouldn't help: I keep getting the "no data available" error, despite having NTP setup in the registry, and NTP stuff disabled in Domain/Default Domain group policies in the 2008 domain and the Vista local security policy. I tried various NTP servers and sync flags, in the registry and from the command line, all to no avail. Setting the clock manually worked of course, but then timestamps in GMail and other online locations were an hour off. I applied the Vista SP2 hotfix for clock issues (what, a hotfix for SP2 ALREADY!?) I went back to the registry to examine the TimeZoneInformation node, since this was feeling like a Daylight Savings Time issue. As it turns out, the DaylightStart and StandardStart values were empty ... what the heck?

"Automatically adjust clock for Daylight Savings Time" in Adjust Date/Time -> Time Zone was unchecked.

Yeah, it really was that simple. But if you Google, you'll see I'm not the only one.

Sloppy, Microsoft, sloppy.

Monday, June 1

Will work for free: looking for unique, interesting, possibly charitable projects

So I find myself with a lot of free time all of the sudden, and I want to make the most of it.

For years now, an overwhelming majority of my work has revolved around corporate CRUD apps and service tiers. Sure, that stuff can be cool, and sometimes even fun, but it's not a wild party. It's been a while since I've dipped my toe into something entirely different, much less something incredibly interesting and rewarding!

I have approximately 2-3 months worth of funds. So, while I will of course be project-hunting and job-hunting in that time, that means that for 2 or 3 months, starting now, June 1st, I can work at reduced rates, or, for the right project, for free. (I'll be honest: the only projects I would do for free would be stuff for charity, or something that really blows my top and leaves me stunned in wonder, questioning how I possible could have lived without such awesomeness for nearly 30 years to date. Everybody else just gets the discount.)

So if you're a charitable organization, or you do fascinating work, and you could use a break on software development, get in touch! I'm looking for new experiences -- this could be the opportunity of a lifetime for both of us!

(If you happen to be new here, I'm a strong .NET guy, but LAMP-friendly, with rich history of service and API development and open API consumption, plus recent SharePoint/MOSS 2007 experience. If it's out on the web and has an API, I can integrate you with it. If it's on Windows, I can make it work. If it's on Linux, I can still make it work, but I'm going to have a lot more fun getting there :)