Impressum | Kontakt

Download von rpi-update:

sudo wget goo.gl/1BOfJ -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update

Aktuelle Firmware anzeigen:

> sudo /opt/vc/bin/vcgencmd version

Firmware updaten (Neustart erforderlich):

> sudo rpi-update

Oft hat man das Problem, dass eine grafische Oberfläche bei Änderungen eines Objekts aktualisiert werden muss. Ganz elegant geht dies mit dem Observer/Observable-Modell:

Das Objekt, das Änderungen weitermelden soll heißt "Observable". Bei ihm müssen sich alle anmelden, die über Änderungen informiert werden wollen.

  • Observables müssen die Klasse Observable erweitern.
  • Oberserver müssen das Interface Observer implementieren.

Im folgenden Beispiel ist die Klasse A ein Zuhörer (Observer), die Klasse B dient als Erzähler (Observable). Das Testprogramm generiert einige Aktionen für zwei Erzähler. Die Zuhörer nehmen die Änderungen wahr und melden dies in der Konsole.

Bei grafischen Oberflächen ist (nach meinem bisherigen Kenntnisstand) anzumerken, dass ein Hauptprogramm, dass JFrames erweitert, nicht direkt die Funktion eines Zuhörers (Observer) haben kann. Hier müssen spezielle Erweiterungen für Textfelder etc. angelegt werden, die diese Funktion übernehmen.

SSL-Zertifikate können bei Firefox/Thunderbird über die Einstellungen importiert werden. Bei Google-Chrome gibt es unter Linux dafür keine Einstellmöglichkeiten. Hier müssen die Zertifikate über das System importiert werden.

Zuerst soll das root-Zertificat von CACert importiert werden. Häufig reicht dieses schon aus. In der Konsole gibt man ein:

curl -k -o "cacert-root.crt"   "http://www.cacert.org/certs/root.crt"
curl -k -o "cacert-class3.crt" "http://www.cacert.org/certs/class3.crt"
certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CAcert.org" -i cacert-root.crt
certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CAcert.org Class 3" -i cacert-class3.crt

Eigene Zertifikate hinzufügen

Am einfachsten ist es, die Zertifikate in Firefox zu installieren und von dort dann zu exportieren. Wenn das exportierte Zertifikat in der Datei myCert.pem gespeichert wurde, kann es über folgenden Befehl importiert werden:

certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "Zertifikatsname" -i myCert.pem

Anzeigen der installierten Zerttifikate

certutil -L -d sql:$HOME/.pki/nssdb


Entfernen der Zertifikate:

certutil -D -n  -d sql:$HOME/.pki/nssdb

 

Mit Openvpn auf den Schulserver zugreifen

Diese Anleitung wurde mit openvpn unter Ubuntu 12.04.4 LTS erfolgreich an einem Alice-Router getestet.

1. Vorbereitungen

Der Netzwerkmanager mit dem vpn-Modul dient als Ausgangsbasis. Ggf. muss die VPN-Erweiterung noch installiert werden:

$> sudo apt-get install network-manager-openvpn

Nach der Installation kann über den Netzwerkmanager eine VPN-Verbindung vom Typ OpenVPN hinzugefügt werden.

2. VPN-Zugangsdaten besorgen

Jeder Benutzer, der vpn benutzen möchte, muss auf dem Schulserver individuell freigeschaltet werden (bitte an den Systemverwalter wenden). Dabei werden die Zugansdaten in einem Ordner OpenVPN im Homeverzeichnis abgelegt. Der Ordner enthält die beiden Dateien

  o Vom_Internet.ovpn und
  o client.p12

Dieser Ordner muss per USB-Stick auf den Heimrechner kopiert werden. Bis hierher ist die Sache unabhängig vom Betriebssystem.

3. Linuxanpassung

Diese beiden Dateien müssen aber linuxgerecht umgewandelt werden:

1. Zertifikat der Zertifizierungsstelle:

  $> openssl pkcs12 -in client.p12 -out client.pem


2. Zertifikat des Benutzers:

  $> openssl pkcs12 -in client.p12 -out client.crt -clcerts -nokeys


