Dienstag, Dezember 13, 2016

Microservices komponieren

Microservices registrieren und entdecken

Microservices bereitstellen

Nachdem in Microservice bauen bereits zwei Services gebaut und mit Actuates versehen wurden, wollen wir nun die Services an einer Registry registrieren und von dort holen.

Registry bauen

Um eine Service-Registry zu bauen benötigt man wieder ein einfaches Spring Boot-Projekt, das folgende Dependency hat:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId></dependency>

Und dessen Application-Klasse die Annotation @EnableEurekaServer trägt.

Der Standardport für den Eureka-Server ist 8761, was in der application.properties konfiguriert wird. Daneben werden noch ein paar Properties gesetzt - einfach mal übernehmen.

Dann kann die Registry gestartet werden.

Service-Discovery

Jetzt müssen sich noch die Clients bei der Registry anmelden, damit sie an von anderen gefunden werden. Dazu muss wieder Spring Boot-like eine Dependency aufgenommen werden:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId></dependency>

Und die Application-Klasse bekommt die Annotation @EnableDiscoveryClient. In der application.properties muss jetzt bekannt gegeben werden, wo die Service-Registry zu finden ist, damit sich dieser Service dort an melden kann. Das sieht so aus:

eureka.client.serviceUrl.defaultZone=http://${service-registry.server.hostname}:8761/eureka/eureka.client.instance.preferIpAddress=trueeureka.instance.nonSecurePort=${server.port}

Der Wert service-registry.server.hostname=localhost ist schon mal vorbereitet noch separat konfiguriert werden.

Auch der Client kann jetzt gestartet werden.

Test

Jetzt sollte folgendes Bild erscheinen:


Wie man sieht, haben sie die Clients beide an der Service-Registry angemeldet.

Referenzen


Serviceaufruf mittels Registry




Donnerstag, Dezember 08, 2016

Microservice bauen

Microservice bauen

In Anlehnung an das Microservices Lab von Eberhard Wolff am 8.11.2016 auf der W-JAX in München.

Minimaler REST-Service bauen

Einen Spring-Boot "Hello World!"-REST-Service bauen. Das kann man mit Spring Initializr machen oder per Hand.


Wenn das Projekt mit Spring Initialzr erzeugt wurde, dann einfach downloaden, entpacken und in eine IDE deiner Wahl importieren.

Anschließend eine Klasse für den REST-Service implementieren:

@RestController
@EnableAutoConfigurationpublic class HelloWorldController {

  @RequestMapping(path = "/")
  public String helloWorld() {
    return "Hello World!";  }

}

Dann das Projekt bauen und testen:

curl localhost:8080

Als Antwort sollte dann

Hello World!

kommen.

Jetzt wird der Microservice als JAR-Datei erzeugt mvn package, gestartet java -jar target/hello-world-0.0.1-SNAPSHOT.jar und nochmal getestet.

Referenzen


Monitoring einbauen

Spring Boot bietet ein gutes Monitoring mit Hilfe der vorbereiteten Acutators. Einfach in die POM einbauen.

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Anwendung neu starten und abfragen:

curl localhost:8080/health | json_pp

Dann sollte so etwas rauskommen:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   105    0   105    0     0   6794      0 --:--:-- --:--:-- --:--:--  7000
{
   "diskSpace" : {
      "total" : 243045949440,
      "free" : 223517011968,
      "status" : "UP",
      "threshold" : 10485760
   },
   "status" : "UP"
}


Ein weiterer interessanter Endpoint ist:

curl localhost:8080/metrics | json_pp

Dort kann man ablesen, welcher Service wie oft aufgerufen wurde.

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   838    0   838    0     0    838      0 --:--:-- --:--:-- --:--:--  818k
{
   "nonheap.init" : 2496,
   "nonheap.used" : 50635,
   "httpsessions.active" : 0,
   "gc.ps_marksweep.time" : 32,
   "httpsessions.max" : -1,
   "gc.ps_marksweep.count" : 1,
   "counter.status.200.info" : 1,
   "counter.status.200.beans" : 1,
   "gauge.response.metrics" : 0,
   "classes" : 6134,
   "heap.init" : 131072,
   "threads.daemon" : 21,
   "gauge.response.health" : 8,
   "systemload.average" : -1,
   "counter.status.200.health" : 3,
   "threads.totalStarted" : 27,
   "threads" : 23,
   "threads.peak" : 23,
   "mem.free" : 224805,
   "nonheap.committed" : 53696,
   "gauge.response.beans" : 38,
   "heap.used" : 55770,
   "gc.ps_scavenge.time" : 77,
   "counter.status.200.metrics" : 4,
   "instance.uptime" : 982970,
   "nonheap" : 0,
   "uptime" : 985825,
   "processors" : 4,
   "gauge.response.info" : 19,
   "gauge.response.root" : 255,
   "counter.status.200.root" : 1,
   "classes.unloaded" : 0,
   "mem" : 331211,
   "heap.committed" : 280576,
   "classes.loaded" : 6134,
   "gc.ps_scavenge.count" : 8,
   "heap" : 1853440
}

