Sunday, September 12, 2010

10 Years on... Java Coding and Akshara...

Its almost 10 years that I started writing Java Code. I like relook at the begining and introduce my first project/product I worked on.
Its 2001 January I started my 6th Sem Project as part of my MCA (in University Of Hyderabad) course. I decided to work on a module of Multilingual (Indian Languages) text editor along with my classmate Ganesh under Prof K Narayana Murthy. This project is executed as part of TRCT (Technology Resource Center for Telugu) in University. This is one of the 11 reaserch centers/organizations setup for developing Tools and Technologies for Telugu. Being open source and to achieve platform independency it was decided to develop this product using Java. This is why and how it (Java coding) started. No prior or formal training!! Started with Java1.1 but soon moved to 1.2. Person working on this product had to leave and we had to take over complete product and this happened around Feb 2001. We got first basic version done in couple of months... but was slow (on 216 and 512MB machines). So we had re-design basic things and code. The next version came out impressive and promising. It was named "Akshara" - Advanced Text Processor for Indian Languages.
Project got over in July 2001. I was supposed to join in my first Job in SQL Star International but thanks to rcession joining date was delayed..... Luckily I was offered Job in same organization I did my project and to work on same product along with 2 of my classmates. So in 1st Aug 2001 I started coding for Money... For next two and Half I continued there and during that time we added more features to Akshara and also created a chat tool and a Technology for web input and output along with other things.





After many years and many projects Akshara still remains my best work so far from personal satisfaction factor. Below are few features of Akshara.

  • Open sorce
  • Platform Independent
  • 14 Indian Language support
  • Basic Text editing featured and styling (Alignments, text styles etc)
  • Uses own and open format (XDL) for storing files
  • Embeded Email Client
  • Spell checker
  • Text to Speech
  • HTML file creation with CSS

References to Akshara can be found at below links

http://www.lisindia.net/Telugu/telugu_Tech.html
http://tdil.mit.gov.in/TDIL-OCT-2003/text%20editors%20&%20word%20processors.pdf

Sunday, January 17, 2010

Using Re-Use...

As discussed in last post re-using existing code/components is one of the key thing for better development. Every organization will have repository of reusable components but how do we ensure their re usability? From my recent observations things that can be reused are

1. Common functionality exposed as services
2. Validation and other similar utilities
3. Edit rules and other UI logic

One stage where we can identify reuse is during design phase. You can easily identify the reusable services/components at this stage, But you can identify reusable validation utilities and other reuse opportunities only if you undertake detailed/low level design. But how many times we perform low level design? In these cases onus of identifying the reuse lies with developers and development leads. But bigger challenge here how will these guys know that there is some thing that can be easily reused? As a simple example a developer who is required to do date validations will know that there is a Date validation utils already written by some one else? In general hectic schedules it is very much possible that we oversee reuse opportunities and end up coding again (reinvent wheel).
The thumb rule that I like to propose for developers is... while coding if you happen to code any thing that is not very close to Business of the application, then there is an opportunity for reuse. For example if you are coding a rule like - calculations based on some combinations of values selected on UI and some algorithm specific to application then there wont be much reuse opportunity. But if you are coding some Date validations, UI edit rules using Javascript (like restricting text field to accept only numbers) there is chance for reusing some thing existing. If you observe these are independent and had no close relationship with any business logic. In these kind of cases, you can search your organization's repository to find out suitable utilities.

I will continue discussing this topic with specific examples in further posts.

Recently I read some overview of Language called Scala which promises excellent support for component development. And it says Software development will become similar to assembling hardware. Means you will just need to put together some components and get the final product. This is an interesting thought and planning to spend some time on this.