Running ACR122U NFC Card Reader SDK Demo with Java / Windows8

Using the ACR122U NFC Card Reader SDK with Java is hard work for a Java Newbie like me, but I managed it spending quiet some time on getting the demo application to run.

First Steps of running the Java Demo

  1. Install the Drivers and Demos from the CD
  2. Plug in the card reader to your PC
  3. the Java Sample Code is located here: Sample Codes\Java\source files
  4. Install Eclipse (for Java newbs like me)  :)
  5. Make new Java project in Eclipse
  6. import the demo sources: Sample Codes\Java\source files
  7. download the OpenBeacon.org active 2.4GHz RFID reader source code dll Jacspcsc.dll in Folder C:\myfolder
  8. Link the downloaded .dll to the project in eclipse:
    1. Select ‘Run As’ -> ‘Run configurations’
    2. Check that correct run configuration is selected and choose the ‘Arguments’ tab
    3. In the ‘VM Arguments’ textbox add -Djava.library.path=C:\myfolder
  9. Under Windows 8 you have to install Java 32bit to work with the dll: tutorial
  10. After that, you can run the project successfully and the applet should run (see screenshot)

eclipse_nfc_applet_success weiterlesen…

PageRank Algorithmus in Java

Der PageRank Algorithmus, auf dem auch der Google Algorithmus basiert, kann relativ einfach programmiert werden. Dazu muss als erstes ein Crawler(z.B. crawler4j) Seiten (URLs) nach Links durchsuchen und danach kann über die Verlinkungen der Seiten untereinander der PageRank ausgerechnet werden.

PageRank Beispiel

Beim PageRank erhalten Seiten mit vielen starken Backlinks einen höheren Wert, als Seiten ohne Backlinks oder die nur von Seiten mit schlechten PageRank verlinkt sind.

weiterlesen…

Teil 2: Clean Code – richtige und falsche Kommentare

Nach dem Buch (Kapitel 4):  “Clean Code – Refactoring, Patterns, Testen und Techniken für sauberen Code” von Robert C. Martin.

“Kommentieren Sie schlechten Code nicht – schreiben Sie ihn um.”

(Brian W. Kernighan und P.J. Plaugher)

 

Kommentare können beides sein, hilfreich und hinderlich:

  • hinderlich, wenn Sie überholt sind und Fehlinformationen liefern
  • störend, wenn Sie zu lang sind und unnötig
  • hilfreich, wenn Sie wohlplatziert sind

Der Einsatz von Kommentaren “soll unsere Unfähigkeit ausgleich, uns in unserem Code klar auszudrücken”(S.85). Bevor man einem Kommentar schreibt, sollte man vorher überlegen, ob der Code nicht noch ausdrucksstarker geschrieben werden könnte.

weiterlesen…

Code kopieren Zeilennummern löschen Regex

Beim Kopieren von Code von Webseiten(z.B. Zend.com) kann es vorkommen, dass der Code Zeilennummern enthält, z.B.

  1. // Parameters for ClientAuth authentication
  2. $service = Zend_Gdata_Gbase::AUTH_SERVICE_NAME;
  3. $user = “”;
  4. $pass = “pa$$w0rd”;
  5. // Create an authenticated HTTP client
  6. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  7. // Create an instance of the Base service
  8. $service = new Zend_Gdata_Gbase($client);
Um die Zeilennumern zu löschen, kann mit z.B. mit Netbeans folgenden Befehl ausführen:
STRG+H (SEARCH and REPLACE)
Find what: [0-9]{1,2}.\n
Replace with: (leer lassen)
Auswählen: Regular Expressions

Regular Expressions Netbeans

Teil 1: Clean Code – Regeln für guten, sauberen Code

Sauberen und leicht verständlichen Code zu schreiben ist das höchste Ziel in einem guten IT-Projet. Vieles hängt davon ab:

  • Wartbarkeit
  • Einarbeitungszeit für andere Programmierer, versteht man schnell, was einzelne Funktionen erledigen
  • Robustheit bei Änderungen
  • Testbarkeit, fällt alles zusammen, bei kleinen Änderungen, können schnell stabile Updates bereitgestellt werden
  • Popularität bei anderen Programmierern z.B: bei Open Source Projekten, als negative Beispiel sei XT-Commerce genannt

