| M | D | M | D | F | S | S |
|---|---|---|---|---|---|---|
| « Feb | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||
- db4o (2)
- generics (2)
- java (3)
- leopard (2)
- Mac (3)
- persistence (1)
- rails (1)
- ruby (2)
- snow leopard (1)
- tiger (1)
- Uncategorized (1)
- 9.2.2010: Verschiedene Ruby Versionen parallel installieren
- 22.4.2009: Rails unter Leopard installieren
- 16.4.2009: Ich steige auf Mac um (ob das wohl gut geht)
- 19.3.2009: Ruby - Dinge, die ich mir einfach nicht merken kann
- 28.10.2005: Java 5.0 - Generics und ihre Tücken
- 26.10.2005: DB4O 5.0 Developer Release ist raus
- 19.10.2005: Maven2: Hilft das wirklich?
- 18.10.2005: DB4O ein kleiner Lichtblick am OOP-Himmel?
- 18.10.2005: SpringAOP und Java5 Annotations
- 18.10.2005: Der Einstieg
Verschiedene Ruby Versionen parallel installieren
9.2.2010 von thommy.
Was war das früher für ein Gefrickel! Aber jetzt ist Alles ganz einfach. Sich einfach hier schlau machen.
Geschrieben in snow leopard, Mac, ruby | Keine Kommentare »
Rails unter Leopard installieren
22.4.2009 von thommy.
Da kann ich nur auf folgende Seite verweisen, die das wirklich gut abdeckt:
Robby on Rails installiert Rails
Und zur Installation von memcached verweise ich auf:
Geschrieben in rails, leopard, Mac | Keine Kommentare »
Ich steige auf Mac um (ob das wohl gut geht)
16.4.2009 von thommy.
Ja, es ist soweit. Heute kamen unsere MacBooks (MacBookPro) und wurden auch gleich aufgebaut und konfiguriert. Die nächsten Tage werden zeigen, ob es einem eingeschworenen Windows-User möglich ist, auch unter Leopard produktiv zu werden. Ich bin offenen Geistes und willig. Nun zeige Leopard, ob Alles Gold ist, was an dir glänzt!
Geschrieben in leopard, Mac | Keine Kommentare »
Ruby - Dinge, die ich mir einfach nicht merken kann
19.3.2009 von thommy.
Hier sollen einfach ein paar Ruby Klassen und ihre Methoden stehen, die ich zwar oft brauche, mir aber einfach nicht merken kann.
- language constructs
- Loops
- case:
case xxx
when y
#do
when z
#do
else
#do
end
- case:
- Loops
- Object
- respond_to?: Returns true if obj responds to the given method. Private methods are included in the search only if the optional second parameter evaluates to true.
- Array
- delete:Deletes items from self that are equal to obj. If the item is not found, returns nil. If the optional code block is given, returns the result of block if the item is not found.
- Enumerable
- include?:Returns true if any member of enum equals obj. Equality is tested using ==.
Geschrieben in ruby | Keine Kommentare »
Java 5.0 - Generics und ihre Tücken
28.10.2005 von admin.
Einmal mehr verschwand ich heute in den Untiefen der neuen Java Tiger Möglichkeiten und verbiss mich an einem Problem, das nicht nur meines sein dürfte.
Soll bei einer parametrisierten Klasse in einer Methode auf Typ-Information (also Parametriesierungs-Informationen; in diesem Fall der Typ-Parameter) zurückgegriffen werden, so ist das schlicht unmöglich, da diese Informationen ja vom Compiler gelöscht werden (type erasure). Etwas rumgoogeln hilft ja bekanntlich (fast) immer weiter und so fand ich diese sehr lehrreiche Seite.
Kurz zusammengefasst: Muss eine Methode einer parametrisierten Klasse auf Typ-Informationen zurückgreifen, so muss diese als Argument übergeben werden. Und hier noch ein Beispiel:
class Test<Typ> {
public String doSomething(Class<Typ> clazz) {
return Other.methodNeedsClass(clazz);
}
}
Anders kann man nicht an die Klasse des Typ-Parameters ‘Typ’ gelangen. Es wären vielleicht noch Umwege über Reflection möglich, aber davon vielleicht ein andermal.
Geschrieben in tiger, generics | Keine Kommentare »
DB4O 5.0 Developer Release ist raus
26.10.2005 von admin.
Heute kam’s per Newsletter, DB4O 5.0 Developer Release ist draussen. Nach einigen Erfahrungen mit DB4O in der letzten Zeit (speziell mit Standalone Server als Windows Service; ich werde darüber berichten) bin ich gespannt auf die Neuerungen. Es ist bereits runtergeladen und ich werd’s noch heute in eines der laufenden Projekte einbinden und auch über diese Erfahrungen schreiben. Bis dann….
Geschrieben in persistence, db4o | Keine Kommentare »
Maven2: Hilft das wirklich?
19.10.2005 von admin.
Bin gerade dabei von Maven auf Maven2 umzusteigen (vielleicht etwas großspurig, denn ich bin erst vor ca. einer Woche von Ant auf Maven umgestiegen).
Leider ist die Dokumentation etwas dürftig und gerade im Hinblick auf multi-module Fähigkeiten geradezu mies. Deshalb hier ein kleiner Sidestep zu multi-projekt Fähigkeiten von Maven1/2:
Michael Nielsen’s Blog: Maven & multiple source trees
Demnächst mehr von diesem sicher interessanten Thema.
Geschrieben in java | Keine Kommentare »
DB4O ein kleiner Lichtblick am OOP-Himmel?
18.10.2005 von admin.
Hibernate und MySQL sind ja definitiv ein nettes Gespann für Open-Source-Entwickler.
Das Ganze noch mit Spring kombiniert und man hat die Persistenz im Griff!
Doch irgendwann kommt man zwischen der Erstellung von tausenden von DAOs und Mapping-Files (auch wenn diese XDoclet fast automatisch erstellt) an einen Punkt, wo man sich gerne ein paar Komplexitätsstufen ersparen möchte.
Als Java-Magazin-Leser kam mir dann ein kleiner Artikel über DB4O sehr entgegen.
Keine Mappings, keine DAOs, kein Garnichts!!! Objekte abspeichern und gut. So wünscht man sich das. Und das Ganze ist Opensource und performant.
Jetzt setzte ich mal ein kleines Projekt damit um und werde später über den Einsatz von DB4O berichten.
Geschrieben in java, db4o | Keine Kommentare »
SpringAOP und Java5 Annotations
18.10.2005 von admin.
Bisher habe ich für Spring (und speziell für SpringAOP) Commons Attributes als Annotationen (z.B. für Transaktionen) verwendet. Ein neues Projekt zwang mich nun erneut über Annotations nachzudenken. Der genaue Sachverhalt sei dahingestellt, auf jeden Fall wollte ich mit Java5 Annotations Methoden annotieren, die durch AOP eine “Sonderbehandlung” erfahren sollten.
Nach einer kleinen Weile, die ich mit Internetrecherche verbrachte, wurde mir klar, dass dies wirklich einfach mit Spring-Bordmitteln umzusetzen war. Deshalb hier etwas Beispielcode für einen einfachen Trace-Advice…
Der Trace-Advice soll für annotierte Methoden die Ausführungszeit ausgeben (mittels Commons Logging).
Dazu benötigen wir natürlich den Advice, einen PointCut, die Annotation und einen Advisor, der aus Bequemlichkeitsgründen den Advice und den Pointcut zusammenfasst. Damit nun eine Methode getraced werden kann, muss deren beherbergende Klasse mittels eines Proxies an den Advisor gebunden werden. Das übernimmt jedoch bereits der DefaultAdvisorAutoProxyCreator, der alle definierten Beans automatisch mit definierten Advisors verbindet. Dies alles führt zu folgendem Spring-Konfigurations-Ausschnitt:
<!-- gibt für alle mit @Trace annotierten Methoden die Ausführungszeit an -->
<bean id="traceAdvisor" class="com.quimron.omecs_db4o.util.TraceAdvisor"/>
<!-- der autoProxyCreator verbindet angegebene Advisors mit den im PointCut beschriebenen Klassen (it's magic) -->
<bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
Die @Trace-Annotation sieht dann folgendermaßen aus:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Trace {}
Der Pointcut wird als StaticMethodMatcherPointcut definiert:
/** @see org.springframework.aop.MethodMatcher#matches(java.lang.reflect.Method, java.lang.Class) */
public class TracePointcut extends StaticMethodMatcherPointcut {
public boolean matches(Method method, Class clazz) {
return (method.getAnnotation(Trace.class) != null);
}
}
Der benötigte Advice ist ebenfalls relativ simpel:
public class TraceInterceptor implements MethodInterceptor {
/** @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation) */
public Object invoke(MethodInvocation invocation) throws Throwable {
long start = System.currentTimeMillis();
Object result = invocation.proceed();
log.info("Das Ausführen von " + invocation.getMethod().getName() + " dauerte " + (System.currentTimeMillis() - start) + " ms");
return result;
}
}
Und der Advisor wird einfach wie folgt implementiert:
/** @see org.springframework.aop.PointcutAdvisor#getPointcut() */
public class TraceAdvisor implements PointcutAdvisor {
public Pointcut getPointcut() {
return new TracePointcut();
}
/** @see org.springframework.aop.Advisor#isPerInstance() */
public boolean isPerInstance() {
return false;
}
/** @see org.springframework.aop.Advisor#getAdvice() */
public Advice getAdvice() {
return new TraceInterceptor();
}
}
Ich hoffe, dieses kleine Beispiel hilft auch anderen weiter, schnell mit Java5 Annotations und SpringAOP zu einem Ergebniss zu kommen.
Geschrieben in java, generics | Keine Kommentare »
Der Einstieg
18.10.2005 von admin.
Heute bei blogg.de angemeldet. Mal schauen, ob ich zum Blogger avanciere. Es soll hier meistens um meine technologischen Herausforderungen gehen. Sollten die dann zu einer Lösung führen, dann hoffe ich, dass diese auch anderen nutzt.
Das ist auch die eigentliche Intention und Motivation für diese Blogg-Tätigkeit. Das ständige ergebnislose googeln brachte mich immer wieder zu der Gewissheit, gefundene Lösungen irgendwo zur Verfügung stellen zu wollen.
Jetzt schaun mer mal, ob ich das auch so einhalten kann.
Geschrieben in Uncategorized | Keine Kommentare »