Saturday, November 05, 2005

Flying out to SFO

9:15 AM (EST)
While waiting to board the flight, I noticed a rather large guy in his twenties or thirties gleefully coming over to my direction. He walks past me, and I hear him say, "I thought I recognized you. I'm a big fan of yours, and just wanted to say 'Hi'." The two people that he was talking to, and who's very presence turned this guy into the equivalent of a 12-year girl old meeting Brittney Spears, were none other than the Mythbusters themselves.

Yes, Adam Savage and Jamie Hyneman were traveling together on my flight from Detroit to San Francisco. I wonder if they're going to try to reproduce the "large person got stuck to airplane toilet due to suction" myth on this flight... Hopefully, it won't be the "stewardess survived when the aircraft broke up in air" myth...

Surprisingly, I'm pretty sure that they flew coach and not first class. There's a myth that was just busted for me (celebrities fly coach, too).


10:45 AM (EST)
Purchased a snack box for $3.00. In it were some Ritz Chips (never heard of them), a mini summer sausage, cheese dip, chocolate giant Goldfish Grahams, a mint, and a wet-wipe. I'm assuming that the cheese dip was for the Ritz Chips.

The complementary Diet Pepsi was also consumed.


11:24 AM (EST)
Had to go pee-pee. It was certainly an interesting experience doing so while encountering minor turbulence. For what it's worth, this was my first trip inside of an airline bathroom, despite having flown a dozen times before.

While doing my business, I kept thinking of the crash scene in LOST where the guy in the bathroom flies up and hits the ceiling.

I still haven't seen the Mythbusters go into the bathroom with a large person yet. I'm in the back of the plane, so I'm keeping my eye on who uses the W.C…


11:45 AM (EST)
Hi, me again. I'm reading Bill Wagner's book Effective C# - 50 Specific Ways to Improve Your C#. Bill does a pretty good job of taking all of my C# skills and telling me that I suck at coding.

Actually, it's not that bad. He just explores some best practices, and jumps into MSIL at times to show why one method of doing something is far better than another (after the code is compiled). If you don't walk away with at least one bad habit corrected, then you must be Anders Hejlsberg.

Though, I think Bill needs to watch out. I mean, he only put 50 specific ways into his book. What if someone comes along and makes a book with 51 specific ways, and gives away that extra way for free? You would get 51 ways for the same price as 50, and which book do you think people would buy?

51 chimpmunks, twirling on a branch, eating sunflowers on my uncle's ranch. You know that old children's tale from the sea….



11:33 AM (PST)
Wheels down in SFO. I'm a traveller, here from the future!


1:30 PM (PST)
After wandering through the SFO airport parking garages, finding the AirTrain, and then being lucky enough to get off at the right stop in order to board the BART, I somehow made it to downtown San Francisco. A quick couple of blocks away from the train station is my hotel, and now I'm all checked in and paying $15/day for internet access from my room. I do see a Google Wi-Fi access point in my network list, but the signal is too weak to connect.

Well, time to explore the city for a little bit...

Friday, November 04, 2005

Launch Event Software Revealed

Mark Relph shows pictures on his blog of the DVD set that will be passed out at the Joint Launch Event. While no one really had a clear understanding of which versions of Visual Studio 2005 and SQL Server 2005 would be given to every attendee, it now looks for sure to be the Standard version of both. Cool!

Thursday, November 03, 2005

San Francisco Bound!

I'm now officially on vacation from work for the next week and a half. First on my agenda: take care of some outstanding things at work tomorrow. ;)

Then I fly to San Francisco, and will spend the rest of Saturday and most of Sunday trying to keep myself occupied in a strange city all by myself. I hope to make it out to Alcatraz on Sunday morning--that would be too cool.

