Wednesday, July 12, 2006
Here's one that I've used several times in the past.  Microsoft has a virtual CD Control Panel that let's you mount an ISO image as a drive letter.  This is really handy if you have an MSDN subscription and are constantly downloading ISO's from the MSDN site.  Instead of burning each ISO to a CD you can keep it on a local or network drive and simply mount it as needed.  This will save the cost of a CD and the clutter of having a bunch of CD's laying around.

I've tested this only under Windows XP.

Here's the link:
Virtual CD-ROM Control Panel

This one is destined for the Pragmatic SDK.

Wednesday, July 12, 2006 8:44:05 AM (Central Standard Time, UTC-06:00)  #    Comments [1]
 Monday, July 03, 2006

Visual Studio 2005 is pretty useable on its own.  MS has really done a good job and the studio is one of the reasons I stay on the MS platform.  I've used Java, Ruby etc and I ended up using eclipse for my IDE and while it does a decent job it also seems to have heavy system requirements and theres the feeling that everything is kind of duct taped together  But I digress, the reason for this post is to highlight tools that make Visual Studio even more useable.  So Here they are:

1. Cool Commands

Everything except (including?) the kitchen sink

Adds context menu commands like open project folder etc.  It just keeps getting bigger and better.  You have to try it to get the full effect.

Most Recent version of Cool Commands

2.   CopySourceAsHTML

Ultimate Blogger Tool

If you have a blog and who doesn't these days, you should look into this one.  It lets you copy souce out of Visual Studio and keep the code formatted as HTML which is very helpful if you are trying to post code to a blog.

CopySourceAsHtml

3.  Smart Paster

The easy way to embedded SQL, JavaScript, etc

This one gives you multiple Paste As... options in the context menu.  Helpful for pasting inline SQL (oh my), JavaScript, XSLT, etc.

Smart Paster

 

 

Additional resource for Visual Studio 2005 Add-Ins

Monday, July 03, 2006 9:26:57 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Friday, June 30, 2006

I was in the process of downloading Cygwin to in order to get the wc command (among others) in order to do some file verification work.  I stopped for a second and thought why not use PowerShell?  I found a good source for this so here is the command:

PS C:\Scripts\AMA> gc test.134.* | Measure-Object

Count    : 395587
Average  :
Sum      :
Maximum  :
Minimum  :
Property :
Notice that I'm using gc as an alias for Get-Content.  gc, type and cat all work as aliases for Get-Content.  
test.134.* is just a typical DOS file mask to get all files that start with test.134.
Now let's get a word count:
PS C:\Scripts\AMA> gc test.134.23.00 |  Measure-Object -word
Lines                             Words Characters          Property
-----                             ----- ----------          --------
                                   8391
How about a character count:
PS C:\Scripts\AMA> gc test.134.23.00 |  Measure-Object -char
Lines               Words                        Characters Property
-----               -----                        ---------- --------
                                                    1670774
How about an explicit line count:
PS C:\Scripts\AMA> gc test.134.23.00 |  Measure-Object -line
              Lines Words               Characters          Property
              ----- -----               ----------          --------
               8391
Keep in mind that Measure-Object can also be used with objects but we'll save that for another post.  Also it might be nice to try to create a nice short alias like wc to save me some typing.
Friday, June 30, 2006 1:40:55 PM (Central Standard Time, UTC-06:00)  #    Comments [1]
 Thursday, June 29, 2006

I discovered content fitlers today in dasBlog.  They are little macros that save you some typing.  The documentation says the google search macro supports multiple terms but in practice I can only get it to support one term.

Example:

dasblog content filter

should take you to a google search page dasblog content filter as search terms but only dasblog is passed through.  What am I doing wrong?

Content Filter Documentation

Update:

$g(dasblog\+content\+filter) doesn't work

$g(dasblog+content+filter) doesn't work

$g(dasblog\scontent\sfilter) no worky

hmmmm...

Thursday, June 29, 2006 9:51:58 PM (Central Standard Time, UTC-06:00)  #    Comments [1]

http://dasblog.info/CategoryView,category,Customization,Content%20Filters.aspx

Kinda funny how the documentation for this is the seventh result returned: dasblog content filter 

Thursday, June 29, 2006 9:24:30 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
I've had a problem with Captcha images not showing up in the comments section of this blog.  I checked around to see if others have had this problem and apparently they have.  The solution?

