Wednesday 27 June 2012

Hadoop Hangover: Introduction To Apache Bigtop and Installing Hive, HBase and Pig

In the previous post we learnt how easy it was to install Hadoop with Apache Bigtop!
We know its not just Hadoop and there are sub-projects around the table! So, lets have a look at how to install Hive, Hbase and Pig in this post.


Before rowing your boat...
Please follow the previous post and get ready with Hadoop installed!
Follow the link for previous post:
http://femgeekz.blogspot.in/2012/06/hadoop-hangover-introduction-to-apache.html
also, the same can be found at DZone, developer site: http://www.dzone.com/links/hadoop_hangover_introduction_to_apache_bigtop_and.html


All Set?? Great! Head On..
Make sure all the services of Hadoop are running. Namely, JobTracker, SecondaryNameNode, TaskTracker, DataNode and NameNode. [standalone mode]


Hive with Bigtop:
The steps here are almost the same as Installing Hive as a separate project.
However, few steps are reduced.
The Hadoop installed in the previous post is Release 1.0.1


We had installed Hadoop with the following command
sudo apt-get install hadoop\*
Step 1: Installing Hive
We have installed Bigtop 0.3.0, and so issuing the following command installs all the hive components.
ie. hive, hive-metastore, hive-server. The daemons names are different in Bigtop 0.3.0.
sudo apt-get install hive\*
This installs all the hive components. After installing, the scripts must be able to create /tmp and /usr/hive/warehouseand HDFS doesn't allow these to be created while installing as it is unaware of the path to Java. So, create the directories if not created and grant the execute permissions.
In the hadoop directory, ie. /usr/lib/hadoop/
bin/hadoop fs -mkdir /tmp
bin/hadoop fs -mkdir /user/hive/warehouse

bin/hadoop -chmod g+x /tmp
bin/hadoop -chmod g+x /user/hive/warehouse



Step 2: The alternative directories could be/var/run/hiveand/var/lock/subsys
sudo mkdir /var/run/hive
sudo mkdir /var/lock/subsys



Step 3: Start the hive server, a daemon
sudo /etc/init.d/hive-server start
Image:
start hive-server






Step 4: Running Hive
Go-to the directory /usr/lib/hive.
See the Image below:
bin/hive
bin/hive
















Step 5: Operations on Hive
Image: 
Basic hive operations






HBase with Bigtop:
Installing Hbase is similar to Hive.


Step 1: Installing HBase
sudo apt-get install hbase\*
Image: 
hbase-0.92.0




Step 2: Starting HMaster
sudo service hbase-master start
Image: 
Starting HMaster


Image: 
jps (HMaster started)




Step 3: Starting HBase shell
hbase shell
Image: 
start HBase shell




Step 4: HBase Operations
Image: 
HBase table operations


Image: 
list,scan,get,describe In HBase




Pig with Bigtop:
Installing Pig is similar too.


Step 1: Installing Pig
sudo apt-get install pig
Image: 
Installing Pig




Step 2: Moving a file to HDFS
Image: 
Moving a tab separated file "book.csv" to HDFS




Step 3: Installed Pig-0.9.2
Image: 
Pig installed Pig-0.9.2




Step 4: Starting the grunt shell
pig
Image: 
Starting Pig




Step 5: Pig Basic Operations
Image:
Basic Pig Operations


Image:
Job Completion




We saw that is it possible to install the subprojects and work with Hadoop, with no issues.
Apache Bigtop has its own spark! :)
There is a release coming BIGTOP-0.4.0 which is supposedly to fix the following issues:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12318889&styleName=Html&projectId=12311420
Source and binary files:
http://people.apache.org/~rvs/bigtop-0.4.0-incubating-RC0
Maven staging repo:
https://repository.apache.org/content/repositories/orgapachebigtop-279
Bigtop's KEYS file containing PGP keys we use to sign the release:
http://svn.apache.org/repos/asf/incubator/bigtop/dist/KEYS


Let us see how to install other sub-projects in the coming posts!
Until then, Happy Learning!! :):)

Friday 22 June 2012

