BUGS
It’s hard to use this command without singing.
Thursday, October 25, 2012
Tuesday, October 23, 2012
The sensible man
Jon Pither is the sensible man. He writes a practical argument for Clojure over Java. Which is more industrial, Scala or Clojure? Yes.
Thursday, October 18, 2012
Unsafe magic heap
A brilliant post from Martin Thompson, Compact Off-Heap Structures/Tuples In Java, using sun.misc.Unsafe to avoid VM-managed heap and bypass JVM memory limits. Not of the feint of heart.
UPDATE: A lot of interesting things in Thompson's comments.
Monday, October 15, 2012
JSR-255 (JMX2) and Guice
On a new project with Guice, then, how do I magically wire my managed objects to JMX? Sadly JSR-255, aka JMX2, did not make JDK6 or JDK7 (there's always JDK8). I live in the here and now, and relied before on Spring JMX annotations and MBeanExporter.
There's no full implementation of JMX2, but covering a good minimal feature set is pojo-mbean. How to get Guice to register @MBean-annotated objects? Use injectors:
class SomeModule extends AbstractModule {
@Override
protected void configure() {
bindListener(Matchers.any(), new JMXTypeListener());
}
}
class JMXTypeListener implements TypeListener {
@Override
public <I> void hear(TypeLiteral<I> type,
TypeEncounter<I> encounter) {
Class<? super I> rawType = type.getRawType();
// From pojo-mbean; eventually JSR-255
if (rawType.isAnnotationPresent(MBean.class))
encounter.register(new InjectionListener<I>() {
@Override
public void afterInjection(final I injectee) {
try {
// From pojo-mbean; eventually JSR-255
new MBeanRegistration(injectee,
objectName(rawType)).
register();
} catch (Exception e) {
encounter.addError(e);
}
}
});
}
private static <I> ObjectName objectName(Class<? super I> type)
throws MalformedObjectNameException {
return new ObjectName(type.getPackage().getName(), "type",
type.getSimpleName());
}
}
HTML5 Tips
I rarely have use for these things, but this one is highly practical: 8 Superlative Practices for Efficient HTML5 coding.