Okt 26

[Update 01.11.2014:] Klang alles vielversprechend, hat aber gerade mal 3 Tage WakeUp gehalten Lösung also leider noch nicht gefunden

Nach dem ich meinen Mac auf Windows8 OSX Yosemite geupdated habe, ging nach einem WakeUp, netzwekmässig, überhaupt nichts mehr.

War schon so gefrustet, dass ich dachte ich müsste Clean-Install machen, oder aber auf ein anderes OS wechseln. Das ganze hat sich im system.log und Allgemein so geäussert, dass die NIC nach einem WakeUp für ein paar Millisekunden da war, und dann wieder weg (was die Funktionalität angeht). In den Systemeinstellungen sah die ganze Zeit über alles fein aus: IP, Interface war up, etc. Aber halt so gar keine Connectivity. Auszug syslog:

Oct 24 14:03:30 macpro2 kernel[0]: 0x1face000, 0x00000000  Intel82574L::setLinkStatus - not active
Oct 24 14:03:30 macpro2 kernel[0]: 0x1face001, 0x00000000  Intel82574L::setLinkStatus - not active
Oct 24 14:03:32 macpro2 kernel[0]: Ethernet [Intel82574L]: Link up on en1, 1-Gigabit, Full-duplex, Symmetric flow-control, Debug [796d,af08,0d01,0200,cde1,3c00]
Oct 24 14:03:32 macpro2 kernel[0]: 0x1face001, 0x0000000b  Intel82574L::setLinkStatus - active
									

Nach ein paar Anfragen bei stackoverflow kam ich auch nicht wirklich weiter. Irgendwann bin ich dann auf einen Beitrag gestossen, wo jemand über das Problem berichtete, dass sein Mac immer dann abstürzte, wenn er in die Soundeinstellungen ging. Das Problem wurde dadurch gelöst, dass er die Kernel-Extension (kext) von Soundflower deinstalliert hatte. Hab ich dann hier (obwohl ganz anderes Problem) auch mal gemacht. Zusätzlich hab ich noch alles andere an kexts deinstalliert, was nicht notwendig war. Vendorfremde kexts neigen bei ‘nem Major-Update zum Amoklauf. Eine Liste, welche kexts bei Euch NICHT von Apple kommen gibts es wie folgt:

kextstat |grep -v apple
Index Refs Address            Size       Wired      Name (Version) <Linked Against>
   41    0 0xffffff7f81e1f000 0x19000    0x19000    net.osx86.kexts.GenericUSBXHCI (1.2.6) <38 12 7 5 4 3>
  130    3 0xffffff7f833c7000 0x57000    0x57000    org.virtualbox.kext.VBoxDrv (4.3.18) <7 5 4 3 1>
  131    0 0xffffff7f8341e000 0x8000     0x8000     org.virtualbox.kext.VBoxUSB (4.3.18) <130 79 38 7 5 4 3 1>
  132    0 0xffffff7f83426000 0x5000     0x5000     org.virtualbox.kext.VBoxNetFlt (4.3.18) <130 7 5 4 3 1>
  133    0 0xffffff7f8342b000 0x6000     0x6000     org.virtualbox.kext.VBoxNetAdp (4.3.18) <130 5 4 1>

									

Die oberste kext benötige ich für USB3.0 (funktioniert auch unter Yosemite noch), die anderen 4 sind von Oracles VirtualBox. Mit denen funktioniert nun wieder alles. Vorher war noch Soundflower und noch irgendein Kram dabei. Idealerweise deinstalliert man die Dinger mit dem – der Soft hoffentlich beiliegenden – Uninstaller. Ist der nicht vorhanden kann man die Dinger auch per Hand töten. Seit OSX Lion muss man dafür nicht mal den Kernel-Extension-Cache neu aufbauen. Funktioniert wie folgt:

cd /System/Library/Extensions

									

Mit ls die passende Extension, die man löschen will, suchen.

Anschliessend kext “unloaden” (d.h. aus dem RAM entfernen) und löschen:

sudo kextunload /System/Library/Extensions/NAME_OF_THE_KEXT_FILE.kext
sudo rm /System/Library/Extensions/NAME_OF_THE_KEXT_FILE.kext
									

War ‘ne harte Nuss, zumal so gar kein Hinweis auf die (amoklaufenden) Extensions im Syslog oder Kernel-Ring-Buffer (dmesg) auftauchten. Nu tut der Mac wieder wie er soll. Nichts desto trotz denke ich, dass es langsam Zeit wird, sich nach einem anderen OS umzusehen. Die Schmerzen (und die Ähnlichkeit zu Windows) werden immer grösser.

Tagged with:
Jun 10

Schreibe hier mal nach und nach ein paar hilfreiche Erfahrungen auf, wenn man – wie ich – den Schritt von IOS nach Android wagt, und von der ganzen Cloud-Struktur nicht so viel hält.

Ein wenig eigene Infrastruktur je nach Geschmack (Mailserver, CAL-/CARDDAV-Server, Proxy mit adblocker nach gusto, eigener DNS) sollte es jedoch schon sein, wenn man die wichtigsten Daten von der Cloud fernhalten möchte. Das war unter ios so, und gilt unter Android mehr denn je. Also los gehts mit den Basics:

  • Mails: Da eignet sich K9-Mail ganz gut – ist etwas anders als Mail.App zu bedienen, kann aber nach meinen Vertestungen am meisten
  • Kalendersync: CalDAV-Sync integriert den eigenen CalDAV zu 100% in die Android-Welt, und das ganz ohne gmail-Kalender. Reminder und Co. funktionieren sauber!
  • Telefonbuch: CardDAV-Syncfree synct wunderfein die Kontakte mit dem heimischen CardDAV-Server (zum einsatz kommt hier übrigens davical)
  • Notizen: Werden bei ios/osx als “spezielle Mail” in einem Subfolder mit Namen “Notes” abgelegt. Da gibts was günstiges für den Droiden: iNotes – nicht von der Beschreibung im Store verwirren lassen, der spielt echt mit jedem imap (hier ist der gute alte cyrus im Einsatz)
  • Twitter: Tja. Da bin ich noch nicht so ganz weiter. Tweetbot gilt nach wie vor als ungeschlagen. Aber Tweetveo kommt zumindest schon mal etwas dran. [Update 10.06.14] Plume isses ! Tweetmarker-Support. Suchen nach Antworten – also all das was Tweetbot auch kann – zumindest auf den ersten Blick. Danke an @bridgerdier

Nun bringt das alles herzlich wenig, wenn man die Äpps auf dem Device, sowie das OS nicht einigermassen abschotten kann. Und an dem Punkt kommt Cyanogenmod – das mich überhaupt bewegt hat, von IOS nach Android zu wechseln – ins Spiel. Nicht ganz trivial zu installieren (Grobe Vorgehensweise: Bootloader unlocken, CWM/TWM aufspielen, Image installieren) aber in der Version 11 (Analog KitKat) sehr empfehlenswert. So lässt sich jede Äpp beliebig kastrieren (Bis hin zu: “Darf die App vibrieren?” und so). Ein Feature das google seit 4.4.2 wieder ausgebaut hatte. Hier isses drin. Und das ganze CM11 ist echt stabil.

