A friend of mine visiting from Dallas last night was telling me about GrandCentral, a service that allows you register a phone number and have any calls to that number forwarded to your real number.  My friend has a season tickets to the Dallas Mavericks and sells his tickets.  He sells the tickets through craigslist and doesn't want to reveal his real phone number.  GrandCentral work much like I the spam management tools I wrote about recently.

I just went to sign up for GrandCentral and see that the service is available in Iowa:

 image

When trying to sign up however using the area code I am told that no numbers are available:

image

I reason to myself that it's not a big deal since Iowa has a few area codes, so I'll see what numbers are available by selecting the state from the provided drop down.  Can you spot the problem:

image

Iowa is not in the list.  So how does an Iowan sign up for GrandCentral?


 
Categories: Musings

December 27, 2007
@ 11:24 PM

Nope, this isn't a slam on Microsoft or a post about Big Brother.  Rather it's a praise.  I have been impressed by Microsoft over the past few months and the attention they pay to the "blogosphere".  I don't know if it is a Microsoft policy or if it is product developers keeping an eye on what is being said about their product, but they are watching.  Two of my posts about Microsoft products have generated an email conversation with someone from Microsoft who works on the product.  A few weeks ago I posted about how Windows Live Writer was deleting my DasBlog posts which received the following comment from Charles Teague:

"Hey Tim,
Sorry that this is happening. Can you clarify what you mean about the post being gone? I can see the Linux post
just fine in both IE and Firefox.
Best,
Charles (MSFT)"

Looking into Charles' about page reveals that he works for Microsoft working for the Windows Live Writer team.  I'm impressed that they're watching, whether it is policy or not.  I think it shows quite a bit about the people that work for Microsoft.  All too often there are anti-Microsoft rants and ravings and not enough praise.  I am glad to see that they're paying attention to adopters of their software and that in many ways their seeking out their customer base and watching the reactions instead of having me go and search for a resolution.

So thank you to you Charles for being aware of what's going on with your product and being so willing to help.  If any of you Microsoft employees come upon this post, I'm curious if this is a corporate policy or a personal one?


 
Categories: Musings

This is the second-edition of a post I made a long time ago on a different blog.  I'm posting it because of a post made by Eric Bowden about his new approach to personal email management.

"So here is the approach:  I have a dedicated domain name "scrappydog.com" with just one email user (me).  All email to any email address in the scrappydog.com domain lands in my inbox.  This allows me to created a separate dedicated email address for every organization I do business with, and I can create a one off random address for any interaction I want."

In the comments Tony Toews quickly points out a flaw in Eric's plan:

"However, once the spammers start using your domain in their spam emails you will be inundated with bounces.  Several of my domains are getting hundreds of bouncers per day.  And you will be forced to created individual email accounts on your server.  So keep track of all those account somehow."

Currently I have a two tools (both free) that I use for spam management beyond the provided spam filters:

SpamGourmet

SpamGourmet.com is a free service that allows you to generate disposable email addresses.  Once you create an account, you can create unlimited disposable email address.  If my username is "Tim", I create a disposable email address using the following pattern: <disposableIdentifier>.<maxEmails>.<username>@spamgourmet.com. If I was signing up for an account with CNN.com I would use the email address CNN.20.Tim@spamgourmet.com.

Any email sent to that address will be forwarded to my real email address.  I use this service for websites that require an email address for signing up and I may wish to receive emails in the future.  Having SpamGourmet allows me to make sure the website hasn't sold my email address.  If my email address is ever sold I will know who sold it, by the identifier I used to create it.  Also, given that I've set a maximum number of emails, if it does get sold, I won't get inundated with emails.

It should be noted that SpamGourmet comes with many slick advanced options, whereby the situation described above by Tony can also be averted easily.

SpamBox

SpamBox.us allows the same type of service, however you don't need to create an account.  Again, all emails to that account are forwarded to your real account which is hidden.  SpamBox is time based.  You have to go to their website to create an email address and while creating the address you specify how long before the email address is deleted.  I use this service for websites that require an email address for signing up and I'm fairly certain I don't care if I ever hear from them again.

Do I trust SpamBox and SpamGourmet not to sell my email?  Not entirely. They say they won't, but  you never know.  The way I see it though, is that if they do in fact sell it, it'll only becoming from one source rather than 35-50 accounts I have opened around the internet.


 
Categories: Tools

