Monday, December 18, 2006

transliteration - writing in tamil

Recently found this link from friends, thought there are some transliteration softwares available, this seems to be simple, and doesn't ask you to switch between, capital or small case while typing to get the right word.

http://www.quillpad.com/tamil/

this is a site from tachyon technologies is a excellant tool, for transliteration to many indian languages (tamil, telugu, malayalam, hindi, marathi, kannada).

it easier than never before..

It just took me 10 seconds to type this, and I got it right on the first time!!!
anbum aranum udaithayin ilvalkai
panbum payanum athu

அன்பும் அறனும் உடைத்தாயின் இல்வாழ்க்கை
பண்பும் பயனும் அது

Saturday, November 11, 2006

Sunday, October 22, 2006

making readable urls

urls should be readable, sharable, memorable, ...

A site best feature would be recall ability. i.e. u navigate, and go thru all the site and u locate an resource or link, then again u losing it is pain.

Most of the site url which shows a catalog for example, will have an url like
catalog.jsp?pageno=5

What you see in page no 5 won't be there when you visit again. This kind of url is not sharable.

A longer url is also tough to share with others, or remember then even.

REST (Representational State Transfer) is a kind of architecture, which has stress on simple url schemes, which takes actions as part of url than part of request parameter. REST has various other aspects to it, so its simply wrong to just mentioning abt its url scheme here.
http://countme.wordpress.com/2006/10/04/affordability-pricing/

This above url speaks for itself, and most could understand when it was written, and how its organised.

Tuesday, October 03, 2006

Affordability pricing

Many times I was wondered, why most foreign books, softwares, etc., were sold at such high prices in India. Many great technical books cost around 50-100$ when they are released in USA. It takes very long time to get those books in India. They can be bought from there Indian counterpart publisher or reseller, but at the same price as sold in US. Whereas in US it’s affordable for them to get a book for 100$, but its bites our hands hard to spend 5000 Rupees to get a newly released book. Instead I would like cheaper edition available in other countries too, at the time of publishing itself.

