Saturday, April 20. 2013
Vortraege, meine und anderer Leute Posted by Clifford Wolf
in Events, Technical at
15:59
Comments (0) Trackbacks (0) Vortraege, meine und anderer Leute
Ich werde in den kommenden zwei monaten jeweils einen LUGA Vortrag halten (Achtung: fuer die LUGA unueblich sind die Termine Donnerstags):
Wie viele meiner Leser wissen werden halte ich im Metalab auch einen Elektronik Kurs zum dem schon laenger Videos versprochen sind. Diese koennten moeglicherweise bald online gehen. Wer nicht warten will kann sich durch folgende bunt gemischte Videoempfehlungen durchclicken:
Falls jemand weitere Vortragsvideos empfehlen moechte freue ich mich ueber entsprechende Kommentare! Monday, December 31. 2012Lessons learned from 29c3
I'm back from 29C3 and it was awesome! Lessons learned for the next year:
(Bild: MagicShifter by Wizard23) Thursday, September 20. 2012
Installing Xilinx ISE 14.2 / Vivado ... Posted by Clifford Wolf
in Technical at
23:46
Comments (3) Trackbacks (0) Installing Xilinx ISE 14.2 / Vivado 2012.2 on Kubuntu 12.04.1 LTS (64bit)
This is a quick write-up of the steps necessary to install Xilinx ISE 14.2 / Vivado 2012.2 on Kubuntu (Ubuntu) 12.04.1 LTS (64bit). First of all lets be said that Xilinx does not officially support Kubuntu/Ubuntu as Platform. It might work or not but don't blame Xilinx if it doesn't...
First of all extract the Xilinx_ISE_DS_Lin_14.2_P.28xd.3.0.tar and execute xsetup as root. Install everything in the default directory (/opt/Xilinx). This may take a while. When you want to start ISE, Vivado or Vivado_HLS, first execute the command "source /opt/Xilinx/14.2/ISE_DS/settings64.sh" in your shell to set PATH and other environment variables. Note that the PATH set by this command does not include the PATH to docnav (/opt/Xilinx/DocNav/) and viavdo_hls (/opt/Xilinx/Vivado_HLS/2012.2/bin/). This commands still must be called using the full path. I'm not sure why Xilinx decided to not add this directories to the PATH environment variable. Xilinx ISE comes with its own version of some system libraries (like libstdc++). The settings64.sh script adds the directories containing this libraries to the LD_LIBRARY_PATH environment variable. This has the effect that after you have sourced this script in your shell you can't exectue many system commands in this shell anymore. So I recomment working with two shells: One for the Xilinx commands and a 2nd one for the system commands. The tools are using kfmclient, google-chrome and acroread to open web sites and display PDF files. I have neither command on my system and even if I had just calling them would not work as one would have to reset LD_LIBRARY_PATH in order to execute them. So I had to add some wrapper scripts that are calling the appropriate tools with a cleaned-up environment. --- /usr/local/bin/kfmclient --- #!/bin/bash unset LD_LIBRARY_PATH export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" echo "KFMCLIENT: $*" >&2 [ "$1" = openURL ] && chromium-browser "$2" & exit 0 --- /usr/local/bin/google-chrome --- #!/bin/bash unset LD_LIBRARY_PATH export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" chromium-browser "$@" & exit 0 --- /usr/local/bin/acroread --- #!/bin/bash unset LD_LIBRARY_PATH export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" okular "$@" & exit 0 (In case you are wondering: The ISE tools are using kfmclient to open web-pages and the Vivado tools are directly trying to call a web-browser executable. Vivado tries "google-chrome" first, followed by "firefox" and a short list of others.) Of course one can also consider installing such wrapper scripts in one of the Xilinx bin directories. I've decided to install the directly in /usr/local/bin/ for various resons that might not apply to everyone.. In order to get Vivado_HLS running two additional steps are required. First we need to copy crt1.o, crti.o and crtn.o to a place where the gcc that comes with Vivado_HLS can find it: sudo cp /usr/lib/x86_64-linux-gnu/crt[1in].o \ /opt/Xilinx/Vivado_HLS/2012.2/Linux_x86_64/tools/gcc/lib/gcc/ Unfortunately the SystemC C++ code generated by Vivado_HLS suffers from the so-called "c++ static initialization order fiasco" (just google the term if you are not familiar with it). To make it short: The SystemC code generated by Vivado_HLS depends on undefined C++ behavior which leads to strange problems on some platforms while others are not effected (depending on the initialization order of static objects in different compilation units). This is a serious problem and as of this writing I'm in contact with Xilinx support in order to resolve it. Note that this Problem does not effect the generated Verilog and VHDL RTL code. It only effects the SystemC module that is generated for simulation purposes only. I've recorded a short (2:41) screencast in which I demonstrate the problem and a possible solution (i.e. using the "sc_dt::Log_*" enum to initialize static variables instead of using the global "SC_LOGIC_*" objects): http://www.youtube.com/watch?v=HqDpRUFff94 Another work-around is to change one of the SystemC headers so that every compilation unit gets its private version of the SC_LOGIC_* objects, thus resolving the initialization order problem (the initialization order of static objects within a compilation unit is defined in C++): --- Vivado_HLS/2012.2/Linux_x86_64/tools/systemc/include/sysc/datatypes/bit/sc_logic.h +++ Vivado_HLS/2012.2/Linux_x86_64/tools/systemc/include/sysc/datatypes/bit/sc_logic.h @@ -593,10 +593,17 @@ } +#if 0 extern const sc_logic SC_LOGIC_0; extern const sc_logic SC_LOGIC_1; extern const sc_logic SC_LOGIC_Z; extern const sc_logic SC_LOGIC_X; +#else +static const sc_logic SC_LOGIC_0 = Log_0; +static const sc_logic SC_LOGIC_1 = Log_1; +static const sc_logic SC_LOGIC_Z = Log_Z; +static const sc_logic SC_LOGIC_X = Log_X; +#endif // #ifdef SC_DT_DEPRECATED extern const sc_logic sc_logic_0; This is of course the prefered solution if you want to get Vivado_HLS running as it does not require any changes to the generated SystemC modules. It is not a nice final solution. But it makes the whole thing work without somehow automatically patching all generated SystemC modules. I haven't tried the cable drivers (I'm using my own software for JTAG programming) and certainly haven't tried all the tools that are part of Xilinx ISE 14.2 / Vivado 2012.2. But I think I've covered the most important topics in my tests and with the above hacks I have the parts I need for my work running just fine. I hope this write-up is of help for some of my readers. Of course there is no warranty of any kind from my side and Xilinx does not support their software on Kubuntu/Ubuntu either. So don't say you have not been warned.. Thursday, March 29. 2012
Metalab Elektrunikkurs - Zweiter ... Posted by Clifford Wolf
in Events, Technical at
15:54
Comments (0) Trackbacks (0) Metalab Elektrunikkurs - Zweiter Durchgang
Morgen Abend, Fr. 30.3.2012 ab 19:00, startet der zweite Turnus des Metalab Elektronikkurs. In aller kuerze hier einfach noch mal ein copy&paste der Ankündigung:
Das Metalab (http://metalab.at/) veranstaltet einen kostenlosen Ich freue mich auf möglichst viele TeilnehmerInnen! Saturday, September 17. 2011Android Apps
Nachdem ich gerade mein Android Handy neu aufsetzen musste hier eine kleine Liste von Android Apps die ich gut finde und auf meinem Handset installiert habe (neben Apps wie YouTube und Google Maps die schon Teil der Factory Defaults sind):
Und bis VLC for Android fertig ist verwende ich erst mal RockPlayer Lite. Kommentare mit weiteren App-Empfehlungen sind natuerlich herzlich willkommen! Wednesday, August 3. 2011
When Patents Attack! (This American ... Posted by Clifford Wolf
in Links, Politik, Technical at
20:13
Comment (1) Trackbacks (0) When Patents Attack! (This American Life)
This American Life hat vor fast zwei Wochen die hervorragend gemachte Folge "When Patents Attack!" ausgestrahlt.
Ich erwaehne das hier weil die Folge ein Musterbeispiel dafuer ist, wie man einem nicht-technischen Publikum die ganze Patentproblematik (insbesondere im Zusammenhang mit Softwarepatenten) verstaendlich machen kann. Daher: Ein Muss sowohl fuer alle die gegen den Patentwahnsinn aktiv sind (als Anregung und Referenz) als auch (und insbesondere) natuerlich fuer jene die sich noch nicht so viele Gedanken zu dem Thema gemacht haben. Besonders gut gefaellt mir, wie in der Sendung aufgezeigt wird, dass Patente in der Welt der tatsaechlich stattfindenden Ereignisse weder innovationstreibenden Firmen noch kleinen Erfindern nutzen, sondern nur einer aeusserst zweifelhaften Industrie von mafiahaft agierenden "Patent Trollen" dabei Hilft eben jene innovationstreibenden Firmen und kleine Erfinder zu terrorisieren. Derart klar und unmissverstaendlich auf den Punkt gebracht sollte jede ernsthafte Ausseinandersetzung mit dem Thema sein. Wednesday, April 27. 2011Unbeschreibbare Zahlen
Seit etwa eineinhalb Jahren beschaeftigt mich folgender Gedanke. Sicherlich ist der nicht grundlegend neu und daher habe ich mich entschlossen mal darueber zu bloggen. Moeglicherweise hat ja eine mathematisch bewanderte LeserIn einen Pointer zu weiteren Informationen zu dem Thema fuer mich ...
Zunaechst moechte ich den Begriff der "beschreibbaren Zahl" definieren: Def. 1: Eine beschreibbare Zahl ist eine (reelle) Zahl die entweder ueber eine Beschreibung Ihrer Eigenschaften oder ueber eine Konstruktionsvorschrift innerhalb eines Zeichensystems eindeutig von allen anderen Zahlen unterschieden werden kann. Man wuerde annehmen, dass alle (reellen) Zahlen in die Menge der beschreibbaren Zahlen fallen. Doch das scheint nicht der Fall zu sein. Def. 2: Eine Aussage ist eine endliche Folge von Zeichen eines Zeichensystems aus einer endlichen Anzahl von Symbolen, die geeignet ist maximal eine abzaehlbar grosse Menge von konkreten Zahlen zu beschreiben. Z.B. koennte man als Zeichensystem einfach das ASCII-Alphabet und die deutsche Sprache verwenden. Was ist gemeint mit "maximal eine abzaehlbar grosse Menge von konkreten Zahlen"? Damit ist gemeint, dass eine Aussage zwar z.B. die reellen Zahlen als Menge in ihrerer Gesamtheit beschreiben kann, nicht aber jedes Element eindeutig zu beschreiben vermag. (Selbst mit Auswahlaxiom koennte man wohl nur eine abzaehlbar grosse Teilmenge der reellen Zahlen in einer Aussage beschreiben. Wir wollen das Auswahlaxium aber nicht zulassen, sonst kaeme jemand auf die Idee ein Element aus Menge der nicht beschreibbaren Zahlen auszuwaehlen.) Ich hoffe dieser Sachverhalt ist anschaulich genug so dass er so akzeptiert werden kann. Lemma 1: Es gibt eine abzaehlbar unendlich grosse Menge von Aussagen. Das folgt unmittelbar, da man jeder Nachricht {z_1, z_2, .. z_n} mit n Zeichen aus einem Zeichensystem aus k verschiedenen Zeichen die natuerliche Zahl sum(z_i * k^(i-1), i = 1..n) zuordenen kann. D.h. man kann z.B. jeder ASCII Datei eine sehr grosse Binaerzahl zuordnen. Lemma 2: Es gibt eine abzaehlbar unendlich grosse Menge von beschreibbahren Zahlen. Das folgt unmittelbar wenn man Cantors erstes Diagonalargument auf die abzaehlbar unendlich grosse Menge von Aussagen und die abzaehlbar unendlich grosse Menge von beschreibbaren Zahlen pro Aussage anwendet. D.h. dass es z.B. in der Menge der reellen Zahlen (die ja ueberabzaehlbar groß ist) eine abzaehlbar grosse Teilmenge von beschreibbaren Zahlen gibt zu der alle konkreten Zahlen gehoeren mit denen wir uns je beschaeftigen. Damit wir uns mit einer konkreten Zahl ueberhaupt beschaeftigen koennen muss sie ja beschreibbar sein. Der ueberabzaehlbar grosse Grossteil der reellen Zahlen aber besteht offenbar aus nicht beschreibbaren Zahlen die fuer uns als einzelne nicht greifbar sind. Es ist unmoeglich so eine Zahl aus den reellen Zahlen herauszureissen und als einzelne zu untersuchen. This blows my mind! Was denkt Ihr? Wednesday, December 22. 2010
Libraries fuer lineare Algebra Posted by Clifford Wolf
in Technical at
11:23
Comments (3) Trackbacks (0) Libraries fuer lineare Algebra
In letzter Zeit habe ich einiges zu linear Algebra C Libraries recherchiert. Hier eine kurze Aufstellung der interessantesten Dinge die ich gefunden habe:
Zunaechst die Loesungen die ich bereits kannte: GSL Bis jetzt habe ich fast alles was mathematisch/numerisch anspruchsvoller war mit dieser library gemacht. Da findet man unter anderem auch funktionen fuer die wichtigsten algorithmen aus der linearen algebra. Leider hat GSL keinen support fuer sparse Matrizen. In meinem gegenwaertigen Projekt brauche ich aber genau das. Eigen Eine C++ Library fuer lineare Algebra. Wegen operator overloading und templates ist Eigen natuerlich einfacher zu verwenden als GSL. Der wesentliche Vorteil ist aber meiner meinung nach, dass man eigene Basistypen definieren kann. Wenn man also Matrizen ueber Koerper die nicht die reellen oder komplexen Zahlen sind bauen moechte ist Eigen sicherlich einen Blick wert. Ich bin ueber Eigen im Zuge der Entwicklung von OpenSCAD gestolpert und verwende es dort fuer die in der Geometrie ueblichen 2-4 dimensionalen Matrizen. BLAS bzw. CBLAS Die low-level API fuer lineare algebra. Es gibt viele implementierungen - unter anderem eine in GSL. Komplexere algorithmen wie etwa die verschiedenen Matrizenzerlegungen muss man sich selber bauen. Im Zuge meiner recherchen bin ich dann unter anderem auf folgene Projekte gestossen: SuiteSparse Eine Sammlung kleinerer Libraries zum Arbeiten mit sparse matrizes. Ich verwende davon KLU, eine Library zum LU-Faktorisieren duenn besetzter sparse Matrizen und loesen der entsprechenden linearen Probleme. PETSc Eine groessere mathematik suite fuer MPI-basiertes parallel computing. Wurde mir von B. empfohlen. Ich hab mich aber nur ein bsichen auf der website umgesehen - fuer meine Anwendung schien mir das doch zu schwergewichtig zu sein. SelInv Ein recht interessantes paper von Lin Lin mit dem Titel "SelInv -- An algorithm for selected inversion of a sparse symmetric matrix". Fast genau das was ich eigentlich gesucht habe. Mal sehen wie gross meine Matrizen wirklich werden. Wenn ich mit KLU an die grenzen Stosse werde ich wohl versuchen etwas in dieser Richtung zu implementieren. Habt Ihr noch Hinweise fuer mich (oder andere Leser) zu guten linear algebra libraries? Dann schreibt doch bitte ein Kommentar.. Zu meiner Anwendung: Ich versuche derzeit die Eigenschaften einzelner Zeilen der Inversen von bestimmten symetrischen sparse Matrizen (dimension etwa 50.000 - 250.000) zu untersuchen - freue mich aber auch ueber Hinweise auf Libraries und Tools die nicht auf dieses Problem passen. Happy number crunching! Wednesday, April 28. 2010LaTeX - Wurzel mit Haken
Ich schreibe ja recht viele Texte mit LaTeX. Kuerzlich hat A. folgendes Problem an mich herangetragen, dass ich nicht auf anhieb loesen konnte: Wurzeln sollten mit einem "Haken" hinten gesetzt werden, damit man eindeutig erkennen kann wo der Ausdruck unter der Wurzel endet.
![]() W. aus Graz hat daraufhin folgendes Macro ausgegraben das offenbar schon seit einiger Zeit im Netz die Runde macht und den Job erledigt: \def\hksqrt{\mathpalette\DHLhksqrt} Leider unterstuetzt diese Loesung keine Wurzeln belibiger Ordnung (wie die aussere Wurzel und die Wurzel im Zaehler in der Abbildung). Daher hab ich die o.g. Loesung etwas aufgebohrt so dass sie wie das LaTeX \sqrt Kommando die Ordnung der Wurzel als optionales Argument versteht: \documentclass{article} Vielleicht googelt ja mal jemand nach dem Problem und stolpert dann dabei ueber mein Blog.. PS: Morgen (Donnerstag, 29.4.2010) halte ich ab 19:00 im Metalab einen Vortrag ueber Graphiken mit LaTeX erstellen: http://www.luga.at/veranstaltungen/latex-2010-04-29/ PPS: Im Metalab gibt es ein regelmaessiges TeX/LaTeX Treffen: http://metalab.at/wiki/Leidensgruppe_LaTeX Sunday, January 24. 2010
Was muss ein Taschenrechner koennen ... Posted by Clifford Wolf
in Technical at
14:11
Comment (1) Trackbacks (0) Was muss ein Taschenrechner koennen (Teil 3)
Vor ziemlich genau 2 Jahren habe ich ueber den CASIO fx-991ES geblogged. Bis vor ein paar Tagen war das meiner Meinung nach der empfehlenswerteste wissenschaftliche Rechner in der unteren Preisklasse (unter 30 EUR).
Jetzt bin ich ueber den SHARP EL-W506 (schon um 20,90 EUR bei Amazon gesehen, ich hab ihn aber um ein paar Euronen mehr aus dem offline Einzelhandel) gestolpert und muss sagen: das Graet ist sehr ueberzeugend! Soweit habe ich kein Feature des CASIO fx991ES gefunden das es nicht auch beim SHARP EL-W506 gaebe. In umgekehrter Richtung gibt es aber ein paar Kleinigkeiten und insgesammt ist mir der SHARP in der Bedienung noch etwas sympatischer als der CASIO.Vom Funktionsumfang sind sich die Rechner sehr aehnlich. Beide koennen nummerisch intergrieren und differenzieren. Beide beinhalten einen newton solver fuer gleichungen und haben einen modus zum loesen linearer systeme mit 2 oder 3 unbekannten sowie quadratischer und kubischer gleichungen. Beide koennen im komplexen (dazu unten noch etwas mehr) mit listen und mit matrizen rechnen und haben funktionen zur statistischen analyse. jedoch finde ich den zugang zu den aufwendigeren oder seltener benutzten funktionen bei SHARP intuitiver und ich habe vor allem den eindruck, dass das display besser genutzt wird. So faellt es beim CASIO beim eingeben von Matrizen schon recht schwer zu erkennen was man da eigentlich gerade tut, waehrend die selbe Aufgbae beim SHARP bei einem etwa gleich grossen Display kein Problem darstellt. Wenn man weiter ins detail geht findet man auch einige funktionale unterschiede. Z.bsp. kann der SHARP matrizen invertieren. Beim numerischen integrieren und differenzieren kann man beim SHARP die groesse des epsilons angeben. Die Summenfunktion unterstuetzt eine Schrittweite. Beim CASIO sucht man diese features vergeblich. Der SHARP hat einen Funktionskatalog fuer exotischere Funktionen der mich am ersten Blick etwas an die Bedienung von meinem HP50g erinnert. Auch die Liste der Konstanten und die Liste der unit conversions sind beim SHARP in einem menue abrufbar. Bei CASIO muss mann die Nummer der Konstant bzw. der unit conversion kennen (eine Liste gibt es aber auf der innenseite des deckels). Die Aufwendigeren Funktionen (solver, matrizenrechnungen, etc) haben beim SHARP ein meiner meinung nach ein viel intuitiveres interface. Der SHARP hat mehr Speicher als der CASIO - unter anderem einen Speicher um bis zu 4 haeufig verwendete Terme ablegen zu koennen und 4 speicher (D1 - D4) auf die man haeufig verwendete taschenrechner funktionen (z.bsp. solche die sonst nur ueber menues erreichbar sind) legen kann. Sehr angenehm finde ich die Art wie beim SHARP mit zahlenbasen ungleich 10 gerechnet und umgewandelt wird. Das geht zwar mit dem CASIO auch alles, ist aber beim SHARP um einiges konfortabler geloest. Leider ist mein groesster Kritikpunkt am CASIO auch beim SHARP gueltig: er kann nicht mit komplexen Exponenten rechnen. Ich hatte die Hoffnung, dass man zumindest einen geschlossenen Term fuer a^b mit komplexem a und b in einem der formelspeicher ablegen kann. Aber leider gestaltet sich das als etwas aufwendiger, weil die Umwandlung von komplexen Zahlen zwsichen Komponentenschreibweise und Polarkoordinaten und das extrahieren der einzelnen Elemente nur im Ergebnis einer Berechnung moeglich und nicht als Funktion auf eine Variable anwendbar ist. Zwar kann man mit re=(x+conj(x))/2 und im=(x-conj(x))/2 real und imaginaerteil extrahieren und mit abs(x) den betrag, ohne atan2() und ohne fallunterscheidung ist das zufuss berechnen des winkels in der gaussschen zahlenebene aber zu aufwendig um dann einen geschlossenen Ausdruck sinnvoll eingeben zu koennen. Es ist mir nach wie vor ein Raetsel wesshalb die Hersteller von Taschenrechnern zwar einen Newton Solver in ihre Geraete um knappe 20 EUR einbauen, nicht aber die Zerlegung der Berechnung eines komplexen Exponenten implementieren koennen. Wer sich einen neuen Taschenrechner anschaffen, dabei aber nicht viel Geld ausgeben moechte dem kann ich den SHARP EL-W506 sehr ans Herz legen. Bei mir hat er den CASIO fx-991ES als den Taschenrechner den ich immer dabei habe abgeloest. Thursday, January 14. 2010rpn, iomem, teletype
Im letzten Maerz habe ich angekuendigt in unregelmaessigen Abstaenden ueber die kleinen Tools zu schreiben die ich mir im laufe der Zeit fuer die unterschiedlichsten Aufgaben zusammengestoepselt habe. Vor 10 Monaten ging es um einige JavaScript Programme fuer Berechnungen aus dem Bereich der Elektrotechnik. In diesem Post will ich drei Tools vorstellen die eher in den Bereich embedded bzw. hardwarenahe entwicklung gehen.
Clifford's Tools: http://svn.clifford.at/tools/trunk/ rpn und rpn64: Ueber dieses Programm und das nachfolgende habe ich 2007 schon mal in aller kuerze geblogged. Rpn ist ein einfacher rechner mit 32 bit integern fuer rechenoperationen in reverse polnish notation. rpn64 ist die version fuer 64 bit integer. Das eigentliche Highlight des Rechners ist aber nicht das rechnen an sich sondern das format seiner Ausgabe: Wenn man oft damit zu tun hat die Inhalte von irgendwechen Registern auseinanderzuklauben oder mal schnell fuer einen test das richtige wort zusammenstoepseln muss das in ein register geschrieben werden soll, dann ist dieses tool eine wertvolle hilfe. "rpn --help" erzeugt eine 4 seitige uebersicht ueber alle aufrufarten und operationen die rpn versteht. Unter anderem gehen einfache rechnungen und bitoperationen, ein uns ausgabe kann in binaer, dezimal, hexadezimal oder oktal erfolgen. Wenn es keine angabe zum ausgabeformat gibt wird das oben gezeigte verbose format verwendet. Ich verwende das tool hauptsaechlich auf der kommandozeile um bitmuster zu zerlegen. machnmal ist es aber auch praktisch um z.bsp. kleine shell scripts zu schreiben die wiederkehrende berechnung/analyse von bestimmten bitmustern wie z.bsp. statusregistern zu automatisieren. iomem: iomem ist ein tool das man auf PCs wohl besser nicht starten sollte: es erlaubt den direkten zugriff auf memory-gemappte register. in embedded systems kann das aber sehr praktisch sein, wenn man fuer einfache aufgaben nicht gleich einen treibewr schreiben muss sondern mit iomem direkt im speicher herumpfuschen kann. Um z.Bsp. das 32 bit register an der Addresse 0x12345678 auszulesen ruft man "iomem r32 0x12345678" auf. Um die vier 16 bit register an der io adresse 0x100 auszulesen wuerde man "iomem r16-port:4 0x100" ausfuehren. es gibt modi um auf registerbloecke zu lesen und zu schreiben und um mehrere lese oder schreib zugriffe auf ein fifo register zu machen. Man kann auch pollend darauf warten das ein register ein bestimmtes bitmuster annimmt. Ich empfehle aber das Programm nur zu verwenden wenn man weiss was man da tut. Es gibt einen grund warum es normalerweise kein command line tool gibt um direkt hardware register zu manipulieren.. teletype: teletype is ein raw serial terminal. mit "raw" meine ich in diesem fall, dass es nicht versucht terminal escape codes selbst zu interpretieren sonder die bytes von der seriellen schnittstelle 1:1 an das controlling tty weitergibt. ansi, vt100, und andere escape codes muss das controlling tty selbst auswerten - oder der user bekommt den schrott halt angezeigt. das hat den vorteil, dass man alle features eines X terminal windows auch beim verwenden der seriellen schnittstelle hat. Insbesondere dass bei curses basierenden serial terminals die history funktion des terminal windows verloren geht hat mich immer sehr gestoert. dafuer hat teleteype einige features die andere terminal-programme nicht haben wenn es um das automatisieren oder teilautomatisieren von ablaeufen geht. speziell so dinge wie mit kleinen shell scripts devices flashen geht damit recht leicht. Wen man das programm ohne weitere parameter startet bekommt man eine uebersicht der optionen und befehle: $ teletype --------------------------------------------------------- Usage: teletype device [speed] [escape-letter] [command(s)] Default speed is 9600 Baud. Default escape letter is 'A'. Supported speed rates: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 Control Key Kombos: Ctrl-A A Send a Ctrl-A over the line Ctrl-A B Send a break over the line Ctrl-A 0 Send a a single zero byte over the line Ctrl-A H Print help message (command overview) Ctrl-A R Toggle RTS (Ready To Send) signal Ctrl-A D Toggle DTR (Data Terminal Ready) signal Ctrl-A T Toggle timestamp-mode and reset timer Ctrl-A L Set slow send mode (N chars/sec, 0=unlimited) Ctrl-A N Create network link to remote TCP/IP port Ctrl-A E Toggle local terminal echo Ctrl-A C Run a chat script (or any other command such as 'sx') Ctrl-A W Wait one second (this is usefull for scripts) Ctrl-A U Set baud rate (use with care!) Ctrl-A S Print line status Ctrl-A \ Exit without serial reset Ctrl-A X Exit with serial reset Ctrl-A . [x] Change escape key from Ctrl-A to Ctrl-[x] Commands are in the form of '-<Key><Argument>'. E.g.: teletype /dev/tts 9600 -b -l10 -c'chat -f myscript.txt' -l0 -u115200 -c'sx datafile.bin' -x --------------------------------------------------------- Friday, August 28. 2009
Letzte Erinnerung: Linuxwochenende ... Posted by Clifford Wolf
in Events at
10:59
Comments (2) Trackbacks (0) Letzte Erinnerung: Linuxwochenende 2009 - Call for Papers
An alle die noch nicht eingerecht haben: Der CfP fuer das diesjaehrige Linuxwochenende laeuft nur noch bis Montag! Mehr Informationen rund um das Linuxwochenende und Webapp zum Einreichen von Vortraegen gibt es auf der Homepage:
http://linuxwochenende2009.luga.at/ Das Linuxwochenende selbst ist dann am 24. und 25. Oktober. Wednesday, August 5. 2009Int vs. Float vs. Double
Ich erzaehle seit einiger Zeit bei allen moeglichen Gelegenheiten, dass meiner Meinung nach Scriptsprachen in Zukunft auf die verwendung von Integer typen verzichten sollten und statt dessen double precission floats als basis number-type verwenden sollten, oder zumindest bei divisionen automatisch nach double float casten sollten. Offensichtlich kann double float mit der 56 bit Mantisse ein 32 bit vollstaendig abbilden. D.h. es kaeme hier in keiner weise zu einem Verlust an genauigkeit. Das mehr an Speicherplatz verbrauch ist ebenfalls zu vernachlaessigen: das geht in aller Regel im Verwaltungsoverhead der VM unter.
Die Vorteile liegen auf der Hand: ersten muss man sich bei Sprachen mit dynamischer typisierung dann keine gedanken darueber machen, ob eine variable jetzt nun int oder float ist und wie eine divison nun definiert ist (das ist ein punkt der mich an python 2 aergert - afaik hat kommt bei python 3 bei einer division immer ein float raus, ausser man verwenden den speziellen // operator fuer integer divisionen) und andererseit macht es das VM design etwas einfacher wenn man es nur mit einem number-type zu tun hat. Das Gegenargument bleibt immer die performance. Also hab ich mal einen kleinen Test mit zwei typischen integer algorithmen gemacht: Das zaehlen von primzahlen mit einem ganz trivialen primtest und einfach nur zaehlen ohne weitere berechnungen: int testi(int n)
{
int counter = 0;
for (int i = 2; i < n; i++)
{
for (int j = 2; j < i; j++)
if (i % j == 0)
goto next_candidate;
counter++;
next_candidate:;
}
return counter;
}
int test2i(int a, int b)
{
int counter = 0;
for (int i = 0; i < a; i += b)
for (int j = 0; j < a; j += b)
counter++;
return counter;
}diese funktionen hab ich drei mal implementiert: fuer die C-typen int, float und double. bei float und double wird die modulo division mit der math.h funktion fmodf() bzw. fmod() umgesetzt. die implentierungen hab ich in jeweils eigene c-file gelegt und nochmals ein extra c-file mit einer main() implentierung erstellt. durch die verwendung jeweils eigener c-dateien soll sichergestellt werden, dass der compiler die funktion moeglichst generisch uebersetzt und nicht mit inlining und const folding in die main implementierung hineinzieht. Compiliert habe ich das ganze mit gcc 4.3.1 (-O3 -march=i386) und getestet auf meinem AMD Athlon(tm) 64 X2 Dual Core Processor 6000+. Im Test wird die erste funktion jeweils mit dem parameter 100000 und die zweite jeweils mit den parametern 40000 und 1 gestartet. Das Ergebnis des Primzahlen-Tests: Die integer variante braucht ganze 6,614 Sekunden um durchzulaufen. Die float bzw. double variante braucht 4,171 bzw. 4,172 Sekunden, ist also sogar deutchlich schneller! Das Ergebnis des Zaehlerschleifen-Tests: Die integer variante braucht 1,666 Sekuden. Die float bzw. double variante braucht 2,486 bzw. 2,450 Sekunden. Hier hat die integer variante klar die nase vorn! Fazit: Es liegen keine Welten zwischen integer und float performance. Gerade bei interpretierten Sprachen durfte sich der tatsaechliche Performanceunterschied kaum bemerkbar machen. Bei JIT compilation muesste man sich da schon mehr gedanken machen um die maximale performance rausholen zu koennen, und das erste beispiel zeigt, dass hier ein JIT compiler unter umstaenden sogar mehr performance rausholen koennte wenn integer typen (zumindest in bestimmten faellen) zu floats kompiliert werden. Der Python3 Ansatz den Divisionsoperator unabhaenig von den Operanden als floating point division zu implementieren und einen eigenen operator fuer integer divisionen einzufuehren erscheint mir aber in jedem falle sinnvoll. Die Bestrebungen in ECMA-Script 4 und Perl 6 eigene int typen einzufuehren halte ich dafuer fuer fragwuerdig, vor allem weil man davon ausgehen kann, dass bis zur umsetzung von ECMA-Script 4 und Perl 6 wahrscheinlich auch alle embedded CPUs, die maechtig genug zum hosten dieser Sprachen sind (ECMA-Script findet z.Bsp. bereits Anwendung bei den HD-DVD Menues als VM-Backend) ueber mindestens so schnelle floating point wie fixkomma einheiten verfuegen werden. Thursday, July 9. 2009
Building and installing qcad ... Posted by Clifford Wolf
in Technical at
10:27
Comments (3) Trackbacks (0) Building and installing qcad 2.0.5.0-1 community edition
Ich hatte in den letzten Wochen gleich mehrmals das recht zweifelhafte vergnuegen qcad von den Sourcen zu bauen. Offenbar hat der autor nur ein sehr eingeschraenktes interesse daran diesen prozess so problemlos wie moeglich zu gestalten. Einerseits gibt es kein "make install", andererseit gibt es einige troubles mit aktuellen gcc versionen. Letzteres ist das gleiche drama wie bei vielen anderen packages auch: die neuen aufgeraeumten C++ headers includen nicht mehr
http://www.clifford.at/writings/qcad-2.0.5.0-1-build.patch Vielleicht ist mit diesem kleinen patch ja auch noch dem einen oder anderen ausser mir geholfen... Saturday, July 4. 2009
Oberstufen Physik Buch "Physik ... Posted by Clifford Wolf
in Buch und Film at
15:33
Comments (8) Trackbacks (0) Oberstufen Physik Buch "Physik 5" von öbvhpt..
Ich mache ja gerade die SBP (Studienberechtigungspruefung) und habe mir zu diesem Zweck Lehrbuecher fuer die AHS Oberstufe aus den Faechern Physik und Mathematik besorgt. Heute habe ich angefangen das Physik Buch fuer die 5. Klasse aus dem ÖBVHPT Verlag (ISBN 13: 978-3-209-04373-3) zu lesen und komme aus dem Staunen nicht mehr heraus. Gleich am Ende des ersten Kapitels auf der Seite 10 finde ich zum Beispiel folgende zwei Absaetze:
Das Licht legt in ca. 3*108 s genau die Strecke von einem Meter zurueck. Die Entfernung zwischen Sonne und Erde betraegt ca. 150 Mio. km. Das bedeutet, dass das Licht 1,5 * 1011 m : 3*108 s = 500 s = 8,33 min benoetigt. Ich spiele mal kurz Captain Obvious und erklaere was da alles falsch ist: 1.) Das Licht legt in einer Sekunde die Strecke von ca. 3*108 Metern zurueck - nicht umgekehrt. In diesem ersten Kapitel, an dessen Ende die beiden oben zitierten Absätze stehen, geht es um die Basisgroessen Zeit und Länge. Da sollte man die beiden als Autor eher nicht verwechseln.. 2.) Sehen wir uns einmal die Einheiten aus dem Term im ersten Absatz an: m : s = s = s ganz offensichtlich stimmt hier etwas nicht mit den Dimensionen! Ganz klar: 3*108 ist die Lichtgeschwindigkeit in Metern pro Sekunde. Die Einheit sollte also "m/s" und nicht "s" sein: m : m/s = s = s So passen die Dimensionen: Die Laenge laenge laesst sich auf der linken Seite wegkürzen und die Zeit bleibt übrig. Es ist ja auch die Lichtgeschwindigkeit durch die hier dividiert wird und nicht die Lichtzeit.. 3.) Der gesamte zweite Absatz ist Schwachsinn. Sonnenauf- und -untergang entstehen durch die Drehung der Erde um die eigene Achse und haben nichts mit der Drehung von Erde und Sonne um einen gemeinsamen Schwerpunkt zu tun (in den knapp 8 Minuten drehen sich die beiden übrigens um gerade mal 0.096 mrad umeinander). D.h., die Sonne befindet sich staendig in der Richtung des eintreffenden Lichts. Dieses ist zwar 8 Minuten alt, da aber Sonne und Erde in dieser Zeit an ihrem Platz bleiben und sich lediglich die Erde um ihre eigene Achse dreht sind die Laufzeit des Lichts, die Lichtgeschwindigkeit und die Entfernungen der beiden Himmelskörper zueinander irrelevant. Dieser Denkfehler ist insbesondere deshalb tragisch, weil es sich hier um den erzählerischen Aufhaenger dieses ersten Kapitels handelt. Damit stellen sich fuer mich zwei Fragen: 1. Wer schreibt so einen Schwachsinn? Und 2. wer liest das Korrektur? Das Bundesministerium fuer Bildung Wissenschaft und Kunst hat mit Bescheid GZ 25.803/1-V/9/03 vom 29.7.2004 dieses Buch als für den Unterrichtsgebrauch an allgemeinbildenden höheren Schulen für die 5. und 6. Klasse als geeignet erklärt. Liest das dort keiner vorher? Mein Exemplar ist übrigens ein Nachdruck von 2007... Fehler passieren - das kenne ich nicht zuletzt von meinen eigenen Publikationen. Aber wie kommt es dass solche Ballungen von Fehlern jahrelang auf einer der ersten Seiten eines Schulbuches zu finden sind? Wie kann es sein, dass zwei Autoren (zumindest stehen zwei Namen am Umschlag) gemeinsam an einem solchen Werk arbeiten (Peer Review?!) und dieses dann noch von einem Ministerium geprüft wird und dann kommt so etwas dabei heraus? Ich jedenfalls bin fassungslos... Ansonsten macht das Buch vom grob Drueberfliegen eigentlich einen sehr guten Eindruck. Die Themen werden in einem sehr einfachem Erzaehlstil und anhand recht anschaulicher Experimente aufgearbeitet. Ich gewinne den Eindruck, die Oberstufenphysik haette mir in dem entsprechenden Alter Spass gemacht... Heute hat das zwar auch etwas Unterhaltsames, ich wuerde aber lieber den halbverstaubten Dirschmid aus dem Regal nehmen und darin etwas schmoekern statt die AHS Physik nachzuholen, aber das ist wohl eher mein privates Motivationsproblem und hat wenig mit dem AHS Physikbuch an sich zu tun.. |
Calendar
QuicksearchArchivesCategoriesSyndicate This BlogBlog Administration |
|||||||||||||||||||||||||||||||||||||||||||||||||
