Monday, August 31, 2009

Disposable Email Services Comparison

Here is a comparison of disposable email services (via LifeHacker.com)

Mailinator and BugmeNot are 2 services that I have used often.

Terminals – A Remote Desktop Connection Management Tool

If you work with multiple remote desktop tools or if you have used RoyalTS and have butted heads against their 10 connection limit, then this tool is for you.

Terminals is an OpenSource Remote Desktop Management tool that allows you to keep track of multiple RD connections.

The cool features that I have found till now:

  1. Unlimited connections
  2. Manage connections by tags (not by just a folder)
  3. Update password for all your connections in just one action (using the tags to target specific connections).
  4. Its free and open source
  5. Havent had any problems yet!

Download it from http://www.codeplex.com/Terminals

My only suggestion: when you setup a connection,

1. Setup all your connections by going to “Favorites” ==>  “Organize Favorites”. You can setup all your connections in one go.
2. Tag your connections for easier management.
3. Set the View to “Scale to Window” (otherwise it looks a little funky)
clip_image002

If you find any useful features leave a comment on this post.

Oh! and by the way – donate to the project if you find the tool useful.

Sunday, August 30, 2009

Create a personalized font

FontCapture.com is a cool new service that allows you to create a custom font from your own hand-writing. Simply print out their font template, write out the characters in your own hand-writing, scan in the sheet and voila – FontCapture.com spits out a font file that you can use to create personalized documents.

Very cool!

