Anpassungen für Firefox

1212 Tage zuvor

Firefox entwickelt sich immer mehr zu einer eierlegenden Wollmilchsau. Manchmal muss so viel Intelligenz aber in die Schranken verwiesen werden.

Hier einige Einstellungen, die ich verwende:

Nicht das erst beste Feld einfach mal ausfüllen durch den Passwort-Manager:
signon.autofillForms = false

maccus

,

---

pythonics

1256 Tage zuvor

Hier haben wir eine sture Auflistung von python-Idiomen, die man immer mal im Hinterkopf behalten sollte:

  • izip
  • for … else
  • dict.items / dict.iteritems
  • dict.setdefault / defaultdict
  • namedtuple
  • deque
  • @cache
  • with … contextmanager
  • generator vs. list comprehension: sum(i**2 for i in range(10))
maccus

,

---

PDF in Graustufen umwandeln

1490 Tage zuvor

Wie konvertiert man eine farbige PDF-Datei in Graustufen? Und zwar so, dass die Vektorinformationen erhalten bleiben?

Das geht mit GhostScript und dem folgenden Befehl:

gs -sOutputFile=gray.pdf -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH coloured.pdf

Ganz einfach, oder? :-)

maccus

,

---

numpy Array Views

1599 Tage zuvor

Mit der python Erweiterung numpy kann man große Datenmengen effizient verarbeiten. Manchmal wird soviel Effizienz zum Nachteil.

Normalerweise kopiert python Daten beim Slicen (hier reverse):

>>> a = range(10)
>>> b = a[::-1]
>>> b[0] = 55
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b
[55, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Bei numpy Arrays sieht das anders aus:

>>> import numpy as np
>>> a = np.array(range(10))
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = a[::-1]
>>> b[0] = 55
>>> a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 55])

Es wird also immer eine Referenz zu den Originaldaten erzeugt. Was aber tun, wenn man tatsächlich eine Kopie braucht? Dafür nutzt man den Plus-Operator:

>>> import numpy as np
>>> a = np.array(range(10))
>>> c = +a[::-1]
>>> c[0] = 55
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> c
array([55, 8, 7, 6, 5, 4, 3, 2, 1, 0])

Alternativ – und besser lesbar ist die Nutzung der copy-Methode:

>>> c = a[::-1].copy()

Besonders interessant wird dies, wenn Daten per ctypes an C-Bibliotheken übergeben werden. Die views enthalten nämlich keine passenden Flags:

>>> b.flags
C_CONTIGUOUS : False
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
>>> c.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False

maccus

,

---

sitecopy und SSL

2292 Tage zuvor

Das Programm sitecopy ist ganz nützlich, um z.B. Daten auf FTP- oder webdav-Servern zu synchronisieren.

Da auch SSL-Verschlüsselung unterstützt wird, sollte man diese auch verwenden. Was aber, wenn nach monatelangem Betrieb das Programm plötzlich nur noch sitecopy: … Server certificate verification failed: issuer is not trusted von sich gibt?

Hintergrund ist meist, dass der Zielserver ein neues SSL-Zertifikat erhalten hat. sitecopy speichert beim ersten Zugriff auf die Seite das Zertifikat und vergleicht es mit dem aktuellen.

Gibt es ein neues Zertifikat, so schlägt der Vergleich fehl und der Nutzer steht im Regen.

Lösung: Einfach das Vergleichszertifikat im Verzeichnis ~/.sitecopy/ löschen. Wenn eine Seite “upload” betroffen ist, dann heißt das Zertifikat upload.crt. Fertig.

maccus

,

Kommentare

---

« älter