Hadoop Hangover : Introduction To Apache Bigtop and Playing With It (Installing Hadoop)!

Ah!! The name is everywhere, carried with the wind. Apache Hadoop!!
The BIG DATA crunching platform!
We all know how alien it can be at start too! Phew!! :o

Its my personal experience, nearly 11 months before, I was trying to install HBase, I faced few issues! The problem was version compatibility. Ex: "HBase some x.version" with "Hadoop some y.version".
This is a real issue because you will never know which package of what version blends well with the other, unless, someone has tested it. This testing again depends on the environment where they have set up and could be another issue.
There was a pressing demand for the management of distributions and then comes an open source project which attempts to create a fully integrated and tested Big Data management distribution, "Apache Bigtop".

Goals of Apache Bigtop:
-Packaging
-Deployment
-Integration Testing
of all the sub-projects of Hadoop. This project aims at system as a whole, than the individual project.

I love the way Doug Cutting quoted in the Keynote, back then, wherein he expressed the similarity between Hadoop and Linux kernel,and the corresponding similarity between the big stack of Hadoop ( Hive, Hbase, Pig, Avro, etc.) and the fully operational operating systems with its distributions (RedHat, Ubuntu, Fedora, Debian etc.). This is an awesome analogy! :)

Life is made easy with Bigtop:
Bigtop Hadoop distribution artifacts won't make you feel that you live in an alien world! After installing, you will get a chance to blend a Hadoop cluster in any mode, with the sub-projects of it. Its all for you to garnish next! :)

Setup Of Bigtop and Installing Hadoop:
It's time to welcome all your packages home. [I also mean /home/..]  ;)
I've tested on Ubuntu 11.04 and here goes a quick and easy installation process.

Step 1: Installing the GNU Privacy Guard key, a key management system to access all public key directories.
wget -O- http://www.apache.org/dist/incubator/bigtop/bigtop-0.3.0-incubating/repos/GPG-KEY-bigtop | sudo apt-key add -

Step 3: Updating the apt cache
sudo apt-get update

Step 4: Checking in the artifacts
sudo apt-cache search hadoop
Image: 
Search in the apt cache

Step 5: Set your JAVA_HOME
export JAVA_HOME=path_to_your_Java
export $JAVA_HOME in  ~/.bashrc

Step 6: Installing the complete Hadoop stack
sudo apt-get install hadoop\*
Image: (above)

Running Hadoop:

Step 1: Formatting the namendoe
sudo -u hdfs hadoop namenode -format
Image : 
Formatting the namenode



Step 2: Starting the Namenode, Datanode, Jobtracker, Tasktracker of Hadoop
for i in hadoop-namenode hadoop-datanode hadoop-jobtracker hadoop-tasktracker ; do sudo service $i start ; done
Now, the cluster is up and running.
Image :
Start all the services


Step 3: Creating a new directory in hdfs
sudo -u hdfs hadoop fs -mkdir /user/bigtop
bigtop is the directory name in the user $USER
sudo -u hdfs hadoop fs -chown $USER /user/bigtop
Image :
Create a directory in HDFS


Step 4: List the directories in file system
hadoop fs -lsr /
Image :
HDFS directories


Step 5: Running a sample pi example
hadoop jar /usr/lib/hadoop/hadoop-examples.jar pi 10 1000
Image :
Running a sample program

Job Completed!


Enjoy with your cluster! :)
We shall see what more blending could be done with Hadoop (with Hive, Hbase, etc.) in the next post!
Until then, 
Happy Learning!! :):)

Monday 18 June 2012

Start Darting...(Contd.)

Back again! :)
The first part of "Start Darting" is at the following link:
http://www.dzone.com/links/start_darting_.html (or)
http://femgeekz.blogspot.in/2012/06/start-darting.html

