Monday, August 06, 2007

I just ran into an ad for Dell stuff on the Wired website.

Normally, I don't click ads, but I like Dell widescreen lcd monitors, so I had to check it out.

Dell is now offering a 30" Widescreen monitor! (I just wish one of their pictures put a soda can in for scale reference)

image

Its the 3007 WFP-HC, and, if it's even remotely as good as the 2405FPW or the 2007FPW (I have one of each of these), it's gonna be tough to resist clicking that "order now" button.

Check this blurb out from the site:

Note: For the best viewing experience, your PC must have a dual-link DVI-D graphics card that supports 2560 x 1600 resolution.

2560x1600 resolution. In the immortal words of Keanu Reeves, Whoa.

That's a pile of pixels to be pushing around.

One of the guys I worked with asked me how I could program in white text on a black background. Put this baby on your desk, load up VS2005 and maximize it, then try staring at ~400 square inches of FFFFFF about 24" from your face for 8+ hours a day. The 24" Dell I have can light up my office all by itself with a full white screen. 

You could use this thing to signal aircraft.

posted on Monday, August 06, 2007 4:42:11 PM (Central Standard Time, UTC-06:00)   •  # •  Comments [4] • 
Kick it •  Add to del.icio.us •  View blog reactions; 

Scott Hanselman recently did a very nice series of posts about building his "Ultimate Developer Rig", a quad core, dual PCIE video card monster machine, that certainly has some impressive specs to it.

That Scythe Cooler is particularly impressive:

image

Too bad he didn't totally geek out and put a plex window and some light tape in there... Too much?

Now, there are some that would say this is the "Ultimate Developer Rig":

image

(For the full specs, check it out here.)

But I gotta say, Scott's setup is pretty hardcore. In fact, it's almost eery the similarities between Scott's rig and the one I put together a little less than a year ago. I went with a dual core E6600 because, well, if the quad cores were even out at that time, they had to be too rich for my blood. I tried, hard, to justify the 1000$ for a E6700 Core 2 Duo Extreme at that point, but just couldn't do it.

Still, my rig gets right up there, scoring a 5.5 on the "Windows Experience" scale in Vista. If I was so bold as to delve into overclocking, I might even improve on that some. Maybe eventually.

Then, I stumbled upon Kevin Hammond's commentary on Scott's rig, and I have to say, I'm right there with Kevin.

I diverged from Scott's rig in much the same ways Kevin recommends, with a few minor deviations:

  • Vista 64 just isn't ready from primetime, due to driver and utility support
  • RAID 10 is hard to beat for resisting downtime
  • I went originally with a Gigabyte GA 965P DS3 board, but then switched to an Intel D975XBX2 when I discovered the Gigabyte didn't do 4 drive RAIDs
  • I used a Zalman cooler instead of the Scythe. I guess I'm partial to copper
  • Scott damped the inside with foam. With that Antec case, I haven't noticed the need to. It's virtually silent once the fans initially power up.

About the RAID, George Ou wrote a pretty good article on half-stroking or quarter stroking a harddrive to improve its performance. No idea whether it has similar effects on a RAID. In other benchmark tests, George pretty much slays RAID 10, which I'm a fan of. I've lost a drive out of a RAID 10 setup, replaced it and was on my way with no downtime. But when I lost a drive out of a RAID 0, I was down for almost 3 weeks trying to get everything back and operational. And drive images are only good if almost everything else about the machine stays the same, which, in my case, didn't.

None the less, if you're looking to put together a wickedly fast machine for under 2 grand, and you want it to be so quiet, you NEED lights on the outside to tell it's on, I highly recommend reading through Scott's parts list.

posted on Monday, August 06, 2007 4:39:04 PM (Central Standard Time, UTC-06:00)   •  # •  Comments [0] • 
Kick it •  Add to del.icio.us •  View blog reactions; 
 Sunday, August 05, 2007

I'm a diehard technophile, but this makes even me a little unsettled.

image

It's a whole computer, INSIDE a frog, a real, albeit dead, frog, suspended in a tank. The computer is a webserver. You can browse the site and click buttons to "activate" its left and right legs.