Check out this sample that I created using this service: (Warning – I don't have a great hand-writing!)

GfWyGq

Bold font (made by filling out the template with a Sharpie)

CEt3FA

Normal font (made by filling out the template using a normal pen)

And here is a preview of the font at different font sizes:

image

3 Tier Application

Here is a quick diagram that I put together for a 3-Tier application

Presentation1

notes:

the black boundary represents the trusted zone.
the blue lines represent the division of the 3 tiers
in my model app-logic is included in both the presentation and middle tiers so as to accommodate rich internet applications (where you will want at least some of the app-logic occurring in the browser)

for another graphic that I had posted about a while earlier – see: http://blog.aggregatedintelligence.com/2009/05/aspnet-3-tier-diagram-example.html

Friday, August 28, 2009

Conjecture without evidence of imminent harm

Conjecture without evidence of imminent harm does not provide the
burden of proof..... Heard in a court case against the Fed for the
release of info of the 11 banks that received emergency bail out funds.

--------------------------------------
Posted while on the move!

Formatting Asp.Net GridViews using custom CSS

A very good post with a simple example that shows all that you need to do to get custom styling applied to your Asp.Net Gridviews:

ASP.Net GridView makeover using CSS by Atashbahar.

Thursday, August 27, 2009

GMail, iGoogle and Secure Connections

Google provides a way for you to set the default connection to use only SSL (HTTPS) while using GMail. I prefer to have this turned on always – for the peace of mind that nobody can eavesdrop on my email communication threads.

The only downside was that when you set HTTPS as the default connection type to be used in GMail, the GMail app in iGoogle stopped working.

Today, I believe Google has fixed this problem, as its started working again!

Words - eleemosynary

eleemosynary • \el-ih-MAH-suh-nair-ee\  • adjective
: of, relating to, or supported by charity

Test post from iPhone

Testing posting of multiple images

Test post from iphone

This is a test from my iPhone.

Best Unit Conversion App for the iPhone

Just got the Convert app for my iPhone. Costed me $0.99. And its WORTH IT!

Its got a great UI and allows you to quickly move between different units and it even allows you to convert currencies.

If you need to convert units often – then this app is a must have for you.

NameValueCollection to Query String

The HttpUtility.ParseQueryString method can be used to convert a query string to a NameValueCollection.

But there doesnt seem to be a method to convert a NameValueCollection to a Query String.

So here is a quick helper method to do just that:

static String ConstructQueryString(NameValueCollection parameters)
{
    List<String> items = new List<String>();
    foreach (String name in parameters)
        items.Add(String.Concat(name, "=", System.Web.HttpUtility.UrlEncode(parameters[name])));

    return String.Join("&", items.ToArray());
}

Wednesday, August 26, 2009

PDF Viewer that supports annotations

I used to use FoxIt. I used to like FoxIt. But I dont like the fact that basic tools are not free and are insted part of the PRO pack (eg – annotations).

And in my quest for a free PDF viewer that supports annotations – I found PDF-XChange Viewer. In my opinion PDF viewer is just as fast as FoxIt and it supports a variety of annotations and markup for free.

Here is an example of some annotations that I made to a PDF file:

image

You can save the PDF file with all your annotations, and PDF Xchange Viewer will not save the document with any annoying watermarks, etc. The one thing to remember is that there are some PRO features if invoked will lead to the file being saved with a water mark. (A good work-around is to hide the pro features via the preferences—>Registration options window – shown below).

image

One final note – another great feature of PDF XChange viewer is that it remembers the last page you were viewing even after you close and reopen the file. This makes it a great app to read your ebooks.

My only wish – it had an easier single word name. PDF XChange Viewer doesnt roll of your tongue as Foxit or Acrobat.

Download the app from - http://www.docu-track.com/home/prod_user/PDF-XChange_Tools/pdfx_viewer/

Tuesday, August 25, 2009

Is Universal Health Care the only option for the future?

HealthApples Heard this interesting point of view in a recent Planet Money podcast regarding health-insurance (link). It talks about being able to determine the risk of disease and its relation to health insurance.

For insurance to work, everyone must be involved irrespective of their risk. That way, you are not insuring only the group at risk and the low risk group subsidizes the cost of the premium for the high risk.

With medical technology improving all the time and genetic testing getting better – its getting possible for one to send in a small sample of their saliva and to determine the risk of getting some diseases (diabetes, Parkinson's, etc). It is conceivable that in the future, we will have an even better understanding of our risk to different diseases from these genetic tests. This might lead to those who have a low risk of getting sick, opting out of health insurance and those having a higher risk of disease opting in for health insurance. This could in turn mean that insurers are left providing insurance to a population group that will need costly medical insurance and in turn the insurers might have to increase insurance premiums to unaffordable levels to cover the cost of providing insurance to the high risk population – a vicious cycle.

healthinsurance_h1 Currently there are laws in the U.S that forbid insurance companies from using genetic information in evaluating medical risk (hint - this is a good law – the last thing we need is insurance companies coming up with new ways to bump up premiums or drop some of their clients). But consumers are free to understand their medical risk through genetic testing and this cannot be curtailed as it can be an important tool in managing ones own health.

We already know that consumers behave as described above: People opt in and out of health insurance based on their perceived medical risk – younger people typically choose the lowest cost insurance and sometimes forgo it completely. On the other hand as you grow older, you typically increase your medical insurance coverage (this is also true of families expecting a kid or those that already have kids).

So how does one deal with this issue? Solution: By requiring everyone to carry health insurance – aka – universal health insurance coverage. Sounds familiar? Its because its one of the options on the table to reform health insurance in the U.S. currently.

Surprisingly, nobody seems to be bringing up this important point that in the future we will need to have everyone under health insurance – so that the people at highest risk to health problems can be provided affordable health insurance.

Maybe right now is a good time to figure out how to get this right.

Case-Shiller Home Price Indices

image

Seasonally Adjusted Single Family Home Price Values
June 2009 (published August 25)

image


Seasonally Adjusted Condominium Values
June 2009 (published August 25)

Must have add-on/tool for Sql Server Management Studio

Came across the SSMS tools pack today. Installed it and I had to recommend it immediately.

Check out all the features that SSMS Tools Pack provides on this page: http://www.ssmstoolspack.com/Features.aspx

And then download it for your version of SSMS from here.

My favorite features:

  1. tab-coloring indicating which server the tab is connected to.
  2. query execution history
  3. search database or table
  4. generate insert statements

Feature that I really wish were available:
Format the current T-SQL statement to C# or VB.Net – so that I can copy and paste into Visual Studio.

Monday, August 24, 2009

Changing the source code editor/viewer in Internet Explorer

The default application that Internet Explorer uses for showing source code is NotePad (meh!!!).

If you want to use a different application (I suggest NotePad++), then add the following key to the registy:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name]
@="\"C:\\Program Files\\Notepad++\\notepad++.exe\""

You can copy the above code into a text file, rename it to a .reg extension and double click it – to automatically incorporate the settings into IE. (Change the exe path to your favorite html editor).

Sunday, August 23, 2009

Words - Qua

qua • \KWAH\  • preposition
: in the capacity or character of : as

The school gym qua dance floor was where Oscar and Nanette fell in love.

Color scheme designer tools

Color scheme designer is probably one of the best color scheme choosing tools that I have come across (at least for color challenged me).

It has multiple color schemes to choose from, where if you want you just have to select one color and the others get set automatically based on the type of color scheme (mono, complementary, triad, etc.)

The other feature I really like is that it shows you the color scheme on a typical web-page design – making it even easier to figure if you like the color scheme or not.

http://colorschemedesigner.com/

image
The main color scheme chooser wheel.
image
An example web-page that uses the choose color scheme.

Animated maps – jobs lost

Came across this very interesting map that shows the rate at which jobs were lost since January 2007.

http://www.slate.com/id/2216238/?ad=ins

image

GUI Design and Mockups - GUIMags

In my last post I had written about Balsamiq mockups. And somebody pointed me at GuiMags/Mockup Magnets in my comments. I just checked out Mockup Magnets – and what a wonderfully clever idea it is.

GUI Mags is a set of pre-printed magnets that look like common UI controls. You stick them on a white board and you draw on them. And as a team you can brain-storm. Truly a very clever idea – makes me think “now why didnt I think of that!”

image

ps: The MockupMagnet site has a book that is supposed to have chockful of tricks for the software developer and they are giving away the ebook for free to Bloggers. read about the offer at - http://www.guimags.com/media/files/The-Unplugged-Chapter-1.pdf

Balsamiq Mockups – A quick demo

Five years ago I had taken a graduate level course in UI and human interface design. At that time there were almost no tools that could be used to create mock-ups of UIs (at least nothing to write about). About 2 years back I came across a powerpoint template that had a bunch of images that looked like commonly used UI controls that you could drag and drop onto the slide surface. It was a step up, but it wasnt exactly a mockup design tool and the hardest part to using it was how hard it was to customize the controls to show the information that is important to you. (Check out a newer version of the same idea -http://www.slideshare.net/graiz/wireframe-powerpoint-parts)

Recently, Balsamiq popped up onto my radar. I was intrigued, as the screen shots and screen-casts that I had seen, made the tool look exactly the way I thought a mock up tool should work – easy to use, and the mockups created should not expose any implementation specific details.

In order to test it out, I requested that Balsamiq provide me with a license so that I could take the application for a spin. Balsamiq was kind enough to indulge me and they provided me a license free of cost. (This is my disclaimer statement too).

First step: Balsamiq runs on the Adobe AIR platform. So before I could install Balsamiq I had to go out and install Adobe AIR (which worked without a problem on my Windows 7 machine).
Next: Balsamiq’s installation began and was quickly done. I was able to start it up and use it without a problem on my Windows 7 machine.

Here are my first impressions:

Balsamiq’s mockups almost have a “drawn on a paper napkin” feel. I think that this is its biggest selling point, as it makes developers step back from the implementation details that surround UI implementations and instead concentrate on the user experience.

The interface uses a Microsoft Ribbon like interface which has different tabs, each containing different UI controls that you can drag onto the design surface. Once a control is dragged on to the surface, you can resize it using the sizing handles. Some controls allow you to double click them and add content (like text areas). In addition all controls have a properties window, which you can use to change font size, etc.

Thats pretty much all that the interface is. Having a pre-defined set of controls makes it pretty quick to create simple UI mockups.

Here is a very simple mock up of my blog page that I created in under 5 minutes. (Almost immediately after setting up Balsamiq on my computer).

AI Blog

I plan on using Balsamiq on an upcoming project and will keep posting my thoughts on this tool.

Balsamiq is a very cheap tool ($80) and just for the features described above, it is worth having at least one copy of this tool amongst a group of developers.

The issues I need to work out:

  1. Not sure how one would go about creating new controls that arent already a part of the Balsamiq control list. This might be an important feature if your group tends to routinely create new UI controls
  2. In a text based control, if you type Lorem, Balsamiq will automatically fill in the “lorem ipsum….” text. For the Post Title, I wanted to insert only the text “Lorem Ipsum Dolor”. But Balsamiq insisted on inserting the complete Lorem Impsum…. text. It would be nice if like MS word, Balsamiq would revert back to the original text if we hit UNDO after some text was auto-inserted.
  3. I need to find out what other special commands they have. From a quick glance, there seemed to be ways to underline, display text as hyperlinks, etc.
  4. Images automatically get saved to a folder under documents called Balsamiq. I am not sure if there is a way to specify the folder to output the images to.

As of now – its a thumbs up for Balsamiq.

Using Twitter for Business

Sweet Action Ice-cream is a local ice-cream shop that makes some very interesting flavors of ice-cream. One of these flavors – Baklava – is not just unique – but to die for (IMHO). The ice-cream typically gets over before I get to the shop. The company now has a Twitter account (@sweetactionic) which they use to update their Twitter customer about what flavors are currently available. They also allow you to ask them if a flavor is available. Needles to say – I got my Baklava ice-cream fix yesterday.

image

Friday, August 21, 2009

Visitor trends to my blog

image The above graphic shows the visitor trends to my blog. Here are some interesting observations:

  1. The peaks tend to appear mid-week. The troughs on week-ends
  2. As my readership increases, the height difference between the intra week lows and highs increases. In other words – the drop off always seem to remain the same – I would think that these are my loyal blog readers. The highs probably occur because of search generated referrals.
  3. The peak in october coincides with the release of the Colorado ballot measures document and the summary of how different organizations wanted voters to vote on them. The peak in April – I am not sure what caused it.

The following graphic shows the cities from where the visitors arrived on my site:

image 

That is 8,713 cities on the above map.

Words – spear-carrier

spear-carrier • \SPEER-kair-ee-er\  • noun
1 a : a member of an opera chorus b : a bit actor in a play *2 : a person whose actions are of little significance or value in an event or organization

Thursday, August 20, 2009

How do I know if I have Windows 7 RTM installed?

Build 7600 has been labeled as the RTM bits. To find out what build you have installed go to Run and type WinVer and hit enter

image

Wednesday, August 19, 2009

Tuesday, August 18, 2009

Bitter after taste in mouth when I eat anything

Well today is the 3rd day running and almost anything that I eat, tastes REALLY bitter in my mouth. The best I can describe it is that the bitter after taste seems to occur towards the back of the tongue and it almost tastes as though I had taken a bite of a lemon peel. The bitter after taste is a lot more pronounced after I eat a chocolate or anything on the sweeter side.

Today being the 3rd day – I started getting worried that maybe it is some sort of a early warning signal that I was going to have a stroke – I thought maybe a part of my brain was not firing and responding to sweet foods touching the receptors on my tongue.

Did a quick search on Google for “Bitter aftertaste after eating anything”. Something that stood out to me was the number of pages that were returned referencing Pine Nuts. This fact must have jumped out at me – as I had recently discovered pine nuts and have been eating a ton of them. Here is an article in the Emergency Medicine that talks about this phenomena (“Taste disturbances after pine nut ingestion”).

I am not sure how far my taste disturbance is related to pine nut ingestion, but it just might be and I am going to stop eating them and see if the symptoms go away.

FYI, the pine nuts were bought from the whole sale bins at the Whole Food market. I am going to try and find out if the pine nuts were sourced from China or not (as the article suggests that Pine nuts from China might be the cause – or at least that 2 of the lots that caused such problems were from China).

Will report back if and when my “taste disturbance” goes away.

Wikipedia - Pine nut

SteadyHealth.com
"Bitter taste in mouth while eating".
"Sensation of bitter taste in mouth. What could it be?".

MySynths – Post your Synths to FaceBook

MySynths is a FaceBook application that was released today that allows you to share your PhotoSynths with your Facebook friends.

http://apps.facebook.com/mysynths/ShowSynth.aspx?uid=718766093&title=Denver_%40_dusk&ref=mf

image

It is a good start and I like the fact that it embeds the PhotoSynth inside Facebook (instead of just adding a link to the PhotoSynth page). What I do wish it could do is to automatically import all my PhotoSynths using either my account information or the RSS feed that PhotoSynth exposes. (Right now, you need to manually provide all the settings – url, thumbnail, description, etc.)

Another cool feature about this app – it is built on the Microsoft Cloud Platform – Azure.

Read more about the app at http://www.facebook.com/apps/application.php?id=114216030046&ref=mf and http://labs.speaktech.com/groups/mysynths/default.aspx.

Monday, August 17, 2009

Words – trichologist, chorography, florilegium

trichologist • \trih-KAH-luh-jist\  • noun
: a person who specializes in hair and scalp care; broadly : a person whose occupation is the dressing or cutting of hair

chorography • \kuh-RAH-gruh-fee\  • noun
*1 : the art of describing or mapping a region or district 2 : a description or map of a region; also : the physical conformation and features of such a region

florilegium • \flor-uh-LEE-jee-um\  • noun
: a volume of writings : anthology

Scrum for TFS (Concango Template)

Do you get the “No data available yet.” message when you try and view your Sprint View reports?

Make sure that the Sprint Start Date and End Date are set.

image

Multi-Resolution Multi-Monitor Dev Layout

I have fallen in love with using my Windows Taskbar from the left side of the monitor (instead of the traditional – along the bottom of the monitor). It works really well on my wide screen monitor, as I found that I preferred being able to have more text on my screen as opposed to more real-estate width wise. This works out even better when I am doing development or even browsing the web, as there is more information length wise than width wise.

Having moved my task-bar to the left also allowed me to make better use of my second monitor. A little back-ground: I use a laptop as my main machine. The laptop’s native resolution is 1280x800 (wide-screen). In addition I use a second monitor connected to my laptop. The native resolution of the monitor is 1280x1024 (normal monitor). If I were to use a different set of applications on each monitor – I would not be having a problem. But for some of my work, I just love being able to spread the application across both the screens. Case in point – Visual Studio. I love being able to dedicate a whole screen just for the code and the other screen for the solution explorer, output window, etc. But because I had 2 monitors with different resolutions, this made it very difficult to find a resolution that didnt make the fonts look weird when the screen was stretched across the monitors.

Now that I had moved the taskbar to the left side of the laptop screen, it meant that I had more vertical screen area on that monitor. I was then able to set my other monitor to a resolution of 1280x960 which allowed me to stretch windows across the 2 monitors and the result didnt look to bad (though, because I am not running the second monitor at native resolution, fonts still look a little blurred).

Here is how I have Visual Studio configured across the 2 screens:

image

The red vertical line represents the divide between the 2 screens.
The blue box on the left is the task-bar.
The blue box on the right (bottom) is the task-bar for the second monitor (curtsey of the awesome application UltraMon).
The red box on the right (top) are 2 additional icons that UltraMon provides making it easy for me to stretch the window across the 2 screens.
The yellow filled box on the left, is the space difference because of the 2 different resolutions that the monitors are running at (800 vs. 960)

That was a long post just to describe my monitor layouts!

But needless to say I wish I had tried the vertical taskbar out a long time ago and it is a very cool way to setup your wide-screen computer.

Sunday, August 16, 2009

Cryptographic Algorithms and .Net

From the latest MSDN magazine’s Security Briefs column (link):

Recommended Cryptographic algorithms for use in encryption/decryption and hashing of data:

Do not use Ok Best practice
Hash SHA-0 (SHA), SHA-1, MD2, MD4, MD5 SHA-2 SHA-2 (includes: SHA-256, SHA-384, SHA-512)
Symmetric Block DES, DESX, RC2, SKIPJACK 3DES (2 or 3 key) AES (>=128 bit)
Symmetric Stream SEAL, CYLINK_MEK, RC4 (<128bit) RC4 (>= 128bit) Symmetric Block is preferred
Asymmetric RSA (<2048 bit), Diffie-Hellman (<2048 bit) RSA (>=2048bit ), Diffie-Hellman (>=2048bit) RSA (>=2048bit), Diffie-Hellman (>=2048bit), ECC (>=256bit)
HMAC Key Lengths <112bit >= 112bit >= 128bit

Some other things to remember:

Cng class of algorithms are typically faster (eg: SHA512Cng as opposed to SHA512CryptoServiceProvider and SHA512Managed).

Cng class of algorithms are only available on Vista, Windows Server 2008 and Windows 7.

Managed class of algorithms are not Federal Information Processing Standards (FIPS) certified. This means that they might not be available on machines, where they have been banned for use by a machine policy. (read FIPS validated cryptographic algorithms in .NET)

(the above information is true as of this writing and can change at any time – because weaknesses in Cryptographic algorithms are found all the time).

Saturday, August 15, 2009

Win 7 – Dell Inspiron 1520 – Battery Issue?

For the last 24 hours I have been getting a “Consider replacing your battery” message. This wasnt being shown in Vista and the battery is about 18 months old – a little too early in my opinion for the battery needing replacement.

So I am not sure what is going on and my best guess is that some driver needs to be replaced and for that I might have to wait until Dell releases Windows 7 drivers for my Inspiron 1520 laptop.

Anybody else having a similar problem with their laptop and did you figure out a way to fix it?

image image

Win 7 Tip – Open multiple copies of an app

Need to open another copy of an application that is currently running…. hold down SHIFT and click on the icon of the app that is running in the taskbar – Voila! You get a second window!

Win 7 – Suggested first stop

After you install Windows 7 on your machine, I suggest taking a look at these videos to find out some really cool new features.

http://windows.microsoft.com/en-us/windows7/products/videos – in under 11 minutes you will be on your way to becoming a pro Win7 user

Friday, August 14, 2009

Windows 7 – Installing on a Dell Inspiron 1520

Decided to go ahead and try installing Windows 7 onto my Dell Inspiron 1520 laptop and here is my experience:

– Downloaded RTM ISO Bits for Win 7 Ultimate
– Copied personal files from laptop onto an external hard driver
– Burnt ISO to a DVD
– Started Installer
–– Choose to reinstall Windows 7 on my computer instead of upgrading – figured this would be a good time to start with a clean slate.
– Installer ran for about 45 minutes, rebooted the computer a couple of times before it was ready for use.
– Found that Windows 7 didnt have drivers from the video card (nVidia GeForce 8600M GT)
–– Dell didnt have any drivers for Win 7 either.
–– Found a NVidia “reference” driver, decided to bite the bullet and install it.
––– When computer started up, there was a conflict between the video driver and the mouse.
––– Restarted the computer and it fixed the problem.
– Had to run update for Win7 to get some drivers for unknown devices on the computer.

Before I installed the nVidia drivers I got a measly 1.7 performance score. Aero was turned off.
After installing the nVidia drivers the score got to 4.7
 image

Been extremely happy with Win7 on my Inspiron up to now (tested for 24 hours).

I will continue reporting on my experience installing other drivers and applications on my new Win7 laptop.

Update 08.14 –
Installed Windows Live Write – no problems
Installed McAfee anti-virus – free from Comcast – no problems

Update 08.15 -
Installed MS Office 2007 – no problems
Installed Brother MFC-490CW networked printer – no problems (was unable to find Win7 version of the apps that came with the printer. Scanning is currently not working as I dont have the drivers).

Wednesday, August 12, 2009

Photosynth of Coors Field

My latest PhotoSynth – of Coors Field in Denver. Turned out to be a 100% photo-synth.

Interesting things that I found while making this latest photosynth:

1. There is a brand new interface to the website.

2. You can select images to highlight as well as add descriptions to individual images.

3. There is a new viewer – a silverlight viewer – which allows you to do a lot more, and a direct 3d viewer – which runs very fast and the way I like viewing the synths.

image

Simple pass phrase based encryption using SQL Server 2005

Here is how you can use a single pass-phrase based encryption using SQL Server built-in functions. (single pass-phrase encryption is also known as symmetric key encryption).

DECLARE @Passphrase nvarchar(50);
DECLARE @textToEncrypt nvarchar(128); 
DECLARE @encryptedText as varbinary(max) 
SET @Passphrase = 'This is my secret code'; 
SET @textToEncrypt = 'The quick brown fox jumped over the fence' 
SET @encryptedText = EncryptByPassPhrase(@Passphrase,@textToEncrypt) 

Select @encryptedText, len(@encryptedText);

-- Decrypting Data by DecryptByPassPhrase 
Select convert(nvarchar(max),DecryptByPassPhrase(@Passphrase,@encryptedText) )

EncryptByPassPhrase - http://technet.microsoft.com/en-us/library/ms190357.aspx

DecryptByPassPhrase - http://technet.microsoft.com/en-us/library/ms188910.aspx

Tuesday, August 11, 2009

log4net and IIS Web clusters

We use log4net quite a bit at my current job. One of the ASP.Net applications is deployed to a web-cluster so that it has a high degree of availability. But for some reason, on this app, we seemed to be loosing some events that we knew were occurring (log4net was sending emails of the events but not writing them to the log file). This continued for a while without us making any kind of a head way in figuring out the problem. And then we got our first clue when we included the computer name as part of the information that log4net was writing out (${COMPUTERNAME} in the ConversionPattern). We found that events from only one computer were ever being written to the log file and it always was the first one where the application restarted.

This pointed to a file locking issue. And sure enough, log4Net, opens the log file with an exclusive lock when it opens a file for writing (for file based appenders such as the RollingLogFileAppender).

Here are the 2 attributes that I included on my file based appenders to get around the issue:

<immediateFlush>true</immediateFlush>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>

The first one makes sure that the log is written out immediately and the second one makes sure that log4net does not open a log file exclusively.

A word of warning – both of these options will increase the amount of time log4net uses to write to the log (as no buffering takes place and each time the log is written to, log4net opens, writes and then closes the file). In our application, I havent found this to increase response time of the application significantly.

Saturday, August 08, 2009

Quotes – foundations of a democracy

the willingness to listen to others, to be open to persuasion, to invite others into our conversations are the foundations of an ethical and healthy democracy

-unknown

Quotes – the hottest places in hell…

The hottest places in hell are reserved for those who in times of great moral crisis maintain their neutrality

John F. Kennedy – who attributed it to Dante

Get the list of installed software on your computer

I am getting ready to install Windows 7 (when it officially releases). I have decided that its time for me to perform a clean install (instead of an upgrade). So before I do that, I want an inventory of all the software installed on my machine. To do that I found the following vb script, that checks your computer and spits out the list of software to an excel sheet. Very useful.

When it starts you will get a message box that notifies you that the script has started. And when its done you will get a message that the script has completed.

Copy the following text into notepad and save the file with a vbs extension (eg: installedSoftwareList.vbs). Double click on the file to run it.

WScript.Echo "Script Started"

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)
x = 2

objExcel.Cells(1, 1).Value = "Name"
objExcel.Cells(1, 2).Value = "Location"
objExcel.Cells(1, 3).Value = "Vendor"
objExcel.Cells(1, 4).Value = "Version"
objExcel.Cells(1, 5).Value ="Computer"

strComputer = "."
Set objWMIService = _
    GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_Product")
For Each objItem in colItems
    objWorksheet.Cells(x, 1) = objItem.Name
    objWorksheet.Cells(x, 2) = objItem.InstallLocation
    objWorksheet.Cells(x, 3) = objItem.Vendor
    objWorksheet.Cells(x, 4) = objItem.Version    
    x = x + 1
Next

Set objRange = objWorksheet.UsedRange
objRange.EntireColumn.Autofit()

WScript.Echo "Script Completed"

The following script uses a different source of truth (the registry), instead of the WMI objects to get a list of software installed. I would use both to determine the list of software installed on your computer.

WScript.Echo "Script Started"

on error resume next

Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)
x = 2