Das sehr zu empfehlende Standardwerk zu dem Thema ist “Clean Code – Refactoring, Patterns, Testen und Techniken für sauberen Code” von Robert C. Martin. In diesem Artikel werden Kapitel 1 bis 3 behandelt.

Aussagekräftige Namen

Der Namen einer Variable, Funktion oder Klasse sollte sofort erklären, warum Sie existiert, was sie tut und wie sie benutzt wird. Wenn eine Variable einen Kommentar benötigt, drückt Sie ihren Zweck nicht aus.

Bsp:

int d //Anzahl vergangener Tage
besser ist:
int daysSinceCreation;

Aussprechbare Namen verwenden

Keine Konstrukte mit unklaren Abkürzungen wie: int daSiCre anstatt von daysSinceCreation.

Suchbare Namen verwenden

Moderne IDEs machen das Suchen einfach, aber es nützt nichts, wenn man nach dem Buchstaben e einer Laufvariable suchen muss und von Ergebnissen überschwemmt wird.

Variablen Namen mit einem Buchstaben sind nur als lokale Variablen in kurzen Methoden zu verwenden.

weiterlesen…

Java Date zu Unix Timestamp Converter

Convert Date to Unix Timestamp (Long).

import java.util.Date;

public class DateHelper {   
    public static Long dateToTimeStamp(Date date) {
        Long millis = date.getTime();
        if(millis > 0)
        {
            return millis/1000;
        }
        else
        {
            return (long) 0;
        }
    }
}

Andorid Sicherheit MD5 Hashing Class

Eine einfache Klasse, um MD5 Hashes mit Java zu erstellen.

Anmerkung: MD5 ist nicht mehr sicher, es sollte SHA1 verwendet werden. Wenn kein Weg drum herum führt, immer mit Salt verwenden.

public class Security {
    
    private static final String TAG = Security.class.getSimpleName();

    public static String getMd5Hash(String string) {
        String result = null;
        byte[] defaultBytes = string.getBytes();
        
        MessageDigest algorithm;
        try {
            algorithm = java.security.MessageDigest.getInstance("MD5");
            algorithm.reset();
            algorithm.update(defaultBytes);
            byte messageDigest[] = algorithm.digest();
                    
            StringBuffer hexString = new StringBuffer();
            for (int i=0;i<messageDigest.length;i++) {
                    String hex = Integer.toHexString(0xFF & messageDigest[i]); 
                    if(hex.length()==1)
                    hexString.append('0');
                    hexString.append(hex);
            }
            result = hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            Log.e(TAG, "MD5 not available", e);
        }
        return result;                
    }
}

Java Corba Client Server Kommunikation

Corba (Common Object Request Broker Architecture) ist vergleichbar mit RMI, nur komplizierter und umfänglicher, was auch der Grund ist, warum es in der Praxis nur eine kleine Nische einnimmt.

Aufbauend auf einer Middleware (ORB – Object Request Broker), die die Service verwaltet und für die Authentifikation der Benutzer zuständig ist, kann der Benutzer Services nutzen, die auf einem anderen PC laufen. Das System hat folgende Vorteile:

  • betriebsystemunabhängig
  • programmiersprachenunabhängig, durch die IDL (Interface Definition Language), mit dieser Schnittstelle können die Benutzer mit der Middleware kommunizieren
  • skaliebar, Dienste können problemlos repliziert und Ressourcen (Server) hinzugefügt werden, lose Bindung der Services
  • migrierbar, da der ORB die Dienste über den Namen und nicht über die IP verwaltet, was bei URLs natürlich genauso ist
  • nebenläufig, Prozesse laufen in eigenen Threads
  • robust, durch zentrales Failure Handling
  • verbindungslos, Service kann zu einem beliebigen Zeitpunkt genutzt werden, beliebig oft

weiterlesen…