Alle Beiträge von adlerweb

PHP mail(): Sonderzeichen im Betreff richtig Codieren

Na das ist mir noch nie aufgefallen: Offenbar ist die mail()-Funktion von PHP nicht in der Lage deutsche Sonderzeichen im Betreff korrekt zu verarbeiten. Die erste Meldung besagte, dass der Betreff bei einigen Providern verstümmelt ankommen würde. Der IT-Fluch schlug natürlich wieder zu: Sowohl mein Thunderbird als auch K9-Mail und Roundcude zeigten keinen Fehler. Dankenswerterweise brachte dann Amavis die Erleuchtung:

X-Amavis-Alert: BAD HEADER SECTION, Non-encoded 8-bit data (char C3 hex):
Subject: Testm\303\203\302\244il

Argument, so passt das nicht… In den Mailheadern ist das genünschte „ä“ einfach nur als UTF-8-„ä“ vorhanden – E-Mails sind aber üblicherweise nur 7 Bit… Um den Betreff korrekt zu versenden muss man den String vorab mit mb_mime_mimeheader in die richtige Form bringen:

mail('empfang@emfang.em', mb_encode_mimeheader('Testmäil', 'UTF-8', 'Q'), 'Text');

Gentoo-Upgrade: XML::Parser perl module is required for intltool

Uff… Updates schleifen lassen ist bei Rolling-Release-Distros ja immer ein Problem. Heute im Angebot: Das Gentoo-Upgrade eines Systems, welches etwa 4 Monate stand, verabschiedet sich bei nahezu allen Paketen mit folgender Meldung während „configure“:

XML::Parser perl module is required for intltool

Eine Neuinstallation von Perl und dem genannten XML-Modul brachte keine Besserung, auch unter @preserved… oder revdep-rebuild zeigte sich nichts passendes. Die Lösung ist einfacher als befürchtet: Der Befehl

perl-cleaner --reallyall

sucht alle betroffenen Pakete, welche noch Verweise auf ein altes Perl enthalten, und baut sie über portage neu. Bei mir kam es noch zu einer Kollision durch veraltete glib und qt-Pakete, da der emerge-Befehl aber bereits fertig zum kopieren bereitstand war die nötige Ergänzung kein wirkliches Problem – knapp 190 Pakete später funktioniert’s dann auch wieder mit dem Update.

Denon RC-1158 IR-Codes

Um einen AV-Receiver per Arduino zu steuern musste ich – mangels RS232 – die Fernbedienung emulieren. Um das zu bewerkstelligen benötigt man die entsprechenden IR-Codes. Bewaffnet mit IRMP – bzw. dessen Arduino-Umsetzung – habe ich mir die entsprechenden IR-Command-Codes der Fernbedienung notiert. Wers braucht: Viel Spaß.

DENON RC-1158 Mapping

Florian „adlerweb“ Knodt · 2014 · www.adlerweb.info
Powered by IRMP / IRMP4Android

Protokoll: DENON/Sharp · Address: 0x3254

       

StBy

   

On

0x4003

   

0x4002

       

Sleep

Dimmer

Status

Search

0x4344

0x4290

0x4280

0x43D7

       

BD

TUNER

BAND

MEMORY

0x42D1

0x42CF

0x43D0

0x4024

       

DVD

DOCK

SHIFT

MODE

0x42D0

0x42DC

0x43CE

0x43D3

       

TV

GAME

CH+

TuneUp

0x42D2

0x42D5

0x43CC

0x43CA

       

SAT/CBL

V.AUX

CH-

TuneDn

0x42D3

0x42D9

0x43CD

0x43CB

       

Q_CD

Q_BD

Q_GAME

Q_AUX

0x4124

0x4125

0x4126

0x4127

       

MENU

 

AUDIO ADJ

VolUp

0x4023

 

0x41C0

0x4170

       
 

Up

   
 

0x401B

   
       

Left

Enter

Right

 

0x401D

0x401F

0x401E

 
       
 

Down

   
 

0x401C

   
       

CH LEVEL

 

RETURN

VolDn

0x417A

 

0x4022

0x4171

       

NIGHT

RESTORER