I've got a prior engagement on Sunday night, so I'll be missing the .NET Rocks party, which is only blocks from where I will be. :(

The thought of skipping my event and attending Carl's crossed my mind, but I figured that would be a bad idea, since the event that I am attending is paying my way out there. ;)

Then I'll attend the Launch Event on Monday! Yay! But, I won't get to party too long afterwards, because I need to catch a 10:25PM flight back to Detroit (arriving o'dark-hundred), pick up a rental car, and head to the Detroit version of the same Launch Event. Yay!

You'll find me in Detroit on 11/8 at both the Users Group booth and also in the Ask the Experts area (but, unfortunately, not at the same time [grin]). Stop by and say hello!

Tuesday, November 01, 2005

.NET Rocks Roadtrip Webcam Videos

I'm collecting frames from the DNR Roadtrip webcam (dunno what to do with them), but so are other people!

Paul Sturgill has been assembling the daily collections into videos (along with Franklin Brothers music). After he stopped, I tried my hand in it.

The software that I used creates AVI's, and I selected the DivX codec cause that seems to be all the rave (but, video production is NOT my forte).

I'm open to suggestions for making this better, like how to create something that would actually stream from the server instead of apparently downloading first, and then playing from the internet cache.

October November
SuMoTuWeThFrSa SuMoTuWeThFrSa
 1  12345
2345678 6789101112
9101112131415 13141516171819
16171819202122 20212223242526
23242526272829 27282930 
3031   


Day 1
Day 2
Day 3
Day 4
Day 5
Day 6

Day 7 (part 1)
Day 7 (part 2)
Day 7 (part 3)
Day 7 (part 4)

Day 8 [all-night editing session]
Day 8 (part 2)

Day 9 [on the way to Raleigh]
Day 9 (DivX AVI that I created)

Day 10 (DivX AVI that I created) BTW: Carl is NOT in the bathroom playing the guitar, but it made me do a double-take!

I only had a few frames for October 23-24, so I just threw them into an animated GIF:
Day 11 and 12

Day 14 (DivX AVI)
Day 15 (DivX AVI)
Day 16 (DivX AVI)
Day 17 (DivX AVI)
Day 20 (DivX AVI)

I only caught one frame during the entire day of November 1:
Day21

Day 22

Day 23 (part 1) (DivX AVI)
Day 23 (part 2) (DivX AVI)

Day 24 (time zone diff) (DivX AVI)
Day 24 (Los Angeles) (DivX AVI)

Day 26 (DivX AVI)

Apparently, the webcam broke on the trip from Los Angeles to San Francisco. :(

Monday, October 31, 2005

TinyThings

Check it out: Rory's podcast is finally available!

Named TinyThings, it's all about Rory's fascination with embedded/mobile devices and development. This first 1.5 hr episode blows you away with a very technical, in-depth interview with Mike Hall of Microsoft (didn't we see him ride around on a Segway, do all those Pod Attacks, and also give part of the keynote presentation at Tech-Ed '05?).

This episode continues it's BBC-feel with the British accents continuing into Rob Mile's review of the Gizmondo.

Give it a listen, yo! (Side note: I don't know what's up with all these "Yo's" as of late)

http://neopoleon.com/tinythings/blogs/main/

Screw You, Mr. K-Mart Sales Man

Did you know that K-Mart used to be where you picked up personal computers? Really!

I just had a flashback to my youth, circa 1983, give or take a few years. I remember that K-Mart sold Commodores and maybe even Ataris. They also used to have a coin-op arcade. Very different from today's bankrupt K-Mart that now somehow owns Sears.

So, while my mother shopped around, I would head back to the 'Lectronics section where the Commodore 64's would be powered on to the READY prompt



Yeah, that's going to sell a customer on buying this machine. Look, it shows a pretty blue screen with a flashing box!

So, I would always try to help out by creating a program on the spot. Pro Bono, even! I don't recall what the programs would do exactly, but it was surely more interesting than the READY prompt.

Well, this prick of a salesman would always come over, say "These are for sale. They're not toys", and power-cycle the C64. Did he not know the err of his ways?

Now that this memory has been released from the very depths of wherever memories are kept for 25 years (give or take), I can finally say: Screw you, Mr. K-Mart Sales Man working in Lima, Ohio in 1983! I was doing you a favor, yo.

We now resume normal programming....

Sunday, October 30, 2005

Weblog Usability Article

Jakob Nielson writes about Weblog Usability: The Top Ten Design Mistakes.

Interesting points that I haven't really thought of before, and ones that I think I'll take steps to change in the upcoming future (I smell a New Year's resolution!).

I started this particular blog a year ago with one goal of remaining semi-anonymous. Apparently, that didn't work anyways, because this blog is the #1 MSN search result for my name (and #2 on Google, due to an old page that I created while in college being older, and therefore, more relevant in Google's eyes). Anyways, the article mentions that posting anonymously does nothing to increase your reader's trust in the content. This is exactly why Scoble also lists his cell phone number.

The other issue that has me thinking is the use of Blogspot.com for hosting. Blogger has been a decent service provider, albeit missing a few features that I would like to see. But, the article states that it's only time before *.blogspot.com authors will be viewed as novices, sort of like what you think when you see a @aol.com email address. So, I'm seriously thinking about my own domain for the blog and whatever else I end up doing next year.

Saturday, October 29, 2005

Corn Maze

Spent the afternoon lost in a corn maze that is a couple of miles from my house.

What's a corn maze? Well, they plant the field in the spring. Then, when the corn is about ankle-high, they mow an intricate maze into the field using a riding mower.

Now the corn is high (ready for harvest), and throughout the maze are check stations. You have a card that you punch at each station to "prove" that you made it all the way through.

It's a good way to burn a couple of hours!

Friday, October 28, 2005

Speed up MSDN Subscriber Downloads

I found this post a while ago, but finally put it into use tonight. As I was downloading the SQL Server 2005 DVD image (~2.5GB), I noticed that I was only getting 25 KB/sec speeds. Sucks to your assmar!

After adding a USA mirror IP to my hosts file, and then trusting microsoft.com in both my Internet Explorer Trusted Sites and Privacy Sites, I saw the download speed jump to 300-400 KB/sec (it varies, but right at this moment, it's down to 115 KB/sec). The time remaining went from 25 hours to 2 hours.

Oh, yeah, and at first, the speed up didn't work. I had to flush my DNS cache so that it would pick up the new IP address from the hosts file (start|run: ipconfig /flushdns)

Thursday, October 27, 2005

San Francisco: Wish There Were Someplace To Eat

I wish that there was someplace to eat near the hotel that I'm going to stay at:

VS 2005 and SQL 2005 RTM!

MSDN Subscribers can download the RTM versions of Visual Studio.NET 2005 and SQL Server 2005 (Developer Edition) today!

Tuesday, October 25, 2005

First-hand Account of an Urban Legend

It all started about 10 years ago. I moved into an IT role at an air freight company, and started to support a time and attendance system. This thing was written in FoxPro 2.6 DOS (because Fox Software was a local company before MS bought them), had multiple clients running on 386-SX machines, and centralized tables that resided on a Netware 3.11 filesystem.

So, there was always this story (urban legend, actually) that went around the office about when the supervisors were first trained. Despite the application being DOS-based, it did use the mouse to allow for field selection and button clicking. The instructor was in front of the class, and was telling the supervisors how to fill out a timesheet. One of his instructions was something to the effect of "click the button at the bottom with the mouse".

All of the supervisors completed the task successfully except for one. This guy couldn't figure out what he was doing wrong. The instructor walked over to him and asked him to repeat the task to see if they could figure out why it wasn't working. The supervisor picked up the mouse, actually pressed it to the computer monitor, and clicked.

Now, I had always thought that this was truly an urban legend, similar to the Tech Support Horror Stories email chain circulating on the internet. But, at tonight's User Group meeting, I got first-hand confirmation that this really happened...from that instructor himself! Small world.

Monday, October 24, 2005

Connected Systems Developer Competition Finalists Posted

The list of 15 finalists were posted for the Connected Systems Developer Competition.

http://www.csdevcompetition.com

Congratulations all!

NWNUG Presentation - Josh Holmes - October 25

Note: This event has passed. Sorry if you missed it.

Mark your calendars. On Tuesday, October 25, INETA Speaker Josh Holmes will be presenting to the NW Ohio .NET User Group (NWNUG) in downtown Toledo on new Data Binding and Caching features in ASP.NET 2.0.

http://www.nwnug.com/dotnetnuke/Default.aspx?tabid=31

It's not too often that we get a national speaker from the INETA Speaker Bureau, so this is a big event. (I'm not going to mention that even though Josh is a national-level speaker, he happens to live in SE Michigan)

If you're a regular attendee, then please don't miss this upcoming meeting. If you haven't been to a meeting in a while, then please plan on making an appearance for this one. And if you have never been to a user group meeting, then by all means, come spend the evening with your peers to see what all the excitement is about! Bonus points if you bring multiple friends and co-workers. Extra bonus points if you can get your pointy-haired boss or sales goob to attend.

It costs you nothing, plus you get Pizza and Pop, plus you might walk away with one of several door prizes that are given away at the end of the night (things like XBox games, Microsoft hardware, and Microsoft software).

-=-=-=-=-=-=-=

If you've never been to a User Group meeting before, then I can understand your sense of anxiety. But, it's really not a big deal. You show up to the location, sign in to the facility's guest book (i.e., if the building has security), then go to the meeting room. Find a seat, enjoy the show, fill out a survey at the end, wait around to see if you win any of the raffle prizes, and then go home. It's really that easy, and you'll learn something in the process.

Sunday, October 23, 2005

Computer Bag Recommendations

I'm in the market for a new computer bag. Probably a backpack, but I'm open to suggestion that might sway my decision.

I'm still using a black leather clamshell bag that came with my Gateway laptop 7 years ago. It works, but only because it's on-hand. I'd really like something new (read: without ripped out zippers from stuffing too much crap into the pockets).

On a different note (but strangely related), I was surprised by something recently:

I haven't flown in probably two years (possibly three). And, at that time, I was staying at the destination for a week, so I had luggage to check.

In a couple weeks, I'm going to be flying out to San Francisco for a few days, and then flying back. Now, in the past (pre-September 11), I would have just carried everything (2 pieces) onto the plane and not worry about checking a bag. But, I read on DTW's web site that they only allow one carry-on. WTF??!

So, since I can't stuff 2-3 days worth of clothes into my laptop bag, it looks like I'm forced to carry-on my laptop, and check a duffel bag. What are the chances that I'll be buying clothes in SFO due to luggage lost by the ground crew of a bankrupt airline (NWA)? Luckily, it's a direct flight, so they won't have to transfer my bag from one plane to another.

In conclusion, I think I'd also be interested in any computer bags that could accommodate overnight clothes and toiletries as well (serving as my only piece of carry-on luggage).

UPDATE (10/24/2005): Thank you to Aaron for pointing this out: A laptop qualifies in the same category as a purse (albeit, a MANLY purse). The 1-piece of carry-on luggage is in addition to your purse (it's EUROPEAN!).

From the DTW FAQ:

How many carry-on items are passengers permitted to take through the passenger-screening checkpoint?

Passengers are limited to one carry-on item along with one personal item, such as a purse, briefcase or laptop. Check with your airline for specific security and baggage requirements.

Friday, October 21, 2005

This blog is 1 year old!

No idea if these translate appropriately, but...

¡Feliz Cumpleaños!
С днем рождения!
Feliz aniversario!
축 생일!
Buon Compleanno!
Ευτυχή γενέθλια!
Alles Gute zum Geburtstag!
Joyeux Anniversaire !
Gelukkige Verjaardag!
生日快乐!

The post that started it all:

http://jasonf-blog.blogspot.com/2004/10/new-blog.html

Thursday, October 20, 2005

JavaScript Execution from IE Address Bar

I never knew of this capability until today:

You can execute JavaScript from Internet Explorer's address bar, and it will use objects on the currently loaded page.

For instance, load a page into IE (perhaps the one you're currently reading???), and then type this into the address bar:

javascript:alert(document.all.length);

or

javascript:alert(document.body.innerHTML)

Wednesday, October 19, 2005

Attending Two Launch Events!

At the moment, it appears that I am fortunate enough to attend TWO Visual Studio.NET 2005/SQL Server 2005/BizTalk Server 2006 joint launch events: San Francisco on 11/7, and Detroit on 11/8! I'll be sleeping on the Red Eye flight that night in between...

I'm pretty excited about the primary launch event on the 7th (which I received word only yesterday that I'm invited to attend as part of a separate promotion). Steve Ballmer is doing the keynote, and the .NET Rocks Roadshow will be there as well.

Are you still not registered to attend a joint launch event near you? They are happening all over the country in November and December. Click here to learn more:

http://www.microsoft.com/events/2005launchevents/default.mspx

The biggest reason to go, for free-loaders like myself, is that Microsoft is promising complimentary copies of Visual Studio.NET 2005 and SQL Server 2005 for EVERY attendee. These will be full versions, not just 120-day trials!

Monday, October 17, 2005

UTF-8 Encoding

UTF-8 encoding is a pretty nifty way to encode text as bytes, keeping the compact representation of the 7-bit ASCII characters as 1 byte-per-character, yet allowing for the full range of Unicode characters (used in other languages).

Here's how the encoding works:

Unicode        UTF-8 Binary
----------- -----------------------------
0000h-007Fh 0xxx xxxx
0080h-07FFh 110x xxxx 10xx xxxx
0800h-FFFFh 1110 xxxx 10xx xxxx 10xx xxxx


So, as the decoder is processing a stream of bytes, it first looks to the Most Significant Bit of the next byte. If it is 0, then that byte contains the next character (ASCII range 0-127). If it is 1, then the next character will come from multiple bytes, decoded from the bitmask shown above.

That's all well enough, but have you ever opened a web page that contains weird characters, like this:

"The temperature is 68°F"

This is indicative of an encoding problem. The content of the web page was most definitely encoded using UTF-8, however, the web server did not correctly inform your web browser of this fact. The result: The multi-byte unicode characters encoded as UTF-8 were represented as the literal ANSI (Windows-1252) characters for those bytes.

In the case of the degree symbol, in this example, the Unicode character is 00B0h. This is encoded in UTF-8 as C2B0h (1100 0010 1011 0000). But, when interpreted as ANSI characters, the result is two characters: C2h (194 = Â) and B0h (176 = °)


Question: I have a file [or a stream] that is encoded as UTF-8. How does {insert application name here} automatically know this when the document is opened?

Have you ever opened a file with a hex editor, and found some strange bytes at the beginning that you know were not part of the content? These are the "Byte Order Mark" bytes, and are primarily used to handle Endianess issues between different CPUs. However, they will also give away the encoding that is used.

For UTF-8, you will find the following Byte Order Mark:

EF BB BF

UPDATE (7/31/2006): Scott Hanselman did a Hanselminutes podcast this week on Globalization, and discussed UTF-8:

http://www.hanselman.com/blog/CommentView.aspx?guid=bbe3aa4e-fa32-411e-8ac0-184ff9fc636d

Sunday, October 16, 2005

Those "Serious Error" Dialog Boxes

So, ever wonder what happens when you elect to wrap up your serious errors, such as after a BSOD, and send them to Microsoft? Microsoft UK gives us an insight into the process.

Pretty interesting stuff. They don't just go into a bit bucket, as one might expect. ;-)

http://www.microsoft.com/uk/technet/itsshowtime/sessionh.aspx?videoid=9999

Saturday, October 15, 2005

Trip Back in Time

Toledo. The Glass City. The town that gave you famous names like Danny Thomas, Jamie Farr, Katie Holmes, Aaron Myers (who?), Jim Jackson, Tony Packo's hot dogs, Pink® fiberglass insulation by Owens Corning, and I'm sure a countless other people and things (but I gave up on compiling a list).

Well, now Toledo is providing a glipse back in time. Back to the ugly era that existed only 40 or so years ago. Back to the time of segregation and rioting. That's what Toledo provides today.

I turned on the news at about 7 PM. The top story, well, the entire newscast (it seemed), was about rioting that took place in the afternoon.

I knew that a neo-Nazi group was coming to town to demonstrate, because of some alleged black-on-white crimes in a North Toledo neighborhood. Bob Frantz, a local radio broadcaster, had suggested that people should pull out rainbow colored signs when the neo-Nazis were marching, and make it seem like a gay-pride parade. But, it seems that the march never took place. And now, Toledo is in a state of emergency with a city-wide curfew in effect.

Amazingly, the Toledo Wikipedia page has already been updated to include information on the "2005 Toledo Riots":


On October 15, 2005 a National Socialist/Neo-Nazi group planned to conduct a permitted rally and march in Toledo to protest what the group claimed was the mistreatment of whites by black gangs. As approximately two dozen neo-Nazis assembled, protestors began throwing rocks at police and the Nazis. The neo-Nazis were escorted out safely as the mob continued their riot by overturning a car, looting storefronts in the area and also looting then setting ablaze at least one vacant duplex apartment. Mayor Jack Ford, who had tried to neutralize the Nazi rally by calling the date a "Day of Peace," condemned the riots as "just what the Nazis wanted" and set an 8 PM cerfew and declared a state of emergency. At least six protestors were arrested.[1]


Yes, the neo-Nazis are idiots, and they got exactly the type of response that they were hoping for. But, they don't represent the views of this caucasion author (and probably 100% of the people that I associate myself with).

However, the gangs and other minority participants were way out of line with their behavior. Every local news station covering the event also showed footage of their own vehicles being absolutely demolished. There was even footage of a mob of people destroying an ambulance. An ambulance!

Even at this moment, the "Toledo Riots" has the #1 headline on CNN.com.

I think I would be much happier if the news coming out of Toledo was still about petty topics, like Martin Holmes finally going on the record about being upset with Tom Cruise for knocking up Katie. Supposedly, Marty wants Tom to make Katie an honest woman by getting married ASAP. Not sure if that fixes anything there, papa Holmes, because I don't know if a Scientology wedding is recognized as being legitimate to the Catholic Church. If it makes it right in your mind, though, well, maybe it's a step in the right direction.

Friday, October 14, 2005

Don't Forget About IIS Directory/File Security

Two different problems were presented to me today, and I came up with the exact same solution for both.

One involved defeating piracy: My client didn't want their clients to make copies of the Windows Form application that we developed, and have unauthorize access made to a webservice.

Another involved restricting access to a critical ASP: Code on the ASP is intended to be executed only by a service running on a different machine. They need to prevent the ability for anyone to access that ASP from a web browser, and using credentials was not sufficient enough.

The solution for both was to use the Directory (or File) Security functionality of IIS to restrict access based on the IP address. By default, IIS grants access to all IP addresses, and you can build a blacklist. However, by flipping the switch and denying access to all IP addresses, you're able to build a whitelist. In this way, requests to a webservice or ASP that did not originate from a certain list of IP addresses would be blocked.

What's better is that no code had to be altered to make this solution work--it's completely a metabase change.

Thursday, October 13, 2005

GB-PVR Solitaire Plugin Wiki Page

I haven't been all that active in the GB-PVR scene over the past six months or so. And, in my absence, they implemented a new Wiki on the gbpvr.com domain.

I saw that most of the plug-ins had new Wiki pages, but sadly, no one migrated my Solitaire page... ;-)

So, I grabbed the latest build of GB-PVR, ensured that Solitaire still worked with it, and then migrated the content from the old Wiki to the new.

http://gbpvr.com/pmwiki/pmwiki.php/Plugin/Solitaire

I have to play the lottery now....

I drink Diet Pepsi, and occasionally some good ol' Mt. Dew. Good thing. I've been entering those codes under the bottlecap for the "Every 10 Minutes" contest, and received the following notification today (and also logged into the site to verify):

Congratulations you are the winner of the 10/xx - xx:xx Xbox 360 sweepstakes brought to you by Mountain Dew.

You will receive your Xbox 360 before it’s available in-stores and will need to provide a signature when it’s delivered. The Xbox 360 is being released later this year in 2005, once the delivery date is confirmed we will post it in your account history so please check back periodically.

In the meantime, during the next few weeks be on the look out for a Party in the Box package from Mountain Dew and Xbox, which includes Hats, T-Shirts, coupons, invitations and more.

Congratulations and Thank you for participating in the Every 10 minutes sweepstakes


I never win anything! This is pretty cool. Mega-Millions is up to 77MM tomorrow. I think I'll buy a ticket.

Wednesday, October 12, 2005

Hey KeyBank....

Hey KeyBank, why don't you stop offering promotions where you give away money:

http://www.key.com/html/LP-BILLPAY.html?sqkl=index_mc05003billpaynano1_imglink

Then, maybe you won't feel obligated to charge me a fee every time I want to use my money, like paying for something at a POS using "Debit" instead of "Credit"....

Don't even get me started on using my debit card at another bank's ATM, and you still feel like you need to charge me for that privilege, despite the fact that the other bank is already charging me $1.50 - $2.50 for the withdrawal.

Bastards.

ActiveReports by Data Dynamics

One of my current projects is a stand-alone Windows Forms app, and it has some reporting needs. In the past, I would have used Crystal Reports for something like this, but at the moment, I can't stand Crystal, so I looked for alternatives.

SQL Server Reporting Services had to be ruled out because this app must be self-contained, and didn't use SQL Server as the back-end data source.

That really only left ActiveReports. They've been a great supporter of DotNet Rocks! since the beginning, so that had some influence on my decision. Another thing is that Data Dynamics is an Ohio-based company, and at one time, they occupied a suite next to my company's headquarters (in a previous form of existence of my company, that is).

The first thing that wow'd me was the fact that reports themselves are objects. Sure, there's a report designer and RPX files and all of that. But, at runtime, you have full access to the object model of the report. That's powerful (yeah, yeah, Crystal had somewhat of the same thing, but I can't get the bad taste out of my mouth quite yet).

So, I was able to create a delegate and use it from within the report's code-behind in order to do some event-driven changing of column header text to match my data. The way it works is this: My app creates an instance of the report, which has a subreport in the detail section. The report code creates the instance of each subreport and sets the data source accordingly. The delegate is then used to invoke a method of my application code (i.e., a callback) passing the reference to the newly created subreport. My app then sets the column header text to the unique values, and voila! I get a customized report at runtime.

Sorry that I can't really get more specific with examples. Much of this is under NDA, so I can really only talk about the technologies used in implementing the app.

Tuesday, October 11, 2005

XHTML 1.0 Transitional

I gave my new Blogger template to someone today. It's always scary giving away source code (even HTML-based), because it is never as pretty as you like.

Afterwards, I thought, "Maybe I should run this through the W3C Validator to see where the problems are." Boy was I surprised at the outcome!

First of all, I think that Blogger has some issues with ampersands in URLs. Like, if I supply a Link in the blog's title, the ampersand is not automatically escaped for me. This was one thing that caused validation to fail.

Similarly, when I use Blogger's "Compose" mode (WYSIWYG HTML editing for you non-Bloggers) and enter a URL, Blogger will detect it and wrap the URL with an <a> tag. The problem is, that ampersands within the href property are not automatically escaped, leading to my blog failing validation.

I was expecting to find a lot of simple errors, like single tags (<hr> and <br>) that were not closed. But one thing that bugged the crap out of me was that the validator did not like a <noscript> tag that was part of my Statcounter code. I eventually gave up, and removed the <noscript> part.


But, now, the template (and newer content, at least) has passed validation using XHTML-Transitional! XHTML-Strict looks like a nastier beast, so I don't think I'll spend time fighting with that just yet.

Valid XHTML 1.0 Transitional

Code Camp in Ohio!

Jim Holmes and James Avery are organizing a Code Camp for the Dayton-Cincinnati region (will be held in West Chester, OH on Saturday, January 21, 2006).

Initial details can be found in Jim's blog:

http://frazzleddad.blogspot.com/2005/10/dayton-cincinnati-code-camp.html

Webcam Fetcher Application

Here's the source code for a little console application that I built to automatically download the current image from a webcam so that you can build a directory full of stills (with the goal of later animating the stills to get one of those time-lapsed [fast-moving] movies).

I'm not sure if Carl's going to appreciate the drain on his bandwidth, but the DNR webcam URL is hardcoded in this code.

FWIW: I created this app originally so that I could capture Mount Saint Helens erupting last year. I dusted it off again last night because I'd like to see if I can later merge the GPS/mapping data from the roadtrip with the archived webcam images.

This code performs a couple of tricks:

1. It automatically adjusts the interval between downloads between a minimum value (10 seconds here) and a maximum value (10 minutes). This way, when the webcam is turned off, you don't continue to flood the web server with requests for the exact same picture. As soon as a new frame is detected, the interval resets to the minimum so that you don't miss any more of the action.

2. It uses a hash value on the image to see if it was the same as the previously retrieved image (in which case, the application does not save the current image).



class Class1
{
private static readonly int MINIMUM_WAIT = 10000;
private static readonly int MAXIMUM_WAIT = 600000;
private static int _CURRENT_WAIT = 10000;

[STAThread]
static void Main(string[] args)
{
for (;;)
{
FetchIt();
System.Threading.Thread.Sleep(_CURRENT_WAIT);
}
}

static void FetchIt()
{
WebClient web = new WebClient();

string hash1 = "";
string hash2 = "";

System.Security.Cryptography.MD5CryptoServiceProvider hasher =
new System.Security.Cryptography.MD5CryptoServiceProvider();

if (System.IO.File.Exists(@"c:\dnr\latest.jpg"))
{
System.IO.FileStream fs =
System.IO.File.OpenRead(@"c:\dnr\latest.jpg");

byte[] hash = hasher.ComputeHash(fs);

fs.Close();

foreach (byte b in hash)
hash1 += b.ToString("X2");
}

try
{
web.DownloadFile(
@"http://www.dotnetrocks.com/roadtrip/cam/webcam.jpg?random=" +
new Random().Next(9999999).ToString(), @"c:\dnr\latest.jpg");

System.IO.FileStream fs = System.IO.File.OpenRead(@"c:\dnr\latest.jpg");

byte[] hash = hasher.ComputeHash(fs);

long len = fs.Length;

fs.Close();

foreach (byte b in hash)
hash2 += b.ToString("X2");

if (hash1 != hash2 && len > 12000)
{
_CURRENT_WAIT = MINIMUM_WAIT;

string fn = @"c:\dnr\" +
DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";

Console.WriteLine(fn + " " + len.ToString());

System.IO.File.Copy(@"c:\dnr\latest.jpg", fn);
}
else
{
_CURRENT_WAIT += (3 * MINIMUM_WAIT);

if (_CURRENT_WAIT > MAXIMUM_WAIT)
_CURRENT_WAIT = MAXIMUM_WAIT;
}
}
catch (Exception)
{}
finally
{
web = null;
}
}
}

Monday, October 10, 2005

DNR Road Trip: Webcam Now Live!

As Carl Franklin announced on his blog, the webcam is now live:

http://www.dotnetrocks.com/roadtrip/

Let the voyeur in you stare at Carl and gang during your freetime. You'll get great action shots, like this:

Carl

and this:

Carl Sleeping?

and this:

Coding4Fun

Coding4Fun

Thursday, October 06, 2005

Tablet PC

Jon Box mentions on his blog that the Tablet PC is surviving, and then pitches the Tablet PC Partner Program.

Here's my take on why this technology has not just exploded:

I don't have the funds for multiple devices. My employer doesn't have the funds for multiple devices (or, stated more accurately, will not fund multiple devices). So, as a developer, when I buy a machine to work on, it has to be powerful, because I only get one chance every couple of years to upgrade.

Tablet PCs have the perception of being more similar to a PDA than a laptop (processing power is sacrificed in favor of battery life). And they're pretty expensive for what they are. Given a limited budget, I'm going to have to favor the more powerful laptop for about the same money rather than the less powerful Tablet.

Don't get me wrong--I would ABSOLUTELY LOVE TO HAVE A TABLET PC. There are times where that form factor would be perfect. But, there's no way that my employer or I will be purchasing one for me anytime soon. And that's too bad, because I'm a huge fan of the whole mobility concept.

Now, if a manufacturer would like to send me one to evaluate and/or review, then I would be most happy to discuss. ;-)

SQL Server 2000 Reporting Services Security Issue/Workaround

One of my current projects uses SQL Server 2000 Reporting Services to provide rich reporting via a web interface that is linked to from a OSASPADO web app. Most reports are public reports, but there are a handful that are restricted to only a few people.

To simplify this partitioning of the report collection, I created a subfolder in the Report Manager, and we assigned different security to this subfolder. I also wanted one of the web application's "superusers" to be able to manage the list of regular users who had Browser access to the restricted subfolder.

So, I added a New Role Assignment to the subfolder's security list, specified the superuser's Domain User ID, and selected the "Content Manager" role. This should have given that user administrative-type access to just that subfolder.

However, every time that the user tried to access the Properties tab in the Report Manager, they would get a "rsAccessDenied" error.

So, I tried also making that user a Content Manager of the parent folder. Still no good.

It wasn't until I made them a Content Manager all the way up the chain to the root were they able to finally access the Properties tab of the restricted subfolder. We're going to live with this for now, but I'll be looking for a way to make my original plan work (that is, making that user a Content Manager of only the restricted subfolder).

Disclaimer: This particular organization currently only has RS SP1 installed, so it's quite possible that this issue was resolved in SP2, but I have no way at the moment to verify.

Wednesday, October 05, 2005

Microsoft Launch Event - Detroit - November 8


With a little over a month left, there's still time to register for the November 8th Launch Event for Visual Studio 2005, SQL Server 2005, and BizTalk Server 2006 in Detroit.

http://msevents.microsoft.com/cui/eventdetail.aspx?culture=en-US&eventid=1032281368

If you're at all interested in Microsoft technologies, and you're in Ohio or Michigan, then definitely try to attend. You'll walk away with hundreds of dollars worth of FREE software (Visual Studio AND SQL Server), so don't miss this opportunity if these are tools that you'll use! Otherwise, you'll have to buy them later.

Besides the free software, the event is actually like a mini TechEd, with various sessions throughout the day, and free food provided by Microsoft. It will be the party of the year, and kicks off what looks to be an awesome year of exciting product releases.

Why are you still reading this? Click the link, and register. Do it. Now! Ok, here it is again:

http://msevents.microsoft.com/cui/eventdetail.aspx?culture=en-US&eventid=1032281368

You're back already? Good. Now, think of a way to tell your boss that you won't be into work on that day. It'll be worth it!

Toledo Free Press Covers The Local Blog Scene

There's an article in today's Toledo Free Press about Blogging in the Toledo area:

http://toledofreepress.com/?id=1352

Tuesday, October 04, 2005

Pressure Generator Array

Building upon my Pressure Engines post, I've come up with another idea.

Power generation stations, be they coal-fired, nuclear, or hydro-powered, use massive electric generators (or, maybe more accurately: alternators) to create electricity from rotary movement. Coal and nuclear plant use the pressure from steam to turn the generators, while hydroelectric plants use gravity and flowing water to do the same. These generators are each probably the size of my living room... Well, maybe my F-150 truck, but they're big, to say the least. Each power plant also has multiple generators because there is a limit to their efficiency.

But, it again comes down to harnessing pressure in order to perform work. In this case, it is pressure that causes a turbine to turn, which then causes the generator/alternator to produce electricity via inductance.

Now, in the Pressure Engines post, I introduced the concept of replacing combustion with another source of pressure, like a chemical reaction that produces a gas. For the sake of argument, let's just consider Baking Soda and Vinegar, because every kid has probably made a volcano.

For chemistry geeks, the reaction is as follows:

C2H4O2 + NaHCO3 --> NaC2H3O2 + ( H2CO3 --> H2O + CO2 )

Disclaimer: I won two academic awards in high school for chemistry, and was even referred to as the aforementioned "Chemistry Geek", but the subject in itself was never anything that I found terribly exciting.

The reaction produces Sodium Acetate and Carbonic Acid, which decomposes into water and Carbon Dioxide. The CO2 is what we're interested in, because when confined to a space, will build up pressure. Note: What I don't know as I write this is if the resulting pressure will halt the decomposition of the Carbonic Acid until the pressure is released, but all of this information is just to set up my main idea, so it's not really important.

What's all of this got to do with generators? I can't possibly turn a megawatt generator with Baking Soda and Vinegar.

That's true. But, I can surely turn a smaller generator, maybe one that only outputs 1 Watt, with a small volume of pressurized gas. I'm thinking about something that might be 1 or 2 cubic inches. Maybe about the size of a 486 CPU fan. Tiny sucker.

Let's assume that each of these mini generators are sealed units. What I'm wondering [proposing] is if they can be daisy-chained so that the fluid (gas) output of one unit can feed the input of another unit. In this way, the pressurized gas generated in a reaction chamber must flow through all of the mini generators in order to exhaust.

Diagram of a Pressure Generator Array

Let's suppose that one unit is 2 cubic inches. That means that you can get 200+ kW out of the same volume as my F-150. Could 200,000+ daisy-chained mini generators truly be fed from a single small reaction chamber?

I'm going to guess that the answer is 'probably not', but fluid mechanics is not my forte. My bigger point is that instead of trying to solve an energy generation problem using a single device, that maybe it will be easier to use thousands of smaller devices instead.

This concept could also apply to other current "Green" energy production methods. For instance, why have one giant windmill (costing millions of dollars each) when you can use thousands of small windmills (I'm guessing that the total cost would probably be less due to mass production)?

A Call for Comments/Criticism

First time reader? Regular lurker? You actually know me?

Whatever. Please leave a comment. This will help me with two things:

1) I'll get to play with real data in the new comment system, which lets me change look and feel (Blogger's comment interface did not, which was one reason for evaluating an alternative)

2) I'm looking for feedback about what's good and bad with the new template.

Haloscan Commenting and Trackback Enabled

commenting and trackback have been added to this blog.

I noticed that the guys at SRT Solutions were using Haloscan for commenting (and trackback!), so I thought that I would try it out.

Any old comments are still in the Blogger comment database, and will appear on the ItemPage (i.e., the Permalink URL for a post).

Any new comments will be stored in the Haloscan database, and will be linked off of the ItemPage, but will not be shown as inline comments on the page itself.

Monday, October 03, 2005

What Does It Take to be a MS Developer Evangelist?

Just what does it take to be a MS Developer Evangelist? I suppose that there's a lot of travelling, you have to be comfortable meeting a lot of people, you need to know a lot of different MS development technologies, and apparently, you should also feel comfortable doing this type of thing in public:

http://myst-technology.com/mysmartchannels/public/item/104272

(Watch the video on Josh's blog)

See the Web through the Eyes of Others

I'm not colorblind, but I know a number of people who are. I came across this site a while ago, and used it again today to verify that my color selection for the new blog template was colorblind-friendly (or at least, didn't totally suck).

http://colorfilter.wickline.org/

It's an interesting concept: Enter a URL, and the server will fetch that page, transform the colors according to the type of colorblindness that you select, and return the results to you.

