SciPy error: object has no attribute ‘decorate’

When using the linker cross reference table to graphviz dot file conversion script from https://balau82.wordpress.com/2013/11/24/analyzing-c-source-files-dependencies-in-a-program/, I get the error:

$ ./cref2dot.py
Traceback (most recent call last):
  File "./cref2dot.py", line 5, in 
    from networkx import MultiDiGraph, write_dot
  File "/usr/lib/python2.7/dist-packages/networkx/__init__.py", line 82, in 
    import networkx.linalg
  File "/usr/lib/python2.7/dist-packages/networkx/linalg/__init__.py", line 9, in 
    from networkx.linalg.algebraicconnectivity import *
  File "/usr/lib/python2.7/dist-packages/networkx/linalg/algebraicconnectivity.py", line 24, in 
    from scipy.sparse.linalg import eigsh, lobpcg
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/__init__.py", line 112, in 
    from .isolve import *
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/isolve/__init__.py", line 6, in 
    from .iterative import *
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/isolve/iterative.py", line 84, in 
    def bicg(A, b, x0=None, tol=1e-5, maxiter=None, xtype=None, M=None, callback=None):
  File "/usr/lib/python2.7/dist-packages/scipy/_lib/_threadsafety.py", line 59, in decorator
    return lock.decorate(func)
  File "/usr/lib/python2.7/dist-packages/scipy/_lib/_threadsafety.py", line 47, in decorate
    return scipy._lib.decorator.decorate(func, caller)
AttributeError: 'module' object has no attribute 'decorate'

The error occurs in scipy/_lib/_threadsafety.py at

...
    def decorate(self, func):
        def caller(func, *a, **kw):
            with self:
                return func(*a, **kw)
        return scipy._lib.decorator.decorate(func, caller)
...

It occurs with Debian package python-scipy, version 0.10.1+dfsg2-1, maintained by the Debian Python Modules Team, and can befixed by changing the above return statement to:

...
        return scipy._lib.decorator.decorator(caller, func)
...
Veröffentlicht unter Bug reports & Feature requests | Verschlagwortet mit , , , , , , | Hinterlasse einen Kommentar

Arduino Nano-Klon IDE-tauglich machen

Es gibt 5V-Arduinos zu kaufen, die über einen CH340G USB-Seriell-Wandler mit dem PC verbunden werden können. Beim ersten Versuch, direkt mit dem Arduino IDE ein Sketch einzuflashen, trat bei mir zunächst das folgende Problem auf:

avrdude: Version 6.1, compiled on Sep 11 2014 at 20:00:34
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch
...
         Using Port                    : /dev/ttyUSB5
         Using Programmer              : wiring
         Overriding Baud Rate          : 115200
avrdude: wiring_open(): releasing DTR/RTS
avrdude: wiring_open(): asserting DTR/RTS
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14] 
avrdude: ser_recv(): programmer is not responding
avrdude: stk500v2_ReceiveMessage(): timeout
...

Der Arduino hatte offenbar noch keinen Bootloader installiert.

Glücklicherweise gibt es das unten verlinkte Instructable. Bei dessen Anwendung kann es noch passieren, dass man (bei Verwendung eines Arduino Mega zur Programmierung) den folgenden Fehler bekommt:

avrdude: Device signature = 0x1e950f
avrdude: Expected signature for ATmega2560 is 1E 98 01
         Double check chip, or use -F to override this check.
avrdude: Send: Q [51]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 

avrdude done.  Thank you.

Das bedeutet, dass der einzuflashende Bootloader nicht für den erkannten Ziel-Chip gedacht ist. Man muss dann unter Tools -> Board den Arduino Nano auswählen und erneut “Bootloader installieren” klicken. Dann sollte sich die Ausgabe ändern zu:

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0F:
avrdude: load data lock data from input file 0x0F:
avrdude: input file 0x0F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | avrdude: Send: V [56] X [58] . [00] . [00] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [cf] 
avrdude: Recv: . [10] 
################################################## | 100% 0.02s

avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: Send: Q [51]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 

avrdude done.  Thank you.

Links

Veröffentlicht unter Informatik | Verschlagwortet mit , , , , , , | 1 Kommentar

Ein VHDL-Editor für Eclipse

Warum ist es eigentlich so schwierig, gute Editoren für Verilog und VHDL zu finden?
Warum kann ich nicht einfach ein Plugin in mein Eclipse installieren und los geht’s?

Die vielversprechendste Lösung in dieser Richtung scheint mir veditor zu sein.
Leider funktioniert das anscheinend nur mit Eclipse 3.2.1, was auf meinem Computer wiederum nicht funktioniert.

Kann ich das Plugin einfach auf Eclipse 4.x portieren? Mal probieren!
Erster Schritt: Das SVN-Repo als git-Repo klonen. Dafür braucht man eine Autoren-Datei:

(no author) = no_author <no_author@users.sf.net>
aghoras = aghoras <aghoras@users.sf.net>
tadashi-k = Kobayashi Tadashi <tadashi-k@users.sf.net>
gowinex = Gowinex Mayhem <none@users.sf.net>
ngken = Ken Horn <ngken@users.sf.net>
clonextop = HyungKi Jeong <clonextop@users.sf.net>
jan_o = Jan Ortner <jan_o@users.sf.net>
abusse = Anselm Busse <abusse@users.sf.net>
simonmartineau = Simon Martineau <simonmartineau@users.sf.net>

Danach kann man es mit Autoren-Mapping klonen:

$ git svn clone svn://svn.code.sf.net/p/veditor/code/trunk veditor --authors-file=authors.txt
Veröffentlicht unter FPGA, Informatik | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Geschlechter gibt es noch lange

Immer wieder lese ich in irgendwelchen, angeblich wissenschaftlichen Beiträgen, dass “das Y-Chromosom ja schwach wäre”, auf lange Sicht “Männer wohl aussterben würden” und es dann nur noch Frauen gäbe. Als studierter Biologe ärgern mich solche Beiträge, da sie wissenschaftlicher Unfug sind und lediglich zeigen, dass der Autor von Biologie keine Ahnung hatte, speziell von Evolution. Für alle nicht-Biologen möchte ich das kurz ausführen:

Es gibt auf der Erde, mit abzählbar vielen Ausnahmen bzw. Spezialfällen, keine mehrzelligen Spezies, deren Lebensspanne unbegrenzt wäre. Das hat nicht zuletzt damit zu tun, dass die Individuen, selbst wenn sie nicht durch äußere Umstände zu Tode kommen, z.B. von Feinden gefressen werden, im Laufe ihres Lebens einer zumindest teilweise irreversiblen, qualitativen Degradation (gemeinhin “Alterung”) unterworfen sind, angefangen bei der Erbsubstanz DNA, bis zur Gewebe- und Organ-Ebene. Um weiter existieren zu können, ist in regelmäßigen Abständen eine Verjüngung erforderlich, die in Form einer Erneuerung des gesamten Individuums durch ebenjene Fortpflanzung von statten geht.

Arten, die über keine Geschlechter verfügen, haben in aller Regel nur die Möglichkeit, sich durch Klonierungs-ähnliche Methoden fortzupflanzen. Hieraus resultiert ein Individuum, das mit dem Eltern-Tier weitgehend identisch ist, also ungefähr dieselbe Fitness aufweist. Solche Arten entwickeln sich nur weiter, indem durch natürliche Auslese die eher unfitteren Individuen zugrunde gehen, während die fitteren tendenziell eher überleben und sich weiter fortpflanzen.