objExcel.Cells(1, 1).Value = "Name"
objExcel.Cells(1, 2).Value = "Version"
objExcel.Cells(1, 3).Value = "Install Date"
objExcel.Cells(1, 4).Value = "Install Location"
objExcel.Cells(1, 5).Value = "Install Source"
objExcel.Cells(1, 6).Value = "URL"


strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strEntry1a = "DisplayName"
strEntry1b = "QuietDisplayName"
strEntry2 = "DisplayVersion"
strEntry3 = "InstallDate"
strEntry4 = "InstallLocation"
strEntry5 = "InstallSource"
strEntry6 = "URLInfoAbout"


Set objReg = GetObject("winmgmts://" & strComputer & _
 "/root/default:StdRegProv")
objReg.EnumKey HKLM, strKey, arrSubkeys

For Each strSubkey In arrSubkeys
  intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, _
   strEntry1a, strValue1)
  If intRet1 <> 0 Then
    objReg.GetStringValue HKLM, strKey & strSubkey, _
     strEntry1b, strValue1
  End If
  objReg.GetStringValue HKLM, strKey & strSubkey, _
       strEntry2, strValue2
  objReg.GetStringValue HKLM, strKey & strSubkey, _
       strEntry3, strValue3
  objReg.GetStringValue HKLM, strKey & strSubkey, _
       strEntry4, strValue4
  objReg.GetStringValue HKLM, strKey & strSubkey, _
       strEntry5, strValue5
  objReg.GetStringValue HKLM, strKey & strSubkey, _
     strEntry6, strValue6
  If strValue1 <> "" Then
    objWorksheet.Cells(x, 1) = strValue1
    objWorksheet.Cells(x, 2) = strValue2
    objWorksheet.Cells(x, 3) = strValue3
    objWorksheet.Cells(x, 4) = strValue4
    objWorksheet.Cells(x, 5) = strValue5
    objWorksheet.Cells(x, 6) = strValue6
        x = x + 1
  End If