For the full project info, check Frog Implanted with Webserver.

Hmmm, I can't even think of any quip to go with that.

posted on Sunday, August 05, 2007 12:32:23 PM (Central Standard Time, UTC-06:00)   •  # •  Comments [1] • 
Kick it •  Add to del.icio.us •  View blog reactions; 

I've noticed something a bit peculiar about fonts and programmers.

There's the camp that's thoroughly researched the topic, experimented with piles of fonts and ended up selecting one that they can be quite vocal about.

And then there's the camp there never changes the default that came setup in the IDE they installed.

I guess I come from the former. Courier? No way. Arial? Ack! Programming in a variable width font just seems, so, ewww. I was a good, old fashioned FixedSys man for ages. It was decent, had a nice fixed width, slightly too bold, but I could live with it, came with every copy of windows and was pretty legible across all the common characters. But about a year ago, I embarked on a quest to find a better font.

Many, many downloads later, I believe I've ended up with the best of the options out there. The freely available ones, anyway.

I've taken screen snapshots of all fonts at approximately 14pt size. I used 14pt because it's the most comfortable size for me.

I've also included a snapshots of the better fonts at different sizes, so you can get a feel for how they scale.

Bitmap fonts

I'm not a big fan of the bitmap fonts (the FON files). They don't scale well except where they've been defined at multiple sizes (not really scaling), and don't believe they take advantage of ClearType, certainly not very well. Still, there are some interesting bitmap fonts out there.

Most of the good ones are intended to be used as very small fonts. If you have eagle vision, some of them might work quite well. But my eyes would jump screaming from my their sockets if I tried to program in some of these all day.

image 10x20-iso8859-1.fon Not bad but it doesn't scale. Some elements bleed too much.
image 9x15-iso8859-1.fon Too thin for me
image 9x18-iso8859-1.fon Also too thin
image BSUKermit.FON Base size is too small. Doesn't scale
image Dina.fon Base size is too small. Doesn't scale
image DOSLIKE.FON Not bad, but it doesn't scale. Has a few too many serifs for my taste.
image GwdTE_437.fon Base size is too small. Doesn't scale
image Hyperlt.fon Actually called HyperFont LT
image IBMPC.fon 10pt. Yikes. Quite small.
image IBMPC.fon 14pt. This is what happens when bad fonts scale.
image PROFONT.FON 12pt. Too small, and the letters bleed together at this size.
image PROFONT.FON 14pt. Way too thick at this size, plus kerning is wacked.
image

Raize.fon

10pt. Not too bad, but too small for me.
image Raize.fon 14pt. There's just something about the letter shapes at this size that don't feel right.
image_thumb2[1] Sysmono.fon As close to 14pt as I can get with this font.

True Type Fonts

I prefer the true type fonts. They scale well all the way down to about 7 points, but they can take advantage of ClearType, and a few are even specially designed to make optimal use of it.

image_thumb5 Arial.ttf 14pt. Just for reference, a variable width font just doesn't work for me and programming.
image_thumb3[1]

Aerial Mono.ttf

14pt. Pretty good. Seems a bit too bold.
image_thumb4[1]

Andale Mono.ttf

14pt. Quite good. This one was in the running for a while.
image_thumb5[1]

AnonymousRegular.ttf

14pt. Yikes, serifs and programming just don't mix.
image_thumb6

AnonymousRegular.ttf

11pt. Smaller size, same serif problems. I do like the zero, however.
image_thumb7

Bitstream Vera Sans Mono.ttf