Die Actuator-Endpoints gehören zu den sog. Management-Services. Diese Management-Services können bei Bedarf auch abgesichert und / oder auf einen anderen Port gelegt werden.

Referenzen


Dockerfile bauen

Annahme: Wir laufen unter Linux und Docker ist bereits installiert.

Jetzt können wir die Anwendung in ein Docker Image einpacken. Dazu benötigen wir ein Dockerfile, das wir in das Verzeichnis hello-world legen. Die Datei heißt Dockerfile und hat folgenden Inhalt:

FROM openjdk:8
ADD target/hello-world-0.0.1-SNAPSHOT.jar .
CMD /usr/bin/java -Xmx400m -Xms400m -jar hello-world-0.0.1-SNAPSHOT.jar
EXPOSE 8080


Beschreibung:
(1) FROM beschreibt das Docker Image von dem wir ausgehen. Docker Hub bietet eine Reihe von vorbereitetes Images an. Wir benötigen nur ein, das schon ein Java drin hat. Ich habe mir hier für OpenJDK 8 entschieden.
(2) ADD beschreibt was zusätzlich in den Container eingepackt werden soll. In diesem Fall unsere fertige Applikation.
(3) CMD ist das Kommando, das beim Start des Containers ausgeführt werden soll. Bei uns soll automatisch die Applikation gestartet werden.
(4) EXPOSE beschreibt welcher Port des Containers nach außen verfügbar sein soll.

Das Docker Image wird jetzt mit folgendem Kommando gebaut, wobei wir uns eine Verzeichnisebene außerhalb unseres hello-world Projekts befinden.

sudo docker build -t <tag> <verzeichnis>
sudo docker build -t helloworld hello-world 

Ist die folgende Schreibweise eine Abkürzung oder gehört sie zu einer anderen Docker Version?

sudo docker --build=<tag> <verzeichnis>
sudo docker --build=helloworld hello-world

Jetzt lassen wir uns zeigen, ob Docker unser Image kennt

sudo docker images

Dann sollte folgendes gezeigt werden:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
helloworld          latest              e00d323fce30        57 minutes ago      657.9 MB
openjdk             8                   861e95c114d6        4 weeks ago         643.2 MB


Wollen wir nochmal anschauen, was alles in unserem Image drin ist, geht das mit

sudo docker history <tag>
sudo docker history helloworld

