Saturday, February 04, 2006

Single Instance Store (SIS) in Windows Storage Server R2

The Filing Cabinet : Single Instance Store (SIS) in Windows Storage Server R2

"Single Instance Storage (SIS) in Windows Storage Server 2003 R2 is starting to generate some buzz on other blogs. A blog reader asked us to explain SIS in more detail. Over the next couple days, I’ll publish a series of 4 posts covering SIS basics and design. Many thanks to Claus Joergensen for providing this information.

SIS is a storage feature available on Microsoft® Windows Storage Server™ 2003 R2.  Single Instance Storage (SIS) recovers disk space by reducing the amount of redundant data stored on a volume by identifying identical files, storing only a single copy of the file in the SIS common store and replacing the files with links to the file in the SIS common store. Consider the following scenario:

1. Two users receive the same e-mail with an attachment. They both save the attachment to their home folder. SIS runs in the background and detects the two identical files on the volume and moves one of the copies into the SIS common store and replaces both files with a link to the file in the SIS common store.

SIS provides the following benefits:

  • SIS reduces disk space consumption by eliminating duplicate files--our own IT department (MS-IT) saved 14 TB (40%) on servers hosting MS products
  • SIS is a set it and forget it feature. It does not require daily maintenance.
  • SIS is transparent to the end users and applications
  • SIS provides a backup API that allows backup apps to determine if file is SIS’d and only back up the file once (most major Backup application vendors support SIS)

"

Interesting…

Friday, February 03, 2006

"Repairing Outlook 2003 PST Files and Size Limits by Mr. Tweak"

Repairing Outlook 2003 PST Files and Size Limits by Mr. Tweak - Windows Network & Admin Tweaks

"…

Size Limit of Outlook 2003 .PST’s: Using a Unicode database, instead of ANSI, allows the 2003 .PST file to reach a size of about 32TB (yes, terabytes!). The problem is that this is a file-based database and not a database server that properly indexes, caches, and allocates memory carefully. The result is that larger files just require more and more system resources to deal with. I am not aware of any utility currently available for dealing with 32TB Unicode .PST’s hitting their maximum file size (or any system that could efficiently use a .PST file that large either).

…"

I’m sure it’s only a matter of time until I get my first 10GB PST, and then 100GB PST and so on…

I’ve handled a good number of 2GB PST’s for a couple years now… Now that Outlook 2003 is getting some traction, it’s reasonable for me to expect much larger PST’s coming my way.

Now I have to figure out a way to scale out my processing to be able to handle 10 – 500GB PST’s.

Doesn’t EDD (Electronic Data Discovery) development sound like fun?

[Wow, there’s no Wikipedia entry for EDD and/or Electronic Data Discovery! This my chance for fame and fortune? Right…lol  ]

"Stored Procedure Object Interface Layer (SPOIL)"

Download details: Spoil.msi

“Brief Description
SPOIL essentially creates an objected-oriented (OO) layer on the database so the application can stay in the OO paradigm."

Overview

Sample code for the Stored Procedure Object Interface Layer (SPOIL). This creates an object abstraction over SQL stored procedures providing applications with an object view of the data layer.”

I don’t know what this is, but I like the name…  ;)

Since I’m in the “Stored Procedures are Good” camp, I’m checking it out now.

Thursday, February 02, 2006

WOW, now THAT'S faith in Your Product!

Jeff Atwood : The Ultimate Dogfooding Story

“… A table saw is an extremely dangerous tool.  My saw can cut a 2-inch thick piece of hard maple with no effort at all.  Frankly, it's a tool which should only be used by someone who is a little bit afraid of it.  It should be obvious what would happen if a finger ever came in contact with the spinning blade.  Over 3,000 people each year lose a finger in an accident with a table saw. 

A guy named Stephen Gass has come up with an amazing solution to this problem.  He is a woodworker, but he also has a PhD in physics.  His technology is called Sawstop.  It consists of two basic inventions:

  • He has a sensor which can detect the difference in capacitance between a finger and a piece of wood.
  • He has a way to stop a spinning table saw blade within 1/100 of a second, less than a quarter turn of rotation.

The videos of this product are amazing.  Slide a piece of wood into the spinning blade, and it cuts the board just like it should.  Slide a hot dog into the spinning blade, and it stops instantly, leaving the frankfurter with nothing more than a nick.

Here's the spooky part:  Stephen Gass tested his product on his own finger!  This is a guy who really wanted to close the distance between him and his customers.  No matter how much I believed in my product, I think I would find it incredibly difficult to stick my finger in a spinning table saw blade.  Unbelievable! …”

Like Jeff says, Wow…

