Dienstag, 27. November 2012

Jazz - der Traum

damit das auch mal wieder gesagt ist: so zu arbeiten wäre der Traum.
Aber eben - die Realität ist: unverlinkbare Word-Dokumente, Excel - etc…

Jazz Platform



Mittwoch, 21. November 2012

Erwartete Exception in JUnit

Wieder ein Klassiker, den ich jedesmal vergesse, wenn ich ihn brauche - drum hier im Blog. Ich erwarte in JUnit einen Exception, und möchte auch die Message der Exception testen. Hier ist die Lösung: Möchte man die Message nicht anschauen, erwartete bloss, dass es knallt, genügt dies:

Donnerstag, 15. November 2012

Reflections

Um Klassen zur Laufzeit zu laden, habe ich grad folgendes kleines, sehr mächtiges Framework entdeckt:

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


Damit lässt sich sehr einfach eine einfache Plug-In Architektur erstellen, um - in diesem Fall - zur Laufzeit Policies zu laden, die eine Policy-Klasse erweitert.

Bemerkung: wie zu erwarten war, funktioniert das natürlich - wie immer in solchen Fällen - unter JBoss nicht, wegen Klassenlader-Problemen. Wir suchen die Lösung noch...


Samstag, 10. November 2012

Warum Java?!? Ich mach doch nichts. Der Facebook-Updater.

Ich habe mein "Mountain Lion" frisch installiert, noch ohne Java (neuerdings hat ein frischer Mac noch kein Java...) - und beim jeden einloggen kommt die Meldung:
Was ist das?!? Ich habe nichts mit Java gestartet. Läuft da irgendein Zeugs, das ich nicht will?!?

Ein Blick in die Console verrät mir: 
Nov 10 20:48:34 oscar.local Download Java Components[3256]: Java Install cancelled


Und, eine Prozess-ID tiefer, ein Klick früher, der Übeltäter: 
Nov 10 20:48:26 oscar com.apple.launchd.peruser.501[141] (com.facebook.videochat.rschumm.updater[3255]): Exited with code: 1


Facebook? Wtf... 
Es stellt sich heraus, dass facebook-Video-Chat, eine Abklatsch-Version von Skype, stinkfrech einen LaunchAgent installiert, der immer wieder (und auch beim Einloggen) den Befehl
java -cp /Users/rschumm/Library/Application Support/Facebook/video/1.2.0.158/FacebookUpdate.jar
laufenlässt. Gopf :-) 

Getriggert wird das durch
/Users/rschumm/Library/LaunchAgents/com.facebook.videochat.rschumm.plist



Wenn ich die Datei lösche, ist der Spuk vorbei. Und ich habe was über LaunchAgents gelernt. 
Weitere Infos: 

Wenn das alle so machen würden wie Facebook.... dann könnte man noch lange warten mit Einloggen. 

Mittwoch, 7. November 2012

TimeMachine: neue HD

Mac OS X ist schon cool…
Ich habe soeben eine neue Harddisk in mein gutes altes MacBook Pro unter «Mac OS X Mountain Lion» eingebaut. Mit dem Migrations-Assi alles von der alten HD importiert. Dauert stundenlang, aber klappt. (Man könnte das auch von TimeMachine machen.)
Nun kommt aber die grosse Frage: neue Harddisk, neue UUID der Harddisk - peilt das TimeMachine oder macht es ein volle Backup und verliert die History?

Die Antwort im system.log:


Nov  7 18:56:21 oscar.local com.apple.backupd[419]: Backing up to: /Volumes/Time Machine-Backups/Backups.backupdb
Nov  7 18:56:24 oscar.local com.apple.backupd[419]: Inherited root volume Macintosh HD, UUID: BFEA6DB7-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
Nov  7 18:56:25 oscar.local com.apple.backupd[419]: Event store UUIDs don't match for volume: Macintosh HD
Nov  7 18:56:34 oscar.local com.apple.backupd[419]: Deep event scan at path:/ reason:must scan subdirs|new event db|
Nov  7 18:56:34 oscar.local com.apple.backupd[419]: First backup after disk inheritance for / - complete scan required
Nov  7 18:56:34 oscar.local SystemUIServer[180]: Warning: accessing obsolete X509Anchors.


cool… First backup after disk inheritance - die History geht also nicht verloren.

mvn release: update Versions

Um mit dem Maven Release Plug-In Versionsnummer anzupassen, ohne den ganzen anderen Karsumpel zu machen:

mvn release:update-versions -DautoVersionSubmodules=true



Details:
http://maven.apache.org/plugins/maven-release-plugin/examples/update-versions.html


Freitag, 2. November 2012

Java aus xsd: JAXB

Etwas kleines, nicht neues, einfaches, aber extrem cooles:

Man hat ein Schema, z.B. das von XACML3,
http://docs.oasis-open.org/xacml/3.0/xacml-core-v3-schema-wd-17.xsd
und möchte davon mit Java eine Instanz abfüllen.

Nichts einfacher als das mit JAXB:

Man stelle das Schema in /src/main/xsd und lasse einen mvn install laufen, mit folgendem Plugin konfiguriert:



Die generierten Klassen landen in target und werden von eclipse automatisch in den build-path genommen. Fertig. 



Die Klassen können dann ganz einfach benützt werden: hier wird z.B. ein XACML-String von JAXB geparst und in Java umgewandelt:


Proxy...

Die Arbeits-Bremse in jedem Unternehmensnetzwerk: Proxy. Jedesmal muss ich nachschauen, darum hier:



System.setProperty("http.proxyHost", "myProxyServer.com");
System.setProperty("http.proxyPort", "80");
bzw: -Dhttp.proxyHost=10.0.0.100 -Dhttp.proxyPort=8800

Dienstag, 16. Oktober 2012

Links zum Arbeitsfluss mit Git

kleine Präsentation:
http://prezi.com/i4lvgkre3sj6/git/

Arbeitsfluss


Interessanter Artikel über den Arbeitsfluss mit Git: 
A successful Git branching model







Arbeitsfluss II - Atlassian

GitFlow Workflows: 

Die Sache mit den Branches


Bester Artikel: 


Literatur

ProGit, das Standartwerk: 



Guter Vortrag über die Internals von git: 




git Schule 

Interaktive online-Kommandozeilenumgebung zum üben.



Donnerstag, 27. September 2012

Announcing Source Code Pro: Schrift.

Etwas schönes von Adobe:
Announcing Source Code Pro

eine neue Schrift.




Maqetta

Das sieht ja mal spannend aus:

http://maqetta.org/

Wann ist HTML5 gleich weit wie XCode? ;-)



CVS und so...

Ja, peinlich, aber wir setzten immer noch CVS ein. Der Tenor: «Warum ändern, wir können alles mit CVS machen…»
Eben nicht :-(

Die Fehler


Was genau passiert, ist unklar: auf jeden Fall ist das Arbeiten fast unmöglich. Bei jedem Sync. meldet Eclipse outgoint changes oder conflicts von Dingen, die man gar nicht angerührt hat. Oder 1000x mal «the file is out of sync with the filesystem».
Wer hat sonst noch diese Probleme? Liegt’s an CVS (wohl eher nicht). An Eclipse? An der hierarchischen Projektstruktur, wo alle Projekte doppelt vorkommen?


typische CVS-Fehlermeldung, wenn ich lokal gar nichts geändert habe. 


Netbeans


Ich wollte nun grad nachschauen, ob Netbeans auch so Probleme hat wie Eclipse und, grosse Überraschung: Netbeans unterstütz gar kein CVS mehr :-) Ausser man installiert es nach.
Hmm, vielleicht sollte man CVS wirklich aufgeben und git einführen...
"Ok", denke ich, "installiere ich halt das CVS-Plug-In". Aber eben, denkste... natürlich geht auch das nicht, der Proxy verhindert den Zugriff auf die Update-Site... fail.. fail...

Dienstag, 28. August 2012

Die Sache mit «WhatsApp»

Seit einigen Tagen bin ich nicht mehr mit WhatsApp erreichbar. WhatsApp war für mich nicht benutzbar, weil ich der App nicht erlaubt habe, auf mein Adressebuch zuzugreifen. Eine - vielleicht - etwas paranoide Erklärung dazu:

  • WhatsApp überträgt - ohne das explizit klar zu stellen - alle Telefonnummern aus dem Adressebuch des iPhones an ihre Server. Allerdings ohne Namen. Aber alle. Auch die meines Arztes, meines Bankberater etc. etc. 
Technisch begründen tun sie das, dass sie damit «abgleichen können, wer alles WhatsApp hat, um die Favoritenliste zu erstellen». Dieses Verhalten wurde mir von einem WhatsApp Support-Mitarbeiter mitgeteilt. (Wenigsten waren sie so ehrlich und haben es nach 3x Nachfragen zugegeben.) 

Nun meine Überlegungen: ist das nötig? Ich bin der Meinung: nein. 
  • Anstatt die Nummern zu übertragen, könnten WhatsApp Hash-Werte der normalisierten Nummern sammeln, um die gleiche Funktionnalität zu erreichen. Crypto-Experten, korrigiert mich. 
  • WhatsApp könnte gleich funktionieren wie iMessage oder SMS - wenn der Empfänger die App nicht hat, kommt halt eine Fehlermeldung, weil nicht zustellbar. Dann müsste WhatsApp nur meine Telefonnummer kennen - nicht alle. 