Dann erscheint bei mir:

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
e00d323fce30        57 minutes ago      /bin/sh -c #(nop)  EXPOSE 8080/tcp              0 B                
6f7c12b9ddac        57 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/usr/   0 B                
298395009277        57 minutes ago      /bin/sh -c #(nop) ADD file:aa4a274215e0f5109f   14.67 MB           
861e95c114d6        4 weeks ago         /bin/sh -c /var/lib/dpkg/info/ca-certificates   418.2 kB           
<missing>           4 weeks ago         /bin/sh -c set -x  && apt-get update  && apt-   351.5 MB           
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV CA_CERTIFICATES_JAVA_V   0 B                
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV JAVA_DEBIAN_VERSION=8u   0 B                
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV JAVA_VERSION=8u111       0 B                
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV JAVA_HOME=/usr/lib/jvm   0 B                
<missing>           4 weeks ago         /bin/sh -c {   echo '#!/bin/sh';   echo 'set    87 B               
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV LANG=C.UTF-8             0 B                
<missing>           4 weeks ago         /bin/sh -c echo 'deb http://deb.debian.org/de   55 B               
<missing>           4 weeks ago         /bin/sh -c apt-get update && apt-get install    1.287 MB           
<missing>           4 weeks ago         /bin/sh -c apt-get update && apt-get install    122.6 MB           
<missing>           4 weeks ago         /bin/sh -c apt-get update && apt-get install    44.3 MB            
<missing>           4 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                
<missing>           4 weeks ago         /bin/sh -c #(nop) ADD file:41ea5187c50116884c   123 MB             


Jetzt starten wir unser Docker Image mit dem Kommando:

sudo docker run <tag>
sudo docker run helloworld

Dann sollten gleich die Logausgaben unserer Anwendung erscheinen. Am Ende der Logausgaben sehen wir:

Tomcat started on port(s): 8080 (http)

Damit ist jetzt der Port 8080 im Container gemeint. Wir können also nicht mit "curl localhost:8080" auf die Anwendung zugreifen, weil die Anwendung jetzt im Container läuft.

Wenn wir jetzt auf unsere Anwendung zugreifen wollen, müssen wir zuerst die Instanz finden und dann die IP-Adresse herausfinden. Um zu sehen, welche Docker Images laufen, benutzen wir

sudo docker ps

Damit bekommen wir die laufenden Docker Images gezeigt:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
17ef7c5b7462        helloworld          "/bin/sh -c '/usr/bin"   22 seconds ago      Up 21 seconds       8080/tcp            sad_minsky

Die Container ID ist jetzt besonders wichtig. Nur damit können wir auf die laufende Docker Instanz zugreifen. Wir wollen nun herausfinden, auf welcher IP-Adresse diese Instanz läuft:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' 17ef7c5b7462

Ich bekomme als Ergebnis

172.17.0.2

Jetzt kann ich mit

curl 172.17.0.2:8080 

auf meine Anwendung zugreifen.

Jetzt kann ich meinen Container wieder stoppen, auch nur mit der Container ID.

sudo docker stop 17ef7c5b7462



Dienstag, Januar 05, 2016

Clojure - Einstieg

Es folgen ein paar Links für den Einstieg in Clojure

https://en.m.wikipedia.org/wiki/Clojure

http://alexott.net/en/clojure/ClojureMaven.html

http://doc.ccw-ide.org/documentation.html

https://github.com/technomancy/leiningen/blob/stable/doc/TUTORIAL.md

http://stackoverflow.com/questions/2181774/calling-clojure-from-java

Montag, Juli 20, 2015

Improving Micro

Original-Link: http://wiki.teamliquid.net/starcraft2/Micro_%28StarCraft%29

Basic Unit Control - Boxing, Grouping, Splitting, and More!
https://www.youtube.com/watch?v=QtjJsUEjFSQ

Advanced Unit Control - Drops, Pincer Attacks, Patrol Splitting, and More!
https://www.youtube.com/watch?v=x8gajRdj258

Improving Micro: Control Groups - Starcraft 2: Heart of the Swarm
https://www.youtube.com/watch?v=tiZjA5PA-zw&index=34&list=PL9QsjkBYtQM4I117ws9PchN0s6A0gLm9q

Improving Micro: Boxing - Starcraft 2: Heart of the Swarm
https://www.youtube.com/watch?v=tCj3c_jWjfo&index=10&list=PL9QsjkBYtQM4I117ws9PchN0s6A0gLm9q

Improving Micro: Combining Control Groups with Boxing - Starcraft 2: Heart of the Swarm
https://www.youtube.com/watch?v=RnUVRZVW8Y8&index=33&list=PL9QsjkBYtQM4I117ws9PchN0s6A0gLm9q

Improving Micro: Multi Pronged Aggression and Counter Attacks - Starcraft 2: Heart of the Swarm
https://www.youtube.com/watch?v=c1twIovKJr0&index=30&list=PL9QsjkBYtQM4I117ws9PchN0s6A0gLm9q

Improving Micro: Boxing - Starcraft 2: Heart of the Swarm
https://www.youtube.com/watch?v=tCj3c_jWjfo&index=11&list=PL9QsjkBYtQM4I117ws9PchN0s6A0gLm9q

Improving Micro: Flanking - Starcraft 2: Heart of the Swarm
https://www.youtube.com/watch?v=fE3HzPPaqsE&index=32&list=PL9QsjkBYtQM4I117ws9PchN0s6A0gLm9q

Roach Drops and Carpet Bombs - Starcraft 2: Heart of the Swarm
https://www.youtube.com/watch?v=fGnVHZ4bhB0&index=28&list=PL9QsjkBYtQM4I117ws9PchN0s6A0gLm9q

Roach Drops and Carpet Bombs - Starcraft 2: Heart of the Swarm
https://www.youtube.com/watch?v=fGnVHZ4bhB0&index=15&list=PL9QsjkBYtQM4I117ws9PchN0s6A0gLm9q

Sonntag, Juli 19, 2015

Star Craft 2 Bronze To Masters

Original-Link: http://www.teamliquid.net/forum/sc2-strategy/330787-bronze-to-masters-improving-mechanics


Bronze To Masters Episode 1 - The Basics
https://www.youtube.com/watch?v=SES1IAGlwDU

Bronze To Masters Episode 2 - Bronze League Demonstration
https://www.youtube.com/watch?v=xrBfw-kuhm8

Bronze To Masters Episode 3 - Building Groups
https://www.youtube.com/watch?v=hUQunDbsElg

Bronze To Masters Episode 4 - Silver League Demonstration
https://www.youtube.com/watch?v=o7vBsfrc4W0

Bronze To Masters Episode 5 - Tech and timing
https://www.youtube.com/watch?v=y3YQGubGR_4

Bronze To Masters Episode 6 - Gold League Demonstration
https://www.youtube.com/watch?v=tPr0Rd6ngrw

Bronze To Masters Episode 7 - Scouting and Map Control
https://www.youtube.com/watch?v=CZDqk6YqN1w

Bronze To Masters Episode 8 - Taking a Third, Adding Production
https://www.youtube.com/watch?v=udr9BtFVWGc

Bronze To Masters Episode 9 - Plat Level Demonstration
https://www.youtube.com/watch?v=WGWMaHwHzX0

Bronze To Masters Episode 10 - Masters Level Demonstration
https://www.youtube.com/watch?v=NHlP1X34pg0

Bronze To Masters Episode 11 - Adding Build Variations (TvP)
https://www.youtube.com/watch?v=rUkyEjsZ1r0

Bronze To Masters Episode 12 - Adding Build Variations (TvZ)
https://www.youtube.com/watch?v=0vicuikNGb4

Bronze To Masters Episode 13 - Adding Build Variations (TvT)
https://www.youtube.com/watch?v=1r3ySb7e0dU

Bronze to Masters Episode 14 - Diamond Level Demonstration Games
https://www.youtube.com/watch?v=Svxmfyt-Q_Y

Bronze to Masters Episode 15 - Diamond Level Demonstration Games
https://www.youtube.com/watch?v=ZVogjhro2ZI

Bronze to Masters Episode Terran Episode 16 - Masters Level - Delivering the Killing Blow
https://www.youtube.com/watch?v=eJzWTZm5djE

Bronze to Masters Terran Episode 17 - Analyzing Your Replays
https://www.youtube.com/watch?v=ENiwsTTNMq0

Donnerstag, Dezember 18, 2014

Neues Cordova-Projekt aufsetzen

1. Erzeuge ein Cordova-Projekt mit Android-Plattform

cordova create <directory> <Android-Package> <Cordova-Project>

 cordova create seed de.jdufner.angular.seed Seed

In das erzeuge Verzeichnis wechseln und Android-Plattform hinzufügen.

 cordova platforms add android

Füge grundlegende Plugins hinzu.

 cordova plugin add org.apache.cordova.device
 cordova plugin add org.apache.cordova.console

Durch diese Schritte wurde folgende Verzeichnisstruktur erzeugt:

seed
|- hooks
|- platforms
|- plugins
|- www
   |- css
   |- img
   |- js
      |- index.js -> Hier ist ein app-Objekt drin, welche aus das onDeviceReady-Event reagiert und die Anwendung startet.
   |- index.html

Erzeuge eine APK-Datei.

 cordova build android

Starte App.

 cordova run android

2. Kopiere Angular-Seed in Cordova-Projekt

Aufsetzen der Cordova-Android-Entwicklungsumgebung

Sonntag, Dezember 07, 2014

Meine minimale Git-Konfiguration

Email setzen:

$ git config --global user.email "<email.adress@mail.com>"

Benutzername setzen:

$ git config --global user.name "Vorname Name"

Git soll die Dateien immer nur mit Linefeed speichern:

$ git config --global core.autocrlf true

Rebase beim Pullen ist Pflicht:

$ git config --global branch.master.rebase true
$ git config --global branch.autosetuprebase always

Push setzen

$ git config --global push.default simple

Mittwoch, Januar 22, 2014

VDR Streamdev-Plugin

1. Streamdev-Plugin einfach installieren.

2. /etc/vdr/plugins/streamdevhosts.conf anpassen, also Zugriff im lokalen Netzwerk erlauben

#
# streamdevhosts  This file describes a number of host addresses that
#                 are allowed to connect to the streamdev server running
#                 with the Video Disk Recorder (VDR) on this system.
# Syntax:
#
# IP-Address[/Netmask]
#

127.0.0.1             # always accept localhost
192.168.2.0/24        # any host on the local net


3. Ausprobieren

3.1 Stream öffnen per VDR-Admin:

VDR-Admin liefert ein M3U-Datei, die man im Browser einfach mit VLC öffnet.

3.2. Stream manuell öffnen:

PC: http://debian:3000/1 oder iPad: http://192.168.2.199:3000/1

Ich nutze Devolo Powerline dLAN 500 duo+, damit ging SD und HD jeweils ruckelfrei. Bei HD habe ich noch keine Actionfile getestet.

4. Einschränkung
Obwohl ich Deinterlace im VLC eingeschaltet habe, zeigen sich bei schnellen horizontalen Bewegungen Streifen im Bild.

Dienstag, Januar 14, 2014

Libav avconv / FFmpeg Konfiguration

Libav vs. FFmpeg

Warum Libav? Ich habe Debian installiert und da ist eben avconv von Libav drauf. Ich bin aber nicht auf avconv festgelegt, wenn mir ffmpeg später besser gefallen sollte, dann gehe ich auf ffmpeg. Derzeit sind avconv und ffmpeg so nahe beieinander, dass ich keine gravierende Unterschiede feststellen kann. Die folgenden Anleitung funktioniert derzeit sowohl mit ffmpeg als auch mit avconv.

Konvertierung

Mit VDR speichere ich eine MPEG2-Transportstream (.ts) ab. Dieser Stream ist ziemlich groß! Die Datei soll verkleinert werden, genauer gesagt in MPEG4 (.mp4) konvertiert werden. Das geht mit FFmpeg bzw. Libav.

Konvertierung in iPad-fähiges MP4

Basisparameter, die ich jedesmal setze:

avconv (Programmaufruf)
  -i "concat:00001.ts|00002.ts" (Eingabedateien, Transportstreams können einfach aneinander gehängt werden)
  -y (existierenden Datei überschreiben)
  -strict experimental (experimentelle Algorithmen können genutzt werden)
  -acodec aac (Audio-Codec AAC)
    -ac 2 (2 Audio-Kanäle = Stereo?)
    -ab 160k (Audio-Bitrate 160k)
  -vcodec libx264 (Video-Codec x264)
    -crf 20 (Qualität bei konstanter Bitrate, voreingestellt 23, praktisch verlustfrei 18)
    -preset slow (Qualität des Algorithmus, voreingestellt medium)
    -profile:v baseline -level 30 (Ausgabeformat, welches von iPad unterstützt wird)
  -f mp4 (Containerformat)
  output.mp4 (Ausgabedatei)

Schwarze Ränder abschneiden

cropdetect

Manchmal füllt das Bild den Bildschirm nicht komplett aus, sondern oben / unten ist ein schwarzer Streifen. Die folgenden Parameter nehmen einen Ausschnitt des Film und ermitteln daran die Parameter, mit welchen der Bildausschnitt festgelegt wird.

Zuerst konvertiere ich nur wenige Minuten des kompletten Films um die Parameter zu ermitteln.

-ss 00:15:00 (Offset in HH:MM:SS)
-t 00:03:00 (Dauer in HH:MM:SS)
-vf "cropdetect=24:16:0" (Videofilter mit Schwellwerten für die Schwarz-Erkennung)

crop

Mit den zuvor ermittelten Parametern, wird dann der komplette Film konvertiert.

-vf "crop=720:448:0:64" (Videofilter mit Breite und Höhe des Bildes sowie Offset von links und oben)

Tune-Parameter

 In diesem Parameter kann man nochmal die Art des zu konvertierenden Videos präzisieren:
-tune animation|film (Ich verwende derzeit nur animation)

SD vs. HD

Die zuvor genannten Parameter gelten für SD-Filme. Mit einer Bildrate 25 fps und einer Auslösung, kleiner als HD.

Für HD muss die Bildrate von 50 fps auf 25 fps reduziert werden und das Bild kann mit Faktor 0.5 skaliert werden. Die genauen Parameter muss ich noch ermitteln.

Links

Anleitungen

FFmpeg x264 Anleitung
https://trac.ffmpeg.org/wiki/x264EncodingGuide

Schwarze Ränder abschneiden (cropdetect / crop)
http://www.renevolution.com/understanding-ffmpeg-part-iii-cropping/

Skalierung (scaling)
http://www.renevolution.com/understanding-ffmpeg-part-ii-scaling-video/

Optimierung (tune)
http://superuser.com/questions/564402/explanation-of-x264-tune

Referenzen

avconv Documentation
http://libav.org/avconv.html

ffmpeg Documentation
http://ffmpeg.org/ffmpeg.html

VDR Konfiguration

Meine VDR Konfigurationsänderung

VDR stoppen

"/etc/init.d/vdr stop" oder "killall -9 vdr"

 

Dateigröße des Transportstreams erhöhen

MaxVideoFileSize = 20000 (2000)

 

Automatischer Shutdown verhindern

MinEventTimeout = 0 (30)
MinUserInactivity = 0 (300)

 

VDR starten

"/etc/init.d/vdr start"

 

Referenzen

VDR Optionen sind teilweise in http://www.vdr-wiki.de/wiki/index.php/VDR_Optionen erklärt.

Hier ist mir bei der Durchsicht ein interessantes Feature aufgefallen: record, damit kann man vor und / oder nach der Aufnahme ein Command ausführen. In meiner installierten Version des VDR ist bereits in /etc/vdr/recording-hooks/R90.custom angelegt. Hier können weitere Hooks angelegt werden.

Montag, Januar 13, 2014

Netzwerkkonfiguration

Bevor ich mit der Arbeit an VDR weiter mache, will ich den Remotezugriff von Win7 auf Debian verbessern. Statt mit der IP-Adresse auf X (X -query 192.168.2.110 :1) oder vdradmin (http://192.168.2.110:8001) zuzugreifen, wäre es schöner dem Rechner einen Namen zu geben und dann mit bspw http://debian:8001/ auf vdradmin zuzugreifen.

In meinem Fall habe ich diese Problem wie folgt gelöst:

In dem DHCP-Server meiner Easybox habe ich der MAC-Adresse des Linux-PC eine feste IP-Adresse zugewiesen. Dadurch ist sichergestellt, dass Debian immer dieselbe IP erhält, auch wenn der Rechner mal längere Zeit nicht in Betrieb war.



In der hosts-Datei des Win7-PC muss der IP ein Name zugewiesen werden. Die hosts-Datei liegt bei mir unter C:\Windows\System32\drivers\etc . Um die Datei ändern zu können, muss man allerdings Administrator sein.


Editor als Administrator ausführen und C:\Windows\System32\drivers\etc\hosts öffnen.

Dienstag, Januar 07, 2014

Sendersuchlauf

Sender suchen

Anleitung ist http://www.vdr-wiki.de/wiki/index.php/W_scan

Wichtig: Vorher vdr stoppen. Das geht mit

/etc/init.d/vdr stop

Konkreter Befehl, wenn Astra 19,2 Ost (Offizielle Senderliste) verwendet wird und eine Ausgabe für VDR (>= 1.7) erzeugt werden soll:

sudo -u vdr sh -c "w_scan -o7 -fs -sS19E2 >>/var/lib/vdr/channels.conf"

Die Ausgabe sollte so aussehen:

w_scan version 20120605 (compiled for DVB API 5.4)
using settings for 19.2 east Astra 1F/1G/1H/1KR/1L
scan type SATELLITE, channellist 67
output format vdr-1.7
output charset 'UTF-8', use -C <charset> to override
Info: using DVB adapter auto detection.
    /dev/dvb/adapter0/frontend0 -> SATELLITE "Conexant CX24116/CX24118": very good :-))