It seems you just have to repeatedly refresh the page you are trying to mak the comment on until it works.  I noticed some references to managed hosting and Web Host 4 Life (WH4L) which I am using to host this blog.  I will have to keep on eye on this.  Not that my comments section was swamped before but I have seen 0 (ZERO!) comments since upgrading to the new version and know I think I know why.

This morning at work I kept refreshing the page but didn't get anything.  I'm at home this evening and now everything appears A-OK.  Hmmm...

Thursday, June 29, 2006 6:06:19 PM (Central Standard Time, UTC-06:00)  #    Comments [2]

This is useful when you want to group records by date but your datetime column has a time value also.  This code converts your date to a varchar in a specified format.

--101 is "mm/dd/yyyy"

SELECT CONVERT(varchar,DateField,101)

-- 1 is "mm//dd/yy"

SELECT CONVERT(varchar,DateField,1)

-- 108 is "hh:mm:ss"

SELECT CONVERT(varchar,DateField,1)

-- An example query

Select convert(varchar,CallDateTime ,101), count(*)

FROM [DBName].[dbo].[TableName]

where

CallDateTime between '04/21/2006' and '05/21/2006'

group by convert(varchar,CallDateTime ,101)

Thursday, June 29, 2006 2:22:36 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Tuesday, June 27, 2006

I'm developing a set of server controls in ASP.NET 2.0 that use several JavaScript, image and stylesheet (CSS) files.  One of the problems with distributing controls is that you usually have to send along these files and tell the end user to install them in the appropriate directory.

Along comes ASP.NET 2.0 and the ability to embed resources right into assemblies and then access these resources via URLs.  My first impression is that this seems like a good idea but I'm wary because I've been burned by MS's good ideas in the past.  My main concerns are debugging and the effect this embedding has on caching. 

Caching

One of the problems with frameworks like ASP.NET is that they sometimes take you too far away from the underlying system.  HTTP and HTML is rather straight forward.  Embedded resources in ASP.NET call the the resources via URL's and  use cache headers to insure the browser caches the content correctly.  Also the output cache in the form of disk output cache is automatically used to cache these resources.  So these embedded resources should still allow a fairly performant solution.  My question is still whether this is as good as a plain static file and the caching IIS can perform on these files.  I still need to research this.

Debugging

One of the problems I've run into involves debugging.  When a JavaScript file is embedded and it contains an error, Visual Studio.NET 2005 will open a file dialog asking for the location of the file.  This is a pain as you lose the precious JavaScript debugging ability that we gained with VS 2005.  Is this behavior by design or is there something I'm missing in regards to debugging JavaScript as an embedded resource?  My tempo ray solution is to keep the JavaScript files in a static folder while I'm debugging and then switch them to Embedded Resources when I'm deploying the control. 

However on the plus side of debugging when you change the JavaScript file it is automatically picked up the next time you do a build.  The URL of the embedded resource is changed and thus the browser grabs the newer file.  However this has a downside in that you must stop the running project to make changes to the JavaScript file and then rebuild the project to have the changes show up.

I've found that the static file path is much easier for debugging.

 An excellent article that I've referenced for this post:

http://www.nikhilk.net/WebResourceAttribute.aspx

 |  |  | 
Tuesday, June 27, 2006 3:45:02 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Thursday, June 22, 2006

I've upgraded the GreaseMonkey Google Navigator script to fix some minor issues with the next and previous keys in groups.google.com and I've added the "open link in new tab" functionality via the 't' key.  Check it out:

http://userscripts.com/scripts/show/3984

Or right here at:

http://www.pragmaticprose.com/content/binary/googlenavigator.user.js

Thursday, June 22, 2006 8:36:30 PM (Central Standard Time, UTC-06:00)  #    Comments [1]

This JavaScript Code will cycle through all elements on a page and find the next one that should recieve the focus.  This worked well in IE6 but the results in FireFox where mixed.  I don't have time right now to clean it up but I wanted to post it as this is one of those gems that you know you will want in the future.

Original Source: http://www.codecomments.com/message290822.html

Original Author: Daniel Kirsch

