//ScalaClass.scala
class ScalaClass (val creater:String){
override def toString="I am ScalaClass created by "+creater
}
//CallScala.java
//This java class uses ScalaClass
public class CallScala {
public static void main(String[] args) {
ScalaClass scalaClass= new ScalaClass("Java");
System.out.println("Calling scala from java");
System.out.println(scalaClass);
}
public void pingMeFromScala(){
System.out.println("Hey scala pinged me");
}
}
//CallJava.scala
//This scala class uses the java class CallScala
object CallJava {
def main (args:Array[String]){
val callScala = new CallScala
callScala.pingMeFromScala
}
}
#Steps
1)scalac ScalaClass.scala
2)javac CallScala.java
3)scalac CallJava.scala
//Include scala-library.jar in classpath if you are usinf a scala class in java
4)java -cp /home/byju/scala-2.8.0.Beta1/lib/scala-library.jar:. CallScala
// You can use scala to run a java class
5)scala CallScala
6)scala CallJava
// You can use java to run a scala class by including scala-library.jar in classpath
7)java -cp /home/byju/scala-2.8.0.Beta1/lib/scala-library.jar:. CallJava
Sunday, March 21, 2010
Scala and Java interoperability
Sunday, February 28, 2010
Floating around the cloud for one day - CloudCamp ,Bangalore
Talking about the sessions,it was a meet-up along with Hadoop summit organised by yahoo.being a developer I have the opinion that large conference add less value to the developer than small meet-ups.Organised conferences have a pre-planned set of talks and in that they will try to pour in everything within few minutes of time.It might help to get a broad overview about some topic and will especially help business guys to get a advertisement also.Whereas small meet-ups are developer friendly and you have more freedom and time to spend and space for participation.
Talking in this context the lightning sessions which grabbed most of the morning time was mainly a waste of time for me.But I understand it from the organiser's perspective that they have no choice as to support the sponsors. It all started with the un-conferencing session were some panellists chosen from the audience answered questions from audience and based on interest for a particular topic un-conference sessions were chosen.This was special with active participation of attendees.The un-conferencing sessions were scheduled parallel to the hadoop sessions in the afternoon in three separate classrooms and there was lunch break.
There were 9 un-conference sessions altogether.Let me list down them .
1) Intro to cloud computing
2) Session on Windows azure
3) Data management in cloud
4) Business models on cloud
5) Security in cloud
6) Apache mahout session
7) Google app-engine session
8) SDLC for cloud
9) Databases in cloud
I wanted to understand hadoop and at the same time interested in some un-conferencing sessions also and I have to schedule my time effectively as they are going in parallel.Finally I decided to attend the Apache Mahout session only in un-conference as it felt something interesting for me.Apache mahout is a Machine Learning software built on top of hadoop and lucence .Although I missed some initial hadoop sessions because of this mahout session was worth attending and Robin done a good job by presenting it in more effective way.
When I moved to hadoop after the Mahout session the initial sessions were over and there were not much interesting afterwards as it was more about QA and performance tuning and one session from professor from PSG college on how they used hadoop in their research.I appreciate the collaboration from the industry and academia in this area and have the opinion that that is one of the are India have to improve upon.The event was sponsored by Yahoo and Microsoft and it is great to see the commitment of yahoo in Hadoop open source project and yahoo proved that hadoop is worth and production ready as they are already running hadoop in more than 30000 nodes as the back-end of their web application infrastructure.Bear with me if I am biased being an open source advocate,but Microsoft's participation was targeted for their advertisement rather than interest in community and they tried to utilize it very well.The final panel discussion with industry pioneers had very short and so couldn't raise to the expectation .Even though there were some good thoughts and good participation from audience.
In summary it was a great effort to boost the community around the cloud in India and Prem did a good job in organising this and Dave Nielsen as cool and jovial guy managed sessions very well.Overall it was very particular with active participation of the cloud community in India.
Tuesday, February 16, 2010
Web resources in Mathematics
1) Wikipedia mathematics portal
Of cource wikipedia is the number one source for any topic.
2) Planet maths
Planet maths is an encyclopaedia for mathematics.It has article on almost every subject and it is reviewed by members. Each topic is owned by one member and so it will be more authentic and accurate.
3)Wolfram Math world and wolfram alpha online
Math world has rich set of details about almost all the branch of mathematics. Wolfram alpha knowledge engine uses mathematica software which helps you to compute so many mathematical functions online quickly.It is a powerful tool for mathematics students and teachers.
4) MacTutor History of Mathematics archive
The MacTutor History of Mathematics archive is the largest source of information in the web about the history of mathematics and also about mathematicians.
5)cut the knot
contains interesting mathematics puzzles and introduction to mathematics topics and problems
6)Springer encyclopaedia of mathematics
Springer encyclopaedia of mathematics acts as a quick reference for mathematics topics available with an index.
7)MIT open courseware
MIT open courseware from MIT is the largest source of learning materials on any subject .
8)Math forum
The Math Forum is a leading center for mathematics and mathematics education on the Internet.It has a lot of resources and links for learning and teaching mathematics.
9)Internet encyclopedia of philosophy
Internet encyclopedia of philosophy has a section about mathematics and logic which is helpful to understand the foundations and philosophy of mathematics.
10)Prime pages
Prime pages has lot of information about prime number research an interesting field in number theory.
11)Gresham college lectures in mathematics
A lot of interesting lectures in mathematics.I found these very interesting and informative.
12)The Math Open Reference Project
A free interactive math textbook on the web. Initially covering high-school geometry.
13)visualmathlearning.com
Understanding Mathematics through Insight, Concept, and Perception
14)math-atlas.org
Introductory articles on almost all the branches of mathematics.
15)NRICH
NRICH is a team of qualified teachers who are also practitioners in RICH mathematical thinking.NRICH aims to Enrich the experience of the mathematics curriculum for all learners.
I hope these links will be useful for all mathematics lovers seeking for resources and reference in web.
Sunday, January 24, 2010
Maven Basics
Why Maven and how is it different from Ant?
Maven is a standardized project development and lifecycle management system
for java projects.The problem with Ant was that each project will follow its own way of building and packaging applications and this lack of standard or convention will be a problem when switching from one project to another or sharing the libraries among projects.So a new concept of standardizing and building some patterns for different kind of projects came up which will help people to reuse the build models and libraries among projects.The basic concept of maven are described below.
1)Standard build structure
Maven enforces a standard build structure for all the java projects.Please refer the reference link to understand the same.
Reference :
http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
2) Project Object Model or POM
Each project need to have an xml file(pom.xml) that contains information about the project and configuration details used by Maven to build the project.This should be placed in the root directory of the project.
Reference : http://maven.apache.org/guides/introduction/introduction-to-the-pom.html
3) Concept of central repository for libraries
This is useful when you have multiple projects using the same set of libraries and want
to share them.Also it makes version control and dependancy management easy.The libraries will be made vailable in central repositories online and you specify the details of the libraries as dependencies in the pom.xml.You can find the libraries from either the central repository of maven ()or from any other Maven repositories available. When we build the system the the dependant jars will be downloaded from the net and will be put into your local
repository.You can specify the location of your local repository in M2_HOME/settings.xml or it will take a default location(For windows it is My Documents/.m2 and for linux ~home/.m2). So instead of each project maintaining separate libraries the libraries will be taken from the local repostory while building.The reference links have more information about repositories.
Reference:
http://maven.apache.org/guides/introduction/introduction-to-repositories.html
http://www.mkyong.com/maven/how-to-search-the-maven-coordinates-pom-xml-dependency/
4) Maven plugins and goals
Maven accomplishes everything using plugins .Intact Maven can be considered as a plugin
execution framework.We will crate a plugin for each task you want to do with maven.Each plugin will again have a set of goals.Maven comes with a standard set of plugins and goals for common project management tasks.
For eg.
clean -Clean up after the build.
site- Generate a site for the current project.
In addition to that you can create your own plugins to accomplish the tasks specific to your project.For eg.Scala has a maven plugin to help managing scala projects.Again plugin will be available in central repositories(http://repo1.maven.org/maven2/org/apache/maven/plugins for maven) .If you are using the libraries or plugins from maven central repository you need not specify the repositories and plugin repositories in pom.xml files.Any other repositories should be specified in pom.xml.
Reference :
http://maven.apache.org/plugins/index.html
http://hamandeggs.wordpress.com/2009/08/30/creating-a-simple-maven-plugin/
5) Maven archetype plugin
Archetype is a Maven project templating toolkit. An archetype is defined as an original pattern or model from which all other things of the same kind are made. Archetype will help authors create Maven project templates for users, and provides users with the means to generate parameterized versions of those project templates.
To create a new project based on an Archetype, you need to call mvn archetype:generate goal as follows
mvn archetype:generate
It will list the archetypes available in the repositories available and you can choose the one which fits your project .It will ask for some more information about the project like name and version and once you provide those details archtype lugin will create the ptoject structure and pom.xml file for your project.Refer the links for more information
References
http://www.mkyong.com/maven/how-to-create-a-project-with-maven-template/
http://maven.apache.org/guides/introduction/introduction-to-archetypes.html
Sunday, January 17, 2010
Believe me, Linux is as easy as any other OS
I recently read an article in computer world “You don't need to 'know' Linux to use Linux”.It addresses the notion people have that you need to master some commands or need some expertise to use linux easily. I can see people still have those notions even after linux as OS matured a lot and came a longway to compete with others. Let me adress some of them and i will be relying mainly the most popular desktop linux distro Ubuntu to prove my points.
Installing linux may corrupt my windows OS
You need to know shell commands to use linux
This is very well addressed in the article I refered earlier(“You don't need to 'know' Linux to use Linux”.)
Linux don't have good support for audio and video and you need to be hacker to make it work
This is a thing of the past and now all the popular disto's have support for all the popular audio and video file formats. But not all the drivers might not be bundled with the os as you might have for windows . If you take Ubuntu for example mp3 driver won't come bundled with Ubuntu as it is not complaint with Ubuntu license terms.You have to understand Ubuntu and open source philisophy to understand its reason fully ,but as normal user you just need to install gstreamer plugins separately from Ubuntu software center .I will be expalining installing applications in Ubuntu separately.
I will be landed in strange world with none of favourite apps in windows not available.
19 cool things to do after installing Ubuntu
http://blog.thesilentnumber.me/2009/09/top-things-to-do-after-installing.html
It has a lot of security restrictions and is difficult to deal with
This is because linux is following unix architecture and is designed as a multiuser system at its core. This is basically different from the windows which was deveolped for desktop PC's. But linux architecture has a lot of advantages and is the reason why linux is considered the most secured os and have very less chance for the viruses to be affected. It may be annoying initially as there may be restrictions for normal users and once you understand it you will see the benefit.
Installing applications is a painfull task and you need to be a techie to do that.
No one knows linux to support me if there is a problem.
Anything comes free of cost is not good or with less quality.
Some people have a general feeling that as free software with less quality. This may be because the think that as linux is developed by volunteers who are not resposible for bugs and software doesn't offer any official support .This is infact wrong and eventhough free software is developed by volunteers they also go through the same rigorous development and testing cycles that commercal softwares do. Infact as there are more involement from community it is possible that more people test it at early stages and more bugs are fixed before the release.Even you can get commercial support from any linux vendors like Redhat or Novell if you are ready to pay for that.
Linux is less user-friendly compared to windows.
This might be true few years back as linux GUI's were not that developed and there were no GUI for some taks. But now if you look at most Linux distros the GUI is in par with windows and you may even feel more confortable working with linux as its interface much more simple and lightweight. You will ofcourse have an affinity towards a platform you are working for years and may take some time to get confortable with a new once. But as a person recently moved completely to Ubuntu i felt linux is muck easy to work with and intellectually satisfying for me being a programmer.
Thursday, January 7, 2010
Why I started learning Scala ?
Recently we saw emergence a lot of jvm languages which according to me strengthens the java language platform. The important among them are Jruby,Jython,Scala,Clojure and Groovy Jruby and Jython are JVM versions of Ruby and Python respectively ,which are two powerful dynamic languages. They helps lovers of those dynamic languages to stick to that platform and at the same time leverage the power of JVM,the most tested, trustworthy VM platform. Groovy ,Scala and Clojure are developed independantly and among them scala attracted me very much and I decided to learn scala .This is mainly because I felt any need of learning any of the dynamic languages in JVM as java gives me what I want and I am confident with that. But when looking at Scala I saw some interesting stuff and felt it is worth to learn that. I am listing down some of those features.
1) Functional programming
Scala support for functional programming attracted me .As of now I didn't think much about the style of programming I followed and the debate over Imperative or functional programming in scala groups pushed me to take a deep look at functional programming aspects. Scala being a multi-paradigm language leverage the power of both functional and imperative approaches.
2) Type inference
Scala is strongly typed language and at the same time it has something called type inference by which it infers the type of a variable and relieves most of the burden from programmer.
3) Actors
Actor is a more advanced way for parallel programming instead of using threads and locks which is very low level and difficult to use for programmers.
4) DSL support
DSL (Domain specific languages) are gaining popularity and scala offers a power full support with its parser library.
I will try publish detailed notes on each of these as I progress ,but the interesting point is
that it forced me two look deep at some basic concepts of programming which I consider very valuable as a programmer.
Friday, December 18, 2009
Play!, a promising java web framework
1) Simple stateless mvc architecture
2) Based of REST principles
3) The framework compiles your sources and hot-reloads them into the JVM without the need to restart the server.So you can edit and reload the changes immediately.
4) Aimed to provide developer's productivity
5) TDD support with UI driven testing using integrated selenium .
6) Improved exception messages
7) HTTP to code mapping
8) Full stack application framework with support for common web application needs
9) Efficient templating engine
10) JPA with hibernate support.
Another remarkable point is good documentation and developer support through forum.I tried play with the sample application given in documentation and felt easy and developer friendly .Play comes with inbuilt server where you can deploy the application or import as a war file and deploy in another server. An interesting point is it breaks some java traditions in terms of packaging and MVC modeling.So it is time for playing your app.