Live Google Earth

Wednesday, 3. February 2010 Andreas Höhmann Leave a comment

Es gibt nun eine Anwendung für Google Earth, mit der man Bilder von Webcams in die Google Earth Landschaft einbauen kann.

Mit der Anwendung kann man Bilder von Webcams auf die Objekte in Google Earth mappen.

Der Golemartikel mit Video findet sich hier. Die Seite von Live3D ist aber im Moment leider nicht zu erreichen.

Wenn ich mir überlege wo es bereits überall Kameras gibt, könnte dass Google Earth revolutionieren. Dumm nur das man an die Daten von Sicherheitskamera’s etc wohl nicht rankommen wird.

Ein paar schnell gegoogelte Kameras:

PS: Sowas ähnliches gab es bereits 2007 ;) !

Categories: Uncategorized Tags: , , ,

Leckere Wiesenhof Hühnchen

Tuesday, 12. January 2010 Andreas Höhmann Leave a comment

Über die Zustände in einem der Wiesenhof Mastanlagen ließ hier.

Categories: Uncategorized Tags: ,

QcMylyn 0.2.7 is out!

Friday, 4. December 2009 Andreas Höhmann Leave a comment

The QC Mylyn Team proudly presents the 0.2.7 Release …

Homepage

Changelog

Eclipse Update Site

We need Feedback! :D

Categories: Eclipse, Plugins Tags: , ,

No Angel – Nadja Benaissa droht Haftstrafe

Wednesday, 2. December 2009 Andreas Höhmann Leave a comment

Damit muss nun “ganz offiziell” der Nachweis von HIV und die daraus resultierende AIDS Erkrankung vor Gericht dargelegt/aufgerollt werden.  AIDS-Kritiker könnten damit wiederlegt werden oder auch nicht. Ich bin gespannt.

Der Artikel befindet hier.

Informatation zu HIV hier und AIDS hier.

AIDS-Kritiker finden sich hier oder auch hier.

JSF Tip – execution order for ActionListener and PropertyActionListener

Wednesday, 2. December 2009 Andreas Höhmann Leave a comment

Until now I don’t notice this:

According to the book ‘Core JSF Programming’, the method that is binded to ‘actionListener’ attribute in component tag will always been invoked earlier than the method of <f:actionListener>. In my opinion, <f:setPropertyActionListener> is a kind of <f:actionListener>. Therefore, its method will not be invoked until ‘actionListener’ attribute method finished. I have made a test and it proved my guess.

Found here.

Zuviel Uran im deutschen Trinkwasser

Thursday, 26. November 2009 Andreas Höhmann 1 comment

Ließ bei Foodwatch nach …

Concept to handle minimal and maximal tests in a maven project

Thursday, 26. November 2009 Andreas Höhmann Leave a comment

In real world applications we have all too often external dependencies in test cases. Sometimes theses third party are not always available (i.e. remote webservices).

For continuous integration I want check a minimal set of tests but for my local development i want check a maximal set of tests. I want run my tests on command line (via maven) and in eclipse (via testng-plugin).

Here is my idea to do that …

My project super pom defines 2 profiles:

  • test-min
    1. active by default
    2. exclude testng groups (online-tests, thirdparty-tests,…)
  • test-max
    1. run a defined testng suite
    2. the suite defines a maximal set of test (all testng groups)
<profiles>
  <profile>
    <id>test-min</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <build>
      <plugins>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <inherited>true</inherited>
          <configuration>
            <excludedGroups>${excludedTestGroups}</excludedGroups>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
  <profile>
    <id>test-max</id>
    <build>
      <plugins>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <inherited>true</inherited>
          <configuration>
            <suiteXmlFiles>
              ${basedir}/src/test/resources/Testsuite.xml
            </suiteXmlFiles>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>
<properties>
  <excludedTestGroups>online,integration,thirdparty</excludedTestGroups>
</properties>