Wer dann den Droiden noch weiter abschotten möchte, dem sei (CM11 bzw. root vorrausgesetzt) noch Droidwall ans Herz gelegt. Ganz platt gesagt ist Droidwall ein Frontend für iptables mit dem man pro Äpp sagen kann, ob diese überhaupt ins Netz darf. Heisst: Wenn ich bspw. ne Taschenlampe installiere, dann braucht die mal definitiv keinen Netzzugriff… Logging gibts gratis obendrauf.

Ansonsten macht AdFree von BigTinCan noch den solidesten Eindruck. Warum das Teil von einer sehr dubiosen Website kommt, nicht im Playstore verfügbar ist und überhaupt, weiss wohl niemand. Habe dieses Ding ausgewählt, weil es ganz simpel die /etc/hosts um einschlägige Werber ergänzt, und echt nicht mehr anstellt. Alles andere wollte direkt Nutzungsdaten und Co. nach Hause funken. Dieses schicke kleine APK macht genau das was es soll (Werbung fernhalten – und das auch noch relativ elegant).

[Update 11.06.14] Mit IOS8 soll es ein Update geben, bei dem das iPhone die Mac-Adresse des WLAN-Interfaces randomisiert während es keinerlei Connect zu einem WLAN hat. Löbliches Feature. Geht mit dem Droiden natürlich auch. Guckst du Pry-Fi im Playstore. Das das Teil root-Rechte benötigt, liegt auf der Hand.

Am meisten weggetan hat das Messaging. Kenne ich doch recht viele ios-iMessage Menschen. Da gibt es leider nur Pest oder Cholera als Ersatz. Facebook möchte ich nun nicht gerade in Form von WhatsApp beglücken, also hab ich mich neben SMS für Google-Hangouts entschieden. Ob bei Kurznachrichten jetzt Apple oder google mitliest ist da relativ. (Nur FB sollte es halt nicht sein). Das ganze Thema Messaging ist extremst unbefriedigend, sowohl unter ios als auch unter Android. Diesen ganzen Placeboteile wie Threema und wie sie nicht alle heissen kann man auch nicht trauen (ist halt kein opensource). Daher gibts hier halt einen Kompromiss.

Wenn jemand noch weitere Tips hat, immer gern her damit.

Gesucht wird bspw. noch:

  • PodFetcher
  • FeedReader (Gut, Feeds lese ich hauptsächlich auf dem iPad – aber wer weiss: Vielleicht kommt da ja auch irgendwann mal ein Droide hin)
Tagged with:
Jan 25

Gaaaanz kurze knackige Anleitung, wie man einen PGP/GPG Key beglaubigt  bzw. signiert (unvollständig, und OHNE Anleitung, wie man den Key auf korrektheit prüft – idealerweise signiert Ihr nur Keys, bei denen Ihr 100%ig sicher seid, dass diese auch vom passenden Keyowner kommen :) )

Shell:

[gpg –list-keys] Pub-Key-ID des zu signierenden keys merken

[gpg –sign-key <pubkeyid>] Das eigentliche Signieren

[gpg –send-keys <pubkeyid>] Signieren dem Keyserver bekanntmachen

OSX / GPGTools:

  • GPG Schlüsselbund (GPG Keychain) starten.
  • Rechte Maustaste auf den zu signierenden Key
  • Beglaubigen anclicken, Details entsprechend wählen und OK drücken
  • Wieder rechte Maustaste, diesesmal “Öffentlichen Schlüssel an Schlüsselserver senden”

Der letzte Punkt – also das Veröffentlichen der Beglaubigung, wird gern vergessen. Ohne diesen Schritt ist das ganze jedoch recht witzlos.

[UPDATE]

Bei mehreren uids (Identitäten) pro Key:

  • Doppelclick auf den Key in der Keychain-GUI
  • Wechsel auf den “Benutzer-ID”-Tab
  • Zu bestätigende Identität OBEN auswählen
  • Unten auf das Plus clicken und beglaubigen
  • Anschliessend wieder raus, und “Öffentlichen Schlüssel an Schlüsselserver senden” (s.o.)
Tagged with:
Jan 12

Ausnahmsweise mal keine (Über-)Lebenshilfe, sondern ein Hilferuf!

Da hier zwei Kids rumlaufen, hab ich gern die Kontrolle wann und wie das Netz benutzt wird. Bisher (zu v4-Zeiten) hat der Squid gute Dienste geleistet. Mit ipv6 ist das nicht mehr so. Da beisse ich mir nämlich die Zähne aus.

Doch von vorn: Hier im Netz läuft ein radvd (Router Advertising Daemon), der ein sixxs-Prefix im LAN Announced. Der (zwangs-)proxy biegt alle ausgehenden ipv4-Port-80 Anfragen transparent auf den Squid-Port um, und handlet den Kram dann per ACL. v4 gibt es statisch über einen DHCP, und für Gäste ist eine Range vergeben.

Seit v6 schnappen sich die Endgeräte irgendeine v6-Adresse (bei ios7 kann man ja bekanntlich die privacy-extensions nicht mehr ausschalten) und vorbei ist es mit der Kontrolle (vom DNS mal ganz abgesehen). Eine Lösung muss her. Bisher ausprobiert habe ich folgendes:

  • auth_param im Squid angeknipst. Resultat erschütternd:
    • Android und Proxys … Hahaha (wenn, nur “gerooted”) !!! Android und Proxy-Auth – HEUL! Tut überhaupt nicht.
    • ios und Proxys – Nett / ios und Proxy-Auth – Neee, da taktet ein Autoblinker stabiler. Geht nicht :(
    • OSX: Siehe ios.
  • acl based on arp (acl arp)
    • Bei v4 schick – bei v6 gibts Neighbourdiscovery und kein arp mehr. Dummerweise scheint noch niemand ND in irgendeiner Squid-Version als acl implementiert zu haben :(
  • ACLs auf V6-IP-Basis
    • Aufgrund der Privacy-Extensions unbenutzbar

Noch nicht ausprobiert (weil so demotiviert von den o.g. zwei Punkten – und tlw. auch zu aufwendig):

  • Getrennte “Netze” mit getrennten IPv6-Prefixen um die ACLs auf Netzebene auszurollen:
    • Aufwändig !! Trennbar nur über VLANs, extra SSIDs an jedem WLAN-AP … und überhaupt
  • DHCPv6
    • will man sowas?
  • RADIUS
    • Kanonen / Spatzen und so. Neee
  • 802.1X
    • Interessanter Ansatz. Aber da fliegen auch wieder die IOS-Devices raus. Ferner gilt das selbe wie bei radius.

Vorschläge sind mehr als willkommen. Derzeit hab ich auf der LAN-Seite des Proxies v6 wieder ausgeschaltet und arbeite mit den o.g. ARP-Filtern. Tut zumindest einigermassen. An so einem iphone lässt sich die macaddy nicht so einfach ändern. 

Tagged with:
Jan 12

TT-RSS an sich ist ja eine feine Sache. Das Ding hat allerdings ein/zwei Haken, wenn man es für mehrere Leute hosted. Ich nutze das hier mit dem Fever-Plugin, damit man die Feeds auch einigermassen elegant auf mobilen Endgeräten nutzen kann.

Meist ist es ja so, dass $user sich eine Feedliste zusammenstellt, und sich dann Wochenlang nicht mehr ins Frontend einloggt (Hab ich beim Google-Reader damals™ auch so gemacht). Das nimmt einem ttrss aber übel. Denn nach 30 Tagen (Einstellbar in der ./include/rssfuncs.php // Zeile 2) sagt sich ttrss: Nee, der User hat sich seit 30 Tagen nicht mehr eingeloggt, dann update ich halt nicht mehr. Pikanterweise zählt der Fever-Login nicht (Plugins verwalten Ihre Daten “irgendwie” anders – PHP-Magic halt).

Also merken: Wenn tt-rss nicht mehr updatet, entweder:

  • Zeile 2 der ./include/rssfuncs.php anpassen und hochdrehen (Halte ich für nicht so super)
  • Den/Die User/in anhalten, sich von Zeit zu Zeit mal ins Frontend einzuloggen
  • Oder (superschmutzig), per Hand das Feld last_login in der tabelle ttrss_users auf “NOW()” updaten.

 

Tagged with:
Okt 26

Nach dem ich nun auf 3 Maschinen OSX 10.9 (aka Mavericks) installiert habe, ist es Zeit für ein erstes kleineres Resumee, in dem ich mal drei Stolperfallen beleuchten möchte. Kurz und Bündig:

  1. TimeMachine will nicht mehr auf mein Debian mit Netatalk3 backuppen. Es erzählt irgendwas von

     Failed to create backup of Time Machine Information file
    									

    . Die Lösung war recht simpel. In meinem Namen befindet sich ein Umlaut. Und per Default werden Macs unter “Systemeinstellungen / Freigaben” mit dem Namen “[Name des Besitzers]’s Mac Pro” gekennzeichnet. Diesen Namen nimmt OSX auch für die erstellten Sparsebundles. Also Umlaute und Spaces aus dem “Computernamen” entfernt, und schon geht es wieder
  2. Die Einstellung mit der Menubar auf jedem Screen (Multiscreen) macht auf einem Macboo mit einem externen Monitor vielleicht noch Sinn. Auf einem MacPro mit mehr als 2 angeschlossenen Screens ist das ganze nur noch nervig. Bei der Suche nach der Option, mit der man das abstellen kann, hab’ ich mich echt in Windows-Zeiten zurückversetzt gefühlt. Abgestellt wird das ganze unter “Systemeinstellungen / MissionControl” – hier den Haken bei “Monitore verwenden verschiedene Spaces” entfernen, und gut ist.
  3. Bisher ungelöst: Ich habe hier ein AppleTV3 im Netz. IP’s werden per DHCP übergeben, gleichzeitig läuft ein arpwatch. Das Arpwatch schlägt jedesmal an, wenn eine neue MacAdresse im Netz auftaucht, oder irgendeine neue MacAdress/IP-Kombi auftritt. Seit Mavericks passier folgendes: Mac wacht alle 4h auf (war vermutlich früher schon so), krallt sich die MACADRESSE des AppleTV’s und die IP des Macs, wechselt dann die MacAdr. behält aber die IP. Mit dem Effekt das es alle 4h ‘ne Mail vom Arpwatch gibt. Seit 2 Tagen habe ich testweise das ATV mal vom Netz genommen. Keine Probleme mehr. Aber irgendwie kann es das ja auch nicht sein. Wer also ‘nen Tip hat -> Her damit!

Das ganze Speichermanagement soll, angeblich, besser sein. Kann ich nicht bestätigen. Ab einer bestimmten Belegungsmenge fängt das Ding wieder wie irre an zu swappen. Da hilft nur kurz vorher ein “sudo purge” im Terminal…

Tagged with:
Jul 14

Seit längerem bin ich nun schon wieder mit dem Gedanken an eine Tageszeitung schwanger. Doch von vorn: Früher™, als wir noch im Sauerland gewohnt haben, gab es kaum Auswahl. Da war (an Lokalangeboten) entweder die Westfälische Rundschau, oder die Westfalenpost (beides WAZ-Gruppe) im Abo.

Nach dem Umzug ins Rheinland (genauer Königswinter) kam dann der General-Anzeiger ins Spiel. Man fühlte sich einigermassen informiert. Ich muss dazu sagen, dass mir eine Papierzeitung allenfalls Stichworte bietet, und ich interessante Dinge eh im Netz nachrecherchiere (Medienkompetenz und so :). 2 Jahre später, endlich sesshaft in Unkel geworden, stand ich nun vor einem Dilemma. Nicht mehr NRW, und auch (gefühlt) nicht Rheinland-Pfalz. Unkel ist quasi der fast nördlichste Teil von RLP auf der rechten Rheinseite. Mit dem Effekt, dass der Generalanzeiger den lokalen Part nicht mehr abdeckte (nicht NRW) und die Rheinzeitung, die 2-3 mal in denen ich das Blatt an der Tankstelle gekauft hatte, lokal auch nicht so richtig überzeugen konnte.

Fazit: Projekt “Jörg kommt ohne Tageszeitung aus – das Netz bietet ja alles” wurde gestartet.

Jetzt, knapp 2,5 Jahre, und ca. 10 Testkäufe der Rheinzeitung (Printvariante) später erkläre ich das Projekt für gescheitert. Die RZ muss (mangels Alternativen, was das Lokalgeschehen angeht) an den Start. Nun gut – mal auf der RZ-Seite umsehen. Ahhh – Abo’s! Aber wo sind die Preise? Dank des schnellen und unkomplizierten Supports des RZ-SocialMedia-Teams (Danke an dieser Stelle!) via Twitter hatte ich die auch schnell gefunden und bin dabei über das “Digitalabo” gestolpert.

Digitalabo? Klingt spannend!

Erster Begeisterung folgte schnell die Ernüchterung. Das DigitalAbo des Blatts ist nett gedacht, aber bescheiden umgesetzt. Man lädt eine “App” auf sein Tablet, und kann dann aus der Äpp heraus entweder “Demoausgaben” (zum Test reicht das), volle Tageszeitungen (In-App-Purchase) oder unter Angabe seiner Abo-Nummer die Zeitung aufs Tablett/Smartphone laden. Bis dahin alles fine. Nun, was erwarte ich von einer Digitalausgabe der Zeitung, und was wird mir tatsächlich geboten?

  1. Wenn die Zeitung schon digital vorliegt, wünsche ich mir, ähnlich RSS, ein Inhaltsverzeichnis, in dem ich schnell von Ressort zu Ressort (Politik, Wirtschaft, Kultur, Lokales, …) springen kann. Ist sogar rudimentär vorhanden – man muss allerdings erstmal auf die Idee kommen, das “Sternchen” oben rechts in der App (welches normalerweise für “Favoriten” o.ä. steht) anzuclicken. Leider war es das dann aber auch schon mit dem Inhaltsverzeichnis. Einen Index der Artikel sucht man vergebens. Ich meine: Hey, die Daten liegen doch vor. Stattdessen wird mir die Zeitung so präsentiert, als wenn ich sie in Papierform vor mir hätte, unnütze Animationen beim “Umblättern” incl. – Index: Fehlanzeige
  2. (Internet-)Links. In der gedruckten, wie in der Digitalen Ausgabe wird oft am Ende eines Artikels auf einen weiterführenden Artikel im Netz verwiesen. So lange man sich in der “Übersichtsanzeige” (in der selbst auf einem Tablet die Artikel nicht lesbar – weil zu klein – sind), kann man bei einigen Artikeln auch auf einen “roten Pfeil” clicken, und den Links folgen. Klappt aber auch nur bei diesen roten Pfeilen. Links die im Fliesstext auftauchen, lassen sich leider nur per mühsamen Copy&Paste manuell öffnen. Funktionen, wie sie bspw. in Feedreadern benutzt werden (Open link in Browser / Twitter link / etc.): Fehlanzeige. Im “Einzel-Lesemodus” (siehe Punkt 3) tut das schon etwas besse – zumindest werden dort Links als solche erkannt, und auch angezeigt.
  3. Printlayout auf eine Onlineausgabe zu übertragen, halte ich gelinde gesagt für mutig. Das klappt, wenn man Mehrwert bietet (Die Wired sei hier lobenswert erwähnt), aber nicht wenn man das Ding einfach 1:1 auf das Lesedevice legt. “Doppeltap” auf einen Artikel funktioniert nur teilweise, da sich der Textfluss stoisch am Printlayout orientiert. Mit anderen Worten: Fliesstext um ein Bild herum ist auch in der App weiterhin Fliesstext um ein Bild herum. So etwas unterbricht den Lesefluss, und damit die Freude am Blatt. Merke gerade: Wenn man keinen Doppeltap, sondern einen einfachen Click macht, poppt eine Art Reader auf, in dem das Lesen schon besser funktioniert. Ein “Schliessen” sucht man vergeblich – geschlossen wird der Reader, in dem man nochmals tappt (ich tappe da eher in die Falle, denn wenn das Ding scrollt, tappt man ja auch einmal, um es anzuhalten – hier wird dann in der App der Artikel geschlossen) Intuitiv geht aber anders. Diese Reader-Nummer funktioniert übrigens nur, wenn man nicht schon vorher im Layout herumgezoomt hat. Schade.
  4. Last but not least: Warum gibts das ganze nicht als ePub oder im freundlichen RSS-Format?

Fazit für mich: Die Papierausgabe werde ich zunächst mal abbonieren. Bei der Digitalausgabe ist die Rheinzeitung auf einem guten Weg, aber es gibt noch sehr viel zu tun, bis das Teil rund ist. Kostenpunkt des “Maschinen”-Abos: ca. 3 Euro monatlich zusätzlich zum normalen Totholz-Abo. Das ist fair. Aufgrund der o.g. Punkte bleibts dann für mich auch erstmal beim Papierabo.

Tagged with:
Mai 19

Eigentlich hab ich mich ja immer gewehrt den schönen “Experimentiercomputer” RaspberryPi zum “MediaCenter” zu degradieren. Andererseits hatte ich ein wenig Not hier. Bis vor 2 Jahren hatte ich ‘nen MacMini am TV-Gerät. Der ist dann irgendwann rausgeflogen und musste einem AppleTV (3) weichen.

Dummerweise kann das ATV3 sich nur bei Apple bedienen. Sprich alle fein säuberlich gekauften Filme und MP3s auf dem Fileserver konnten nur umständlich abgespielt werden, in dem immer irgendein olles iTunes auf dem Arbeitsplatzrechner lief. Zeit das zu ändern. Also Pi bestellt und RaspBMC draufgeknallt. Erster Begeisterung folgte direkt die Ernüchterung. Zu langsam, und zu buggy. Wenn bspw. der Pi hängt, hilft nur noch Strom raus und wieder rein, was die SD-Karte mit “Could not mount Root-FS” oder so quittiert. Blöd alles. Doch es gibt eine Lösung für alles.

Ziel sollte es sein im Raspberry nur noch den Bootloader auf der SD-Karte zu haben (den braucht der leider, da der Pi kein Bootp/PXE beherrscht), und diese am besten auch noch mit ‘nem Schreibschutz zu versehen. Gesagt getan. Was ist also notwendig?

  • 2GB SD-Karte fürs erste Setup
  • 32MB SD-Karte für den späteren Betrieb
  • Fileserver mit NFS-fähigkeit
  • Irgend ‘ne Linux-Büchse um die Karten entsprechend zu präparieren (Mit OSX oder Windows ist das echt Schmerz)

Vorgehensweise:

  1. RaspBMC ganz normal auf der 2GB Karte installieren (dd if=[imagefile] of=/dev/sdz bsize=16M) wobei sdz das SD-Kartendevice ist.
  2. Rasbperry ans Netz hängen und booten/Erstkonfig durchführen.
  3. Während der konfiguriert setzen wir den NFS-Server auf (gehe mal davon aus, dass die Grundlagen zu NFS dem Leser bekannt sind)
    1. Directory, in dem das Rasberry-Rootfs wohnen soll erstellen (mkdir /rasberryrootfs)
    2. Directory in die /etc/exports aufnehmen:/rasberryrootfs          IP.VOM.RASP.BERRY(rw,async,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534,insecure)
    3. exportfs -rv aufrufen
  4. Wenn Raspberry fertig, dann:
    1. per ssh einloggen (pi/raspberry)
    2. xbmc stoppen: sudo sudo initctl xbmc stop
    3. NFS-Filesystem mounten: mount IP.VOM.FILE.SERVER:/raspberryrootfs /mnt
    4. Kram umkopieren (sudo cp -axv /. /mnt/.
      sudo cp -axv /dev/. /mnt/dev/.
      )
    5. In der /mnt/etc/fstab folgende Zeile AUSkommentieren (also ein “#” davorschreiben):
      /dev/mmcblk0p2  /               ext4    defaults,noatime 0       0
    6. NFS-Filesystem umounten (sudo umount /mnt)
    7. Raspberry herunterfahren (sudo init 0)
    8. Karte entnehmen und in die o.g. Linuxbüchse stecken, sowie das vfat-Filesystem der Karte mounten.
    9. Kram aus dem vfat-Filesystem irgend wo auf die Platte kopieren.
    10. Karte umounten / Brauchen wir jetzt nicht mehr.
    11. Jetzt die 32MB Karte in die o.g. Linuxbüchse stecken und ein vfat-Dateisystem auf einer Primären Partition vom Typ “MSDOS/VFAT” erstellen.
    12. Den Krempel aus 9 auf die Karte kopieren.
    13. Jetzt noch die Datei cmdline.txt auf der 32MB Karte wie folgt anpassen:
      dwc_otg.lpm_enable=0 root=/dev/nfs rootfstype=nfs nfsroot=192.168.1.100:/raspberryrootfs,v3 ip=192.168.1.49:192.168.1.1:192.168.1.0:255.255.255.0:rpi:eth0:off smsc95xx.turbo_mode=N noatime rootwait loglevel=1 zram.num_devices=2
      Wobei folgendes gilt:

      1. Anstelle der 192.168.1.49 die IP des Raspberrys eintragen
      2. Anstelle der 192.168.1.100 die IP des NFS-Servers eintragen
      3. Anstelle der 192.168.1.1 die IP des Routers eintragen
      4. Anstelle der 192.168.1.0 die Netztadresse des Heimnetzes eintragen
    14. Karte umounten
    15. In den Pi stecken, und freuen :)

Wenn alles klappt, noch den nupsi für den Schreibschutz an der 32MB Karte aktivieren, und dann geht das Filesystem dort garantiert nicht mehr kaputt. Noch ein paar Tipps/Anmerkungen zur Performance von dem XBMC:

  • Alle überflüssigen Visualisierung sollten (so schick sie auch sein mögen) deaktiviert werden.
  • Krimskrams wie Samba-Server, Avahi, ftp auf dem Pi auch deaktivieren.

Viel Spass damit.

Tagged with:
Dez 13

Seit 4 Tagen bin ich den lästigen reconnect der Telekom los. Keine Zwangstrennung mehr nach 24h. Yes !

Wie das geht ? Ziemlich simpel. Man wechselt den Tarif beim rosa Riesen. “Call & Surf Comfort IP” heisst das Ding. Einher mit dem Tarif geht ein SIP-Account, über den man von dort per VoIP erreichbar ist (Besonderheiten der Telekom inclusive – verfasse dazu noch einen Blogeintrag). Aufgrund dessen fällt dann nämlich die Zwangstrennung weg. Nun gut, genug Marketinggedönse. Zum eigentlichen: Wie ich ja schon gebloggt habe, bin ich zufriedener sixxs Kunde, was meine ipv6-Welt angeht. Schön statische Prefixe, soviel /56er subnetze (statisch!) wie man haben will. Eigentlich genau das, was man als Betreiber von ein paar unwichtigen Diensten im Netz so benötigt.

Ganz gegensätzlich ipv6 bei der Telekom. Man bekommt ein /64er /56er Prefix, und das ist zu allem übel auch noch dynamisch. Sprich bei jedem Reconnect (der zwar, s.o., nur noch alle Jubelmonate kommt) gibts wieder einen neuen Prefix. Ist jetzt nicht der ultimative Brüller, denn der Sinn von ipv6 war ja genau dieses Dilemma zu lösen. – Wir erinnern uns: in den 90ern gab es die dynamische Vergabe nur, weil die ganzen ISPs mehr Kunden als ipv4-Addressen hatten – also mit ipv6 eigentlich kein Grund mehr für sowas. Die Gründe mögen vielfältig sein. Paranoide Menschen sind der Meinung, dass man mit dyn.IP’s einen Datenschutzzugewinn hat (Bullshit !), die Telekom meint, dass man statische IPs besser hochpreisig vermarkten sollte, und so on.

Nun, was tun mit dem schwankenden ipv6-Prefix, bei dem man nichtmal ‘ne DNS-Reversedelegation setzen kann ? Folgende Dinge sind mir so eingefallen:

  • Testen des sixxs.net oder HurricaneElectric-Tunnels von “aussen” :)
  • Backup-Routing, falls sixxs/HE mal down sind (wobei das vermutlich tricky wird)
  • Den “User” Kram aus dem Heimnetz über das /64 /56er routen. Alle Dienste über die statischen Netze

Naja, wie auch immer man sich entscheidet, das ganze unter linux auf einem “Selbstbaurouter” einzubinden bedarf ein wenig Bastelei. Was haben wir ?

  • Ein Standard DSL-Modem (Speedport 221) / kein Router (an dieser Stelle sei erwähnt, dass, entgegen irgendwelchen Aussagen, ein Modem vollkommen ausreicht (sowohl für VoIP, als auch für Entertain, sowie für ipv6) – “pppoe-Passthrough” in einem Speedportrouter kann funktionieren, muss es aber nicht. Je puristischer, desto besser.
  • Ein lauffähiges Linux, mit dem wir schon in der Vergangenheit pppoe gemacht haben und welches die öffentliche ipv4 bekommt. – Ich nehm’ hier Debian. Ein vorkonfektioniertes pfSense, ipcop, und wie die Distributionen so alle heissen, sollte auch gehen.
  • pppoe über rp-pppoe wie gewohnt. Hier in die /etc/ppp/options ein “+ipv6″ eintragen

Jetzt gibts beim Reconnect zusätzlich zur ipv4 eine ipv6-LinkLocal-Adresse. Mit der kann man noch nicht so viel anfangen, denn die ist ja linklocal und damit nicht gerouted. An dieser Stelle hab ich echt am längsten (im wahrsten Sinne des Wortes) gehangen. Wie kommt man nun an die ipv6-IP ? Im Normalfall über zwei Wege. Entweder Router-Advertising, oder DHCPv6 (wobei letzteres nur bedingt empfehlenswert ist). Die Telekom announced die Prefixe per RA. Und zwar in 10 Minuten Intervallen. Was zum debuggen recht schmerzhaft ist (immer 10min. warten). Um dem geneigten Leser die Wartezeit (und das debuggen) zu verkürzen hier die Einstellungen die man am ppp0 vornehmen sollte (am besten in irgendein /etc/ppp/ip-up.d/file zur Firewall packen):

echo 0 > /proc/sys/net/ipv6/conf/ppp0/forwarding
echo 1 > /proc/sys/net/ipv6/conf/ppp0/autoconf 
									

Sodann wirds beim nächsten RA (wie gesagt: Nur alle 10 min. !) eine öffentliche IP geben, die dann über die, oben erwähnte, LinkLocal-Adresse raus/reingerouted wird. Routen sollten automatisch gesetzt werden.

ip6tables kann man dann nach gusto anpassen. Bei mir bekommt nur der “router” die Dynamische-V6, da dort der (Zwangs-)Proxy mit adblocker & Co. läuft – reicht dort also. Wer das v6 im LAN nutzen möchte, dem sei der radvd (Router Advertising Daemon) ans Herz gelegt.

Ein Grundsetup an ip6tables-Rules finden wir hier:

/sbin/ip6tables -P INPUT DROP
/sbin/ip6tables -A INPUT -i lo -j ACCEPT              #allow everything out
/sbin/ip6tables -A INPUT -p icmpv6 -j ACCEPT
/sbin/ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/ip6tables -A INPUT -i $LAN -j ACCEPT       # allow GRE
/sbin/ip6tables -A INPUT -i $WAN -j LOG --log-prefix "INP6:End "
/sbin/ip6tables -A INPUT -i $WAN -j DROP

### OUTPUT
### (connections with the router as source)
echo "BASE OUTPUT"

  # base case
/sbin/ip6tables -A OUTPUT -o $WAN -j ACCEPT              #allow everything out
/sbin/ip6tables -A OUTPUT -o $LAN -j ACCEPT              #allow everything out
									

Happy v6ing !

 

[Update 26.02.2014] Es gibt ein /56er Prefix bei der Telekom, keine /64er – löst das Problem aber nicht. Danke an den Hinweisgeber.

Tagged with:
Sep 24

m4s0n501

IN-Listen lassen sich bei einer Oracle leider nicht als Bind-Var übergeben. Wirklich nicht ? Doch, geht mit Trick:

SELECT   REGEXP_SUBSTR (:txt,'[^,]+',1,LEVEL) as token
   FROM   dual
   CONNECT BY   LEVEL <= LENGTH (:txt) - LENGTH (REPLACE (:txt, ',', '')) + 1
									

Durch den RegEx und das Connect by Prior macht die ORACLE eine Tabelle aus jedem Element, welches in :txt übergeben wird. Getrennt wird per “,”. Einsetzen lässt sich das ganze dann wie folgt:

SELECT * FROM emp WHERE emp_id IN (SELECT   REGEXP_SUBSTR (:txt,'[^,]+',1,LEVEL) as token
   FROM   dual
   CONNECT BY   LEVEL <= LENGTH (:txt) - LENGTH (REPLACE (:txt, ',', '')) + 1)
									

Nicht schön, aber funktional; Und am performantesten von all’ den Workarounds, die ich bisher so gesehen habe.

Tagged with:
Jul 18

Es ist, gefühlt, 6 Jahre her, dass ich so richtig Urlaub gemacht habe (Also so ohne, dass man zwischendurch immer wieder für den Kunden etwas tun muss, und einfach nur Ruhe hat). Umso mehr haben wir uns alle gefreut, als es Anfang Juli an die Müritz in Mecklenburg-Vorpommern ging. Genauer gesagt nach “Alt-Schwerin” am Plauer See. Jetzt ist Mecklenburg-Vorpommern nicht gerade mit exorbitanter Infrastruktur gesegnet. Auf der einen Seite schön (sehr ruhig), auf der anderen sind es Meilenweite Entfernungen zum nächsten Ort.

Um diese Distanzen zu überbrücken, hatten wir uns eigentlich fest vorgenommen die Fahrräder auf einem Fahrradgepäckträger mitzunehmen. Als ich dann allerdings nachgerechnet habe, und auf knapp 700km Anreise gekommen bin, haben wir das ganz schnell wieder verworfen. Mit dem Auto kommt man genau so gut vorwärts. An Freizeitaktivitäten wird echt viel geboten. Um nur ein paar Dinge aufzulisten:

  • Panzer fahren (Alte NVA-Kaserne)
  • Auf einer stillgelegten Reichsbahnstrecke kann man zu dritt mit einer Draisine und Muskelkraft die Landschaft geniessen.
  • Museen sind eigentlich nicht so meins. Aber das Müritzeum in Waren, kann wirklich was. Interaktive Exponate rund um die Natur und Entstehung der Seenplatte…
  • Bootstour mit einem “Passagierdampfer” über 5 Seen, incl. zwischendurch immer wieder dezent eingestreuten Informationen (war wirklich dezent).
  • In Plau am See gibt es Valk-Jollen zu mieten(Ein wenig Segelerfahrung und ‘nen SBF Binnen, mindestens aber SBF-See  ist Voraussetzung). Haben wir dann auch gleich mal gemacht. Herrlich. Kaum Motorboote unterwegs. Schöne lange Strecken, sodass es von einem Manöver zum nächsten schonmal durchaus ‘ne Stunde dauern kann. Mit der Valk kann man sicher keinen Preis gewinnen, dafür ist das Ding gutmütig wie nur sonstwas. Leider hatten die Boote keinen Verklicker, dafür aber ein paar Bändsel. Und wenn man sich nicht allzu blöd anstellt, kann man daraus ja auch ablesen ob die Segelstellung richtig ist. Wer übrigens ein Boot sein Eigen nennt, kann sogar mit diesem Anreisen und bekommt einen Liegeplatz direkt vorm Ferienhaus.

    Valk Jolle auf dem Plauer See

  • Wer auf alte Ost-Dörfer steht, kommt in der Gegend voll auf seine Kosten. Kopfsteinpflaster, soweit das Auge reicht. Erwähnt werden sollte hier: Güstrow, Schwerin (Sitz des Landesparlaments McPomm mit malerischem Landtag) und natürlich Malchow, welches so der erste Anlaufpunkt ist wenn man Lebensmittel & Co. benötigt ;)

Was die Unterkunft angeht. Besser hätte man es gar nicht treffen können. Wir hatten ein Ferienhaus: 8m bis zum See, bestens ausgestattet, Sonnenuntergänge von denen man selbst in der Eifel träumt, DSL2000 am Start und massivst Sonne.

Dive into the deep sea
Das Bild ist direkt von einem kleinen Weg vorm Ferienhaus aus aufgenommen. Schöner geht doch wohl kaum, oder ?

Des weiteren kann man “Alt-Schwerin” auch prima als Basecamp zur weiteren Erkundung des Bevölkerungsärmsten Bundeslands (von Bremen und dem Saarland mal abgesehen) nutzen. Nach Schwerin sind es 70km, nach Rostock ca. 100 und wer mal auf Rügen schauen will (definitiv eine Reise wert !) muss mit ca. 2,5h Fahrt rechnen. Ich denke mal, zu Rügen werd’ ich noch einen Extra-BlogPost verfassen. Alles in allem war der Urlaub so genial, dass ich gar nicht drum herum komme diese schöne Gegen zu plaggen. Wer Interesse an Adressen o.ä. hat, möge sich hier per Kommentar verewigen.

Weitere Impressionen gibts übrigens im Flickr Stream meiner werten Gattin, oder in meinem ;)

Tagged with:
Jun 23

Die Konfig hier zu Haus sagt, gehe über den Proxy – egal was passiert. Per iptables ist es den Workstations verboten, direkte HTTP-Requests nach draussen abzusetzen. Die werden einfach gedroppt. Damit man jedoch nicht bei jedem neuen Client erst den Proxy eintragen muss, gibt es so schöne Erfindungen wie wpad.dat (aka proxy.pac).

Der DHCP Server im Netz announced also, bei Vergabe einer ip, gleich die URL fuer die Proxy-Autoconf mit. In der Regel klappt das auch alles super. Hätte nicht jeder Browserhersteller wieder seinen eigenen Kram gebastelt. So interpretiert der Safari auf dem Mac diverse Dinge anders als der Chrome oder der IE. Eine schöne Matrix, mit dem was geht, und was nicht geht, gibt es bspw. bei pacwpad.com.

Die Herausforderung bestand/besteht am Ende darin, den Browsern zu sagen: Hey, du willst was im LAN, dann brauchst Du den Proxy nicht zu fragen. Ansonsten bitte Proxy nehmen. Mit ipv4 kein Thema. Bei ipv6 verschluckt sich der Safari jedoch massivst.

In der folgenden Config bin ich nun soweit, dass Chrome brav das macht was er soll, Safari jedoch bei jeglichen (auch LAN) ipv6-only Websites immer über den Proxy geht. Das liegt daran, dass der Safari scheinbar die javascript-Funktion “dnsResolveEx” nicht kennt. Ohne try/exception macht der immer einen auf “direct” bei ipv6. Mit diesem Konstrukt geht er zumindest immer auf den Proxy. Bin mal gespannt, wie lange es dauert bis sich die Browserhersteller da geeinigt haben…

Hier also die Config:

  • LANv4 ist 10.0.0.0/24
  • LANv6 ist 2001:999:999:8888/64

function FindProxyForURL(url, host)
{
        if (isInNet(host, "10.0.0.0", "255.255.255.0")) { // ipv4 im LAN ? Dann direct
                return "DIRECT";
        }
        if (host.substring(0, 4) == "127.") { // Localhost ? dann DIRECT
                return "DIRECT";
        }
        if (host.substring(0,16) == "2001:999:999:8888") { // IPv6 Adresse in den Browser eingegeben, und die ist im LAN ? Dann DIRECT
                return "DIRECT";
        }
        try {
            var resolved_ip = dnsResolveEx(host);
            if (resolved_ip.indexOf("2001:999:999:8888")>-1 ) { // Hostname löst auf eine IPv6 auf, die im LAN ist ? Dann DIRECT
                    return "DIRECT";
            }
        } catch(e) { // Funktion "dnsResolveEx" nicht vorhanden ? Dann Fallback proxy
            return "PROXY 10.0.0.2:3128";
        } 
        return "PROXY 10.0.0.2:3128"; // Default: Proxy
}

									

Update: Es empfiehlt sich anstelle der IP (10.0.0.2:3128) den FQDN des Proxies einzutragen. Einige Geräte machen scheinbar einen lookup bevor sie den Proxy fragen. Wenn beim lookup eine V6 Adresse herauskommt, dann läuft die wpad.dat ins leere, da kein V6-Proxy gefunden wird. Wichtig: der FQDN des Proxies sollte sowohl über einen V4-Eintrag (A), als auch über einen V6-Eintrag (AAAA) verfügen, und auch zusätzlich auf dem V6-Port lauschen…

Tagged with:
Jun 17

So, es ist vollbracht. Die ganzen Consumer-Provider in good ‘ol Germany wollen ja irgendwie nicht so richtig mit ipv6 an den Start kommen. Also habe ich mal selbst Hand angelegt. Einen Provider hat man schnell gefunden. Ich habe mich für sixxs.net entschieden.

Bei sixxs.net bekommt man zunächst einen /64er Block für lau zugewiesen, den man hinterher auf /48 upgraden kann (Vorraussetzung: der 64er Tunnel läuft eine Woche durch / Downtimes, bspw. zum basteln, sind nicht tragisch). Einfach anmelden, “aiccu” herunterladen, konfigurieren, starten und glücklich sein. Achtung: Aiccu / sixxs.net prüft die Systemzeit – Ein NTP-Client auf dem lokalen Endpunkt hilft da ungemein !

Das 48er-Subnet benötigt man aber nicht wirklich für den Heimgebrauch. Mit dem 64er kann man die restlichen 2^64 Adressen munter im Netz verteilen. Genau da war Anfangs auch mein Denkfehler. Mir war nicht aufgefallen, dass sixxs.net ein Transfernetz zur Vefügung stellt, durch das dass /64er gerouted werden kann. Konkret sieht das ganze nach dem ersten Start wie folgt aus:

  • PtP-Adresse (Da gehts also zu sixxs): 2001:6f8:100:fea::1/128 (Die beiden :: sind die Platzhalter für gaaanz viele Nullen – ausgeschrieben sähe das ganze so aus: 2001:6f8:100:fea:0000:0000:0000:1/128)
  • Lokale Adresse des ersten “ipv6″-Interfaces: 2001:6f8:100:fea::2/64
  • Und jetzt wird’s spannend. Im Webinterface bei sixxs.net kann man sehen, dass das zur Verfügung stehende Netz 2001:6f8:100:dfea::/64 lautet (Man beachte das “d” bei Octet 7)

Mit dem dfea-Netz (die Adressen sind für den Blogeintrag gefaked) können wir nun intern loslurchen und die Rechner ausstatten. Im simpelsten Falle installiert man sich den radvd (Router Advertising Daemon) und konfiguriert sowie startet ihn. Der verteilt die Dinger dann im LAN. Achtung: Dem LAN-Interface muss man selbst eine (v6-)IP aus dem dfea-Netz verpassen (/etc/network/interfaces) – das macht der radvd nicht. Jetzt noch das ipv6-Fowarding enablen (echo 1 >/proc/sys/net/ipv6/conf/all/forwarding) und schon können alle anderen Rechner per ipv6 mit der Welt in Verbindung treten (oder auch angesprochen werden !!)

Was uns zu einem kleinen Schönheitsfehler bringt. Ich will ipv6, weil ich das genNATte und diese ewige dynamische IP-Vergabe leid bin. Dummerweise vergibt der radvd die IP’s aber höchstdynamisch. Statisch verfügbar wäre in diesem Szenario also allenfalls der Router. Schuld (- Die Diskussion will ich hier nicht führen -) sind die sog. “privacy extensions” die irgendwelche paranoiden Mitmenschen entworfen haben. Ich war schon bei v4 kein Freund von “Würfel”-DHCP. Ganz abgesehen davon möchte ICH, und nicht irgendein Billo-Router regeln, wer wann wie worüber ins Netz geht. Bei IP’s die man nicht kennt, ist das ein grausames Unterfangen.

Jetzt gibt es zwei Möglichkeiten aus dem Dilemma herauszukommen.

  1. DHCP-V6 aufsetzen (hab ich noch nicht ausprobiert) und die IP’s statisch den Mac-Adressen im LAN zuordnen.
  2. Den Servern händisch statische IP’s verpassen.
  3. Mischbetrieb aus 2 und radvd

Habe mich erstmal für Variante 3 entschieden. Also jeden Server abgrasen und eine IP aus dem dfea-Netz eintragen, Default(-v6-)Route setzen und testen. Die Arbeitsplatzrechner bekommen die IP’s per radvd, die Server sind statisch verdrahtet. Fein, funktioniert.

Jetzt kommt der fieseste Teil, an dem ich zwei Stunden versenkt habe:

Das ganze ist bei Debian nämlich leider nicht Bootfest, da Linux ganz jeck auf Route-Advertisments ist, und sich dort auch eine IP “ziehen”, wenn sie schon statisch eine abbekommen haben. Hier helft eine Kernel-Einstellung in /etc/sysctl.conf:

net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.default.autoconf=0

Die alleine macht aber auch noch nicht glücklich, da die sysctls beim booten eingelesen werden sollen. Zu diesem Zwecke linkt man sich die /etc/init.d/procps in die runtimelevel-Dirs (/etc/rcX.d/). Hilft auch noch nicht, weil: Die Einstellungen greifen nur, wenn auch das ipv6-Kernel Modul schon geladen ist – sonst laufen die ins leere :( Hierzu ipv6 in die /etc/modules eintragen. Anschliessend booten – et voila: Es läuft !

Jetzt fehlt eigentlich nur noch eins: Eine ordentliche Firewall mit Connection-Tracking. Gibts wohl demnächst mal einen Blogeintrag drüber. Soviel sei gesagt: Connectiontracking geht erst ab Kernel 2.6.26, redirect (bspw. für transparente Proxies) erst ab 2.6.36…

Somit wäre dieses Blog nun auch via ipv6 erreichbar !

Tagged with:
Apr 11

Das Kind hat doch derbe Defizite mit dem kleinen 1×1. Macht sich jetzt so richtig bemerkbar, weil im Unterricht Division mit REST durchgenommen wird. Nun habe ich allerdings wenig Lust, mir alle Nasenlang neue Aufgaben aus den Fingern zu saugen. Also mal flux ein Perl-Script geschrieben, welches die Ergebnisse gleich mitliefert. Auf Excel-Output hatte ich gerade keine Lust, sollte aber mit “Spreadsheet::WriteExcel” (gibts beim CPAN Ihres Vertrauens) auch kein Thema sein.

Das folgende Script wirft also 60 Aufgaben mit 60 Ergebnissen aus. Wenn man den Output (Tab-getrennt) in Excel guttenbergt (CopyPaste), dann hat man auf dem “linken” Blatt, bei einem 18er Font, die Aufgaben, und auf dem rechten Blatt die Ergebnisse. Die machen es dann etwas leichter, den Kram den der Nachwuchs da hingepinselt hat, zu kontrollieren.

#!/usr/bin/perl
my $i=100;
my @erg,@aufg;
my $sollaufgaben=60;
while ($aufgaben<$sollaufgaben) {
  $i++;
  my $a=int(rand($i)%100);
  my $b=int(rand($i)%10);
  $b=1 if int($b)==0;
  $a=1 if int($a)==0;
  if (int($a/$b)<12) {
    $aufgaben++;
    push @aufg,$aufgaben."\t".$a."\t:\t".$b;
    push @erg,int($a/$b)." R ".($a % $b);
  }
}

for (my $i=0;$i<int($sollaufgaben/2);$i++) {
  print $aufg[$i*2]."\t\t".$aufg[$i*2+1]."\t\t";
  print $erg[$i*2]."\t".$erg[$i*2+1]."\n";
}
									

Tagged with:
Apr 01

Ein wenig herumgespielt mit dem Arduino habe ich ja schon bei dem Rauchmelder und dem BetaBrite-Display. Nicht gebloggt wurde bisher über die Funksteckdosen, die derweil per Webserver an- und ausgeschaltet werden können (Dank dieser Library).

Das müsste doch ansich auch mit dem Garagentoröffner funktionieren. Der tut doch auch auf 433,92MhZ. Letztes Jahr hatte ich mir bei Watterod einen 433er Sender und einen Empfänger, der bisher noch nicht zum Einsatz kam, geordert. Den Empfänger also fix mal startklar gemacht und an den Arduino angeflanscht. Allerdings ist das auslesen eines Senders, bei dem man keinen Schimmer hat welche Codierung genutzt wird, alles andere als trivial. Habe es dann ersteinmal mit der 433MhZ-Wetterstation von Tchibo probiert. Nach diversen Bitfriemeleien purzelte da dann auch tatsächlich die Temperatur heraus. Nungut – wir wollen ja einen Garagentoröffner simulieren, nicht Funkthemometer auslesen.

Aus dem ollen Code bin ich allerdings nicht schlau geworden. Hier mal ein oszillografierter Ausschnitt (due to security reasons :-) ) des Senders:

Man erkennt insgesamt 3 Arten von Pulsen – kurze, lange und mittlere (WTF ?). Habe erst auf einen Manchester-Code getippt. War mir dann aber irgendwie zu doof den zu analysieren. Also fix mit gtkwave die Pulslängen in ein Array gepackt, und fertig ist der Garagentoröffner per Arduino. Hier der (Draft !) des Sourcecodes mit dem Pulslängenarray (Negativ = LOW, Positiv = HIGH):

int garage[45]={  // Block 1 (21 x das gepulse)
               -16382,-16382, // Blocktrenner (2)
               // Block 2 (22 x das gepulse)
};


void setup() {
  pinMode(8,OUTPUT);
  pinMode(13,OUTPUT);
  digitalWrite(8,LOW);
}

void loop() {
  fire(garage,0);          // Garage Toggeln
  digitalWrite(8,LOW);
  digitalWrite(13,HIGH);
  delay(10000);
  digitalWrite(13,LOW);
}

void fire(int what[],int corr) {  // what: PositiverWert: Dauer des HIGHPulses, NegativerWert: Dauer des LowPulses; corr = Korrekturzeit pro Puls
    for (int i=0;i<26;i++) {
      int del=what[i]+corr;
      if (del>0) {
        digitalWrite(8,HIGH);
        delayMicroseconds(del);
      } else {
        del=del*(-1);
        digitalWrite(8,LOW);
        delayMicroseconds(del);
    }
  }
}
									

Fazit: Funktioniert perfekt. Wenn allerdings jemand ‘ne Ahnung hat welches Protokoll (bzw. Leitungscode) das sein könnte – immer her damit :-)

