Peppy fast css3 selector engine

by Michał Kuklis on 28/10/2008

Peppy is a small and very fast css3 selector written by James Donaghue. Here is how you can use it:

var selector = "div";
var context = "#elementId";
var q = peppy.query(selector, context);
No Comments

Define your own Annotation Type

by Michał Kuklis on 24/10/2008

I’ve been using build-in Java annotation types (like @Overrides or @Deprecated) and those created by different vendors/services for a while now but I’ve never built my own. Here is an example of how you can define very simple annotation type and use it:

 
import java.lang.annotation.Retention;
 
public @interface SimpleMessageAnnotation {
     public String message();
}

As you can see a declaration of the new annotation type is very similar to the Java interface declaration (add ‘@’ symbol in front of the interface) There are some additional rules you have to follow:

  • Method declarations should not have any parameters
  • Method declarations should not have any throws clauses
  • Return types of the method should be one of the following:
    primitives, String, Class, enum, array of the above types

In order to annotate a class with the new type you can write:

 
@SimpleMessageAnnotation(message = "hello world!!!")
public class TestAnnotation {
 
}

Now in order to access the message value during the runtime we can use reflection API. Before we can do that we need to change the RetentionPolicy of our new annotation type to RUNTIME. We can do it by adding Retention annotation to our SimpleMessageAnnotation:

 
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@Retention(RUNTIME)
public @interface SimpleMessageAnnotation {
     public String message();
}

This will inform the compiler about the new policy. There are 3 policies which can be used by the compiler (default is CLASS):

  • SOURCE—Annotations are to be discarded by the compiler.
  • CLASS—Annotations are to be recorded in the class file by the compiler but need not be retained by the VM at runtime. This is the default behavior.
  • RUNTIME—Annotations are to be recorded in the class file by the compiler and retained by the VM at runtime, so they may be read reflectively.

Now by using reflection API we can access our message value like this:

public class Run {
 
	public static void main(String[] args) {
 
		Class<TestAnnotation> clazz = TestAnnotation.class;
		System.out.println(clazz.getAnnotation(SimpleMessageAnnotation.class).message());
 
	}
}

What can be annotated?

  • package
  • class ( including interface, enum)
  • method
  • field
  • local variable, formal parameter (compile time only)
No Comments

Properties pattern

by Michał Kuklis on 23/10/2008

Really nice ‘introduction’ to properties pattern by Steve Yegge

No Comments

how to remove .svn from all folders – command line

by Michał Kuklis on 15/10/2008
find . -name ".svn" -exec rm -rf '{}' \;
No Comments

JavaScript closures

by Michał Kuklis on 16/09/2008

Nice presentation about JavaScript closures posted by Stuart Langridge

No Comments

google protobuf

by Michał Kuklis on 2/09/2008

http://code.google.com/p/protobuf/

No Comments

google chrome

by Michał Kuklis on 2/09/2008

really exciting news: http://www.google.com/chrome

No Comments

guice

by Michał Kuklis on 5/05/2008

http://code.google.com/p/google-guice/

No Comments

flex 3 component explorer

by Michał Kuklis on 27/03/2008

http://examples.adobe.com/flex3/componentexplorer/explorer.html

No Comments

copy files using ssh

by Michał Kuklis on 23/03/2008

ssh <em>user@host</em> cat &lt;<em>filename</em> "&gt;" <em>remote_location/remote_file</em>

No Comments