Next

strKey = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"

For Each strSubkey In arrSubkeys
  intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, _
   strEntry1a, strValue1)
  If intRet1 <> 0 Then
    objReg.GetStringValue HKLM, strKey & strSubkey, _
     strEntry1b, strValue1
  End If
  objReg.GetStringValue HKLM, strKey & strSubkey, _
       strEntry2, strValue2
  objReg.GetStringValue HKLM, strKey & strSubkey, _
       strEntry3, strValue3
  objReg.GetStringValue HKLM, strKey & strSubkey, _
       strEntry4, strValue4
  objReg.GetStringValue HKLM, strKey & strSubkey, _
       strEntry5, strValue5
  objReg.GetStringValue HKLM, strKey & strSubkey, _
     strEntry6, strValue6
  If strValue1 <> "" Then
    objWorksheet.Cells(x, 1) = strValue1
    objWorksheet.Cells(x, 2) = strValue2
    objWorksheet.Cells(x, 3) = strValue3
    objWorksheet.Cells(x, 4) = strValue4
    objWorksheet.Cells(x, 5) = strValue5
    objWorksheet.Cells(x, 6) = strValue6
        x = x + 1
  End If
Next

Set objRange = objWorksheet.UsedRange
objRange.EntireColumn.Autofit()

WScript.Echo "Script Completed"

