JUnit
Drei Gründe warum man keine JUnit-Tests schreiben sollte (Mindmap).
Tip der Woche: Wie können formatierungen für Eclipse im Quellcode für bestimmte Bereiche ausgeschaltet werden?
Hat man mühsam den Quellcode eingerückt, für SQLs oder bestimmte Variablen oder Konstanten und man möchte nicht, das dieser Code wieder durch die automatische Formatierung verloren geht wie in diesem Beispiel:
Dann kann man zwei Tags definieren in:
Dann auf Edit klicken. Auf dem letzten Tab unter Off/On Tags können belibige Tags definiert werden:
und schon bleibt der Quelltext zwischen den Tags, so wie angegeben.
In Projekten müsste man sich dann aber auf Tags für alle einigen und in der Systemweiten XML festschreiben, sonst würde jemand anderes, der die Datei ausscheckt und den Tag nicht definiert hat, alles wieder umstellen.
Wie kann auf einem Raspberry Pi ein Subversion und Apache Server installiert werden?
Das geht in 15 min wenn man nach dieser Anleitung vorgeht.
Hier die Schritte als Quick-Install:
1. Package installieren:
1 |
sudo apt-get install subversion |
2. Repository Verzeichnis anlegen und ein Beispielprojekt
1 2 |
mkdir -p /home/pi/repos svnadmin create /home/pi/repos/hallowelt |
3. Beispiel Datei anlegen
1 2 3 |
mkdir /home/pi/projekte/hallowelt cd /home/pi/projekte/hallowelt sudo vi main.cpp |
mit Inhalt z.B. CPP Code oder was auch immer:
1 2 3 4 5 6 7 8 |
#include <iostream> using namespace std; int main() { cout << "Hallo Welt!"; return 0; } |
4. Datei in SVN importieren:
1 2 |
sudo svn import /home/pi/projekte/hallowelt/ file://localhost/home/pi/repos/hallowelt/ # mit CTLR+X beenden |
5. Für den Remote-Zugriff auf Subversion installieren wir einen Apache Server:
1 |
sudo apt-get install apache2 libapache2-svn |
6. Apache konfigurieren. In die Datei
1 |
sudo vi /etc/apache2/mods-available/dav_svn.conf |
am Ende folgendes hinzufügen:
1 2 3 4 5 6 7 8 9 10 |
<Location /svn> DAV svn SVNParentPath /home/pi/repos AuthType Basic AuthName "Subversion Repo" AuthUserFile /etc/apache2/dav_svn.passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location> |
7. Apache restart und Rechte für das Repository vergeben:
1 2 |
sudo /etc/init.d/apache2 restart sudo chown -R www-data:www-data /home/pi/repos |
8. Apache Benutzer anlegen
1 |
sudo htpasswd -c /etc/apache2/dav_svn.passwd thomas |
9. Test über Webbrowser mit (IP-Adresse anpassen):
1 |
http://192.168.254.18/svn/hallowelt/ |
10. Erster Checkout:
1 |
svn co --username thomas http://192.168.254.18/svn/hallowelt |
11. Datei verändern und differenzen anzeigen mit zweiten checkin.
1 2 |
svn diff main.cpp sudo svn commit -m "Version 2" main.cpp |
Mit welcher Konfiguration kann man lokal per VPN auf ein OpenVPN-Server der auf OpenWtr läuft mit dem Mac Client Tunnelblick zugreifen?
Wenn der VPN Client Tunnelblick installiert ist, ein Verzeichnis anlegen mit der Extension
.tblk
z.B. OpenWRT10.tblk
In diese Verzeichnis die Datei OpenWRT10.ovpn mit folgenden Inhalt kopieren:
remote 192.168.2.223 1194
client
dev tun
proto udp
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert thomas.crt
key thomas.key
cipher bf-cbc
comp-lzo
# Statische IP Adresse: Server 10.0.0.1 Client 10.0.0.2
ifconfig 10.0.0.2 10.0.0.1
verb 3
mute 20
Die folgenden drei Zertifikate müssen auch in diesem Verzeichnis vorhanden sein:

Dann kann mit einem doppelklick auf das Verzeichnis die VPN Verbindung aufgebaut werden. Wenn die Verbindung geklappt hat, erscheint:
Wie kann ich alle erreichbaren IP-Adressen in einem privaten Netzwerk anzeigen?
Das geht mit dem Netzwerk-Analysewerkzeug und Sicherheits-/Portscanner nmap.
Auf der Konsole folgenden Befehl eingeben (IP-Adresse evl. anpassen):
1 |
nmap -sP 192.168.2.0/24 |
Dieser Ping Scann zeigt nur alle Adressen an die Online sind.
Wer alle angezeigt haben möchte verwendet den List Scann:
1 |
nmap -sL 192.168.2.0/24 |
Es werden alle Adressen von 192.168.2.0 bis 192.168.2.255 aufwärts gescannt.
Wer nur die Adressenliste haben will, schaltet noch den grep dahinter:
1 |
nmap -sP 192.168.2.0/24 | grep -oE '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' |
Kennt ihr noch andere Möglichkeiten?
Struktur-Muster (Structural Pattern) Mindmap
Wie kann die Piratebox unter OpenWrt auf einem TP-Link TL-WR703N Router installiert werden?
Die Piratebox ist ein in sich selbst abgeschlossenes Gerät zum anonymen speichern und austauschen von Bildern, Videos, Dokumente und andere Dateien über WLAN.
Es wird kein User login benötigt und es wird kein User geloggt. Auch kann im Netz geschattet werden.
Die Piratebox ist nicht ans Internet angebunden, um die Sicherheit zu erhöhen das die Daten private bleiben.
Also ein freies und offenes privates file sharing and chat! device. Jeder der in der Reichweite des WLAN ist, kann einfach und sofort Dateien austauschen.
Es gibt da ein paar Fallgruben bei der Installation und der Router kann leicht gebrickt werden. Mit einem Serial-Adapter kann dies aber wieder rückgängig gemacht werden. Ist aber nicht ohne Löterrei möglich.
Im Prinzip läuft die Installation so wie in der Anleitung
des Entwicklers beschrieben.
Auf dem 703N muss die Version 12.09 geflasht werden. Habe die neuere Version 12.09 von OpenWrt auch versucht, die lief aber nicht, und erzeugte eienen brick!
Es wird noch ein USB Stick benötigt. Ich hatte noch einen 8 GB Stick liegen. Der muss mit FAT32 formatiert werden und darf nur eine Partition haben.
Ich hatte einen mit 3 Partitionen, der lief in eine Endlosschleife. Dann hatte ich den USB Stick mit einer Partition angelegt und vergessen sie zu einer primären Partition zu machen, auch das führte zu einer Endlosschleife.
Also Vorbedingung:
1. Version 12.09-beta2 geflasht
2. USB Stick mit einer FAT32 Partition erstellen
3. Test ob zugriff aufs Internet mit ping wenzlaff.de
4.
opkg update
opkg install kmod-usb-uhci
insmod usbcore # Es kann die Meldung kommen: file exists
insmod uhci
opkg install kmod-usb-ohci # Es kann die Meldung kommen:up to date.
insmod usb-ohci
5. USB-Stick einstecken
6.cd /tmp
opkg update
opkg install http://piratebox.aod-rpg.de/piratebox_0.6.3_all.ipk
Die Installation dauert nun ca. 15 min denn es werden aus dem Internet neue Versionen geladen und installiert und auf
dem Stick SWAP Partitionen angelegt und das Piratebox System installiert und konfiguriert.
7. Wenn die Installation abgeschlossen ist, kann das LAN Kabel entfernt werden und der Router einmal rebootet werden.
Dann kann auf das WLAN Netzwerk mit dem Namen „PirateBox – Share Freely“ zugegriffen werden. Dazu z.B. im iPadMini das WLAN auswählen:
Optional: Was mir noch fehlt, ist eine externe Stromversorgung von 5 V über den USB Port, so das alles portabel ist.
Die eingestellte IP: 192.168.1.1 (192.168.2.111)
Domain: piratebox.lan
Wenn eine Browser geöffnet wird und irgendeine Seite aufgerufen wird erscheint:
Nun können Dateien ausgetauscht und geschattet werden. Siehe den Hallo Welt Eintrag von mir oben.
Programmiersprachen Ranking Top 20 (Java =2)
iTunes 11.1.0, Xcode Version 5.0 und iOS 7 ist nun verfügbar
iOS 7.0 Download Zeit ca. 13 Stunden für 1,24 Gb 🙁 vorausberechnet.
Nach 12 Stunden ist alles geladen, jetzt noch das update. Mal sehen wann es durch ist!
iOS 7 läuft nun. Mal was Neues!
Fürs iPadMini ging alles unter eine Stunde. Das iPad2 ist noch in Arbeit, soll 6 Stunden dauern für 1,05 Gb. Da kommen die Bytes einzeln durch die Leitung.
Wie können unter OpenWrt E-Mails versendet werden?
Das geht mit dem msmtp Client (msmtp version 1.4.27).
Dazu den msmtp Client und mutt (Version 1.5.21 (2010-09-15)) auch gleich mit installieren.
1 2 3 |
opkg update opkg install msmtp opkg install mutt |
Die Konfigurationsdatei vi /etc/msmtprc
wie folgt anlegen und die entsprechenden smtp Daten eingeben:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# /etc/msmtprc account default host smtp.strato.de port 587 auth on user email@test.de password HIER DAS PASSWORT auto_from on from email@test.de tls on tls_starttls on tls_certcheck off logfile syslog LOG_MAIL |
Testen ob alles richtig konfiguriert wurde geht mit dem absetzen folgender Kommandos auf der Konsole:
1 |
echo 'Test e-mail' | sendmail email@test.de |
Oder mit cat mit Betreff und Absender:
1 2 3 4 5 6 7 |
[root@OpenWrt ~]# cat <<EOF | sendmail -t / To: empfaenger@test.de Subject: Testbetreff From: absender@test.de Testinhalt der E-Mail EOF |
Dann testen ob die E-Mail angekommen ist.
Für das Versenden aus dem Fhem Script reicht das noch nicht. Wir brauchen noch ssmtp
1 2 |
opkg update opkg install ssmtp |
Diese zwei Dateien anpassen /etc/ssmtp/ssmtp.conf
1 2 3 4 5 6 7 8 |
root=info-anfrage@test.de mailhub=smtp.strato.de:587 rewriteDomain=test.de hostname=email@test.de UseSTARTTLS=YES AuthUser=email@test.de AuthPass=PASSWORT FromLineOverride=YES |
Und die /etc/ssmtp/revaliases
1 2 |
root:email@test.de:smtp.strato.de:587 localusername:email@test.de:smtp.strato.de:587 |
Check auf der Konsole mit:
1 |
ssmtp email@test.de |
dann Enter und die Nachricht der E-Mail eingeben.
Zum Schluss Strg+D drücken. Dann wird die E-Mail versendet.
Wie kann ein Tür- und Batteriezustand gPlot für Fhem (HM-Sec-SC) erstellt werden?
Um die digitalen Werten, wie Tür auf oder zu in einem Plot mit dem Batterie Zustand auszugeben, kann wie folgt vorgegangen werden. Der HM-Sec-SC Funk-Tür-/Fensterkontakt gibt die Werte ja zurück. Die rote Linie gibt den Türzustand aus ob die Tür auf oder zu ist bzw. war.

