December 30, 2010

API Design

My last technical presentation for the year 2010. The tech talk is about How to design API's. Please find the presentation slides and hope this helps.

December 22, 2010

How to manage your Code Repository

Managing a personal code repository is not that easy, especially when you have projects of all different technologies. I currently develop applications in Java, Apple & Microsoft. Being a Microsoft guy for a decade I recently moved into other development areas which is pretty interesting and keeps me very busy.

All so often I get this question -- how do I manage my code repository. So thought of writing a small post which might help someone.

I use code.google.com to manage all my projects. The projects I host in code.google.com are my personal projects and I really don’t mind sharing it with public. I use SVN as my source control system. For developers who do not want public access to their source code can use GITHUB paid version which is as similar to code.google.com.

Following is my main Project folder hierarchy;

APPLE
---- IPHONE
---- IPAD
---- MAC
GOOGLE
---- EXTENSIONS
---- APP_ENGINE
MICROSOFT
---- XWT
---- ASP.NET
---- WPF
---- WIN

All of the above projects source are managed by code.google.com. Since I develop for both Apple and Microsoft; I have to use both Mac and Windows OS also three different Development IDE’s -- Visual Studio, XCode and Eclipse.

I use Ankh SVN plugh-in and Tortoise SVN for Visual Studio which is pretty awesome. For XCode and Eclipse I use Versions. All of the above folders are sync with my DropBox private folder, so that even if I don’t have my development PC--I can still continue my work from any PC. Also I have mirrored my local Project folder to a Portable HD. The following diagram will show you the overall setup.


I use Mozy.com for my weekly project backups, so my Projects are well secured from any disaster. I have pretty much the same setup for my other stuff as well. For example, Artworks, Video projects, Scanned docs and so forth.

The main idea behind this setup is to continue my work regardless of where I am. And by mirroring my code with multiple sources guarantee my code safety.

Hope this helps!

December 16, 2010

Software Design Principles & Patterns

Recently I've done a training session to my office colleagues on Software Design Principles & Patterns. I discussed on the most important design principles and design patterns. Hope it will be useful to you as well.

December 15, 2010

Gmail – the best example for iteration perfection

When Gmail initially released back in 2004, it was just a simple email system. By giving more storage and Ajax request processing technique made Gmail to gain attention from the users. But Gmail lack most of the functionalities which other email systems provided back then, such as folders or labels.

But today, Gmail is probably the best Web Application on the internet. Throughout the years Google engineers made the Gmail perfect by adding features— at least every month.

As developers, we typically experience the “Add More Features” syndrome. Rather than releasing to the market quickly we keep adding and adding more features to our app, eventually we loose the interest and the product was never released.

Release your app quickly to the market and also release features more often. Through development and release iterations makes your app perfect overtime.

December 8, 2010

iTunes Connect holiday shutdown

App Store submissions will be closed from 23 December to 29 December. Following is the official email from Apple. Also this only applies to Apple iOS developers.

iTunes Connect will be temporarily shut down from Thursday, December 23 to Tuesday, December 28 for the winter holidays. Access will resume on Wednesday, December 29.
During this shutdown, iTunes Connect will be unavailable. In addition, app releases and pricing changes which are scheduled to take place during the shutdown will be handled as follows:
All releases will not appear in the App Store until Wednesday, December 29. This includes apps scheduled to appear on the App Store for the first time as well as updates to existing apps.
Pricing changes will cause the app to become unavailable for purchase until Wednesday, December 29, at which point the app will become available at the new price. Please check to ensure you have not scheduled any price changes during this time.

Transformation

I still remember the days we wrote software and distributed in Floppy diskettes or CD’s. Back in those days web was merely bunch of static pages which most of the companies used to publish their company profiles.

But in the past few years’ things have changed immensely. People are connected to internet than ever before—we are in the process of transforming to a new technology era.

What does this mean ;

To Users :
People are connected to their loved ones than ever before—Social Networking. They were able to access their personal data such as photos from anywhere in the world.  Their productivity software is no longer limited to their desktop PC.

To Developers :
Developers have huge opportunities through various platforms. They no longer have to waste time on marketing or distributing their software. Apple App store, Windows marketplace, Google App Engine & Chrome App store reaches millions of user’s everyday.

November 29, 2010

The important of the Web browser


I could estimate that 90 percent of everything I do on a computer is now in a web browser. Coding is the only thing I don’t do using the browser. But for an example, my wife only uses the Web browser, and she’s a typical everyday computer user.

Web browse is the mostly used program in the recent years with the internet evolution and it is the most important software program of all. Since the focus has been on to the Browser—Google has made a wise decision to release a Computer Operating System (OS) which only focuses on the web browser. Most probably you can see an early preview of their OS in next few weeks.

