Archive for February, 2007

Linux Desktop Based Development Environment

Note:- If you are a .Net developer you can straight away skip this post.

At Compassites we have projects getting developed using Ruby on Rails, Java/J2EE and .Net technologies. The development environment for the projects on Ruby on Rails and Java/J2EE are all open sources that can run on any operating system. Gone are those days when UNIX/Linux environments were only suitable for production environment. The main reason given by the software engineers who were addicted to the Microsoft environment was the usability of the system and the difficulty in using a command line based environment. But now Linux has penetrated the desktop environment and is making significant improvement. The level of usability and ease of use is on par with what Windows offers. The biggest plus is they are open source, free or with a very nominal fee.

UbuntuWe decided that we have to leverage this and slowly started migrating development environment to Linux desktop environment. While a Google search will give you links to several Linux desktop environments, we decided to go with Ubuntu as our desktop OS because of the simplicity in installation, configuration and very good usability. The following is a typical development environment setup that our developers on Ruby on Rails or Java/J2EE projects. All of them are open source and is available for almost all major operating environments.

Sun Java SDK - Java Runtime support
Ruby on Rails - Ruby and Rails programming environment
Eclipse IDE - Open Integrated Development Environment
RadRails Eclipse plugin - Rails Coding on Eclipse IDE
Subclipse - Subversion management from within Eclipse
Apache Ant/Maven - build and deployment automation
Apache web server - serve static contents of web application
Apache Tomcat application server - run J2EE applications
JBoss application server - run J2EE applications
WEBrick (Ruby library no separate installation required) - run Rails applications
Open Office (comes with Ubuntu) - Office applications
Firefox browser - Web application testing

A dedicated Linux box runs the following and is used by all the projects.

MediaWiki - Project documentation
Subversion - Version control system
Mantis - Bug tracking tool
Luntbuild - Continuous Integration management

Apart from the above we have few more Linux boxes that run the applications for development testing and QC.

One caveat that we faced was the developers testing the web applications on Internet Explorer (IE). Since IE is still a major browser used by the internet community, testing the applications for compatibility is a must. A Google search on IE on Linux will result in the top sites that mainly talk about the open source software IEs 4 Linux and/or Wine. Wine is an Open Source implementation of the Windows API on top of X and UNIX. It basically cheats the windows based software to think that it is running on a windows environment (you can see folders like drive_c/program files/internet explorer/ etc being created under the installation directory). We tried using Wine and installed IE 6 on Ubuntu. But we were not happy at all because it was not close enough to how the application looked on a real IE on Windows. Finally we resorted to dedicating couple of Windows boxes that were enabled with remote login. Using the Terminal Service Client program in Ubuntu, developers were able to login to the windows systems virtually and test the applications on Internet Explorer. This has been working quite well and we are happy.

The other caveat is importing the existing mails from Outlook. This was a problem for only the developers who started with Windows and had to be migrated to Ubuntu. New joiners straight away started with Evolution or Thunderbird. Evolution or Thunderbird does not import the CSV/tab separated file exported from Outlook. If any one has any insights on this please do send a mail to me.

Why a Linux based desktop environment? The following are the advantages a Linux desktop based development environment brings.

  1. The ultimate production environment is a UNIX/Linux environment and it is better the environment be similar from the development. When I mean environment I mostly mean about the file system. This already solves indifferences like the file separator (Windows \ vs. UNIX /) problems and the text encoding (PC by default in Windows and you can see ^M characters for end of line when transferred to a UNIX system). Usually there will be images folder that contains the images used by the web application. In a windows environment if a developer opens this folder in explorer’s thumbnail display mode, windows creates a file called Thumbs.db. Windows uses this to cache information about the images so that it can display the thumbnails fast next time you open the same folder. This can be disabled through the folder options but usually is unnoticed by a developer because it is a hidden file. I have seen this file go all the way into the source control and up to the production environment. Of course all these are really not showstoppers and the application would run in the production but I think it is a matter of discipline and keeping the production environment clean.
  2. The strength of a UNIX/Linux system is the file system and the security. The chances of a UNIX/Linux based system getting affected by virus is almost zero. This means there is no need for an anti virus software. That means added cost savings apart from the operating system license costs.
  3. The third key advantage is to get used to working on UNIX/Linux environment. Working on a UNIX/Linux environment is fun. It could be hard initially to work with particularly if you are addicted to Windows but as you keep working you will know what I mean and it is difficult to get away from it. This also helps in working in a production environment and handling hosting and maintaining the application in the production environment.

