Friday, December 25, 2009

Programmer Fonts: Consolas

Up until now, I've used the Proggy Clean font for quite a bit when doing development. I like its small and compact presentation.

When I was rebuilding my computer, I ran across the Consolas font from Microsoft. I'm going to give it a small try and see how it stands up as a good programmer font.

Thursday, December 3, 2009

How to remotely kill an active Remote Desktop Session?

I found these to be pretty decent instructions.

Saturday, October 10, 2009

Development Tools Mash Up

UPDATE: I've moved this list over to my web site. Go there to see the updated list.


This is my growing list of tools that I'm using or have used in the past. Hopefully, you'll enjoy the list and check one or two of them out.

Windows 7 Utilities
Microsoft Web Developer
  • MetaEdit 2.2 --- Allows you to view and edit IIS metabase 3.0, 4.0, and (not supported) 5.0/6.0.
UML Tools
  • TopCoder UML Tool --- An UML Tool that's pretty and free. I love using it to think through the architectural design of an application.
Programmer Fonts

  • Proggy Clean -- Compact programmer font; I appreciate its presentation and have used it a lot in the past.
  • Consolas -- Microsoft font; I'm currently using this one to constrast against Proggy Clean.

Source Control
  • VisualSVN Server --- SubVersion Server provides an easy way to create and maintain SubVersion repositories. I'm using it at home and love it.
  • TortioseSVN --- A SubVersion client; most notably known for its Windows Explorer integration. It's the best SubVersion client I've used to date. (I've tried a handful.)
References

Here's a short list of other developers who have lists of their favorite development tools:

Saturday, October 3, 2009

ASP.NET Membership and Profile Mismatch ApplicationId

I've been wading through the Membership and Profile features built-in to ASP.NET. In doing so, I ran into a little nasty (yet avoidable) issue. If you override the AspNetMembershipProvider and set the ApplicationName, but don't override the AspNetProfileProvider then the Profile and Membership data will mis-match as the ApplicationId will be different. The gotcha is that it will not error out. You will just see data start being generated for two different applications in the database.

In my instance, I had set the Membership provider to ApplicationName = "foo", so the Membership data in aspnet_Users was properly linking to my ApplicationName set. Unfortunately, I did not setup the same setting for Profile data. This meant that every time I manipulated the Profile data it ended up setting up a new ApplicationName = "/" and storing all data to that application. The Profile feature is smart enough to create the user for the data, so it'll additionally duplicate the user.

I wish that there was a clearer way to identify and avoid this issue for first timers to the data. My issue was compounded by the code that I was using below to setup the default Profile data to include the UserId. (This provides the cleanest way I have found to date to use the LinqDataSource without much code by using the asp:ProfileParameter.) See code snippets below for examples.



Friday, September 25, 2009

My New Favorite Screen Capture Tool: Jing

Jing is my new favorite screen capture tool. Features:
  • Easy to use.
  • Compressed image capture. Smaller image size than ALT+Print Screen capture.
  • Allows arrows, boxes, and text updates to the screenshot.
  • Saves your screen capture history.
  • Accessible on the web, too. Haven't used this functionality, but it's possible.
  • It's FREE!

Thursday, September 24, 2009

Hudson and Continuous Integration Jokes

Thom Rossi sent me this humorous joke built into a plug-in for Hudson. It's a little tongue-in-cheek humor, but still funny.

On a related note, I hadn't heard of Hudson before, so it's something I'll like to dig into at some point to see how it stacks up against other build systems that have support for .NET.

Thursday, September 10, 2009

Add to Context Menu Quick Delete Folder

Need a fancy and quick way to permententally delete a folder in Windows. Then paste the below into a .REG file and then when you RIGHT-CLICK on a folder you can 'Quick Delete' the folder.

TreeSize Free

TreeSize Free is very helpful in free up space on your harddrive. And it's free!

Tuesday, September 1, 2009

Boosting Tortoise SVN Performance

This blog provides a very good write up of how to boost the Explorer integration with Tortoise SVN.

Wednesday, August 12, 2009

Using Visual Studio Command-Line (devenv.com) starts failing on Setup projects with ERROR: Unrecoverable build error

I wanted to provide notice that we are currently seeing all builds failing on the build server that runs the builds via CruiseControl.NET as a domain account. Here is a write of what we know so far:

  • The errors produced by the command-line execution of Visual Studio (devenv.com) for every MSI, which state: ERROR: Unrecoverable build error
  • The issue cannot be reproduced when you log into Build Server and open the solution via Visual Studio (devenv.exe) and perform the compile.
I’ve resolved the issue. Here is the write up from a discussion I found about it:

I tried both the suggested remedy from the kb article and registering ole32.dll and still did not have success. I run devenv from the command line from my continuous integration server and one day it just started failing. No code had changed, it just started failing.

I searched all over and finally found someone in the same position that said they fixed it by deleting the user profile for the account that runs the build. I tried this today and it totally fixed the issue. Looks like MS doesn't cleanup the temp folders when running and after thousands of builds it can no longer scratch temp data to disk. I found one directory with over 65055 directories in it. lol Needless to say deleting the user profile directory took almost and hour.

So I did the following:
  • Deleted the directory: C:\Documents and Settings\\Local Settings\Temp
  • Logged in as ccnet user
  • Restarted the CruiseControl.NET service
This resolved the issue.

Tuesday, August 4, 2009

Lighting fast search in Outlook 2007

Lookout will do it. Here is how to install:
  • Close Outlook 2007
  • Download Lookout and install it.
  • Patch it with a hot fix by copying lookout.dll into the install directory.
  • Hack it by copying the inventures_olk.dll from this zip into the install directory.
  • Open Outlook 2007
Much thanks to this post!

Enjoy!

Process Explorer

In the Windows environment, its nice to have Process Explorer to see what's running in the background.

Thursday, May 14, 2009

How to setup NTLM integration with Jira

Here are the notes of setting up NTLM integration with Jira 3.13.4:

  1. Downlaod 0.5.2 NTLM Plugin for Jira
  2. Download jcifs-1.2.25.jar (Note: Only this version works. I ran into an issue with the 1.3.8 version that caused a null reference exception.)
  3. Following the installation instructions within the 0.5.2 NTLM Plugin (See install. and readme. within the zip.)
  4. Note you will need to copy the jcifs-1.2.25.jar and blah to the C:\Program Files\JIRA-Enterprise-3.13.4\atlassian-jira\WEB-INF\lib directory or wherever your install is located at within your machine.
  5. Note when modifying ntlm_ldap.properties you must specify the details to be extactly the same as what's generated when using the Administration --> System --> LDAP

Wednesday, May 13, 2009

Configuring Jira to use Gmail via SMTP

Here is the notes from work to setup SMTP for Jira on Windows:

  1. Download openssl
  2. Run: openssl s_client -connect smtp.gmail.com:465> gmail.pem
  3. Edit gmail.pem with notepad
  4. Remove everything exception of "-----BEGIN CERTIFICATE-----" to "-----END CERTIFICATE-----" (the BEGIN and END portion must be retained)
  5. Save it
  6. Run: keytool -import -file gmail.pem -alias smtp.gmail.com -keystore "C:\Program Files\Java\jre1.6.0_05\lib\security\cacerts"
  7. keytool comes with Java in the bin dir
  8. lib\security\cacerts is within the Java install dir
  9. Edit C:\Program Files\JIRA-Enterprise-3.13.4\conf\server.xml
  10. Obviously file is relative to your install
  11. Add the below node to Context element but change relevant settings:
  12. <resource name="mail/GmailSmtpServer" class="Apple-tab-span" style="white-space:pre"> auth="Container"
    type="javax.mail.Session"
    mail.smtp.host="smtp.gmail.com"
    mail.smtp.port="465"
    mail.smtp.auth="true"
    mail.smtp.user="MyGmailAccount@gmail.com"
    password="MyPassword"
    mail.smtp.starttls.enable="true
    mail.smtp.socketFactory.class="javax.net.ssl.SSLSocketFactory" 
    />
  13. Save file
  14. Move 
  15. Files:
  16. javamail-1.3.3.jar
  17. activation-1.0.2.jar
  18. From: c:\Program Files\JIRA-Enterprise-3.13.4\atlassian-jira\WEB-INF\lib\
  19. To: c:\Program Files\JIRA-Enterprise-3.13.4\common\lib
  20. Restart Atlassian JIRA service
  21. Go to Adminstration in JIRA web
  22. Go to Mail Servers
  23. Configure the SMTP
  24. Use JNDI setting: java:comp/env/mail/GmailSmtpServer
  25. Pray to God it works!

References:

Thursday, March 19, 2009

Monday, March 16, 2009

PowerCommands VS.NET Add-in

Some very handy additional commands for VS.NET come with the PowerCommands Add-in. My favorite is Collapse All Projects which is nice when you use very large solution files.

UPDATE: The Undo Close functionality to be buggy.

Friday, February 13, 2009

Free Diff Merge Tool: P4Merge

I’ve been using a free merge tool called P4Merge and it’s a lot better than the built in one that comes with TortoiseSVN. It seems like it’s a lot more intelligent and figures out when the conflicts are just two adds vs two modifications. Thus, it saved me so much time when doing a merge because I just opened, reviewed, and saved the file with the tool when it was in conflicted state and it had resolved already most of my issues without me doing anything. A lot better than the other tools I’ve used. Obviously, you still need to review each conflict but it should made it a lot easier than previously.

Note that when you run the install just unselect all the other items except for the merge tool.

You’ll need to modify your TortoiseSVN settings:
  • Right-click anywhere in file explorer
  • Click TortoiseSVN
  • Click Settings
  • Click Diff Viewer
  • Select External and enter: C:\Program Files\Perforce\p4merge.exe  %base %mine
  • Click Merge Tool
  • Select External and enter: C:\Program Files\Perforce\p4merge.exe  %base %theirs %mine %merged
  • Click OK or Apply
Or, for TortoiseHg settings:
  • Right-click anywhere in file explorer
  • Click TortoiseHg
  • Click Global Settings
  • Change Three-way Merge Tool to "p4merge"
  • Change Visual Diff Tool to "p4merge"
UPDATE: I've switched to using Hg for source and provided the settings needed to use P4Merge with TortoiseHg.

Wednesday, January 28, 2009

BugTracker.NET Credit

Fun, fun! I got mentioned in the credits for the BugTracker.NET release for a feature I submitted.

Thursday, January 8, 2009

A generic ConfigurationElementCollection implementation

Some quick untested and uncompiled code that I modified from Microsoft, which wanted to save for later reference:

ConfigurationElementCollection class:



public class ConfigurationElementCollection<element_type>
: ConfigurationElementCollection
where ELEMENT_TYPE : ConfigurationElement, IUniqueConfigurationElement
{

public ConfigurationElementCollection()
{
}

public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.AddRemoveClearMap;
}
}