So it's time now to seriously think about the cloud computing. 

November 25, 2010

Get Color from Hex values in Silverlight

Since Silverlight does not support System.Drawing.ColorTranslator the following method can be used to convert Html Color values to a Color object.


public static Color GetColor(string htmlColor) {
            return Color.FromArgb(255,
                Convert.ToByte(htmlColor.Substring(1, 2), 16),
                    Convert.ToByte(htmlColor.Substring(3, 2), 16),
                    Convert.ToByte(htmlColor.Substring(5, 2), 16)
            );
        }

November 18, 2010

Anywhere, anytime on any device – documents

It was Microsoft’s vision to connect people—anywhere, anytime on any device. However after a decade of their .Net vision, people are connected to each other more than ever—primarily using Social Networks (i.e. Facebook, Twitter etc).

But this post isn’t about Social Network. It’s about taking your documents online or to the cloud, where you can access them from anywhere, anytime on any device. This is the first in a series of posts on how to take your personal computer to the cloud, such as photos, videos, projects, emails etc.

Generally I use four computing devices;
  • Office PC
  • Home PC
  • Personal Notebook
  • Mobile (iPhone)
I write articles, books and business proposals and sometimes I have to work on them regardless of where I am. For example, I could write an article at home and would like to proof read it while I’m travelling. So I use the following setup (please refer to the following diagram) within my four computing devices. More importantly I’m completely independent from those devices, which means I have access to any of my documents from anywhere.


Steps to setup your devices; 
  • Download and install Dropbox(http://www.dropbox.com) in your Home, Office and Personal computers. Also download Dropbox for iPhone.
  • Download and install OffiSync (http://www.offisync.com) in your Home, Office and Personal computers. 
  • Register for Google account (if you don’t have any), this is to use Google docs for your documents. 
  • Create document repository in DropBox’s Private folder—this is where you save your documents.
Let’s create a document and access it from anywhere.
  • Create MS word document and enter some text. 
  • Save the document in DropBox’s Private folder. 
  • Also save the same document to Google docs using OffiSync MS Word plug-in.
  • Now change your computers and browse the relevant folders and your document has been synced with all the computers (Office, Home and Personal).
  • Open Google docs in your iPhone and you can now edit the same document while you are travelling. 
  • More importantly you can access the same document from anywhere—you only required a computer with Internet access. 
I still DO NOT save documents which contains Bank details or Passwords using this method. So I suggest you should do the same. 

Hope this helps and stay tuned for the next post— Anywhere, anytime and on any device – Photos.

November 17, 2010

Using Predicate to filter NSMutableArray

To filter NSMutableArray you could use Predicates in Objective-C. This will returns a new array which matches to the given predicate.


NSMutableArray *list =
    [NSMutableArray arrayWithObjects:@"Mark", @"Balmer", @"Bill", @"Steve", nil];
NSPredicate *listBPredicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] 'b'"];
NSArray *namesBeginB = [list filteredArrayUsingPredicate:listBPredicate];

NSPredicate *listContainsPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'e'"];

NSArray *namesWithE = [list filterArrayUsingPredicate:listContainsPredicate];

listBPredicate will return names which starts in "b" and listContainsPredicate will return all the names which has letter "e".

November 15, 2010

How to save User preferences in iPhone app

Saving user preferences in iPhone app is fairly easy. It work as key/value pairs in NSUserDefaults object.


To save whether user prefers sounds on or off in your application you can do it as the following code block.

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"soundsOn"];

And to retrieve the sounds preferences value;


BOOL soundsOn = [[NSUserDefaults standardUserDefaults] boolForKey:@"soundsOn"];

October 30, 2010

iPhone keeps vibrating and no response

My iPhone suddenly started vibrating for no reason and screen was shut down.

Solution:
Press and hold Lock and Home key for few seconds to reset.

Reason:
I have no idea why this happend.

October 27, 2010

Gmail like User message control in ASP.NET

(Cross-posted on the Extensible-web)


MessageControl is an ASP.NET control which let you create user message like Gmail Application.



This control is part of the XWT toolkit. Please download and read the MessageControl.

Also read the  Code Project article about MessageControl at the following location.

October 22, 2010

October 20, 2010

jQuery 1.4.3 released

(Cross-posted on the Extensible-web)

