Da ich gerade am basteln bin und nicht gleich was im Netz fand, hab ich es einfach ausprobiert. In einer PHP-Anwendung, die ich gegenwärtig verwalte, wird für jedes SELECT eine neue Verbindung per NewADOConnection aufgemacht, die danach wieder geschlossen wird. Das kann doch nicht effizient sein, dachte ich mir, und siehe, ist es auch nicht. Auf meinem Rechner 35 Sekunden für 100000 SELECTS mit jeweils neuer Verbindung, 8 Sekunden mit einer, die recyclet wird.
Linux erkennt USB Stick nicht automatisch oder nur beim ersten Einstecken
Filed in Allgemein, KDE, LinuxEs gibt auch andere Fehlerursachen und mit diesen andere Lösungen. Diese Fehler traten bei einem Kunden unter Debian Lenny auf. Normalerweise soll unter KDE ein Fenster aufgehen, wenn man einen USB-Stick einsteckt, dies passierte aber auf diesem Rechner nicht immer, vor allem nie beim zweiten Einstecken des gleichen Sticks.
Zur Fehlersuche hatte ich hal im Debug-Modus gestartet (/etc/init.d/hal stop; hald –daemon=no –verbose=yes), hier fanden sich als Hinweise:
...
blockdev.c:1294: scsi.type is unknown
blockdev.c:1473: Not adding device object
...
blockdev.c:970: Ignoring hotplug event - no parent
blockdev.c:1473: Not adding device object
...
Hiernach gesucht fand ich die Lösung in folgendem comp.freedesktop.hal thread über die polnische digipedia:
cat /etc/udev/rules.d/05-udev-early.rules
# sysfs is populated after the event is sent
ACTION=="add", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt"
Die Datei fehlte bei mir, in /etc/udev/rules.d fand sich auch keine Datei mit „ioerr_cnt“. Erstellen einer Datei mit diesem Inhalt (und natürlich Beenden des hal-Debug sowie /etc/init.d/hal start) löste beide Probleme.
CUPS Unable to encrypt connection – A TLS fatal alert has been received
Filed in AllgemeinDer Fehler trat auf in Verbindung von Firefox 9.01 unter WinXP mit CUPS 1.4.4-7 unter Debian Squeeze. Behoben habe ich ihn durch explizites Eintragen des Zertifikates in den Firefox, also die Datei /etc/cups/ssl/server.crt an einen Platz legen, auf den der Firefox zugreifen kann, z.B. Samba-Freigabe oder Webserver, und diese dann aufrufen. Bei der dann folgenden Frage die Nutzung als Webserver-Zertifikat erlauben.
Bei mir half:
Links und rechts an der Tonerkartusche sind kleine, runde Öffnungen, diese scheinen Sichtfenster zur Kontrolle des Tonerstandes zu sein. Überkleben mit schwarzem Klebeband ließ die Meldung verschwinden. Achtung: vielleicht geht hierbei aber der Drucker kaputt! Die Ausdrucke sind jetzt zwar schlecht, ich kann aber zumindest den einen wichtigen Ausdruck noch machen. Neuer Toner ist bestellt. 🙂
Der Drucker scheint also weder einen internen elektronischen noch einen mechanischen Hebel für den Füllstand zu haben, sondern einfach nachzusehen. Auf anderen Seiten wird das gleichzeitige Drücken von 1+7 oder 2+8 empfohlen, dies bietet aber nur die Möglichkeit den elektronischen Zähler für andere Verbrauchsmaterialien zurückzusetze. Macht man dies ohne wirklich die Komponente zu tauschen wird es meist auch nur schlechte Ausdrucke fabrizieren, vielleicht sogar den Drucker beschädigen. Auch das Abkleben könnte den Drucker beschädigen. Gut dahingegen ist: Nachbestellen wenn die Meldung dazu kommt!
Funktioniert hat es schließlich mit folgenden Einträgen:
sip.conf
[telekom-out]
type=friend
username=<Benutzername, wird z.B. zur Anmeldung im Kundencenter genutzt>
secret=<Kennwort, wie es zur Anmeldung im Kundencenter genutzt wird>
host=tel.t-online.de
fromdomain=tel.t-online.de
qualify=yes
canreinvite=no
allow = alaw
allow = g726
allow = gsm
allow = ulaw
dtmfmode=inband
insecure=invite
extensions.conf
exten => _XX.,1,Set(CALLERID(name)=<Tel.Nr.>
exten => _XX.,1,Set(CALLERID(num)=<Tel.Nr.>
exten => _XX.,n,Dial(SIP/${EXTEN}@telekom-out,30,tr)
In der extensions.conf kann man natürlich auch etwas mehr Funktionalität unterbringen, zum Beispiel mehrere Caller-ID:
exten => _XX.,1,Set(CALLERID(name)=${IF($[ ${SIPCHANINFO(peername)} = <Name aus sip.conf>] ? <Tel.Nr. 1> : <Tel.Nr. 2>)})
exten => _XX.,n,Set(CALLERID(num)=${IF($[ ${SIPCHANINFO(peername)} = <Name aus sip.conf>] ? <Tel.Nr. 1> : <Tel.Nr. 2>)})
exten => _XX.,n,Dial(SIP/${EXTEN}@telekom-out,30,tr)
Simone hatte die schöne Idee, es könne ein anglizismus sein (»dumb ass«), wird aber leider wohl nicht so sein. Eine Möglichkeit, die mir dann schon plausibler scheint, ist die Herkunft von »Dummbart«, aufgeführt in Grimms Wörterbuch. Die Affrizierung des /t/ und der Fortfall des /r/ müsste man anderweitig prüfen, ob dies so vorkam, vorstellbar ist es schon, zumal der Wortbestandteil »Bart« sicherlich schon lange zur falschen Herkunftsdeutung geführt hat, die dann aber logisch sinnlos scheinen musste.
Nach langem Suchen an der falschen Stelle habe ich endlich jemanden gefunden, der die Lösung hatte. Eine Sangoma FlexBRI B700, eine ISDN-Karte mit 4 S0 sowie 2 FXS/FXO, gab keine Caller ID nach draußen. Es lag nicht an den Konfigurationsdateien und meiner Unfähigkeit, es war ein Programmfehler im Treiber. Diesen hat dankenswerterweise Mathias Kaufmann bereits gefunden,allein, seine Seite war schwer zu finden. Darum verweise ich hier auf diese, damit sie der nächste vielleicht schneller findet (ich konnte die Seite nur aus dem Google-Cache aufrufen):
https://blog.stei.gr/sangoma-sendet-falsche-callerid
Darüberhinaus ist hier der kleine Patch, der den Fehler behebt.
--- chan_woomera.c 2011-02-17 18:07:36.000000000 +0100
+++ chan_woomera.c.new 2011-08-12 17:24:44.000000000 +0200
@@ -332,10 +332,10 @@
#if defined(AST18)
#define W_SUBCLASS_INT subclass.integer
#define W_SUBCLASS_CODEC subclass.codec
-#define W_CID_NAME caller.id.name.str
-#define W_CID_NAME_PRES caller.id.name.presentation
-#define W_CID_NUM caller.id.number.str
-#define W_CID_NUM_PRES caller.id.number.presentation
+#define W_CID_NAME connected.id.name.str
+#define W_CID_NAME_PRES connected.id.name.presentation
+#define W_CID_NUM connected.id.number.str
+#define W_CID_NUM_PRES connected.id.number.presentation
#define W_CID_FROM_RDNIS redirecting.from.number.str
#define W_CID_SET_FROM_RDNIS(self,_value) self->redirecting.from.number.str = _value; self->redirecting.from.number.valid=1
#else
Natürlich muss man dann beim Verbinden auch sagen, dass man Transaktionen möchte:
NewADOConnection('mysqlt');
statt
NewADOConnection('mysql');
Um Zertifikate unter Android 2.2 (auf einem HTC Desire Z) zu installieren kann man diese per OpenSSL in das PKCS12-Format umwandeln und sie im Wurzelverzeichnis auf der per USB-Storage angeschlossenen SD-Karte ablegen, dann ruft man unter Einstellungen->Sicherheit->Zertifikate Importieren auf, hier wird man nach dem Kennwort gefragt. Das Konvertieren geht mit folgendem Aufruf:
openssl pkcs12 -export -in htc.pem -inkey htc.key -out htc.p12 -name "HTC Desire Z"
Das CA-Zertifikat kann dann in das DER-Format umgewandelt, am gleichen Platz abgelegt und auf die gleiche Weise importiert werden, hier entfällt natürlich die Passwort-Abfrage beim Import. Der Aufruf zur Konvertierung:
openssl x509 -outform der -in mycacert.pem -out mycacert.crt
Gefunden habe ich diese Information hier und hier.
Garmin, Openstreetmap, mkgmap und java.lang.NullPointerException – Lösung
Filed in Linux, OpenStreetMapBeim Erstellen der gmapsupp.img Datei für ein Garmin Gerät mit dem Aufruf:
java -Xmx2000m -ea -jar /usr/share/mkgmap/mkgmap.jar --family-id=6622 --gmapsupp *.img vel66222.TYP
trat folgender Fehler auf:
Exception in thread "main" java.lang.NullPointerException
at uk.me.parabola.tdbfmt.OverviewMapBlock.setArea(OverviewMapBlock.java:100)
at uk.me.parabola.mkgmap.combiners.TdbBuilder.addToTdb(TdbBuilder.java:112)
at uk.me.parabola.mkgmap.combiners.TdbBuilder.onMapEnd(TdbBuilder.java:101)
at uk.me.parabola.mkgmap.main.Main.endOptions(Main.java:317)
at uk.me.parabola.mkgmap.CommandArgsReader.readArgs(CommandArgsReader.java:123)
at uk.me.parabola.mkgmap.main.Main.main(Main.java:100)
Nach einigem Suchen fand ich die Lösung hier, der Fehler war die vorhandene Datei osm66222_mdr.img, diese wurde durch den Aufruf mit *.img fälschlicherweise miterfasst, diese Datei umbenennen und dann geht es