Using SATELLITE frontend (adapter /dev/dvb/adapter0/frontend0)
-_-_-_-_ Getting frontend capabilities-_-_-_-_
Using DVB API 5.4
frontend 'Conexant CX24116/CX24118' supports
INVERSION_AUTO
DVB-S
DVB-S2
FREQ (0.95GHz ... 2.15GHz)
SRATE (1.000MSym/s ... 45.000MSym/s)
using LNB "UNIVERSAL"
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
trying 'S2 f = 10729 kHz V SR = 22000  2/3 0,35  8PSK'
(time: 00:00)
trying 'S  f = 10744 kHz H SR = 22000  5/6 0,35  QPSK'
(time: 00:03) (time: 00:05) signal ok:
    S  f = 10744 kHz H SR = 22000  5/6 0,35  QPSK
Zwischendurch sollten die Namen der Sender auftauchen, z.B.:
tune to: S  f = 10743 kHz H SR = 22000  5/6 0,35  QPSK
(time: 03:04)     service = tagesschau24 (ARD)
    service = Einsfestival (ARD)
    service = EinsPlus (ARD)
    service = arte (ARD)
    service = PHOENIX (ARD)
    service = Test-R (ARD)

Läuft bei mir ca. 25 Minuten und erzeugt 1254 Zeilen in channels.conf
wc -l channels.conf
1254 channels.conf