14pt. Excellent font. Maybe just a tad too bold, but this one was also in the running.
image_thumb1[1] Consolas.ttf 14pt. Excellent all around.
image_thumb4 Consolas.ttf 10pt. For reference. Scales well.
image_thumb8 Everson Mono Unicode.ttf 14pt. Very good, but the letters seem to be a bit thinner than numbers and symbols, which looks odd to me.
image_thumb1 Fixedsys.ttf 14pt, note this is the TTF version of the FixedSys font, not the bitmapped version. It's too heavy for me.
image_thumb9 HyperFont.ttf 14pt. Not bad but similar problems to Everson Mono.
image_thumb10 Larabiefont Bold.ttf 14pt. Wow. Those zeros. oh, wow. Screams l33t!
image Letter Gothic Line.ttf 14pt. This one's not too bad, but check out the lower case m's. Funky.
image Monaco.ttf 14pt. Excellent font. Originally from the Mac. the parens are a little odd, but this was definitely in the running.
image PixelCarnageMonoTT.ttf 14pt. Hmm, seems small for 14pt. Decent, but not right for me.
image ProFontWindows.ttf 14pt. The "u", "n" and "c" threw me. This is just a little too "programming in the FUTURE.. FUTURE.. FUTURE.. FUTURE".
image

ProggyCleanTT.ttf

Intended to be used small. Ouch, my eyes!
image

Reader Sans Roman.ttf

14pt. Funky horizontals.
image_thumb2 Terminal.ttf 12pt. Decent, available, a bit thick in general.
image_thumb3 Terminal.ttf 8pt. Fine if you don't mind going blind at 30.
image

Ti92Pluspc.ttf

14pt. Not bad but a little tall for my taste. Any shorter, though, and it gets too thin.
image

Topaz-8.ttf

14pt. Ugh. Someone actually recommends this?

Finding the Fonts

I found all these fonts through various sites. Googling the font file name should get you where you want to be. I'm not sure as to posting the fonts for download here, so I'm erring on the side of safety. I apologize in advance for making you hunt them down.

The Winner

I chose Consolas in the end, for several reasons:

  • It comes with the newer Windows and it's a VERY high quality font.
  • The symbols aren't weird, and most of them, plus the parentheses, kind of 'pop', which I happen to like.
  • It's got a good slashed zero
  • Line spacing is nice. Not too tight or loose.
  • It's thick enough to avoid strange looking "thin spots" but not so thick as to be annoying or have characters bleed (like Terminal)
  • No pseudo-serifs (like Anonymous) 

I'm sure there's a lot more possibilities out there, but I didn't see them before I quit looking.

If you have a favorite font, let me know. If I can download it, and it's a serious programmer font, I'll add a sample. 

If you tell me you program in Comic Sans, somewhere, out there, a daemon will abend.

posted on Saturday, August 04, 2007 11:40:09 PM (Central Standard Time, UTC-06:00)   •  # •  Comments [2] • 
Kick it •  Add to del.icio.us •  View blog reactions; 
 Thursday, August 02, 2007

I've noticed a disturbing trend with Windows Explorer in Vista.

It tends to want to choose a "helpful" view of your files, regardless of what you have TOLD it to use for the view.

For instance, even though I've explicitly turned off grouping, it seems to want to turn it back on arbitrarily, and once it's on, it seems like it's back on all over the place, not just for a single folder.

And to add insult to injury, Explorer offers this helpful grouping:

image

What the hell? I know. I just blogged about Star Wars. Explorer must have hooks into Live Writer!

"A long time ago" ?!^$*!@#?

It's bad enough that I didn't say to group files in this folder, but to group them and then use an arbitrary "group" like this?

I can't wait till I group by size, and at the top of the list is:

"Big ol' honkin' files"

posted on Thursday, August 02, 2007 5:56:22 PM (Central Standard Time, UTC-06:00)   •  # •  Comments [2] • 
Kick it •  Add to del.icio.us •  View blog reactions; 
 Tuesday, July 31, 2007

Office COM addins can be registered in one of two ways:

  • Per user
  • Per machine

Per User addins will be loaded for the user that the addin was registered to. This is the common situation with addins created in VB6. Typically, this means that whatever user was logged in when your addin was installed, is the ONLY user that it will be registered for.

It's simple enough to run regsvr32 again on your addin dll while logged in as a different user to register it for the new user but this can really be a pain in a big IT shop.

Per user addins are registered under the HK_Current_Key hive in the registry. For instance, Word add ins can be found here:

HKEY_CURRENT_USER\Software\Microsoft\Office\Word\Addins

Other Office apps, namely Excel, PowerPoint and Outlook, store their addin entries in similar locations in the registry.

Per Machine addins, on the other hand, are registered in the same key, but in the HKEY_LOCAL_MACHINE hive, so, for instance, here:

HKEY_LOCAL_MACHINE\Software\Microsoft\Office\Word\Addins

Per Machine addins have the benefit of being registered once but loaded no matter what user is logged in. Definitely a bonus if you commonly have multiple users on a machine.

The problem is, VB6 automatically sets up the addin designer object such that it registers add ins as Per User addins.

This is pretty easy to fix, however.

Here's a snippet from the very top of a DSR file for a Word addin (Open the file using notepad or some other text editor, NOT using VB6):

VERSION 5.00
Begin {AC0714F6-3D04-11D1-AE7D-00A0C90F26F4} WordAddIn
   ClientHeight    =   6465
   ClientLeft      =   4815
   ClientTop       =   1215
   ClientWidth     =   10020
   _ExtentX        =   17674
   _ExtentY        =   11404
   _Version        =   393216
   Description     =   "My Word COM Add In"
   DisplayName     =   "MyAddIn"
   AppName         =   "Microsoft Word"
   AppVer          =   "Microsoft Word 9.0"
   LoadName        =   "Startup"
   LoadBehavior    =   3
   RegLocation     =   "HKEY_CURRENT_USER\Software\Microsoft\Office\Word"
End

Note the RegLocation element.

Simply change that to HKEY_LOCAL_MACHINE (but leave the rest of the key alone), recompile and Presto! Your add in is now a Per Machine addin.

There's only one snag with this, though. Every time you make a change to your DSR file, VB will automatically switch that entry back to HKEY_CURRENT_USER. Oh, the helpfulness.

But, never fear, there's a solution here as well. Just never change the DSR\:\-\) .

Seriously though. Simply create a separate class, expose some public methods on it that mirror the event signatures of those in the DSR file itself, and then pass the events on through the DSR to your new class.

That way, your DSR file never has to change, but you can change your class all you want and never have to worry about VB switching up the RegLocation on you.

For instance, in your DSR file, there will generally be an AddinInstance_OnConnection event that is fired when the host application is loading up your addin. Define it something like the following:

Dim rAddinClass as AddInClass
Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
      ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
      ByVal AddInInst As Object, custom() As Variant)

   'Create and Initialize a base class
   Set rAddinClass = New AddInClass
   rAddinClass.OnConnection Application, ConnectMode, AddInInst
End Sub

Then, in your AddInClass.cls file, define a function like

Public Sub OnConnection(ByVal Application As Object, _
      ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
      ByVal AddInInst As Object, custom() As Variant)

   'Do Whatever you need to do during the OnConnection event here
End Sub

When the host app (could be Outlook, Word, Excel, or PowerPoint, they all work the same), loads your addin, it will fire the OnConnection event. The sub in your DSR file will get called, which will then call the corresponding sub in your Addin Class and you can do whatever coding you need to do, never having to change the DSR file again.

Or you can try to write addins in VB.NET using VSTO, suck up about 10x the diskspace and memory, and have to deal with things like COM shims, and other splinters of joy.

posted on Tuesday, July 31, 2007 4:51:03 PM (Central Standard Time, UTC-06:00)   •  # •  Comments [2] • 
Kick it •  Add to del.icio.us •  View blog reactions; 
 Saturday, July 28, 2007

image

Checked out a very cool exhibit yesterday.

The Ft Worth Museum of Science and History is presenting "Star Wars: Where Science Meets Imagination" till Sept 3.

It's got plenty of interactive stuff for the kids (that most likely won't have any idea what Mos Isley, a Jawa Transporter, or a Rebel Blockade Runner is).

Plus, it's got stuff from Mos Isley, the actual Jawa Transporter (model), and the original Rebel Blockade Runner (model). Can't get much better? Oh, but it can.

How about the original, 70lb model of the Millennium Falcon, the original Landspeeder (that looks ultra-cheesy up close!), and the first Vader costume, plus quite a bit more.

I'm sure it's touring, but I couldn't find out any info on other museums it'll travel to next, so be on the lookout in your area. 

Good stuff.

image