[Venting] IE7B2 Bugs? A beta with bugs? No way...!

<vent>

You know all the news about bugs in IE7B2 (Preview) is starting to irritate me off… Gee, there are bugs? NO WAY! Bugs In a beta? Oh MY! In a PREVIEW of a beta? Say it’s not so! How could MS release a beta preview with BUGS!  :0

Come on people (I’m talking to those jumping up and down about it and the many news outlets that have picked up the stories)... It’s a preview of a beta (does that make it an alpha beta?). It’s GOING to have bugs. It’s EXPECTED to have bugs! That’s the nature of beta’s. DUGH.

Report your bug finds to MS, which is the responsibility you accepted when you installed the beta…

</vent>

TFS Check In Policies, Code to Police Code

James Manning's blog : check-in policy to disallow certain patterns (for instance, particular extensions).

"A request that's come up a couple of times is to have a checkin policy help guide developers about certain file extensions that they shouldn't check in to version control. While making a policy with "forbidden extensions" is certainly possible, it's basically the same amount of work to make "forbidden regular expressions" and give more power to the user - extensions are just a subset, like "\.tmp$" for "don't check in any files end in .tmp".

…"

I think it’s pretty cool that TFS Check In policies can be created by writing code. Allows for a good bit of flexibility doesn’t it?

It just seems ironic, yet appropriate, in some way (code to police checking in of code).

BTW, James’ blog has a number of cool TFS check in policy examples as well as general good poop on TFS.

Cropper 1.8 Released

Brian Scott : Cropper 1.8 Released.

Ton’s of new features and fixes.

I think I dig the Print Screen keyboard button capture the most.

“… 3) Print Screen captures. You can now use the Print Screen button to take screen shots with Cropper. The crop form can be minimized. The images will be saved with the same options as regular screen shots….”

This fits Cropper better into my normal way of doing things (which is usually ALT – [PRT SC], Paste into MSPaint, save as PNG… yeah, I know pretty old school, but it’s easy, works and is free…).

Downloaded and installed.

Wednesday, February 01, 2006

VB.Net EXIF Class

The ExifWorks class - The Code Project - VB.NET.

" What is EXIF
EXIF stands for Exchangeable Image File Format. This format is used for storing various metadata in images, and is widely used mainly in digital still cameras. More information about EXIF can be found here, or in the document Description of the EXIF file format by TsuruZoh Tachibanaya.

When I was trying to find any sources regarding comfort access from .NET environment to these data, I was not successful. So I wrote this class and gave it freely available as open source.

What is ExifWorks
ExifWorks is a class written in 100% pure managed VB.NET, which allows comfort reading and writing of embedded EXIF metadata. …"

Something I might be able to use sooner than later…

Tuesday, January 31, 2006

Fully Managed Screen Grabbing With .Net 2.0

Screen Capturing - The Code Project - C# Programming.

“Introduction

There are a lot of articles about screen capturing, but most of them use Win32 API functions, even in .NET 2.0, where this is not necessary because .NET 2.0 has all the classes needed to implement that.

Background
It's often necessary to get a screenshot of the screen or parts of it. In our applications, we often use systems with multiple monitors, requiring to capture all of them at once or each screen separately. Just remember: the virtual screen is the complete view of all monitors attached to the system, the primary screen is the view of the main monitor, and the working screen is the same but excluding the task bar.

…”

Very cool. This is something I’ll be able to use…

IE 7 Beta 2 - To Install it on my Production Machine or Not?

IE7 Beta 2 Preview Available.

"If you’re a developer, an IT Pro, or just plain interested, please visit http://www.microsoft.com/windows/ie/ie7/ to try the IE7 Beta 2 Preview.

What’s a beta preview? It’s a release for everyone involved in making the Internet work.

Before we release a consumer-focused beta, we want to make sure anyone with a website can look at the changes we’ve made to our layout engine and the stricter user experience around security certificates. Developers should try out their toolbars, ActiveX controls, and applications that host or rely on the IE platform. IT Pros have their own concerns when a new browser is coming, as do domain registrars (especially with the IDN support), network operators, and many, many other groups. The site has some checklists we’ve written to help people exercise IE7 with their sites and applications. If we missed items you think we should call out, please let us know. We’re looking forward to feedback that will help us deliver a great, consumer-focused beta.

…"

To install IE7B2 on my production machine or not… I do have some apps that I support that use and/or embed IE so it is important that I know how IE7 will effect them. But this is my production box…

Sometimes I feel it’s okay to play the beta game on this box, for example I installed the Google Toolbar 4 beta yesterday… But I live in IE. And in the past IE has been so tightly bound to the OS/Explorer/my online life/etc that I’m just not sure in this case.