Each subproject must define a testng src/test/resources/Testsuite.xml:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite for Foobar">
  <test name="Online Tests">
    <packages>
      <package name="de.foobar.*" />
    </packages>
    <groups>
      <run>
        <include name="online" />
      </run>
    </groups>
  </test>
  <test name="Integration Tests">
    <packages>
      <package name="de.foobar.*" />
    </packages>
    <groups>
      <run>
        <include name="integration" />
      </run>
    </groups>
  </test>
  <test name="Thirdparty Tests">
    <packages>
      <package name="de.foobar.*" />
    </packages>
    <groups>
      <run>
        <include name="thirdparty" />
      </run>
    </groups>
  </test>
  <!-- Each project can define MORE groups: i.e. "interactive" -->
  <test name="Other Tests">
    <packages>
      <package name="de.foobar.*" />
    </packages>
    <groups>
      <run>
        <exclude name="online" />
        <exclude name="integration" />
        <exclude name="thirdparty" />
        <!-- Each project can define MORE groups: i.e. "interactive" -->
      </run>
    </groups>
  </test>
</suite>

If the sub project defines more exclude groups (i.e. a additional “interactive” group) then the pom must overwrite the excludedTestGroups property:

<properties>
  <excludedTestGroups>online,integration,thirdparty,interactive</excludedTestGroups>
</properties>

To check the correct configuration of the two profiles we can use help:effective-pom:

mvn -Ptest-min help:effective-pom | less

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <excludedGroups>online,integration,thirdparty,interactive</excludedGroups>
  </configuration>
</plugin>

mvn -Ptest-max help:effective-pom | less

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <suiteXmlFiles>
      <suiteXmlFile>d:\foobar\src/test/resources/Testsuite.xml</suiteXmlFile>
    </suiteXmlFiles>
  </configuration>
</plugin>

Now I can run min/max tests for each project which depend on the above super-pom. The test-min is the default profile and would be used on the continuous integration system (i.e. TeamCity).

Try it :)

Categories: Maven Tags: , , , ,

Maven https repository with self-signed ssl certificate

Tuesday, 17. November 2009 Andreas Höhmann 1 comment

For a private project I try to use nexus behind apache and ssl. I used a self-signed certificate.

But each nexus repository request ends with a security exception:

[WARNING] repository metadata for: 'artifact org.apache.maven.plugins:maven-enforcer-plugin' could not be retrieved from repository: nexus-plugin-releases due to an error: Error transferring file: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

I found many site for that problem and they describe always the same solution

import the self signed cert in your local truststore!

… here are the steps:

  1. download the certificate
  2. create a local truststore and import the certificat
  3. call maven with the correct security properties

The import is simple  (java keytool):

keytool.exe -importcert
            -alias nexus-xxx
            -keystore xxx.jks
            -storepass secret
            -file xxx.crt

For maven I’m using a cygwin bash alias:

alias mvn_xxx='/cygdrive/d/maven-2.2.1/bin/mvn
-gs "d:/maven-2.2.1/conf/settings-xxx.xml"
-s "d:/maven-2.2.1/conf/settings-xxx.xml"
-Djavax.net.ssl.trustStore=d:/maven-2.2.1/conf/xxx.jks
-Djavax.net.ssl.trustStorePassword=secret'

I point the global config  (-gs) and the personal config (-s) to the same file to ignore other configuration from my default maven config file (i.e. common mirros settings / repositories etc.).

And at least here is my complete maven setting-nexus settings:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/settings/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>D:\maven-repository-xxx</localRepository>

  <mirrors>
    <mirror>
      <id>xxx-nexus-snapshots</id>
      <mirrorOf>nexus-snapshots</mirrorOf>
      <url>https://nexus.xxx.com/content/groups/public-snapshots/</url>
    </mirror>
    <mirror>
      <id>xxx-nexus-snapshots</id>
      <mirrorOf>nexus-plugin-snapshots</mirrorOf>
      <url>https://nexus.xxx.com/content/groups/public-snapshots/</url>
    </mirror>
    <mirror>
      <id>xxx-nexus-releases</id>
      <mirrorOf>nexus-releases</mirrorOf>
      <url>https://nexus.xxx.com/content/groups/public/</url>
    </mirror>
    <mirror>
      <id>xxx-nexus-releases</id>
      <mirrorOf>nexus-plugin-releases</mirrorOf>
      <url>https://nexus.xxx.com/content/groups/public/</url>
    </mirror>
    <mirror>
      <id>xxx-nexus-releases</id>
      <mirrorOf>*</mirrorOf>
      <url>https://nexus.xxx.com/content/groups/public/</url>
    </mirror>
  </mirrors>

  <profiles>
    <profile>
      <id>xxx-nexus-mirror</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
        <repository>
          <id>nexus-releases</id>
          <url>http://foobar</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
        <repository>
          <id>nexus-snapshots</id>
          <url>http://foobar</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>nexus-plugin-releases</id>
          <url>http://foobar</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </pluginRepository>
        <pluginRepository>
          <id>nexus-plugin-snapshots</id>
          <url>http://foobar</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>

  <servers>
    <server>
      <id>xxx-nexus-releases</id>
      <username>foo</username>
      <password>bar</password>
    </server>
    <server>
      <id>xxx-nexus-snapshots</id>
      <username>foo</username>
      <password>bar</password>
    </server>
  </servers>

