Technology

I have been getting a lot of requests from freshers to guide them about their career. So I have decided to dedicate an article for that.

Pre-Fresher

I would describe someone who is in the last stages of finishing their formal education as Pre-Fresher. At this stage of your life, you need to be aware of industry trends, job market and salaries. Websites such as Tiobe Index should give you an idea of what is in demand. However, remember that what is in demand today may not remain in demand by the time you finish your degree. So its still a bit of a gamble. But if you have a broad skill set and good design and analytical skills, you can’t go wrong.

Don’t close yourself off. You may not be master of all skills. But as long as you are good at a few and know about a few others, you should be fine.

Industry experience is vital and would set you apart when you finish your education from your collegues. So I would suggest that at this stage you go for it even if you don’t get paid.

Skills worth looking at are: Java/J2EE stack, C/C++, VB, PHP, MySQL, PostgreSQL, Oracle and Linux.

Fresher

At this stage, you have finished your formal education and are ready to take on the world. You have to remember that humility, honesty and hard-work are the important attributes at this stage.

You don’t know everything. So don’t pretend you do. Don’t put things on your CV that you cannot justify. And if you don’t have a job, nothing is stopping you from downloading the latest JDK or Hibernate or JBoss Seam distribution and having a play around with it.

It is possible that you may not have access to a computer or internet. Be resourceful. I used to hire computers on an hourly basis to practice C Language.

Take any job. And once your contracted hours are over, with your manager’s permission you can spend time in some self-teaching. I am sure your manager would be more than happy to let you do that.

By this time, you should have a good idea about what skills attract you. So you can start concentrating on sharpening those skills. For example, if it is Java based Web Applications that interest you, make sure you have a look at JSF, RichFaces, JBoss Seam, JPA, Hibernate and JBoss.

There were no free databases when I had started my career. But today you are spoilt for choice. I would recommend PostgreSQL. Again, for operating systems, go for something with wide acceptance such as Fedora Linux. Have a look at distrowatch.com for other popular linux distributions.

Again, as far as an IDE is concerned, you are spoilt for choice. I would recommend Eclipse as that has a great set of available plug-ins.

Other things that you need to be aware of are Apache WebServer and Subversion (SVN) version management software.

A skillset such as that is going to give you a good start in your professional life.

One thing my teacher Dr. Mrs. Shirwaikar said to us which I follow to this day is “Your books don’t teach you everything”. And no matter how much you know, remember, you don’t know everything.

Another thing worth remembering is you may do everything correctly. But the outcome may not be what you expected. That doesn’t mean there is something wrong with what you did. Its just life – taken from Star Trek.

Recession or Credit Crunch time imposes heavy restrictions on a company’s spending. Generally where a company can hire 10 developers, they are forced to reduce this to 5 or less developers.

Not just that, each individual is required to pick up the work of 2 or more individuals and also, wear multiple hats such as analysis, development, mentoring, project management, deployment, testing and user training. This means that a smaller development team is required to develop the same size and quality of a project as a larger team did before.

A lot of time in the project is taken up for design. However, once the database design is in place, a team is required to develop a series of screens that allow the end users to quickly get a feel for the project and be able to do Create, Retrieve, Update and Delete operations on the underlying database.

Add to this, requirements such as search, filtration, pagination, etc. The requirements and expectations don’t stop there. You will have the higher management asking for Rich Internet Experience and Google-like search.

In the recent past, I have been involved in many projects where the requirements have been similar to what I have described above for some small to medium sized business clients.

So what tools and frameworks really work in such situations you may ask. I have been using the following:

  • Java / J2EE
  • JSF
  • RichFaces
  • JBoss Seam
  • Java Persistence API (JPA) driven by Hibernate
  • PostgreSQL database
  • JBoss Application Server
  • Linux

The above stack is not only fantastic for developer productivity, it also provides fantastic TCO (Total Cost of Ownership). Depending upon the kind of support requirements, the stack can cost anything from Free to GBP 100,000 a year apart from the hardware costs. As the above stack offers a high developer productivity, the cost of development goes down significantly as well. And so does the time. Of course, these two depend largely upon the complexity of the project.

Interesting isn’t it? Especially when you consider that many organizations spend a few Hundred Thousand Pounds on just keeping their applications running!!! Of course, for larger organisations and banks, this cost alone can run into Millions of Pounds.

Recently I had the opportunity to speak on Hibernate at the UK Java User Group – Scotland. The presentation was partly slides and partly a live demo.

In this live demo, I covered following examples:

  • Single table CRUD
  • Single table CRUD where the id was autogenerated
  • One-Many CRUD
  • Many-Many CRUD

I have since migrated the example to work on Eclipse Ganymede (3.4.1) instead of MyEclipse 7.1. I have also made some small changes to the code.

You can download the presentation and the example code as a single zip file from here -> hiberws.zip.

To run the examples, you will need a PostgreSQL database. The SQL script for that is available in the db folder.

There are 2 bugs in seam-gen of JBoss Seam 2.1.0.GA in the following 2 files:

view/view.xhtml.ftl – Line 100

property=parentParentPojo.indentifierProperty -> property=parentParentPojo.identifierProperty

view/edit.xhtml.ftl – Line 127

property=parentParentPojo.indentifierProperty -> property=parentParentPojo.identifierProperty

Once you have made the above changes, you will need to run seam delete-project and seam create-project before progressing further.

A copy of my presentation on JBoss Seam in PDF format is available here.

Feel free to mail me your feedback at ashish@ebizss.com.

JBoss have released 2.1.0.GA release of JBoss Seam. The highlights include identity management framework with ACL style permissions, an Excel reporting module, an embellished and more flexible seam-gen, first class support for Wicket, built-in support for URL rewriting and a technology preview of JAX-RS (REST) support through the RESTeasy project.

It is important to mention that Seam based web applications can be deployed to all major Application Servers such as WebSphere, WebLogic, OC4J and now Glassfish. It can also be deployed to Tomcat. Make sure you check out the examples.

Read more about the new release here.

Download it from here.

Check out a screenshot-by-screenshot example here.

What you will need to get the ANT svn task to work is:

JDK 1.5/1.6 – You can get that here.
ANT – You can get that here.
SVN client – You can get that here. You will need to register for this.
SvnAnt zip file – You can get that here.

Here is what to do:

Install JDK if you haven’t done so already.
Install ANT (simply unzip the ANT zip file into an appropriate place) if you haven’t done so already.
Install SVN Client.
Install SvnAnt (simply unzip the SvnAnt zip file into an appropriate place).

To use the ANT svn task:

build.properties:
# -----------------------------------------------------------------------------
# build.properties
# This file is referenced by the sample build.xml file.
# -----------------------------------------------------------------------------

svnant.version=1.0.0

# —————————————————————————–
# all jar needed
# —————————————————————————–
lib.dir=C:/svnant-1.0.0/lib
svnant.jar=${lib.dir}/svnant.jar
svnClientAdapter.jar=${lib.dir}/svnClientAdapter.jar
svnjavahl.jar=${lib.dir}/svnjavahl.jar

svnant.latest.url=http://subclipse.tigris.org/svn/subclipse/trunk/svnant/
svnant.this.url=http://subclipse.tigris.org/svn/subclipse/tags/svnant/${svnant.version}/

svnant.repository.user=user1
svnant.repository.passwd=”passwordUser1″

build.xml:
<?xml version="1.0"?>

<project name="Update" basedir="." default="update">
 
  <!--  all properties are in build.properties -->
  <property file="build.properties" />
  <path id="project.classpath">
    <pathelement location="${svnjavahl.jar}" />
    <pathelement location="${svnant.jar}" />
    <pathelement location="${svnClientAdapter.jar}" />
  </path>
  <property name="project.svn.url" value="SVN_URL_HERE" />
 
  <taskdef resource="svntask.properties" classpathref="project.classpath"/>
 
  <target name="update">
    <svn>
      <checkout url="${project.svn.url}" revision="HEAD" destPath="." />
    </svn>
  </target>

</project>

You can get detailed documentation on svn ANT task here.

To install subversion on Linux and make it available over Apache, I took the following steps:

Install subversion on Fedora

yum install subversion

Install mod_dav_svn

yum install mod_dav_svn

Create the SVN Repository

mkdir /svn/repos
svnadmin create /svn/repos/sandbox

Change ownership of the folder to Apache

chown -R apache.apache /svn

Create /svn/repos/sandbox/svnauth file


[/]
user1 = rw
user2 = r

Here, user user1 will have read-write access while user user2 will have read-only access to the entire repository.

Create /svn/repos/sandbox/svnpass file

htpasswd -bcm /svn/repos/sandbox/svnpass user1 passwordUser1
htpasswd -bm /svn/repos/sandbox/svnpass user2 passwordUser2

htpasswd has the following usage

Usage:
htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password
 
htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
-c Create a new file.
-n Don't update file; display results on stdout.
-m Force MD5 encryption of the password.
-d Force CRYPT encryption of the password (default).
-p Do not encrypt the password (plaintext).
-s Force SHA encryption of the password.
-b Use the password from the command line rather than prompting for it.
-D Delete the specified user.
On Windows, NetWare and TPF systems the '-m' flag is used by default.
On all other systems, the '-p' flag will probably not work.

Add the following to your apache config file

<Location /svn/sandbox>
DAV svn
SVNPath /svn/repos/sandbox
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /svn/repos/sandbox/svnpass
Require valid-user
AuthzSVNAccessFile /svn/repos/sandbox/svnauth
</Location>

Restart Apache

httpd restart

Now you can access the above repository using your browser. Simply visit http://www.yourserver.com/svn/sandbox. You will be asked for username and password. Use one of the user names and passwords you used above. For example, user1 and passwordUser1.

JBoss have released version 2.1.0.CR1 of JBoss Seam.

This includes a lot of bug fixes and new features. Notably, it now has support for Wicket.

Download it or read the release notes here.

RichFaces 3.2.2.GA has been released. This release includes a lot of new components and a few bug fixes.

You can download this from here.