ICaramba

Miguel Castro's blog about .NET and its effect on National Security, the Eco-system, and his daughter's sleeping patterns.


News

My Stats

  • Posts - 120
  • Comments - 69
  • Trackbacks - 145

Twitter












Recent Comments


Recent Posts


Archives


Image Galleries



Blogs I read


Links


Microsoft DCCs


January 2005 Entries

My Briar Patch - I just moved this entry from my old blog


Updates are at the bottom.

Everytime I show someone pictures of my home-office I receive “wow's” or “holy s#$%'s” so by popular demand, here it is:

Main Development Workstation   This is my development/main workstation.  The computer in place is actually newer than the one pictured (on the right).  It is now a P4 3.4 with 1gig ram and dual 120gig ATA150 drives in a SATA Raid 0 configuration.  The sound is standard on-board and it drives a nice set of Creative Labs 2.1 speakers.  Super sound is not crucial on this box as you will see later.  I have a preference to Kensington Trackballs so I use them everywhere, as well as the Microsoft Natural cordless keyboards.  The cornerstone here is the Matrox Parhelia triple-head video card driving three 19“ KDS LCD Monitors.  My usual .NET configuration involves a browser on the left monitor and .NET on the center and right monitor.  I undock the tool-window, server-explorer, solutions-explorer, index-help, and property-list; then I dock them all next to each other in one giant window and move that to the monitor on the right.  The center monitor then becomes a pure code window and I don't have to deal with auto-hide slowness.  This PC has a DVD-ROM and a NEC 8x DVD Burner, as well as a 6in1 media card reader.  The PC and the monitor on the right (where the 'Start' button is) are plugged into a UPS that also connects to the PC via USB.
 
Gaming Station   This machine (the black one on the left) is my game box.  It is a P4 2.8 with 1 gig ram and dual 120 gig ATA150 drives in a Raid 0 configuration.  The video is an ATI 9800XT with 256 Meg drive driving a 21“ Samsung Syncmaster LCS monitor mounted to the wall.  The sound is driven by a Sound Blaster Audigy 2 ZS Platinum powering a set of Creative Labs 7.1 speakers.  The picture shows the front speakers, but there are side and rear ones mounted above on the wall.  There's a Microsoft Force Feedback joystick there as well.  This is still the only force feedback joystick I see out here where you can defeat the auto-centering - which is crucial for helicopter flying.  I use this PC for DVD watching as well so it serves as a mini-home-theater.  I use the Intervideo platinum DVD player software which also gives you a remote control and a USB receiver.  There's a Pinnacle break-out box back there that I use to stream video that I want to transfer to DVD.  This PC has a DVD-ROM and a NEC 8x DVD Burner, as well as a 6in1 media card reader.  You can see my Laser Printer to the far left sitting on a rolling file-folder/drawer cabinet.  As you can see, I still have to hide wires and clean things up.  The PC and the monitor are plugged into a UPS that also connects to the PC via USB.
 