</settings>

You can replace xxx with your personal domain-alias.

Categories: Maven Tags: , , , , , , ,

Richfaces modal panel default formular action

Monday, 16. November 2009 Andreas Höhmann Leave a comment

Each input dialog should have a default action for good useability.

If the user hit ‘Enter’ then the default action should execute.

Here is my example of a richfaces modal edit dialog for such a requirement …

The dialog have input fields and 3 actions:

  • save – is the default action if the user hit ‘Enter‘ anywhere in the formular
  • cancel – is the default action if the user hit ‘Esc‘ anywhere in the formular
  • reset
<rich:modalPanel id="edit_dialog">

   <a4j:form id="edit_form" ajaxSubmit="true">

     <h:outputLabel value="What's your title:" for="title"/>
     <h:inputText  id="title" value="#{bean.title}"/>
     <h:outputLabel value="What's your name:" for="name"/>
     <h:inputText  id="name" value="#{bean.name}"/>

       ...

     <a4j:commandButton id="save"
          value="Save"
          action="#{save}"
          type="submit"
          oncomplete="if(#{facesContext.maximumSeverity==null})Richfaces.hideModalPanel('edit_dialog')"/>

     <a4j:commandButton id="reset"
          value="Reset"
          action="#{bean.reset}"
          limitToList="true"
          reRender="edit_form"
          ajaxSingle="true"
          type="reset"/>

     <a4j:commandButton id="cancel"
          value="Cancel"
          action="#{bean.cancel}"
          ajaxSingle="true"
          oncomplete="Richfaces.hideModalPanel('edit_dialog')"/>

     <rich:hotKey key="return"
         selector="#edit_form"
         handler="${rich:element('edit_form:save')}.click();event.stopPropagation();event.preventDefault(); return false;"
         disableInInput="false"/>

      <rich:hotKey key="esc"
         selector="#edit_form"
         handler="${rich:element('edit_form:cancel')}.click();event.stopPropagation();event.preventDefault(); return false;"
         disableInInput="false"/>

   </a4j:form>

</rich:modalPanel>

It’s important to define ajaxSubmit=”true” for the form! This avoid “none ajax submit of html formulars”. I will explain this in a later blog :)

With rich:hotKey I bind 2 key events to the edit formular:

  • on ‘enter’ – the handler click the save button
  • on ‘esc’ – the handler click the cancel button

Try it :D

Categories: Richfaces, jQuery Tags: , , , ,

Richfaces modal panel autofocus first input element

Monday, 16. November 2009 Andreas Höhmann Leave a comment

With jQuery it’s easy to focus the first visible input element (textfield, textarea or selectbox) for a rich:modalPanel:

<rich:modalPanel onshow="autofocus('dialog_content')">
  <h:panelGrid id="dialog_content" columns="1" width="100%" cellpadding="0" cellspacing="0">
     <a4j:form ajaxSubmit="true">
       <h:outputLabel value="What's your name:" for="name"/>
       <h:inputText  id="name" value="#{bean.name}"/>
       ...
       <a4j:commandButton id="save" value="Save my name" action="save"/>
     </a4j:form>
  </h:panelGrid>
</rich:modalPanel>
function autofocus(containerId) {
  var element = jQuery(":input:not(:button):visible:enabled:first", '#'+containerId);
  if (element != null) {
    element.focus().select();
  }
}
Categories: Richfaces, jQuery Tags: , , , , ,