3. Privater Schlüssel:

  $> openssl pkcs12 -in client.p12 -out client.key -nocerts

Auf alle Passwortnachfragen einfach Enter drücken.

4. Konfiguration im Netzwerkmanager:

  o Gateway            b-ts-pnos.logoip.de
  o Benutzername       xxx
  o Benutzerpasswort   <immer fragen>
  o Gruppenname        lehrer
  o Gruppenpasswort    <immer fragen>
  o CA-Datei           client.crt

5. Konfiguration /etc/hosts:

  # LogoDIDACT Sources
  172.18.18.1 itb
  172.18.18.1 moodle
  172.18.18.1 cms
  172.18.18.1 print
  172.18.18.1 mrbs
  172.18.18.1 webmail

6. Starten der Verbindung (in der Konsole):

  $> sudo openvpn Vom_Internet.ovpn

7. Test:

  • im Browser als URL itb eingeben:
    --> es erfolgt eine Nachfrage nach Benuterzname/Passwort
    Nach Passworteingabe gelangt man in die Serveroberfläche  (gelingt ggf. nur Lehrern)

  • im Dateimanager:
    --> URL (im Nautilus):  smb://xxx@logosrv/homes/
          Benutzername .. xxx
          Domäne ............ schule
          Kennwort .......... yyy
    Anschließend ist man mit dem Homeverzeichnis verbunden und kann damit wie mit einem lokalen Verzeichnis arbeiten.

Update einer dynamischen IP per Skript

Voraussetzung:

Der Benutzer hat eine Account bei dyndns.org. Im Folgenden soll dieser Host demo.dyndns.org heißen, der Benutzername ist karl, sein Passort xxxxx.

Aktuelle IP ermitteln:

Die aktuelle IP des Rechners erhält man über die Seite checkip.dyndns.org:

IP=`wget -q -O - h ttp://checkip.dyndns.org | grep IP | expr \`awk '{print $6}'\` : '\([0-9.]*\)'`

IP aktualisieren:

wget -q -O - "http://karl:xxxxx@members.dyndns.org/nic/update?system=dyndns&hostname=demo.dyndns.org&myip=$IP&wildcard=ON&offline=NO"

ERROR: Content Element with uid "1224" and type "jph_codesnippets_pi" has no rendering definition!

Der erste Blog-Eintrag

In diesem Bereich sollen unstrukturiert Informationen hinterlegt werden, die sich im Laufe der Zeit so nebenbei ergeben. In gewissem Sinne dient das als Fundgrube für spätere Verwendung.

Die Datenbank sqlite3 erfreut sich wegen ihrer Einfachheit (keine Konfiguration) großer Beliebtheit. Mit Java kann darauf einfach zugegriffen werden. Benötigt wird die Datei sqlitejdbc-v056.jar.

Mit folgendem Befehl kann dann ein Programm SqliteDemo im Ordner ~/java/sqlite gestartet werden:

java -classpath /home/walter/java/sqlite:./sqlitejdbc-v056.jar SqliteDemo

 

In Html5 können die Input-Elemente eines Formulars bereits eine Menge an Validierung übernehmen.

Pflichtfeld:

<input type="text" name="username" required="required" />

Autofocus auf ein Eingabefeld setzen:

<input type="text" name="username" required="required" autofocus="autofocus" />

Platzhalter für Anzeige in einem leeren Feld:

<input type="text" name="username" placeholder="Geben Sie Ihren Benutzernamen ein" />

Eingabe auf Zahlen beschränken (erlaubt sind Javascript konforme reguläre Ausdrücke):

<input type="text" name="alter" placeholder="ganze Zahl" pattern="[0-9]+" />

Email-Input:

<input type="text" name="mail" />

Das neue Ubuntu 12.10 soll als virtuelle Maschine installiert werden. Gastsystem ist ein Ubuntu 12.04-System. Zum Testen soll ein Fork von Ubuntu 12.10 verwendet werden, der nicht auf Unity sondern der Gnome-Shell beruht. Diese inoffizielle Variante mit Gnome 3 nennt sich  Opens external link in new windowUbuntu Gnome Remix .