Die Innovation, Geschlechter einzuführen, ist in diesem Kontext ein bedeutender, evolutionärer Fortschritt:
1. Die Möglichkeit, die Gen-Kombinationen in einem Individuum mit denen eines anderen zu rekombinieren, führt zu einer stärkeren Aufspreizung in der Häufigkeitsverteilung von fitteren und unfitteren Individuen in der Folgegeneration. In der Folge kann eine gezieltere Auslese stattfinden, die nach einer geringeren Anzahl von Generationsabfolgen in verbesserten Gen-Kombinationen resultiert, als das ohne die Rekombination bzw. Aufspreizung möglich wäre.
2. Einen Partner zur Fortpflanzung zu benötigen, impliziert als Zwischenschritt eine Partnersuche. Diese Suche als integraler Bestandteil des Fortpflanzungmodus aber ermächtigt das Individuum -im Gegensatz zu ausschließlich natürlichen Auslese-Mechanismen- seine Intelligenz für das Herbeiführen evolutionärer Anpassungen heranzuziehen. Durch Nutzung seiner Intelligenz kann es z.B. seine Umwelt einzuschätzen und einen in dieser konkreten Umwelt fitten Partner gezielt auszuwählen. Diese Involvierung von Intelligenz in evolutionäre Mechanismen zieht eine drastische Vergrößerung evolutionärer Dynamik sowie Verkürzung der für evolutionäre Anpassungen und Fortschritte erforderlichen Anzahl von Generationsabfolgen nach sich.

Man sieht also, aus vermeintlichen “Schwächen” von Geschlechts-Chromosomen auf das “Aussterben” von Geschlechtern zu schließen, ist Unfug.

Veröffentlicht unter Wissenschaft | Hinterlasse einen Kommentar

WS2811 bringt RGB LED-Streifen zum Leuchten

Heute wollte ich testen, ob der RGB-LED PWM Controller WS2811(S) sich ohne Weiteres von einem nRF51822 steuern lässt. Dazu habe ich, wie im Datenblatt empfohlen über einen Widerstand 12V angeschlossen und den GPIO-Pin des nRF51, der auf 3.3V läuft, direkt mit dem Dateneingang DIN verbunden. Als Leuchtquelle diente ein Abschnitt einer RGB-SMD-LED-Streifen-Rolle mit 3 LEDs.

Funktioniert hat es erstmal leider nicht. Zuerst war noch die Geschwindigkeit ein Problem, denn man muss den SET-Pin mit VDD verbinden, um auf 400kHz übertragen zu können. Schneller kann man zumindest per Bit-Banging mit dem nRF51 leider nicht übertragen.

Man sollte prüfen, ob der SPI-Master des nRF51 anstelle des Bitbanging genutzt werden kann – Das würde CPU-Resourcen sparen und das Timing genauer einhalten.

Am Ausgang des WS2811 kommen die überschüssigen Daten nicht heraus, wie man es von einem Schieberegister erwarten würde. Bei den angeschlossenen LEDs tut sich auch nichts. Das Timing halte ich vergleichsweise genau ein. Möglicherweise ist der Signalpegel nicht korrekt. Das Datenblatt sagt: mindestens mit 0.7*VDD übertragen. Wenn der Chip auch mit 3.3V funktioniert, sollte man ihn anstelle der 12V+Widerstands – Lösung lieber damit versorgen. Wenn das nicht funktioniert, muss der Signalpegel des nRF51-GPIOs gewandelt werden. Je nachdem, ob im Chip ein Pull-Up, Pull-Down oder kein Widerstand am Dateneingang DIN vorhanden ist, benötigt man hierfür mehr oder weniger Bauteile, auf jeden Fall wohl einen Transistor.

Nächste Schritte:

  • WS2811 mit 3.3V VDD testen, ob es dann schon funktioniert
  • wenn nicht, die Spannung am unverbundenen DIN messen, um interne Widerstände zu erkennen
  • und Transistor/Pegelwandler dazwischenschalten

Links:

Update 28. April 2016:
Wenn man den WS2811 mit 3.3V betreibt, dann klappt es auch mit der Kommunikation, die auf 3.3V-Pegel läuft und die angeschlossenen LEDs blinken, wie gewünscht.

Veröffentlicht unter Technik | Hinterlasse einen Kommentar

Elektrisch gesteuerter Flüssigkeitstransport

Das OpenDrop-Projekt begann vor etwa zwei Jahren damit, ein Gerät zu entwerfen, welches auf der Erkenntnis aufsetzt, dass kleine Flüssigkeitmengen mithilfe einer elektrischen Spannung bewegt werden können.

Dabei werden einige Millimeter große Elektroden so nebeneinander und/oder übereinander arrangiert, dass sich in ansteuerbarer Weise elektrische Felder räumlich gezielt anlegen lassen.

Der anziehende Effekt kommt zustande durch die Dielektrizität, die Polarisierung von Wasser-Molekülen, die sich im elektrischen Feld ausrichten, woraus eine anziehende Wirkung zwischen Flüssigkeit und Elektrode resultiert.

Die an die Elektroden angelegte Spannung kann Gleichspannung oder Wechselspannung sein. Der erforderliche Spannungshub liegt zwischen Hundert und Tausend Volt, 250 Volt sind praktikabel. Stromfluss wird vermieden, indem die Flüssigkeit galvanisch von der Elektrode isoliert wird.

Durch eine gesteuerte, zeitliche Abfolge von An- und Ausschalt-Vorgängen der Betriebsspannung an ausgewählte Elektroden, kann eine Flüssigkeit gezielt über eine Fläche bewegt werden. Sie lässt sich mit anderen Flüssigkeiten kombinieren und (wieder) aufteilen. So lassen sich beispielsweise unterschiedliche Edukte zu einer chemischen oder biochemischen Reaktion kombinieren, die automatisiert durchgeführt werden kann. Eine zusätzliche Temperatur-Steuerung erweitert das Repertoire durchführbarer (bio)chemischer Prozesse.

Die Flüssigkeit selbst bewegt sich in einem Gefäß, beispielsweise einem Zwischenraum zwischen zwei Flächen, die aus  Kunststoff, Glas, Metall, Holz oder anderem Material bestehen können. Auch runde Gefäße, wie Schläuche oder Kapillaren sind denkbar.

Die Elektroden können quadratisch, rechteckig, rund, aber grundsätzlich beliebig gestaltet sein.

Die Elektroden können planar sein. Insbesondere bei nicht-planaren Gefäßen, beispielsweise bei Kapillaren, kann es sich aber anbieten, sie nicht planar zu arrangieren, in diesem Beispiel um die Außenseite der Kapillare.

Die Bewegungsfähigkeit der Flüssigkeit wird verbessert, indem das Gefäß aus einem hydrophoben Material gefertig wird und/oder indem die an die Flüssigkeit angrenzende Oberfläche hydropob oder superhydrophob gestaltet wird. Dadurch kann u.a. die zum Betrieb erforderliche Spannung niedriger gewählt werden.

Die Bewegungsfähigkeit der Flüssigkeit wird auch verbessert, indem die Elektroden insbesondere an den Rändern so gestaltet werden, dass die Oberflächenspannung der Flüssigkeit durchbrochen wird, beispielsweise durch dreieckig oder rechteckig gezackte Elektroden-Ränder.

Veröffentlicht unter Wissenschaft | Hinterlasse einen Kommentar

Virtuell und physikalisch dieselbe Windows 7-Installation verwenden

Linux-Nutzer kommen leider zuweilen in die Verlegenheit, Windows-Systeme einsetzen zu müssen, weil eine bestimmte Software nur für Windows zur Verfügung steht. Glücklicherweise lässt sich für solche Zwecke Windows 7 in einer virtuellen Maschine (KVM) installieren, sodass man weiter unter Linux arbeiten kann und Windows sicher abgekapselt benutzen kann.