Blink this Linux Desktop Based Development Environment at blinklist.com    Bookmark Linux Desktop Based Development Environment at blogmarks    Bookmark Linux Desktop Based Development Environment at del.icio.us    Digg Linux Desktop Based Development Environment at Digg.com    Fark Linux Desktop Based Development Environment at Fark.com    Bookmark Linux Desktop Based Development Environment at Furl.net    Bookmark Linux Desktop Based Development Environment at NewsVine    Bookmark Linux Desktop Based Development Environment at reddit.com    Bookmark Linux Desktop Based Development Environment at Simpy.com    Bookmark Linux Desktop Based Development Environment at Spurl.net    Bookmark Linux Desktop Based Development Environment with wists    Bookmark Linux Desktop Based Development Environment at YahooMyWeb

Comments (2)      Cosmos

Foundation Stone #34 - Never Give Up and Delve Deep

I was watching a renowned saint’s talk on TV three days back. During his speech, he told several stories. A part of a story inspired me and this post is based on that. Here is the excerpt from the story.

A saint was on his deathbed counting his last days.  His disciples were around and looking after him.  The disciples were always astonished with the knowledge and wisdom that their guru had and wanted to know who his guru was who might have been more knowledgeable than him.  So they asked the guru who his guru was.  The guru smiled and said that he had learned from thousands of gurus throughout his life and that he doesn’t have enough time to tell about all of them.  The disciples were persistent and asked the guru to tell at least about few of his gurus.  The guru agreed and started telling about few of his gurus and what he learned from them.

“The first guru to me was a thief.  I was in search for knowledge and was walking through a village.  It was late night and the entire village was deep asleep. I wanted to take shelter for few days in the village but at that time of the night I didn’t wanted to disturb anyone. As I walking through a small street I saw someone near a house and as I closed in, I could recognize that it was a thief who was trying to get into a house and steal. Not daring to bother about what he is doing I asked him, if I could find any shelter in the village. The thief said that there is no public shelter but then he offered that I could stay in his house provided he doesn’t mind staying with a thief.  I thought about it and really didn’t care because he is a thief. Every day the thief went in the night to do his work and returned back in the morning. Every morning he came empty handed and I would tell him he failed to steal and he would say that he will make it tomorrow. I stayed with the thief for about a month and for the entire month he was not able to steal anything but he still kept saying he would make it tomorrow.  That was the first lesson I learnt from the first guru.  A lot of times I was impatient that I am not getting enough knowledge and wisdom to carry on the saint path that I even considered renouncing it and going back to normal life. But the thief guru taught me the concept of never giving up and if I am here today it is that first lesson that I learnt has brought me up till here.

My second guru was a dog.  I was drinking water from a pool of water. A thirsty dog came by and wanted to drink the water from pool.  As he put his head down to the pool he saw his own reflection and thought it was another dog and started barking.  The reflection of him also did the same actions but the dog thought there was another dog inside the pool which is barking at him. So he stepped back and attempted again. Again the same thing happened and he backed away. This happened for few times and then I don’t know what the dog thought it jumped into the pool. Once he was in he didn’t see any other dog and started drinking the water to its content. That was a big lesson for me that taught me that if I have to become knowledgeable I have to delve deep into it, just by looking at the outset I will not be able to feed to my content.”

The saint told few more of his gurus and what he learned from them but more related to sainthood and Godliness. The first two lessons that the guru learnt are applicable whether you are software engineer or a saint. Never give up and delve deep into what you are learning.

Have a great week.

Note:- This post is part of the “Foundations” series of posts.

Blink this Foundation Stone #34 - Never Give Up and Delve Deep at blinklist.com    Bookmark Foundation Stone #34 - Never Give Up and Delve Deep at blogmarks    Bookmark Foundation Stone #34 - Never Give Up and Delve Deep at del.icio.us    Digg Foundation Stone #34 - Never Give Up and Delve Deep at Digg.com    Fark Foundation Stone #34 - Never Give Up and Delve Deep at Fark.com    Bookmark Foundation Stone #34 - Never Give Up and Delve Deep at Furl.net    Bookmark Foundation Stone #34 - Never Give Up and Delve Deep at NewsVine    Bookmark Foundation Stone #34 - Never Give Up and Delve Deep at reddit.com    Bookmark Foundation Stone #34 - Never Give Up and Delve Deep at Simpy.com    Bookmark Foundation Stone #34 - Never Give Up and Delve Deep at Spurl.net    Bookmark Foundation Stone #34 - Never Give Up and Delve Deep with wists    Bookmark Foundation Stone #34 - Never Give Up and Delve Deep at YahooMyWeb

Comments      Cosmos

Comment a Program

I read this joke through a mail forward and chuckled for sometime.

The computer science professor wrote a simple program on the board and asked the students to study it and write comments.

Student 1: This program is very nice
Student 2: I like this program very much
Student 3: I don’t know what a program is



Happy Weekend :-)

Blink this Comment a Program at blinklist.com    Bookmark Comment a Program at blogmarks    Bookmark Comment a Program at del.icio.us    Digg Comment a Program at Digg.com    Fark Comment a Program at Fark.com    Bookmark Comment a Program at Furl.net    Bookmark Comment a Program at NewsVine    Bookmark Comment a Program at reddit.com    Bookmark Comment a Program at Simpy.com    Bookmark Comment a Program at Spurl.net    Bookmark Comment a Program with wists    Bookmark Comment a Program at YahooMyWeb

Comments (1)      Cosmos

Apache ab - Benchmark Web Server Performance

One of the key performance tests is to benchmark the number of requests that your web server can handle given the environment in which it is installed.  Apache ab is a web server performance benchmarking tool that helps in determining the number of requests that the web server can receive per second. Apache ab is a simple program that comes with the apache installation and should be available in the bin directory. If you are in a *nix environment most likely it should be in the path and just typing ab will show the help using the command.  For usage of this simple yet effective stress testing tool, refer to the apache ab documentation page.

Blink this Apache ab - Benchmark Web Server Performance at blinklist.com    Bookmark Apache ab - Benchmark Web Server Performance at blogmarks    Bookmark Apache ab - Benchmark Web Server Performance at del.icio.us    Digg Apache ab - Benchmark Web Server Performance at Digg.com    Fark Apache ab - Benchmark Web Server Performance at Fark.com    Bookmark Apache ab - Benchmark Web Server Performance at Furl.net    Bookmark Apache ab - Benchmark Web Server Performance at NewsVine    Bookmark Apache ab - Benchmark Web Server Performance at reddit.com    Bookmark Apache ab - Benchmark Web Server Performance at Simpy.com    Bookmark Apache ab - Benchmark Web Server Performance at Spurl.net    Bookmark Apache ab - Benchmark Web Server Performance with wists    Bookmark Apache ab - Benchmark Web Server Performance at YahooMyWeb

Comments      Cosmos

Useful Resource #18 - Learn Java by Examples

A programming language can best be learned only through examples. If you are person who is already familiar with a programming language and want to learn another language, for getting used to the language syntax and basic programs, the examples would suffice. If you are that kind and want to learn Java the site “Kode Java” could be handy. It contains lots of examples on different areas of Java.

Blink this Useful Resource #18 - Learn Java by Examples at blinklist.com    Bookmark Useful Resource #18 - Learn Java by Examples at blogmarks    Bookmark Useful Resource #18 - Learn Java by Examples at del.icio.us    Digg Useful Resource #18 - Learn Java by Examples at Digg.com    Fark Useful Resource #18 - Learn Java by Examples at Fark.com    Bookmark Useful Resource #18 - Learn Java by Examples at Furl.net    Bookmark Useful Resource #18 - Learn Java by Examples at NewsVine    Bookmark Useful Resource #18 - Learn Java by Examples at reddit.com    Bookmark Useful Resource #18 - Learn Java by Examples at Simpy.com    Bookmark Useful Resource #18 - Learn Java by Examples at Spurl.net    Bookmark Useful Resource #18 - Learn Java by Examples with wists    Bookmark Useful Resource #18 - Learn Java by Examples at YahooMyWeb

Comments (1)      Cosmos

Regular Expressions