Thursday, August 06, 2009

Debugging blue screen of death issues

The biggest problem with BSOD issues is that you dont have a screen shot of the error, making it hard to Google for possible answers and fixes for the BSOD on your machine. NIIRSoft has a free tool called BlueScreenView, which parses the mini-dump files that Windows create during a crash and recreates the BSOD view.

Twittering for your organization

Twitter is geared for the individual user (a shared login is used to access the account). This model does not work for organizations. CoTweet.com allows you to associate up to 6 people with a single Twitter account (at least thats the limit for a free account). Each user logs in with their own email id.

CoTweet allows you to monitor tweets that target your organization. It also allows you to assign tweets targeted at your account to different users for follow up. I am still learning all the features, but the tool is very cool.

Now why didnt I think about creating this tool?

www.cotweet.com

Important: Dont use tools that ask you to provide them your Twitter login details (password). Instead, use tools that use OpenAuth to talk to your Twitter account. (CoTweet does this).

Other useful tools:

  • www.bit.ly – URL shortening tool. Also provides tracking of click throughs. (another important tool to determine how much your Twittering is impacting the use of your site)
  • www.tweetake.com – Backup your tweets (security** – does not use OpenAuth and asks you to provide your twitter password – BAD!)
  • www.twitterfall.com – View trends/monitor topics that matter to your organization (uses OpenAuth) – Very cool tool.
  • www.tweetlater.com – Automate different Twitter related actions (eg: automatically follow people who follow you)

