Sonntag, 9. Dezember 2018

Entwicklungsumgebung Thonny für Python

Hat man bereits Raspbian "Stretch" für Raspberry Pi installiert, ist vermutlich "Thonny" bereits bekannt.

Thonny ist eine integrierte Entwicklungsumgebung für Python, die für Anfänger geeignet ist. Auch für Windows und Mac kann man die IDE unter https://thonny.org/ herunterladen.







Freitag, 30. November 2018

Fotoanzeige unter Windows 10 wieder aktivieren

Möchte man unter Windows 10 die alt bekannte "Fotoanzeige" von Windows 7 weiter benutzen, geht dies über die Anpassung des folgenden Registry Eintrages (Windows + R):
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations
Jetzt kann man bei diesem Schlüssel sehen, dass aktuell die Fotoanzeige für .tif Dateien aktiviert ist.

Damit auch andere Dateiendungen (.jpg, .png usw.) wieder berücksichtigt werden, müssen diese nun als Zeichenfolge angelegt werden:


Öffnet man anschließend eine .jpg oder .png Datei, wird man von Windows gefragt mit welcher Anwendung die Datei geöffnet werden soll. Jetzt kann man wieder die bewährte Windows Fotoanzeige auswählen.

Sonntag, 18. November 2018

WinMerge - Vergleichen von Dateien und Verzeichnissen

Mit dem kostenlosen Tool "WinMerge" ist es möglich Quellcode oder auch Textdateien von unterschiedlichen Versionen zusammenführen (merge) bzw. zu vergleichen.


Die Unterschiede werden dabei farblich hervorgehoben, und der Inhalt der Dateien lässt sich direkt anpassen (ändern, verschieben oder löschen).

Montag, 12. November 2018

AVM Fritzbox - Smarthome Vorlagen verwenden

Mit der neuen FRITZ!OS 7 Version ist jetzt eine Einrichtung von Smarthome Vorlagen möglich.
Unter Smart Home gibt es dafür den Reiter "Vorlage".


So lassen sich jetzt Einstellungen der Smarthome-Geräte abspeichern und bei Bedarf abrufen.
Anwendungsfälle sind hier zum Beispiel Früh- und Spätschicht, flexible Urlaubszeiten oder Ferien.

Im folgenden Beispiel wurde eine Urlaubsschaltung programmiert. Die Vorlage lässt sich dann schnell und einfach z.B. per MyFRITZ!App 2 aktivieren und eine Abwesenheitssimulation für die FRITZ!DECT 200 Steckdosen wird gestartet.


Sonntag, 11. November 2018

Akkutausch beim Kindle E-Book-Reader

Ich selber habe einen Kindle PaperWhite der 1. Gen von Amazon. Nach fast 5 Jahren macht so langsam der Akku schlapp und sollte getauscht werden.

Günstige Ersatzakkus finden sich bei Amazon selber oder auch bei Ebay für ca. 15 EUR.

Für den Akkutausch selber benötigte man z.B. beim Amazon Kindle 4 noch ein "heißes" Gelkissen, damit die Rückwand des Kindle langsam erwärmt werden kann. Tut man dies nicht, lässt die verklebte Rückwand nur sehr schwer öffnen.

Dies ist beim Kindle PaperWhite nicht der Fall. Hier muss man einfach nur die Displayabdeckung entfernen und anschließend am Displayrahmen die Schrauben lösen.

Siehe dazu auch folgendes YouTube Video:

 

Donnerstag, 1. November 2018

Raspberry Pi - python Prozess automatisch neustarten

Ich habe festgestellt, dass sich mein python Script aus dem Beitrag Raspberry Pi - OLED Display (SSD1306) I2C ansteuern und Temperatur auslesen nach einer gewissen Zeit manchmal automatisch beendet.

Mit dem folgenden bash Script ist es möglich zu erkennen, ob der Prozess noch aktiv ist. Sollte dies nicht der Fall sein, wird das python Script wieder gestartet.

ps -aux | grep python
pi 2396  7.7  2.1  13904  9404 pts/0    S    20:08   0:01 python OLEDdisplayTemp.py


Eintrag in der "crontab -e" (check alle 9min):

*/9 *    *   *   *     /home/pi/restartDisplay.sh

restartDisplay.sh

#!/bin/bash
# (c) Sebastian Hemel, 2018
# show if the python script for the OLEDdisplay is running and do a restart

ps -aux | grep -v grep | grep OLEDdisplayTemp >/dev/null
if [ $? -eq 0 ];
then
     echo
     echo "Process 'OLEDdisplayTemp' is running."
     echo
else
     echo
     echo "Process 'OLEDdisplayTemp' is NOT running."
     echo "restarting..."
     echo
     python /home/pi/OLEDdisplayTemp.py &
fi

Mittwoch, 31. Oktober 2018

Retro - Surfen mit historischen Browsern