Regular Expressions are way of matching patterns of string in another string.  This standard notation helps extremely well to find patterns of string within another string rather than traditional way of searching the pattern in all permutations and combinations. Regular Expressions are supported by most of the programming and scripting languages. For history and theory behind regular expressions look at this link in wikipedia but if you want to know the patterns and the explanation for example how to use in JavaScript here is the reference to it - “Regular Expression Patterns“, though this is applicable in  most of the languages.

Blink this Regular Expressions at blinklist.com    Bookmark Regular Expressions at blogmarks    Bookmark Regular Expressions at del.icio.us    Digg Regular Expressions at Digg.com    Fark Regular Expressions at Fark.com    Bookmark Regular Expressions at Furl.net    Bookmark Regular Expressions at NewsVine    Bookmark Regular Expressions at reddit.com    Bookmark Regular Expressions at Simpy.com    Bookmark Regular Expressions at Spurl.net    Bookmark Regular Expressions with wists    Bookmark Regular Expressions at YahooMyWeb

Comments      Cosmos

Fine tuning the JVM

If you are working on a Java/J2EE project one thing that you need to keep in mind is the check on memory and running the web/app server with proper memory parameters. When the JVM (Java Virtual Machine) detects that the garbage collector cannot clear anymore objects because there is none that has no reference and the physical memory limit available for the JVM has been reached, the JVM throws a out of memory error and the application crashes. The optimal mode in which your application can run in the production environment is through fine tuning the JVM parameters. Any J2EE application server has to be started with the java command only just like how you would run a HelloWorld program. A specific class is the starting point to the whole application server. For example this document “Tuning Java Virtual Machines (JVMs)” talks about the fine tuning of JVM for performance in BEA Weblogic server. The concept is almost the same and can be applied for any application server.

Blink this Fine tuning the JVM at blinklist.com    Bookmark Fine tuning the JVM at blogmarks    Bookmark Fine tuning the JVM at del.icio.us    Digg Fine tuning the JVM at Digg.com    Fark Fine tuning the JVM at Fark.com    Bookmark Fine tuning the JVM at Furl.net    Bookmark Fine tuning the JVM at NewsVine    Bookmark Fine tuning the JVM at reddit.com    Bookmark Fine tuning the JVM at Simpy.com    Bookmark Fine tuning the JVM at Spurl.net    Bookmark Fine tuning the JVM with wists    Bookmark Fine tuning the JVM at YahooMyWeb

Comments      Cosmos

Foundation Stone #33 - Plan and Execute

Way too much to learn and do yet 24 hrs a day - that’s the fact as it exists today. If you are entering into the software development industry or even relatively new then already you are lost in a forest. Every day you might feel that you want to learn, try out this but very few of those items really get executed and we happily put the blame on time. But unless someone hones that ability to take up multiple tasks, he/she will not have a chance to stand out in this crowd.

One thing that can help is to plan and attack the tasks in chunks. One may not be able to complete all the To-Do’s in a day but definitely complete few tasks in each of the To-Do’s every day. The ability to plan your time for various things in a day and execute is something that has to come by practice. A simple practice is to dedicate 15 to 30 minutes everyday in the morning to list down the tasks in To-Do’s, prioritize and go through them as the day progresses. Again end of the day another 15 to 30 minutes to summarize what was done and what was not. Try it daily and you will know if you are good in executing what you plan and also improve upon it. Planning is so important in life that it is applicable for everyone and the more early a person starts planning the more he/she will be able to take up and execute them on time.

Note:- This post is part of the “Foundations” series.

Blink this Foundation Stone #33 - Plan and Execute at blinklist.com    Bookmark Foundation Stone #33 - Plan and Execute at blogmarks    Bookmark Foundation Stone #33 - Plan and Execute at del.icio.us    Digg Foundation Stone #33 - Plan and Execute at Digg.com    Fark Foundation Stone #33 - Plan and Execute at Fark.com    Bookmark Foundation Stone #33 - Plan and Execute at Furl.net    Bookmark Foundation Stone #33 - Plan and Execute at NewsVine    Bookmark Foundation Stone #33 - Plan and Execute at reddit.com    Bookmark Foundation Stone #33 - Plan and Execute at Simpy.com    Bookmark Foundation Stone #33 - Plan and Execute at Spurl.net    Bookmark Foundation Stone #33 - Plan and Execute with wists    Bookmark Foundation Stone #33 - Plan and Execute at YahooMyWeb

Comments (1)      Cosmos

Next entries » · « Previous entries

Creative Commons License  This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.