Archiv der Kategorie: Uncategorized

Oracle 12 Docker-Image

Benötigt man ein Oracle 12, dann kann man selbstverständlich ein 30 GB VBox-Image benutzen. Es gibt aber auch die Möglichkeit, mit einem leichtgewichtigeren Docker-Image zu arbeiten, zumindest wenn man auf Linux-Basis arbeiten kann. Mit der richtigen Anleitung von Wouter Scherphof ist das Ganze relativ einfach.

Allerdings wird hier ein Grund-Image benutzt, für welches kein Dockerfile angegeben wird. Das ist aus Sicherheitsgründen nicht wirklich gut, da ein Benutzer mit Docker-Root auch auf dem Hostsystem Root ist, zumal beim Ausführen auch das ‚--privileged‚ Flag gesetzt wird.

Um dies zu umgehen kann man auf Git-Hub ein offizielles Oracle-Linux benutzen und es anstatt des vom Autor zur Verfügung gestellten benutzen. Bis auf eine Zeile in Step 1 kann man alles soweit übernehmen.

# RUN userdel oracle && rm -rf /home/oracle && rm
/var/spool/mail/oracle

Danke an Martin und an Seppel für die Hilfe.

Webmontag – tolle Talks – viele Gedanken

Mein erster Webmontag. Was soll ich sagen, der Raum war voll, super Atmosphäre, Bier und Pizza. Für mich natürlich Saft, aber der Pizza konnte ich mich nicht enthalten. Die Themen durchweg interessant und sehr spannend (den letzten Beitrag musste ich leider verpassen).

Zum ersten Beitrag würd‘ ich schlicht: „Geld verdienen mit Youtube“ sagen, von Lukas Gehner locker vorgetragen. Youtube-Netzwerke, Reichweite, Tausender-Kontakt-Preis, Affiliate, 12 – 17 Jährige die Hauptzielgruppe, Partner-Programme, Ads …

Man benutzt Youtube zur Unterhaltung, Weiterbildung, für Schularbeiten oder wie ich zur Weiterbildung (jeden Abend bis spät). Aber dieser Talk hat mir noch einmal vor Augen geführt, was für eine unglaubliche Business-Power und eine riesige, vielschichtige Maschinerie hinter dem Filmchen-Abspiel-Portal steht. Was sich hier für Möglichkeiten und ganze Wertschöpfungsketten, Vermittlungsschichten entwickelt haben ist einfach enorm.

Die beiden folgenden zusammenhängenden Talks über ReactJS und Flux von René Viering & Christian Kühl haben mir gut gefallen. Sie liegen voll im browsergetriebenen Trend, immer mehr Funktionalität in den Client zu verlagern. Mit den beiden angesprochenen Bibliotheken habe ich noch nichts zu schaffen gehabt. Danke für die Slides.

Allerdings finde ich das Prinzip des virtuellen DOM von ReactJS einen ziemlich coolen Ansatz, das effektiv neu darzustellende Diff herauszubekommen. Flux, ok, schon tausendmal gesehen irgendwie habe alle Model – View – Contoller. Auch wenn das jeweils anders genannt wird. Neuer ist halt, dass alles im Browser passiert und das Backend … ja wo war eigentlich das Backend?

JavaScript, die momentan wohl am schnellsten wachsende Sprache, die immer mehr Durchschlagskraft bekommt. Neue Berufe sind in den letzten Jahre ausgereift: Frontend-Entwicklung. Es ist müßig, langweilig und dumm, Flame Wars wie Backend versus Frontend, Server versus Client aufzumachen. Das gab es vor Jahrzehnten mit vi versus emacs. Man erinnert sich.

Aber, es ist auch zu beobachten, wie weit am Anfang die ganze Entwicklung von Client/JavaScript steht. Gemessen an den ausgereiften Toolchains, Frameworks, CI-Ketten, Qualitätsicherung usw von z. B. Java ist hier noch eine ganze Menge zu leisten. Andererseits ist die Dynamik der Weiterentwicklungen in diese Richtung wahnsinnig hoch. Die Anforderungen werden in Zukunft eher neue Aspekte hinzukommenlassen als zu sinken.

Was mich stört, ist, wie hoch fragmentiert die Werkzeuge sind, wie vereinzelt. Es kommt einem so vor, dass jede Aufgabe ihre eigene Library bzw. deren mehrere hat. Man sieht sich einem großen Haufen quietsch-bunter Glasmurmeln gegenüber. Um einen Use-Case abzubilden, muss man viele der Teilchen zusammenfügen und hoffen, dass sie passen und vor allem passend bleiben bzw. nicht in einem halben Jahr schon wieder verschwunden sind.

