I came across a post on the Adam Bien blog recently about using the prefix ‘Abstract‘ to define Abstract classes. The argument was that using the ‘Abstract‘ prefix is superfluous. I do not fully agree with the post. As I read the points he had mentioned on the post, here are some that came to mind
Abstract classes are already distinguishable by the keyword abstract. There is no need to further emphasize it.
A prefix “Abstract” doesn’t provide any additional value to the user – in contrary it blurs the actual intention
The Abstract in the class name helps a developer know that a class is Abstract even before they open it. Of course if some one bucks the convention and names a Concrete class abstract, it creates confusion but that scenario is rare.
Modern IDEs don’t let you instantiate an abstract class, even before saving / compiling.
If you are a web developer, you would have encountered one of the following challenges.
- Ensure that your web page contents are not cached by the browser.
- Check if your clear text componenets are gzipped by the web server.
- Add additional request parameters / headers for testing.
- Determine if a stolen cookie can be used to login to the site.
- Analyze request / response times.
- Verify web server response status / headers.
Well, I could go on and on and the list is certainly large. Do you see anything common in the list mentioned above ? They all require a tcp monitor / web debugging proxy to solve. There are several that are available out there. If you have never used one before, its never too late. I was able to save several minutes of time when programming java web apps after marrying them with a debugging proxy / monitor.
The RSS cloud and the pubsubhubbub (PuSH) way of notifying RSS feeds has gained some interest of late, thanks to wordpress supporting the former format. If you have never heard of these protocols, heres the low down. The RSS feed works by having a client ‘pull’ data from a feed. That is, clients keep nagging at the server every X minutes saying ‘Hey do you have something new for me ?’. The server responds with a no about 99% of the time. This leads to a lot of inefficiencies. Instead if the clients were to use a push model, the data is actually ‘pushed’ to a client automatically without the client asking for it. This is great since the client no longer makes unnecessary calls to the server. The diagrams below illustrate this.
Classic update:

Rss Cloud update:

I have been researching captchas recently . The goal being, to understand how to make captchas better. I spent some time trying to determine the various forms of catcha available out there. There were quite a few and some were innovative (innovative does not necessarily mean easy to use
). Here are some that will interest you

Recaptcha:
The most common form of captcha is recaptcha. Recaptcha does a good job of displaying some sort of cryptic letters and numbers to its users. But it is far from the captcha solution that an end user might want. An image based approach promoted by captcha.net is also available, but some images are thoroughly confusing. I am currently researching better ways to categorize and display images. There are more problems to be discussed in image based captchas, which I would rather cover in a seprate post with an implementation.
Eclipse can be used to debug your java applications. Here are a few tips that can help you debug better
Remote debugging:
The eclipse IDE can remote debug your web application. Imagine being able to debug your development server from your local machine. Eclipse can help you do this. First you need to instruct your application / server to listen on a port for debug messages. That can be done using the -Xdebug flag
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8787,suspend=n
This tells the JVM to listen for specific debug messages on port 8787. In eclipse open Bug Icon -> Debug configurations and select “Remote java application”. Mention the port and server address and you should now be able to remote debug the application. Make sure that the classes and source sync with each other. On a network where the bandwidth is poor, this technique will not work.
Remote java application: