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.