Wednesday, December 31, 2008

Crystal Reports Basic 2008 Runtime Installer

Need the Crystal Reports Basic 2008 run-time installer? Find it in the following folder on the development machine.

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\CrystalReports10_5

More Info:

Copy and run the installer on the machines where you plan on deploying your application.

Crystal Reports Basic 2008 is the version of CR that is bundled with Visual Studio 2008.

important note: The correct method of deploying CR 2008 Basic is to create your installer correctly. If done correctly VS will include all the dependencies required by your application, including the CR dlls. This is typically done by including the CR merge module installer.


Note 2: The runtime installer for Crystal Reports for Visual Studio 2005 can be found at

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports

More Links….

Monday, December 29, 2008

Visual Studio Icons

I needed VS icons that would allow me to differentiate between the different versions of Visual Studio that I have installed on my machine (I have VS 2005 and VS 2008 installed side-by-side).

Here is what I managed.

The different icons are available in the following dll "%ProgramFiles%\Common Files\Microsoft Shared\MSEnv\VSFileHandler.dll"

Here are the icons that are available in the dll.


Saturday, December 27, 2008

Ads – Hat Tip - Nikon S60

via and Advertising/Goodness

Information about the Ads:

Ads from Euro RSCG Singapore depicts Nikon S60 camera screens with unexpected face detection boxes, dramatizing how the S60 can capture up to 12 faces.
Brand: Nikon S60 Camera
Agency: Euro RSCG Singapore
Photographer: Jeremy Wong
Executive Creative Director: Charlie Blower
Creative Director: Victor Ng
Art Director: Lee Hsueh Ling
Copywriter: Victor Ng, Stephen Kyriakou
Country: Singapore
Other Credits: Digital Artist/Retouching: Ricky Haryadi
Production Manager: Joel Ng
Account Service Credit: Mark Ho
Client Credit: Jeffrey Low  

nikon_s60_1 nikon_s60_2 nikon_s60_3

Britain from Above – Data visualization

Via FlowingData

Britain from Above is a BBC TV series that takes a look at how Britain is interconnected in a variety of ways. The videos are interesting in not only the data that they display but also the way in which the data is visualized (The series uses data, satellite imagery and aerial videos to tell its story).

Take a look at some the clips and then take the jump to the BBC Britain from Above website.

Trailer for “Britain from Above”

GPS traces of ships


Data movement over Britain's telecom networks


And here are more “Britain from Above” videos on YouTube.

Flowing Data

Today I stumbled upon the FlowingData website and it is a great site. What is it? Here is a description from the website:

FlowingData explores how designers, statisticians, and computer scientists are using data to understand ourselves better - mainly through data visualization. Money spent, reps at the gym, time you waste, and personal information you enter online are all forms of data. How can we understand these data flows? Data visualization lets non-experts make sense of it all.

And here is the post that first landed me on this site: A contest on how to skin historical data about immigration to the U.S.

Take a look at the graph – it is interesting.

immig (pdf)

Top 10 tech breakthroughs of 2008 has this years top 10 list of technology breakthroughs (link)


10. Flexible displays.

Some of the other notable breakthroughs are:

6. GPS – Even though GPS technology has been around for almost 30 years now, it has been nominated for the fact that it has finally become ubiquitous and now appears in almost every gadget that you buy – PDAs, phones, cameras and ofcourse personal GPS nav devices.

4. Video capable Digital SLRs – this is my favorite breakthrough of 2008. I have a Nikon D40 and how I would like to upgrade to something like the Nikon D90 or the Canon 5D Mark II. Don’t believe me in how cool this breakthrough actually is? Then check out this video created using only the Canon 5DMk2 – Reverie and then take a look at the blog of the guy who created the video – stunning results are now possible by amateurs.

