![]() |
| 1.6.2020 Computercollage „Kraftwerksarbeiter“ |
Software Entwicklung Notizbuch von Thomas Ströter. Hier beschreibe ich einige meiner privaten Software Projekte.
Montag, 1. Juni 2020
Computercollage „Kraftwerksarbeiter“
Mittwoch, 15. März 2017
cvsignore2gitignore
Habe heute mein erstes Python Projekt auf GitHUB veröffentlicht :-). Es konvertiert .cvsignore,v RCSFiles zu .gitignore,v RCSFiles. Wozu braucht man das? Dies hilft bei der Umstellung von einer CVS- auf eine Git-Versionsverwaltung. Die mir bekannten Konvertierungsskripte unterstützen nicht die Umwandlung der .cvsignore-Dateien. Dies kann das kleine Python Skript vorab erledigen.
https://github.com/stroeter/cvsignore2gitignore
cvsignore2gitignore
Script to transform cvsignore,v RCSFiles to gitignore,v files. Background: if you convert a cvs repository to git using cvs2git it does not transform the .cvsignore-files. You can run this python script on a copy of your cvs-repository before calling cvs2git to get this job done. The script replaces all .cvsignore,v files by .gitignor,v files where the entries are prefixed by a slash. The cvs history information will stay the same.
syntax
python3 cvsignore2gitignore.py <PathToCopiedRepository>
You might have to adjust the RCSFile-encoding to “utf–8” within the script (default is “cp1252”) calling the script without params will run the transformation with some test-data from the zipfile example-cvsignore.zip
limitation
- does not transform several ignore entries per line.
- entries with @ char aren’t supported.
- This is my first python script, so don’t expect any syntactic sugar ;->
requirement
- a copy of the cvs repository directory containing the *,v-RCSFiles.
- python3 3.4 interpreter instaled
used resources
Sonntag, 19. Juni 2016
Erstes Arduino Projekt umgesetzt
Sonntag, 15. Mai 2016
Raspberry Pi - Pakete automatisch aktualisieren mit unattended-upgrades, apt-listchanges und apticron
unattended-upgrades installieren
sudo apt-get install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Konfigurieren
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Origins-Pattern {
// "origin=Raspbian,archive=stable,label=Raspian";
"origin=Raspbian,archive=stable";
"origin=Raspberry Pi Foundation,archive=stable";
};
Zusätzlich in der Konfigutaionsdatei die Optionen für Mailbenachrichtigung und Autodelete anpassen.Logausgabe:
/var/log/unattended-upgrades/unattended-upgrades.log
Testlauf:
sudo unattended-upgrades --dry-run
apt-listchanges
Zeigt die Changelog Informationen bei Upgrades an.sudo apt-get install apt-listchanges
sudo dpkg-reconfigure apt-listchanges
//config liegt unter: /etc/apt/listchanges.conf
Benachrichtigen mit apticron
apticron informiert per mail über neu verfügbare Pakete:sudo apt-get install apticron
sudo dpkg-reconfigure apticron
Quellen:
Donnerstag, 5. Mai 2016
Raspberry Pi SD Karten Backup unter Mac OS
Wunschliste zur SD Karten Sicherung:
- Zuverlässig
- Handhabung: einfaches Sichern und Wiederherstellen
- schnell
- resourcenschonend
Schneller zippen: pigz statt gzip verwenden
pigz ist kompatibel mit gzip, nutzt aber mehrere Prozessorkerne. Für das 1.3GB große Jessie-Image ergaben sich auf einem MacBook Air mit 1,8 GHz Intel Core i7 folgende Werte:$ time pigz --best --keep --force 2016-03-18-raspbian-jessie-lite.img`
real 0m46.547s
Dateigröße: 296,7 MB
$time gzip --best --keep --force 2016-03-18-raspbian-jessie-lite.img`
real 2m6.290s
Dateigröße: 296,8 MB
Image von SD-Karte erstellen (Mac OS)
- SD-Karte einlegen
- mit ‘diskutil list’ die Disknummer der SD-Karte ermitteln (3)
- Unmount SD-Karte mit
diskutil unmountDisk /dev/disk<disk# from diskutil>. Zum Beispieldiskutil unmountDisk /dev/disk3 - Copy SD-Karte auf Image Datei:
sudo dd bs=1m if=/dev/rdisk3 | pigz > raspi-ths-jessie-20160501.img.gz(CTRL-T trackt den Fortschritt)
Image auf SD-Karte schreiben (Mac OS)
- SD-Karte einlegen (ohne Schreibschutz)
- mit
diskutil listdie Disknummer der SD-Karte ermitteln (3) - Unmount SD-Karte mit
diskutil unmountDisk /dev/disk<disk# from diskutil>. Zum Beispieldiskutil unmountDisk /dev/disk3 - Copy Image Datei auf SD-Karte:
sudo gunzip -c raspi-ths-jessie-20160501.img.gz | sudo dd bs=1m of=/dev/rdisk3(CTRL-T trackt den Fortschritt)
Tontech Touch Screen MZ61581 am Raspberry Pi
Eigentlich sollte der Raspberry ja “headless” als Server im Netz laufen. Letztendlich konnte ich dann doch nicht widerstehen und bestellte das Tontech Touch Display Model MZ61581 bei Amazon. Die mitgelieferte Installationsanleitung kam etwas sehr winzig und dürftig daher. Mein erster Installationsversuch schredderte auch erfolgreich die SD-Karte und der Raspi hing beim booten. Nach Neuinstallation (und Backup) klappte es dann folgendermaßen:
Installation
Die Installation erfolgte auf einem Raspberry Pi 3 mit Raspian “Jessie” gemäß dem Blogeintrag von Davies-Barnard Tontec Touch Screen Set Up
Kalibrierung
Zunächst wie in der Tontech-Anleitung beschrieben die Kalibrierungssoftware installieren. Dann via (SSH-)Shell das Setup starten:
pi@raspi:~ $ DISPLAY=:0.0 xinput_calibrator
Zum persistenten Speichern das Snippet aus der Konsolenausgabe nach /usr/share/X11/xorg.conf.d/99-calibration.cont kopieren:
Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "Calibration" "248 3839 404 3714"
Option "SwapAxes" "0"
EndSection
Fazit
Nach kurzer Recherche im Netz ließ sich das Display fix konfigurieren. Die Beschreibungen von Tontech machen einen durchwachsenen Eindruck (die aktuellen Beschreibungen sind im Internet nur als MS-*.docx Dateien abgelegt, die unter Mac oder iOS falsch gerendert werden - schwarze Schrift auf schwarzer Box - toll. Vor der Installation auf jeden Fall ein Backup des Systems ziehen! Das mitgelieferte Gehäuse erfüllt seinen Zweck und ist recht pfiffig konstruiert. Mir wäre ein noch stabileres, weniger “knarzeliges” Gehäuse lieber. Für Bastelzwecke, Prototypen mit eigener GUI geht es aber voll OK :-) Als Desktop Ersatz verbietet sich die Lösung schon allein wegen der geringen Auflösung. Wer keinen Wert auf ein kleines Display mit kompaktem Gehäuse für den Raspi legt ist mit dem kapazitativen Raspberry 7’er Touchdisplay sicherlich besser bedient.
Sonntag, 3. April 2016
Status-Mails mit dem Raspberry versenden
Mailversand ist eine Möglichkeit für den Raspberry sich bemerkbar zu machen. Ob “Platte voll”, neue Sicherheitsupdates verfügbar oder Backup-Status: eine Mail an den Admin ist schnell zugestellt - wenn alles korrekt konfiguriert ist. Hier die Beschreibung der aktuellen Mail Konfiguration auf meinem Raspian System (Jessie).
Extra Mailadresse für Statusmails Postfach (GMX)
Alle lokalen Mails (an root, webserver, ..) werden dazu an eine externe Emailadresse weitergeleitet. Hierzu verwende ich zur Sicherheit einen separaten Mailaccount. Per Postfach-Regel leitet dieser Account die Nachrichten an den eigentlichen Administrator (meine private Emailadresse) weiter. Aus historischen Gründen fiel meine Wahl auf GMX - ein anderer Provider wie z.B. Google erfüllt den gleichen Zweck.
Message Transfer Agent SSMTP
Die Mails werden via SSMTP dem zuvor angelegten Mail-Account zugestellt. Als Beschreibung diente mir system-mails-ohne-einen-mail-server-mit-ssmtp-verschicken von Christoph Langner.
Installation
>sudo apt-get install ssmtp mailutils mpack
Konfiguration: /etc/ssmtp/ssmtp.conf
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=MyStatusMail@gmx.de
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=mail.gmx.net:465
# Where will the mail seem to come from?
rewriteDomain=gmx.net
# The full hostname
hostname=gmx.net
UseTLS=YES
AuthUser=MyMAIL@gmx.de
AuthPass=MYVERYSECRETPASSWORD
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
/etc/ssmtp/revaliases
Für lokale Accounts die gültige Absenderadressen in /etc/ssmtp/revaliases eintragen:
root:MyMAIL@gmx.de:mail.gmx.net:465
pi:MyMAIL@gmx.de:mail.gmx.net:465
www-data:MyMAIL@gmx.de:mail.gmx.net:465
ssmtp Testen:
>ssmtp -v echo@tu-berlin.de
(mit STRG-D abschicken)
Forwarding lokaler Postfächer mit heirloom-mailx
Zunächst das Paket “heirloom-mailx” installieren:
>sudo apt-get install heirloom-mailx
Das Forwarding der restlichen lokalen Mail-Accounts wird für heirloom mailx, ein branch vom “nail” System, in der Datei /etc/nail.rc definiert. Dort die folgenden Alias-Einträge hinzufügen:
# alias Definitionen für Mailweiterleitung
# (root wird via ssmtp bereits an externe mailadresse weitergeleitet)
# alias root root<myStatusMail@gmx.de>
alias pi root
alias mailer-daemon root
alias postmaster root
alias nobody: root
alias hostmaster root
alias usenet root
alias news root
alias webmaster root
alias www root
alias ftp root
alias abuse root
alias noc root
alias security root
Testmail an lokale System-Accounts senden:
>echo "Hallo dies ist eine Testmail an root" | mail root
>echo "Hallo dies ist eine Testmail an pi" | mail pi
Mittwoch, 4. Februar 2015
Posted Apache Ant 1.9.4 Bug 57533 - NullPointerException FileUtil.rename
- wunderbar: should be fixed in the next release
Sonntag, 4. Januar 2015
Computerspielemuseum Berlin November 2013
![]() |
| An diesem Gerät habe ich mit Schulfreunden in "Freistunden" viel Zeit verbracht. Putzige Erinnerung: dreimal kräftig aufs Gehäuse klopfen und das Gerät machte ein Reset... |
![]() |
| ..der Nachfolger TI 99/4A war mein erster "eigener" Rechner |
![]() |
| M.U.L.E. haben wir Tag und Nacht gespielt - Spiel und Entwickler waren ihrer Zeit weit voraus. |
![]() |
| Oje, das haben wir früher auch abgetippt... |
![]() |
| ..Solche Kisten gab's bei uns in der Schule für die Pioniere des Informatikunterrichts (ohne coole Signatur) |
Zwischen den Jahren: Hardware ausmisten
![]() |
| ...erste Programmierer-Artefakte |
![]() |
| sehr praktisch: Das Gerät hatte sogar einen Tassenwärmer rechts eingebaut |
![]() |
| CBM 8296-D |
weitere Links:
Bernd Leitenberger: "In Memoriam Ti 99 / 4a ... oder wie man ein gutes Produkt klein bekommt."
Mittwoch, 11. September 2013
Tomcat auf dem Raspbery Pi
![]() |
| RaspberryPi - der komplette Rechner |
JAVA und Tomcat installieren
// Tomcat-Installationsverzeichnisse catalina.base über aktiven Prozess finden:
ps -Af|grep "tomcat"
/usr/lib/jvm/java-7-openjdk-armhf/bin/java
-Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties
-Djava.awt.headless=true
-Xmx128m
-XX:+UseConcMarkSweepGC
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Dcom.sun.management.jmxremote=true
-Djava.endorsed.dirs=/usr/share/tomcat7/endorsed
-classpath /usr/share/tomcat7/bin/bootstrap.jar:
/usr/share/tomcat7/bin/tomcat-juli.jar
-Dcatalina.base=/var/lib/tomcat7
-Dcatalina.home=/usr/share/tomcat7
-Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp
org.apache.catalina.startup.Bootstrap start
Danach die psi-probe und manager-Benutzer in der /var/lib/tomcat7/conf/tomcat-users.xml konfigurieren (mc)
<role rolename="manager-script"/>
<role rolename="user"/>
<!-- psi probe roles -->
<role rolename="probeuser" />
<role rolename="poweruser" />
<role rolename="poweruserplus" />
<user username="pi" password="password" roles="manager-gui,user"/>
<user username="admin" password="password" roles="manager-gui,user"/>
<user username="MeinName" password="password" roles="manager-gui,user"/>
<user username="script" password="password" roles="manager-script"/>
</tomcat-users>
Manager-WebApp-URL: http://raspberrypi:8080/manager
| Screenshot: Tomcat Manager WebApp |
PSI Probe installieren:
| Screenshot: psi-probe WebApp |
Weitere Memos zur Raspberry Pi Config
// Zugang
ssh pi@raspberrypi
Hilfreiche Kommandos
sudo raspi-config
APT Paketinfo aktualisieren
sudo apt-get update
sudo apt-get dist-upgrade
Paketsuche mit apt-file
sudo apt-get install apt-file
sudo apt-file update
apt-file search -l "xyz"
wget http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u3_armhf.deb
wget http://launchpadlibrarian.net/218525709/chromium-browser_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb
wget http://launchpadlibrarian.net/218525711/chromium-codecs-ffmpeg-extra_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb
sudo dpkg -i libgcrypt11_1.5.0-5+deb7u3_armhf.deb
sudo dpkg -i chromium-codecs-ffmpeg-extra_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb
sudo dpkg -i chromium-browser_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb
APT Paketinfo aktualisieren
sudo apt-get dist-upgrade
Paketsuche mit apt-file
wget http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u3_armhf.deb
wget http://launchpadlibrarian.net/218525709/chromium-browser_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb
wget http://launchpadlibrarian.net/218525711/chromium-codecs-ffmpeg-extra_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb
sudo dpkg -i libgcrypt11_1.5.0-5+deb7u3_armhf.deb
sudo dpkg -i chromium-codecs-ffmpeg-extra_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb
sudo dpkg -i chromium-browser_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb
Sonntag, 27. Januar 2013
Backup der Time Machine-Daten einer Buffalo Linkstation
...zwei Wochen und drei Support Mails später: Die Linkstation unterstützt das Backup/Restore der TM-Daten nicht OutOfTheBox. Aber warum auch kompliziert, wenn es auch einfach geht? Letztendlich sicherte ich die auf dem NAS abgelegten TM-SparseBundles via MAC-Rechner direkt auf USB Platten.
1. USB Platten müssen MacOS/Journaled FS besitzen
2. Häkchen bei "Eigentümer auf diesem Volume ignorieren" soll laut Apple Support-Doku NICHT gesetzt sein.
3. TimeMachine auf allen Rechnern gestoppt/deaktiviert, sowie auf dem NAS ausgeschaltet
4. Im Finder die TimeMachine Freigabe eingebunden (CTRL-K/ afp:<NASName>/TimeMachine )
5. Via Finder die Sparse-Bundles der Rechner auf USB-Platten kopiert.
fertig.
Mittwoch, 16. Januar 2013
Bug Posting TIKA-1057 document content property "Status" is not extracted for *.doc files
Sonntag, 30. Dezember 2012
Datenpflege/Multimedia Heim-Archiv
(Re)Import von CDs via iTunes
Einige CDs in unserem Archiv waren mit lausigen Bitraten encodiert. Speziell bei den Klassik CDs hörte sich das nicht gut an. Also: Reimport der CDs via iTunes. Da noch zusätzlich zwei USB-CDBrenner zum einlesen zur Verfügung standen, ging das Einlesen verhältnismäßig flott.Metadaten pflegen
Vor dem Einlesen sollten die Disk-Metadaten angepasst werden. (z.B. Genre oder Disk-Titel)Encodieren
Ein Arbeitskollege gab den Tip die Daten direkt "lossless" abzulegen - Entsprechend encodiert lauscht man den Stücken in CD Qualität. Beim Synchronisieren mit iOS Devices bietet iTunes optional eine Konvertierung an.Reicht der Speicherplatz beim Archiv nicht für "Lossless" so sollte AAC (Advanced Audio Codec) verwendet werden (320 kbps, vbr).
Lyrics und Cover Art
Archivierung
Vergleich NAS-Daten und archivierte Daten
Donnerstag, 8. November 2012
Vorschlag für drei enhancements bzgl. eclipse/compare
- Bug 393769 "Compare Word doc failed with 64 bit JVM and 32 bit Office (Failed to create Ole Client)"
- Bug 393772 "Word Compare does not honor "general/editor/Allow in-place system editor" setting - always opened as a embedded window"
- Bug 393776 -enh: configureable external compare tool (by file suffix?)
Montag, 10. September 2012
eclipse Bug Posting: Bug 389136 external dragged window views can not be maximized
(fixed in 4.2 SR1)
Freitag, 3. August 2012
Kommentar zu "IDE Project Files In Version Control - Yes or No? Of Course, Not!"
Freitag, 20. Juli 2012
eclipse bug posting Bug 385592: Working Set "Window Working Set" not persistent for Navigator/Package view
Mittwoch, 18. Juli 2012
eclipse bug posting Bug 385368 - History View changes contents when focused
(eclipse 4.2 Bugeintrag)
(duplicate von Bug 384068 - Unexpected partVisible and partBroughtToTop events lead to wrong History view updating in Link with... - soll in 4.2.1 gefixed sein)
Dienstag, 10. Juli 2012
eclipse bugposting: Bug 384740 - no access to javadoc after import: projects "javadoc location" saved in .metadata
https://bugs.eclipse.org/bugs/show_bug.cgi?id=384740
(Bugposting zu einem Eclipse Fehler)
