// returns the next focusable object for a given one
function getNextFocusElement(elm,restart,dir,_looped) {
var allElm = document.getElementsByTagName('*');
var found = false; //(start == true);
var allowedElements = 'input,textarea,a,button';
if (!dir) dir = 1;
var start = dir > 0 ? 0 : allElm.length-1;
var end = dir > 0 ? allElm.length : -1;
jslog.info('start: ' + start + ' end: ' + end);

for (var i=start; i!=end; i+=dir) {
if (!found) {
if (allElm[i] == elm) {
if (_looped) return null;
found = true;
jslog.info('i: ' + i );
continue;
}
}
if (found || (restart && _looped)) {
if (allElm[i].focus && allElm[i] != elm) {
if (isInList(allElm[i].nodeName.toLowerCase(),allowedElements)
&& isVisible(allElm[i]))
jslog.info('i: ' + i);
return allElm[i];
}
}
}
jslog.info('starting next loop...');
return (_looped) ? null : getNextFocusElement(elm,true,dir,true);

}

function isVisible(elm) {
if (elm.style.visibility == 'hidden' || elm.style.display == 'none')
return false
else
return elm.parentNode && elm.parentNode.style ?
isVisible(elm.parentNode) : true;

}

function isInList(aItem,aList,aSep,aCaseSensitive) {
if (typeof aItem == 'undefined' || typeof aList == 'undefined')
return false;

// make sure, the element is a string.
aItem = String(aItem);
if (aCaseSensitive !== true && typeof aItem == 'string') {
if (typeof aList == 'string')
aList = aList.toLowerCase();
aItem = aItem.toLowerCase();
}
if (!aSep) aSep = ',';
var lString = aSep+aList+aSep;
return (lString.indexOf(aSep+aItem+aSep) > -1);

}

Thursday, June 22, 2006 1:19:21 PM (Central Standard Time, UTC-06:00)  #    Comments [1]

A new contender for the Pragmatic Toolkit is PDFCreator, a SourceForge project which allows you to print to a pdf file much like you would a normal printer.  This is useful if you want to need to capture output to a platform inpependant format.  For example, you have a web page that shows a reciept from an online purchase.  Use PDFCreator to print it to a PDF so you have a nice record of the purchase.  This also works for screen prints or any other capture operations where you have an applications that can print (basically any editor program like Word, StarOffice, PaintShop Pro, Photo Shop, etc). 

I use it to screen capture protected web pages (on sites where you need to sign in) and send it to someone who doesn't have access to the site, like my wife.  It's useful if you are going for a paperless office as you could scan your paper items and then print them to PDF (if your scanning software doesn't support it natively).  You can also create product documentation by creating the document in Word and then printing it to PDF to create a manual for distribution to customers.

Here is the link:

http://sourceforge.net/projects/pdfcreator/

Thursday, June 22, 2006 10:10:39 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Monday, June 19, 2006

Do you want to limit the imput of a text input (textbox) to valid date characters?  Here you go:

// START SCRIPT

function runKeyFilter(e) {
 if (e.srcElement.readOnly) return;

 var key_code = e.keyCode;
 var oElement = e.srcElement;
 //alert (key_code);

 try {
  if (!window.event.shiftKey && !window.event.ctrlKey && !window.event.altKey) {
   if (
     (key_code > 47 && key_code < 58) ||  // numbers on top of keyboard
     (key_code > 95 && key_code < 106)  ||  // number on numpad at right of keyboard
     (key_code > 36 && key_code < 41) ||  // arrow keys
     (key_code == 35) || // end
     (key_code == 36) || // home
     (key_code == 45) || // dashes
     (key_code == 111) || // forward slash /
     (key_code == 191) || // forward slash /                      
     (key_code == 8) || // backspace
     (key_code == 46) || // delete
     (key_code == 9) || // tab
     (key_code == 16) //SHIFT TAB
      )
   {
    e.returnValue = true;
    return;
   }      
  } 
 }
 catch (ex) {
  alert('Error Message: ' + ex.message );
 
 }
 // if we get here then we didn't have a number
 e.returnValue = false;

}  // end runKeyFilter()

//using the helper functions from prototype.js
Event.observe('|CONTROL|', 'keydown', runKeyFilter, false);  

// END SCRIPT

Monday, June 19, 2006 1:22:50 PM (Central Standard Time, UTC-06:00)  #    Comments [0]