tag:blogger.com,1999:blog-50882972024-03-08T12:43:00.537+01:00Weblog of Andreas HochstegerTechnology related stuff ...Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.comBlogger296125tag:blogger.com,1999:blog-5088297.post-50120637304845708472011-11-20T00:37:00.001+01:002011-11-20T19:24:21.113+01:00Howto categorize JUnit test methods and filter them for executionI was looking for a solution to categorize test methods select them in a flexible way for running.
<br />
<br />
The closest thing I found was the article by Romain Linsolas which was very helpful for me:
<a href="http://linsolas.free.fr/wordpress/index.php/2011/02/how-to-categorize-junit-tests-with-maven/">http://linsolas.free.fr/wordpress/index.php/2011/02/how-to-categorize-junit-tests-with-maven/</a>
<br />
<br />
Romain's requirement was to categorize test classes and run a subset of them.
<br />
<br />
My test classes map directly to their implementation classes using the convention <implementationclassname>Test.java.
Some of the test methods in the same class run very fast, some slow and others require a network connection.
So I needed the ability to categorize tests on the method level and search for classes by file name convention (similar to the way the surefire maven plugin does it).
</implementationclassname><br />
<br />
My approach combined the approach from Romain with the class <a href="https://github.com/KentBeck/junit/blob/r4.10/src/main/java/org/junit/experimental/categories/Categories.java">Categories from JUnit</a>.
The modifications were that test suites can be annotated with a package name (@TestScanPackage), class name prefix (@TestClassPrefix), class name suffix (@TestClassSuffix) and a test method annotation (@TestMethodAnnotation) to scan for matching test classes in the class path.
It is also possible to annotate test methods with multiple categories (e.g. slow and requires an internet connection).
<br />
<br />
Here's a description of the relevant files:
<br />
<ul>
<li><b>SlowTestCategory.java:</b> Category class to mark slow tests.
</li>
<li><b>OnlineTestCategory.java:</b> Category to mark test which require an internet connection.
</li>
<li><b>SampleTest.java:</b> Example JUnit test class which uses the categories from above using the standard junit Category annotation.
</li>
<li><b>MyTestSuite.java:</b> Example test suite which uses FlexibleCategories as test runner.
</li>
<li><b>FlexibleCategories.java:</b> Test runner which does all the magic
</li>
<li><b>PatternClasspathClassesFinder.java:</b> Helper class for FlexibleCategories to find all classes in the classpath which match the annotations (@TestScanPackage, @TestClassPrefix, @TestClassSuffix, @TestMethodAnnotation)
</li>
</ul>
If you find this useful make you may be interested in the issue I filed for JUnit here:
<a href="https://github.com/KentBeck/junit/issues/363">https://github.com/KentBeck/junit/issues/363</a>
<br />
<br />
Here is an example that shows how to use it ...
<br />
<h3>
SlowTestCategory.java</h3>
<pre>/** This category marks slow tests. */
public interface SlowTestCategory {
}
</pre>
<h3>
OnlineTestCategory.java</h3>
<pre>/** This category marks tests that require an internet connection. */
public interface OnlineTestCategory {
}
</pre>
<h3>
SampleTest.java</h3>
<pre>public class SampleTest {
@Test
@Category({OnlineTestCategory.class, SlowTestCategory.class})
public void onlineAndSlowTestCategoryMethod() {
}
@Test
@Category(OnlineTestCategory.class)
public void onlineTestCategoryMethod() {
}
@Test
@Category(SlowTestCategory.class)
public void slowTestCategoryMethod() {
}
@Test
public void noTestCategoryMethod() {
}
}
</pre>
<h3>
MyTestSuite.java</h3>
<pre>/** MyTestSuite runs all slow tests, excluding all test which require a network connection. */
@RunWith(FlexibleCategories.class)
@ExcludeCategory(OnlineTestCategory.class)
@IncludeCategory(SlowTestCategory.class)
@TestScanPackage("my.package")
@TestClassPrefix("")
@TestClassSuffix("Test")
public class MyTestSuite {
}
</pre>
<h3>
FlexibleCategories.java</h3>
<pre>import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import org.junit.Test;
import org.junit.experimental.categories.Categories.CategoryFilter;
import org.junit.experimental.categories.Categories.ExcludeCategory;
import org.junit.experimental.categories.Categories.IncludeCategory;
import org.junit.experimental.categories.Category;
import org.junit.runner.Description;
import org.junit.runner.manipulation.NoTestsRemainException;
import org.junit.runners.Suite;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
/**
* This class is based on org.junit.experimental.categories.Categories from JUnit 4.10.
*
* All anotations and inner classes from the original class Categories are removed,
* since they will be re-used.
* Unfortunately sub-classing Categories did not work.
*/
public class FlexibleCategories extends Suite {
/**
* Specifies the package which should be scanned for test classes (e.g. @TestScanPackage("my.package")).
* This annotation is required.
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface TestScanPackage {
public String value();
}
/**
* Specifies the prefix of matching class names (e.g. @TestClassPrefix("Test")).
* This annotation is optional (default: "").
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface TestClassPrefix {
public String value();
}
/**
* Specifies the suffix of matching class names (e.g. @TestClassSuffix("Test")).
* This annotation is optional (default: "Test").
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface TestClassSuffix {
public String value();
}
/**
* Specifies an annotation for methods which must be present in a matching class (e.g. @TestMethodAnnotationFilter(Test.class)).
* This annotation is optional (default: org.junit.Test.class).
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface TestMethodAnnotation {
public Class<? extends Annotation> value();
}
public FlexibleCategories(Class<?> clazz, RunnerBuilder builder)
throws InitializationError {
this(builder, clazz, PatternClasspathClassesFinder.getSuiteClasses(
getTestScanPackage(clazz), getTestClassPrefix(clazz), getTestClassSuffix(clazz),
getTestMethodAnnotation(clazz)));
try {
filter(new CategoryFilter(getIncludedCategory(clazz),
getExcludedCategory(clazz)));
} catch (NoTestsRemainException e) {
// Ignore all classes with no matching tests.
}
assertNoCategorizedDescendentsOfUncategorizeableParents(getDescription());
}
public FlexibleCategories(RunnerBuilder builder, Class<?> clazz,
Class<?>[] suiteClasses) throws InitializationError {
super(builder, clazz, suiteClasses);
}
private static String getTestScanPackage(Class<?> clazz) throws InitializationError {
TestScanPackage annotation = clazz.getAnnotation(TestScanPackage.class);
if (annotation == null) {
throw new InitializationError("No package given to scan for tests!\nUse the annotation @TestScanPackage(\"my.package\") on the test suite " + clazz + ".");
}
return annotation.value();
}
private static String getTestClassPrefix(Class<?> clazz) {
TestClassPrefix annotation = clazz.getAnnotation(TestClassPrefix.class);
return annotation == null ? "" : annotation.value();
}
private static String getTestClassSuffix(Class<?> clazz) {
TestClassSuffix annotation = clazz.getAnnotation(TestClassSuffix.class);
return annotation == null ? "Test" : annotation.value();
}
private static Class<? extends Annotation> getTestMethodAnnotation(Class<?> clazz) {
TestMethodAnnotation annotation = clazz.getAnnotation(TestMethodAnnotation.class);
return annotation == null ? Test.class : annotation.value();
}
private Class<?> getIncludedCategory(Class<?> clazz) {
IncludeCategory annotation= clazz.getAnnotation(IncludeCategory.class);
return annotation == null ? null : annotation.value();
}
private Class<?> getExcludedCategory(Class<?> clazz) {
ExcludeCategory annotation= clazz.getAnnotation(ExcludeCategory.class);
return annotation == null ? null : annotation.value();
}
private void assertNoCategorizedDescendentsOfUncategorizeableParents(Description description) throws InitializationError {
if (!canHaveCategorizedChildren(description))
assertNoDescendantsHaveCategoryAnnotations(description);
for (Description each : description.getChildren())
assertNoCategorizedDescendentsOfUncategorizeableParents(each);
}
private void assertNoDescendantsHaveCategoryAnnotations(Description description) throws InitializationError {
for (Description each : description.getChildren()) {
if (each.getAnnotation(Category.class) != null)
throw new InitializationError("Category annotations on Parameterized classes are not supported on individual methods.");
assertNoDescendantsHaveCategoryAnnotations(each);
}
}
// If children have names like [0], our current magical category code can't determine their
// parentage.
private static boolean canHaveCategorizedChildren(Description description) {
for (Description each : description.getChildren())
if (each.getTestClass() == null)
return false;
return true;
}
}
</pre>
<h3>
PatternClasspathClassesFinder.java</h3>
<pre>import java.io.File;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
/**
*
* Modified version of ClasspathClassesFinder from:
* http://linsolas.free.fr/wordpress/index.php/2011/02/how-to-categorize-junit-tests-with-maven/
*
* The difference is, that it does not search for annotated classes but for classes with a certain
* class name prefix and suffix.
*/
public final class PatternClasspathClassesFinder {
/**
* Get the list of classes of a given package name, and that are annotated
* by a given annotation.
*
* @param packageName
* The package name of the classes.
* @param classPrefix
* The prefix of the class name.
* @param classSuffix
* The suffix of the class name.
* @param methodAnnotation
* Only return classes containing methods annotated with methodAnnotation.
* @return The List of classes that matches the requirements.
*/
public static Class<?>[] getSuiteClasses(String packageName,
String classPrefix, String classSuffix,
Class<? extends Annotation> methodAnnotation) {
try {
return getClasses(packageName, classPrefix, classSuffix, methodAnnotation);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* Get the list of classes of a given package name, and that are annotated
* by a given annotation.
*
* @param packageName
* The package name of the classes.
* @param classPrefix
* The prefix of the class name.
* @param classSuffix
* The suffix of the class name.
* @param methodAnnotation
* Only return classes containing methods annotated with methodAnnotation.
* @return The List of classes that matches the requirements.
* @throws ClassNotFoundException
* If something goes wrong...
* @throws IOException
* If something goes wrong...
*/
private static Class<?>[] getClasses(String packageName,
String classPrefix, String classSuffix,
Class<? extends Annotation> methodAnnotation)
throws ClassNotFoundException, IOException {
ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
String path = packageName.replace('.', '/');
// Get classpath
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(resource.getFile()));
}
// For each classpath, get the classes.
ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName, classPrefix, classSuffix, methodAnnotation));
}
return classes.toArray(new Class[classes.size()]);
}
/**
* Find classes, in a given directory (recursively), for a given package
* name, that are annotated by a given annotation.
*
* @param directory
* The directory where to look for.
* @param packageName
* The package name of the classes.
* @param classPrefix
* The prefix of the class name.
* @param classSuffix
* The suffix of the class name.
* @param methodAnnotation
* Only return classes containing methods annotated with methodAnnotation.
* @return The List of classes that matches the requirements.
* @throws ClassNotFoundException
* If something goes wrong...
*/
private static List<Class<?>> findClasses(File directory,
String packageName, String classPrefix, String classSuffix,
Class<? extends Annotation> methodAnnotation)
throws ClassNotFoundException {
List<Class<?>> classes = new ArrayList<Class<?>>();
if (!directory.exists()) {
return classes;
}
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
classes.addAll(findClasses(file,
packageName + "." + file.getName(), classPrefix, classSuffix, methodAnnotation));
} else if (file.getName().startsWith(classPrefix) && file.getName().endsWith(classSuffix + ".class")) {
// We remove the .class at the end of the filename to get the
// class name...
Class<?> clazz = Class.forName(packageName
+ '.'
+ file.getName().substring(0,
file.getName().length() - 6));
// Check, if class contains test methods (prevent "No runnable methods" exception):
boolean classHasTest = false;
for (Method method : clazz.getMethods()) {
if (method.getAnnotation(methodAnnotation) != null) {
classHasTest = true;
break;
}
}
if (classHasTest) {
classes.add(clazz);
}
}
}
return classes;
}
}
</pre>Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1163453030698439502006-11-13T22:22:00.000+01:002006-11-13T22:23:50.943+01:00Java goes GPLToday, Sun has released the <a href="http://www.sun.com/software/opensource/java/">details</a> about the open-sourcing of Java using the GPL v2. The <a href="https://openjdk.dev.java.net/">project OpenJDK</a> contains the HotSpot Virtual Machine and the Javac compiler. The <a href="http://www.sun.com/software/opensource/java/faq.jsp">FAQ</a> answers many questions. Seems like Sun really takes the open source community seriously which is highly appreciated!Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1139690857801060362006-02-11T21:47:00.000+01:002006-04-23T07:35:20.393+02:00GanttProject 2.0 released<div xmlns="http://www.w3.org/1999/xhtml">GanttProject 2.0 has been released recently.<br />It is a project scheduling application written in Java and has been re-written, as Eclipse RCP application.<br />Downloads are available from <a href="https://sourceforge.net/project/showfiles.php?group_id=72728">Sourceforge</a>.</div>Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com2tag:blogger.com,1999:blog-5088297.post-1138407740400593702006-01-28T01:22:00.000+01:002006-03-04T20:17:58.290+01:00WebsiteTips.com<blockquote><br /><p><a href="http://www.websitetips.com/">Websitetips.com</a> is an educational resource, provides CSS, HTML, and XHTML tutorials, graphics tutorials, articles, tips, information and resources to build or improve your Web site presence.</p><br /><p>You'll also find over 2,400 annotated resources around the web to HTML, CSS and color charts, font sites, search engine optimization sites, graphics and HTML tutorials and programs, usability and information architecture sites, informative articles, tips, and more.</p><br /></blockquote>Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com1tag:blogger.com,1999:blog-5088297.post-1138368218425763652006-01-27T14:23:00.000+01:002006-01-27T14:23:38.543+01:00Eclipse 3.1.2 releasedEclipse 3.1.2 has just been released to the public.<br />You can download it from the <a href="http://download.eclipse.org/eclipse/downloads/drops/R-3.1.2-200601181600/index.php">Eclipse Project Downloads page</a>.<br />Details can be found in the <a href="http://www.eclipse.org/eclipse/development/readme_eclipse_3.1.2.html">Release Notes</a>.Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1138368065798331712006-01-27T14:21:00.000+01:002007-04-11T21:52:43.570+02:00Eclipse BIRT 2.0 releasedVersion 2.0 of the Eclipse Business Intelligence and Reporting Tools (BIRT) have just been released.<br />You can download them from the <a href="http://download.eclipse.org/birt/downloads/">Eclipse BIRT Downloads page</a>.<br />You can read about the changes from the <a href="http://www.eclipse.org/birt/phoenix/project/notable2.0.php">New and Notable Features page</a>.Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com1tag:blogger.com,1999:blog-5088297.post-1136540417960675892006-01-06T10:40:00.000+01:002006-01-27T13:44:14.676+01:00Portable OpenOffice.org<div xmlns="http://www.w3.org/1999/xhtml"><a href="http://www.turdhead.com/">VeryVito</a> writes on <a href="http://slashdot.org/">Slashdot</a>: <blockquote>"Portableapps.com has released <a href="http://portableapps.com/apps/office/suites/portable_openoffice">Portable OpenOffice.org 2.01</a> -- the complete office suite you can run from a USB drive for complete access to both your files <em>and</em> your office apps -- anywhere you go. More than just a neat idea, <a href="http://www.turdhead.com/2006/01/04/you-can-take-it-with-you-portable-office-suite-on-a-usb-drive/">some say</a> it's a perfect example of "the kind of innovation developers can make when they don't have to worry about selling as many licenses of their work as possible." I don't imagine we'll see a portable <a href="http://office.microsoft.com/en-us/default.aspx">Microsoft Office suite</a> any time soon."</blockquote><br/>I can fully agree with him and welcome the innovation taking place in this area.</div>Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1133472420157690232005-12-01T22:27:00.000+01:002005-12-01T22:27:00.156+01:00K Desktop Environment (KDE) 3.5 ReleasedThe 29th of November was a great day for x.5 releases. After Firefox KDE too has released a new major release. Details can be taken from the <a href="http://kde.org/announcements/announce-3.5.php">release announcement</a>.
<br />
<br />My first impression after installing it on my AMD64 notebook with OpenSuse 10 was that it is significantly faster (in terms of starting new programs) than 3.4.x.Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1133472155177395932005-12-01T22:22:00.000+01:002005-12-01T22:22:35.226+01:00Firefox 1.5 releasedMozilla Firefox 1.5 has been released yesterday. It provides many great new features as you can read in the release <a href="http://www.mozilla.com/press/mozilla-2005-11-29.html">anouncement</a>.
<br />Both Firefox and Thunderbird have a <a href="http://www.mozilla.com/">new home</a> now at <a href="http://www.mozilla.com/">http://www.mozilla.com/</a>.Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1130575481766017792005-10-29T10:44:00.000+02:002005-10-29T10:44:42.953+02:00Custom Eclipse Builder<a href="http://ceb.sourceforge.net/">Custom Eclipse Builder</a>: "The Custom Eclipse Builder is a lightweight Ant-based project to build a company/personal customized Eclipse distribution including company/personal relevant plugins, preferences and settings."Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com1tag:blogger.com,1999:blog-5088297.post-1130257242419731542005-10-25T18:20:00.000+02:002005-10-25T18:20:42.426+02:00Remember The Milk<a href="http://www.rememberthemilk.com/">Remember The Milk</a>: "Never forget the milk (or anything else) again.
<br />Remember The Milk is the easiest and best way to manage your to-do lists online."
<br />
<br />Found through <a href="http://live.k78.info/2005/10/13/todos/">this blog entry</a>.
<br />
<br />It provides the following, according to their website:
<br />* Features galore: Sharing, publishing, notes... we've got it all.
<br />* Get reminded: Receive reminders via email, instant messenger, and SMS.
<br />* It's free: Hard to believe, we know, but it's true.
<br />Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1130256532966485612005-10-25T18:08:00.000+02:002005-10-25T18:08:53.013+02:00MyProgs - find new software, keep your program list online<a href="http://myprogs.net/">MyProgs - find new software, keep your program list online</a>: "This site allows you to keep a social list of the programs you use. After you sign up you can add programs to your unique list. You can view anyone else's programs and they can view yours. Extra user-defined data can be added to each program entry to organize and describe the program further such as program descriptions, a link to the program's homepage, and tags. You can use tags to categorize (and thus organize) programs so that you and others using this site will have an easier time finding new and interesting programs.
<br />RSS feeds are available at almost every page which allows you to track new programs using your news aggregator."
<br />
<br />This is really a great site!
<br />I just added <a href="http://myprogs.net/highstick">some of my programs</a>. More to come ...
<br />Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1127985540302705602005-09-29T11:19:00.000+02:002005-09-29T11:19:00.303+02:00Log4sh<a href="http://www.forestent.com/products/log4sh/">Log4sh</a>: "Log4sh runs along the same lines as the other excellent logging services from the Apache Software Foundation. It adds to that list the ability to integrate powerful logging capabilities into a shell script."Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1127985495647213212005-09-29T11:18:00.000+02:002005-09-29T11:18:15.723+02:00Jakarta Commons Email 1.0 released<a href="http://jakarta.apache.org/commons/email/">Jakarta Commons Email</a>: Commons-Email aims to provide a API for sending email. It is built on top of the Java Mail API, which it aims to simplify.
<br />There are also some <a href="http://jakarta.apache.org/commons/email/examples.html">examples</a> which show how simple it is to use.Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1122704361282539292005-07-30T08:19:00.000+02:002005-07-30T08:19:21.320+02:00Eclipse WTP 0.7 / BIRT 1.0.1RC1 releasedThe long awaited final release of the Eclipse Web Tools Platform 0.7 has been released. You can download it on the <a href="http://download.eclipse.org/webtools/downloads/drops/R-0.7-200507290654/">download page</a>.
<br />Additionally the Eclipse Business Intelligence and Reporting Tools 1.0.1RC1 have been released too: Download them <a href="http://download.eclipse.org/birt/downloads/build.php?build=M-R1-1.0.1RC1-200507290700">here</a>.Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1117655476289976072005-06-01T21:47:00.000+02:002005-06-01T21:51:16.296+02:00Abrüsten!!!"Abrüsten" is the german word for "disarm" which I finally did today and now I can continue my life with the usual freedom I had before ;-).Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1116536552279135542005-05-19T23:02:00.000+02:002005-05-19T23:02:32.323+02:00Orangevolt Ant Tasks<a href="http://sourceforge.net/projects/ovanttasks">SourceForge.net: Project Info - Orangevolt Ant Tasks</a>: "Orangevolt Ant Tasks (successor of ROXES Ant Tasks) provides 17 custom tasks for the famous Apache Jakarta Ant (http://ant.apache.org/) targeting java application deployment for *nix/windows and macosx. It is licensed under LGPL"Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1116534065223279212005-05-19T22:21:00.000+02:002005-05-19T22:21:05.256+02:00F-Spot<a href="http://www.gnome.org/projects/f-spot/">F-Spot</a>: "F-Spot is an application designed to provide personal photo management to the GNOME desktop. Features include import, export, printing and advanced sorting of digital images."
<br />
<br />Looks a bit like Adobe Photoshop Album 2.0 or Photoshop Elements 3.0 Organizer which I'm using now to organize my photos. Perhaps it evolves to a good Open Source alternative, which I can use :-).Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1112447331270292612005-04-02T15:08:00.000+02:002005-04-02T15:08:51.270+02:00Andreas Hochsteger @ Blogs RatingI just got a Google Alert for this page: <a href="http://www.blogsrating.com/andreas-hochsteger.html">Andreas Hochsteger @ Blogs Rating</a>.
<br />I didn't know that I was listed there and have already 140 votes. Curently the rating is at 6.41 - let's see if it's getting more, when I'll be writing more again :-).Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1109969148841511062005-03-04T21:45:00.000+01:002005-03-05T10:30:01.300+01:00Starting my Master ThesisYesterday I had a very interesting meeting with <a href="http://www.infosys.tuwien.ac.at/Staff/greif/">Gerald Reif</a> about my master thesis. The provisional working title is "Ontology visualizations for the Semantic Web".<br />This work will be a small piece for the <a href="http://www.infosys.tuwien.ac.at/weesa/">WEESA project</a> (Web Engineering for Semantic Web Applications) which aims to provide semantic information for web pages and integrate this development as part of the web engineering process for XML/XSLT based web applications. WEESA defines a flexible mapping between the application's XML schema and one ore more ontologies for automatic semantic annotation.<br /><br />My part will be to do a comparative evaluation of existing ontology editors and visualization tools which allow easy selection of classes and properties of different ontologies and makes the absolute URI available for the WEESA mapping definition. One tool will then be chosen and extended to the provide needed functionality.<br /><br />Depending on the effort it takes to implement the missing features of the chosen tool it might be possible to implement a prototype of the mapping editor too.<br /><br />Personally I'll try to cover some more things which I am interested at too:<br />* Version control of all artifacts concerning the master thesis (notes, emails, documentation, source code, ...) using <a href="http://subversion.tigris.org/">Subversion</a> and experimenting with decentral version control using <a href="http://svk.elixus.org/">SVK</a> for offline development.<br />* Project automation using <a href="http://cruisecontrol.sourceforge.net/">Cruise Control</a> or a similar tool.<br />* Unit Testing using <a href="http://www.junit.org/">JUnit</a> and related frameworks.<br /><br />All three concerns are described in the excellent books of the <a href="http://www.pragmaticprogrammer.com/bookshelf/">Pragmatic Bookshelf</a> which I read recently:<br />* <a href="http://www.pragmaticprogrammer.com/titles/svn/index.html">Pragmatic Version Control using Subversion</a><br />* <a href="http://www.pragmaticprogrammer.com/starter_kit/utj/index.html">Pragmatic Unit Testing: in Java using JUnit</a><br />* <a href="http://www.pragmaticprogrammer.com/starter_kit/auto/index.html">Pragmatic Project Automation: How to Build, Deploy, and Monitor Java Applications</a><br /><br />Stay tuned for further updates ...Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1109099279123311572005-02-22T20:07:00.000+01:002005-02-22T20:07:59.123+01:00Joda Time - Java date and time API<a href="http://joda-time.sourceforge.net/">Joda Time - Java date and time API - Home</a>: "Joda-Time provides a quality replacement for the Java date and time classes. The design allows for multiple calendar systems, while still providing a simple API. The 'default' calendar is the ISO8601 standard which is used by XML. The Gregorian, Julian, Buddhist and Coptic systems are also included, and we welcome further additions. Supporting classes include time zone, duration, format and parsing."
<br />
<br />Production-ready release 1.0 with Apache License 2.0 has just been released!Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1108805242713150362005-02-19T10:27:00.000+01:002005-02-19T22:13:05.256+01:00Got GMail accountYesterday I got this lucky mail from google, starting with the following message:<br /><cite><br />Hi there,<br /><br />Thanks for signing up to be updated on the latest Gmail happenings. We hope it's been worth the wait, because we're excited to finally offer you an invitation to open a free Gmail account! Just click on this link to create your new account:<br /></cite><br /><br />After a long time waiting I got one finally, thanks!Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1108755797954164112005-02-18T20:43:00.000+01:002005-02-18T20:43:17.953+01:00mSpace - Exploring The Semantic Web | mSpace<a href="http://mspace.sourceforge.net/?q=node/1">mSpace - Exploring The Semantic Web | mSpace</a>: "mSpace is an interaction model designed to allow a user to navigate in a meaningful manner the multi-dimensional space that an ontology can provide. mSpace offers potentially useful slices through this space by selection of ontological categories.
<br />
<br />mSpace is fully generalised and as such, with a little definition, can be used to explore any knowledge base (without the requirement of ontologies!)."Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1108670961731352192005-02-17T21:09:00.000+01:002005-02-17T21:09:21.733+01:00Trac<a href="http://www.edgewall.com/trac/">Edgewall Software: Trac</a>: "Trac is an enhanced wiki and issue tracking system for software development projects."
<br />
<br />Particularly interesting is, that it integrates a bug tracking system with <a href="http://subversion.tigris.org/">Subversion</a>.Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0tag:blogger.com,1999:blog-5088297.post-1107275369427179952005-02-01T17:29:00.000+01:002005-02-01T17:29:29.426+01:00MindRaider - Semantic Web Outliner<a href="http://mindraider.sourceforge.net/index.html">MindRaider - Semantic Web Outliner</a>: "MindRaider is Semantic Web outliner. It aims to connect the tradition of outline editors with emerging technologies. MindRaider mission is to organize not only the content of your hard drive but also your cognitive base and social relationships in a way that enables quick navigation, concise representation and inferencing."
<br />
<br />That's a really interesting piece of software for organizing your mind!Andreashttps://www.blogger.com/profile/06186585562935467806noreply@blogger.com0