I guess I’ve answered my own question. If I’m so unsure, I just can’t risk it. Yet. Though the post comments do ease my concern a little;
“If you uninstall IE7, you will revert to what you had installed before, which I presume is the version of IE6 in XP Service Pack 2 for most people.

- Al Billings [MSFT]”

I think I’ll let the dust settle and maybe give it a go in a VPC machine.

sigh…

"Continuous Integration Using Team Foundation Build"

Continuous Integration Using Team Foundation Build.

"…. Continuous Integration Using Team Foundation Build

Team Foundation Build is the build automation tool in Visual Studio Team System. Built on top of MSBuild, Team Foundation Build integrates with other Visual Studio Team System tools like source control, work item tracking, and test execution to provide an end-to-end build process. It does not provide continuous integration out of the box, but it can be customized to easily do so.

You can download a sample, which we have built on Team Foundation Build, to implement continuous integration. By following the procedure described in this article, you can easily use this sample to set up continuous integration.

…"

CI (Criminal Intent?… um… no… Continuous Integration… Yeah… that… ;) is something I want to look closely at when VSTS ships and I’ve got it running in-house.

I like the concept… Now I want to see it work in my world.

Monday, January 30, 2006

DB2 Express-C (Free DB2)

IBM sets DB2 database free | Tech News on ZDNet.

"DB2 Express-C is the same database as IBM's commercial offerings but the company places limits on what kind of hardware it can run on.

It can be deployed on systems with two processor cores or up to two dual-core chips on Advanced Micro Devices- or Intel-based servers. The memory limit is 4GB but there are no limits on the size of database or number of users.


IBM's decision to add a free database to its lineup follows moves by its largest rivals in the database business, Oracle and Microsoft.

…"

Nice. I’ve always been interested in DB2…

You can download the Windows x86 32 bit version here (Registration required to download it).

(via SlashdotIBM Sets DB2 Database Free (Beer))

New Road Rage Handler?

Defense Tech: Pain Ray, Sonic Blaster, Laser Dazzler - All in One.

Oh yeah, I want one of these for my commute from hell. Let’s see someone road rage me when I have THIS!!! MUHAHAHAHA

;)

Initial XBox 360 Feedback

Jacob and I played on our new XBox 360 all weekend and I have to say I’m very impressed. Compared to our old console, PS2… well it’s just not fair to compare them.

What do I dig about the 360?

A) It’s not a stand-alone silo.

For me, this is the number one uber-cool feature… That it’s fully connected to my network and the world. XBox Live rocks. The online experience is very cool and feels totally seamless.

Its integration with other devices is also VERY cool. While playing PGR3, I have it streaming my music collection from my wife’s PC (having multiple CPU’s is nice… ).

Being able to bring up the XBox Guide in the middle of playing a game (to see if I have any friends…. [um online… yeah…], or to play music, etc) is just too cool.

B) The graphics rock (even on a standard TV)

C) The controllers are nice

They are easy to use for both me and my son

D) Having built in support for different Gamer Profiles, and making it easy to switch between them

I just dig the fact that all the games are integrated with the console’s systems. That instead of each game being a stand-alone silo of data, they instead talk to the XBox system and get the profiles from it. I never want to create another in-game profile/user again.

E) That XBox Live is not a totally closed system.

For example you can see my GamerCard on my Spaces page… 

What don’t I like?

A) Its going to drive me to purchase to a HDTV sooner than later…

B) That I suck at cornering in PGR

C) That I can’t seem to get it to see my other PC.

Either the 360 can only connect to one PC at a time (could be, I guess I should read the doc’s), or my PC isn’t configured right (could be as I try to keep my PC pretty locked down).

D) Its going to drive me to purchase or build a MCE PC

E) That I can’t stream my music when playing XBox Compatible Mode games (like Halo)

F) I would like to see more content in the XBox Live Marketplace.

This is the UI/method where I want to be able to download and view TV shows, stream movies, etc.

G) Its going to drive me to purchase more and more Microsoft Points to spend in the XBox Live Marketplace.

H) I wish it had a multi-card reader.

While it CAN hook up to my digital camera via a USB cable, I’d rather just plug in my CF card… Also CF/SD etc support would be cool storage options to transfer saved games, etc.

Also think about purchasing music/video online and storing it to these cards then playing them on a device with MS’s Play For Sure integration…

I) Initial setup was kind of a pain.

It wasn’t hard, just a little repetitive. Of course I took a little longer in setting up my secure wireless, my XBox Live account and Profile, my Son’s Profile… etc, etc.

It would be very cool if there was a roll-up/laser keyboard available for the 360. It would make some operations so much easier.