jQuery 1.4.3 final version is released. There are some significant enhancement has been done for the entire library, mainly in the performance. Following are some of the new features of jQuery 1.4.3
  • CSS Module Rewrite – Entire CSS Module has been re-written for extensibilit. You can write custom CSS plug-in now to extend the .css() and .animate() functions.
  • Data – There are some enhancement on this area as well. HTML 5 data-attributes, JavaScript object and Events are included in those enhancements.
  • Traversing - The performance of nearly all the major traversal methods has been drastically improved. For example .closest(), .filter() (and as a result, .is()), and .find() have all been greatly improved.
  • Ajax - A few new Ajax features have added. This should be advantage for plugin authors.
  • Events - A convenient shortcut for binding a function that does nothing but return false (preventing the default action and stopping the event bubbling).
  • Effects - All animate methods now support easing. A new property that exposes the rate at which all effects fire (in milliseconds – defaults to 13) also added.
There are much more enhancements for the new jQuery library. You can read in more detail from the following URL.

October 15, 2010

Extensible-Web Toolkit(XWT) RC1 released

Extensible-Web Toolkit(XWT) RC1 released. The toolkit provides simple web controls, framework library for ASP.NET development and built-in integration for jQuery. It will also provide some useful utilities for Web Application developers.

How to create Chrome Notifications

(Cross-posted on the Extensible-web)

Chrome supports Webkitnotifications and Google has done a great job with their notifications for Gmail. This example shoes how to create a recurring notification using JavaScript timer and webkitnotification object.




In order to create a notification the user must first allow notification in their browser. Click on “Allow notification” button in the ASP.NET sample and the permission will be granted.

Following code block will show you how simple is to create a notification object and show it on browser.

notify = window.webkitNotifications.createNotification('iconUrl', 'Extensible-web latest article', 'http://www.extensible-web.com');
notify.show();


Download the full source code.

September 29, 2010

SEO Starter Guide

It's been a while since I haven't posted anything useful. So here is a very good one for Web masters and developers.
Download the Google's SEO guide here

July 27, 2010

How to downgrade VS Solution

To downgrade a Visual Studio solution, follow the steps below.

1. First backup the .sln file
2. Open .sln file in Notepad
3. Modify the Format Version and the Visual Studio edition (i.e. 2008 or 2005) as shown in the following screen capture.

4. Save and close. 



July 25, 2010

Read Sri Lanka news using this Chrome extension

I just created a Chrome Extension to read Sri Lanka news quickly. Please download and install. Its a very simple extension and I've reused some of the sample code. I will update the extension to be more useful in the future--all your comments are welcome.

Get the extension from here:
https://chrome.google.com/extensions/detail/dipjohabhjlfockkahobnnppadhfibah?hl=en

July 15, 2010

DataReader vs DataSet

I've been quite frequently asked by the junior developers about the DataReader and DataSets -- so here it is.

Use DataReader For read-only data. For example, to bind custom object collection the ideal option is the DataReader. It is much faster than the DataSet.

Use DataSet to work on disconnected data. For example, to perform CRUD operations in disconnect like mode use DataSets.

I have written a performance test app for DataReader and DataSet. Download the code. Also I have written/discussed about the DataSets and Custom Collections half decade ago--http://www.ludmal.net/2005/05/datasets-vs-collections.html

Also download the Microsoft Application Architecture Guide.
http://apparchguide.codeplex.com/

Handling keypress event using jQuery

(Cross-posted from the Extensible-web.com blog)
Handling keypress event using jQuery is fairly easy. Download the sample code.

July 13, 2010

missing sentinel in function call

Quick Tip :
If you're getting "missing sentinel in function call" error while compiling objective-c code, check whether you terminate the array with nil at the end of the array declaration.


feelings = [[NSArray alloc]initWithObjects: @"awesome",@"sad", @"happy","confused",@"angry", nil];

July 6, 2010

Using JQuery in your ASP.NET application.

(Cross-posted from the Extensible-web.com blog)

What is JQuery ?
Most of the developers might already know what JQuery is. But for those who don’t, here it is. JQuery is a JavaScript lightweight library which is easy to use for JavaScript functions.

JQuery is very easy to learn and all you need to know its relevant methods and events. You can find the JQyery API reference here and you can also find some samples.

How can we use JQuery in ASP.NET application?
Real easy—if you’re creating ASP.NET app using Visual Studio 2010, then the relevant script files are already included.

For earlier versions of Visual Studio, you need to download the minified version of JQuery library from here and add the file to your project directory. Include the file as script tags in the pages, which requires JQuery.

July 1, 2010

Extensible Web - New Blog for Faster Web Apps

Finally I decided to create a new blog for tools, tips and tutorials about web application performance and optimizing. Hopefully this blog will help web developers and web masters to fine tune and optimize their web applications.

Extensible Web

P.S. I will be cross posting the Extensible Web posts with this blog.