Well, to start afresh and get started, no place is as great as http://www.dartlang.org/docs/editor/getting-started/
The steps given below are more detailed in the aforementioned link. Please do go through them. :)
Step 1: Download the dart editor. Its nearly 110MB .zip file, available for Windows, Linux and Mac.
Step 2: Launch the editor by double clicking the executable.
Step 3: Running a dart code.
We saw in the previous post a Hello World sample. The same sample can be run.
If your code has web app, it will launch it in Dartium (Chromium with the Dart VM).

  • New Features about Dart:
      • Snapshots: Modern browsers need to parse a web app’s source code before that app can run. Snapshots here mean that the state and the code is recorded at certain point of time, which will increase the speed at startup.
      • Isolates: These are the processes without any overhead. Each isolate has its own memory and code, which can’t be affected by any other isolate. The only way an isolate can communicate with another isolate is by way of messages. Isolates allow a single app to use multi-core computers effectively. Another use for isolates is running code from different origins in the same page, without compromising security.
      • Interfaces with default implementations: Dart interface can have a default implementation—a class (usually private) that is the default way to create objects that implement the interface.
      • Easy Generics: Dart takes a new approach by designing a generics system that’s more understandable.
      • Optional typing: Its optional to use type in Dart and it won't change the way your app executes, but they can help developers and programming tools to understand your code. You might not bother with types while you’re developing a prototype, but you might add types when you’re ready to commit to an implementation. An emerging pattern is to add types to interfaces and method signatures,and omit types inside methods.
      • HTML library: We also took a fresh look at how you should use the HTML DOM. DOM is short for Document Object Model; it’s the interface that lets you pro-grammatically update the content, structure, and style of a web page.) By creating a native Dart library (dart:html) to access and manipulate the DOM. There are elements, attributes, and nodes to work with.
Un-boxing Dart:
Dart is more of a platform than a language. It has

    • Libraries: The core libraries are like math, server side, I/O, JSON.
    • Virtual Machine: Dart Virtual Machine is used, being run on the browsers as embedded or on the command line.
    • Compiler to java script: The Frog compiler is used to compile the Dart code to java script.
    • Language Specifications: The language looks very familiar like Java or java script because Google wanted mass adoption of the language. If it was a standing new language, only few people would have adopted it. Since, it looks very familiar, people feel comfortable with the optional typing and also isolates.
    • Dart Editor: Its an editor that helps to build complete end to end app. It helps with syntax highlighting, auto completion and running the code.
  • Compiling dart code to java script:
    • The Frog Compiler which come with the SDK, compiles a given Dart code to java script, this could be on the client side. A future version of Chrome will ship with an embedded Dart VM, allowing your Dart code to run directly in Chrome without first being compiled to Java Script.
  • Libraries to play with:
    • dart:core This is the basic library used in majority of the scripts.
        • print() -> display basic text
        • Collection, Set, List, Queue -> group objects in collections
        • Map -> manipulate key-value pairs
        • Date, TimeZone, Duration, Stopwatch -> specify dates and times
        • String, Pattern, RegExp -> use strings
        • num, int, double, Math -> use numbers
        • Future -> return a value before your operation is complete
        • Comparable -> compare similar objects
        • Iterable -> perform an operation on each item in a multi-item object
    • dart:io This library is used on the server side to connect with the outside world.
        • InputStream and OutputStream : Reading and writing data
        • Files and directories : Open and close files
        • Sockets: Connection to the network
    • dart:html: API's for producing UI for webapps.
        • Document and window: get global objects
        • Element query and queryAll: find HTML elements
        • Elements On property: add or remove events
        • Collection Interfaces to operate on group of objects
There exists many more libraries and all you can see when you download the editor and play with it.
Happy Learning! :)

Friday 15 June 2012

Start Darting ...

Well, before Starting to Dart.. I wanna say few words.. :)
" Its really encouraging to see the audience and the amount of traffic here, in the pre-init phase of my new just born blog! :)
Awesome...!!! :):)
It really amazes, urges, kindles me to read, experiment and write, more and more and more. I wanna thank you all for the same " :)


On Pitch....!! ;)

It was at the GOTO Conference, (International Software Development Conference) 2011 @Aarhus, something unusual was revealed!
It was Dart (or Dash), a web based programming and the catch is "Its a replacement to Java script", by Google !!