posted on Saturday, July 28, 2007 9:24:56 PM (Central Standard Time, UTC-06:00)   •  # •  Comments [0] • 
Kick it •  Add to del.icio.us •  View blog reactions; 

First, the disclaimer, I'm doing all this in ASP.NET 2.0 with VS 2005. If you're using plain old ASP, or VS 2003, it may or may not work.

To begin, you'll need to add an IMG tag somewhere on your page (or, in the case of dasBlog, somewhere in the homeTemplate.blogtemplate file that's part of the theme you wish to use. Note: If you allow users to change the theme in dasBlog, then you'll need to add this IMG tag to all themes you'd like it to be part of. For this blog, I disabled the switching of themes, so I only had to add this tag to one file.

<img src="./themes/[your theme name]/IMStatusImageProxy.aspx?type=ICQ"
title="Tooltip your want to display" >

Where [your theme name] is just that. This just allows you to put the  IMStatusImageProxy.aspx file in your theme path. If you prefer, you could copy it to the dasBlog root path and just reference it there.

This tag causes the browser to go and load the IMStatusImageProxy.aspx page for the image to use when it needs to obtain the image for the IMG tag. Now, that ASPX page isn't actually  an image at all, but the browser doesn't care at this point.

Next, create the IMStatusImageProxy.ASPX page. You'll need to put it in your theme's folder (or in the dasBlog root as I mentioned above).

<%@ Page Language="VB" %>
<script runat="server">
' ------------------------------------------------------------------------------------------
' IMStatusImageProxy.asp
'
' Used to retrieve the content of the status image from 
' websites that serve them up.
' I don't believe there's a way to avoid the proxy page
' when pulling the images. At least not and remain easily compatible with
' dasBlog.
' The original idea is from Dino Esposito.
' ------------------------------------------------------------------------------------------
   Private Function pGetWebPageImage(ByVal URL As String) As Byte()
      '---- Create the HttpWebRequest object
      Dim req As System.Net.HttpWebRequest = System.Net.WebRequest.Create(URL)
      Dim Results As Byte()

      Try
         '---- Get the data as an HttpWebResponse object
         Dim resp As System.Net.HttpWebResponse = req.GetResponse()

         '---- Convert the data into a string (assumes that you are requesting text)
         Dim br As New System.IO.BinaryReader(resp.GetResponseStream())
         Results = br.ReadBytes(50000)
         br.Close()

      Catch ex As System.Net.WebException
         'Something went awry in the HTTP request!
         ReDim Results(0)       End Try       Return Results    End Function    Public Sub Page_Load()         '---- Retrieve the TYPE of IM system whose status         '     is being requested         Dim IMType As String = Ucase(Request.QueryString("type"))
        Dim ImgType as String = "image/gif"
        Dim r() as Byte         '---- set up the response object
        Response.Expires = 0         Response.Buffer = True         Response.Clear()         '---- Filter for the good arg values         '     we don't want to allow just any old parm value in         Select Case IMType             Case "ICQ"                '---- handle ICQ status                '     ICQ makes this relatively easy because they have a service to                '     retrieve that info                '     Retrieves a GIF type image                r = pGetWebPageImage("http://status.icq.com/online.gif?icq=[YOURICQNUM]&img=16")                            'Case "AIM"                '---- handle AIM status here                            'Case "HOTMAIL"                '---- handle AIM status here                            Case Else                '---- not a valid IM type so bail out                Response.End()                Exit sub         End Select         '---- set the image info saved from the main page         '     into the response object         Response.ContentType = ImgType         Response.BinaryWrite(r)         '---- since this is a proxy, end the response now         Response.End()     End Sub </script>

You'll obviously want to replace [YOURICQNUM] with you're own ICQ number. However, since your ICQ number is in the code portion of the ASPX page, it won't be visible in any way to the web browser, and hence, the public.

Also, the &img=16 is a parameter that indicates to the ICQ webservice which imageset you'd like to use. You might want to experiment with different numbers, from 1 on up. 16 looked pretty good to me.

