Unter OSX gibt es so etwaswieein “Startmenü” nicht. Wenn man eineApplikationstarten will, dannöffnet man mit Findereinfach den /Applications-Ordnerunddoppelklicktauf die gewünschteApplikationoder man drückt die Tastenkombination ⌘-Leertasteundgibt die erstenpaarBuchstaben seinerApplikationein. Wennsiesofortgefundenwurde, drückt man nurnoch Enter und sie wird gestartet. Das hat sich bei mir so stark zur Gewohnheit gemacht, dass ich teilweise keinen Dateibrowser mehr benutze (für Dateisystem-Operationen ist das Terminal sowieso benutzerfreundlicher), was wiederum erlaubt zu hinterfragen, ob man so etwas als Benutzer in Zukunft überhaupt wirklich braucht wenn solche Konzepte wie Spotlight sich noch etwas weiterentwickeln.
Spotlight holt seineInformationenauseinerDatenbank. DieseDatenbankhälteinen Index überalleDateienaufderFestplattebereitundwirdvonHintergrundprozessenständigaktuellgehalten.
Allerdingsist Spotlight manchmallangsam. Ichdefiniere “langsam” in diesem Fall mit “die Ergebnisseerscheinennichtsofort“. Daskommteinerseitsdaher, dassderHintergrundprozess, der die Datenbankaktuellhält, beimanchenOrdnernextremvielzu tun hat, dasichdortständigvielesändert. Andererseits kommt esdaher, dassSuchen in großenDatenbankengeringfügiglängerdauert, als in kleinen. Die Laufzeitsteigtzwarnicht linear mitderDatenbankgröße (Datenbanken verfügen über einige sehr ausgeklügelte Suchalgorithmen), aber siesteigt.
Googlen und Ausprobieren hat mir heute die Erkenntnis gebracht, dass es da gewisse Ordnergibt, nach deren Inhalten man eigentlich nie sucht, diesich aber laufend ändern. Wenn man sievonder Indizierung ausschließt, dann lässt Spotlight sich dadurch verblüffend gut beschleunigen.
Man geht folgendermaßen vor: Klick auf -> Systemeinstellungen -> Spotlight -> Privatsphäre. Mit einem Klick auf “+” kann man nun Ordner hinzufügen, die dann später von Spotlight nicht mehr berücksichtigt werden.
Hier fügt man nun die Ordner “~/Library/Application Support” und “~/Library/Caches” hinzu (~ ist eine Abkürzung für den eigenen Home-Ordner). In diesen Ordnern ändert sich ständig einiges und als normaler Benutzer schaut man sowieso praktisch nie in die dort liegenden Dateien.
Da ich als Software-Entwickler haufenweise SDKs und Frameworks installiert habe, werde ich bei fast jedem Stichwort von Spotlight mit gefundenen Header-Dateien überflutet. Das bleibt aus, wenn man einfach grob “/Library” und unter “/Developer” alles außer “/Developer/Applications” in die Sperrliste hinzufügt.
Wer “Fink” benutzt (Ein Paketmanager für freie Software für OS X), wird “/sw” zur Liste hinzufügen wollen.
Der zur Datenbank gehörende Hintergrundprozess passt sein Vorgehen beim Indizieren nun automatisch daran an. Die Datenbank muss nicht neu aufgebaut werden.
Ich hatte mir dieses Jahr eigentlich vorgenommen, zu Weihnachten als Geschenk eine selbstgebaute “Pulsanzeige” zu bauen, deren Schaltung dann noch in einem dekorativen Gehäuse verbaut werden sollte. Das “Praktikum Elektrotechnik 2″, an dem ich dieses Semester teilnehme, befasst sich im vierten Versuch mit Funktionsgeneratoren auf Basis von Operationsverstärkern und Grundschaltungen derselbigen. Jedenfalls brachte mich die letzte Aufgabenstellung der Versuchsdurchführung, nämlich das Verstärken des Pulssignals aus einer Fingerklammer, auf die Idee so etwas mal zuhause nachzubauen und es dann noch “Benutzerkompatibel” für die erwähnte Geschenkidee zu machen. Der Benutzer sollte dann einen Finger in eine Klammer stecken, die seinen Puls über das optische Verfahren abnimmt und die Operationsverstärkerschaltung betreibt dann eine dekorative Lampe die so synchron mit seinem Puls aufleuchtet.
Leider hat es mit der Zeit nicht mehr hingehauen, die Schaltung verschenkfertig zu machen. Es gab ein paar batteriespezifische Probleme und so weiter, von daher habe ich mich nach einem Alternativgeschenk umgesehen.
Bei der Suche bin ich auf eine Reihe Klein-Bastelprojekte gestoßen, die aufeinander aufbauen und sich auf interessantem Wege jeweils verbessern:
Phototransistorschaltung von www.evilmadscientist.com (Bild stammt von dort)
Zunächst ist auf www.evilmadscientist.com eine Bastelei aufgetaucht, die auf sehr minimalistischem Wege LEDs nur in dunkler Umgebung leuchten lässt (Link zum Artikel). Ein anderer Bastler hat auf www.instructables.com veröffentlicht, wie er eine kleine LED-Schaltung insofern mit einem Mikrocontroller erweitert hat, dass sie danach flackert wie eine Kerze (Link zur Anleitung).
Ein weiterer Hobbybastler hat dann auf www.hackaday.com veröffentlicht, wie er diese beiden Ideen kombiniert hat, um LEDs nur im Dunklen flackern zu lassen (Link zum Artikel). Die Schaltung bietet auf diesem Stand einen Mikrocontroller, der sich um das Flackern kümmert und einen Fototransistor, der den kompletten Mikrocontroller abschaltet, wenn das Umgebungslicht zu hell ist.
Fototransistor mit Mikrocontroller verschaltet auf www.spritesmod.com (Bild stammt von dort)
Diese Schaltung wiederum hat der Webmaster von www.spritesmods.com aufgegriffen (Link zum Artikel), weil ihm aufgefallen ist, dass die Schaltung auch mit viel weniger Bauteilen funktioniert, wenn man ein interessantes Detail von LEDs ausnutzt:
Wenn man Licht auf eine LED scheinen lässt, dann produziert sie eine Spannung an ihrer Sperrschicht, die in Sperrichtung abfällt. In diesem Moment kann man die LED wie eine kleine Stromquelle, parallel zu einem Kondensator geschaltet, betrachten.
Der Mikrocontroller nutzt diese Tatsache folgendermaßen aus: Er schaltet in gewissen Zeitintervallen die Beleuchtung ab, beschaltet eine LED hochohmig, damit sich eine Spannung anlegen kann, misst sie und entscheidet dann, ob die Lichter danach weiter leuchten sollen oder nicht. Ferner wird der Mikrocontroller nun nicht mehr ausgeschaltet, sondern legt sich einfach “schlafen” und wacht später für die nächste Messung wieder auf. Das ist immer noch extrem sparsam.
Vereinfachte Schaltung von www.spritesmod.com (Bild stammt von dort)
Alex von www.tinkerlog.com hat diese Idee wiederum aufgegriffen und ihr mit einer künstlerisch anmutenden Freiform-Verlötung der Bauteile einen wundervollen Hauch von Eleganz und Ästhetik verpasst. (Link zum Artikel).
Weil mir die Idee so gut gefallen hat, habe ich mich schnell dazu entschieden, sie nachzubauen, zumal man sowas schön verschenken kann.
Allerdings bot die spritesmod.com-Version der Schaltung und Mikrocontroller-Software eine Möglichkeit, die Schwellhelligkeit, bei der die LEDs noch flackern sollen, einzustellen/zu kalibrieren. Die tinkerlog-Version hat darauf verzichtet, um Platz für ein anderes nettes Feature zu bieten: Wenn man den Mikrocontroller resettet, dann leuchtet jeweils eine andere Anzahl an LEDs, was wiederum sehr passend für die verschiedenen Adventswochen ist.
Die Version die ich nachgebaut habe, bot letzteres Feature nicht, zumal die Adventwochen sowieso schon vorbei waren und ich diese Kalibrierung nicht auslassen wollte, zumal der Benutzer meiner Ansicht nach entscheiden sollte, bei welcher Helligkeit er den Kranz schimmern sehen will.
Jedenfalls habe ich mich heute noch einmal hinter den Sourcecode geklemmt, um Helligkeitskalibrierung und Adventskerzenfunktion zu haben.
Das Flackern der Lichter wird realisiert, indem einfach verschiedene LED-Helligkeiten die in einem Array gespeichert sind, schnell nacheinander auf den LEDs dargestellt werden. Die Werte sind allesamt möglichst zufällig gewählt, um sich dem praktisch zufälligen Flackern einer Kerzenflamme in den ebenso praktisch zufälligen Luftzügen, die man zuhause so hat, anzunähern.
Im Endeffekt lief es darauf hinaus, dass ich so viele Zufallszahlen aus dem Zufallszahlen-Array herausgelöscht habe, dass beide Features auf den Chip passen. Außerdem habe ich die im EEPROM gespeicherten Werte (Kerzen-Anzahl und gespeicherte Schwell-Helligkeit) in eine .eep Datei ausgelagert, die getrennt auf den Chip geflasht werden kann.
Ein Video zeigt ganz gut, dass es keinen deutlichen Unterschied macht, ob es ~150 oder ~250 Zufallswerte sind, die das Flackern erzeugen. Zwei Abschnitte des folgenden Videos sind mit zwei verschieden großen Zufallszahlen-Arrays gemacht. Um ehrlich zu sein, weiß ich selbst nicht mehr, welcher Abschnitt mit welcher Einstellung arbeitet:
Nun ja, besonders verwunderlich ist das nicht, zumal das Kerzenflackern ja schon mit zwei NE556-Bausteinen gut klappt.
Den Sourcecode inklusive dem angepassen Makefile gibt es hier: Download
Atmel kümmert sich mit kostenloser Software zur komfortableren Entwicklung von Software für die hauseigenen Mikrocontroller ganz gut um seine Kunden. Wenn sie Windows benutzen.
AVR Studio (Homepage, für Windows) kann alles, was das Herz begehrt. Es ist eine Programmierumgebung für C- und Assembler-Programmierer, die zusätzlich das Hochladen und Debugging von Programmcode auf den Chip bietet. Außerdem ist ein Simulator mitgeliefert, der die Analyse des Chips mit dem man arbeitet, stark vereinfacht und veranschaulicht.
Abgesehen davon dass man, nach einer kurzen Phase der Enttäuschung darüber dass Kunden mit anderen Lieblingsbetriebssystemen nicht bedient werden, fast Neid empfindet, stellt sich nach etwas Recherche aber dann doch durchaus heraus, dass das kein Grund ist, auf Windows umzusatteln. Jeder Nicht-User von Windows hat schließlich seine guten Gründe.
Also um überhaupt erst einmal AVR-Mikrocontroller zu programmieren, braucht man Compiler, Bibliotheken, Header-Dateien, Assembler und das Tool zum Hochladen des Codes.
Toolchain
Fink-Nutzer mögen einfach die diversen AVR-Pakete installieren, das geht schnell und einfach. (Mit Paketnamen: avr-binutils, avr-gcc, avr-libc, avrdude). Ich gehe hier nicht weiter auf Fink ein, da diejenigen, die jetzt nicht wissen wie das geht oder was Fink überhaupt ist, sowieso ein paar mehr Seiten an Doku lesen müssten und da ich es selbst nicht so gemacht habe (Beispielsweise deswegen weil der Assembler den ich haben wollte meines Wissens nach nicht per Fink zu erhalten ist).
Objective Development hat ein sehr praktisches Paket herausgebracht: Das Crosspack bietet alle Tools die man braucht. Gleichermaßen für Intel-Macs wie PPC-Macs.
Jetzt steht man zwar noch ohne GUI-Tools da, aber per Konsole kann man schon losprogrammieren. Mit dem Lieblingstexteditor programmiert man drauf los, kompiliert mit “avr-gcc” oder assembliert mit “avra”, lädt das Kompilat mit “avrdude” hoch und mit selbigem Tool ändert man auch die FUSE-Werte. Das ist nicht unkomfortabel, wenn man sich mit Shellscripten und einem guten Texteditor ausrüstet. (Empfehlung: VIM – ist bereits vorinstalliert)
Allerdings fehlen noch Syntax-Highlightning, Code-Completion, Upload-Button, FUSE-Editor, Registerbrowser usw.:
Entwicklungsumgebung
Beim Crosspack sind bereits Xcode-Templates mitgeliefert, aber da ich jene nicht benutze, bleibt das nur nebenbei erwähnt.
Ich kann Eclipse wärmstens empfehlen: Es handelt sich um eine Entwicklungsumgebung, die – da Java-basiert – auf jedem Betriebssystem heimisch ist und Plugins für jede Programmiersprache und beinahe jedes Framework liefert. Sich an dieses sehr umfangreiche Programm zu gewöhnen ist eine gute Idee, da man sich damit nicht an ein Betriebssystem oder Framework oder ähnliches bindet. Die neueste Version für OS X hängt auch nicht mehr vom Carbon-Framework ab, sondern baut die Oberfläche endlich auf Cocoa auf, was viele Vorteile gebracht hat.
Um Eclipse den Umgang mit AVRs beizubringen, braucht man das entsprechende Plugin: AVR-Eclipse. Auf die Installation gehe ich nicht weiter ein, da sie nicht kompliziert ist und eine Anleitung bald ohnehin schnell veraltet sein kann. Das Wiki der Projektseite bietet eine gute Anleitung.
Als nächstes bringt Eclipse allgemein natürlich den Syntax-Parser, die Code-Completion, Syntax-Highlightning, eine schöne Organisationsstruktur für Projekte, Debuggingmöglichkeiten, Symbolbrowser und so weiter.
AVR-Plugin-spezifischer sind der praktische Upload-Button, der AVR-Device-Explorer, in dem man alle Register, Ports und Interrupts chipspezifisch einsehen kann, die Programmer-Integration (über die man den Typ des Mikrocontrollers übrigens inklusive Taktung automatisch auslesen kann) und die Möglichkeit, alles projektspezifisch einzustellen.
Bilder sagen mehr als tausend Worte:
Wer die Arbeit mit Eclipse bereits gewohnt ist, der wird dieses Plugin sicher mögen.
Wenn allerdings schnell mal ohne großes Terminal-Bla FUSEs ausgelesen/geändert, Kompilat hochgeladen oder ähnliches getan werden soll, dann ist es übertrieben, extra ein Eclipse-Projekt aufzuziehen.
Es ist in C#.NET programmiert, was wiederum bedeutet, dass es unter Windows, Linux (mit Mono) und OS X lauffähig ist.
Da es eine Vielzahl von AVR-Chips unterstützt und an sich recht spartanisch ausgestattet (Es kann das was man braucht und mehr nicht) ist, nutzt man es am besten um schnell mal ein paar Bits zu setzen, wenn man fremde Programme in den eigenen Mikrocontroller schicken will oder ähnliches.
Um boolesche Ausdrücke zu vereinfachen, kann man Karnaugh-Veitch-Diagramme benutzen. Die Problematik gibt es praktisch überall, wo es um Low-Level-Logik geht.
Um mein eigenes Verständnis so tief zu treiben, wie es nur geht, habe ich ein Java-Applet dazu programmiert.
Da sich weit und breit im Internet kaum sinnvolle Sourcecodes zu solchen Anwendungen finden lassen, die auch noch Betriebssystem-unabhängig sind, gebe ich den Sourcecode frei.
Das Problem mit Linux ist meistens, dass es zwar prinzipiell alles kann, aber die Distributoren sich überfordert damit zeigen, für jedes Computermodell sinnvolle Standard-Einstellungen zu schaffen.
Bei anderen Betriebssystemen wird das entweder so gelöst, dass der Hersteller den Support nur für eine stark begrenzte Hardware-Vielfalt zu pflegen hat oder sich die Hardware-Hersteller selbst darum kümmern.
In den letzten Tagen boote ich, wenn ich gerade nichts wichtiges zu tun habe, mein Macbook mit Linux und versuche, alles zum Rennen zu bekommen, was wichtig für eine komfortable Bedienung ist.
Fundamental wichtig sind natürlich Grafik und Eingabegeräte. Wenn sie nicht oder nur schlecht funktionieren, dann kann man den Computer bedienen, aber es nervt alles einfach nur.
Zwei Dinge habe ich in den letzten Tagen schön zum Arbeiten bekommen. Ich beziehe mich hierbei auf Ubuntu 8.10.
Touchpad
Unter OS X habe ich mich daran gewöhnt, mit einem Finger per Tap einen Mouseclick auslösen zu können. Zwei Finger: Rechtsklick. Drei Finger: Mittelklick. Und das beste Feature an den Apple-Touchpads schlechthin: Mit zwei Fingern scrollen können – egal wo auf dem Touchpad die Scrollbewegung beginnt.
Das funktioniert nicht von alleine, aber HAL ermöglicht eine Konfiguration, so dass alles exakt wie unter OS X läuft.
Wichtig ist zunächst, in der /etc/X11/xorg.conf – falls diese Datei existiert – alle Einträge zu entfernen, die Touchpads betreffen. Geräte, die hier nicht auftauchen, werden von HAL konfiguriert. Dieser Daemon wird von X.org mittlerweile insofern unterstützt, dass er Geräte sofort nach dem Einstecken konfiguriert.
Damit dieser Trick auch mit Apples Touchpads funktioniert, legt man eine Datei /etc/hal/fdi/policy/appletouch.fdi an, die folgenden Inhalt hat:
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<deviceinfo version=”0.2″>
<device>
<match key=”info.capabilities” contains=”input.touchpad”>
<match key=”info.product” contains=”appletouch”>
<merge key=”input.x11_driver” type=”string”>synaptics</merge>
<merge key=”input.x11_options.SHMConfig” type=”string”>true</merge>
Die Änderung wird sofort umgesetzt, wenn man mit “sudo /etc/init.d/hal restart && sudo modprobe -r appletouch && sudo modprobe appletouch” den HAL-Server neu startet und das Touchpad-Modul neu lädt.
Grafik
Die 3D-Beschleunigung des Desktops ist spürbar schneller und flüssiger, wenn man die folgende Zeile in den Grafikkarten-Teil der /etc/X11/xorg.conf hinzufügt:
Option “AccelMethod” “UXA”
Diese Beschleunigungsmethode ist bei Ubuntu standardmäßig nicht eingeschaltet, da sie offiziell noch nicht stabil ist. Aber auf meinem Macbook2,1 hat das noch keine Probleme verursacht. Im Gegenteil.
Nun, seit Freitag ist das “LEGO Mindstorms meets MATLAB”-Projekt zuende.
Mein Kommilitone und ich haben in der Wahlversuchsphase einen Roboter gebaut, der Tic Tac Toe spielen kann.
Die mathematische, bzw. algorithmische Betrachtungsweise solch einfacher Spiele war sehr interessant. Dasselbe gilt für die Auswertung und Interpretation der gesammelten Daten über die Sensorik.
Im Studiengang “Elektrotechnik / Technische Informatik / Informationstechnik” an der RWTH Aachen hört man im ersten Semester unter anderem “Grundgebiete der Informatik 1″.
Es geht hier nicht darum, programmieren zu lernen, sondern um Algorithmen und Datenstrukturen. Die offizielle Vorlesungsprogrammiersprache ist C.
An der Uni ist man sich der Tatsache bewusst, dass viele noch nie programmiert haben, also werden in der Globalübung und in den Kleingruppenübungen durchaus ein paar Dinge erklärt.
Die meisten Anfänger benutzen Windows – und sie haben das typische Problem, dass ihr Konsolenfenster ( Unter Windows mehr “Eingabeaufforderung” genannt – das entspricht auch dem lächerlichen Funktionsumfang!) sich sofort nach Ablauf des Programms wieder schließt. Das passiert UNIX-Benutzern nicht, denn sie rufen ihr Programm in der Konsole mit “./meinprogramm” auf, sehen die Ausgabe und landen zurück in der Eingabezeile. Das sieht dann so aus:
tfc@photon u2 % ./aufg3_1_b 9:13
[Ausgabe des Programms (...)]
tfc@photon u2 % 9:13
Nichts klappt sich zu. Wozu auch? UNIX hin oder her – unter Windows ist es unüblich, die Konsole dauerhaft offen zu haben (Weil sie dort nichts kann), also besteht dieses Problem für einen Windowsprogrammierer nunmal.
Viele Windowsprogrammierer setzen deshalb vor dem “return 0;” in ihrem Sourcecode ein kurzes “getchar();” ab. Das ist sogar noch in der stdio.h enthalten, weshalb unnötige Includes wegfallen. Diese kleine Funktion lässt die Konsolenanwendung nach Ablauf des eigentlichen Programms auf die Eingabe eines Buchstaben warten. Was für ein Buchstabe das ist, ist ja völlig egal – das Programm blockiert an dieser Stelle und die Konsole geht nicht zu. Das erfüllt seinen Zweck. Abgesehen davon, dass es UNIX-Programmierer total nervt, weil man ständig Enter drücken muss, um zurück zur Konsole zu kommen.
Gestern allerdings war der erste Kleinübungsgruppentermin für Informatik (Erst letzte Woche wurden die Gruppenplätze verteilt). Hier wurde für die Total-Anfänger noch einmal gezeigt, wie man seinen ersten C-Sourcecode schreibt und kompiliert. Mit wxDev-C++ (oder sowas in der Art) unter Windows. Der Tutor erwähnte das “Zuklapp-Problem” mit der Konsole. Sein Lösungsvorschlag:
Man bindet über “#include <stdlib.h>” die stdlib.h ein und verwendet vor dem “return 0;” am Ende des Programms die Funktion system() mit folgendem Aufruf: “system(“PAUSE”);”. Dies hat zur Folge, dass am Ende des Programms das Programm “PAUSE” aufgerufen wird und die Konsolenausgabe so aussieht:
C:\winDOS\> meinprogramm
[Ausgabe (...)]
Bitte drücken Sie eine beliebige Taste, um fortzufahren…
Ja, toll. Den PAUSE-Befehl gibt es unter UNIX nicht. Weil an der Uni so verantwortungsbewusst Systemunabhängig gelehrt wird, darf ich während meinem Studium die Sourcecodes meiner UNIX-fremden Kommilitonen umhacken, damit sie bei mir überhaupt laufen und später schlage ich mich später im Berufsleben mit Arbeitskollegen herum, die kein wirkliches C können, sondern sich Müll zusammenprogrammieren, den sie sich unter Visual Studio oder so angewöhnt haben.
Ich richte einen Appell an alle Windows-Kommilitonen: Bitte, bitte nutzt Präprozessor-Anweisungen! Mit folgendem kurzen Code kann man sein Programm Plattform-Unabhängig machen:
#ifdef WIN32
system(“PAUSE”);
#endif
Diese Anweisung bewirkt, dass der Compiler diesen “Windows-Behelf” auslässt, wenn man das Programm überhaupt nicht unter Windows kompiliert.
Bei einem einzelnen Entertastendruck ist das ja alles noch nicht soooo schlimm, aber schlimmere Zeiten werden kommen.
Mittlerweile gibt es auch für den Safari-Browser von Apple ein AdBlock-Plugin, aber irgendwie blockt mir das zu wenig.
Früher habe ich das mal anders gemacht. Seit vorgestern mache ich es wieder wie damals:
Auf so ziemlich allen unixoiden Systemen existiert die Datei /etc/hosts. Wenn man eine URL in den Browser eingibt oder irgendein Programm sich zu einem Domain-Namen verbindet, dann schaut das Betriebssystem zunächst in die Datei /etc/hosts, vergleicht den Domain-Namen und wenn er dort steht, dann wird die dazugehörige IP-Adresse zurückgegeben. Wenn dort nichts von dieser Domain steht, dann werden der Reihe nach die Nameserver abgefragt, die in der Datei /etc/resolv.conf aufgelistet sind. Das ist naturgemäß langsamer. Allerdings haben manche Browser einen eigenen DNS-Cache. Bei Firefox bin ich mir da sicher, bei anderen Browsern bin ich mir wiederum nicht sicher.
Ich habe mal gehört, dass es unter Windows auch so eine Datei geben soll. Aber da ich in diesem Artikel ein Bash-Script vorstelle, das sicher nicht einmal von diesem neumodischen Windows Powershell-Schwachsinn unterstützt wird, können Windows-Benutzer hier praktisch schon aufhören, mitzulesen.
In die /etc/hosts schreibt man also IP-Adressen und Hostnamen rein, die man miteinander assoziiert haben will. Das kann verschiedene Zwecke haben:
1.) Man will die anderen Computerbenutzer ärgern. Man kann beispielsweise DNS-Anfragen nach microsoft.de auf apple.de umleiten. Dazu einfach eine Zeile zur /etc/hosts zufügen: “17.149.160.31 microsoft.de”, wobei die Nummern da Apples IP-Adresse darstellen.
2.) Man will gewisse Seitenaufrufe beschleunigen. (Wenn der Browser einen eigenen DNS-Cache hat, bringt das hier nichts) Oft aufgerufene Domains kann man hier also statisch eingeben und schon läuft alles schneller, vor allem wenn von der gleichen Domain viele Dateien pro Seite geladen werden.
3.) Man hat keine Lust, zuhause immer “192.168.1.1″ im Browser einzugeben, wenn man auf seinen Router zugreifen will. Also assoziiert man einfach ein Kürzel damit, indem man eine Zeile an die /etc/hosts anfügt: “192.168.1.1 router”. Und man kann sofort über “router” auf den Router zugreifen, anstatt umständlich die IP einzugeben. Das mache ich auch mit meinem gejailbreakten iPod so, wenn ich per SSH drauf will, weil ich seine IP ständig vergesse.
4.) Man will Werbeseiten blocken, und darum geht es in diesem Artikel eigentlich: Viele Server im Internet würde man gerne komplett blockieren, denn von denen bekommt man immer nur Werbung und nichts anderes zu sehen. Diese Domains kann man mit der /etc/hosts-Methode einfach auf Localhost (127.0.0.1) umleiten und schon kommen dort nie HTTP-Requests nach Werbebildchen an, also kommen auch keine nervigen Werbebildchen, Javascripts oder sonstwas zurück. Perfekt!
Aber es gibt so viele Werbeserver. Alle per Hand einfügen? NEE!
Es gibt eine ständig gepflegte Liste an nervigen Werbeservern im Internet auf http://pgl.yoyo.org/adservers/. Das tolle an dieser Liste ist, dass man sie in den verschiedensten Formaten anfordern kann, so dass man auch verschiedene Werbeblocker damit füttern kann. Im /etc/hosts-Format bekommt man sie praktischerweise auch.
Und damit man möglichst kaum Hand anlegen muss, kann man sich das alles schön automatisieren.
Zunächst sollte man sich eine Datei anlegen, die eine “nackte” /etc/hosts Datei repräsentiert. Also so wie man sie normal hat, ohne dass Werbeserver eingetragen sind. Ich habe meine einfach mal /etc/hosts.bak genannt. Wenn man sowieso noch keine Werbeserver eingetragen hat, gibt man einfach in die Konsole ein (Der folgende Befehl kopiert die bestehende Datei einfach):
sudo cp /etc/hosts /etc/hosts.bak
Und als nächstes schreibt man sich ein kleines Script zusammen:
#!/bin/sh
echo "Updating adserver list..."
sudo cp /etc/hosts.bak /etc/hosts
curl "http://pgl.yoyo.org/\
adservers/serverlist.php?\
hostformat=hosts&showintro=0&\
startdate%5Bday%5D=&startdate%5B\
month%5D=&startdate%5Byear%5D=&\
mimetype=plaintext"\
| sudo tee -a /etc/hosts >& /dev/null
echo "Done. Have fun!"
Diesen Bash-Code kann man jetzt einfach per Texteditor unter /usr/bin/adblockrefresh abspeichern und mittels “chmod +x /usr/bin/adblockrefresh” ausführbar machen (Das sollte mit Root-Rechten geschehen, sonst klappt’s nicht!). Ein kleiner Aufruf von “adblockrefresh” in der Konsole macht jetzt die ganze Arbeit.
Werbeserver sind jetzt auf dem gesamten System blockiert. Für jeden Browser, für jedes Programm. Browser mit DNS-Cache sollte man vielleicht mal neu starten.
War Adblocking jemals einfacher? Jedenfalls muss ich jetzt nicht mehr diese verdammt nervige Javascript-Werbung wegklicken, bevor ich serienjunkies.org betreten kann.
Immer wenn ich das Notebook vom Schreibtisch herunter nehme, um mich damit unters Fenster auf den Sessel zu setzen, habe ich das Problem, dass ich ja dann keine Musik mehr mit den Schreibtischlautsprechern hören kann. Wenn ich das Problem löse, indem ich die Musik nicht vom Notebook abspielen lasse, sondern vom iPod, dann muss ich aber immer aufstehen, um die Lautstärke zu verändern, das Lied zu wechseln oder die Musik einfach zu pausieren.
iPod-Docks lösen dieses Problem, denn sie haben einen Infrarot-Empfänger eingebaut, wodurch man den iPod einfach per Fernbedienung steuern kann. Damit wird das eine Problem aber nur durch ein nächstes abgelöst: So ein Dock kostet 50 Euro!!! Das kann ich mir als Student ja mal überhaupt nicht leisten.
Also durchsuchte ich vor zwei Wochen Ebay-Auktionen. Vielleicht gibt es sowas in gebraucht oder in nicht-Original. Letzteres traf zu: Ein gefälschtes Dock aus HongKong, das so aussieht wie das Original, welches aber nur drei Euro kostet. Plus sechs Euro Versand. Das macht also neun Euro und zwei Wochen warten.
Ich beschloss, das mal auszuprobieren, denn ich habe noch nie etwas direkt aus HongKong bestellt. Da ich es an meine Kölner Adresse schicken lassen habe, kam ich erst heute dazu, das Paket zu öffnen, da ich heute in Köln bin.
Was sofort auffällt und ziemlich interessant ist, ist die Tatsache, dass hinten auf dem Zollschein steht, dass die Sendung als Geschenk deklariert ist. Wenn der Zoll das so durchgehen lässt, dann ist das natürlich die günstigste Art und Weise, Waren nach Europa zu schicken.
Was mir dann aber zusätzlich auffiel: Der Warenwert (“EUR 2.00″) und die Unterschrift ganz unten (“RAP”) sind gedruckt, sehen aber nach Handschrift aus. Die Warenbeschreibung allerdings ist eindeutig mit der Hand geschrieben.
Scheinbar deklariert diese Firma den Warenwert jeder Sendung ins Ausland so und füllt lediglich das Feld “Quantity and detailed description of contents” mit der Hand aus.
Zum Produkt selbst: Man spürt das schon ein wenig, dass es sich um Billigplastik handelt, aber es funktioniert alles perfekt. Die Fernbedienung verrichtet auch fehlerfrei ihren Dienst.
Allerdings hörte man laut und deutlich im Gehäuse etwas wackeln, wenn man das Dock bewegt. Ich habe es auseinander geschraubt und festgestellt, dass eine metallische Platte im Boden verbaut ist, die das Dock mit ihrem Gewicht standfester machen soll. Das war der Übeltäter, da sie nur wackelig eingeklemmt war. Mit ein wenig Kleber ließ sich das Problem lösen. Es fühlt sich nun solide an. Pfennig-gefuchst!
Nachdem ich die Batterien durch ein Netzteil ausgetauscht habe, stand ja nun einem Mikrocontroller-Projekt nichts mehr im Weg.
Wozu braucht man einen Mikrocontroller in einem Kicker? Nun, an jedem Kickertisch sind vorne und hinten jeweils hinter dem Tor einer Mannschaft kleine Stangen verschraubt, auf die zehn Kugeln/Würfel aufgefädelt sind, die Nummern tragen. Damit zählt man die Punkte, logisch. Tor – Punktzahl zurechtschieben – Weiterspielen.
Angenommen, man empfindet es als nervig, genau das zu tun. Dieses sich-um-die-Punktzahl-Kümmern. Dann hat man den idealen Vorwand für eine Automatik, die das erledigt!
Was braucht man dazu?
• Tor-Trigger
• Anzeige für den Punktstand
• Mikrocontroller, der die Tore zählt und darstellt…
Die Tor-Trigger sind ja schon verbaut und durch den bereits eingebauten Schmitt-Trigger sind sie sogar in digitalen Schaltungen einsetzbar! Perfekt.
Während die Idee in meinem Kopf heranreifte, fielen mir noch folgende Features ein:
• Ansteuern des Soundmoduls (Schließlich war es mal der Kern der ganzen Aktion!)
• Zurücksetzen des letzten Tors (Falls es ein Unfall oder unfair war)
• Zurücksetzen des kompletten Spielstands
Die beiden Zurücksetz-Funktionen kann man problemlos an einen Druckknopf koppeln, der in den Tisch eingelassen sein kann. Ich hatte die Idee, dass der Mikrocontroller auf Knopfdruck das letzte Tor annulliert und wenn man den Druckknopf zwei, drei Sekunden gedrückt hält, das komplette Spiel auf Spielstand “0:0″ zurücksetzt. Das wäre total simpel zu bedienen. Vor allem soll der Mensch hier nicht viel interagieren, da Elektrogeräte viel schöner sind, wenn sie “einfach arbeiten”. Wie unpraktisch wäre ein Gerät, das dem Spieler die Arbeit, die Punktemarkierung ständig zu verschieben abnimmt, indem es ihm woanders neue Arbeit aufbürdet…
Okay, die Feature-Liste steht. Bevor die Phantasie erst richtig lossprudelt, sollte man sich darauf besinnen, die bestehenden Ideen erst einmal in die Tat umzusetzen. Doch womit fängt man nun an?
Die Tore zu zählen, bevor man sie überhaupt anzeigen kann, ist wenig sinnig. Damit fällt alles weg bis auf “Sound” und “Anzeige”. Ersteres läuft ja schon, also geht man am besten direkt zur Anzeige über. Die Anzeige der Punkte kann man nicht programmieren, wenn die Hardware, die die Leuchtzahlen trägt, noch nicht existiert.
Stundenlanges Durchforsten von Katalogen von CONRAD, Reichelt, ELV und so weiter hat nicht wirklich etwas gebracht. Ich wollte Digitalanzeigen verbauen, die Zahlen mit sieben Leuchtsegmenten darstellen. Sowas kennt schließlich jeder von überall her. Allerdings werden die nirgendwo in Größe “groß” zu erschwinglichen Preisen verkauft…
Kein Problem – Kann man schließlich selbst basteln. Hoffte ich. Und malte los, in welchem Format ich die Zahlen denn gerne hätte.
Eigentlich habe ich dabei nur die Größenverhältnisse meiner Digitaluhr dargestellt. Das Modell gibt es seit 30 Jahren und die Zahlen dürften so in ihrer Form demnach der Standard der Standards sein.
Ich entschied mich dazu, einfach mal eine Holzkiste mit Plexiglasfront drauf los zu bauen – die Elektronik wird da schon noch auch hineinpassen… Hauptsache es existiert erst einmal ein Display, dessen Ansteuerung man programmieren kann.
Also ab in den Baumarkt. Die Einkaufsliste:
• Ein viertel Quadratmeter (also 50×50cm) schwarze Bastelpappe
• Sekundenkleber
• Teppichmesser
• Folie mit Diffusionswirkung
• Holz für den Rahmen
• Plexiglas im Format 50×25 cm, 2 oder 3 mm dick
Diffusionsfolie habe ich keine gefunden. Allerdings habe ich im Firmenmüll gewühlt und eine Folie gefunden, die fast perfekt durchsichtig ist, aber auch die gewünschte Diffusionswirkung hat. Es war mal ein Monitor darin eingepackt. Und da es sich um einen 24-Zoll-Monitor handelte, war sie sogar groß genug.
Ich konnte nur ahnen, wie unglaublich viel Arbeit mir alleine für diesen Handwerkslastigen Teil bevorsteht. Zunächst übertrug ich die Planzeichnung des Displays auf die Bastelpappe und schnitt mit dem Teppichmesser die Bleistiftstriche entlang.
Diese einfache Maske kann nun nicht einfach von hinten mit LEDs beleuchtet werden, da die Segmente ja nicht optisch voneinander getrennt sind. Also dachte ich mir eine Konstruktion für Trennwände aus. Das war auch der nervigste Teil der Arbeit, weil man hier auf engstem Raum Trennwändchen mit der Pinzette verklebt und ab und zu die eigenen Finger zusammenkleben. Wenn ein Finger an der Konstruktion klebt, kann man ihn natürlich nicht einfach so abreißen, denn sonst geht ja alles kaputt.
Witzig ist, dass man nach einigen Stunden Arbeit und Rückenschmerzen vom über die Tischplatte gebeugten und konzentrierten Arbeiten eine extrem dicke Hornhaut an den Fingern bekommt und nur die Fingerabdrücke offenbaren, dass es sich einfach nur um eine Plastikschicht aus Sekundenkleber handelt. Abwaschen ist nicht drin. Aber man gewöhnt sich dran.
Nun ja, jetzt sind die Trennwände vorhanden und verbaut, also kann man in jede dieser nun entstandenen Kammern eine LED setzen und so müsste das Ganze als Display benutzbar sein. Aber halt: Es ist noch mehr Handwerk gefragt. Sichtglas, Holzrahmen, die Halterung der LEDs und die LEDs selbst!
Auf dem letzten Bild zu sehen: Es ist alles verschraubt, die Diffusionsfolie ist das erste Element hinter der Platte und danach folgt die Maske.
Leider war ich so naiv und habe (so genannte) Superflux-LEDs in Ein-Chip-Ausführung bestellt. Diese stellten sich als viel zu wenig leuchtstark heraus, weshalb ich in verzweifelter Hoffnung die LED-Kämmerchen mit Alufolie ausgekleidet habe (Auf dem letzten Bild zu sehen). Wer sich einen riesen Haufen Arbeit sparen will, kauft direkt LEDs in der nächst-teureren Ausführung – und tut sich damit einen riesigen Gefallen.
Wie baut man nun die LEDs ein? Ich entschied mich dafür, hinten eine Schaumstoff-Wand anzusetzen, durch die ich die LEDs durchstecke und von hinten verlöte. Vorteile: Das ist so schön einpassbar und der Schaumstoff passt sich der Maske an, so dass keine Luftspalte zwischen den einzelnen Kammern entstehen. Das Licht kann so nur und nur vorne heraus und das ein Segment beleuchtet seine Nachbarn nicht mit.
Das hat ganz gut geklappt. Nur sollte man mit dem Lötkolben den Schaumstoff nicht berühren, da es sonst erbärmlich stinkt.
Mit der Verdrahtung wird es in diesem Teil des Projekts endlich technischer. Zusammengezählt ergeben die vier Zahlen, die aus jeweils sieben Segmenten bestehen und die beiden Punkte des Doppelpunkts 30 Leuchtdioden.
Da diese LEDs getrennt angesteuert werden müssen (sonst könnte man logischerweise keine Zahlen darstellen), muss irgendeine Lösung her, da der Mikrocontroller nicht einmal 30 Beinchen insgesamt hat.
Ich habe mich schon früher gewundert, wieso die Digitalanzeige meines Satellitenempfängers gerade noch wahrnehmbar (im Augenwinkel, welcher sowieso bei relativ hohen Frequenzen sensibler ist). Bis mir dann einfiel, dass man wohl nicht für jede Lampe einen Pin des steuernden Mikrochips verschwendet…
Man kann jedes Segment einer Zahl mit den Positionsgleichen Segmenten der anderen Zahlen verbinden. Also verbindet man alle oberen Segmente miteinander, alle mittleren und so weiter.
Damit hat man bisher schon einmal sieben Pins am Mikrocontroller verbaut. Wenn man die Zahlen jetzt ansteuern will, dann funktioniert das zwar, aber da alle Zahlen dasselbe Signal abbekommen, steuert man sie alle gleichzeitig an. Das macht natürlich wenig Sinn.
Jetzt allerdings kommt das Flackern ins Spiel:
Während man zwar alle Zahlen gleichzeitig ansteuert, müssen nicht alle gleichzeitig geerdet sein.
So schließt man einfach alle Segmente einer Zahl an das gleiche Massekabel an. Und nun lässt man den Mikrocontroller steuern, wer wann Anschluss an Masse bekommt.
Da die Leuchtdioden insgesamt zu viel Strom verbrauchen, wäre der Mikrocontroller damit überfordert, die Masse selbst bereitzustellen. Also lässt man diesen Job einfach von Feldeffekt-Transistoren machen.
Auf der anderen Seite der Ansteuerung, die der Einzelsegmente, braucht man keine Transistoren oder ähnliches, da hier sowieso nur eine auf einmal leuchten kann, da ja die Masse nur für ein Segment auf einmal aktiv ist. Das Problem lässt sich also relativ elegant lösen.
Also braucht man nun sieben Pins für die Steuerung der einzelnen Segmente + fünf Pins für die Masse jeder Zahl. Der Doppelpunkt wird als eigenständige Zahl gezählt. Das macht bei der Ansteuerung sowieso keinen Unterschied. Man nennt dieses Prinzip auch “Multiplexing“.
Als nächstes muss natürlich ein Stecker an das Display, so dass man es benutzen kann. Und die Transistoren müssen verbaut werden.
Die Transistoren und den Stecker habe ich auf eine Platine gelötet, die ich zuvor schnell geätzt habe. Da es sich nicht um eine große, komplizierte Sache handelte, ging das mit Edding und Säure.
Um sich gute Ätzbedingungen zu schaffen, schleift man die Kupferseite der Platine am besten gut an, damit der Edding später gut haftet und putzt sie danach mit Benzin, Spiritus oder Aceton. Aceton ist eigentlich das Mittel der Wahl. Hatte ich aber nicht zuhause. Benzin ist billiger als Spiritus. Hatte ich aber auch gerade nicht griffbereit. Mutter hat’s nicht gesehen.
Nachdem die zukünftigen Leiterbahnen schön mit Edding aufgemalt sind, kann man die Platine so in die Säure werfen. Ich habe Eisen-III-Chlorid benutzt. Es ist günstig, ungefährlich, stinkt kaum, aber man sieht nicht, wie weit die Platine mit dem Ätzen ist und muss sie ab und zu herausholen. Außerdem dauert es relativ lang.
Um die Loch-Abstände genau hinzubekommen, nimmt man am besten eine Lochrasterplatine, legt sie auf die geätzte Platine und körnt kleine Löcher als Bohrermarkierung mit einem dünnen Nagel durch die Lochrasterplatine. Dann gibt es später auch keinen Ärger beim Einsetzen des Steckersockels.
Eingelötet und alles zusammengebaut sieht das Ganze dann wie auf den Bildern aus.
Ein kleiner Test durch Anlegen von Spannung an die entsprechenden Pins des Steckersockels zeigte, dass alles funktioniert, wie vorgesehen.
Nun konnte es mit dem Mikrocontroller-Part weitergehen:
Zunächst klappte überhaupt nichts, weil der Mikrocontroller sich bei den einfachsten Rechenoperationen “verrechnet” hat. Zwei Stunden später fand ich heraus, dass ich einen Kondensator vergessen habe, der Spannungsspitzen vor der Spannungsversorgung am Mikrocontroller glättet. Anfängerfehler.
Nach stundenlanger Spielerei klappte es dann endlich. Ich konnte Zahlen darstellen, die vom µC hochgezählt wurden.
Die Darstellung der Zahlen übertrifft sogar meinen Satelliten-Empfänger, denn man sieht es nicht einmal flimmern (Okay, im Youtube-Clip unten flimmert es doch ein bisschen. Aber in der Realität tut es das nicht). Der Kasten, der zuvor noch in Einzelteilen beim Baumarkt lag, zeigt jetzt tatsächlich Zahlen an!
Auf Dauer hat sich alles etwas angehäuft. Es ist praktisch, einen zweiten Schreibtisch nur zum Basteln zu haben.
Mittlerweile ist alles so angeschlossen, dass zur Zeit eigentlich nur weiter programmiert werden muss. Auf dem Mikrocontroller ist zu diesem Zeitpunkt nur ein Programm drauf, das einen Zähler hat, welcher die darzustellende Zahl diktiert.
Als nächstes soll das Programm allerdings auf gedrückte Taster reagieren, welche die Lichtschranken in den Toren simulieren. Wenn ich diese zuhause liegen hätte, dann könnte in der Firma ja niemand vernünftig Tischfußball spielen.
Stunden später funktioniert es prinzipiell. Die einen beiden Taster auf dem Steckbrett simulieren auf Knopfdruck Torschüsse und ein dritter Taster macht den Job des Druckknopfes, der mal in den Kickertisch eingelassen wird.
Okay, wo die Displayansteuerung funktioniert, kann ja alles auf Platine gebannt werden, weil die Hardware ja nun gut genug durchdacht ist. Danach folgen dann noch Schliffe an der Software, wie die automatische Abschaltung.
Die beiden alten Schmitt-Trigger kamen auch auf die neue Platine, damit es eine zentrale Steuerungseinheit im Display gibt und nicht alles irgendwie verstreut ist.
Ein paar Tage nach Fertigstellung der Platinenversion bekam die Software noch den erwähnten Abschalttimer (Eigentlich wird nur das Display abgeschaltet und der Punktstand zurückgesetzt) und eine Aufwachfunktion, so dass ab dem ersten Tor sofort das laufende Spiel mitgezählt wird (Also muss der Mensch nichts tun, um einfach loszukickern). Außerdem gibt das Display blinkend ein “YEAH” aus, wenn ein Tor geschossen wird und der Sound gestartet wird. Beim Einschalten liest man zunächst zwei Sekunden lang “HELO”.
das Ganze macht ja schon fast einen professionellen Eindruck, denn es funktioniert einfach!
Als nächstes sollte die Testphase am Kicker folgen. Ein Laie könnte alles anschließen. Man hängt das Display an die Wand, schließt es an den Strom an und verbindet es über ein normales Netzwerkkabel mit dem Kickertisch. Alleine die Tatsache, dass der Kicker eine Netzwerkbuchse hat, musste noch mit einigem an Vorarbeit gesichert werden. Aber im Endeffekt mussten die Kabel der Lichtschranken und des Soundmoduls nur mit der vorgefertigten Buchse verbunden werden. Gaffa-Tape und Schraubenzieher, sowie Heißkleber haben’s getan.
Nun ja, dank der Tatsache, dass danach tatsächlich alles funktionierte, gibt es hier eigentlich nichts mehr zu sagen. (Okay, doch: Beim nächsten mal teurere, hellere LEDs kaufen!!!)