Monday, September 19, 2011

throw vs throw ex: C# .NET Exceptions

There are a couple options to raise an exception again after it has been caught. One option is to raise the exception again by using the "throw exception" keyword like below:

try
{
   ...//code that encounters an exception
}
catch (Exception ex)
{
   ...//exception handling code
   throw ex; //raise the exception again
}

The disadvantage in this way is that the original context of the exception is lost. There is no longer a meaningful call stack attached to the exception because it will contain the latest context from the newly added throw. If you plan to throw the exception in this matter you should wrap the original exception into another new more high level (application) exception. The new exception would add more high level info about the original exception.


The second option is to use the throw keyword alone with out passing the actual exception variable. This tells the .NET framework to throw the original exception without updating its context like below:

try
{
   ...//code that encounters an exception
}
catch (Exception e)
{
   ...//exception handling code
   throw; //notice the exception e is omitted
}

This way should be used when the exception is trivial enough and the code is too small to require wrapping into another exception. Again the advantage here is that you maintain the original call stack so that any user of this code can track the cause of the exception.

It's worth noting that Java is different in this aspect and using "throw ex" in Java will retain the original stack trace.


Sunday, January 2, 2011

Nearby Windows Phone 7 Reviews and Maps App



Nearby is a new Windows Phone 7 (WP7) app. The app can be downloaded here from the Windows Phone 7 app store.


Download Now for Windows Phone 7




Nearby nearby screenshot

Nearby shows the user nearby places automatically upon opening. The user can scroll through the list of nearby places and find more information on a location he is interested in. Information for a location includes phone, address, website, rating, and distance. You can see the directories where the location is found such as Yelp, Yahoo and CitySearch. Using Nearby, you can view the location's page on Yelp and other sources within the app. Browsing to the Yelp or Yahoo page for the business allows you to see reviews and more info.



Nearby directions screenshot

With Nearby, you can find step-by-step directions to the location you are interested in. You can also navigate through the itinerary steps and see the steps on the map.



Nearby details screenshot

Nearby allows you to bookmark your favorite locations so that you can find them easily. You may also share a location with a friend via SMS text or email. Calling a place is as easy as touching the phone icon or phone number after selecting a business.



Nearby favorites screenshot

List of favorite places and businesses for easy access.



Find out more about Nearby at http://www.challengesolutions.net


Friday, October 15, 2010

Just Draw - Drawing App for iPad

Available on the App Store

Just Draw is the latest mobile app I launched on the Apple App Store. Currently it's only compatible with the iPad. Future versions might extend support to iPhone and iTouch depending on demand.

Just Draw is a nice simple app that allows iPad users to use their fingers to draw then save or share their drawings via Facebook, Twitter, or email. The app is useful if you want to jot down ideas while thinking then come back to them later. It's also good for quickly mocking up designs of anything. If you ever wanted to quickly write or draw something on a picture and then send it to a friend, Just Draw is the app you've been looking for.

Perhaps one of the unique features of Just Draw is the "replay" feature. You can have the app trace every move you make by hitting the replay button. So you can take your time and draw something creative then hit replay and watch the app animate your drawing by repeating everything you did.

The cool thing about this app is that it is built on top of OpenGL which gives it the smooth performance. Just Draw supports multi-touch drawing. So you and your friends can draw at the same time! The app makes use of a few API's such as Facebook and TwitPhoto.

Since this is the first release, there are many nice features that can be added to Just Draw. I am open to any ideas or suggestions on what users want to add to the app. Have fun with the app and I look forward to hearing your feedback and comments.

Here are some screenshots from Just Draw:







Sunday, January 10, 2010

iPhone Project Management with TA Project

available on the iphone app store

I just finished developing an iPhone App called TA Project that's on the Apple App Store now. The mobile application allows a user to create tasks or to do lists for a project. It can be simply used for task management. But it can also be used for more complex budget and schedule tracking. TA Project can also compute project management metrics such as the Schedule Performance Index (SPI) and the Cost Performance Index (CPI).


You can also graph your estimate and actual cost to visually compare your performance to what you have estimated. The graph is useful to foresee whether your actual cost is going to exceed your estimate or not. Another feature of TA Project is allowing the user to post the status of a project on Twitter. One of the tabs for each project is a Twitter tab that allows reading previous posts and posting new Tweets.


I was the only developer working on the project. I used CorePlot for graphing. Overall the most complex pieces of the project were handling task dependencies, graph formatting, and making the application robust. Making the application robust includes memory management and handling network events. Integrating with Twitter was fairly simple. The app uses CoreData for data storage which uses SQLite underneath.


Xcode and CoreData make using SQLite very convenient. After getting the data model down in Xcode, most of the data pluming is done for you under the hood. This project presented some data challenges because almost every single action the user makes has to be retained.



Below are some screenshots from the app.
my projects screenshot
Home page screen. This screen shows the list of projects.




tasks screenshot
The Tasks tab. After selecting a project you come to this tab which shows the tasks for the selected project.




performance screenshot
The Performance tab. The Performance tab shows the CPI and SPI metrics in addition to the estimate and actual cost graphs.





landscape graph

Flipping the phone shows the graph in landscape mode.




twitter tab screenshot
The Twitter tab. This tab allows the user to read posts and update the status of the project on Twitter.

Monday, August 10, 2009

SQL Server SP Parameter Default Value

SQL Server does not allow creating a stored procedure with parameter default values that are not constant. This can be a problem if you want to give a parameter a default value that is predictable but not constant such as giving a datetime parameter a default value of the current time.

There are two ways to resolve this. One is solution but it's not very flexible. The other is a workaround but can be used in more situations. First the solution. If the parameter is used as a minimum or maximum value check, you can totally ignore the value if it's null.

Here is an example of the first solution. Let's say we want to write a stored procedure to get all records from an Activity table that occured from one point in time to another. In this case we want to include all records if the boundry variable is not specified. In the example below we simply do this by checking for NULL and using the logical OR.


CREATE PROCEDURE GetActivityRecords
@From DATETIME
@TO DATETIME

AS
 BEGIN
   SELECT * FROM Activity
   WHERE (@From is null or LogTime >= @From)
   and (@To is null or LogTime <= @To)
 END


Another way to do this that is more flexible is to check if the parameter is null and in that case set it equal to whatever value you wish.

For example, in the code below I check if the @To variable is null and if it is I set it equal to the current time.


CREATE PROCEDURE GetActivityRecords
@From DATETIME
@TO DATETIME

AS
 BEGIN
   IF @To is null
   BEGIN
      SET @To = GetDate()
   END

   SELECT * FROM Activity
   WHERE (@From is null or LogTime >= @From)
   and LogTime <= @To
 END