Of course, there's no way to tell for sure if this is exactly what a colorblind person sees when viewing your web page, but it does provides insight into why color selection goes beyond just having complementary colors.

To help designers choose colors, they also offer a Color Lab:

http://colorlab.wickline.org/colorblind/colorlab/

This page shows a normal 216-color web pallet, and then what that same pallet looks like with a certain type of colorblindness selected.

I'd be curious to hear from colorblind readers how accurate this web site is (i.e., can you detect a change from the normal pallet to the generated pallet for your type of colorblindness?)

Sunday, October 02, 2005

New Template

I got a little bored with the old template for the blog, so I decided to try my hand in creating a new template. Expect to see the look and feel of the web site change as I continue to tweak.

Friday, September 30, 2005

Wow

I can say that over my career, I have seen some similar questionable behavior like the ones described in this blog:

http://nobodygotfired.blogspot.com/

It's very disappointing, and paints a bad light for the consulting arms of software companies in general (IBM Global Services was specifically mentioned, but I've got to think that MCS is not exempt).

Is anyone surprised by this? I'm not.

Thursday, September 29, 2005

Pressure Engines

We, as a nation [and as a planet], are trying to rid our dependency on oil. At the moment, hydrogen seems to be the best replacement for refined petroleum products, like gasoline. It is extremely common, relatively cheap to produce (extract), and is very friendly to the environment. There are only a few things to work out before mainstream adoption will take place.