Update 22.08.2012 – Hier, auf Nachfrage, der Sourcecode für den Wetterstationsempfang. Das Ding ist echt nur ein “Proof of concept” – also alles andere als schön. Vom Aufbau her:

  • 433MhZ-Empfänger Serial-Out hängt an PIN2

-----------------------------------------------------------------------------
/*
  Liest dieses komische Tchibo-Wetterdingens per 433MhZ aus.
*/

boolean cnt=false;
int reader=0;
int cnter=0;
char reading[28];
void setup() {
  Serial.begin(9600);
  Serial.println("go!");
  pinMode(2, INPUT);
 // pinMode(13,OUTPUT);
}

void loop() {
    int LowVal=pulseIn(2,LOW);
    if (LowVal < 11000) {  // Kuezer als 1100ms Low ? Koennte unserer Sensor sein
      if (decodeTime(LowVal) == 'S') {  // Startsequenz ?
        cnt=true;                       // Dann go fuer die Sammlung
        cnter=0;                        // BitCounter auf 0
      }
      if ( (cnter<=27) && cnt && ((decodeTime(LowVal) == '0') || (decodeTime(LowVal)=='1'))) { // Stream noch nicht voll und ein Bit erkannt ?
//       Serial.print(decodeTime(LowVal)); 
       reading[cnter]=decodeTime(LowVal);  // Ab ins Array damit
       cnter=cnter+1;                      // Arraycounter fuers naechste Bit inkrementieren
      }
    } else {
      cnt=false;                           // Zurueck auf Anfang - nix fuer uns.
    }

      if ((cnter==28)) {                   // Arrray Voll ?
        Serial.print('/');
        Serial.print(reading);
        Serial.print('/');
        Serial.println(decodeTemp(reading));
        cnter=0;
        cnt=false; 
      }
  
}