Sometimes the cost of softwares, in Indian rupees is even higher that the converted rate from USD. :(

With increased internet presence, and high cost of original books, and very late publishing of Indian reprint (even takes 3-4 years or never after that) most of us are forced to get a pirated PDF version.

There should be some measures to make books available at cheaper rates only would avoid the loss by the pirated copies.

Availability and affordability is the key to success of any product.

Often working out the spending ability of the targeted audience and pricing them will lead to higher number of purchases, more profit and product visibility.

Google TechTalks, where are they?

For the past few months, I was watching the tech talk videos of presentations happening at Google. It’s a great thing for a company to share its privileged video on talks by various scholars of our time around the world. Google has done that.

Till then, watching them is my favorite past time for me in office.

But since August 25, 2006 there were no updates in the tech talk section in Google videos.

I had waited over month now; still there aren’t any signs of new videos... :( It’s quite a loss.

Hoping to see them back soon...

----------------------------------------

Extensive list of google tech videos...

http://video.google.com/videosearch?q=Google+engEDU

http://video.google.com/googleplex.html

Friday, September 15, 2006

email address validation

Recently this post talks about Google’s feature called plus-addressing.
Gmail has an interesting quirk where you can add a plus sign (+) after your Gmail address, and it’ll still get to your inbox. It’s called plus-addressing, and it essentially gives you an unlimited number of e-mail addresses to play with.

My immediate thought for me is: Does most sites allow ‘+’ as a valid character to appear in email address? Most sites will reject this email address. If this is a standard then this breaks our application, not able to accept valid email address.

Other mail server like “Fastmail” also claims to have this feature.

Somebody opposed that this not a feature at all, its part of standard RFC 2822 for email. This is a way to send comments in-line with the email address.

So what would be regular expression to validate email address as per RFC 2822 standards? Not sure, but though according to this page, a regular expression for validation according a previous RFC (822) for email addressing is
http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

The grammar described in RFC 822 is suprisingly complex. Implementing validation with regular expressions somewhat pushes the limits of what it is sensible to do with regular expressions, although Perl copes well:

(?:(?:rn)?[ t])*(?:(?:(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t] )+|Z|(?=[["()
<>@,;:\".[]]))|"(?:[^\"r]|.|(?:(?:rn)?[ t]))*"(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*
(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|"(?:[^\"r]|.|
(?:(?:rn)?[t]))*"(?:(?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:
(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*)(?:.(?:(?
:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))
|[([^[]r]|.)*](?:(?:rn)?[ t])*))*|(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z
|(?=[["()<>@,;:\".[]]))|"(?:[^\"r]|.|(?:(?:rn)?[ t]))*"(?:(?:rn)?[ t])*)*<(?:(?:rn)
?[ t])*(?:@(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".
[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]
+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*))*
(?:,@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>
@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[
] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?
[ t])*))*)*:(?:(?:rn)?[ t])*)?(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[
t])+|Z|(?=[["()<>@,;:\".[]]))|"(?:[^\"r]|.|(?:(?:rn)?[ t]))*"(?:(?:rn)?[ t])
*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["(
)<>@,;:\".[]]))|"(?:[^\"r]|.|(?:(?:rn)?[ t]))*"(?:(?:rn)?[ t])*))*@(?:(?:rn)?[
t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([
^[]r]|.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?
:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*))*>(?:(?:r
n)?[ t])*)|(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]
]))|"(?:[^\"r]|.|(?:(?:rn)?[ t]))*"(?:(?:rn)?[ t])*)*:(?:(?:rn)?[ t])*(?:(?:(?:
[^()<>@,;:\".[]00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|"(?:[^\"r]|.|
(?:(?:rn)?[ t]))*"(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 0
0-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|"(?:[^\"r]|.|(?:(?:rn)?[ t
]))*"(?:(?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)
?[ t])+|Z|(?=[["()<>@,;:".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn
)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[
]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*))*|(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn
)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|"(?:[^\"r]|.|(?:(?:rn)?[ t]))*"(?:(?:rn)?
[ t])*)*<(?:(?:rn)?[ t])*(?:@(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=
[["()<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<
>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*](
?:(?:rn)?[ t])*))*(?:,@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)
?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)
?[ t])*(?:[^()<>@,;:\".[]00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))
|[([^[]r]|.)*](?:(?:rn)?[ t])*))*)*:(?:(?:rn)?[ t])*)?(?:[^()<>@,;:\".[]00-31
]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|"(?:[^\"r]|.|(?:(?:rn)?[
t]))*"(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?
:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|"(?:[^\"r]|.|(?:(?:rn)?[ t]))*"(?:(
?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])
+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])
*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]
r]|.)*](?:(?:rn)?[ t])*))*>(?:(?:rn)?[ t])*)(?:,s*(?:(?:[^()<>@,;:\".[] 00-31]+
(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:".[]]))|"(?:[^\"r]|.|(?:(?:rn)?[ t]))*"(?:(?:
rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(
?=[["()<>@,;:\".[]]))|"(?:[^\"r]|.|(?:(?:rn)?[ t]))*"(?:(?:rn)?[ t])*))*@(?:(?:rn
)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|
[([^[]r]|.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:
(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*))*|(?:[^(
)<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|"(?:[^\"r]|.|(
?:(?:rn)?[ t]))*"(?:(?:rn)?[ t])*)*<(?:(?:rn)?[ t])*(?:@(?:[^()<>@,;:\".[] 00-
31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])
*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["(
)<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*))*(?:,@(?:(?:rn)?[ t])*(?:[^()<
>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*]
?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?
[ t])+|Z|(?=[["()<>@,;:".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*))*)*:(?:(?:rn)
?[ t])*)?(?:[^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]
]))|"(?:[^\"r]|.|(?:(?:rn)?[ t]))*"(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[
^()<>@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|"(?:[^
"r]|.|(?:(?:rn)?[ t]))*"(?:(?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()<>@,
;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.
)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[] 00-31]+(?:(
?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r]|.)*](?:(?:rn)?[ t])*
))*>(?:(?:rn)?[ t])*))*)?;s*)


This regular expression will only validate addresses that have had any comments stripped and replaced with whitespace (this is done by the module).

There could be ways of breaking this single expression into smaller modules, but still this is the one :-o

Friday, August 18, 2006

unit testing xslts

Some XSLT testing frameworks

XSLTUnit
http://xsltunit.org

Outdated
Tough to setup the testing environment

Tennison’s testing framework
http://tennison-tests.sourceforge.net/
http://www.jenitennison.com/xslt/utilities/unit-testing/

Test cases could be written in xml itself
Easy to write test cases
Supports xpath based expressions testing of nodes and values
Tests are more readable than XSLT unit
Don’t support global variable and params setting properly

UTF-X
(http://utf-x.sourceforge.net/)

Test cases could be written in xml itself
Supports template generation for writing test cases
Support for ant tasks to run test while executing builds
Needs java 1.5
Supports Junit
Don’t support advanced xslt testing needs

Juxy
(http://juxy.tigris.org/)

Java Based
Needs to have knowledge of java programming
Could be integrated with JUnit
Support param set-up for xslt and global variable setup and other options for xslt testing
Drawback: need knowledge of java to write test cases.

Recommendations:

If you are okie to write xslt test cases in java, then Juxy will provide us with much flexible framework.

Or else if you need to stick with XML based test case building (which can be written just with knowledge of xml/xslt alone), then we could use the Tennison Testing framework.

Wednesday, August 09, 2006

Customizing the web - chickenfoot

User customizations of today’s website are mostly restricted to theme and color of the site. Are these customizations solves the specific needs of the user? The customizations provided are just visual; they don’t solve the content needs of different users.

Though we have concept of services, and portal yet the flexibility is restricted by service provider. The end user doesn’t have real control to customize the site as per his needs both in look and content.
Now-a-days the web is just display of HTML tags interpreted by browsers. Nobody can sense out of data with the markup tags in the HTML. The mark-up are for visual clues, no markup for the meaning of the data. RDF is a proposed technology to describe your web document and resources much better. If the markup gives you the meaning and context of the data out there in the web, then the search can be most accurate as possible. The search query more specific like this, even will lead you the exact result right away.
“Show the theaters running ‘MI-3’ where tickets are available for tonight”

But there is long way to achieve this, as it takes time to implement this for most sites.

Monday, July 31, 2006

Pattern Infected :-(

--------------------------------------------------------------------------------
interface MessageStrategy {
 public void sendMessage();
}
--------------------------------------------------------------------------------
abstract class AbstractStrategyFactory {
 public abstract MessageStrategy createStrategy(MessageBody mb);
}

class MessageBody {
 Object payload;

 public Object getPayload() {  return payload; }

 public void configure(Object obj) {  payload = obj; }

 public void send(MessageStrategy ms) {  ms.sendMessage(); }
}
--------------------------------------------------------------------------------
class DefaultFactory extends AbstractStrategyFactory {
 private DefaultFactory() {
  ;
 }

 static DefaultFactory instance;

 public static AbstractStrategyFactory getInstance() {
  if (instance == null)
   instance = new DefaultFactory();
  return instance;
 }

 public MessageStrategy createStrategy(final MessageBody mb) {
  return new MessageStrategy() {
   MessageBody body = mb;

   public void sendMessage() {
    Object obj = body.getPayload();
    System.out.println((String) obj);
   }
  };
 }
}
--------------------------------------------------------------------------------
class DefaultFactory extends AbstractStrategyFactory {
 private DefaultFactory() {
  ;
 }

 static DefaultFactory instance;

 public static AbstractStrategyFactory getInstance() {
  if (instance == null)
   instance = new DefaultFactory();
  return instance;
 }

 public MessageStrategy createStrategy(final MessageBody mb) {
  return new MessageStrategy() {
   MessageBody body = mb;

   public void sendMessage() {
    Object obj = body.getPayload();
    System.out.println((String) obj);
   }
  };
 }
}
--------------------------------------------------------------------------------

Could you figure out what is the function of the above program? It's just a program to print a "hello world" to the console. Looking weird? This is what a pattern infected person can do, using them wrongly

Read the full thread of from the slashdot.org forum, over here.

Tuesday, July 04, 2006

Live CDs - Cool !!

What are Live CD's?

From the Wikipedia http://en.wikipedia.org/wiki/Live_CD 
LiveDistro is a generic term for an operating system distribution that is executed upon boot, without installation on a hard drive.  

The term "live" derives from the fact that it does not reside on a hard drive. Rather, it is "brought to life" upon boot without having to being physically installed onto a hard drive.

It is often said LiveDistros are a good way to demo or preview an operating system without having to install it to a hard drive.

Suppose your Windows crashed. And there is lot of information left in you c: drive, so you want to retrieve them before you re-install Windows. How to do it? All you can do earlier is to remove your harddisk, and connect to your friend's machine, then copy the data.

But after Live CDs, there is a easy way to do it.

Monday, June 19, 2006

'Google techtalks' Videos

Google Video has collection of videos on "TechTalk" - technical presentations shows happening almost every week at Google workplace (restricted for google employees). These presentation are given by educational scholars, and research people, and eminent IT industry personalities.

The presentations are really both interesting and diverse on topics. It includes presentation on languages (lisp, aspectj), on information management, on branding, or even on leveraging IT techniques for social welfare.

http://video.google.com/videosearch?q=Google+techtalks

Click on the above link or search 'Google techtalks' under google videos (http://video.google.com).

Or rather extensive list of videos from Google Production

http://video.google.com/googleplex.html

Thanks, Google! For making this presentations public.

Wednesday, June 14, 2006

How Google hires...

http://googleresearch.blogspot.com/2006/03/hiring-lake-wobegon-strategy.html

Any small technical startup, blows in terms of number of employees working, as it becomes successful as a market leader. How to keep the intelligent quotient of an company high, still recruiting in hundreds?

This blog explains the google's strategy to hire people, at the same time keeping the cumulative intelligent quotient of the people in the company as high as possible.

Monday, June 05, 2006

Improve ur presentation

Recently I have seen a presentation which is very clear and effective to the point. It has around 60-100 slides, but maximum 2 or 3 word in a slide. I loved it. When I checked more about these kind of presentations I came to know it is a lessig-style presentation.

http://lessig.org

Who is lessig? He is one who fights against copyright in creative works. He created this kind of style presentations.

Follow this blog http://presentationzen.blogs.com/presentationzen/ to learn yourself how u can impove your professional presentation, for effectiveness.

A lessig's presentation http://lessig.org/freeculture/free.html

Also must to watch this presentation: http://www.identity20.com/media/OSCON2005/

Monday, May 29, 2006

Wednesday, April 26, 2006

Over Engineering/Under Engineering

Most of the software products are either over-engineered or under-engineered. The design of the solution is either overdone than what it has to be or its underdone so it is not up to the flexibility level required.

In most design discussions, anybody who knows some design patterns immediately peep up and relate the pattern they know to current problem. And suggest using them, even if your requirement is so simple. They say using design patterns will make your design extensible for future. Is this a healthy sign? Not really!

Maybe good when considering the developers in the team had learnt about the design patterns, which help them to make good design or even to implement a good design correctly. But putting the patterns up-front in the design phase often causes over engineering.

Avoid using patterns unless you really need them. KISS. Keeping things simple will help even a newbie to understand your code. If a person is not comfortable with your code, he will start modifying the code in isolation (i.e. modify only the parts he is comfortable to change, and add utility classes / separate functions to do his job, rather understanding the whole piece and adding the code at right place).

Throwing in design patterns early is a costly solution to a non-existent problem. By doing so you waste your resources to implement the pattern with complex code, than concentrating on you business requirement. As an XP practice, always remember don’t do more than what it requires. Don’t spend time in solving anticipated problems of future rather keep the code clean, so it can be implemented if required in future.

Are patterns to be avoided then? No. They have to be used with care and consideration. Similarly patterns examples shown in the books are just reference implementations, we should be comfortable to modify it as we need to keep the design simple at the same time keeping the grammar of the pattern unchanged (to avoid confusion in pattern vocabulary).

Some designers count the number of design patterns used to show the quality of their design! That’s the worst way to measure the quality of design. So beware, over-engineering is an equally dangerous as under-engineering.

Under-engineering is another problem with software development. This happens usually when the developer has no intent to organize his code, or to improve design. All he writes is code, which claims to work right, but still can’t be proven. Working with this code is a nightmare. Enhancement or even maintenance is almost impossible. 

No special knowledge or attention is needed to write this kind of code. It happens automatically as your program evolves. Under-engineering is most commonly seen in practice. This type of code finally becomes a Big Ball of Mud as described by Brain Foote.

Starting with simple design, and re-factoring continuously to improve design & readability of the code helps to achieve a best possible design for a given requirement.

Refactoring to Patterns is a good book to start learning about this paradigm. This book is specially published under signature series signed by Kent Beck, and Martin Fowler
Home Page of the Book: http://www.industriallogic.com/xp/refactoring/

Martin Fowlers link: http://www.martinfowler.com/books.html#r2p

Tuesday, April 25, 2006

Common Programmer Types

An interesting article discusses about the commonly found programmer personalities in software development.

http://www.hacknot.info/hacknot/action/showEntry?eid=81

Friday, April 14, 2006

Googling tips...

Manytimes searing in google is easier task. Sometimes we have to specific in search terms, so we get precisely we want. Google search engine support various options to specify wat you want more accurately.

Say you are looking for ebooks on Java. you can use 'inurl:e-book java' or 'inurl:ebook java', this inurl directive will lisst ony the websites that have the ebook as a part of their url to the page. This kind of hacking is needed when u search for more specific things.
inurl: url consists this word as part of their full url

intitle: words matching in title of pages

allinurl: more words matching in url

site:  example, site:http://www.sun.com will search only within the sun's website

http://www.docdroppers.org/wiki/index.php?title=Google_Hacking_For_Media

Dont use these hacks to download copyrighted material. 

Thursday, March 30, 2006

Rails 1.1

rubyonrails    Ruby on Rails framework update release 1.1 is here.

Refer http://weblog.rubyonrails.org/articles/2006/03/28/rails-1-1-rjs-active-record-respond_to-integration-tests-and-500-other-things
The biggest upgrade in Rails history has finally arrived. Rails 1.1 boasts more than 500 fixes, tweaks, and features from more than 100 contributors. Most of the updates just make everyday life a little smoother, a little rounder, and a little more joyful.

But of course we also have an impressive line of blockbuster features that will make you an even happier programmer. Especially if you’re into Ajax, web services, and strong domain models — and who isn’t these funky days?

The star of our one-one show is RJS: JavaScript written in Ruby. It’s the perfect antidote for your JavaScript blues. The way to get all Ajaxified without leaving the comfort of your beloved Ruby. It’s the brainchild of JavaScript and Ruby mastermind Sam Stephenson and an ode to the dynamic nature of Ruby.

Ruby has a very easy, humane language structure. So the support for writing javascript in ruby language is cool. Try it out yourself.

Wednesday, March 29, 2006

Code Kata

Sometime back I had read about code kata from the blog of Dave, the well-known author of the book "The Pragmatic Programmer Book" & its series. He introduces a set of practice exercises needed to improve our coding skill in any language or even our thinking about a problem in a business domain. They stretch your thinking and coding abilities. Here is an excerpt from his blog.




What’s a Code Kata?


As a group, software developers don’t practice enough. Most of our learning takes place on the job, which means that most of our mistakes get made there as well. Other creative professions practice: artists carry a sketchpad, musicians play technical pieces, poets constantly rewrite works. In karate, where the aim is to learn to spar or fight, most of a student’s time is spent learning and refining basic moves. The more formal of these exercises are called kata.

To help developers get the same benefits from practicing, we’re putting together a series of code kata: simple, artificial exercises which let us experiment and learn without the pressure of a production environment. Our suggestions for doing the kata are:

  • find a place and time where you won’t be interrupted

  • focus on the essential elements of the kata

  • remember to look for feedback for every major decision

  • if it helps, keep a journal of your progress

  • have discussion groups with other developers, but try to have completed the kata first


There are no right or wrong answers in these kata: the benefit comes from the process, not from the result.

Follow the original blog at http://blogs.pragprog.com/cgi-bin/pragdave.cgi/Practices/Kata. So far he has added around 21 code kata.



If you want to discuss kata, there’s a mailing list here, and a wiki here. However, remember that the point of the kata is not arriving at a correct answer. The point is the stuff you learn along the way.

This is not just reading, so spare some time to spend & reap benefits! Also share any of your personal Code Kata with others.

Sunday, March 26, 2006

Minimal Servlet Container

Recently I wrote a demo java program which controls USB devices present in a system, by accepting options as command-line arguments (i.e. runs only in command prompt). I thought of writing a GUI, so the user can easily control it. The immediate option came to my mind, is to use a java swing client. But I am not really comfortable in swing/awt; also I had only limited time to finish it. I don’t want to spend time in aligning fields in UI, rather I thought of developing web-based interface, which I am most comfortable with. 

Okay, but now I have to deploy my war file in the client place to show a demo!

Will they have a tomcat installed in there machine?  How much instructions I have to provide them, so they can self-deploy the application? What I they have problem in deploying?

Wednesday, March 22, 2006

BarCamp @ Chennai

Are u a said to be an technology enthusiasist, wanna share things with the world.. or wanna learn from similar people like you? Attend BarCamp, happening at chennai on April 8th & 9th.

BarCamp Chennai

http://barcamp.org/BarCampChennai

Why named BarCamp? FUBAR is a common military name, often in many demo programs, the immediate class name any body will use, is foo or bar or foobar. That may be the reason for the name BarCamp. if you ask me if there is any FooCamp then? Yes, it has been, but it is expanded to Friends Of O'Reilly, not the one we dicussed above. It was said that O'Reilly invites limited number of geeks to yearly unconference at his place, for FooCamp, but the invite is limited. Some of them wanted to attend but not able to, because they haven't got an invite. Those people started themselves an unconference named BarCamp.

Tuesday, March 14, 2006

JavaScript & DOM

Any web developer must have knowledge of this. In earlier days html are hand-written and site had more java-script decorators. Slowly they were disregarded, the gimmickry effects are considered to be not-so useful, and mostly distracting the user. A plain site with clean navigation flow is considered more useful. Even for data-validation, the java-script which runs at the client is considered risk. So they moved them to server, and preferred server-side validations to client-side validations. Servlets & JSP reduced the developer to directly interact with core html, and often helped to generate dynamic html, and do server-side validations with controller components


A good understanding of DOM model is very much required for any web developer. With Web2.0, an over used term, often meaning to give power to the user, by providing interactive user interface; JavaScript is playing a role again.


JavaScript is most supported client side script, by the browsers. Even though JSP’s support various scripting language under the BSF model, JS is most commonly supported by all.


Where is JavaScript now -- Version 1.5


Upcoming JavaScript 2.0


http://www.quirksmode.org/js/support.html


FireFox1.5 supports JavaScript version 5, but still IE 7 beta just supports JavaScript 1.3, with many browsers in the market, we have to be careful to choose correct version of JS, to reach wider users.


DOM2 is recent specification released, by w3c, hopefully supported by common browsers soon. Best is to stick with DOM0 or DOM level1, based on the functionality you require.

Friday, February 10, 2006

Simplifying AJAX

AJAX: you agree or not it is back with new name. It’s nothing new, it’s the same JavaScript DOM model, and asynchronous request & responses traveling forth and back to update part of the tree. Even JSF is a component model, i.e. each component has a set of stages, in which they will update their part/some other part of components, i.e. a piece in overall is the DOM tree presented to the browser.


AJAX/JavaScript is very much needed to provide rich user interfaces, without having to load activex/applet plug-ins. JavaScript supported by most browsers, would be the light weight way of doing things than running any plug-in with browser.


It’s easy to use ajax in a wrong way causing, complexity in code [not able to trace what is happening where, for a maintenance developer], and un-expected user behavior.


Ajax’s Mistakes...
http://alexbosworth.backpackit.com/pub/67688


To reduce the complexity involved in coding an ajax applications, tools has to be introduced, which makes common utilities available. With JSF, you can create Faces Components which behind-the-scenes uses AJAX to make the components interactive. The ordinary UI developer/programmer can merely use those components, than coding directly with ajax. The hardness of dealing the XMLHttpRequest can be kept alone to components developer.


Dojo, gives you set of JavaScript utilities, which we may need to develop interactive applications, also has templating with support for widgets.


DWR - Direct Web Remoting, allows server side functions/objects to be exposed over for interaction from client-side JavaScript. This engine, acts transparently between the client and the server. It takes the burden of creating asynchronous requests, and getting responses. This seems to be simple, see the overview here. Also refer the java.net article. DWR is certainly worth to give a try.

Thursday, January 05, 2006

Simpler GUI for Jad, The Java Decompiler

Jad is the fastest java decompiler, available open source.. However it doesn’t come with a GUI. It is a command line tool. There are also GUI tools which internally use jad, and then decorate the code and show it in a graphical window.

Instead of going for a GUI tool, it is easier to write a dos-batch file, which will decompile the java class file, and opens them on your favorite text editor, say notepad/textpad.

Here is the script

===jadOpen.bat===
@echo off
jad -o -d%TEMP% %1
"C:\Program Files\TextPad 4\Textpad.exe" %TEMP%.\%~n1.jad
===============

Now associate class files, to open with this bat file by default, using windows program association. So now double clicking a class file will open in textpad with source code.

Recommended Blog Posts