Montag, Januar 06, 2014

Treiber für Hauppauge installieren

Treiber installieren

Firmware per Paketmanager installieren - Ist dieser Schritt wirklich nötig?

In vielen Anleitungen, die ich gefunden habe, steht, dass Treiber-Firmware installiert werden muss. Das ist richtig. Dazu werden oft die folgenden zwei Pakete genannt und installiert. Ich habe das auch gemacht, aber zweifle am Erfolg, denn in den Listen der Pakete ist kein Treiber CX24116 enthalten. Bei manchen scheint es auch ohne die Firmware zu klappen, aber es gibt auch einige, die damit ein Problem haben: http://www.vdr-portal.de/board/thread.php?threadid=92729


Man findet die Pakete, wenn man nach "dvb" oder "firmware" sucht:
  1. firmware-linux-free-3.2
    Dieses Paket enthält Firmware, die bisher im Linux-Kernel enthalten war und den Debian Free Software Guidelines gerecht wird.
  2. firmware-linux-nonfree-0.36+wheezy.1
    This package contains the binary firmware for  various drivers in the Linux kernel.  This is a collection of firmware blobs which are not individually large enough to warrant a standalone package.

Firmware manuell installieren

Für Hauppauge WinTV-NOVA-HD-S2 muss derselbe Treiber wie Hauppauge WinTV-HVR-4000 installiert werden: CX24116. Auf der Seite von linuxtv.org ist eine ausführliche Beschreibung über die unterschiedlichen Versionen des Treibers. Derzeit funktionieren aber nur die Links der folgenden Versionen:
Jetzt einfach die Anleitung auf linuxtv.org befolgen und den Treiber erzeugen und nach /lib/firmware kopieren.