Scott Hanselmen posted this morning about aideRSS.  I decided to run aideRSS over my blog to see what would the results would be.  Apparently I have only one "Great Post" which made me chuckle:

aideRSS

Apparently my test post from yesterday was "Great".  I wonder if that's an indictment on all my other posts or something internally goofy with aideRSS's calculations.  I was impressed that AideRSS correctly labeled my Vista Printer Installed - Dell All-In-One 922 Now Printing and Nant Setup for Visual Studio 2008 and .net 3.5 as having the high scores in the PostRank column.  These two posts are clearly the most trafficked when I look at site statistics.

I have to say I'm impressed with what how it works:

"...in a nutshell you enter the URL of the feed that you would like to have filtered and we do some math and checking around the web to learn about this feed, its statistics, and people’s reaction to it. We then assign PostRank™ scores to all articles in the feed and provide you with a variety of tools to sort and parse these items of interest into manageable lots for you to scan and digest at your leisure."

Scott's explanation may be more meaty:

"Well, since it can't really measure quality it infers it indirectly by creating a metric based on the number of del.icio.us bookmarks, diggs, Blogger references, Technorati references, Google BlogSearch reference, IceRocket references and a few others."

As I'm blogging more I intend to check in on AideRSS every so often as I think this is just another way to see which posts are worthwhile and which aren't.  However, I will say that it briefly crossed my mind to retire from blogging seeing as how 100% of my posts are "Good", easily beating two of my favorite bloggers Scott Hanselman (61%) and Jeff Atwood (75%).


 
Categories: Musings | Software

I've had it happen a few times since starting to use Live Writer a few weeks ago.  I'll post and see the new post and then the post will be gone.  The latest occurrence is this morning's post about Linux.

I presume it to be a Live Writer problem since I never had this problem when using the HTML Wysiwyg editor in the dasBlog.  However the strange thing is that the post is clearly visible, which means it's gotten to dasBlog just fine only later to disappear, so is this a dasBlog problem?

Anyone have any idea what's going on?


 
Categories: Software

December 18, 2007
@ 01:01 PM

Recently I was at lunch who two fellow developers.  The discussion focused on various technologies and the future of technology as it seemingly always does when a group of nerds gather.  The discussion somehow meandered it's way to Linux, where I admitted that I didn't understand or get it and ask both developers to explain Linux to me.  Both were happy to talk about Linux from the different distributions to why Linux is so neat.  Still a few weeks later and after it was passionately explained to me, I still don't get it.

For home users Linux must meet or exceed current Windows functionality.  Windows has long been the operating system of "choice" in the home.  The (un)fortunate side effect is that you can buy any peripheral or software for your computer and most likely it will work.  The same can't be said of Linux.  I don't see Linux breaking into the home market for quite some time, if ever.  Here's an article from Joe Brockmeier on the subject, he states:

"Linux isn't a direct Windows replacement, and users seeking a drop-in replacement for Windows often come away disappointed. Not because Linux is unusable as a desktop, but because it just isn't Windows. A lot of people, though, don't really need Windows. They just need a system that handles basic functions and doesn't cost an arm and a leg."

Joe seems to get it.  Linux may be better in many ways but it's worse in one, it's not Windows.  Users are used to Windows.  If Linux is too different, people won't switch, if it's too similar, people won't justify the move for something so similar.  Further there's the stigma that only the über-technical work in and with Linux.  The "basic functions" that Joe speaks of is what Apple has in it's iLife package.  Apple has been running the "I'm a Mac, I'm a PC" (getamac) commercials for awhile now, hammering home the "we just work the way you do" mantra.

According to Wikipedia, Linux has 1% desktop market share.  Every now and then a new Linux distribution will pop up purporting to be the answer, first it was Red Hat, then Suse, and now Ubuntu.  If after 15 years (Linux dropped in 1992) there is only 1% adoption, I wonder if a meaningful market share will ever be realized, regardless of the distribution Linux is packaged in.  There are articles that say that 2008 is the Year of the Linux Desktop, which is sharply but in check when Joe reminds us:

"Yes, yes. I know — we've all heard this before. If I recall correctly, 2001 through 2007 have also been" the year of the Linux desktop,"