Programming languages are hot spicy topics for debate. ;)
Why dump Java script and move on with a new platform? What are its demerits?
" ... Writing a web app can be lots of fun, especially at the beginning when you experience
instant gratification: code, reload, repeat.
Unfortunately, finishing and maintaining a web app are not so fun. Java Script is great
for small scripts, and it has the performance chops to run large apps. But when a script
evolves into a large web app, debugging and modifying that app can be a nightmare,
especially when you have a large team ...
instant gratification: code, reload, repeat.Unfortunately, finishing and maintaining a web app are not so fun. Java Script is greatfor small scripts, and it has the performance chops to run large apps. But when a scriptevolves into a large web app, debugging and modifying that app can be a nightmare,especially when you have a large team ... "
 says a member of Google’s Developer Relations Team!
To be really frank here, this is the memo leaked from the employee of Google, for a pressing need of dart and replacement of Java Script.
Here, it goes:
http://markmail.org/message/uro3jtoitlmq6x7t
The memo goes into some detail on what Dart would be, but doesn't go into much detail on why Dart should be. In other words, it doesn't explicitly state the deficiencies in Java Script.
Need a reason for "The Need" ?

  • Well, to recollect,


- Google with its V8 engine
- Apple with its Nitro engine
- Microsoft with its Chakra
- Mozilla with its Monkeys { No Offense ;) } etc.


 have really struggled a lot to make serious improvements in Java Script execution. So, the order of magnitude is high in the modern browsers with the technique being used is JIT (Just In Time) compilation instead of interpretation. But, its really very challenging to write a high performance scripting engine specially one for java script like this and for all the effort and resources that's put in, the yield from java script is not up to the brim. Call it not "NEED FOR SPEED/ PERFORMANCE" ? (Dart Game.. Not a Car Game) ;)
  • Java script, being a prototype based language is like a boon and a bane! If the engine developers or the users do not want to follow prototypes, then java script should be no where around.
  • Java script has features too and the problem that is conceived while importing third party libraries and the conflicts that occurs, the variable scopes is mind boggling. Java script, sometimes I feel has no good features, speaking accordingly to features. ;)
  • Java script and its holy dynamic typing, has disadvantages too. Just, think of a situation where in the errors that are not detected at compile time, but soon in the browser, as the browser engine is left astray, pops up on the user interface! Ah, man!! This is not a pleasurable experience at all! So, its better to know the pre defined types, it also helps in faster code generation. As, the saying goes.. " It's better to be safe, than to be sorry! " :)
No hard feelings.. Java script has its own community of die hard fans.. when people say, Java script cannot do on the server side, they came up with node.js. So on...
It has all the zeal to do anything and everything, but we must wonder at the cost of what!! :)


Play Darts:
Okay! Have you played Darts??
Let's Start Darting :) It's very similar to the game. (at least with terms) ;)
=> Wanna Say "Hello! Darts" ??
Nice, Goto: http://try.dartlang.org/ , and your code should look like this


// Welcome to try.dartlang.org
//
// Here you can try out the Dart Language from the comfort of your own
// *modern* web browser. When you run the code … it is submitted to AppEngine,
// translated into the equivalent JavaScript, and run right in your browser window.
//
// Ok, your turn!
main() {
print('Hello! Darts');
}



Now, Run the code and see in the console for your output. :)
The code looked similar to something. Feeling familiar ??
Ah!! Well, Google met its requirement :p
Yes!! Google's main intent was to make the language look very familiar like Java or java script.


What to play with ?
  • Dartboard tool which lets you write and run Dart code in your browser.
  • Dart Editor which lets you create,modify, and run Dart apps.
  • SDK contains command-line tools such as a Dart-to-Java Script compiler (which produces Java Script that you can put in any modern browser) and 
  • Dart Virtual Machine (the VM, which lets you run Dart code on servers)
  • The latest tool to become available is a build of the Chromium browser, nicknamed Dartium, that contains a built-in Dart VM.
Well, lots more in store...
Next blog post...
  • New things in Dart
  • Un boxing of Dart
  • Sample codes, libraries, running java script from dart
  • References and where to learn more and more?
Until then,
Happy Learning! :)

Friday 8 June 2012

