Just a moment ;-)
Code-Snippets
[BASH] U3 Version von Firefox erstellen
20. Dez
So wie versprochen hier das BASH-Skript um unter Linux eine portable Version von Firefox zu erstellen. Das Ganze ist relativ einfach und benötigt nur das jeweilige 7-Zip Paket für die gewählte Distribution und wget für den Download. Wget sollte eigentlich bei jeder ernstzunehmenden Distribution beiliegen und bereits installiert sein.
In Zeile 17 muss dann nur der Ort für die Resourcen (Loader, Icon usw) angegeben werden.
Nach dem das Skript mit chmod ausführbar gemacht wurde, wird mit der Übergabe der gewünschten Release-Nummer automatisch alles herunter geladen, entpackt und für eine U3-Version manipuliert. Das war es dann auch schon, und im gleichen Verzeichnis sollte eine U3-Version zu finden sein.
[Qt] QThreads
25. Okt
Threads sind im Allgemeinen sehr nützlich, da man sehr schön zeitintensive Aufgaben auslagern kann. Leider sind sie aber genauso tückisch wie praktisch.
Einige Punkte die sich nach und nach herausgestellt sind und zu mindestens bei mir zum Erfolg geführt haben, sind diese :
- Mutexe für kritische Funktionen verwenden
- den Thread bei der Initialisierung starten und von “Außen” steuern
Alles andere führte bei mir entwder zu einer blockierten GUI oder zu einem abnormalem Programmverhalten.
[Electronics] Arduino verschickt Wake-On-LAN Pakete
05. Aug
Nachdem ich ja im Einführungspost es ja angekündigt hatte, hab ich es nun auch in die Tat umgesetzt und mein neues Arduinoboard um die Funktionalität erweitert Wake-On-LAn-Pakete (WOL-Pakete) zu verschicken. Prinzipiell hab ich nicht viel verändert, da in der Bibliothek zu meine EtherShield schon so gut wie alles drin war. Es musste nur noch eine Funktion her, die die Magic-Packets zusammenbaut und anschließend auch versendet.
Kombiniert mit dem rudimentären Webinterface aus den Beispielen, könnte nun an jede x-beliebige MAC-Adresse ein solche Paket verschickt werden. Ein weitere Vorteil der Mikrocontroller-Lösung ist auf jeden Fall, dass man ARP-Pakete ohne root-Rechte erzeugen und verschicken kann.
Versuche das Ganze als Applikation für Linux und Windows zu realisieren, scheiterten oftmals daran das unter Linux root-Rechte erforderlich waren oder man unter Windows nicht weit genug im OSI-Modell herunterkam um ARP-Pakete (diese können so gut wie garnicht von Firewalls geblockt werden) zu erzeugen.
Ein kleines Tool, realisiert mit Qt gibt es indes schon, allerdings basiert diese Lösung auf UDP, was natürlich keine Empfangsgarantie liefert und darüber hinaus noch eine IP-Adresse benötigt.
Da mein EtherShield auf dem ENC28J60 basiert und dieser wohl nicht dem Standard-Ethershield von Arduino.cc entspricht sei darauf hingewiesen, dass die Änderungen bzw. ein Übernehmen des Patches dort nicht funktionieren werden. Allerdings sollte es auch dort kein Problem sein so etwas zu implementieren.
Ardunio EtherShield WOL patch - Patch for Arduino EthernetShield Libary (bases on enc28j60)[Electronics] Arduino Duemilanove eingetroffen
02. Aug
Wie kürzlich beschrieben, hatte ich ein Ardunio Board + EthernetShield bestellt. Nun dieses ist am Donnerstag eingetroffen und ich konnte bisher schon ein wenig damit spielen. Um das Ganze auf Funktionstüchtigkeit zu testen habe ich mir natürlich zuerst einmal die Processing-IDE installiert (ging recht schleppend, aber nun läuft sie) und mir ein paar Beispiele angesehen. Durch die sei einfach Kombination des LED-Examples und eines Mini-Webservers konnte ich dann beide PCBs testen. Beide funktionierten sehr gut und nun kann ich eine LED per Ethernet schalten und gleichzeitig einen LDR-Wert auslesen.
Schon recht cool, was man mit ein wenig Copy+Paste erreichen kann. Mit einem “normalem” AVR würde dies wohl wesentlich länger dauern, aber Arduino ist ja auch eine Prototyping-Plattform.
Mehr >
[Linux] Uptime umrechnen
29. Jul
Eigentlich sehr trivial, wenn man auf die Idee kommt. Da die vorgestellte Möglichkeit die Linux-uptime auszugeben nur die Sekunden seit dem Booten ausgibt müsste man diese natürlich noch umrechnen.Die meiner Meinung nach einfachste und eleganteste Variante ist einfach den Rest der Division zu ermitteln.Dabei wird der alte Modulo-Operator genutzt und jeweils der Quotient zur nächsten Einheit gebildet.
Kryptisch zusammen gebacken sieht das Ganze so aus :
sprintf(sequence, "%ldh %ldm %lds", (uptime / 60 / 60 ) % 60, (uptime / 60) % 60 , uptime % 60 );
Ein wenig länger, dafür aber übersichtlicher wäre dann wohl diese Variante :
long hours = (uptime / 60 / 60 ) % 60;
long minutes = (uptime / 60 ) % 60;
long seconds = (uptime % 60);
sprintf(sequence, "%ldh %ldm %lds", hours , minutes , seconds);
Letzteres ist sicherlich nicht am effektivsten was die Ressourcen angeht, unsigned short oder ähnliche Typen für die Variablen hätten es auch getan, aber so bleibt es übersichtlicher. Mir gefällt die erste Variante eh besser.
[Linux] Uptime mit C auslesen
27. Jul
Brauch man ja ab und an um sich ein Bild über die aktuelle Laufzeit des jeweiligen Systems zu machen oder um sich einzugestehen, dass man einfach zu lange vor der Kiste sitzt.
#include <sys/sysinfo.h>
long getTickCount() // Zeit seit dem Booten in Sekunden
{
struct sysinfo si;
if(sysinfo(&si) == 0) return si.uptime;
else return -1L;
}
int main()
{
printf("Uptime : %2.0f min",(getTickCount()/60.0));
return 0;
}
[Linux] Subversion in conky integrieren
01. Jun
Des Öfteren sieht man hier ja Screenshots von meinem Laptop samt Fluxbox und Conky. Conky ist dabei ein kleines Programm, womit man so ziemlich alles auf den Desktop bringen kann. Standardmäßig werden CPU, RAM und Systeminfos wie Architektur und Distribution angezeigt. Mit ein wenig Investition von Zeit und einer Menge Testläufen, das Auge isst ja bekanntlich mit, kann man conky dann nach Belieben gestalten und alles Erdenkliche anzeigen lassen.
Mit ein wenig Suchen bei Google, findet man für fast alles ein Script oder man lässt sich selber was einfallen.
Zeit den aktuellen DropBox-Status innerhalb von conky an.
Sehr schön ist auch die Integration von Subversion, welches die aktuelle Revision, den letzten Autor und das Datum der Änderung anzeigt. Wobei ein wenig mit Perl und regulären Ausdrücken nachgeholfen wird.
Da Subversion mittlerweile lokalisiert wurde, hab ich das Script oder besser die Suchmuster ans Deutsche angepasst. Außerdem gibt es wie immer Probleme mit Backticks und Anführungsstrichen, was recht lange dauert bis man alle korrigiert hat. Daher der Download ganz unten.
Uni ${alignr}${texeci 360 /home/epyx/bin/svn-stat.sh svn+ssh://baphie.homelinux.org/svnrepo/Uni}
Arbeit ${alignr}${texeci 360 /home/epyx/bin/svn-stat.sh svn+ssh://baphie.homelinux.org/svnrepo/VbZeusDll}
Projekt ${alignr}${texeci 360 /home/epyx/bin/svn-stat.sh svn+ssh://baphie.homelinux.org/svnrepo/Privat}
Man erkennt ziemlich schnell das Muster
Viel Spass beim Tüffteln.
SubVersion Status-Script - Ruft mit svn info url den aktuellen Status eines Repository ab und zeigt Revision, Autor und Datum der letzten Änderung an.
Progswitch für mySmartUSB unter Linux
22. Jan
Vor gut 2 Jahren bekam ich, gemäß meines Wunschzettels, zu Weihnachten eine USB-AVR-Experimentierplatine der Firma myAVR mitsamt dem kleinen USB-Prommer mySmarUSB. Beides hat mich bisher tatkräftig im Programieren von ATMELs kleinen Mikrocontrollern unterstützt und bisher auch immer fehlerfrei gearbeitet.
Der Prommer wirkt dabei als RS232-zu-USB-Umsetzer und läuft daher auch problemlos unter Windows und Linux.
Nachdem Komplettumstieg auf Linux, war eine schnelle Umstellung von WinAVR zu KontrollerLab als Entwicklungsumgebung notwendig, was auch kein größeres Problem darstellte.
Da ich natürlich alle Funktionen, Daten-/Programmiermodus und Resetfunktionen, des Prommers nutzen wollte musste ich leider feststellen, dass das Programm myQuickprog leider nicht unter Linux lauffähig war. Sicherlich hätte man mit wine emulieren können, jedoch erscheint mir das eher halbherzig. Im myAVR-Forum fand ich dann ein kleines Python-Skript das einen schnellen Wechsel der Betriesmodi erlaubt.
# -*- coding: iso-8859-15 -*-
import serial
import sys
# Kotrollsequenz gemäß technischer Beschreibung von mySmartUSB
controlseq = '\xe6\xb5\xba\xb9\xb2\xb3\xa9'
if (len(sys.argv) == 1):
print 'Usage: progswitch.py mode '
print '\tp : Programming mode'
print '\td : Data mode'
else:
ser = serial.Serial('/dev/ttyUSB0', 19200, timeout=1)
ser.write(controlseq + sys.argv[1])
Kleines Manko am Rande, es funktioniert bei mir nur auf dem Laptop, beim Desktop regt sich nix.
Also blieb nur eines, das Skript auf eine Hochsprache zu portieren!
Gesagt getan, da ich mich so oder so in die Programmierung der seriellen Schnittstelle unter Linux einarbeiten wollte, habe ich das Skript nach C portiert. Das resultierende Programm “progswitch” verfügt über Argumentswitches für die jeweiligen Modis und erlaubt das angeben eines Interfaces.
In etwa sieht das Ganze dann so aus:
progswitch -d -i/ttyUSB0
Wobei d : Datenmode und :i Interfacedarstellen und i zwangsweise vorhanden sein muss. Sollte jemand auf die Idee kommen zwei Modis anzugeben, so wird immer der letzte ausgewertet und behandelt.
Unter Fedora habe ich zusätzlich eine udev-Policy erstellt, die die Schnittstelle automatisch mit den Rechten 666, also lesen und schreiben für alle erstellt und nur die Sillicon Labs RS232-Konverter behandelt.
Übersetzen kann man das Ganze dann mit dem gewohnten Dreisatz von :
./configure
make
make install (als root)
Sollte es dabei Probleme geben, so steht die Kommentarfunktion jedem offen.
“Für etwaigen Schäden übernehme ich keine Gewähr oder Haftung. Sollte etwas an eurem System oder eurer Hardware beschädigt werden, so geschieht das Nutzen des Programms und der hier dargestellten Informationen auf eigene Gefahr!”
Downloads:
Kleinere Designänderungen : Links
03. Okt
Um den Besuchern meines Blogs die Möglichkeit zu geben externe und interne Link zu unterscheiden, habe ich ein wenig an der style.css von dKret3 2.0 gebastelt. Externe Links werden ab sofort mit einem kleinen Pfeil gekennzeichnet, wobei externe Links zur Wikipedia mit einem kleinen “W†versehen werden. Ich persönlich find das wesentlich übersichtlicher und gerade in Beiträge ist es oftmals nicht erkennbar, wohin welcher Link führt.
Folgender CSS-Code führt zu der magischen Behandlung von internen und externen Links. Sollte der CSS-Code übernommen werden, dann einfach im letzten Abschnitt die URL auf die eigene Seite ändern und natürlich die Bilder anpassen. Zusätzlich zu den Bildern, habe ich sämtliche Links fett gestaltet damit sie sich vom übrigen Text weiter abheben.
Back To The Roots
16. Sep
Ich hatte eigentlich schon damit abgeschlossen und fast auch gehofft, mich nie wieder mit Visual Basic beschäftigen zu müssen. Nur wie man ja so schön sagt, kommt alles anders als man denkt.
Wie kürzlich erwähnt habe ich letzte Woche meinen Messplatz vorgeführt und er wurde tortz meiner Bedenken erfolgreich zertifiziert, was soviel heisst wie “Arbeit ist abgeschlossen”.
Also frisch ans Werk zu neuen Projekten und Arbeiten, wo schon der nächste Auftrag wartete.
Diesmal geht es um eine “einfache” Schnittstelle zwischen einer C-Bibliothek (einem mehr als properitären Dateiformat)Â und einem Visual Basic 6 Programms, da momentan keine Zeit bleibt um eine entsprechende Bibliothek für VB verfügbar zu machen, bekam ich den Auftrag und musste erste Stolpersteine aus dem Weg räumen, was mir bisher auch ganz gut gelang.
Wer eventuell ein ähnliches Problem hat und eine Struktur oder einen einfachen Variablen Wert zurückgeben muss, hier einige Beispiele.