Also there has to be an easier way to keep our wireless networks secure and to setup new devices… I keep my wireless as locked down as my devices allow (MAC Address filtering, 128 WEP, no SSID broadcasting, etc, etc). So every time I need to add a new wireless device I have to jump through a number of hoops both on the new device and wireless router, hoops that my parents, daughter, wife or son wouldn’t be able to do easily.

Now that USB is cheap and about everywhere, it sure would be cool if I could use that to transfer/setup/add new wireless devices. Plug the USB Key FOB into the router, push a button, plug it into the new device, push a button, plug it back into the router, push a button and then be done. Even my parents could do that! While not perfect, it’s better than no security. Security that’s hard is security that won’t be used. But I digress…

J) The 20GB HD is just not big enough.

It’s going to be filled sooner than later. With 12GB free, and some game demo’s being 600MB to 1.6GB+, well you get the picture.

K) That my son already kicks my butt in Halo

 

All in all Jacob and I totally dig the 360. While not cheap, in the end I think it was well worth it…

One of my Son's past teachers gets Simi Teacher of the Year...

Simi Teacher of the Year to be feted at dinner.

"Laurie Cariker tries to live by the same philosophy she gives to her three daughters.

The third-grade teacher, who will be honored this week as Teacher of the Year by the Simi Valley Education Foundation, passes on the same advice to her students at Madera Elementary School. …"

Very cool! My son had her twice, both for Third and Fifth grades Second grade … She was/is one of my son’s favorite teachers.

My son is currently an A/B GATE student in middle school (sixth grade), which I believe shows Mrs Cariker did a pretty darn good job…. (That and that my son is d’ man!  ;)

Sunday, January 29, 2006

Generate Parameters Collection Using T-SQL

Generate Parameters Collection Using T-SQL.

"How many times have you written the following lines?
myCommand.Parameters.AddWithValue("@Title",title)
.....
....
....
and so on. If you are attaching only 3-4 parameters then its okay but what about attaching 10-15 parameters. That will be lot of typing and wasting some precious time.
I made a small T-SQL that will generate the parameter collection for you provided the table name.

USE Northwind

-- declare the variables
DECLARE @column_name varchar(20)
DECLARE @ordinal_position int
DECLARE @counter int
DECLARE @totalRows int
DECLARE @table_name varchar(20)
DECLARE @commandObjectName varchar(20)

SET @counter = 1;
SET @table_name = 'Customers'
SET @commandObjectName = 'myCommand'


SELECT @totalRows = COUNT(*) FROM information_schema.columns WHERE
table_name = @table_name

WHILE @counter <= @totalRows
BEGIN

SELECT @column_name = COLUMN_NAME FROM information_schema.columns WHERE
table_name = @table_name AND @counter = ORDINAL_POSITION

Print @commandObjectName+'.Parameters.AddWithValue("@'+@column_name+'",'+LOWER(@column_name)+')'

SET @counter = @counter + 1

END

GO
"

(SQL leached in full for my future reference, searching, etc, etc. All cred’s to the author, Mohammad Azam…)

I use this technique, using T-SQL to create static VB code, in a number of places so I thought it worth noting and capturing the above…

All my data access is stored procedure based, so with a few minor tweaks my version uses the parameters of a given stored procedure instead of table columns. Next I want to include data types, etc, etc…

USE Northwind
-- declare the variables 
DECLARE @parameter_name varchar(20)
DECLARE @ordinal_position int
DECLARE @counter int
DECLARE @totalRows int
DECLARE @storedprocedure_name varchar(20)
DECLARE @commandObjectName varchar(20)
SET @counter = 1; 
SET @storedprocedure_name = 'SalesByCategory'
SET @commandObjectName = 'myCommand'

SELECT @totalRows = COUNT(*)
FROM information_schema.PARAMETERS
WHERE SPECIFIC_NAME = @storedprocedure_name
WHILE @counter <= @totalRows 
BEGIN
SELECT @parameter_name = PARAMETER_NAME 
FROM information_schema.PARAMETERS
WHERE SPECIFIC_NAME = @storedprocedure_name 
AND @counter = ORDINAL_POSITION
Print @commandObjectName
+'.Parameters.AddWithValue("'+ @parameter_name +'",'
+replace( LOWER( @parameter_name), '@','') +')'
SET @counter = @counter + 1
END 
GO

And here’s the output;
myCommand.Parameters.AddWithValue("@CategoryName",categoryname)
myCommand.Parameters.AddWithValue("@OrdYear",ordyear)

Yeah, I know there’s about a million other ways to also do this, but sometimes quick and dirty is all I need…