Auf der Webseite https://evolt.org/ gibt es ein Archiv von fast allen historischer Browsern. Möchte man einen "nostalgischen" Ausflug in die Anfänge des Web machen, ist man hier genau richtig.


Donnerstag, 25. Oktober 2018

Synology NAS - Speicherplatz erweitern

Reicht der Speicherplatz nicht mehr aus (in meinem Fall rüste ich von 4 TB auf 8 TB auf), muss man seine aktuellen Festplatten gegen größere austauschen.

Das Beispiel zeigt die Erweiterung von 4 TB großen Seagate ST4000DM000 Festplatten in einem RAID-1 (Spiegelung) Verbund. Diese werden durch 8 TB große Seagate ST8000DM005 Festplatten im Synology DS216SE ersetzt.

System herunterfahren

Da mein NAS System kein Tausch der Festplatten im laufenden Betrieb unterstüzt, muss dieses erst heruntergefahren werden. Dafür entweder den "Power" Button lange drücken oder über im Browser über die IP-Adresse des NAS "Herunterfahren" auswählen.

Erste Festplatte tauschen

Jetzt kann man eine beliebige Festplatte austauschen und das NAS wieder starten. Jetzt sollte beim Start ein dauerhafter "Signalton" ertönen und auf der Konfigurationsseite des NAS im Browser sollte eine Hinweismeldung erscheinen, dass "ein Volume fehlerhaft ist".


Details im Speichermanager abrufen

Im Speichermanager Dialog kann man jetzt weitere Details abrufen. Klar ist natürlich, dass unsere Festplatte nicht defekt ist. Dafür funktioniert natürlich aktuell das RAID-Array nicht mehr.



Festplatten Reparatur starten

Im Speicherpool kann man jetzt die Reparatur starten. Dadurch wird der RAID Verbund wiederhergestellt. Hinweis: Alle Daten gehen dadurch natürlich auf der neuen eingebauten Festplatte verloren ;-)



Warten auf Abschluss der Reparatur

Je nach Größe der neuen Festplatte, kann die Reparatur mehrere Stunden in Anspruch nehmen. Informationen zum Status des Vorganges findet man auch hier im Speichermanager.


Zweite Festplatte tauschen

Wurde die neue Festplatte erfolgreich repariert, kann der Wechsel der zweiten Festplatte erfolgen. Das Vorgehen dazu, ist gleich zum Tausch der ersten Festplatte.
Anschließend wird das Volume um den neuen Speicherplatz automatisch erweitert!



Dienstag, 23. Oktober 2018

MediathekView - Online-Mediatheken öffentlich-rechtlicher Sender durchsuchen

Mit Hilfe der Anwendung MediathekView ist es möglich Online-Mediatheken verschiedener öffentlich-rechtlicher Sender zu durchsuchen.

Beim ersten Start dauert es etwas, bis die Datenbank aufgebaut ist. Mit jeweils einem Klick kann der Stream gestartet werden oder auch für später heruntergeladen werden.



Download unter https://mediathekview.de/download/ (Hinweis: Java 8 wird zusätzlich benötigt).

Samstag, 29. September 2018

Knoppix auf USB Stick installieren unter Windows

In diesem Beitrag will ich kurz erklären, wie man Knoppix auf einem USB Stick unter Windows installieren kann.
Knoppix ist eine kostenlose Open Source Live Linux-Kompilation. Es verfügt unter anderem über eine automatische Hardwareerkennung und basiert auf Debian GNU / Linux und verwendet eine LXDE-Desktop-Umgebung.


Folgende Komponenten sind notwendig:
Jetzt muss man nur noch den "Universal USB Installer" herunterladen und ausführen. Danach "KNOPPIX" auswählen und die zuvor heruntergeladene ISO-Datei auswählen.


Anschließend kann man seinen PC neustarten und vom USB-Gerät booten.

Sonntag, 23. September 2018

Push-Nachrichten von Webseiten im Firefox komplett abschalten

Jeder kennt das Problem, viele Webseiten fragen mittlerweile nach "Berechtigungen um Push-Nachrichten senden zu dürfen".

Eine schnelle Lösung um das Problem zu beheben, bietet jetzt der Firefox Browser von Mozilla:
  • Im Menü links "Einstellungen" wählen,
  • links "Datenschutz und Sicherheit" auswählen
  • und den Punkt "Benachrichtigungen" anklicken.

Montag, 27. August 2018

Regenradar - Bilder sammeln oder manuell abrufen

Auf der Internetseite des Bayerischen Rundfunk kann man sich für die jeweils letzten 3 Std. das aktuelle Regenradar anschauen. Auf dem Webserver selber werden aber die Daten der letzten 21 Tage zwischengespeichert.



Mit dem nachfolgenden Script getRadar.sh, kann man die Daten automatisch per Cron-Job oder manuell durch Parameter Übergabe abrufen.

wget http://www.shemel.de/download/bash/getRadar.sh
chmod +x getRadar.sh

Parameter Aufruf mit UTC Time
./getRadar.sh 2018-08-20 00:00:00