Diese /fhem/www/gplot/myTerrassenTuer.gplot
Datei speichern:
/*
myTerrassenTuer.gplot Version 1.0 vom 07.09.2013
Dieses GNU-Plot Script (myTerrassenTuer.gplot) gibt zwei Zustaende des Tuerkontakt als Kurven aus und zwar
den Batterie-Zustand, den Status der Tuer.
(C) 2013 Thomas Wenzlaff http://www.wenzlaff.de
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see {http://www.gnu.org/licenses/}.
*/
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Terrassen Tuer'
set ytics ("Zu" 0, "Ok" 0.8, "Auf" 1)
set y2tics ("Zu" 0, "Ok" 0.8, "Auf" 1)
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]
set ylabel ""
set y2label ""
#FileLog 3:wz_Tuerschalter:0:$fld[2]=~"open"?1:0
#FileLog 4:wz_Tuerschalter:0:$fld[2]=~"ok"?0:0.8
plot \
"< awk '/wz_Tuerschalter/ {print $1, $3~/open/? 1 : 0; }' <IN>"\
using 1:2 title 'Tuer' with steps
"< awk '/wz_Tuerschalter/ {print $1, $3~/ok/? 1 : 0; }' <IN>"\
using 1:2 title 'Batterie' with steps
Folgende Einträge sind in der fhem.cfg
Datei noch nötig:
# TW Tuerschalter
define wz_Tuerschalter CUL_HM 000000
attr wz_Tuerschalter .devInfo 000000
attr wz_Tuerschalter .stc 80
attr wz_Tuerschalter actCycle 028:00
attr wz_Tuerschalter actStatus alive
attr wz_Tuerschalter expert 2_full
attr wz_Tuerschalter firmware 2.1
attr wz_Tuerschalter model HM-SEC-SC
attr wz_Tuerschalter peerIDs
attr wz_Tuerschalter room Wohnzimmer
attr wz_Tuerschalter serialNr KEQ0000000
attr wz_Tuerschalter subType threeStateSensor
define FileLog_wz_Tuerschalter FileLog ./log/wz_Tuerschalter-%Y.log wz_Tuerschalter
attr FileLog_wz_Tuerschalter logtype text
attr FileLog_wz_Tuerschalter room Wohnzimmer
define SVG_FileLog_wz_Tuerschalter_1 SVG FileLog_wz_Tuerschalter:myTerrassenTuer:CURRENT
attr SVG_FileLog_wz_Tuerschalter_1 room Wohnzimmer
Wie kann auf einem WR-703N unter OpenWrt ein Server für USB tunnel per TCP eingerichtet werden?
Anleitung von OpenWrt „USB durch IP-Tunnel„.
Zuerst die USB Kernel Module und USBIP Server Package installieren mit:
opkg update
opkg install kmod-usb-ohci usbip-server
Dann die lokalen USB Geräte auflisten mit
usbip list -l
Bei mir wir diese Ausgabe geliefert:
[root@OpenWrt ~]# usbip list -l
Local USB devices
=================
- busid 1-1 (0451:1446)
1-1:1.0 -> hub
- busid 1-1.1 (0403:6001)
1-1.1:1.0 -> ftdi_sio
- busid 1-1.4 (090c:1000)
1-1.4:1.0 -> usb-storage
Wie man sieht, habe ich einen USB Hub, an diesem habe ich den Arduino Nano (ftdi_sio) und einen USB-Stick mit 8GB (usb-storage) angeschlossen.
In der Datei /etc/rc.local
vor dem exit 0 diese Zeilen einfügen wenn der Server autom. gestartet werden soll. Evl. noch die BusID anpassen:
# TW Tunnelt den USB-Stick per TCP
usbipd -D &
sleep 1
usbip bind -b 1-1.4 # bindet die BusID vom USB Stick
Diese Methode habe ich aber erstmal nicht mehr verwendet da schon autom. ein Fhem-Server läuft.
Nach einem reboot
kann mit netstat geschaut werden ob alles läuft.
netstat -alpt
.
Siehe auch diese Anleitung
[root@OpenWrt ~]# usbip list -local
Local USB devices
=================
- busid 1-1 (0451:1446)
1-1:1.0 -> hub
- busid 1-1.1 (0403:6001)
1-1.1:1.0 -> ftdi_sio
- busid 1-1.4 (090c:1000)
1-1.4:1.0 -> usb-storage
[root@OpenWrt ~]# usbip bind -b 1-1.1
bind device on busid 1-1.1: complete
[root@OpenWrt ~]# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0451:1446 Texas Instruments, Inc. TUSB2040/2070 Hub
Bus 001 Device 007: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) 64MB QDI U2 DISK
Bus 001 Device 008: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 002 Device 001: I
Hab noch keinen USBIP Client für Mac OS X gefunden. Gibt es da einen der läuft?
Für Windows und Linux gibt es passende.
Wie kann unter Mac OS X das Terminal screen verwenden?
Um Kontakt zur seriellen Schnittstelle aufzubauen kann unter Mac OS X das Programm: screen
verwendet werden. Einfach auf der Kommandozeile aufrufen
screen [ -optionen] [ Kommando [Argumente]] wie hier gezeigt um die USB Schnittstelle anzusprechen:
screen /dev/cu.usbserial-A9YLHVRN
Beendet kann das Terminal mit: ctrl+a k
werden
Wie kann eine Kommando Shell (bitlash) für Arduino verwendet werden?
Es gibt für Arduino eine Kommando Shell mit Namen Bitlash. Auch eine Anleitung ist auf Hompage des Entwicklers zu finden.
Hier die nötigen Schritte, um ein Arduino (Nano) damit zu bestücken.
Zuerst einmal die neueste Version (2.0) von bitlash installieren, dazu in das Libraries Verzeichnis von Arduino wechseln und per git die Neueste Version holen:
cd ~/Documents/Arduino/Libraries
git clone https://github.com/billroy/bitlash.git
oder auch als ZIP und dann auspacken.
Dann die Arduino IDE (1.5.2) starten und über das Menü: Datei-Beispiele-bitlash-Bitlashdemo
das Beispiel Sketch laden, compilieren und auf den Arduino hochladen.
Wenn dann der Serielle-Monitor aufgemacht wird, ist es bei mir mit dem Nano abgestürzt.
Deshalb habe ich die Geschwindigkeit auf 9600 geändert. Hier das angepasste Beispiel Sketch:
/**
twbitlash.pde Thomas Wenzlaff http://www.wenzlaff.de Version 1.0 vom 31.08.2013
Beispiel einen einfachen Kommandointerpreter für den Arduino Nano.
Basis Beispielprogramm von:
Bitlash is a tiny language interpreter that provides a serial port shell environment
for bit banging and hardware hacking.
This is an example demonstrating how to use the Bitlash2 library for Arduino 0015.
Bitlash lives at: http://bitlash.net
The author can be reached at: bill@bitlash.net
Copyright (C) 2008-2012 Bill Roy
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
**/
#include "bitlash.h"
void setup(void) {
// Initialisierung und setzen der Baud Rate 57000 bricht beim Nano ab
// Startet den Kommandozeileninterpreter und führt den startup Makro aus
initBitlash(9600);
}
void loop(void) {
runBitlash();
}
und dann läuft dieses Beispiel.
Nach öffnen des Seriellen Monitors in der IDE (1.5.2) erscheint:
Alle Kommandos lassen sich mit help
anzeigen:
Wie dann die erste Funktion erstellt wird, steht hier.
Kurz, um die LED 13 blinken zu lassen folgende Befehle eingeben:
function toggle13 {d13 = !d13;}
function startup {pinmode(13,1); run toggle13,1000;}
startup
boot
Funktionen lassen sich mit ls
anzeigen:
Weitere Doku hier.
Das JavaMagazin mit meinen Artikel zum Thema: Ansteuerung von USB-Schnittstellen mit Java via javahidapi
Das Java Magazin Ausgabe 9-2013 ist jetzt am Kiosk nicht mehr erhältlich erhältlich. Die Ausgabe kann aber noch Online nachbestellt werden.
Das Magazin erscheint in einer Auflage von ca. 20000 Exemplaren und ist damit das am weitesten verbreitet Magazin zum Thema JAVA.
In der Ausgabe findet Ihr einen Artikel vom mir zum Thema „Ansteuerung von USB-Schnittstellen via javahidapi mit Java“ inkl. einem Eclipse Beispielprojekt.
Hier ein Foto meines Belegexemplares:
Wie findet Ihr den Artikel? Würde mich über Feedback freuen.
Wie kann per socat die seriellen Daten in eine Datei geschrieben werden?
Wie in diesen Blog -Eintrag beschrieben vorgehen. Aber dieses Script verwenden.
#!/bin/bash
LOGFILE=/usr/src/fhem/log/nano-temp-2013.log
DEV=/dev/ttyUSB0
BAUD=9600
while true; do
if [ -e $DEV ]
then
socat -d -d -u file:$DEV,nonblock,raw,echo=0,waitlock=/var/run/tty,b$BAUD $LOGFILE
else
sleep 2
fi
done
Wie kann mit Arduino die serielle Ausgabe über TCP ausgegeben werden auf dem TP-WR703N Gerät?
Der Arduino (NANO) wird per USB an den TP-WR703N (12.09) angeschlossen. Wie kann nun von einem anderen Rechner darauf per TCP (Telnet) zugegriffen werden?
Dazu erst socat auf den WR703 installieren mit
opkg update
opkg install socat
Socate (Version 1.7.2.1) kann bidirektionale Verbindungen aufbauen. Es verbindet den USB Port mit dem TCP Port.
Dann das folgende Script erstellen start-temp.sh, und evl noch die Schnittstelle DEV und den PORT und BAUD anpassen.
#!/bin/bash
DEV=/dev/ttyUSB0
PORT=1234
BAUD=9600
while true; do
if [ -e $DEV ]
then
socat tcp-l:$PORT,reuseaddr,fork file:$DEV,nonblock,raw,echo=0,waitlock=/var/run/tty,b$BAUD
else
sleep 2
fi
done
und ausführbar machen mit
chmod +x start-temp.sh
Dann kann das Script mit ./start-temp.sh &
im Hintergrund auf dem WR703N gestartet werden.
Nun kann von einem anderen Rechner mit
telnet ip-adresse 1234
die Ausgabe ausgegeben werden.
Will man das das Script autom. beim hochfahren des WR703N startet, muss es noch in der /etc.rc.local
eingetragen werden (aber vor exit 0). Das geht auch über Luci:
Evl. muss der USB Port einmal reconnected werden.