Der Einfachheit halber wird die gesamte Festplatte ohne weitere Partitionierung ausgewählt und alle Standardeinstellungen übernommen.Die Grundinstallation geht erfreulich sehr schnell. Nach kaum 10 Minuten auf einem 5-Jahre alten PC ist alles fertig und das System neu gestartet. Das liegt sicherlich auch am reduzierten Softwareumfang: es wird nicht das Libreoffice-Paket sondern Abiword und gnumeric installiert. Als Kernel kommt 3.5.17 zum Einsatz. 

Das System reagiert erheblich schneller als das auf Unity aufsetzende Originalsystem. Für die EInstallation der Gast-Erweiterungen von Virtual Box wird das Paket dkms benötigt, das nachinstalliert werden muss.

sudo apt-get install dkms

Sollten bei der Installation der Erweiterung noch  Fehler auftreten, dann müssen ggf. noch Kernel-Header-Files nachinstalliert werden.

sudo apt-get install linux-headers-xxxxx

Danach passt sich das Fenster in der Größe automatisch an.

Nun können die noch gewünschten Pakete nachinstalliert werden. Hier bietet das Remix den Updater Gnome-Packagekit an. Aber natürlich funktioniern auch apt und synaptic. 

Erster Eindruck: Ein rundes, aktuelles Paket, das auf Gnome aufbaut und die Trägheit und Verspieltheit von Unity meidet. Allerdings müssen doch etliche Pakete nachinstalliert werden.

Benutzung

Für die Nutzung benötigt man Instanzen von Connection und Statement, die man am besten als Attribute deklariert. Damit kann dann eine Verbidnung erstellt werden:

 // Attribute
 private String dbName;   // Datenbankname
 private Connection conn; // DriverManager.getConnection("jdbc:sqlite:test.db");
 private Statement stat;  // conn.createStatement();

 Verbindung zur Datenbank herstellen:

 // Mit der Datenbank verbinden
 public boolean connect() {
     try {
           Class.forName("org.sqlite.JDBC");
           if ( conn != null) conn.close();
           conn = DriverManager.getConnection("jdbc:sqlite:"+dbName);
           stat = conn.createStatement();
           return true;
     }
     catch (Exception e) { return false; }
 }

 // Datenbank schließen
 public boolean close() {
     try {
         if ( conn != null) conn.close();
         return true;
     }
     catch (Exception e) { return false; }
 }

 Ausgabe einer Vorhandenen Tabelle:

 // Abfrage per sql-String
 // Im Beispiel: Tabelle mit zwei Spalten name/occupation

 public void query(String sql) {
     try {
        ResultSet rs = stat.executeQuery(sql);
        while (rs.next())
          System.out.print  ( rs.getString("name") + ", " + rs.getString("occupation"));
        rs.close();
     }
     catch (Exception e) {
        System.out.println("Die ABfrage konnte nicht durchgeführt werden. \n" + e.getMessage());
     }
 }

Update einer Tabelle per sql-String (Delete, Insert, etc.)

 // Update einer Tabelle per sql-Befehl: delete, insert, ...
 public void update(String sql) {
     try {
          int anzahl = stat.executeUpdate(sql);
          System.out.println("Es wurden "+anzahl + " Zeilen geändert/gelöscht.");
     }
     catch (Exception e) {
        System.out.println("Die Aktualisierung konnte nicht durchgeführt werden. \n" + e.getMessage());
     }
 }

Demo-Aufruf:

 // Testprogramm
 public static void main(String[] args) {
     SqliteDemo sqlite = new SqliteDemo("test.db");
     if (sqlite.connect()) {
         sqlite.query("SELECT * FROM people ORDER BY name");
         sqlite.update("DELETE FROM people WHERE name='Bauer'");
         sqlite.update("INSERT INTO people VALUES ('Schmidt', 'Bankier')");
         sqlite.close();
     }
     else
         System.out.println("Fehler beim Herstellen der Verbindung.");
 }