TONE

MUTE

0x4222

0x4224

0x4196

0x4172

       

SURR_LEFT

SURR_RIGHT

DELAY-

DELAY+

0x414C

0x4150

0x426E

0x426D

       

IPOD_SKIP_L

IPOD_STOP

IPOD_PLAY

IPOD_SKIP_R

0x2005

0x2008

0x2001

0x2004

       

IPOD_REV

IPOD_REPEAT

IPOD_RANDOM

IPOD_FWD

0x2016

0x2011

0x2010

0x2015

       
       

rtl_fm: Frequenzanzeige im Scan-Modus

Kurzer QnD-Patch zwischendurch: Möchte man mit einem RTL_SDR mehrere Frequenzen mit wenig Verkehr im Auge behalten bietet es sich an rtl_fm im Scan-Modus zu nutzen. Hierbei klappert er alle angegebenen Frequenzen ab und bleibt bei erreichen einer einstellbaren Schwelle auf dem aktuellen Kanal stehen. Von der Funktion her ähnlich wie der automatische Sendersuchlauf moderner Radios nur mit dem unterschied, dass bei Signalverlust (aka. Gegenstelle sendet nicht mehr) der Scan weitergeht. Leider hat rtl_fm hier einen Nachteil: Man sieht nicht was er tut – zwar bekommt man das Signal, kann aber nicht wirklich feststellen von welcher Frequenz es stammte. Mit folgendem Patch wird das Tool um das Argument „-v“ ergänzt. Hiermit gibt der Scan-Modus erweiterte Meldungen über den Zustand aus, namentlich „Scan…“ wenn kein Signal vorhanden ist und „Tuned to 12345Hz“ wenn er sich auf ein Signal eingependelt hat. Die Ausgaben erfolgen über stderr und beeinträchtigen daher nicht den eigentlichen Audiostrom.

Disclaimer wie üblich: Ich bin nicht wirklich im C-Bereich unterwegs, der Code könnte möglicherweise Fehler enthalten welche euren Rechner in ein katzenfressendes Monster verwandeln.

Arch Linux: tmpfs-Bootfehler nach Systemd-Upgrade

War ja klar – gerade erst vom 30c3 zurück und schon die ersten Probleme: Auf meinem Hauptrechner hatte ich vor Abfahrt noch schnell ein Update gemacht, welches auch Systemd betraf. Bei jetzt erfolgtem, ersten Start nach dem Update hing sich das System im Bootvorgang auf:

timed out waiting for device tmpfs.device

Ursache war eine Performanceoptimierung meinerseits: /tmp liegt nicht auf einem Datenträger sondern per tmpfs im RAM. Offenbar war ich aber damals etwas zu schnell bei Copy&Paste, denn meine /etc/fstab-Zeile sah so aus:

tmpfs /tmp tmpfs defaults,nodev,nosuid 0 1

Die letzte 1 besagt, dass das System ein fsck, also Dateisystemcheck, beim Boot durchführen soll. Bisherige Systemd-Installationen ignorierten die Angabe, da tmpfs einerseits beim Boot leer ist und andererseits kein fsck-Befehl für dieses virtuelle Dateisystem existiert. Mit der neuen Version tritt obiger Fehler auf. Fix ist recht einfach: Per Boot-CD oder ohne init.d starten (init=/bin/bash als Kernel-Argument), die Root-Partition schreibbar mounten (mount -o rw /dev/sd** /mnt bzw mount -o remount,rw /) und in der /etc/fstab die letzte 1 der tmpfs-Zeile(n) gegen eine 0 ersetzen.

Linux auf Acer Aspire One ZG5: Kernel-Panic durch SD-Leser

Offenbar gibt es eine Regression in den letzten Linux-Kerneln(vermutlich 3.12.x): Auf oben genannten System kam es alle paar Minuten zu unerklärlichen Kernel-Panics. Im Trace war öfter die Rede vom sdhci-Modul, welches für die SD-Leser zuständig ist. Auslöser ist höchstwahrscheinlich der Slot an der linken Seite – die rechte Seite nutzt PCI-Hotplug und ist ohne Karte dem System nicht bekannt. Betroffen sind vermutlich beide Seiten, zwar ist der rechte durch PCI-Hotplug ohne Karte von System getrennt, jedoch werden beide Controller als „JMicron Technology Corp. Standard SD Host Controller“ erkannt.