Other articles are more accurate when they say Linux Desktop is More Popular Than Ever.  But while that may be true, it's not hard to have great growth when you're small.  Similar to the day the number of subscribers to my blog doubled.  Sounds pretty impressive until you find out that there were only two, which doubled to four.

Linux has support which is evidenced by it's strong, ardent community. That community however is mostly comprised of developers and the techno elite.  Until that community starts reaching out to the people that "need a system that handles basic function and doesn't cost an arm and a leg" Linux will remain a enthusiast OS.


 
Categories: Musings

Moleskine1 I've used a Moleskine Ruled Notebook for a little over a year.  In it, I keep track of blog ideas, meeting notes, phone numbers, to-do items, and other miscellaneous items that I need to jot down.  I love that it is small and rugged enough to be stowed away in my back pocket.

You don't have to look far to find lovers of the Moleskins and various "hacks" people have employed to make their Moleskines more personal/usable.  In fact, at the SEED Conference in October, a fellow employee of mine laughed when another conference goer noticed my Moleskine and showed me his collection.  Soon after there was a small gathering around our table showing off their Moleskines.  My co-worker can laugh, but Mike received accolades from 37signals on his sketchbook notes.

However, as great as they are, I commonly run into the problem with my Moleskine of being able to quickly find something I'm looking for.  I've numbered all the pages and have a table of contents, however the problem arises when I move to a second, third, or fourth book.  Notes and sketches become hard to find.

Enter the new Cahier Moleskine.  These are small enough that I make them topic specific.  As you can see by the picture on the right, I carry one solely for ideas about VitalSite.  It's useful when you're checking out at the grocery store and an idea to use LZW compression for your database blobs hits you and you need to jot down all your thoughts and reasoning.  I've had it happen enough times where I think I'll remember the idea by the time I get to paper/computer only to lose the idea and it's context a few moments later.

I've also started to use one cahier notebook per book I read, keep all the notes and thoughts a book generates in one tidy package.  The theory being that I can always go back to the notes on a book quickly and easily.  I also use one notebook per conference I attend, keeping conference notes handy and easy to find when I say, "I don't remember...but I know Jim Coudal said it at SEED."  I don't always fill them, but that's not the goal, clarity and findability are.

Moleskine2

If you are a Moleskine lover then I'd encourage you to give these a shot.  They're handy and not too expensive.  They're not as durable as their big-brother original, however, I find that I don't use one nearly as long and therefore doesn't have to be nearly as rugged.


 
Categories:

December 15, 2007
@ 01:24 PM

I'm reacquainting myself with Visual Basic.  However at this point I'm seeing some strange behavior.  I'll quickly navigate around it but I just find it odd, take a look for yourself:

Vb Exception Oddities

What seems very strange to me is that you can see very clearly that on line 1041, System.FormatException is being caught, however the exception is never caught.

I'm wondering if it has to due with the multiple statements all in one line?  Any thoughts?


 
Categories: Software

I finally got my printer working, several hours later.  I thought about simply updating my previous post however I wanted to document the steps I took in the likely event that I'll need to do it again.

  1. Download 64-bit driver package and extract. (Dell AIO 922 x64 download)
  2. Plug in printer via USB.
    • When prompted, decline to install driver (their "Recommended" driver does not work).  You may be prompted twice, decline any "help" each time.
    • You also may get an error about devices not being installed properly, that's ok.   We're overriding what Vista wants for a driver and supplying our own, correct version.
  3. Go to the Control Panel and select "Printers"
  4. Right click somewhere in the window and click "Server Properties"
  5. Go to the "Drivers" tab and click "Add..." to launch the "Add Printer Driver Wizard"
  6. Follow the wizard, selecting the appropriate processor architecture if not already selected.
  7. When presented with the "Printer Driver Selection" page (very Windows 98-esque) click "Have Disk..."
  8. When prompted for the location, point to the the inf file for your particular install.  For my All-In-One installation the correct location was C:\dell\drivers\R151379\drivers\Win_XP2K.  Why is my Vista x64 driver stored under an XP/2000 folder?  Quite frankly, I don't know.
  9. Allow the driver to install.
  10. After the install, exit/ok your way back to the "printers" area.
  11. Now select "Add Printer"
  12. Select "Local Printer"
  13. Select your USB port from the existing ports, which is a virtual port.
  14. Repeat steps 7-9
  15. When asked to replace or use the current driver, opt to use the current driver.  Remember we set it up manually back in step 8.
  16. Name your printer
  17. At this point, the Dell printer software took over and I had to agree to some EULA.  Click/Navigate your way through these selecting optional items such as Sharing and default printer along the way.