float decodeTemp(String bitstream) {  // Versucht aus dem Bitstrom die Temp. zu berechnen
  int x=0;
  int chk=0;
  for (int i=16;i<24;i++) {      // Extrahiert das Byte zwischen Bit 16 und 24 und packt es als integer in "x"
    if (bitstream[i] == '1') {
      bitSet(x,(23-i));
    }
  }
  for (int i=4;i<15;i++) {      // Kenner aus den 3 Nibbles zwischen Bit 4 und 15 holen (koennte auch der Kanal sein ?)
    if (bitstream[i] == '1') {
      bitSet(chk,(14-i));
    }
  }
  if (chk != 136) {            // Kenner = 136 ? Dann ist es unserer Sensor !
    return(-999);              // Wenn nicht, dann -999 zurueck
  } else {
    return ((float)x/10);
  }
}

char decodeTime(int time){  // Wandelt die Pulse in Bits um.
  if (time > 1500 && time < 11000) { // passendes Signal (zwischen 150ms und 11000ms) ?
        if (time < 2500) {           // kleiner 250ms ? Dann LOW
          return '0';
        } 
        if (time < 5000 && time >3000) {  // Zwischen 500ms und 1000ms dann HIGH
          return '1';
        }
        if (time >8000) {                // Groesser 800ms dann Startsequenz !
          return 'S';
        }
  } else {
    return 'X';
  }  
}
									

Tagged with:
preload preload preload