Als Workaround kann man – bis der Fehler behoben ist – den SD-Card-Leser abschalten, hierzu wird folgendes Kernel-Argument genutzt:

modprobe.blacklist=sdhci,sdhci_pci

Im Fall von Grub2 auf Archlinux kann es z.B. in /etc/defaults/grub als GRUB_CMDLINE_LINUX hinterlegt werden. Logischerweise lassen sich bis der Fehler behoben ist keine SD-Karten im Gerät nutzen.

WordPress: Kategorien aus RSS-Feed ausschließen

Dank eines Hinweises von Jakob fand ich noch ein Problem auf dieser Seite, welches mit reclaim.fm zusammen hängt. Ich spiele (fast) alle meine Social-Media-Inhalte auch im Blog ein. Da sie in eigenen Kategorien landen lässt sich das Ganze recht einfach filtern: Alles aus dieser Ecke wird nicht als Blogpost angezeigt – dachte ich. Leider landeten die Einträge weiterhin im RSS-Feed, was natürlich nicht Sinn der Sache war.

Um die Änderungen halbwegs konsistent zu behalten sollte das Ganze vorzugsweise im Theme eingebracht werden. Dank web-kreation.com war der fehlende Tipp schnell ergoogled. Mit einer kleinen Änderung werden die Kategorien nur ausgeblendet wenn keine anderen Filter aktiv sind, so sollte imo nur der Hauptfeed von den Ausnahmen betroffen sein.

Hier der Code, welcher in die functions.php des Themes eingebracht werden muss:

function filter_social_rss($query) {
  if ($query->is_feed && $query->get('cat') == '' && $query->get('tag') == '') {
    $query->set('cat','-240,-241,-178,-242');
  }
  return $query;
}

add_filter('pre_get_posts','filter_social_rss');

MySQL-Fehler: XMBC/OpenELEC lässt keine Änderungen an der Filmdatenbank zu

Narf? Muss das sein? Beim automatischen Import meines neu sortierten TV-Aufnahmen-Speichers ist in XMBC bzw. OpenELEC so einiges nicht ganz da gelandet, wo es sollte. A Clockwork Orange von 2013? Guess not.

Keine große Sache, oder? Einfach manuell aktualisieren und den richtigen Eintrag auswählen, schon wird alles aktualisiert, so weit die Theorie. In der Praxis landete ich wieder auf der selben, falschen Detailansicht.

Schuld war meine MySQL-Datenbank, diese liegt – da ich mehrere XMBCs betreibe – auf einem zentralen Server. In der Log-Datei (/storage/.xbmc/temp/xbmc.log) fand sich folgende Zeile:

ERROR: SQL: Undefined MySQL error: Code (1548)
Query: delete from movie where idMovie=146
ERROR: DeleteMovie failed

Hm – strange, also auf in phpMyAdmin und nachgeschaut. Ein Film mit idMovie=146 existiert, so weit so gut, aber auch hier funktioniert der Delete nicht und vermeldet:

Cannot load from mysql.proc. The table is probably corrupted

Schuld sind die integrierten Trigger/Funktionen/… der XMBC-Datenbank in Kombination mit einem verpennten Update. Der MySQL-Server selbst wurde eine Version hochgezogen, die Datenbanken aber nicht aktualisiert. Ein einfaches

mysql_upgrade

(ggf. mit -uroot -p) bringt alles auf den neuesten Stand und die MediaDB kann wieder bearbeitet werden.

AC3-Dateien anhängen

OK, zugegeben, einfacher gehts nicht, aber da man das einfachste gerne Übersieht: AC3-Dateien (aka Audio nach A/52) haben – zumindest soweit ich sehe – alle nötigen Metadaten im Stream und nicht in am Dateianfang oder -ende, entsprechend können die Dateien einfach aneinander gehangen werden:

cat 1.ac3 2.ac3 3.ac3 > full.ac3