That's it!  Only 17 long, arduous steps.  There may have been other steps/processes that would've worked, however a number of obvious ones failed miserably, such as simply clicking "Add Printer" or running Dell's installation software.


 
Categories: Hardware

December 13, 2007
@ 09:42 PM

I'm sick of seeing the following....

image

For something as simple printer, for which I have 64-bit drivers,  I'm surprised Vista is struggling so much with installing and running a printer for more than 15 seconds.

A quick Google search reveals upwards of 1,000 entries from the error message above.

Ironically, there's a Apple commercial about this very thing.  Pay attention to the 11 second mark:

"If your printer isn't compatible with Vista, I say, 'buy a new printer.'"

As I'm working on this post, the CD I'm listening too just stopped and I was presented with the following:

image

At least it's checking for a solution, that's got to be worth something right?


 
Categories:

December 13, 2007
@ 06:08 PM

Has this ever happened to you?  You been asked to put together something quickly to demonstrate some functionality and it somehow has ended up in production?  I have, and for that reason, I believe there is no such thing as a prototype.

When I'm asked to see if something is possible, I, being a good pragmatic programmer, run off to implement a quick prototype.  Author David Thomas explains the idea of a prototype:

Prototypes by their nature are not designed to be long lasting code. Prototypes are designed to be thrown away. They're one-offs. It is inappropriate to over-engineer a prototype. A prototype is like a town in a western movie. It's all facade. There's nothing behind it. You cannot move in and raise a family in one of those houses.

If you've been around for any period of time in development, you've probably written something yourself, or at the very least seen something that has weaseled it's way to production that was never meant for production.

Believe it or not, the site below is in production. 

proto2

Currently the site performs limited, but somewhat crucial, functionality.  The administrative home page clearly leaves something to be desired.  However, I happen to know the developer who worked on this site and he explains that it was never intended to go live in it's current state.  Business rules/needs trump gold-plating, it's a concept that the business-brain part of me understand, but the developer/craftman.

Talking with another developer today, he recalled a system he put together as a consultant to demonstrate some piece of functionality.  Some time later another developer was putting a pretty UI on it, since it had made it's way to production.

I think somewhere deep inside of developers, we know that when asked to prototype something it may someday end up in production, whether we build it for production or not.  Developers are prideful, artistic creatures.  Our code is our craft!  We're also learnable.  I now tend to make prototype code something I would be proud of if I were to show it someone else.

Ultimately I think prototypes are a great tool, but there's a danger in the prototype going live, which from the definition above isn't sustainable.  Ultimately that's why I'm jaded a bit and say that a prototype is an imaginary thing, only production and soon to be production.


 
Categories: Musings | Software

Programming languages these days do their best from keeping you from doing something stupid.  We have compile time checking, "managed" code, and garbage collection.  We've been led to believe that if you just write the code, in any fashion that meets the requirements of the project, that any missteps you may take in code will be corrected. 

That's the case with garbage collection.  We've been sold this idea that variables can be created wherever, whenever, and however you want, the runtime environment will clean up after you.

However the following blog post titles (all from the same great author) tell a different story:

Last Friday I spent the day going through a windows dump file tracing down a poorly performing application's problem for a client.  With a dump file I have a snapshot of everything going on at that moment in that process (aspnet_wp.exe).  It's an interesting challenge.  Given that snapshot, it's an interesting to see what you can find out.  However, I would assert that not enough developers know how to use it, or even of it's existence.

A quick poll of 12 developers I know showed that only one had ever used WinDBG and he qualified his "yes" vote with "yes, although not very well".  Extrapolating that figure would show that  92% of developers cannot debug their application without Visual Studio support.

Do the post titles above inspire confidence in the .NET Framework?  If there was a "strange" problem occurring in your application, are confident you could fix it or identify a list of possible problems?  Could you do it while the application is running in production?

