Thursday, March 24, 2011

Unit Converter App with Source Code

Note : Good news for avid learners... Here is my free training on How to Design and Develop a simple Unit Converter App.....  Enroll and enjoy... Happy learning...

http://som-itsolutions.teachable.com/

For the past few days i was in a dilemma about ethics, openness and honesty... the reason behind this was should i show the whole world the source code of my Android apps? as i don’t have a job, i thought of earning some money for my family by offering training to the people who want to learn how to develop Android apps... but then i thought that as i am using an open source platform to develop the Android App, i should show the source code to the others so that if someone really wants to learn, he can learn it from this source code... being a believer in Swami Vivekananda, i thought not to do business just by selling knowledge...if i face difficulty in feeding my family in the future, there is definitely another way to earn money, but not by selling the knowledge which i got because of the Almighty.

You can download the app from Google Play and here goes the source code of an Unit Converter App which i started developing to help some of my students...



if somebody can learn from it, i will be the happiest person...

Here is a screenshot of this app...



i have used Strategy Pattern to develop this App.

Hope this helps others.

Thursday, March 10, 2011

Unfolding the mystery...

There is an absolute ecstasy in unfolding the mystery...i know it from my own experience... when i first came to the IT industry, i used to wonder how things actually work inside... however, with experience and knowledge, these days i can decipher a fragment of code of a working system...today i know a little bit of why an OOAD system has been designed the way it is....and when this mystery gets unfolded, the joy is no less than that of a scientist’s discovery... probably this is the only reason i love software...

Wednesday, March 9, 2011

How to become a software developer without spending a penny...


This post is for all those engineering students of computer science in remote places of India who cannot afford hefty amount to buy licensed software... i faced this dilemma when i first started my software career... i would like to share my experience with you...

the best way to learn software is to use Linux. i use Ubuntu. hence i can advise on this. anyone can order an Ubuntu CD from the https://shipit.ubuntu.com/ . if someone has a braodband connection he can download Ubuntu from http://www.ubuntu.com/desktop/get-ubuntu/download. however, installing Ubuntu is not the end... one will have to install the necessary package for C/C++ developement. These packages can be installed over the internet through the Synaptic Package Manager in Ubuntu desktop menu. The package for C/C++ is the build essential package... one may like to install the eclipse IDE from the software repository... the next thing is to install the OPEN-JDK package for working using Java... Once these things are done, the basic development environment for a student is done.

However, there are still some people who are simply familiar with Windows and do not have the money to buy Visual Studio...many poor students fall in the trap of pirated version of Visual Studio... but that is unethical... right....for those students i would suggest to go for Eclipse as the IDE... For a C/C++ compiler in a Windows machine one may go for Cygwin... this is how i have configured my Windows development environment...

however, its not only the development environment a student looks for... he needs a productivity tool... here again i would like to suggest the poor students not to fall in the trap of pirated MS-Office CD...if you want an offline productivity tool, go for free OpenOffice... and if you have a broadband connection, you may opt for Google Docs...

i think for a poor student in India, the tug of war between zeal to learn and ethics always plays havoc...i hope i have thrown some lights how to quench the thirst for knowledge without compromising on ethics...

Wednesday, February 23, 2011

Meaning of education to me...

From the very beginning of my graduation day, i was in a dilemma about the meaning of education. Education, to me is an enabler, and all other means to educate people are facilitators. i was baffled by the very basic question what i will be able to do hands-on after i got a BE degree. i didn't want to become a theory-mugging Babu like so many engineering graduates in India. To me if a software engineer is not able to write good programs of a running application, there is no meaning of his education. it does not matter how much theory one churns out, the way to practice that theory should be the motto of education...

As Swami Vivekananda said, "We may talk and reason all our lives, but we shall not understand a word of truth, until we experience it ourselves. You cannot hope to make a man a surgeon by simply giving him a few books. You cannot satisfy my curiosity to see a country by showing me a map; I must have actual experience. Maps can only create curiosity in us to get more perfect knowledge. Beyond that they have no value whatever... "

i am damn sure if someone looks into the IT industry, he will find lot of middle level managers and senior managers who just can't decipher a simple programming concept... They can be termed as Babus in the IT industry.. if an automobile engineer has to call a mechanic every time his car falters, his engineering degree does not serve the basic purpose...

Here in India we give more importance to marks... A student scoring 90% might not be an effective engineer...i know there are a number of engineers who would not have become engineers had they been guaranteed jobs in other industries...i know there are few people who want others to remain in dark and make profit out of their ignorance... under any circumstances they cannot be termed as good human beings...

thats the only reason probably i have embraced open source technologies to work on my software passion... because it gives freedom... i think FOSS is more about freedom than about free of cost...however, there are some limitations in the open source technologies as well... the limitation is that one has to overcome a steep learning curve to contribute a little to the learning society... and there is no hand-holding for a new comer... so far i have just used some of the open source technologies like Ubuntu, eclipse, android... but i have not been able to contribute any thing in terms of bug fixing of an open source project... however, i try to contribute to the learning society, in whatever little form it may be, through my technical blog...

i know i am an insignificant guy to change the way education is being practiced here in India...i know its not easy to become Jonathon Livingstone Seagull...  however, i want someone influential to think the way i have thought about education....

Monday, December 27, 2010

Freeware Android Paint with source code...

Here is one of my freeware android apps called AndroidPaint.


Using the Android Paint app, one can draw geometrical shapes and free hand drawing on an Android device. In the future version i will refine the app to give the user more drawing options and more regular shapes to draw.

To start with, one will have to choose from the menu options and then draw.

The screenshot of this application is as follows:


Source Code:
https://gitlab.com/som.mukhopadhyay/AndroidPaint

There are lots of scopes to re-factor this application... for example we can introduce a singleton factory class which will be responsible for creating different shapes... i thought of making the source code available to everyone after i did these kinds of refactoring... but i have lost the momentum... it will be really nice if someone works upon these...

Tuesday, September 28, 2010

Merge Sort - for my students...

Using divide-and-conquer policy we can solve a sorting problem. The divide-and-conquer method suggests the sorting algorithm with the following structure.: if n is one, terminate; otherwise partition the collection of elements into two or more sub collections.; sort each; combine the sub collections into a single sorted collection.


It can be depicted as follows:


void Sort(a[], n)
{
    if(n>= k) { //k is global
        i = n/k;
        j = n-i;
    Let A consist of the first i elements in a[]
    Let B consists of the remaining j elements in E
    Sort(A,i);
    Sort(B,j);
    merge(A,B,a,i,j); //merge A and B into a[]
}
 else sort a[] using insertion sort.
}


In the above pseudo code, if we make k = 2, we get merge sort.

The complete source code of Merge Sort can be found here.


Analysis of Merge Sort:

From the following algorithm of Merge Sort, the run time T(n) can be deduced as follows:

void MergeSort(int a[], int low, int high)
{
int mid;
if(low(high))
{
mid = (low+high)/2; ==> Θ(1)
MergeSort(a,low,mid); ==>T(n/2)
MergeSort(a,mid+1,high);==>T(n/2)
merge(a,low,mid,high);==>Θ(n)
}
}

Therefore we can write T(n) = 2T(n/2) + Θ(n)

Comparing it with the Master theorem, we get a = 2, b  = 2 and d = 1. Hence a = bd which means it is the second condition of the Master Theorem.

Thus we get T(n) = Θ (n log n)