Women & Tech World ...



Social revolutions rarely are, especially when you're a woman trying to break into the boys' club that is "TECH WORLD".
I have been through stages from being a mundane person to a wannabe and a newbie, learning and very jealous to know more... and I will love to be in this newbie phase forever :)
In the course, Yeah !! I have felt that it is male dominated world. No doubt!

But, we have to dispel the notion aforementioned and move ahead. The emergence of young female tech founders and executives reflects sweeping change in the worlds of start-up companies and angel funding, where wealthy investors give money in return for a stake in a company. Also, if we observe deeply, we are the heroines! :)
TELL ME WHY ?? ;)
Imagine, the Internet based companies, e-commerce based companies! Don't you notice that they are like ever-super-fast-growing and 24*7 engaged??
Yes, they are! :):)
It underscores the enormous purchasing prowess of women on-line that is transforming the Web economy. As more consumers reach for their smart phones and tablets to shop and communicate, there is a pressing need for commerce sites that cater to women, who control majority of on-line purchases worldwide.
So, I say we are the unsung heroines ;)
Cheers !! :):)

On this positive note, head on... :)
If you are thinking to be an entrepreneur, you can always be one!
Before, it was very difficult for a female entrepreneur to start the company, as funding was equally a formidable task.
Of late, its a thrilling and bumpy ride for female entrepreneurs in tech.
It's cheaper to start a company today because Web servers and other equipment cost hundreds of thousands of dollars, not the millions once required for high-end computer servers. Newer technologies, such as cloud computing, reduce infrastructure costs. And coding isn't as onerous as it once was. Those changes have allowed entrepreneurs to build products faster and land funding sooner.

We, can notice the influx of female entrepreneurs in this tech world. Its really awesome to be a women in tech and keeping very busy!
There are large number of female led groups whom you can really rely upon for the guidelines and also, there are superwomen in this field :):)
Its good to follow them!

But it is a long journey, and there are many stages to that journey and a lot to juggle with, to be SUCCESSFUL. :)
I hope this post will be an inspiring note :)
All The Very Best! :)

Wednesday 6 June 2012

Getting Started With ANTLR:Basics


Yeah! It's after a lapse of a month or so that there is a post in this blog! :)
Well, this post drives you towards the basics of ANTLR. Previously, we had learnt about setting up of ANTLR as an external tool.
RECAP! It's here:   ANTLR External Tool
:)
So, here we go....  
  
What is ANTLR?• ANother Tool for Language Recognition, is a language tool that provides a framework for constructing recognizers, interpreters, compilers, and translators from grammatical descriptions containing actions.  
What can be the target languages?    
• Action Script, Ada  
• C
• C#; C#2
• C#3
• D
• Emacs ELisp
• Objective C
• Java
• Java Script
• Python
• Ruby
• Perl6
• Perl
• PHP
• Oberon
• Scala
  
What does ANTLR support?• Tree construction
• Error recovery
• Error handling
• Tree walking
• Translation
  
What environment does it support?  
ANTLRWorks is the IDE for ANTLR. It is the graphical grammar editor and debugger, written by Jean Bovet using Swing.

What for ANTLR can be used?  
• ""REAL"" programming languages  
• domain-specific languages [DSL]
  
Who is using ANTLR?
• Programming languages :Boo, Groovy, Mantra, Nemerle, XRuby etc.  
• Other Tools: HIbernate, Intellij IDEA, Jazillian, JBoss Rules, Keynote(Apple), WebLogic(Oracle) etc.
  
Where is that you can look for ANTLR? 
You  can always follow here http://www.antlr.org • to download ANTLR and ANTLRWorks, which are free and open source
• docs,articles,wiki,mailing list,examples....
 You can catch everything here!

Row your Boat....

  • Basic terms
Lexer : converts a stream of characters to a stream of tokens.
Parser : processes of tokens, possibly creating AST
Abstract Syntax Tree(AST): an intermediate tree representation of the parsed input that is simpler to process than the stream of tokens. It can as well be processed multiple times.
Tree Parser: It processes an AST
String Template: a library that supports using templates with placeholders for outputting text   



  • General Steps