Jede Library hat natürlich einen hippen Namen, lustiges Logo und eine tolle moderne Webseite. Frontend – die wissen, wie Usability ist, wie etwas gut aussieht und sich hoffentlich toll bedienen lässt, es Spaß macht. Das ist genau das, was vielen gewachsenen und großen Anwendungen einfach fehlt. So gesehen ist die aktuelle Entwicklung großartig. Endlich werden diese techniklastigen, sperrigen Maschinenmasken gesprengt, das ist begrüßenswert.

Andererseits muss sich erst einmal zeigen, was sich von dem bunten Murmelhaufen letztlich als tauglich, stabil, wartbar und zuverlässig übrig bleibt. Das es auch noch nach Jahren gut bleibt und seinen Support hat. Da habe ich doch schon viele, viele Trens und Frameworks kommen und gehen sehen. Auch solche Frameworks, die erst in der 2. oder späteren Version (wie z. B. J2EE / JPA / JavaFX …) überhaupt effektiv einsetzbar waren. Wie ist das mit Themen wie Security, Sicherheits-Updates, Pen-Tests? Habe ich wirklich einen langfristig, stabilen und beherrschbaren Stack an Bibliotheken und Werkzeugen aus der JavaScript-Welt? „Dat wird sich uswiesen.“

Der Entwicklung sehe ich mit Spannung entgegen und freue mich über meine eigenen kleinen JavaScripte.

Und am Schluss noch mal fettes Danke an alle, die eine so tolle Veranstaltung planen, organisieren, durchführen, Talks halten und Pizza bestellen …

Antennen-Verlängerung fürs WLAN

Wenn Kinder größer werden und machmal auch die Wohnungen, dann kann es sein, dass der kleine WLAN-Router nicht bis in das geliebte Kinderzimmer reicht. Heute benötigt man ja (angeblich) für die Erledigung jedweder Schulaufgaben das Internet.

Kabel ziehen ist eine gute Idee, aber ich dachte mir, dass ein bisschen mehr Antennenleistung vielleicht Abhilfe schaffen würde. (Tat sie letztlich nicht.) Bei heise.de/hardware-hacks fand ich eine interessante Anregung, war dann aber doch ob der genauen Bemaßung verlegen. Bei den Amateurfunk-Nachteulen schließlich fand ich, was ich suchte. (Danke dafür.)

Gesagt getan zog ich in den Baumarkt und besorgte ein Pack Schweißdraht. Styropor-Block besaß ich noch von irgendeiner Gerätesammlung. Also die Schweißdrähte mit dem Kneifer grob abgeschnitten. Dann mit meinem Drehmelchen vorsichtig auf Maß gebracht.

WLANAntenna.sticksFoto: DL1HX

Das Abmessen und einfädeln in das Styropo gestaltete sich etwas fummelig. Auch das „Abstimmen“ durch Verschieben der Konstruktion nach Oben bzw. Unten, um die Dipolmitte zu finden brauchte Zeit.

WLANAntenna.upFoto: DL1HX

Schließlich ausgerichtet, brachte die so entstandene Richtantenne etwas mehr Leistung. Nicht ausreichend für drei Wände, aber ausreichend als Übung. Es funktioniert tatsächlich.WLANAntenna.sideFoto: DL1HX

Kurzwellen-Küche: PSK-Modem Part-2

Ich habe zwar schon von Dietmar DL1ZAX die neuen NF-Übertrager erhalten, aber die preiswerten vom Versand-Handel haben ihren Zweck erfüllt. Nach langem Rätseln, ob denn mein Signal kaputt gegangen ist und vielleicht die Eingangs-Stufe des Tranceivers überlastet, kam der befreiende Kontakt mit Jochen DB8AS.

Jochen sagte, dass er mich erst für einen „Südafrikaner“ hielt, da mein Signal so schwach sei. Mein Signal sei aber sauber und ok. Genau das ist auch der generische Sinn eines Reports eines QSOs, die eigene Signalqualität einschätzen zu können.

Soweit sogut, ich werde die neuen Übertrager einbauen. Diese besitzen gegenüber den 4 Ohm rein ohmschen Widerstandes immerhin schon mal 60 Ohm. Das ist bei nomineller Impedanz der Eingangsstufe von 600 Ohm immerhin schon mal ein Fortschritt. Auch spielen die Übertrager im „ZAX-Link“ von Dietmar wohl ausgezeichnet. Also, von den Profis lernen heißt es, aber trotzdessen eigene Sachen machen.

Kurzwellen-Küche: PSK-Modem Part-1 spielt

Nach dem üblichen Verdrahtungsfehler spielt das Selbstbau-Modem Phase 1 grundsätzlich. Senden (mittels VOX, da der CAT-Teil noch nicht fertig ist) und Empfangen klappt schon ziemlich gut. Wenn ich die einfachen NF-Übertrager durch die von Kollegen empfohlenen ‚ETAL P1200‘ austausche, bin ich auf die hoffentlich daraus folgenden Verbesserungen gespannt.