May 19, 2010

GWT & Script#

I recently worked on a Google GWT project and very impressed with it. One of the difficult task in web development is to work on browser quirks. GWT is completely eliminating that by compiling java code to javascript. It also supports ajax server communication using RPC, JSON & XML. Microsoft's Nikhil Kothari also working on a similar project called Script# for asp.net.

April 28, 2010

ASP.NET 4 - New Features

I've been working with ASP.NET for 9 years now and still there are plenty to explore. Apart from my day to day (boring)coding, my focus has been into faster and SEO friendly web development and worked with jquery/json lately.

Microsoft has released their latest version of ASP.NET 4 and obviously the focus also into faster and SEO friendly web. I have collected all the important new features and compiled into a simple article which was published on Simple-Talk. Have a look at it and send me your comments.

I'm working on a small booklet with comprehensive instructions to speed up your web applications and also developing a simple web toolkit which will help developers to easily integrate jQuery into their ASP.NET web applications. Both of them will be released soon, so stay tuned.

April 14, 2010

Create your own story

Create your own story with Google Search. http://www.youtube.com/user/SearchStories

March 15, 2010

New Google Logo ?

New Google Search page from Gmail - Click on the "Search Web" Button


March 11, 2010

Is Google too powerful ?

How we eat, dress and work determines our quality of life. Similarly, how we use internet too will determine our behavior and the quality of life. Internet can be considered as a third generation utility—considering 1st Gen is Air/Fire/Water and 2nd Gen is Electricity. Living without Internet is almost inevitable. At least 80% of the internet users are using Google search. This ultimately gave them massive amount of valuable data. What do they do with it—Google is analyzing the entire world. They want to know everything about us.

This can be too much power to a singular source—Google. They were able to generate reports in minutes if not in hours almost on any activity in the world. . For example have look at this flu trend worldwide. I spent 2/3 of my time on internet, and Google can easily generate a report on my behavior for the past 7-8 years—in-fact they can say which time period I’ve been most productive and vice versa. However, analyzing a single person’s behavior could be less important to them when they can analyze data for a entire country.

Is Google too powerful ?

March 10, 2010

The Fine Line

Recently I’ve been thinking about the purpose of life and read some books from Dr.Deepak Chopra. I might be too young to evaluate the process of life but for the past 30 years I have gained an immense amount of experience. I’m a quick learner in nature, and I guess that helped me to judge and evaluate the life at least to some extent.

Most of us look at our past sheepishly. But it is never too late to identify, correct and move on. Life is a process—we should optimize the process as we move on. I’ve been analyzing my own activity in the past, positive or negative is secondary however. So I came up with the following diagram. A person’s activity is directly proportional to the outcome, regardless of its negative or positive behavior. For example more active people get frequent outcomes in life, and less active people get less outcomes. But we all need to find the fine line, although it’s arguable in some cases. These ideas are not representing any religion believes or teachings. It is merely an effort to understand the process of life and to optimize it so that we all can live it to the fullest.

For people who think this is irrelevant or just a waste of time—please ignore, but for others please find the following references. What is exciting in life if you do not explore.

Reference:

The seven spiritual laws of success

Life After death: the burden of proof.

Quantum healing: exploring the frontiers of mind/body medicine

Buddha: A story of enlightenment.

February 18, 2010

Google Buzz

I've been using Google Buzz quite frequently and I'm very impressed with it. Since I'm a big fan of Gmail, integrating buzz with Gmail is a smart move from Google. Follow me on Google Buzz if you're interested.

February 10, 2010

Why Unrealistic Goals are better than Realistic Goals?

It is first quarter of the year and goal setting is imminent for most of us. Most people tend to set the possible and realistic goals for the whole year. Why not setting Unrealistic goals quarterly—sounds impossible?

The importance of goal setting is always considered as a successful strategy for personal development. Accomplishments of goals are arguable and should discuss in separate thread however. This is a merely an effort to illustrate which is more important—Realistic Goals or Unrealistic Goals. Realistic goals settings can be seen as a major culprit to unleash your ability. Even though it is viable for some cases but for most cases it can be a killer of your ability or capability. How many times we have achieved something which we never thought of possible—there are plenty of examples for me personally. We must stretch, expand or broaden our ability to accomplish things. The only way to do is to set unrealistic goals. Achieving 70% of the unrealistic/impossible goals are far better than achieving 100% of the realistic goals. Moreover setting goals for a shorter period of time seems to be more efficient than a longer period. There is a high probability of forgetting or ignoring goals which are set for longer period of time. More importantly we should expect amazing results by achieving goals and not just “results”. Also, don’t forget to reward yourself once you achieve a certain goal.