Leider hat Hauppauge keine Linux-Treiber auf seiner Homepage: http://www.hauppauge.de/site/support/support_linux.html.

Karte erkennen

root@debian:/home/jdufner# lspci -vnn
...
01:00.0 VGA compatible controller [0300]: Advanced Micro Devices [AMD] nee ATI Cedar PRO [Radeon HD 5450/6350] [1002:68f9] (prog-if 00 [VGA controller])
    Subsystem: Micro-Star International Co., Ltd. Device [1462:2127]
    Flags: bus master, fast devsel, latency 0, IRQ 11
    Memory at d0000000 (64-bit, prefetchable) [size=256M]
    Memory at fdde0000 (64-bit, non-prefetchable) [size=128K]
    I/O ports at dc00 [size=256]
    Expansion ROM at fde00000 [disabled] [size=128K]
    Capabilities: [50] Power Management version 3
    Capabilities: [58] Express Legacy Endpoint, MSI 00
    Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
    Capabilities: [150] Advanced Error Reporting

01:00.1 Audio device [0403]: Advanced Micro Devices [AMD] nee ATI Cedar HDMI Audio [Radeon HD 5400/6300 Series] [1002:aa68]
    Subsystem: Micro-Star International Co., Ltd. Device [1462:aa68]
    Flags: bus master, fast devsel, latency 0, IRQ 51
    Memory at fdddc000 (64-bit, non-prefetchable) [size=16K]
    Capabilities: [50] Power Management version 3
    Capabilities: [58] Express Legacy Endpoint, MSI 00
    Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
    Capabilities: [150] Advanced Error Reporting
    Kernel driver in use: snd_hda_intel