protected override ConfigurationElement CreateNewElement()
{
return new ELEMENT_TYPE();
}

protected override Object GetElementKey(ConfigurationElement element)
{
return ((ELEMENT_TYPE)element).Name;
}

public ELEMENT_TYPE this[int index]
{
get
{
return (ELEMENT_TYPE)BaseGet(index);
}
set
{
if (BaseGet(index) != null)
{
BaseRemoveAt(index);
}
BaseAdd(index, value);
}
}

new public ELEMENT_TYPE this[string Name]
{
get
{
return (ELEMENT_TYPE)BaseGet(Name);
}
}

public int IndexOf(ELEMENT_TYPE url)
{
return BaseIndexOf(url);
}

public void Add(ELEMENT_TYPE url)
{
BaseAdd(url);
}

protected override void BaseAdd(ConfigurationElement element)
{
BaseAdd(element, false);
}

public void Remove(ELEMENT_TYPE url)
{
if (BaseIndexOf(url) >= 0)
BaseRemove(url.Name);
}

public void RemoveAt(int index)
{
BaseRemoveAt(index);
}

public void Remove(string name)
{
BaseRemove(name);
}

public void Clear()
{
BaseClear();
}

}



IUniqueConfigurationElement interface:



public interface IUniqueConfigurationElement
{
string Name { get; }
}

There was an error in this gadget