• Write Grammar in one or more files
• Write string templates[optional]
• Debug your grammar with ANTLRWorks
• Generate classes from grammar
• Write an application that uses generated classes
• Feed the application text that conforms to the grammar


A Bit Further....

Lets write a simple grammar which consists of
• Lexer
• Parser
Lexer: Breaks the input stream into tokens
Lets take the example of simple declaration type in C of the form "int a,b;" or "int a;" and same with float.
As we see we can write lexer as follows:


//TestLexer.g
grammar TestLexer;                                                                                                                                         

ID  : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'.'|'a'..'z'|'A'..'Z')*;                                                                                           COMMA: ',';                                                                                                                                
SEMICOLON:';';                                                                                                                            
DATATYPE: 'int' | 'float';



As we could see, these were the characters that were to be converted to tokens.   
So, now lets write some rules which processes these tokens generated and may it create a parse tree accordingly.



//TestParser.g
grammar TestParser;
options {language : Java;}
decl:DATATYPE ID (',' ID)* ;
     


Running ANTLR on the grammar just generates the lexer and parser,TestParser and TestLexer. To actually try the grammar on some input, we
need a test rig with a main( ) method as follows:

// Test.java
import org.antlr.runtime.*;
public class Test {

public static void main(String[] args) throws Exception {

// Create an input character stream from standard in
ANTLRFileStream input = new ANTLRFileStream("input"); // give path to the file input

// Create an ExprLexer that feeds from that stream
TestLexer lexer = new TestLexer(input);
// Create a stream of tokens fed by the lexer
CommonTokenStream tokens = new CommonTokenStream(lexer);
// Create a parser that feeds off the token stream
TestParser parser = new TestParser(tokens);
// Begin parsing at rule decl
parser.decl();
}
}



We shall see how to create an AST and walk over the tree in the next blog post...
Happy learning....! :)





ANTLR as an external tool in eclipse on ubuntu

This tutorial tells how to setup the ANTLR in your eclipse.
STEP 1:
Download the jar file antlrworks-1.4.2.jar from http://www.antlr.org/download.
Further details about ANTLRWorks: The ANTLR GUI Development Environment, follow the link : http://www.antlr.org/works/index.html
STEP 2:
Create a java project in eclipse as follows:
File->New->Project
Select Java and Java project.
Click on Next.
Name the project as "TestANTLR"
Press Finish.
Add the antlrworks-1.4.2.jar to the project classpath.
Right click on "TestANTLR" project .
Select Properties->Libraries.
Click on "Add External jar"
Select the complete path of the "antlrworks-1.4.2.jar" and press Ok.
STEP 3: make it as an external tool
Goto Run->External Tools->Configure
Click on New.
Name: ANTLR Compiler
Tool Location: /usr/lib/jvm/java-6-sun-1.6.0.26/bin/java
// this must be the complete path to your java
Tool Arguments: -classpath complete_path_to_antlrworks-1.4.2.jar 

org.antlr.Tool ${resource_name}
Working Directory: ${container_loc}
Here, org.antlr.Tool is the main class which would take the ${resource_name} for processing.
${resource_name} and ${container_loc} can be selected with "Browse Variables" option too.

Going ahead :
*Creating a grammar file
Create a grammar file with .g extension. Say, Example.g

//sample code
grammar Example;
start : 'hello' ID ';' {System.out.println("hiii... "+$ID.text);} ;
ID: 'a'..'z' + ;
WS: (' ' |'\n' |'\r' )+
{$channel=HIDDEN;}


*Running the above code:
Run->External Tools->ANTLR Compiler
Press F5 or right click on the project and "refresh"
all you can see is a lexer and parser files generated with the tokens.


In our example,
ExampleLexer.java , ExampleParser.java and Example.tokens

Create Main.java program in the same project with the following code:

import org.antlr.runtime.*;
public class Main {
public static void main(String[] args) throws Exception {
// create a CharStream that reads from standard input
ANTLRInputStream input = new ANTLRInputStream(System.in);
// create a lexer that feeds off of input CharStream
ExampleLexer lexer = new ExampleLexer(input);
// create a buffer of tokens pulled from the lexer
CommonTokenStream tokens = new CommonTokenStream(lexer);
// create a parser that feeds off the tokens buffer
ExampleParser parser = new ExampleParser(tokens);
// begin parsing at rule start
parser.start();
}
}  


Set the arguments in the Run configurations and click on Apply and Run.
Now you have the output at console.
:)

Say Hello To ANDROID: [Part I] Introduction

    Its an era of mobile, tablets and a very exciting time for developers!! Mobile phones have never been more popular and powerful. Smart Phones have become very stylish, versatile packing hardware features like GPS, accelerometers, etc. are an enticing platform which kindles the developers to create some innovative mobile applications.

    With the existing mobile development built on proprietary operating systems that restrict third-party applications, Android offers an open and the best alternative. Without artificial barriers, Android developers are free to write applications that take full advantage of increasingly powerful mobile hardware. As a result, developer interest in Android devices has made their 2008 release a hugely anticipated mobile technology event.

    The open philosophy of android is most welcomed by majority of the developers as it features very powerful SDK libraries. Experienced mobile developers can now tinker with android and explore the platform, leveraging the unique features to enhance existing products or create more innovative ones.

ANDROID
    Its an open source software stack that includes
• Operating System
• Middle ware
• Key Applications + set of API Libraries
which changes the look, feel and function of the mobile.

    In Android, native and third-party applications are written using the same APIs and executed on the same run time. These APIs feature hardware access, location-based services, support for background services, map-based activities, relational databases, inter-device peer-to-peer messaging and 2D and 3D graphics.

Just A Flashback ...

    Historically, the developers had to code in low level C or C++ and had to learn the specific hardware feature upon which they were coding. But, as the hardware features enhanced this became more cumbersome. More recently, Symbian was far successful in giving a room for the developers to better leverage the hardware available. However, it required writing complex C/C++ code and making heavy use of proprietary APIs that are notoriously difficult to use. This difficulty was amplified when developing applications that must work on different hardware implementations and  particularly true when developing for a particular hardware feature like GPS.

    Then came the Java hosted MIDIlets that are executed on the same JVM, abstracting the underlying hardware and letting the developers create apps that run on wide variety of hardware that supports Java run time.

    So our Andy is here... :) Ouch! forgot about Apple's iPhone, Windows mobiles ?? ;) No offence!
    They provide richer UI, UX and simplified development environment! "BUT" they’re built on proprietary operating systems that often prioritize native applications over those created by third parties and restrict communication among applications and native phone data.

    Third-party and native Android applications are written using the same APIs and are executed on the same run time. Users can remove and replace any native application with a third-party developer alternative; even the dialer and home screens can be replaced...{ Wanna Try ?? :p }

    Google describes Android as:
"The first truly open and comprehensive platform for mobile devices, all of the software to run a mobile phone but without the proprietary obstacles that have hindered mobile innovation."
          http://googleblog.blogspot.com/2007/11/wheres-my-gphone.html   :)

    The FLASHBACK is incomplete...... without the introduction of OHA { Oh Haa ??  ;) }

OHAOpen Handset Alliance comprises of
• Developers
• Hardware Manufacturers
• Mobile Carriers

The tech companies involved prominently are Motorola, HTC, T-Mobile, Qualcomm and their words:
"A commitment to openness, a shared vision for the future, and concrete plans to make the vision a reality. To accelerate innovation in mobile and offer consumers a richer, less expensive, and better
mobile experience."
                http://www.openhandsetalliance.com/oha_faq.html :)

        Android offers an excellent enterprise platform, has targeted developers making their lives far simple with Google and the OHA betting that the way to deliver
better mobile software to consumers is by making it easier for developers to write it themselves. This openness and power ensure that anyone with the inclination can bring a vision to life at minimal cost.

       Use Open source softwares, share them and give back something better to the community..... !! :)

       Next post...
• Merits of android
• unboxing SDK features, Software stack and lots more ..... :)


      Well, http://developer.android.com is a great reference site!
                                   
                                              Happy Learning! :)