But, hydrogen-powered engines are still internal combustion designs. Is harnessing the power of a controlled explosion the only way that we can cheaply create mechanical work?

The typical internal combustion engine works because of pressure: squeeze a fuel-air mixture into a tight space (using a piston) and then ignite the fuel, either using an electrical spark or just the heat caused by the compression (I'm having flashbacks to high school chemistry: p*v/t). The resulting explosion and its rapidly expanding gases push against the piston (the only thing around that can move in response to the pressure) and moves it, which in turn rotates the crankshaft.

So, our automobile engines truly only require a source of pressure in order to perform work. The need for fuel, like gasoline, is only a secondary requirement of the design.

Is burning a fuel the only way in this universe to quickly create the pressure that is needed to perform a unit of work (like moving a piston)? Is there no other type of chemical reaction that will generate enough pressure in a very small timeframe to replace the need to burn fuel? Baking soda and vinegar-powered automobiles, anyone?


___

(Oh, and shouts go out to DK and BAX readers. Yes, I check my logs regularly. I'm narcissistic)

Wednesday, September 28, 2005

Web-based IM Client

As a consultant, I often find myself isolated from the team of other consultants in my company. One extremely useful tool that we use is Instant Messaging. It's got all of the goodness of ringing someone's cell phone without the costs associated (using up minutes), and with less disruption. Plus, you can relay URL's and other information via the chat conversation, which are instantly accessible by the recipient (try conveying a complex URL to someone over a cell phone, and you see where I'm coming from).

However, when I work at client sites, I'm often blocked from using any of the IM products that we use (Yahoo and also MSN Messenger) due to overprotective firewall policies. This makes it a real pain for me to ask quick questions, meaning that I have to resort to email or calling a cell phone. And a lot of the time, a person won't check email for hours, or I get voicemail when I call them.

I discovered something a while back, and was reminded of it today by another blog. MSN Messenger has a web-based IM client that will allow me to penetrate the firewall, yet still be able to IM the people using the Win32 client.

http://webmessenger.msn.com/default.aspx?R=1

I think they did a great job with the UI: it looks like a Win32 application, not a web app.

Any other web-based IM success stories?

Tuesday, September 27, 2005

What is a Clustered Index?

While at the local User Group meeting tonight, I was asked "What is a clustered index?" (because this question has been popping up in a lot of job interviews lately). Note to self: Start asking candidates this question during interviews....

At least from the SQL Server standpoint, you can think of a clustered index as being the physical ordering of the database records as stored on disk. Yeah, yeah, this is not technically correct, but if you start thinking in this way, then you will have the gist of what a clustered index is.

SQL Server stores data in 8 KB pages. If you can fit 1000 different rows of a particular table in one 8 KB page, then great! But, one page will contain at least one row of data.

Tables without a clustered index will not adhere to any sort of ordering. This might be similar to collecting a list of names and phone numbers by having a random collection of people fill out a single petition. In database terms, this is a heap table. If you want to find a person in the list, then you start at the beginning, and scan through the table until you find the data that you're looking for.

Now think about a phone book. Each page has many records (listings), and all of the listings are in alphabetical order by last name (and then by first name). That is, the phone book uses a clustered index (if you will) set to the last name + first name. You can use a well known search algorithm to quickly find a name in a lot less time than starting at the beginning and scanning through all of the entries.

What happens if we need to insert "Flintstone, Fred" in between "Flintrock, Gerald" and "Flintstone, W."? We would have to bump all of the records down one spot, which makes some records fall off of the current page and onto another. In other words, this is probably not something that we would want to repeat over and over again if we have a lot of names to add.

What we could do instead is to assign an incremental number to each name/number that is added to the phone book, and always put new entries at the end of the book. This identifier is the Primary Key of the entry, and because the phone book is physically sorted by this key, that means that it also serves as our clustered index. (The takeaway here is that when you assign a Primary Key to a table that does not already have a clustered index, then a new clustered index will be created by default using the PK).

How do we find people in the book, then, without resorting to table scans? Well, we would need an index to be created containing every name, and list the Primary Key value for that name. In this way, we can look up the name in the index, and then search for the Primary Key to find the entry on the page in the book, and then we can get the phone number.

Likewise, we could also create an index of every phone number, and be able to find the entry in the very same way (by searching for the Primary Key) to see who's phone number that is.

Each index entry contains the clustered index key data, so we want to keep the clustered index values small. This is one reason why auto-incrementing integer (identity) fields are popular as primary keys.

It is commonly argued that you should use GUID (uniqueidentifier) values as primary keys (and therefore, clustered indexes by default) instead of identity fields. The problem with this is that first of all, a GUID is wider than a 32-bit integer, so more disk space is required. Secondly, SQL Server's newid() function, at least, does not produce sequential GUIDs, so if you have a lot of rows to insert, then the database server will be moving around a lot of records in order to keep the clustered index sorted.

UPDATE (10/20/2005): I just learned that in SQL Server 2005, there is a newsequentialid() function that overcomes the previously mentioned issue with the newid() function. Cool!

Is Google AdSense Worth It?

For the better part of a year now, I've polluted this blog with Google AdSense (the banner ads that you see at the top and sometimes at the side of this blog (when viewed in the browser, of course, since I don't use AdSense in the RSS feeds)).