Twitter monitoring and grading tools

Using Twitter in your organization

The following document was created as a roadmap for government departments in U.K. But a lot of the points talk to how you can implement it in your organization (private or public).

Template Twitter Strategy for Government Departments

Street Sweeping Reminders for Denver

Get street sweeping reminders for the City & County of Denver - http://bit.ly/WuOjA

log4net – logging levels available

  1. OFF
  2. EMERGENCY
  3. FATAL
  4. ALERT
  5. CRITICAL
  6. SEVERE
  7. ERROR
  8. WARN
  9. NOTICE
  10. INFO
  11. DEBUG
  12. FINE
  13. TRACE
  14. FINER
  15. VERBOSE
  16. FINEST
  17. ALL

Levels lower in the list are considered to have lower precedence than levels that are higher in the list. Thus if you use the threshold filter set to ERROR, then only levels upto (and including ERROR : 1 to 7) will be output. (or DEBUG < INFO < WARN < ERROR < FATAL)

Filters available:

log4net.Filter.DenyAllFilter Drops all logging events.

log4net.Filter.LevelMatchFilter An exact match to the event's level.

log4net.Filter.LevelRangeFilter Matches against a range of levels.

log4net.Filter.LoggerMatchFilter Matches against a the start of the logger name.

log4net.Filter.PropertyFilter Matches a substring from a specific property value.

log4net.Filter.StringMatchFilter Matches a substring from the event's message.

Wednesday, August 05, 2009

Words - Fiero, Schadenfreude, Naches

Fiero, Schadenfreude, Naches – describe emotions and there are no English equivalents for these words.

Fiero – pride in one’s accomplishment (italian)

Schadenfreude - Pleasure derived from the misfortunes of others (german)

Naches – Joy – especially derived from children (Yiddish)

Tuesday, August 04, 2009

OpenStreetMap parties in India

Read this interesting article on LiveMint about OpenStreetMap parties in India (link).

How do you get involved: Take a look at this India wiki on OpenStreetMap – it has a ton of useful information.

And remember, you can use OffMaps for the iPhone, to download map tiles from OpenStreetMap and use it anywhere in the world.

http://www.openstreetmap.org/