Cron-Job Aufruf (jede volle Std. mit 55min) für crontab -e
55  *  *  *  *       /home/pi/regen/getRadar.sh >> /home/pi/regen/myscript.log 2>&1



Quellcode: 


#!/bin/bash
#
echo '------------------------------------'
echo '| Hole Wetterradar-Daten von br.de |'
echo '| (c) Sebastian Hemel, 2018        |'
echo '------------------------------------'
echo ' '

#Aufruf per cron job am Besten jede volle Stunde mit 55min
#crontab -e
#55  *  *  *  *        /home/pi/regen/getRadar.sh >> /home/pi/regen/myscript.log 2>&1

#Beispiele der Dateien, Benamung erfolgt nach UTC (date -u), Bilder stehen ca. 10min nach der eigentlichern UTC Zeit zur Verfuegung
#http://www.br.de/wtr-data/img/radar_aroona/2018_08_08/aroona.radar.180808_0815.png
#http://www.br.de/wtr-data/img/radar_aroona/2018_08_08/aroona.radar.180808_0830.png
#http://www.br.de/wtr-data/img/radar_aroona/2018_08_09/aroona.radar.180809_1130.png
#
#Achtung beim Tageswechsel:
#http://www.br.de/wtr-data/img/radar_aroona/2018_08_20/aroona.radar.180820_2145.png => OK, 23:45
#http://www.br.de/wtr-data/img/radar_aroona/2018_08_20/aroona.radar.180820_2200.png => ERROR => http://www.br.de/wtr-data/img/radar_aroona/2018_08_21/aroona.radar.180820_2200.png

scriptFolder=/home/pi/aroona.radar.*
copyFolder=/home/pi/regen/radar