If your WinDBG skills are lacking, I encourage you to take a little dip into WinDBG and get your feet wet by following the guide from Johan Straarup

Happy debugging!


 
Categories: Software

December 5, 2007
@ 05:06 PM

Who ever thought this was a good idea?  It feels wrong on so many levels.

Dim enableRegistration As Boolean = CBool(IIf(CBool(DataBinder.Eval(e.Item.DataItem, "IsOnlineRegistration")), IIf(CInt(DataBinder.Eval(e.Item.DataItem, "EventSize")) = 0 Or CInt(DataBinder.Eval(e.Item.DataItem, "EventSize")) = -1 Or (CInt(DataBinder.Eval(e.Item.DataItem, "EventSize")) - CInt(DataBinder.Eval(e.Item.DataItem, "Registrants"))) > 0, True, False), False))

And since we code review like the mafia, put the poor soul out of his misery .


 
Categories: Software

Yesterday I posted about an issue I was having with Nant and Visual Studio 2008.  The solution I found from Jeffrey Palermo ultimately only got me so far.  First, let me say that if I simply wanted to build the code, the solution Jeffrey provided was adequate.  Where I ran into issues was when I was trying to use the "gac-install" task which is provided by the NantContrib package.  I was using this task in a "test" target, which run my unit tests.

I kept receiving an error when running the "test", which included the "gac-install" as one of it's tasks:

"The SDK for the 'net-3.5' framework is not available or not configured."

So why did Jeffrey's version work and mine not?

I dug around a bit and looked at the nightly build for nant, as I read somewhere that there was 3.5 support built into nant but just not released yet.  I looked into the nant.config.exe provided with the download and found that it does not yet work out of the box as it points any 3.5 project to use the 2.0 version of msbuild. (note to self, hop on SourceForge and make a bug or help with the fix)

Not one to give up, I dug into the nant configuration.  Inside of the nant.exe.config there are two properties from which many other properties are derived, those two properties are

  1. installRoot
  2. sdkInstallRoot

These two properties are read from the registry.  The registry entries are created when you install Visual Studio or the SDK.

They're used within the nant config file as part of other properties and attributes, for example:

sdkdirectory="${path::combine(sdkInstallRoot,'bin')}"

When using the msbuild task (again provided through NantContrib) the installRoot property is set to C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727, which is where msbuild.exe lives for the 2.0 framework.  However registering something in the gac uses gacutil, which isn't located in the same place as the framework.  gacutil.exe is located (on my machine) at C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin.

How does this all relate to nant and 3.5?  Well the installRoot property is used by msbuild.exe, which in Jeffrey's example, was being set correctly, which resulted in the proper execution of my nant "compile" target.  My unit test target, which uses the "gac-install" task, relies on the sdkInstallRoot property.  In Jeffrey's example his config had the following element within the xml blurb he posted:

<readregistry property="sdkInstallRoot" key="SOFTWARE\Microsoft\.NETFramework\sdkInstallRootv2.0" hive="LocalMachine" failonerror="false" />

The problem, at least on my machine, is that I don't have that registry key!  I was able to get everything working simply by changing what key it was pointing to.  I ended up with the following (bolded text indicates what has changed):

<readregistry property="sdkInstallRoot" key="SOFTWARE\Microsoft\Microsoft SDKs\v6.0A\WinSDKNetFxTools\InstallationFolder" hive="LocalMachine" failonerror="false" />

After that change, everything is working properly.

Thanks to Jeff for his original post.  It may not matter but I'm going to post my PC specs anyway, since the paths mentioned above may be OS dependent.  I'm currently running Windows XP SP2 with only VS 2008 installed on it.


 
Categories: Nant | Software

I'm having a problem with my nant script which uses the Nant.Contrib library in order to build using a solution file.  The error currently reads, "MSBuild can only read solution files between versions 7.0 and 9.0 inclusive."

Unfortunately at this time I can't find much information anywhere about this.  Either people aren't using 2008 yet or aren't using Nant.

Any smart people out there that can comment on this?

Update:  I had to search a little bit harder, given that VS2008 only went RTM a bit ago.  I did find that Jeffrey Palermo posted a solution to this a few days ago (11/28).  His fix is to modify the nant.exe.config file so that it can recognize the new framework and thus point to a new version of the msbuild.exe.  Thank you Jeff!


 
Categories: