It is that time of the year to make resolutions and revisit the old ones.
Last year I wrote down 10 resolutions and looks like I completed only 2.5 resolutions. That would be an F grade, pretty pathetic. Looking back, 10 resolutions is too many and it is difficult to accomplish all of them.
Now 2013 has arrived and it is time for me to give another shot at setting new resolutions.
Here are 2013 resolutions
- Write a blog every quarter
- Give a tech. talk at a big data related conference
- Seek promotion
- Learn leadership skills
- Finish reading the Start-up of You book
- Learn HBase
- Run in a half-marathon
2012 is upon us and now is the time to make or declare resolutions.
Below is a list of resolutions for 2012:
- Write 12 blogs – one per month (one down and 11 more to go🙂 )
- Finish the Algorithmic Puzzles book I got over the holiday break
- Complete the news4spring application
- Be more proactive in participating in conversations
- Teach a new course
- Seek a promotion
- Give a tech talk
- Learn MongoDB
- Revisit the resolutions every quarter
- Continue six-pack journey
The above list should be enough to keep me busy for the entire 2012.
I recently watched a video about Eclipse IDE and I must say it is fairly good. Scott, the presenter, covered a lot of good stuff in Eclipse that both new and experience Eclipse IDE users may not be aware of.
Here is a list of areas in Eclipse that Scott covered:
- General Eclipse shortcuts
- Setting up commonly used Java related settings to improve productivity
- Useful debugging tips, i.e display Java monitors to detect deadlock
It is often said that good Software Engineers need to constantly keep his or her tool box updated. In mind opinion, watching this video is one of the ways to keep one’s tool box updated.
Here is the link to that video – http://vimeo.com/11887305
In a distributed system where communication between services are happening at all time and at the same time network issues or hiccups occur frequently. A well designed service consumer should able to handle the network connection or timeout issues in a graceful manner. This issue is magnified to multiple folds if a service client is time bound and expects responses to come back in milliseconds. So what are the general guidelines or best practices for dealing with the issues outlined above?
Here is a short list of possible solutions. One must carefully pick the right solution for one’s specific application needs.
- Exponential backoff – more info
- Denied access gate with background pinging thread
Regardless of which solution is chosen, what is a good way to simulate the network issues. This is where the “iptable” command comes in. “iptable” command is generally used by network administrators to administer the tables of IP packet filter rules. The rule that is useful for our purpose is “DROP”, which drops the packets on the floor. To simulate a network connection, we can setup a filter rule for a specific host such that all packets that are supposed to go this host will be dropped on the floor.
In short here is the command to set up such filter rule:
sudo iptables -A OUTPUT -p tcp -d <remote host ip> –dport <remote port> -j DROP
When testing is done, make sure to remove the packet filter rule with the following command:
sudo iptables -D OUTPUT -p tcp -d <remote host ip> –dport <remote port> -j DROP
Now we know how to simulate network connection issue and this should help in testing the connection issue error handling code.
In recent years, there has been an explosion of new scripting languages on the programming landscape and as a developer one needs to be alert of what they are and their strengths and weaknesses. I recently started reading about Groovy and below is a synopsis of what I just learned.
- Groovy is designed for Java developers and its foundation is the standard APIs of the Java Platform
- Features in Groovy are inspired by languages like Python, Ruby and Smalltalk
- Groovy brings advanced features such as closures, dynamic typing and the meta object protocol to Java platform
- Groovy is Java’s newest best friend
- Seamless integration with Java Runtime Environment
- Groovy syntax is aligned with Java
- Every Groovy type is a subtype of java.lang.Object
- A Groovy class is a Java class
- XML handling in Groovy is so easy that make Java developers drool
- Groovy brings the fun of programming back to Java developers
- Groovy classes are compiled into Java bytecodes
- Groovy has integration with Ant and Maven and is well supported by major editors like Eclipse, IntelliJ and NetBeans
I am looking forward to dive into the some of Groovy advanced features.
By now I am sure everyone has heard that Google App Engine has supported Java and this is totally exciting for Java developers including myself. Not only Java is supported, but one can use JPA to store/retrieve data from Google DataStore. The current support has pretty much most of what one needs to build a useful Java web based application running on Google App Engine.
The next thing we need is some MVC framework for the presentation tier. Surprisingly, there is a lot of folks trying to use Spring MVC and Spring framework. This seems to make sense because Spring Framework provides both web-tier support and back-send support like JPA integration and transaction management. Maybe that’s why I haven’t seen many folks using Struts or JSF with Google App Engine.
There is a lot of buzz on google-appengine-java-group forum. Folks are trying out different technologies and exchanging tips and tricks.
As for myself, I ported the JDO Guestbook example to use Spring MVC + JPA and it is working just fine. Check it out when you get a chance.
From what I have been seeing, the following technologies are working on GAE:
Spring MVC, Tile 2.0.7.
One of the most frustrating things that most folks encountered is that their GAE applications work on their local box and it doesn’t work when running on GAE production. Most of the time it is related to security issue. GAE allows a subset of JRE classes and their white list is on their site.
I have an application in mind and I will be busy in the next several weeks developing it. Stay tune.