Diese Lösung hilft leider nicht bei Anwendungen, die zwingend OpenGL bzw. DirectX benötigen. Man erkennt solche Programme daran, dass Bereiche des Programmfensters, in denen man visuelle (3D-) Ausgaben erwartet, leer bleiben, was daran liegt, dass die Anwendung versucht, die Grafikkarte zum Rendern des Inhalts zu verwenden, was aber in der virtuellen Maschine nicht darstellbar ist. Ein Beispiel für solche Software ist Altium (etwa ab der Version 14).

Microsofts Software-Rendering-Lösung löste das Problem leider nicht.

Auch die Verwendung sowohl des Spice- als auch des VNC-Displayservers konnten keine Abhilfe schaffen.

Bleibt doch nur eine physikalische Windows-Installation. Nachdem Windows 7 unverhältnismäßig groß ist (>30GB), möchte man natürlich ungern zwei Windows 7-Installationen haben. Hier stellt sich die Frage: Lässt sich die physikalische Installation mit der virtuellen kombinieren, sodass dasselbe System physikalisch bootet, aber auch als virtuelle Maschine unter Linux eingesetzt werden kann?

Bei Linux-Installationen würde die Antwort lauten: Ja natürlich, das ist problemlos möglich. Unter Windows sieht es schon deutlich komplizierter aus.

Zwar gelingt es, die physikalische Festplatte als Medium für die virtuelle Maschine einzubinden und darauf Windows 7 zu installieren. Das installierte System bootet danach aber auch nur in der virtuellen Umgebung. Das Booten als physikalisches System bricht beim Windows-Logo ab. Im umgekehrten Fall, dem Booten des physikalisch installierten Windows 7 in der virtuellen Maschine, erscheint ein Bluescreen mit Fehlermeldung:

* STOP: 0x0000007B (INACCESSIBLE_BOOT_DEVICE)

Der Fehler kommt vermutlich dadurch zustande, dass sich der SATA-Controller zwischen Installation und Booten verändert: Einmal ist es der physikalische, einmal der virtualisierte, ein VirtIO-Gerät. Möglicherweise hilft die Installation eines VirtIO-Treibers unter Windows:

Vielleicht schafft auch die Version 4.4 des Linux-Kernels Abhilfe:

Veröffentlicht unter Informatik | Verschlagwortet mit , , , , , , | Hinterlasse einen Kommentar

Primfaktorproduktdarstellung

Alle natürlichen Zahlen lassen sich als Produkt von Primzahlen ausdrücken. Damit ist folgende Darstellung für alle natürlichen Zahlen denkbar:

  • Eine Zahl besteht aus n Ziffern.
  • Ziffern haben von rechts nach links aufsteigend die Wertigkeit einer Primzahl.
  • Eine Ziffer steht für den Exponenten der Primzahl in der Primfaktorzerlegung der zu repräsentierenden Zahl.
  • Die Wertigkeit einer Zahl ergibt sich aus dem Produkt aller Primzahlen mit der jeweiligen Ziffer als Exponent.
  • Präfix „p“, um die Darstellung als Primfaktorprodukt auszudrücken.

Zahlen in der Primfaktorproduktdarstellung lassen sich verständlicherweise trivial in ihre Primfaktoren zerlegen. Die zugehörige Dezimalzahl ergibt sich durch Ausmultiplizieren der Primfaktoren. Umgekehrt ist eine Primfaktorzerlegung erforderlich, um eine Dezimalzahl als Primfaktorprodukt darzustellen.

Beispiel:
Primzahlen: 2,3,5,7,11,…
Dann ist die Primfaktorproduktdarstellung von Vierzehn:

14 = 7*2 = 7^1 * 5^0 * 3^0 * 2^1 = p1001

Rechenbeispiele:

7 * 2 = 14
p1000 * p0001 = p1001
2 + 3 = 5
p0001 + p0010 = p0100
7 + 2 = 9
p1000 + p0001 = p0020
8 : 2 = 4
p0003 : p0001 = p0002

