Tuesday, April 13, 2010
Sunday, January 10, 2010
Interest in our Panchangam Lite 2010 application
Recently we published our Panchangam Lite 2010 iPhone app. It is interesting to see that there are some 300 users who downloaded within 5 full days of launch. Here is a google map showing various countries from which the users came from.
View Panchangam Lite downlod status in a larger map
Posted by
venkat
at
4:52 AM
1 comments
Friday, May 23, 2008
Return to blogging
There has been a pause in blogging here not because of dearth of any material, but for lack of time.
I have tons of stuff to share and expect a series of regular blog posts from now. My writings will focus on experience with Ruby On Rails, JRuby, J2EE deployment and quite a bit of Ruby on Rails plugins as well.
Posted by
venkat
at
12:12 AM
3
comments
Tuesday, August 15, 2006
Asrock wasted precious several hours of my time
Motherboard manufacturers compete in terms of no of functions they have. In the process of cramming all kinds of functions even in low end mobos, they just don't pay attention to the quality aspect of what they do.
After several months of running ok, a computer I had it assembled (AMD Sempron, Mobo: AsRock K8Upgrade-VM800) for a friend of mine starting giving BSOD, slowness etc. Not having faith in anybody locally in his location to fix, I had it shipped to Bangalore to have a look.
Boot up at my location, it came up properly. Looking at the event log it has a bunch of following errors several times since the date he complained:
Event Id: 26
Source: atapi
The driver has detected that device \Device\IdeIdePort0 has old or out of date firmware. Reduced performance may result
Event Id: 51
Source: disk
An error was detected on device \Device\Harddisk0\D during a paging operation
Event Id: 9
Source: atapi
The device \Device\Ide\Ideport0 did not respond within the timeout period.
XP didn't let me finish a Acronis True Image backup complete. It would fail close the end of the backup job. I bought TuffTest just for this and ran the CD-ROM based diagnostics. The surface test gave disk time out errors after 20 mins or so.
Suspecting disk first, moved the disk alone in another AMD Sempron based machine with different Asus motherboard, the disk worked properly and the Acronis Backup running on top of Bart PE just went fine as well as much faster than the time it took (40 mins) before it failed on the other machine.
Now that disk is ruled out and backup is done moved the disk back to the original machine to further troubleshoot. While playing with BIOS settings, I bumped into the SATA Operation Mode option which was set to "RAID". The XP was using it as a IDE disk though. Changed it to "Non-RAID" at BIOS, booted XP again came back fine. It still took 40 mins to do Acronis Backup but went through just fine. So is the TuffTest surface analysis test.
Works but slow. Found that this is due the transfer mode for disk is running in PIO mode only though the disk is capable of DMA mode. Tried all kinds of solutions like messing with registry changes etc to let XP recognize it as DMA disk. So, the first conclusion to make is, though operating as RAID at BIOS, it still allows the OS to recognize the disk as IDE albeit at a much slower PIO mode. Installed the AsRock supplied disk drivers. Still no luck.
I found a RAID driver in their website and literally has to reinstall over the current XP to change the disk driver to the RAID one. All of a sudden, the speed of disk became DMA mode. So, the Mobo guys only allow full speed DMA mode under RAID driver only.
By not doing either of the following, they really wasted a lot of my time.
1. RAID is the default so force the XP to recognize this as a RAID device and ask for the driver during install time. This would have avoided me unknowingly thinking that disk is IDE and everything is fine.
2. If allow the dual mode of recognizing RAID as IDE when only one disk is present, then let the drivers access it in full speed DMA mode.
Posted by
venkat
at
8:29 AM
1 comments
Labels: computers
Saturday, January 28, 2006
Java Docs Search made easier
About a couple of years ago, as we were developing with J2EE and whole bunch of open source libraries (perhaps some 20 in number) one of the things I observed to be clumsy is locating Class names or method signatures while coding. At times you only remember a part of a class name or a method name. You end up having to go to the web to look for it. Each library's JavaDocs are in different places and it does waste you time.
There was a need for a tool to search across multiple JavaDocs. Upon Googling at that time, we found that there was a desktop based utility available (I don't recall it's name right now) to search Java Docs across multiple libraries or JDK versions. The beauty of it is that it takes the actual Java Docs files as it is and indexes them. The negative side of it is it needed to be installed in each developers PC and we had over 30 of them in the team.
I felt that it would be a good small project for someone to make the above as a web based application to save the deployment effort each time a library changes. When we were welcoming a couple of new colleagues, this project was a obvious choice for one of them when we needed him to get familiar with Struts.
Hence the "API Search" tool was born and used internally fairly regularly. From the beginning, I wanted this to be open sourced as a way of paying back to the community and also for collective improvement and maintenance of it. For one reason or the other (though not directly due to my previous employer as I did have the approval to contribute to FOSS wherever I see it fit) it wasn't done and I also left my previous employer last year.
My friend and ex-colleague Karthik attended the foss.in with me in last November. He was very much impressed by the FOSS approach there and went back with the renewed vigor and one of the first thing to come out of this fresh energy is releasing of APISearch as a open source tool under GPL license. I am going to join this project as a developer myself and contribute anything I can to this. I am certainly proud of Karthik for this.
Go check it out. Please give feedback there or comment in this blog and we will take this further.
Posted by
venkat
at
5:32 AM
0
comments
Return of Waterfall Methodology
Many of the thousands of readers of this blog(ok. ok. two or three readers) know that I really enjoy attending technical conferences as a way to keep myself up to date and often motivate(ok. almost coax them) others to do so.
After returning to Bangalore, I do miss all the good stuff on the conference front that goes in the US. As much as it is very expensive to attend a conference in the US, here is one conference I have decided to spend the hefty $5000 and attend. I seriously recommend you check this out.
I like what Andy's blog says about it:
For those interested in returning to Real programming, you might be interested in attending Waterfall 2006, a new conference designed to celebrate the joy of slower, sequential, plan-based development. It's sponsored by the United States Postal Service, the SEI, and Lager's Pub of Canton MD.
Be sure to click on the "Register Now" button, it really captures the flavor of this... er... event.
Posted by
venkat
at
4:37 AM
0
comments
Thursday, December 01, 2005
John Vlissides
OO and Design Patterns has lost a true legend. He will be greatly missed.
Perhaps a week or two ago, I was telling some one that there is a chance they will update the book.
Posted by
venkat
at
12:00 AM
2
comments
Thursday, June 30, 2005
Finally, the Java naming issue is over with
The Java naming jokes are now finally over with.
There are very simple names to follow:
Java SE 6 (Standard Edition)
Java ME 5 (Micro Edition)
Java EE 5 (Enterprise Edition)
Posted by
venkat
at
12:55 AM
2
comments
Tuesday, June 28, 2005
Java ClassPath wildcards
Here is one feature that is a time saver and scheduled for the Mustang release.
ClassPath wildcards
No more writing shell scripts (Remember lcp.bat) for various platforms for looping. Endless typing of the umpteen jar files in a dir.
Posted by
venkat
at
7:46 PM
0
comments
Sunday, June 19, 2005
Large project - Result of a process or inherent?
Here is was one nicely put statement about large project in the above link.
"I often hear developers described as 'someone who knows how to build a large system quickly.' There is no trick in building large systems quickly; the quicker you build them, the larger they get!"
-- David Parnas
Posted by
venkat
at
9:16 PM
0
comments
Wednesday, May 11, 2005
VSS and list of shared files for a given project
Recently we have observed random corruption of a large VSS database recently at my work. As a stop gap measure, we have recreated a fresh VSS database to copy at least the latest source to proceed further. However we do have a number of shared files among projects and VSS doesn't have a built in report to list those files that are shared.
So here is a quickly hacked Ruby script for producing a "list of shared files in VSS project". It is also smart enough to ignore deleted shares when considering whether a file is shared or not. It might be useful for others so I am publishing it here.
List shared files VSS Report
Posted by
venkat
at
10:36 PM
1 comments
Sunday, April 24, 2005
How to find out where a class is loaded from?
ClassLoader cl = aClass.getClassLoader();
while (cl != null) {
System.out.println(cl);
cl = cl.getParent();
}
try {
System.out.println(aClass.getProtectionDomain().getCodeSource().getLocation());
} catch (Exception e) {}
Posted by
venkat
at
11:26 PM
0
comments
Friday, March 25, 2005
More about WebDav
Having said good things about the WebDav earlier, I also have to point out that at times we do miss out retry and parellel connection facilities available in advanced web clients like CuteFTP or FileZilla.
Here is a very cool Java library (OnJava article) that plugs into the Java's protocol handler mechanism and provides the retry and parallel connection facilities to HTTP connections. With this one should be able to build a cool WebDAV Client that is as good as any modern FTP client.
Posted by
venkat
at
9:59 PM
0
comments
WebDav and File Transfer
As FTP is blocked at the firewall level in more corporations, we switched to WebDav (used the Apache 2's Dav module) for File Transfers between our offices. With WebDav, We also got an additional advantage of using the Windows OS's built in WebDav client (Web folders) rather than having to install an FTP Client or in most cases just use the Web Browser. Once the folder is setup, it is simply one more folder in the Windows Explorer. Since we use Apache on the server, we can rely on the industry standard Web Server and have to worry less about security issues.
Posted by
venkat
at
9:53 PM
0
comments
Monday, March 21, 2005
Friday, February 18, 2005
Discussion on LDAP , OpenLDAP, etc
An interesting discussion about directory services, LDAP and OpenLDAP at slashdot.org
Posted by
venkat
at
8:40 PM
0
comments
Tuesday, November 23, 2004
One more celebration today
We did a couple of cool things in the last few months with Deepak.
To improve our application security, we now handle the data segregation at the JDBC sql statements level in a generic manner. We have a very decent set of AspectJ based aspects to do the job of scoping the SELECT sqls to only retrieve the data allowed for the specific users.
We also switched to Eclipse IDE. This one is really cool and we are enjoying it while saving more than $15,000 in licensing fee for Intelli IDEA.
Deepak did an excellent job on both of the above items. With lots of patience he tested the system throughly one function at a time for the Aspect based implementation and we really appreciate that.
We thanked him and gave him an award for the above today. Here are some pictures:

Deepak receiving his award from Ricardo

Deepak with his award
Thanks Deepak. Keep it up.
Posted by
venkat
at
6:51 PM
1 comments
It is celeberation time
We had a small celebration in the NJ office. We were happy to note the three major new efforts on the infrastructure side. They are:
VPN
I have been aiming to get the VPN setup so that we can have a secure inter office communication as well as occational on the road/home communications. It finally came to frution a few months ago when were were able to configure the FreeSWAN package on our IPCop box. We have a open source command line client thanks to Marcus Muller. We also have SoftRemote client which works well. We plan to give USB Tokens for two factor authentication for the VPN clients.
Anti Spam Gateway
Many of our folks were getting tons of spam everyday. Ricardo used to get over 200 a day. It was time to do something about it, Thanks to Debian, Postfix, Amavis, SpamAssassin, DCC, Vipul's Razor, RulesEmporium we now have a very good Anti-Spam solution which catches I believe over 90% of spam.
Replacing our aging Exchange Mail Server
Our workhorse mail server box has given us a honorable service of over 5 years. We also needed to move away from Exchange Server mainly to worry less about security problems. Thanks to Debian, Courier and OpenLDAP we now have a good mail server solution. We also have new Dell server class hardware with hot-swappable disks and standby box.
The main man behind all this is Naga. So we gave him an award to recognize his effort. Here are some pictures.

Naga receiving the award from Ricardo

Naga with his award
Posted by
venkat
at
5:27 PM
1 comments
Saturday, October 02, 2004
Mail merge ruby script
The other day, I needed to send the gmail invite to all the folks in the development team and it amounted to more than 30 people. Since each one would have to be sent a different invite, distribution list won't work. Here is a quick Ruby script I cranked up to send the invites. Go ruby.
require 'net/smtp'
receiver_list = ['x@y.com','a@b.com']
invites_list = ['invite_url_1','invite_url_2']
smtp = Net::SMTP.start('mta1.mycompany.com', 25)
sender = 'me@gmail.com'
receiver_list.each_index {|email_index|
receiver = receiver_list[email_index]
invite_link = invites_list[email_index]
puts "Sending e-mail to " + receiver
msgstr = "From: Venkat <#{sender}>\n"
msgstr += "To: #{receiver} <#{receiver}>\n"
msgstr += "Subject: Gmail invitation\n"
msgstr += "I would like you to enjoy a small gift, a new Gmail account.\n"
msgstr += "#{invite_link}\n\n"
msgstr += "Cheers,\n"
msgstr += "Venkat.\n"
puts smtp.send_mail(msgstr, sender, receiver)
}
Posted by
venkat
at
10:40 AM
2
comments
Can sequence diagrams be any more simpler?
For some of the work we have been doing recently, I wanted to sketch small sequence diagrams to explain the flow.
As always the temptation is to launch Rational Rose. This time I hadn't set it up in my new laptop as I didn't want to bloat it with lots of software. Since I had heard about ArgoUML, I tried that next. It was very quick to launch it as it was Webstart enabled. But the sequence digramming option itself wasn't enabled for some reason. Docs weren't of help.
As always the better ideas come last to me. With so little brain cells I have left it is wonder that they even come . About a year ago as I was playing with AspectWerkz, I had integrated it with Sequence. At that time, I was doing this to draw the sequence digram on the fly as the code executes. We will talk about that in another post. This tool is really cool. I should suggest this to be Webstart enabled also. It has a very simple text syntax where you specify the sequence steps and it draws the digram for you. How can you do faster than this? Here is some simple text sequence I wrote and the digram below.
SomeObject.someCall {
Connection.prepareStatement(sql) -> preparedStatement {
ScopingAspect.around(connection, sql) -> preparedStatement {
SqlStatement.parse(sql) -> statement;
LegacyScoper."getScopeBy EntityName + ViewName"() -> condition;
LegacyScoper.[isEmpty]getScopeByViewName() -> condition;
LegacyScoper.[isEmpty]getScopeByEntityName() -> condition;
LegacyScoper.[isEmpty]getScopeByTableName() -> condition;
DefaultScoper.[isEmpty]getScope() -> condition;
SqlStatement.[isNotEmpty]addCondition(condition);
SqlStatement.toSql() -> sql;
Connection.proceed(sql) -> preparedStatement;
}
}
}
Posted by
venkat
at
10:08 AM
1 comments