Laptop Station and VCR   To the right of my dev box is the docking station for my HP Pavilion zt3000 wide-screen laptop (I love this thing).  It's a Centrino (not pictured) 1.7 with 1gig ram and a 60gig drive.  It's also loaded with a DVD burner, SD card reader, and an ATI Mobility Radeon 9200 for some great  resolution (1920x1200 - great for Visual Studio development since I'm spoiled at home with the triple head setup).  Up on that little shelf is a VCR player that I use to either play videos (on the Game box) or stream tapes to the PC - and yes, that's Tony Montana in the picture to the left, with the caption - The world is yours.  The shelves on the right contain stationery and hanging file folders.
 
Server Closet   I know, I know, my server closet needs some organizing.  Actually, that is almost done (thanks to Staple's plastic shelves).  I have to update the pictures after I am done with that and all the wire hiding.  The picture shows two servers, but there are now three servers and a standup UPS which connects to the servers via USB.  All the servers go into a Belkin KVM switch which then connects to the 17“ KDS LCD Monitor and the keyboard and mouse that is mounted to a wall bracket.  This is a stand-up station since I don't spend too much time on the servers.  The main server is a P4 2.8 with 1gig RAM and a 60gig drive for the OS (Windows 2003).  It also has dual 120gig drives in a Raid 1 (mirroring) configuration.  Video is an NVidia GE-Force card and sound is a Sound Blaster Live-value card.  The second server is a P3 1.0 with 512 meg ram.  It also has a drive for the OS (also Windows 2003) and dual 120 gig drives in a Raid 1 configuration.  This machine has a regular video card and no sound.  I have my server apps split between these two machines: one machine has SQL Server, IIS, and file-serving while the other has Exchange, SharePoint, Crystal Enterprise, and also file-serving.  All the data I use in the workstations is stored in one of these servers' raid arrays.  There is a Western Digital exernal fire-wire 120gig drive connected to each box which is used for occassionally (once a week) backing up the entire 120 gig array in each server.  I also keep a lot of backups on DVD as there is a DVD ROM and a DVD Burner on each of the two servers.  The third box is currently a third Windows 2003 server but I have not decided if it is going to stay that way.  I'm back and forth between building a beta-box or a Linux box - hey, maybe I'll just get a fourth and do both.  My eventual goal is to repackage these servers in rack-mount cases and put a rack in this closet.  There is a 24 port Linksys 100mpbs switch, a Linksys 54g wireless access point/cabledsl router, and of course my cable modem here too.
 
Bookshelf from Hell   Most of these are actually .NET books, but there is plenty of other technology reading material here too.  Believe it or not, there is organization here:  The center area has the Framework Class Library Reference set along with my MCSD training material.  The top is mostly asp/asp.net and ado/ado.net stuff.  The left side is VB.NET while the right is C#.  To the bottom is where things get a little mixed: design patters, uml, refactoring, general .NET, etc.  Many of these books are reference material while many others are cover-to-cover reads (yes, I have read most of them).  A close-up will reveal many bookmarkers sticking out of most of the books.  Obviously I was a big Wrox fan, but there's plenty of APress, Addison-Wesley, O'Reilley, etc. here as well.

I'll post some new shots as things get cleaned up a bit.  I have a drop-ceiling here so it should not be that big a problem.

So long for now.
Miguel

I've performed some upgrades on my Centrino 1.7 wide-screen laptop that have been amazing.  I've swapped out the 5400RPM drive in my laptop to a 7200RPM 60gig drive and upped the memory to 1.5 gig.  This is one of the best things I ever did.  That thing flies now.  My thanks to Scott Watermasysk for his recommendation on that.

posted @ Thursday, January 27, 2005 1:19 PM | Feedback (4) |


I don't even know where to begin...


For those you that listened to the latest .NET Rocks episode, attention was called to an article by Richard Mansfield entitled, “OOP is much better in theory than in practice”.  Apparantly, my reputation preceeds me because two of my friends immediately asked me if I was going to respond to this article.  Well, let me say that I shouldn't even dignify its contents with a response, but after a couple of very deep breaths and overcoming the desire to start signing up to porn and casino sites with his email, I decided a few words needed to be said - I'll be brief.  Technology is about evolution.  When the concept of object-oriented programming surfaced, it revolutionized the way programmers designed and coded.  Like every design technique we use today, more abstraction comes with a learning curve, but you always gotta ask yourself if the benefits outweigh the costs.  This gentleman is saying that OOP is too complicated for most scenarios and makes code more difficult to manage.  I suspect that his preferred method of code reuse is cut-and-paste.  OOP was the next logical evolutionary step for programming, just like structured programming evolved from the mess that spaghetti code caused.  I'm not gonna go any further because I don't have to convince anyone out there that this gentleman is just plain wrong.  I think this article is an attempt to plant some kind of abstract seed in people's heads and to put a philosophical twist of computer programming.  It's programming!  OOP works; and dispite the fact that there are many levels of complexitiy depending on how pattern-oriented you want to get, it's not rocket science.  It is our art, and as artists, we 'post-machine-language' developers enjoy the constant intellectual excercise that our art engages us in.  We enjoy the learning curves, and you know what?  We're good at it. -- so endeth the sermon

by the way:  I would never do that with someone's email - just want to make that clear

posted @ Thursday, January 27, 2005 1:00 PM | Feedback (1) |


The Random Error Generator


Be prepared to stay with this for about an hour.

This is one of the funniest things I've every seen:  http://atom.smasher.org/error

Refresh this page and you'll see a new one every time.

 

posted @ Wednesday, January 26, 2005 11:54 AM | Feedback (4) |


This is pretty funny - in the tradition of the "Geek Quiz"


Check out this posting Scott put up.

http://www.geekswithblogs.com/sgreenberger/archive/2005/01/25/21021.aspx

Here are my results:

You are Palm OS. Punctual, straightforward and very useful.  Your mother wants you to do more with your life like your cousin Wince, but you're happy with who you are.
Which OS are You?

posted @ Wednesday, January 26, 2005 11:48 AM | Feedback (0) |


Damn Case Sentivity!!!


No, I'm not talking about C# here.

I encountered this while creating a custom Config section in the app.config file.  The registration of the configuration section in the part of the app.config file seems to be case sensitive when you define the 'type' attribute.  The standard format for a type that will be instantiated by a 'Activator.CreateInstance' call is “fully qualified classname,assembly name”.  This is used all over the place and is a .NET standard.  It appears that the classname and namespace must be the same case as where it is defined in the code.  Here's the part that drove me into a debugging nightmare:  If the component that contains the class you are activating (in this case, it was an implementation of IConfigurationSectionHandler) contains references to other assemblies, those assemblies must also match namespace and class case.  We should all be standardizing our names throughout our projects anyway and that includes cases.  In C# this is enforced, but guess what:  this problem happenned to me in VB.NET - yes, case sensitivity in VB.NET.  I'm not sure yet but I suspect it has something to do with the late binding nature of reflection and the way it may break down into IL.  I'm currently working on a project with other developers and one of the qualifiers in our namespace hierarchy is a a set of four initials.  These were all capitalized in some places by one programmer and not in other places by another programmer.  Basically just make sure that you have consistency across your entire project - or enterprise for that matter.  Troubleshooting this was a major pain-in-the-ass.  I got it to work when I created a new project and wrote a lot of code from scratch.  Then I noticed that the instance I set a reference to a certain outside assembly, the config section would not read in anymore.  I proceeded to creating another assembly that resembled the 'culprit' referenced assembly and setting the same references in that one that my other one had (confused yet) - everything still worked.  It wasn't until I copied the code from the culprit component (about 5 classes) into the new component that my test app broke.  After eliminating classes one by one, I ended up with one empty class inside a namespace statement, no constructor, no code, nothing.  My test app was referencing this component and it was still breaking.  That's when I started to toy with the names and figured this out finally.

Moral of the story - choose your standards, cases and all, and stick to them - and make sure you enforce it across your entire team.

Followup:

It seems the same applies when using Activator.CreateInstance or Activator.CreateInstanceFrom but these methods (used for late binding, like the old CreateObject in VB6) have constructor overloads, one of which allows a boolean allowing for case-insentivity.

posted @ Friday, January 07, 2005 10:02 AM | Feedback (2) |