Wie man sieht, entspricht die Multiplikation in der Primfaktorproduktdarstellung der Addition der einzelnen Ziffern, die Division entspricht der Subtraktion. Erlaubt man auch negative Ziffern, so erweitert sich der repräsentierbare Zahlenraum auf alle rationalen Zahlen außer Null.

8 : 7 = 1 + 1/7
p0003 : p1000 = p0 + p0/p1000

Um Ziffern größer als 9 oder negative Ziffern abzugrenzen, kann die entsprechende Ziffer durch eine runde Klammer abgegrenzt werden.

8 : 16 = 1/2
p0003 : p0004 = p000(-1)

Die Null ist so nicht darstellbar. Da eine Welt ohne Null realitätsfern ist, sei festgelegt, dass ein alleinstehendes “p” dem Zahlenwert Null entspricht.

p = 0

Eine Zahl ist genau dann eine Primzahl, wenn ihre Primfaktorproduktdarstellung aus genau einer Eins und ansonsten ausschließĺich Nullen besteht.

Veröffentlicht unter Tagebuch | Hinterlasse einen Kommentar

Abwärme in den Blumenkasten

Eingebettete Systeme, wie NASe oder anderweitige Heim-Server finden sich ja mittlerweile in vielen Haushalten. Ihr wesentlicher Vorteil besteht darin, dass der Besitzer die (alleinige) physische Kontrolle über das System ausübt. Da sie ständig verfügbar sein sollen, sind sie i.d.R. auch permanent angeschaltet, was mit permanentem Stromverbrauch und der Erzeugung von Abwärme einhergeht. Ein recht klimaunfreundlicher Nebeneffekt bzw. eine Verschwendung immer dann, wenn das System eigentlich gerade nichts tut.

Grund genug, sich zu fragen: Was könnte man zumindest mit der Abwärme noch anfangen?

Langsam sind die warmen Tage vorbei und es wird herbstlich und kühler. Für die Pflanzen im Garten oder auf dem Balkon heißt dies: Rauhere Bedingungen, verlangsamtes Wachstum, einige werden mit fallender Temperatur eingehen.

Wie wäre es da, die eigene NAS oder den Heim-Server statt drinnen überflüssigerweise die Wohnung heizen zu lassen, im Blumenbeet oder -kasten zu deponieren, um wenigstens die Pflanzen warm zu halten?

Hm, man müsste die Systeme freilich wasserdicht verpacken bzw. konzipieren…

Veröffentlicht unter Tagebuch, Technik | Hinterlasse einen Kommentar

Altium scripting with Python

Altium’s Auto-Router is a pain, it doesn’t produce usable results even in trivial scenarios. I had the idea of scripting the routing of my board and found, that Altium supports scripting. However, they do not offer scripting in my preferred language (Python) and running the scripts seems to require Altium to be installed and running, which makes it pretty useless due to the lack of a Linux version of Altium. Looks like I have to hack some file manipulation together myself. So, how does Altium store data?

Altium uses Microsoft’s OLE2 Compound Document format for all it’s documents. I am having problems using the Python library for OLE documents, but Apache offers a Java library, that seems to be working well: org.apache.poi
Therefore for packing and unpacking the documents, I will make use of simple Java applets at first.

At least some of the content of Altium documents is text in a key-value associative manner, therefore it makes sense to use JSON as an intermediary format. Also, because this allows for JavaScript-based EDA tool generation lateron.

What has been done?

What’s to be done next?

  • Working unpacker and re-packer need to be implemented.
  • The combined knowledge of the three projects above should be boiled down into a well-commented library, which parses the JSON into Altium objects, that in turn may then be manipulated by scripts.

Repository:

Veröffentlicht unter Informatik, Technik | Verschlagwortet mit , , , , , , , , | 1 Kommentar