Essentially, the idea of this proxy page is to:

  1. Retrieve the IM type you're wanting status for. In this case, I'm only supporting ICQ right now.
  2. Clear out the response buffer and make sure it can't get cached (because the status could change from one page refresh to the next).
  3. Retrieve the web page image via the web service in whatever manner is appropriate. The image comes back in a BYTE() array.
  4. Set the ContentType of the response appropriately (this tells the browser that what's coming back is a binary GIF image)
  5. and finally write the contents of the BYTE array that was retrieved earlier.

I thought this approach was quite nice for several reasons

  • It doesn't require creating a MACRO for dasBlog. That's not hard to do, but if you don't have to...
  • It doesn't require inline code in the dasBlog theme template. From what I can tell, dasBlog doesn't support inline code in templates anyway. If I'm wrong about that, please let me know!
  • What is required in the theme template is spectacularly easy to deal with (one IMG tag).
  • It shows your status without revealing your ICQ number, which is appealing for a variety of reasons.
  • All the required code is completely encapsulated in the IMStatusImageProxy.ASPX page.
  • Finally, you should be able to stick this page into any ASP.NET 2.0 based site and get the functionality. It doesn't require dasBlog at all or any other 3'rd party stuff.

Let me know what you think!

posted on Saturday, July 28, 2007 2:08:38 PM (Central Standard Time, UTC-06:00)   •  # •  Comments [0] • 
Kick it •  Add to del.icio.us •  View blog reactions; 
 Thursday, July 26, 2007

I've been playing with this idea for a while. Basically I've been looking for a nice simple way to add an IM status indicator to this web page. That way, visitors would be able to see if I'm actually around to chat.

But I had a couple caveats.

  1. I didn't want to make my ICQ number publicly available on my site (IM spam is just too god-awful to think about)
  2. It had to work with ASP.NET 2.0 and dasBlog.

I'm happy to say I think I came up with something that might actually work, though I'm still testing it.

I'd love to show status for all the major IM systems (I'm on Google Talk, Yahoo, MSN, ICQ, and AIM), but ICQ seems to be the easiest to get up and running, so I'll stick it with for the time being.

If you'd like to get my ICQ number, just email me. There's a little email button right above the ICQ status indicator (it's the envelope icon in the upper right). That button now actually works, too, which is new. It'll display a form for sending me an email (that way, my email address isn't exposed on the page, either).

And, once I clean it up a bit, I'll blog the actual ASP code that makes the ICQ status indicator possible.

posted on Thursday, July 26, 2007 10:06:49 PM (Central Standard Time, UTC-06:00)   •  # •  Comments [0] • 
Kick it •  Add to del.icio.us •  View blog reactions; 
 Wednesday, July 25, 2007

Working with Vista, I've noticed that it tries to be a tad too helpful sometimes. I've already posted about it's proclivity for attempting to AutoTune my network card and in the process, detuning it.

There's a reason Bob failed, and a reason those annoying "Office assistants" got dumped first thing after installing Office. I suppose I should be thankful there's no 3D animated wizard bouncing out of the sidebar from time to time to "wave it's wand" on a window of mine to move it to the monitor that would be "more appropriate", or whatever.

One annoyance I've run into is that Vista tends to just "decide" that I want a particular folder to show in grouped view, or in thumbnail view, even though I've gone through the process of turning all that crap off and setting ALL FOLDERS to view in Details mode.

Grrr.

Well, I was just browsing for something completely unrelated and happened upon this posting by MVP Keith Miller about turning off the autodetect view in Explorer.

In it, he describes a reg hack that'll do just that, turn that feature off.

Here's the script (you'll need to save it to a REG file and Right click and select MERGE)

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\All Folders\Shell]
"FolderType"="NotSpecified"

Before you run it though. Load up RegEdit and check out that Bags key:

[HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags

If your system is anything like mine, there will be literally HUNDREDS of entries in there.

Make sure you turn off "Remember Each folders settings", and then Delete the whole Bags key to remove all those "memorized" folder settings you didn't want to memorize in the first place. No wonder the damn registry balloons faster than Steve Fossett in a hurricane.

image

posted on Wednesday, July 25, 2007 9:41:32 PM (Central Standard Time, UTC-06:00)   •  # •  Comments [2] • 
Kick it •  Add to del.icio.us •  View blog reactions;