I checked my "statement" today, and have earned a whopping $5.50 so far. Only $94.50 to go before they'll cut me a check!

Does anyone at all have success hosting Google AdSense on their blogs (without clicking on the ads themselves)? Or is it just a waste of screen real estate, since surfers are now used to just ignoring banners? The only one who seems to be making out here is Google themselves, since I have a lot of page impressions (which I think they get paid for), but very few click-throughs (which I then get a piece of).

Monday, September 26, 2005

Preventing Hurricanes

With the recent hurricanes here in 'Merica, the Discovery Network of channels (including the Science Channel) have been playing hurricane-related shows.

One show that I found fascinating was about how we can change weather.

For instance, over the midwest, they get super storms that produce large damaging hail. To help prevent this, they seed the clouds in two ways. First, silver iodide is dispursed into the updraft to give the water something to condense upon. Secondly, dry ice is dispursed above the clouds in order to promote snowfall within the cloud itself, which prevents the formation of hail.

This technique is particularly successful over land because the air is supersaturated with water. The government attempted the same techniques for hurricanes as part of Project Stormfury. However, this was not successful in altering the storms because hurricanes do not have a supersaturated air component, but rather, are continually provided moisture from evaporation of the body of water underneath.

The show went on to interview one scientist who claims that a hurricane can be interrupted by temporarily disrupting the evaporation of water in the storm's path, causing the storm to become disorganized and significantly weakened. They say that Benjamin Franklin realized that it would only take 1 teaspoon of olive oil to cover an entire lake with a film that was only 1-2 molecules thick, and such a film would affect the water's ability to evaporate (which is a cooling process).

This scientist was proposing that a film of something could be dispursed in the storm's path, and that film would only have to "survive" for maybe 6 hours or so--long enough for the storm to pass over it, cutting off the source of energy (evaporation).

I'm a little sceptical of this approach. First, because of the practicality of it all (perfectly dispursing a film of gunk over a wide enough area). Secondly, because evaporation is a cooling process, so if you stop evaporation, you are in essence making the body of water warmer. This might lead to more powerful storms (ignoring, of course, my previous rants about the effects of global warming on large-scale weather).

Being ever innovative™, I think that I've come up with a viable alternative. Disclaimer: I haven't seen this idea outlined before, so if you have invented this on your own, then my plagerism is not intentional.

Anyone who's gone snorkling or scuba diving knows how much colder the water is 20 feet down, let alone 100+ feet down. Why not deploy an array of buoys containing pumps to bring the cold water to the surface and then dispurse it?

This would not be a full-time operation (can you imagine the ecological consequences of keeping the Gulf of Mexico at a certain temperature?), but rather something that could be activated to hopefully disrupt a storm, and then deactivated until the next time it is needed.

The pumps could be powered by the wind, and backed up by Diesel engines or whatever would work best for the situation (that's an implementation detail determined as part of the Elaboration phase, whereas this blog post is only Big Sky Inception phase).

Friday, September 23, 2005

KATRINA WAS NOT FROM GLOBAL WARMING!

Why is it that when something happens with the weather that is perceived to be out of normal, that people immediately start blaming global warming?

Katrina was supposedly so powerful because global warming made the Gulf of Mexico warm (or, so people, like Robert Kennedy, Jr, are out there declaring).

Oh really?

Weather patterns change. Period.

Sometimes, they're cyclical, where you'll have years of one type of weather, and then it changes. But, with cyclical patterns, you'll eventually come back to the experience the same type of weather as before the change.

And sometimes, weather patterns change semi-permanently. Did you know that the Sahara Desert was once much wetter than today? I'm sure that those greedy ultra right-wingers are responsible for that sandbox drying up 5000 years ago, right???

I've said this before: The Earth has it's own agenda, and I believe that we only play a small part in changing it.

Still think that it's global warming that made Katrina so strong? Look at this table:

http://www.nhc.noaa.gov/pastint.shtml

It shows the strongest hurricanes at the top, and lists the years. Now, Katrina is going to come in third, I believe, once it's added to the table. Yes, it's strong, but no, it's not the strongest ever recorded. What made all of the storms in the 1800's and early 1900's so strong, if we didn't have "global warming" back then? What makes Katrina the result of global warming, but these other storms just random events?

Look at this chart:

http://en.wikipedia.org/wiki/Image:Vostok-ice-core-petit.png

It's measurement of data taken from ice core samples, and shows the amount of trapped CO2 in the ice (green) and dust in the ice (red) over time. The average temperature of the Earth is also approximated in blue. This shows that global warming (and subsequent cooling) is very much cyclical, and that for the past 25,000 years, we've been on the warming side of the trend.

The Earth will enter another cool period soon (within the next 10,000 years as interpolated from this chart). But it would have entered that with or without us. My point is that you cannot look at data that exists today and say that it's proof of the effects of global warming without considering that same data 150,000 years ago during the last warming cycle. Anyone have the Gulf of Mexico temperature data sheet for that time? I didn't think so.

UPDATE: I posted this a couple weeks ago, but bumped the date up because I basically just read the same thing today on CNN:

http://www.cnn.com/2005/TECH/science/
09/23/hurricane.cycle/index.html

Free to a Good Home

Psst. Want to know how you can get free copies of Visual Studio 2005 and SQL Server 2005?

Don't tell anyone, but they're just giving them away at the Launch Events this November! I'm talking full retail versions, not the crappy 120-day evals!

Sign up for the Launch Event near you, come see what all of the hoopla is about, and walk away with at least two of the best things that have come out of Redmond yet [certainly my opinion, but please form your own]!

http://www.microsoft.com/events/2005launchevents/default.mspx


(Regional readers: November 8 in Detroit, but like I said, keep it on the low-down. Can you imagine what would happen if too many people found out about how great these products are, and that they can get them for FREE [insert Evil® laugh here]??!?!)




Note: In case it didn't come through in the style of my writing (i.e., perhaps English is not your first language), this post is very much tongue-in-cheek. Everything is true (great product launch event, free software), but MS wants you to know about it, wants to give you free copies of its software, and wants you to spread the word to all of your peers. ;-)

NTFS, Windows Explorer, .NET, and Deep Paths

The NTFS folder tree is just a linked-list type of structure. Each node (folder) has a parent. To move a folder, all you need to do is change the pointer to the parent folder.

That's all well and good, but it seems that you can have really deep folder structures with little consequence to NTFS. Again, that's all well and good, but our friend Windows Explorer seems to have a problem representing, or rather accessing, deep folder structures due to a limit on how long a string path can be.

So, we came upon a problem today where a directory sync program was incorrectly configured, and as a result, created a really deep folder chain. For instance, it synchronized the folders from another machine (B -> A), but the next pass, it copied subfolders not into the same parent as previously, but into one of the subfolders that was previously created (B -> B). Let this run for 1000 passes, or so, and you get 1000 subdirectories. Blah!

How do you go about deleting these? Windows Explorer and the CMD shell was no help--the string path to the end of the chain was simply too long.

I found a manual method that worked, and surprisingly, did not require that much time.

Given:

Dir
--Dir2
----Dir3
------Dir4
--------Dir5
----------Dir6
------------Dir7
--------------Dir8
----------------...

Navigate as far into the tree as possible using Windows Explorer (i.e., maybe only to Dir6) and move that folder into the parent (Dir). This is just a parent pointer change to NTFS.

New directory tree might resemble:

Dir
--Dir2
----Dir3
------Dir4
--------Dir5
--Dir6
----Dir7
------Dir8
--------…

Keep repeating with the longest chain that remains (i.e., navigate into the new Dir 6 chain until you hit the path limit in Explorer, then copy that folder into the root).

When you have nothing but a bunch of smaller chains, you can then delete them all at the same time (i.e., delete everything inside of “Dir”).

BTW: It seems that the .NET Framework classes (System.IO namespace) simply use Windows Explorer, because they seemed to be subject to the very same limitations.

Indigo Roadshow

I attended one of the Indigo Roadshow events last night in Columbus, OH. I needed to see Indigo (Windows Communication Foundation) first hand, because I've been way too busy over the past year or so to explore the technology by myself. Even though my one-way drive time was longer than the presentation itself, I still got a lot of value out of it.

I particularly enjoy Microsoft Live Events like this because I find myself starting to think about how I could have used the technology in the creation of my previous projects, and how much easier the development would have been (because that's what software evolution is all about, right? Making it easier to build complex systems with less code).

So, what is WCF ("Indigo")? It's what you'll use starting in 2006 to have applications talk to each other (the communication layer in that whole "SOA" thing). But, most importantly, it works with very little additional coding involved--almost everything in last night's demos were done using attributes and config file entries (i.e., something, like reliability, that would [supposedly] take 100 lines of coding to implement using WSE was performed by simply adding one XML element to the application's config file). It's remoting, socket communications, and web services all rolled into one.

I like the new trend that I'm starting to see in MS products in that you no longer need a web server to host web services. Like SQL Server 2005, WCF offers the ability for your application to create a HTTP endpoint (using http.sys, so be careful if you're using IIS 5.1 on the same machine, because you won't be able to share port 80). This means that your app can host a web service without needing a web server.

The show was presented by Ami Vora and Payam Shodjai, both of Microsoft. A copy of David Pallmann's book Programming "INDIGO" Beta Edition (Microsoft Press) was handed out to each attendee, which appeared to be about 200 - 300 people (rough guess).

I also finally met Drew Robbins, the MS Developer Evangelist for my area. Great guy, but I'm envious of his job. I mean, besides going around talking up MS developer tools all day long, he actually gets paid to attend events like TechEd and PDC (where, I guess there was some dancing involved?)

Thursday, September 22, 2005

Evacuating a City: Do it Right!

I walked past CNN today where they were showing people evacuating Houston, TX. The Interstate highways leading out of town was packed, bumper to bumper for a reported 100 miles. People were running out of gas sitting in traffic.

But, then you look to the other side of the Interstate--the highway leading into Houston. You would see 1 or 2 cars every minute pass by the camera.

Am I the only one in America who thinks that when a major city evacuates, then all major roads out of town are to be opened up for outbound traffic? Make both sides of the Interstate into one way traffic leading away from the city. Don't force everyone to use the same roadway when there's an empty road only 50 feet away!

When evacuating a city, mandate that inbound traffic must use backroads, and keep the major infrastructure reserved for outbound traffic.

Hopefully, someone will realize this before it's too late.

Useful Device: Capo

I purchased a Capo last night for my guitar. I wasn't quite sure before the purchase exactly how it would change my playing, but I kept seeing that some tabs stated "Capo 1st fret", etc.

It became very apparent after using it for the first time exactly what it does, and the effect is awesome! I can change keys without changing the voicing of the chords and without barring (which I have problems with for whatever reason).

That is, if I place the Capo on the 3rd fret, and then play the Em chord relative to that Capo, then I'm actually playing Gm without needing to bar the 3rd fret with my finger.

It's only useful for wholesale key changes, so it doesn't solve all of my barring needs. But, I think it was an excellent investment of $15.

Wednesday, September 21, 2005

Dino Esposito on WWF

Using my blog as a personal bookmark for this post, which I intend to read later....

WinFX Funny

I read something amusing just now.

Steve Eichert states on his blog:

WCF [Windows Communications Foundation] is pronounced "Indigo".... The WCF is silent.


Which, I guess was a takeoff of something that Chris Anderson stated:

... and for clarification, yes, "WPF" [Windows Presentation Foundation] is pronounced "Avalon".... The WPF is silent.

Sunday, September 18, 2005

GEOS

My first introduction to the Graphical User Interface was "GEOS 2" for the Commodore 64 by Berkely Softworks. It's amazing to think about how much functionality they were able to push onto a 1MHz processor with 64Kb of RAM.

http://www.guidebookgallery.org/screenshots/geosc64

I mean, it's hard to get "Hello World" to compile in less than 64Kb with today's personal computing environments and programming languages.

Anyways, after "graduating" from the C-64 to the IBM/Intel platform, I stayed with GeoWorks as my preferred OS:

http://www.guidebookgallery.org/screenshots/gwe2

Back in those days, though, it was common to multi-boot into different operating systems. Or, rather, you usually had MS-DOS installed, and then started up different graphical shells (Windows 3.x included).

I found a way to put GeoWorks onto a bootable floppy so that I could take it to the computer lab at school. I was doing desktop publishing at that time for extra money, and couldn't stand anything MacIntosh-related (I still can't figure out the one-button mouse). So, I'd head to the PC lab that was in the Computer Center, go back to a corner machine right next to a laser printer (had to pay per sheet). If anyone came over (like a lab assistant), I simply hit the reset button.