Auch andere Applikationen sammeln Adressbuchdaten, z.B. facebook, iCloud, etc. etc. - aber sie tun das nicht, ohne den User zu fragen. Und sie funktionieren auch, wenn der User seine Telefonnummern nicht alle verschicken will. 



Update August 2016: 

Es ist passiert, was passieren musste: Facebook, der Inhaber von WhatsApp, ändert die Benutzungsrichtlinien. Telefonnummern werden mit Facebook ausgetauscht. Also wird mein privates Telefonbuch nun der US-Amerikanischen Firma Facebook bekanntgegeben, als Preis dafür, WhatsApp benutzen zu dürfen. Das geht für mich gar nicht.
Unterdessen ist es eingeschränkt möglich, WhatsApp ohne Freischaltung des privaten Adressbuchs zu benutzen. Meine Freunde wissen davon.

Kleines politisches Statement dazu: 

Das PTT Monopol der Bürger ist schlecht! Wir müssen die Kommunikation der Privatwirtschaft überlassen! 😳😴🙊😜 (Das sagten die Bürgerlichen Anfangs 90er Jahre...)

Update Juni 2017

Ein Deutsches Gericht entscheidet, dass genau die Praxis des "Verschenkens" des persönlichen Adressebuchs als Voraussetzung zur Benutzung von WhatsApp gegen Deutsches Recht verstösst. Sozusagen die gleiche Argumentation, die auch ich mache. Spannend. 
Aber die Marktmacht ist zu gross. Wir haben die Kontrolle über unsere Kommunikation und über unsere Freundschaftskreise an eine US-amerikanische Firma verloren. 

Montag, 13. August 2012

Data-Driven Documents

Cool! Manipulation von (DOM) Dokumenten basierend auf (JSON) Daten; hightech-Algorithmen…
http://d3js.org/



…das sieht wirklich hammer spannend aus. Dann mit einer Verbindung über json zu
http://neo4j.org
und perfekt ist…
Müsste ich in einer schwachen Minute wirklich mal ausprobieren.



Dienstag, 3. Juli 2012

Kurzanleitung für das Maven-Release-Plug-In


Pom:
Folgende Dinge sind im POM relevant: 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>
  <groupId>bla.bestpracticegroupId>
  <artifactId>fakeServiceartifactId>
  <version>0.0.9-SNAPSHOTversion>
  <packaging>jarpackaging>
  <name>fakename>
  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
  properties>
  <scm>
    <connection>scm:cvs:pserver:@epcvs:/data/cvs_business_frameworks:bestpractices/fakeBeanconnection>
  scm>
  <distributionManagement>
    <repository>
      <id>bla-releasesid>
      <url>http://mavenrepo.ch.bla.com:12697/nexus/content/repositories/bla-releasesurl>
    repository>
  distributionManagement>
  <dependencies>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.10version>
      <scope>testscope>
    dependency>
    <dependency>
      <groupId>commons-codecgroupId>
      <artifactId>commons-codecartifactId>
      <version>1.6version>
    dependency>
  dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-release-pluginartifactId>
        <version>2.3.2version>
      plugin>
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-source-pluginartifactId>
        <version>2.1.2version>
        <executions>
          <execution>
            <id>attach-sourcesid>
            <phase>verifyphase>
            <goals>
              <goal>jar-no-forkgoal>
            goals>
          execution>
        executions>
      plugin>
    plugins>
  build>
project>



Nexus-Zugang:
In der Datei C:\Users\bla\.m2\settings.xml muss folgendes eingetragen werden, damit das distribution-Management läuft. 


<?xml version="1.0" encoding="ISO-8859-1"?>DOCTYPE settings PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "document-v13.dtd">
<settings>

  <servers>
   
    <server>
      <id>bla-releasesid>
      <username>bla-integratorusername>
      <password>xxxxxxxxxxxxxxxpassword>
    server>
   
  servers>



Run-as-Maven Launcher:
Anschliessend können drei Launcher über "Run as Maven…" erstellt werden:


Prepare Dry testet, ob alles so läuft, wie es sollte:
release:prepare -DdryRun

Clean löscht alle generierten Artefakte:
Das Goal heisst entsprechend: release:clean



Release schliesslich ist die "scharfe" Version, die den Release auch wirklich macht: 

mit -DreleaseVersion=1.0.0 kann man die releaste Version setzen. 





Unter Parameter Name/Value werden die CVS credentials eingetragen.
Das Passwort kann nach den ersten Durchlauf wieder gelöscht werden, da es im File ~/.cvspass abgelegt wird.



Ob der release funktioniert hat, kann an folgenden drei Dingen überprüft werden:
-          Das pom hat eine neue –SNAPSHOT Version
-          In der CVS-History des pom taucht ein neuer Tag für diese Version auf.
-          Und natürlich, in Hudson ist das neue Artefakt verfügbar.