if [ $1 ]
  then
    echo Uebergabeparameter: $1 $2
    echo ' '
    Date=$1
    Time=$2
    DateTime=$Date' '$Time
    ##echo $DateTime
   
    DateArray=()
    for X in {00..59} ;                         # check every minute
    do
      # use manual date an time
      eval $(date -d "${DateTime}" -u +Y=%y\;m=%m\;d=%d\;H=%H\;M=%M)
      #eval $(date -d '2018-08-20 22:00:00' -u +Y=%y\;m=%m\;d=%d\;H=%H\;M=%M)
      M=$X
      [[ "$M" < "15" ]] && M=00                 # cater for octal clash
      M=$(((M/15)*15))
      ((M==0)) && M=00                             # the math returns 0, so make it 00
      ##echo $Y.$m.$d $H:$M
      DateArray+=($Y$m$d'_'$H$M)                # write in to array for the file name
    done
   
    #echo '--DateArray--'
    #for i in ${DateArray[@]}; do
    # echo $i
    #done
   
    # use manual date an time for the folder
    eval $(date -d "${DateTime}" -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
    DateTimePlusOneDay="${DateTime}+1 days"

    typeset -i i=0 max=${#DateArray[*]}
    while (( i < max ))
    do
        a=$( expr "$i" + 1 )
        # compare the array entries
        if [[ ${DateArray[$i]} != ${DateArray[$a]} ]]; then
            #catch error on midnight UTC
            if [ "$H" == "22" ]
                then
                    eval $(date -d "${DateTimePlusOneDay}" -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
                    echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                    wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
                elif [ "$H" == "23" ]
                    then
                        eval $(date -d "${DateTimePlusOneDay}" -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
                        echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                        wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
                    else
                        echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                        wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
            fi      
            #echo "${DateArray[$i]}"
            #echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
            #wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
        fi
       i=i+1
    done  
   
########################################################################################################################################  
  else
    echo Es wurde kein Uebergabeparameter eingegeben! Verwenden Sie z.B. \"./getRadar.sh 2018-08-20 00:00:00\" UTC
    echo ' '
   
    DateArray=()
    for X in {00..59} ;                            # check every minute
    do
      eval $(date -u +Y=%y\;m=%m\;d=%d\;H=%H\;M=%M)
      M=$X
      [[ "$M" < "15" ]] && M=00                 # cater for octal clash
      M=$(((M/15)*15))
      ((M==0)) && M=00                             # the math returns 0, so make it 00
      ##echo $Y.$m.$d $H:$M
      DateArray+=($Y$m$d'_'$H$M)
    done
   
    # use manual date an time for the folder
    eval $(date -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)

    typeset -i i=0 max=${#DateArray[*]}
    while (( i < max ))
    do
        a=$( expr "$i" + 1 )
        # compare the array entries
        if [[ ${DateArray[$i]} != ${DateArray[$a]} ]]; then
            #catch error on midnight UTC
            if [ "$H" == "22" ]
                then
                    eval $(date -d tomorrow -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
                    echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                    wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
                elif [ "$H" == "23" ]
                    then
                        eval $(date -d tomorrow -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
                        echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                        wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
                    else
                        eval $(date -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
                        echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                        wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
            fi
        fi
       i=i+1
    done  
   
fi

#move files to folder
mv $scriptFolder $copyFolder

Sonntag, 19. August 2018

Raspberry Pi - automatischer reboot einmal am Tag

Mit dieser kurzen Anleitung startet der Raspberry Pi automatisch einmal am Tag neu.

Dies kann z.B. erforderlich sein, wenn gewisse Dienste nach einer längeren Laufzeit zum Absturz neigen.

Wechsel auf "root" Berechtigung vornehmen:
sudo su
Den crontab Editor vom root Benutzer öffnen:
sudo crontab -e
Hinweis: Evtl. kann anschließend eine Abfrage des zu verwendeten Editor erfolgen. Hier am besten 2 (nano) oder 3 (vim) auswählen.

Den folgenden Eintrag am Ende der Datei einfügen (der reboot erfolgt um 5 Uhr Nachts):
00 5 * * * sudo reboot
Hinweis: Alternative Ausführzeiten lassen sich schnell über crontab guru erstellen.

Die Datei mit "Ctrl" + "o" speichern ung mit "Ctrl" + "x" verlassen.

Jetzt den "root" Benutzer wieder verlassen mit "Ctrl" + "d".

Sonntag, 12. August 2018

Windows 10 - Cortana abschalten

Den digitalen Sprachassistenten von Microsoft kann man per Registry sehr schnell deaktivieren.

Editor mit dem folgenden Befehl aufrufen: regedit



Zu dem folgenden Schlüssel navigieren:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows
Jetzt muss ein neuer Schlüssel mit dem Namen Windows Search erstellt werden.


Über den DWORD Wert AllowCortana, lässt sich dann der Assistent Ein- (1) und Ausschalten (0).

Mittwoch, 25. Juli 2018

Raspberry Pi - 5 Zoll 800 x 480 HDMI Touchscreen LCD-Display Setup

Wenn man das 800 x 480 5 Zoll HDMI LCD Display zum ersten Mal mit dem Raspberry Pi verwenden möchte, deckt das Display in der Regel nicht das gesamte Display ab oder wenn man direkt in die Konsole bootet, werden Streifen angezeigt. Siehe auch zum Beispiel folgendes Bild.


Es gibt zwei Möglichkeiten das Problem zu beheben. Welche ich nachfolgend beschreibe.

Datei auf der SD-Karte am Laptop bearbeiten

  • SD-Karte (in den Adapter stecken) und in den Laptop oder Kartenleser einlegen.
  • Auf das "Boot-Image" klicken, welches im Explorer angezeigt wird.
  • Die Datei "config.txt" mit einem Editor (z.B. Notepad++) öffnen und die folgenden Zeilen hinzufügen:
# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1 


# uncomment to force a specific HDMI mode
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0

Zugriff per SSH und Datei anpassen

Gleiches geht auch direkt auf dem Pi z.B. per SSH Zugang. Hierfür muss die Datei mit dem folgenden Befehl geöffnet werden:
sudo nano /boot/config.txt

Anschließnend muss in beiden Fällen ein reboot (sudo reboot) erfolgen!

Mittwoch, 18. Juli 2018

Schnelle Notizen im Browser anlegen

Möchte man schnelle Notizen direkt im Browser machen, geht dies auch ohne Plugin, mit dem folgenden Befehl:
data:text/html, <html contenteditable>
Gibt man den Befehl in der Adressleiste ein, öffnet sich eine leere Seite auf der man die Notizen ablegen, speichern und drucken kann.

Hintergrund: Es wird hier das data uri format verwendet und eine html Zeile erstellt, welche editierbar ist.

Sonntag, 15. Juli 2018

Raspberry Pi Stretch Lite - Installation incl. SSH Fernsteuerung

Die Installation habe ich bereits im Beitrag vom 23.05.2015 (http://sebastianhemel.blogspot.de/2015/05/raspberry-pi-raspbian-wheezy.html) beschrieben. Daher wieder ein kurzes Update zum aktuellen Raspbian Stretch Lite.

Der Download ist wie gewohnt unter https://www.raspberrypi.org/downloads/raspbian/ möglich. Nach dem Download muss das Zip-Archiv entpackt werden. Das Image ist folgendermaßen aufgebaut:
  • yyyy-mm-dd-wheezy-raspbian.img
Anschließend kann das Image mit Hilfe des Programms Etcher Portable oder auch mit dem bereits zuvor erwähnten Win32 Disk Imager auf eine FAT-32 formatierte SD-Karte installiert werden.


Nun sollte die Karte kurz aus dem Kartenleser entfernt werden und gleich weider eingesteckt werden. Jetzt kann man auf der Bootpartition des Pi eine leere Datei mit dem Namen ssh anlegen, um den Fernzugriff per ssh zu aktivieren.

Hierfür kann man den folgenden Power-Shell Befehl verwenden:
fsutil file createnew ssh 0

Danach ist der Zugriff mit putty und der IP-Adresse des Pi oder mit dem Host Name raspberrypi auf die Kommandozeile möglich. Benutzername und Passwort sind per default pi / raspberry .

Zum Einrichten einer statischen IP-Adresse verweise ich auf den folgenden Beitrag: http://sebastianhemel.blogspot.com/2017/01/raspberry-pi-wlan-konfiguration-inkl.html


Im Anschluss können die folgenden Einstellungen vorgenommen werden: http://sebastianhemel.blogspot.com/2015/05/raspberry-pi-einrichtung-nach.html

Mittwoch, 11. Juli 2018

Identitätsdiebstahl vermeiden - Schufa Dienst

Schufa bietet mittlerweile einen Datenleck-Informationsdienst an, wenn es um Finanzdaten (z.B. Kreditkarteninformationen) geht. Ab 3,95 EUR im Monat erhält man bei Schufa-Anfragen und -Eintragungen von Firmen zu seinen Daten eine E-Mail-Benachrichtigung,

Bucht man z.B. bei Netflix ein Abo und hinterlässt seine Kreditkarteninformationen, versendet in diesem Fall Schufa eine Warn- bzw. Infomail.
"Behalten Sie jederzeit die bei der SCHUFA gespeicherten Daten im Blick, lassen Sie sich automatisch über Änderungen informieren und klären Sie Fragen direkt online oder persönlich per Telefon** - mit meineSCHUFA"

Samstag, 23. Juni 2018

Android Smartphone tunen - GPU-Rendering / Entwickleroptionen

Hat man ein sehr günstiges Smartphone gekauft, wie ich zum Beispiel vor kurzem das Nokia 1 mit Android GO, dann kann mit Hilfe der Aktivierung des "GPU-Rendering" noch etwas Performance herausholen.

Als erstes muss man dafür die unter "Einstellungen" die "Entwickleroptionen" aktivieren. Dies geht über den Eintrag "Über das Telefon" öffnen.

 

Jetzt muss man die "Build-Nummer" suchen und sieben Mal hintereinander auf sie tippen, bis die Mitteilung "Sie sind nun Entwickler" angezeigt wird.


Im nun verfügbaren Menü "Entwickleroptionen", kann jetzt der Menüpunkt "GPU Rendering erzwingen" aktiviert werden.  

Der Grafikprozessor ist jetzt immer aktiv und kann so zu einer deutlich besseren Perfomace der Smartphones Apps führen.

Samstag, 9. Juni 2018

Persönliche Daten von Facebook abrufen

Facebook erstellt (wie Google, Twitter und Co.) umfangreiche Profile seiner Nutzer.

Über die folgende Funktion, kann man eine Übersicht seiner gespeicherten Daten abrufen:
"Allgemeine Kontoeinstellungen" => "Deine Facebook-Informationen"

Hier können jetzt alle Userdetails heruntergeladen werden und man erhält so eine guten Überblick über das Profiling von Facebook mit Hilfe von Algorithmen.

Hinweis: Die Erstellung der Datei dauert etwas, man wird per E-Mail informiert, wenn sie zum Download bereitsteht.

Samstag, 2. Juni 2018

Datenrettung mit einer Linux-Live-CD

Möchte man seine persönlichen Daten von der Festplatte retten, wenn die Windows Installation nicht wiederherstellbar ist, dann bietet sich die folgende Linux-Live-CD an:

SystemRescueCd: http://www.system-rescue-cd.org/
USB-Stick Installationsanleitung: http://www.system-rescue-cd.org/Installing-SystemRescueCd-on-a-USB-stick/

SystemRescueCd ist ein von CD bootendes Linux-System, mit der man anschließend sein PC-System reparieren und wichtige Daten retten kann.

Erkennen kann man die Windows-Partition in der Regel an "/dev/sda2", anschließend muss diese eingebunden werden (NTFS-3G), damit man darauf zugreifen kann:
ntfs-3g /dev/sda2 /mnt/windows
Folgende System-Tools bietet u.a. die SystemRescueCD:
  • GParted - Partitionierung eines Laufwerks änden (vergrößern oder verkleinern, neu angelegt, verschoben oder neu formatierten)
  • ClamAV - Virenscanner
  • TestDisk - Datenrettung, Bootsektoren wieder herstellen

Freitag, 1. Juni 2018

Schnell und einfach Treiber aktualisieren?

Sind die PC-Treiber nicht aktuell, kann dies zu einem instabilen System führen. Mit der folgenden Freeware kann man seine Treiber schnell und einfach automatisch aktualisieren lassen:

Driver Booster 5 Free: https://www.iobit.com/de/driver-booster.php


Samstag, 26. Mai 2018

Raspberry Pi - OLED Display (SSD1306) I2C ansteuern und Temperatur auslesen

Hier nun mein 2. Versuch erfolgreich ein Display anzusteuern, nachdem es beim LCD Display HD44780 (http://sebastianhemel.blogspot.de/2018/04/raspberry-pi-lcd-display-hd44780.html) immer wieder zu Problemen kam.

In diesem Artikel beschreibe ich, wie man das Display ansteuern kann und z.B. zur Anzeige von Datum, Uhrzeit und Temperatur (http://sebastianhemel.blogspot.de/2015/01/temperatursensor-ds18b20-raspberry-pi.html) verwenden kann.

Das 128 x 64 Pixel - 0,96 Zoll OLED I2C Display gibt es bei Amazon für ca. 7 EUR. Die Kabel vom Display zum Pi habe ich nicht gelötet, sondern nur gesteckt. Hierfür habe ich Jumperkabel verwendet und diese über Listerklemmen verbunden. Alternativ kann man dies auch über ein Laborsteckboard realisieren.

Folgender Aufbau ergibt sich inklusive Verwendung des Temperatursensor DS18B20, siehe auch folgende Grafik inkl. der korrekten Zuordnung für die Verkabelung:


Das Display wird zur Spannungsversorgung an 3,3 Volt (Pin 1) und Ground (ein GND z.B. Pin 6, 9, 14 usw.) und an die I2C Schnittstelle des Raspberry Pi angeschlossen. Für I2C muss man Pin 3 (SDA) und 5 (SCL) verwenden.

I2C Schnittstelle im Raspbian Betriebssystem einschalten:

Hinweis: Ich verwende den vi als Texteditor, man gerne auch z.B. den Nano verwenden.

sudo vi /etc/modules

Und die folgenden 2 Zeilen hinzufügen (zusätzlich zu denen vom Temperatursensor):

w1-gpio
w1-therm

i2c-bcm2708
i2c-dev


Jetzt muss noch die Konfigurationsdatei angepasst werden:
sudo vi /boot/config.txt

dtparam=i2c_arm=on #entfernen
dtparam=i2s=on     #entfernen

Jetzt muss noch ein reboot erfolgen, damit die Einstellungen übernommen werden:
sudo reboot

Damit man jetzt die Verbindung testen kann, sollte noch das folgemde Packet installiert werden:
sudo apt-get install i2c-tools

Mit dem folgenden Befehl kann überprüft werden, ob die Verbindung zum Display funktioniert bzw. verbunden ist:
i2cdetect -y 1

Installation der SSD1306 Bibliothek für Python

Damit der SSD1306 Displaycontroller angesprochen werden kann, muss noch die folgende Bibliothek installiert werden.

https://github.com/adafruit/Adafruit_Python_SSD1306

git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git

Noch kein Git installiert? Dann muss noch der folgende Befehl ausgeführt werden:
sudo apt-get install git-core 

Jetzt in das soeben angelegte Git Verzeichnis gehen und per setup.py installieren:
~/Adafruit_Python_SSD1306 $ sudo python setup.py install

Sollte es zu den folgenden Fehlermeldung kommen:
error: Setup script exited with error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1

Muss noch der folgende  Befehl ausgeführt werden:
sudo apt-get install python-dev 

Sollte es zu den folgenden Fehlermeldung kommen:
ImportError: No module named setuptools

Muss noch der folgende  Befehl ausgeführt werden:
sudo apt-get install python-setuptools

Anschließend muss noch das RPi.GPIO Package für python installiert werden:

sudo apt-get install python-pip
sudo pip install RPi.GPIO

oder

Manueller Download unter https://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/:

wget https://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/python-rpi.gpio_0.6.3~jessie-1_armhf.deb
dpkg -i python-rpi.gpio_0.3.1a-1_armhf.deb

Folgende (python) Module müssen noch installiert werden:

sudo apt-get install libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk
sudo pip install --upgrade pip
sudo pip install Pillow (PIL ist die Python Imaging Library)

Jetzt kann es endlich losgehen, ich habe noch eine andere Schriftart verwendet. Weitere gibt es auch hier: https://www.dafont.com/bitmap.php
wget http://www.shemel.de/download/raspberry/arial.ttf


Mit der folgenden python Datei, kann das Display getestet werden:

wget http://www.shemel.de/download/raspberry/OLEDdisplayTemp.py
chmod +x OLEDdisplayTemp.py
python OLEDdisplayTemp.py
(Quelle: https://learn.adafruit.com/ssd1306-oled-displays-with-raspberry-pi-and-beaglebone-black/usage)

Damit das Script direkt beim Starten des Pi ausgeführt wird, kann man jetzt noch einen Eintrag unter crontab -e hinzufügen:
@reboot python OLEDdisplayTemp.py


Quellcode:

#!/usr/bin/python
# coding=utf-8
# Temperatur von Sensor auslesen auf OLED Display anzeigen
# (c) Sebastian Hemel, www.shemel.de
#-----------------------------------------------------------------------------------
import time
import datetime
import re
import os, sys, threading

# 0,96 Zoll OLED Display 128x64 Pixel
import Adafruit_SSD1306
from PIL import Image, ImageDraw, ImageFont

a=u"°" # damit Sonderzeichen korrekt dargestellt wird 
 
#Quelle: http://www.schnatterente.net/code/raspberrypi/temperature.py
############################################################################################
# Temperatursensor Name ermitteln
SensorPfad = "/sys/bus/w1/devices/" # Pfad
SensorNames = open("/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves" ,"r")
Sensor = SensorNames.readline()
if Sensor:
 SensorNames.close() 
 
# Temperatur ermitteln und Wert value zurckgeben
def GetTemp():
 a = open(SensorPfad+Sensor.strip()+'/w1_slave', 'r') # Ermittelten Sensor lesen
 Temp = a.readline()

 if re.match(r"([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES", Temp): # Erste Zeile auf "YES" am Ende uberprufen
  Temp = a.readline()
  m = re.match(r"([0-9a-f]{2} ){9}t=([+-]?[0-9]+)", Temp) # Wert aus zweiter Zeile prufen 
 if m:
  value = str(float(m.group(2)) / 1000.0) # Wert nach t= auslesen und umwandeln
 a.close()
 return value # Ruckgabewert "value" definieren
# Temperatur zurueckgeben
############################################################################################
 
# Display einrichten
 
# Raspberry Pi pin configuration:
RST = 24
 
# Display 128x64 display with hardware I2C:
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
 
# Initialize library.
disp.begin()
 
# Clear display.
disp.clear()
disp.display()
 
# Create blank image for drawing.
# Make sure to create image with mode '1' for 1-bit color.
width = disp.width
height = disp.height
image = Image.new('1', (width, height))
 
# Get drawing object to draw on image.
draw = ImageDraw.Draw(image)
 
# Draw a black filled box to clear the image.
draw.rectangle((0,0,width,height), outline=0, fill=0)

# First define some constants to allow easy resizing of shapes.
padding = 2
shape_width = 20
top = padding
bottom = height-padding
 
# Move left to right keeping track of the current x position for drawing shapes.
x = padding
 
# Load default font.
#font = ImageFont.load_default() #
# Alternatively load a TTF font. => https://www.dafont.com/bitmap.php
font12 = ImageFont.truetype("font/arial.ttf", 12) # Schriftart, Schriftgröße
font20 = ImageFont.truetype("font/arial.ttf", 20)
font15 = ImageFont.truetype("font/arial.ttf", 14)

# Write two lines of text.
draw.text((x, top+15), ' (c) Sebastian Hemel',  font=font12, fill=255)
draw.text((x, top+30), '     www.shemel.de  ',  font=font12, fill=255)
 
# Display image.
disp.image(image)
disp.display()

time.sleep(5) # 5sec warten, damit Sensor ausgelesen werden kann

while True: # endlos Schleife
 try: # Fehler abfangen?
 
  now=datetime.datetime.now()
  Zeit = now.strftime("%d.%m.%Y - %H:%M:%S") # Aktuelles Datum + Uhrzeit
  Temp = GetTemp() # Temperatur messen....
  draw.rectangle((0,0,width,height), outline=0, fill=0) #clear Display
  draw.text((x, top), Zeit,  font=font12, fill=255)
  draw.text((x, top+15), '-------------------------------',  font=font12, fill=255)
  draw.text((x, top+30), Temp+' '+a+'C',  font=font20, fill=255)
  disp.image(image)
  disp.display()
  
  time.sleep(5) # 5sec warten, bis Sensor erneut abgefragt wird
 
 except KeyboardInterrupt: # STR+C = Abbruch
  draw.rectangle((0,0,width,height), outline=0, fill=0) #clear Display
  disp.image(image)
  disp.display()

Sonntag, 13. Mai 2018

Windows - Scrollen im Hintergrundfenster

Hat man zwei Fenster geöffnet und man möchte im inaktiven Fenster mit der Maus scrollen, muss man dieses immer erst durch einen "Klick" aktivieren.

Mit Windows 10 (und natürlich auch schon früher mit versch. Freeware Tools) ist dies möglich, wenn man die folgenden Optionen aktiviert:

Einstellungen => Geräte => Maus => Inaktive Fenster beim Daraufzeigen scrollen

 

Dienstag, 24. April 2018

Raspberry Pi - LCD Display (HD44780) ansteuern und Temperatur auslesen

Vor kurzem habe ich mir das LCD Display HD44780 für den Pi bei Amazon (HD44780 1602 LCD Module Display Anzeigen 2X16 Zeichen) für 2,33 EUR gekauft.

In diesem Artikel beschreibe ich, wie man das Display ansteuern kann und z.B. zur Anzeige von Datum, Uhrzeit und Temperatur (http://sebastianhemel.blogspot.de/2015/01/temperatursensor-ds18b20-raspberry-pi.html) verwenden kann.

Bitte auch meine Hinweise am Ende des Artikels beachten!

Es hat zwei Zeilen mit je 16 Zeichen und verfügt über 16 Kontakte. Siehe auch folgende Grafik inkl. der korrekten Zuordnung für die Verkabelung:


Die Kabel vom Display zum Pi habe ich nicht gelötet, sondern nur gesteckt. Hierfür habe ich Jumperkabel verwendet und diese über Listerklemmen verbunden. Alternativ kann man dies auch über ein Laborsteckboard realisieren.

Folgender Aufbau ergibt sich inklusive Verwendung des Temperatursensor DS18B20:


Wenn die Verkabelung korrekt ist, kann der Pi gestartet werde. Das LCD-Display sollte dann sofort aufleuchten (ersten Zeile alle Pixel angeschaltet, in der zweiten Zeile sollten alle dunkel bleiben).

Anschließend muss noch das RPi.GPIO Package für python installiert werden:

sudo apt-get install python-pip
sudo pip install RPi.GPIO

oder

Manueller Download unter https://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/:

wget https://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/python-rpi.gpio_0.6.3~jessie-1_armhf.deb
dpkg -i python-rpi.gpio_0.3.1a-1_armhf.deb

Mit der folgenden python Datei, kann das Display getestet werden:

wget http://www.shemel.de/download/raspberry/hd44780_test.py
chmod +x hd44780_test.py
python hd44780_test.py
(Quelle: https://tutorials-raspberrypi.de/raspberry-pi-lcd-display-16x2-hd44780/)

Mit dem folgenden Quellcode kann jetzt der Temperatursensor DS18B20 ausgelesen werden und die aktuelle Temperatur steht im Display:

wget http://www.shemel.de/download/raspberry/display-temp.py
chmod +x display-temp.py 
python display-temp.py  
(Quelle: http://www.schnatterente.net/code/raspberrypi/temperature.py)

...
        Temp = GetTemp() # Temperatur messen....

        lcd_send_byte(LCD_LINE_1, LCD_CMD)
        lcd_message("Temperatur")
        lcd_send_byte(LCD_LINE_2, LCD_CMD)
        lcd_message(Temp+chr(223)+"Celsius")

...

Wichtige Hinweise

  • Generell kann es zu dem Problem kommen, dass Buchstaben teilweise nicht korrekt angezeigt werden. Dieses Problem hatte ich immer wieder, wenn ich nach LCD_LINE_1, LCD_LINE_2 weitere Informationen anzeigen wollte. Dies ist vermutlich produktionsbedingt bei diesem "billigen" Display immer wieder mal der Fall.
  • Das Display reagiert teilweise auch sehr "feinfühlig" auf Spannung. Verwendet man also ein günstiges Netzteil, was keine konstante Spannung von 5V liefert, kann es auch hier zu Anzeigeprobleme kommen.

Donnerstag, 22. März 2018

Softwaretest bei agiler Entwicklung durch Testautomatisierung


Das Testen von Software bzw. eines fertigen Teilprodukts (Product Increment) ist ein fester  Bestandteil der agilen Softwareentwicklung und somit auch ein festes Element während eines Sprints.

Gerade bei Testfällen, die sehr oft wiederholt werden, ist eine Automatisierung sinnvoll (z.B. Regressionstests, testgetriebene Entwicklung oder schwer durchführbaren Tests). Viel zu oft wird gerade bei nicht automatisierten Tests die Anwendung nicht ausgiebig genug getestet.

Folgende Grundsätze sollten daher angewendet werden:

  • So viel Testautomatisierung wie möglich, damit bei vielen neuen oder sich ändernde Anforderungen ein lauffähiges System gewährleistet wird. Darunter fallen Unit Tests, System- und Akzeptanztests.
  • Die Rolle "Tester" innerhalb des Entwicklungsteam verteilen, damit die Zuständigkeit innerhalb des Entwicklerteams gleich ist. Keine strikte Trennung zwischen Entwickler und Tester aufbauen!
  • Teststufen des V-Modells (Einordnung von Testzyklen) aufheben, da dies innerhalb eines Sprints nicht umsetzbar ist und einen zu hohen zeitlichen Aufwand bedeutet. Die einzelnen Teststufen (Komponententest, Integrationstest usw.) sollte als kleine Einheiten innerhalb der einzelne User-Stories integriert oder teilweise als einzelne User-Story je Sprint geplant werden
  • Der finale Abnahmetest (User Acceptance Test) erfolgt jeweils am Ende eines Sprints durch den eigentlichen Auftraggeber oder Product Owner.
  • Continuous Integration, der Prozess des fortlaufenden Zusammenfügens von Komponenten hin zu einer Anwendung, hat das Ziel zur Steigerung der Softwarequalität. Hier erfolgt ein Zusammenspiel von einem Versionsverwaltungssystem z.B. SVN oder GIT, einem Artifactory z.B. Nexus, automatisierter Tests (z.B. JUnit) und einem Tool (z.B. Jenkins ) zur Verwaltung der Continuous Integration (bauen von Pakten und deployen der Anwendung). Dieser Prozess wird z.B. automatisch durch Einchecken einer Codeänderung in das Versionsverwaltungssystem gestartet.