We are only limited by our thoughts—by keeping this in mind start your own goal setting now, but make it unrealistic/impossible and for short period of time.

January 27, 2010

Dictionary - Google extensions

I found this Google extension very useful – Google Dictionary

Update your Google chrome to get extensions and bookmark sync.

In addition to blogging, I've been also using twitter for quick technology updates. Follow me if you are interested. www.twitter.com/ludmal

January 26, 2010

Windows 7

I've been using Windows 2003 quite happily for the past 6 years. But realized it was 7 years old OS and the technology has developed immensely. Despite the terrible experience with Windows Vista I finally decided to install Windows 7. It has been one month after Windows 7 installation and I'm very impressed – the startup/loading time has improved significantly and smoothness of the applications is amazing.

This is what I was expected from an OS. Most of us were desperately waited for an OS to replace Windows XP/2003 – Microsoft’s Windows 7 must be the choice for them. Needless to say I’m upgrading my wife’s laptop and my desktop PC to Windows 7. For those who are still waiting to install Windows 7 – Don’t wait anymore!

January 19, 2010

Power of Intention

Intention – an anticipated outcome that is intended or that guides your planned actions. This is the general meaning of the Intention. But for most of us intention is just another word. While we live a mediocre life we tend to forget what is the actual meaning of Intent or Intention. We are limited by our thoughts and our intentions.

Intention is all around us, it is just like gravity. Thanks to Sir Isaac Newton we know that the gravity exists, but what about Intention – the following example will give you a simple idea about the intention.

Have you ever tried to recall a name or place? The harder you try to recall the name the farther it goes away. Once you give up the try and after some time just out of the blue you will remember the name or the place you tried to recall earlier; that is the power of intension. We need use the intention to fulfill our desires. To see the power of intention try to do the following exercise.

Write down a specific goal you want to achieve, and then carry that paper with you all the time. Read it at least three to four times a day, especially before Meditation or Prayer. Also read it as soon as you wake up in the morning. When you pray or meditate you create intentions – nevertheless the power of Meditation and Prayer has to be discussed in a separate post. By reading your goal frequently, you create an intention. And another powerful yet very difficult thing to do is to relinquish your attachment to the outcome. What does this means – you intent to achieve a certain goal, but you release your attachment to the outcome. Just like the name or place recalling example, let the universe handle your intention; therefore don’t worry about the outcome. When you worry about the outcome, you create stress & anxiety. Trust the power of the universe; believe that everything in this world is as it should be.

When the time is right your intentions will be fulfilled. If it is not, then surrender to the outcome. Eventually, everything will be as it should be.

January 18, 2010

What happens if Google shut down their operations in China?

Don’t be evil – informal Google’s company motto. Despite the massive Internet user base in China Google has warned them, that they will stop all of their operations in China. What does this mean to Chinese users? No Google search, no Gmail, no Google Apps and None of the other Google applications. It is like “No Internet” for me at all . At least 90% of my Internet time I spend on Google products. I use Gmail, Google Reader, Google docs, Google Apps, Google Analytics and Google News to name few. So without Google I have nothing to do on the Internet except following my friends on Facebook.

Google as a company evolved immensely in a very short period of time. Their products are very useful and neat. I personally benefits enormously from their products and it is true for most of the Internet users worldwide. China will surely have a considerable impact on their economic growth if Google decided to stop their operations. As an emerging nation China should not be isolated from the rest of the world (Internet World). For me personally, I can't imagine Internet without Google.

Read more

http://www.reuters.com/article/idUSTRE60G0K620100117

January 7, 2010

Kevin Skinner

It’s amazing how people achieve their dreams with determination. This guy really amazed me and I’m sure he does the same to everyone else. What others think about you is none of your business. Kevin Skinner – Winner of America’s Got Talent.

Microsoft Ajax and Jquery

Microsoft Ajax framework is the best choice for me when I build quick web applications, particularly for intranets. But for public web sites, especially when you want to make the site super fast, then the MS Ajax is not the wisest choice. Recently, I decide to use Jquery instead of MS Ajax for one of my personal web sites. And the website shows a significant performance improvement.

Following is the outcome of my research on the response time and the downloaded data size by using MS Ajax and Jquery. By using Jquery I was able to reduce the size by 50% of the downloaded data. Have a look at the following screen captures. I used Firefox’s firebug for the analysis.

Response with Microsoft Ajax

msajax_response1

Response with Jquery

jquery_response1

Please visit for more reference - http://docs.jquery.com/Ajax

Hope this helps!

www.twitter.com/ludmal – Follow me on twitter for quick updates on technology, life and much more

Post a comment