Ah, good times. GeoWorks was actually a better OS (IMHO) than Windows 3.1. I'm sure that a lot of people would say that just about anything is better than Windows, but I'm not part of that FUD machine.

I love my Windows today, but I wonder how the world would have been different if there were follow-up OS's like GeosWarp, Geos98, GeosXP, Geos2003 Server, and finally Geos Vista.

My guess is this: A bunch of Linux people would say that monopolistic Berkeley Softworks is Evil, that Windows NT is such a better operating system (but too bad that the small company Microsoft went bankrupt), and why can't they install Geos without GeoMedia or GeoWebBrowser?

Saturday, September 17, 2005

Windows Workflow Foundation

Channel 9 has an introduction video to a new piece of WinFX that was announced at the PDC: Windows Workflow Foundation.

Finally! A general purpose workflow engine from Microsoft with an awesome graphical designer as well.

I'm still trying to grok what exactly the WWF entails, but my initial impression is that it's going to save me a lot of time by not having to code my own workflow logic (or at least not to the level that I'm currently having to do whenever I need workflow functionality in my apps).

Tuesday, September 13, 2005

New Orleans Funny

Perhaps my timing is a little off in blogging about this right now, but I was just reading an article on CNN.com where Jeff Koinange was reporting from the streets of New Orleans. In his report, he writes:

"Right now, the street is dry and resembles a disaster zone. There's garbage everywhere and it smells."

Umm, from what everyone who has been to New Orleans tells me, isn't this actually a sign of normalcy returning to the area. ;-)

Different Version of Vista

I was part of a discussion today where we discussed the rumored 7 different packaged versions of Windows Vista, like this is a scary monopolistic thing, or something else Evil®.

The way that I see the different versions of the OS is kind of like shopping for a car. Imagine if people bitched about how many model/trim combos there are!

Honda Accord
....Coupe
........LX
........EX
........LX V-6
........EX V-6 6MT
........EX-V6
....Sedan
........Value Package
........LX
........LX Special Edition
........EX
........LX V-6
........EX V-6 6MT
........EX V-6
....Hybrid

I see this as a way for MS to offer varying levels of the same OS, but offering different functionality for those who need (or want) it. For instance, if you don’t need (want) the packaged media player (for the commies Socialists in the EU), then buy a version that doesn’t offer it.

However, maybe they will only package a feature that you want (need) with media player, in which case, you’re stuck with it.

I ran into a similar situation when I bought my Windstar. We wanted the factory video, but it wasn’t offered in any of the lower trim packages, so we were stuck either getting the SEL or the Limited packages. Sure, we could have gotten a stripped down Windstar trim and then installed an aftermarket video solution, but we decided to go with the package from the factory.

Even though the video system is what we wanted, we also had to get things like adjustable pedals, self-sealing tires, flat-tire indicator, digital information center, and backup sensors (which I love, btw). There's really no way to easily uninstall these features simply because I didn't want them.

No one calls this anti-competitive in the automotive industry.

Friday, September 09, 2005

Active Sun WARNING

My favorite time of year is approaching: Autumn.

Why? Because of the increased likelihood to see Auroras (Northern Lights) in my location.

This week, sunspot number 798 has rotated into view, and is currently extremely active. On 9/7/2005, it belched out an X17-class flare (as I type this, we're experiencing elevated spaceweather conditions due to a glancing blow from the resulting CME). Over the course of the past day, there have been two separate X-Class flares, and a whole bunch of M-Class flares.

X-Class, M-Class... How big are these?

Well, think of fishing. An inactive sun is like catching a tiny fish (minnow or maybe a small bluegill). These are class A and B flares.

Class C flares are like catching a fish that's big enough to eat. Nothing that you would necessarily put on your wall, though.

Class M flares are significant, and can kick up auroras. These are like catching something like a Walleye to a Salmon, and you have to struggle to reel it in.

Class X flares are the big ones. These are powerful, and if Earth-directed, will almost always kick up auroras. For these fish, you're on a boat in the open sea. You have to be strapped in or else the fish might take you off of the boat with it.

The big Class X flares (X10 and bigger) are more like whaling than fishing. The one the other day is a like a dolphin or small orca Shamu at Sea World (Note: I was initially wrong about how big X17 is--this flare actually made the record books as the 4th largest since 1976). The biggest one that I've "witnessed" was like the size of that Sperm Whale that exploded last year in Taiwan.

There's always the possibility of a huge Blue Whale being ejected from the Sun. That would cause some damage here, though.

Suddenly, this is sounding more like a Douglas Adams novel than a blog post....

Thursday, September 08, 2005

Scobelizer Must Retire Now

Catchy title, eh?

But, seriously. Where does he go from here:

http://channel9.msdn.com/showpost.aspx?postid=111598

I think that interview could have just been Robert's career climax! Maybe it's time to change focus... Leave on a high note... Pull a Seinfeld.... (any more euphemisms that would apply here?)

Development Web Server Included with VS.NET 2005

At last week's MSDN demonstration in Detroit, Bill Steele showed off how Visual Studio.NET 2005 will provide a web server for FileSystem-based web sites, which means that you can develop and test ASP.NET applications without the need for IIS! Very cool!

I started exploring to see if this could be invoked outside of VS.NET 2005, and indeed it can! My machine running VS.NET 2005 includes a program in the v2.0 Framework directory called WebDev.WebServer.exe. Another machine with an older version of the v2.0 Framework (but without VS.NET 2005) did not have this file, so I'm not sure if it will be included as part of the framework going forward, or if it's only included as part of Visual Studio.

An excerpt from a separate writeup that I'm working on:

Visual Studio.NET 2005 provides a small stand-alone web server that can be used by developers to test ASP.NET web applications without requiring IIS. Right-click on a FileSystem-based Web Site project, then choose "View in Browser" in the context menu, and the web server will launch and listen on a random port number.

To start this web server manually, use the following command entered on a single line (from START Run, or from a command prompt):

%windir%\Microsoft.NET\Framework\v2.0.50215\WebDev.WebServer /port:1337 /path:"c:\src\AspnetWebapp"

The /port parameter is used to set the port number that the server listens on. In this example, it is set to 1337, but if that port is already in use, then you can set it to anything other port that is open.

The /path parameter is used to tell the web server where the webroot directory is. This would be the equivilent to being c:\inetpub\wwwroot for IIS.

A third parameter (not shown) is /vpath, and is used to set the virtual directory that will be mapped to that physical path.

Tuesday, September 06, 2005

New Orleans Idea

I haven't seen this idea posted anywhere (but really haven't looked): Why not embrace the fact that the city of New Orleans is lower than the sea level around it instead of trying to constantly combat nature by keeping the water out of the city (eventually, nature always wins).

I'm talking about flooding the city permanently, sort of like Venice, Italy. Or at least have a flooded section and build up other parts of the city so that they're actually higher in elevation than the sea level. Life in the flooded section would exist above the waterline, and water taxis and gondoliers would shuttle people around.

Yeah, you'll lose a lot of historical buildings by embracing this approach, but compared to the alternative of constantly rebuilding after flooding (and paying insurance premiums in the interim), this just seems more logical to me.

Aircraft Carrier Role in Hurricane Relief

I heard the other day that an aircraft carrier was making its way from Norfolk, VA to the Gulf of Mexico. My initial thoughts were, "How is an aircraft carrier going to help?"

There's actually a brilliant reason for why this was done, and shows off how a massively destructive wartime weapon, like the aircraft carrier, can become a great vehicle of humanitarian aid when required.

First off, the ship is nuclear powered, so there's no massive Diesel fuel consumption in moving it around. I find this important because that equivilent amount of fuel would be better used for land-based vehicles, like trucks.

Secondly, these things are fully self-contained floating cities, complete with fresh-water generation capabilities. They estimate that the one ship can output 400,000 gallons of fresh water per day, which is just amazing to me.

http://www.news.navy.mil/search/display.asp?story_id=19910

Friday, September 02, 2005

Ungrateful Evacuees

As I sit in the comfort of my dry northern 'Merica location, I'm constantly scanning the news reports for any sign of good news coming from the south. Then I come across this on MSNBC talking about a convoy of supplies finally reaching into the Convention Center (which is good news, so I would have thought):

“Hell no, I’m not glad to see them. They should have been here days ago. I ain’t glad to see ’em, I’ll be glad when 100 buses show up,” said Michael Levy, whose words were echoed by those around him yelling, “Hell, yeah! Hell, yeah!”

“We’ve been sleeping on the ... ground like rats,” Levy said. “I say burn this whole ... city down.”

My thought: F*** Michael Levy and those around him. What have they been doing for the past 3 days? What could they have been doing to make the situation better? Are they prisoners being held at the Convention Center? Now that they are refugees evacuees, is it all that they can do to hold the ground and await their Entitlements?

I feel sorry for people that have lost everything. I really do. But, these same people need to take matters into their own hands and not wait to be told to do something or wait for handouts to come to them. They need to either assist in the recovery effort by volunteering manual labor, or get the hell out of the area. They need to be grateful that America is coming to their aid, not staring at a running stopwatch and complaining about how long it takes for that aid to arrive.


And now back to our regular programming.... I'm going to have my empathy circuitry serviced soon...

Looters: Can We Blame [All of] Them?

I've heard a lot of people talking around me about how looting is such a problem in New Orleans right now. I'm quick to think of looters as being these profit-oriented thieves who are breaking into Best Buy and grabbing all of the HDTVs that they can (because, what, they're going to sell them out of the back of a rowboat down some dark alley? And to whom?).

But, then I start to think about people who might be looting for the "right" reasons. I'm talking about people breaking into a grocery store to get food or bottled water. Will these people, too, be shot on sight? What about people who have lost everything, and break into a clothing store in order to get some fresh clothes to wear, or sturdy footwear? Are we supposed to hold these people in the same category as the opportunistic looter who might be stealing air conditioning units at this time?

Granted, there has been an evacuation order, so there aren't supposed to be any residents still in the vicinity. But, we're also hearing on the news about how there's a real lack of coordination going on. Some people were interviewed on CNN about how one police officer ordered the crowd towards one location, but when they got there, the police at that site started firing their guns into the air to keep the crowd from advancing.

We're really no better prepared for a loss of normalcy today than we were four years ago. And the authorities in the south had time to formulate a plan (unlike during 9/11 when there was no advanced warning). To me, that's scary.

Thursday, September 01, 2005

This is awesome, but....

CNN lists contributions that big greedy companies are making toward the hurricane relief effort:

http://money.cnn.com/2005/08/31/
news/fortune500/firms_hurricane/index.htm


This is awesome, but why is it only during times of disaster that such big contributions are made? What about those people who are homeless all of the time, who are in need of medical care now and will continue to be after New Orleans is re-inhabited, and who dig through trash dumpsters to find food?

I wonder how long the "regular" urban refugees could have been fed in this country with the same level of donations given to clean up Katrina...

Bill Steele... You Sir, Are Smarter than Me!

I just got back from attending a MSDN Event in Detroit where Bill Steele presented on ASP.NET 2.0, and a lot of the "drag/drop/configure and IJW" technologies being included in the next version of .NET (though, several of his demos did not Just Work). My conclusion: I really need to come up to speed on ASP.NET.

I mean, I've been on 3-4 ASP.NET projects since 1.0, with a couple of those being million dollar projects. But, whenever I stare at a blank project, I have no idea where to start (OSASPADO sites, on the other hand: I can crank those out without thinking).

Anyways, Bill is the "local" MSDN Evangelist (I believe that Developer Community Champion is his real title) for this region of the country. He actually lives 3 hours from me, and at least 4 hours from Detroit, so "local" is kind of used lightly. I've seen him present on 4-5 different occasions now.

He caught my interest recently when he started blogging on a flying car idea, or rather, a flying 3-wheeled motorcycle, which should have less stringent highway safety requirements than a car would. I think Rory Blyth put it best when he described Bill as being "freakishly smart", or something to that effect.

I introduced myself to Bill after the session, mainly so that he could put a face to the name of that annoying person who keeps leaving blog comments. We got to talking about the flying car (because frankly, there's little more that we really have in common at this point, so it was an obvious topic). To my surprise, he has this thing modeled out in X-Plane, and has already worked on some redesigns because he discovered that it has some stability problems when it flies! (X-Plane is able to take all of the aerodynamics of the model into consideration to provide a pretty accurate representation of how a real aircraft would perform)

He then proceeds to fire up X-Plane while I'm standing next to him, and takes off from an airport in his flying car, achieves straight and level flight (to show the instability issue), and returns back to the airport (and like a true pilot, he calls out his transitions while entering crosswind and downwind, as well as turning base and turning final--he probably didn't notice that, though).

To that, I say: Bill Steele, you flying car designing, X-Plane model building, ASP.NET teaching MSDN Presenter...You Sir, are Smarter than Me!

[Mark Miller/Mondays reference, should anyone not get it]

On a related note, Bill is taking time off of work between now and the PDC to fly his own plane down to Louisiana in order to help shuttle MREs into distribution points to help feed people in this time of disaster. As he described it to everyone in the session, the first trip will gross out his plane, and in the end, he hopes to deliver something like 20,000 meals total. Bravo, Bill.

UPDATE 9/9/2005: I see that William has just blogged about the experience:

http://blogs.msdn.com/wsteele/archive/2005/09/08/462752.aspx