04:02.0 Multimedia video controller [0400]: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [14f1:8800] (rev 05)
    Subsystem: Hauppauge computer works Inc. Device [0070:6906]
    Flags: bus master, medium devsel, latency 64, IRQ 18
    Memory at f9000000 (32-bit, non-prefetchable) [size=16M]
    Capabilities: [44] Vital Product Data
    Capabilities: [4c] Power Management version 2
    Kernel driver in use: cx8800

04:02.1 Multimedia controller [0480]: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port] [14f1:8801] (rev 05)
    Subsystem: Hauppauge computer works Inc. Device [0070:6906]
    Flags: bus master, medium devsel, latency 64, IRQ 18
    Memory at fa000000 (32-bit, non-prefetchable) [size=16M]
    Capabilities: [4c] Power Management version 2
    Kernel driver in use: cx88_audio

04:02.2 Multimedia controller [0480]: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] [14f1:8802] (rev 05)
    Subsystem: Hauppauge computer works Inc. Device [0070:6906]
    Flags: bus master, medium devsel, latency 64, IRQ 18
    Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
    Capabilities: [4c] Power Management version 2
    Kernel driver in use: cx88-mpeg driver manager

04:02.4 Multimedia controller [0480]: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [IR Port] [14f1:8804] (rev 05)
    Subsystem: Hauppauge computer works Inc. Device [0070:6906]
    Flags: bus master, medium devsel, latency 64, IRQ 9
    Memory at fc000000 (32-bit, non-prefetchable) [size=16M]
    Capabilities: [4c] Power Management version 2
Grafikkarte und TV-Karte gefunden (andere Sachen wir Netzwerkkarte, SATA-Controller etc entfernt)!

 Was sagt Linux zur TV-Karte?