Nach ein bisschen Gefummel mit den Einstellungen des FT897D hab ich mit Zimmerantenne (HPF1) schon gut Europa und asiatisches Russland in der Betriebsart PSK31 gehört. Für den ersten Versuch gar nicht schlecht.

IMG_0107

Und wenn man mal Bedienungsanleitungen lesen würde, dann hätte man auch gleich gewusst, dass die erste Menü-Einstellung das erweiterte Menü freischaltet, damit man den Digi-Usermod Upper Sideband einstellen kann.

Part-2 des Projektes ist dann die CAT-Steuerung des Transceivers mittels USB-Bausteins und diverser Opto-Koppler zwecks galvanischer Trennung. Mal sehen, wann ich dazu die Zeit finde, denn es laufen da parallel die Vorbereitungen zum Hessentag 2013 an dem unser Ortsverband Kassel / F12 mitwirkt.

JBoss AS7 lokales und globales JNDI

Wenn man ein Set von Web-Applikationen hat (Bestands-Code), die über die selbe Datenbank-Zugriffs-Klasse ihren Zugriffe kapseln, dann ist das schon mal nicht schlecht.

Wenn dann aber in dieser Klasse der JNDI-Name fest kodiert ist und man aber dummerweise die Datasources JNDI-zentral definiert hat (um sie zentral zu warten), ist das nicht gut. Da natürlich alles Web-Applikationen eigene Datenbanken besitzen sollen.

Eine gute Referenz und Übersicht über die JNDI-Regeln ist hier zu finden.

Also ist die Aufgabe, die globalen JNDI-Namen auf den einen lokalen JNDI-Namen jeweils zu mappen. Wenn man es erst einmal gefunden hat, ist dies trivial. Der Eintrag in der WEB-INF/jboss-web.xml hierzu lautet:


<resource-ref>
<res-ref-name>comp:jdbc/Datasource</res-ref-name>
<jndi-name>java:jboss/datasources/MyDataSource</jndi-name>
</resource-ref>

Der analoge Eintrag in der web.xml hierzu ist:


<resource-ref>
<description>java:postgreSQL Datasource</description>
<res-ref-name>jdbc/DataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

Deployment „per Hand“ in den Nexus

Man hat eine Menge von JAR-Dateien, welche in den Nexus eingefügt werden sollen, möchte dies aber nicht über die Weboberfläche Datei für Datei tun und die Administratoren lassen einen direkten Zugriff nicht zu. Also folgende Zeile hilft pro Datei:

mvn -X deploy:deploy-file -DrepositoryId=$REPOSITORYID -DgroupId=a.b.d.e -DartifactId=$1 -Dversion=$VERSION -Dfile=$2 -DgeneratePom=true -Dpackaging=$3 -DcreateChecksum=true -Durl=http://repo.xxxxx.priv:8081/nexus/content/repositories/yyyyyy/

Der Eintrag REPOSITORYID verweist dabei auf einen Eintrag in der ~/.m2/settings.xml. Hier kann noch eine notwendige Authentifizierung angegeben werden, z. B. Name und Passwort.


<servers>
<server>
<id>REPOSITORYID</id>
<username>hxxxxxxx</username>
<password>PasswortHierEinfügen</password>
</server>
</servers>

Lernen für die Amateurfunkprüfung

Die Landeskürzel kann man gut hier lernen: DX-Cluster.

Testprüfungen kann man hier machen: Prüfungstraining für das Amateurfunkzeugnis. Bei der Technik-Prüfung bin ich immerhin schon bei 84% um die 35 Minuten.
Mit Lernen selbst muss ich noch in Technik und Vorschriften die EMV-Kapitel vollständig durchlesen. Es sind inzwischen 1616 Lernkarten und ich mache pro Tag um die 150 Karten im Test.

KW-Hören macht eine Menge Freude. Besser wäre, wenn ich die Prüfung schon hinter mir hätte.

Clean Code Developer (Gelb)

Nun trag ich das gelbe Armbändchen schon eine geraume Weile und komme doch tatsächlich auch mal wieder zum Programmieren. Aber am „Principle of least astonishment“ werde ich noch ein bisschen arbeiten, ehe ich weiter gehen kann. Mit den anderen Dingen bin ich relativ zufrieden. Im aktuellen Projekt hängen allerdings die DAOs direkt an unseren Controllern (Actions). Ob das dem „Dependency Inversion Principle“ in einer MVC-Umgebung wiederspricht, werden wir mal diskutieren.

Helios-WTP-Umstellung

Damit der Deploy-Mechanismus von Ganymade-Projekten richtig funktioniert in Eclipse-Helios müssen ggf. Dateien per Hand angepasst werden. Dies wird durch die PlugIn-Mechanismen nicht vorgenommen.

.classpath <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>

im .project sollte folgendes eingetragen sein

<nature>org.maven.ide.eclipse.maven2Nature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>