Here is one of the newest videos that Vincent Laforet created (also check out his blog for some real interesting posts on how he does his thing -

hispeed_otg_usb3. USB 3.0 – This will be 10 times faster than USB 2.0 – Enough Said! apple-iphone-keyboard

2. Android – This phone is awesome for how open it is compared to the iPhone. Unfortunately the G1 isn’t yet in the league of the iPhone, but I am sure that very soon we will see an Android phone that is just as awesome as the iPhone and even more.

1. AppStore – The AppStore represents the fact that Apple allowed 3rd party developers to begin creating applications for the iPhone. The AppStore, coupled with the fact that the iPhone 2.0 comes with a GPS were the main reasons I sprang for this phone.

Beautiful pictures of our planet


Cloud streets over the Caspian sea. (Modis Website)

The Modis Rapid Response System’s website releases beautiful images that it captures of our planet at least once a week (if not more often). Check out their gallery (which also contains an archive of all their old imagery) The satellite images released are mainly of weather related phenomenon and fires as the system is used by U.S. agencies to monitor fires as well as weather patterns as related to agriculture.

The Moderate Resolution Imaging Spectroradiometer (MODIS) flies onboard NASA's Aqua and Terra satellites as part of the NASA-centered international Earth Observing System.

Wednesday, December 17, 2008

Log4Net: Unable to send emails to multiple addresses

The SMTPAppender is supposed to be able to send log information to an email addresses that is specified in the To property.

Here is a basic configuration for the SMTPAppender for the config file.

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
            <to value="toEmailAddresses"/>
            <from value="fromEmailAddresses"/>
            <subject value="subject"/>
            <smtpHost value="smtpHostAddress"/>
            <bufferSize value="1"/>
            <lossy value="true"/>
      <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
        <!--<threshold value="ERROR"></threshold>-->
      <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%newline%date [%thread] %-5level %logger [%property] - %message%newline%newline%newline"/>

Based on the SMTPAppender documentation, one should be able to send emails to multiple addresses and this is to be done by using the semi-colon as the delimiter. (documentation)

But if you try and do this, LOG4Net will decide to no longer send an emails. This was perplexing as, when I used a single email address Log4Net would correctly send out an email. But if I tried sending an email to multiple recipients, Log4Net would not send out an email.

After some testing, I found out that the correct delimiter in this case is supposed to be the COMMA (,) and not the semi-colon!

Now you know!

One issue I had while using the Log4Net API was that it seemed to be swallowing up exceptions that were occurring within it. That seemed to be the most logical explanation about what was going on with the multiple email addresses de-limited by semi-colons.

Here is useful information on how you can set Log4Net to emit it's trace information - which can be useful in tracking down these errors.

How do I enable log4net internal debugging?

2 methods are available to turn on internal debugging:

  • via the application's configuration file
            <add key="log4net.Internal.Debug" value="true"/>
  • set the static log4net.Util.LogLog.InternalDebugging property to true.

Debug messages are written to the console. So for an app or a windows forms based app you might think you are out of luck. But here is another little trick.

You can redirect data sent to the console to a file or another application. When the application that is using Log4Net is attached to a debugger, the console information is automatically captured to the output window. But if it is not then you can use a tool like DebugView to capture the output from Log4Net.

To capture Log4Net's trace information to a file you need to add the following information under the configuration node of the application's config file.

        <trace autoflush="true">
                    initializeData="C:\log4net.txt" />

Monday, December 15, 2008

Geo-coder tool has been updated

My geo-coding tool now has a name “What’s the address?”. The page has been updated with various improvements (mainly cosmetic this time around).


The tool allows you to extract the latitude,longitude for an address. In addition, the tool allows you to do the reverse – get the address of a location that you click on the map.


The tiny URL is:

The complete URL is:


Saturday, December 13, 2008


Here is a good article on vesting (and how it is typically setup for new companies that are in the process of getting funding from VCs, etc.)

Wednesday, December 10, 2008

PageRequestManagerServerErrorException with Status Code 401

The error "Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was: 401", is due to a permissions issue. One can determine that by checking on the 401 error code.

In my case it was because a method on one of my web pages needed to have write access to folder where it created temporary images. Without the permission the browser would throw this generic error message. If you ran the page on a browser on the actual server, you would get the actual error message - which in my case clearly pointed to the fact that I did not have write access to the folder I was trying to write the images to.

Once the User account was given write access to that folder, the problem went away!

Monday, December 08, 2008

Google Maps – Forward and Reverse Geo-Coding

imageGoogle Maps allows you to plug in an address and get the location displayed on the map. But what Google Maps does not allow you to do is click on a location on the map and get the address of that location. The first is an example of forward geo-coding. The later is an example of reverse geo-coding.

I needed a tool that would allow me to quickly navigate to a location of a know address (forward geo-coding) and then display the addresses of different locations on the map (reverse geo-coding). So using Google Map API examples, I quickly created this very simple tool which will allow you to do this. Check it out at:

Sunday, December 07, 2008

Best New Denver Restaurants (2008)

Based on the 5280 magazine’s best new Denver restaurants list, I have created a Google map containing the locations and some basic information about these restaurants (address, phone number, web URL, what to try).

Read the entire 5280 article from their website:


View Larger Map


BatchGeoCode’s version of the map:

The map was made by first creating an excel sheet with all the information in separate columns. The information was then copied and pasted into’s batch geo-coding tool. BatchGeoCode then took my data and created a KML file. The KML file was downloaded to my computer and then loaded into GoogleEarth. Then GoogleEarth was used to export the kml file as a KMZ file. The KMZ file was then imported into a new Google MyMap. (the step of going from KML to GE to KMZ was needed because there seems to be something wrong with BatchGeoCode’s KML file and it was not getting imported into MyMaps. Using GE to export the file seemed to do the trick for me).

Schmapp includes my photo in its tour guide

Schmapp used this photo of mine in their tour guide.

Saturday, December 06, 2008

iPhone App – Amazon Mobile finally has released an app for the iPhone platform. Amazon is a great tool for comparison shopping as well as looking up reviews of other users – is one of the best review sites for all kinds of products (from books to music to electronics). An interesting tool that the Amazon app introduces is called “Amazon Remembers”. Amazon remembers lets you take a picture of a product that you wish to remember to research latter. Amazon will store the image on their server and in addition try and recognize the product in the image and send you an alert if they find the product on their site. (Not sure if images are recognized using machine learning or using human eyes).

The app also provides you with access to your account, which means that you can use 1-click to purchase products, view and edit your wish-lists and more.

Thursday, December 04, 2008

Oracle sequences and concurrency

Recently I had a question about sequences and their behavior when they are accessed concurrently by multiple users/sessions.

Surprisingly there is very little on this topic from Oracle (or for that matter on the web - search).

First some background (jump to the end if you wish to see my conclusion based on my research):

CURRVAL and NEXTVAL (collated from various documents on the net)

A sequence is a schema object that generates sequential numbers. When you create a sequence, you can specify its initial value and an increment. CURRVAL returns the current value in a specified sequence. Before you can reference CURRVAL in a session, you must use NEXTVAL to generate a number. A reference to NEXTVAL stores the current sequence number in CURRVAL. NEXTVAL increments the sequence and returns the next value. To get the current or next value in a sequence, use dot notation:


Each time you reference the NEXTVAL value of a sequence, the sequence is incremented immediately and permanently, whether you commit or roll back the transaction.

After creating a sequence, you can use it to generate unique sequence numbers for transaction processing. You can use CURRVAL and NEXTVAL only in a SELECT list, the VALUES clause, and the SET clause.

Any reference to CURRVAL always returns the sequence's current value, which is the value returned by the last reference to NEXTVAL. Note that before you use CURRVAL for a sequence in your session, you must first initialize the sequence with NEXTVAL.

Within a single SQL statement, Oracle will increment the sequence only once per row. If a statement contains more than one reference to NEXTVAL for a sequence, Oracle increments the sequence once and returns the same value for all occurrences of NEXTVAL. If a statement contains references to both CURRVAL and NEXTVAL, Oracle increments the sequence and returns the same value for both CURRVAL and NEXTVAL regardless of their order within the statement.

A sequence can be accessed by many users concurrently with no waiting or locking.


From my research here is what I have determined:

  1. Concurrent access of NextVal on a sequence will always return separate values to each caller. (Unless the sequence has been setup to cycle values - in which case duplicate values are possible).
    An important point to remember is that a sequence is under no circumstances ever rolled-back. For this reason sequences can end up with holes.
  2. CurrVal returns the last value generated for a sequence when NextVal was called on it. The CurrVal is independent for each session (where a session is a distinct connection, as a single database user, to the database by an external program). This means that CurrVal will always return last value generated for you, regardless of how many times NextVal is called by other users on that sequence.
    So sequence can be safely used concurrently and you do not have to worry about CurrVal returning you some other users current value for the sequence.

As an aside, if you are using a sequence to generate a record id and if you are trying to determine the last inserted rowid then you can use the returning keyword in Oracle.

eg: insert into tableName(table_id,.....) values (mySequence.NextVal,......) returning table_id into variable_name;
(this forum post shows how returning keyword can be used when the row id is updated using an on insert-before trigger using an example -

Here is a good article that delves into the depths of Oracle Sequences:

Wednesday, December 03, 2008

Spelling Alphabets (Phonetics) for the iPhone

I created a quick web-application for converting words to their phonetic equivalent. Obviously this isn’t the first website that can do that, but this one has been optimized for the iPhone (sort of!).

Basically all I had to do is add the following line to “HEAD” part of the document.

<meta name = "viewport" content = "width=device-width">

And that takes care of making the document be the right size for the iPhone. The rest had to do with the right placement of the controls.


Check it out at (

The website also allows you generate the spelling alphabets using a URL. Alphabet (Just replace “Phonetic Alphabet” in the url with whatever word or sentence that you need converted).

(Phonetics – Spelling Alphabets - on the iPhone)