root@debian:/home/jdufner# dmesg | grep -i hauppauge
[    7.662275] cx88[0]: subsystem: 0070:6906, board: Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 [card=69,autodetected], frontend(s): 1
[    7.880799] tveeprom 1-0050: Hauppauge model 69100, rev B4C3, serial# 8545779
[    7.880814] cx88[0]: hauppauge eeprom: model=69100
[    7.924011] Registered IR keymap rc-hauppauge
[    7.924146] input: cx88 IR (Hauppauge WinTV-HVR400 as /devices/pci0000:00/0000:00:1e.0/0000:04:02.2/rc/rc0/input6
[    7.924198] rc0: cx88 IR (Hauppauge WinTV-HVR400 as /devices/pci0000:00/0000:00:1e.0/0000:04:02.2/rc/rc0
[    7.959460] cx88[0]/2: subsystem: 0070:6906, board: Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 [card=69]
Was sagt Linux zum Treiber?

root@debian:/home/jdufner# dmesg | grep cx
[   29.539838] cx24116_firmware_ondemand: Waiting for firmware upload (dvb-fe-cx24116.fw)...
[   30.008694] cx88-mpeg driver manager 0000:04:02.2: firmware: agent loaded dvb-fe-cx24116.fw into memory
[   34.959511] cx24116_load_firmware: FW version 1.26.90.0
[   34.959527] cx24116_firmware_ondemand: Firmware upload complete
Erkannt!

Die Treiber funktionieren, wenn hier folgende Geräte angezeigt werden:

root@debian:/home/jdufner# ls  -l /dev/dvb/adapter0/
insgesamt 0
crw-rw---T+ 1 root video 212, 1 Jan  6 17:03 demux0
crw-rw---T+ 1 root video 212, 2 Jan  6 17:03 dvr0
crw-rw---T+ 1 root video 212, 0 Jan  6 17:03 frontend0
crw-rw---T+ 1 root video 212, 3 Jan  6 17:03 net0
Bingo!

Unfreien Radeon-Treiber installieren

Anleitung:

http://wiki.debianforum.de/Unfreie_Grafiktreiber_für_ATI

Nach Intialisierung folgende Ausgabe:

root@debian:/home/jdufner# aticonfig --initial
Uninitialised file found, configuring.
Using /etc/X11/xorg.conf
Saving back-up to /etc/X11/xorg.conf.original-0

Debian-Paketquellen erweitern

Debian ist enthält per Definition nur freie Software, also auch keine von Herstellern für Linux zur Verfügung gestellte Treiben, die Closed Source sind. Um diese Treiber trotzdem installieren zu können, müssen die Paketquellen erweitert werden:

/etc/apt/sources.list

deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free

# wheezy-updates, previously known as 'volatile'
deb http://ftp.de.debian.org/debian/ wheezy-updates main contrib non-free
deb-src http://ftp.de.debian.org/debian/ wheezy-updates main contrib non-free
Dokumentation: http://wiki.debianforum.de/Sources.list

Eine weiter Möglichkeit neue Paketquellen hinzuzufügen ist:

root@debian:/etc/apt# wget -P /etc/apt/sources.list.d http://www.e-tobi.net/blog/files/e-tobi.list
--2014-01-06 08:40:36--  http://www.e-tobi.net/blog/files/e-tobi.list
Auflösen des Hostnamen »www.e-tobi.net (www.e-tobi.net)«... 77.236.96.67
Verbindungsaufbau zu www.e-tobi.net (www.e-tobi.net)|77.236.96.67|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 200 [application/octet-stream]
In »»/etc/apt/sources.list.d/e-tobi.list«« speichern.

100%[==================================================================================================>] 200         --.-K/s   in 0s     

2014-01-06 08:40:36 (26,4 MB/s) - »»/etc/apt/sources.list.d/e-tobi.list«« gespeichert [200/200]

root@debian:/etc/apt# wget -P /etc/apt/preferences.d http://www.e-tobi.net/blog/files/e-tobi
--2014-01-06 08:40:49--  http://www.e-tobi.net/blog/files/e-tobi
Auflösen des Hostnamen »www.e-tobi.net (www.e-tobi.net)«... 77.236.96.67
Verbindungsaufbau zu www.e-tobi.net (www.e-tobi.net)|77.236.96.67|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 56 [application/octet-stream]
In »»/etc/apt/preferences.d/e-tobi«« speichern.

100%[==================================================================================================>] 56          --.-K/s   in 0s     

2014-01-06 08:40:49 (7,92 MB/s) - »»/etc/apt/preferences.d/e-tobi«« gespeichert [56/56]

Sonntag, Januar 05, 2014

GDM3 für Remote-Login von Windows / Cygwin konfigurieren

Linux konfigurieren

 Betriebssystem:

jdufner@debian:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.3 (wheezy)
Release:        7.3
Codename:       wheezy

Remote Login für GDM3 / XDM einstellen. Dazu folgende Dateien ändern:

/etc/gdm3/daemon.conf
[security]
DisallowTCP=false

[xdmcp]
DisplaysPerHost=1
Enable=true

Zugriff von Windows

cygwin-Commandline:
X -screen 0 1024x768@1 -broadcast :1

oder
X -screen 0 1024:768@1 -query 192.168.2.110 :1
Viel Spaß damit!

Sonntag, August 25, 2013

JUnit-Tests parallel ausführen

Q: Wie kann ich JUnit-Tests parallel ausführen?
A: Mit org.junit.experimental.ParallelComputer.ParallelComputer(boolean, boolean) ! Ein Anwendungsbeispiel ist in
How to make JUnit test cases execute in parallel? [duplicate] gezeigt. Ich hab's ausprobiert und es funktioniert wunderbar. Es funktioniert sowohl den ParallelComputerTest alleine auszführen als auch in einer Suite mit anderen Tests, wobei die anderen Tests sequentiell ausgeführt werden..

Aufsetzen der Cordova-Android-Entwicklungsumgebung

Installationsrezept

  1. Java Standard Edition Development Kit downloaden und installieren (derzeit ist Java 7.0.25 aktuell, ich verwende die 64-bit Edition)
    • JAVA_HOME setzen
    • %JAVA_HOME%\bin in PATH aufnehmen
  2. Apache Ant downloaden und installieren (derzeit ist 1.9.2 aktuell)
    • ANT_HOME setzen
    • %ANT_HOME%\bin in PATH aufnehmen
  3. Android SDK downloaden und installieren (ich verwende die 64-bit Edition, die aktuelle Version)
    • ANDROID_SDK_HOME setzen
    • %ANDROID_SDK_HOME%\tools und %ANDROID_SDK_HOME%\platform-tools in PATH aufnehmen
  4. Node.js downloaden und installieren (ich verwende v0.10.17)
    1. Command-Shell öffnen mit cmd
    2. Cordova installieren: npm install -g cordova
  5. Netbeans downloaden und installieren (derzeit ist 7.3.1 aktuell, die 7.4 Beta ist nicht aktuell)
  6. Google Chrome downloaden und installieren, sowie folgende Plugins
    1. NetBeans Connector installieren
    2. Ripple Emulator (Beta) installieren

Erstes Projekt:  "Hello World!"

Einfach die Anleitung don Cordova-CLI befolgen.

Im nächsten Blog erzähle ich, wie man das GitHub-Projekt Zählerverwaltung auscheckt und zum Laufen bekommt. Bis dahin könnt ihr schonmal einen GutHub-User anlegen.