Aquascaping?

In diesem Video wird recht ausführlich Aquascaping vorgestellt (incl Dennerlewerbung):

Ich hab auch das Buch von Takashi Amano da. Schön aussehen tut das zum Teil ja schon. Aber wenn ich mir den ganzen Krempel anschaue, den die sich da antun. Mehrere Lagen Bodengrund (den man natürlich "Soil" nennen muss, warum auch immer) und das Gezeter mit dieser sogenannten Lilipipe und externem Filter.

Schlimm finde ich das.

Meiner Meinung nach ist ein guter Hamburger Mattenfilter das beste, was man machen kann. Alles andere, insbesondere diese beknackten externen Filter mit irgendwelchen Kügelchen und Röhrchen drin: Müll.

Man gibt da hauptsächlich viel Geld aus. Und wenn man keine Ahnung von Aquaristik hat (d.h. jeder Anfänger), dann wird das auch nix. Man muss schon wirklich wissen, was man tut, von der Wasserchemie Bescheid wissen, die Haltungsbedingungen von Pflanzen und Tieren aus dem FF kennen. Dann mag es klappen. Aber für so ein Teil ist wesentlich mehr Maintenance nötig als bei einem stinknormalen Aquarium mit HMF.

Und was mich am meisten nervt, und zwar bei praktisch allen Anleitungen dieser und ähnlicher Art: es wird die Lampe und der Filter gezeigt. Fein. Und wie soll der Betreiber den Kram steuern? Zeitschaltuhr? Welche? Was für Zeiten? Beispiele? Ich finde es ziemlich beschissen, dass Anfänger des Hobbies (auch in der Terraristik ist das so), oft mit der Technik im Hintergrund, die UNBEDINGT nötig ist, alleine gelassen wird. Entsprechender Schwachsinn kommt dann auch dabei raus, wenn man sich mal die Vorstellungen von Anfängern hier und da anschaut. Grauslig.


28.02.2013 19:50 CC0 aquarium aquascaping kritik Aquarium






How to reinvent the fucking wheel

Today I stumbled across this post by the iFixit makers. The interesting part can be found at the end of the post:

We are makers and we are fixers. Information on how to make, build, and fix things in the real world wants to be free. We want to help make that possible: this week, we’re making our publishing software, Dozuki, free for anyone to host open source, community-driven instruction manuals.

The site mentioned, "Dozuki" is actually not free, as can be read on the pricing page:

How does the free trial work?

Once your account representative has setup your site, you will have a 30 day Dozuki trial, completely free of charge. You won't be charged a cent if you cancel prior to the end of the free 30-day trial. After that, your plan will be billed once a month. It's easy to stop - or start - at any time.

So, I'm not sure, what they talk about in their post, but it's got nothing to do with opensource. But the thing, which annoys me is the fact, that they are reinventing the wheel for the thousandth time or so. Many others implemented opensource hosting platforms in the past. Of course for opensource software, not hardwar. But what's the difference? I don't see one from the philosophy perspective.

And why would one put their documentation to some remote site and not bundle it with the actual project? That's such a crappy idea. Nonsense. And then they babble about their proprietary format called the "Open Manual Format", which they describe as:

oManual is a simple, open XML-based standard for semantic, multimedia-rich procedural manuals.

Using XML to write a manual? You lose. No developer will do that. You write a README textfile. If you're oldschool you write a manpage. You maintain a webpage about the project where you describe it using HTML. Including images, videos, whatnot. You don't need such XML rubbish for this purpose.

From these things you can see, that many people of the so-called "open hardware movement" (or "makers" how they call themselfes often) don't have an opensource background. They never came in touch with opensource software. The don't know much about licensing (just take a look on the TOS on the Dozuki site). They just make the same errors as others of the opensource software community did before.

Sad.

 


26.02.2013 21:22 CC0 kritik opensource Source






Vikings

Wow, eher zufällig drüber gestolpert, DIE Serie MUSS ich sehen!

Es gibt auch ein paar Videos davon:

 

 

 

Oh - und Gabriel Byrne spielt da mit!


20.02.2013 21:28 CC0 serie vikings Kino






Arduino Adè :-)

Meine bisherigen Controllerprojekte habe ich immer mit Arduino gemacht. Ich bin damit zwar zufrieden, aber es ist doch etwas teuer. Vor allem deshalb, weil man den Arduino nachher irgendwo verbaut hat und somit nicht mehr für Experimente benutzen kann. Sehr schlecht.

So bin ich irgendwann auf AVR Controller gekommen. Eine Weile hab ich mit einem Attiny85 rumgespielt. Um den zu programmieren, hab ich mir den Diamex-USB-ISP besorgt und mir eine kleine Adapterplatine gebastelt. Das war schon ganz gut ... Aber! Ein Attiny85 macht nicht viel her, nur ein paar Pins, kein UART usw. Ich wollte also was grösseres, ein Attiny2313 musste her und ein Atmega168. Aber die haben viel mehr Pins und passen logischerweise nicht in meine Platine. Schöner Mist. Nun hätte ich mir noch eine Platine basteln können, und noch eine usw. Alles Kacke.

Zufällig habe ich myAVR entdeckt und mir die universelle Platine myMultiProg MK2 und den myMultiProg MK2 bestellt.

Und was soll ich sagen? Ich bin SOWAS von happy damit! Atmega draufgesteckt, USB Kabel rein, Port rausgesucht und ins Makefile eingetragen. "make upload" - und fertig!

Seeeehr genial. Ich bin von den Socken. Und hiermit hat sich das Thema Arduino für mich im Grunde erledigt. Ich kann zukünftig direkt mit AVR arbeiten. Und auf den Komfort muss ich nicht verzichten, ino sei Dank!

Ich hab mal mein Makefile samt bisserl Beispielcode hochgeladen. Das Makefile ist für FreeBSD, den Port sucht ein Script raus (ist dabei): Blinktest-Mega8-myAVR.


19.02.2013 21:18 CC0 arduino avr myavr Elektronik






Ich bleibe bei Amazon Kunde, alles andere wäre Heuchelei

Amazon wird derzeit von allen Seiten heftig wegen der Arbeitsbedingungen in den Logistikzentren kritisiert. Während alle auf Amazon rumhacken, ist mir ein Detail aufgefallen, im oben verlinkten Artikel:

Rund 90 Prozent der Zeitarbeiter bei den Mitgliedsfirmen hätten einen unbefristeten Arbeitsvertrag, betonte Stolz. Der iGZ ist einer der Arbeitgeberverbände der Branche und vertritt nach eigenen Angaben rund 2.700 mittelständische Unternehmen.

Ist das so?

Die Wirklichkeit sieht anders aus. Mehrere Millionen Menschen in Deutschland arbeiten im Niedriglohnsektor zu ähnlichen oder schlechteren Bedingungen als die Leiharbeiter bei Amazon. Ein grosser Teil dieser Menschen verdient nicht genug Geld, um zu überleben und muss mit Hartz IV aufstocken.

Ein Bekannter von mir hat neulich so einen Job angenommen: befristet für 3 Monate bei einer Zeitfirma angestellt für 7,50 Euro die Stunde brutto. Die Zeitfirma verleiht ihn an einen Callcenterbetreiber, der widerum Callcenter für irgendwelche Unternehmen betreibt. Jetzt ist er krank geworden, der Vertrag wird nicht erneuert. Raus.

So oder ähnlich sieht der Alltag vieler Menschen in Deutschland heute aus. Die Kritik an Amazon an sich ist natürlich grundsätzlich nicht falsch. Der Fehler ist, dass Amazon aber lediglich die Möglichkeiten nutzt, die es in Deutschland hat. Gäbe es diese Möglichkeiten nicht, würden sie das auch nicht tun. Zu verdanken haben wir diesen Zustand unserer Regierung (und der davor), die den Arbeitsmarkt systematisch in Richtung chinesischer Verhältnisse umgebaut haben und damit 100 Jahre gewerkschaftliche Kämpfe zunichte gemacht haben.

Die Kritik hat der Regierung zu gelten und nicht einem einzelnen Unternehmen. Ein Unternehmen ist stets bestrebt die Kosten zu senken, und dabei reizt es die gesetzlichen Möglichkeiten aus soweit es geht. Nicht nur Amazon tut das. Auch die Telekom. Oder Zalando. Oder DHS. Oder Apple. Jedoch kommt niemand dieser Möchtegern-Protestler bei Facebook auf die Idee, bei denen auch zu kündigen. Ganz zu schweigen davon, ihre Kritik an die Regierung zu richten, die diesen unerträglichen Zustand überhaupt erst zugelassen hat. Oder an die Gewerkschaften, die sich haben korrumpieren und kaufen lassen.

Dieses ganze Gezeter gegen Amazon ist nichts weiter als stinkende, ignorante Heuchelei. Wollte irgendeiner von denen tatsächlich etwas ändern, würde er seinen Abgeordneten anschreiben, anders wählen und grundsätzlich sein Konsumverhalten ändern. Und das nervt mich schon ziemlich gewaltig.


19.02.2013 19:56 CC0 amazon idioten kritik Gesellschaft






Mal wieder die Endlers

Ja, die gibts auch noch :)

Bild: Endlers 1
Endlers 1 (Feb. 5, 2013, 9:03 p.m.)
[Tags: fische ] [Album: Aquarium ]
Bild: Endlers 2
Endlers 2 (Feb. 5, 2013, 9:03 p.m.)
[Tags: fische ] [Album: Aquarium ]

05.02.2013 21:02 CC0 aquarium endlers fische Aquarium






Quick monitoring script for commandline using google graph - Updated 18.10.2015 10:41

So, you need to setup a graph for something you maintain, for instance response time of a webserver, memory consumption of some process or open database handles. Fast.

You could use MRTG, if you've got it already running. But either way - to add a new graph there isn't really done fast. And what if you don't have MRTG? What about GNU Plot or Google Graph? Every tool like this needs handwork to be done before being able to produce usefull output. One needs more than the other.

Enter quickmon. This is a small script I wrote for the very purpose. It doesn't have any dependencies and therefore runs out-of-the-box. You supply it one or more shell commands and it generates a google graph page and a logfile where it maintains history. It is really not possible to create monitoring graphs any faster!

And as a plus, the tool itself doesn't require internet access. It can run anywhere, inside some protected DMZ or the like. Only the browser which is used to view the output page needs internet access to fetch the google graph JS-library. That's it.

So, first of all, grab a copy of the script from here.

Now, let's take a look at some examples:

quickmon.pl -n "google mx lookup responsetime" \
            -t "google millisecs" \
            -c "host -v -t MX google.com 8.8.8.8 | grep Received | awk '{print \$7}'" \
            -l

In this example we monitor the response time of googles nameserver (when asked for its mx-record) in milliseconds. As you can see, there's one -t and one matching -c parameter. -t tells us what we are actually monitoring and -c is the shell command to be executed. In this example we're using host -v which prints the responsetime of a query in milliseconds. We fetch this value using the grep + awk after the pipe. Here's the output:

Here's another example:

quickmon.pl -n "google webserver response" \
            -t "www.google.com" \
            -c "wget -4 -q -O /dev/null www.google.com" \
            -l

Note the difference to the previous one: we didn't put some grep + awk parser stuff into our shell command. If you do that, the script measures the time it takes to execute the command itself.

This is how it looks after some time:

How about having multiple items in a graph? No problem, you can pass multiple -t and -c parameters to the script. However, be careful to have always one -t for every -c. And: order matters.

quickmon.pl -n "webserver comparision" \
            -t "www.google.com"     -c "wget -4 -q -O /dev/null www.google.com" \
            -t "www.facebook.com"   -c "wget -4 -q -O /dev/null www.facebook.com" \
            -t "www.apple.com"      -c "wget -4 -q -O /dev/null www.apple.com" \
            -l

Ok, quite a long commandline. Watch the matching -t and -c parameters. And here's the output:

One last thing: You might have noticed the -l flag. If supplied, the script runs forever and executes the given commands once every second. That's enough for some quick graphing but sometimes you might need to create graphs for longer timescales, say some days or weeks. In such cases running once per second might be overkill. And executed this way, the script doesn't survive reboots. In such cases just add a cronjob, which executes the quickmon.pl script once every 5 minutes (or whatever you like) and leave the -l parameter. Example:

*/5 * * * * cd /home/user/tmp/ && /usr/local/bin/quickmon.pl -t "title" -c "command"

Beware the chdir call: quickmon.pl uses the current directory to write its logfile and the output page (index.html).

In case you want to take a look at a live sample, here you go: it is the webserver comparision described above, run every 5 minutes by cron.

Well. While this all might sound very cool, there's still one usecase where quickmon.pl could be too complicated. Let's recall: for every painted line in the output graph you have to provide a shell command which returns its value. What if you already have a source which returns such values all at once? Given the examples above it might look like we have to provide one -c parameter per value but each command has to split the same input source differently. That's odd. To say the least.

Take a look at this command output:

$ netstat -w 1 -I bge0 -q 1 
            input         (bge0)           output
   packets  errs idrops      bytes    packets  errs      bytes colls
         9     0     0        828          8     0       9108     0

We've entered the netstat command which printed some stats about a specific network interface. Wouldn't it be good to feed quickmon directly with that output? The good news is: it's possible! Here's a quickmon call which catches some of those values - in and out bytes - to generate a graph from it:

while :; do netstat -w 1 -I bge0 -q 1 | egrep -v "(input|packets)"; done \
     | quickmon.pl -t in-bytes -t out-bytes -p -n bge0 -f 3,6

There's a lot new stuff here, let's dig into it:

  • We're calling the netstat command inside an infinite while loop, because otherwise it doesn't print to stdout but to our controlling terminal (which quickmon doesn't catch). This is freebsd specific. Behavior maybe different on other OSes.
  • The egrep filters out the headings.
  • We provide only 2 titles using -t, because we catch only field #3 and #6 (count starts from 0) by using the -f option.
  • Option -p tells quickmon to watch a file. Since we didn't specify a filename, it uses STDIN, which is actually the output of our while loop.

And this is the output of the above after a while:

Nice, isn't it?

By default quickmon splits the input using whitespace. You might alter this behavior by supplying a different field-separator using the -F option.


Update 18.10.2015 10:41:

The script is now available on Github.

The switch -l now has an optional parameter, the time in seconds to wait between loops, a float (i.e. .1 or 2.5 would be legal)
Also, in pipe mode (-p) it's now possible to specify one title with a timestamp using format characters. So if your input file already contains a timestamp you can use that instead of generated ones.


04.02.2013 20:51 CC0 graph howto monitoring software Source






Der kleine Sexismus

Ist ja allerorten heuer viel zum Thema #aufschrei zu lesen. Eben im Mikrocontrollerforum fiel mir der Spruch hier auf:

Kommentare sind was für Mädchen

Auf den ersten Blick nur eine unbedeutende Kleinigkeit. Aber wenn man genauer drüber nachdenkt, insbesondere dass man selbst hier und da mal solche Sprüche gebracht hat.

Bild: was für Mädchen
was für Mädchen (Feb. 1, 2013, 9:44 p.m.)
[Tags: ] [Album: Screencaps ]

01.02.2013 21:41 CC0 aufschrei Gesellschaft






Modemtöne - jemand hat eine schöne Seite für die Geschichtsbücher hinzugefügt

Jeder, der schon in den 90ern online war, kennt diesen Sound, den das analoge Modem damals gemacht hat. Man wusste zwar, dass sich da die 2 Modems "unterhalten" über irgendwelche Verbindungsparameter, aber was genau die da reden - keine Ahnung.

Oona Räisänen hat sich der Aufgabe angenommen, das ganze mal zu visualisieren. Und WIE ihr das gelungen ist, ich bin völlig von den Socken.

Das waren noch Zeiten, hach! Was waren wir frei! Keine faschistischen Innenminister, keine Datensammler, keine Abmahner. Was ich nicht alles mit diesem Sound assoziiere :)

Sehr schön - dort in den Kommentaren gefunden - ist auch ein Chat-Transscript so einer Modemsession, auf modern gestylt:

Modem A: hey babe, you dtmf?
Modem B: u know it
Modem A: what u up 4 2nite? wanna v.8?
Modem B: i wanna ack u like my daddy net2phone use 2 ack me
Modem A: um ok... v.8 then
Modem B: lol jk, u comin?
Modem A: brt just gotta turn off echo suppressors n cancellers
Modem B: ok i wait
Modem B: my pcm is so modulated
Modem A: lol rly? u think u can handle V.90/V.92?
Modem B: D/A?
Modem A: ...D?
Modem B: wtf no, im not into that
Modem A: lol jk we can do V.42 LAPM if u want im down 4 nething
Modem A: up to 3429 o/c
Modem A: u know i give as good as i get, ne way u want it, loud or soft, high or low, fast or slow, i got all the time in the world 4 u babe, my clock source is internal
Modem B: of course no 3429. and same 4 me. except i might lose track of time, lol
Modem B: and honey if u with me we gon be makin sum NOISE
Modem B: 6db at LEAST u know how i like it
Modem A: lol i hear ya, 3200 all nite long, the way u get me goin maybe we even go 2 4800 lol
Modem A: set ur pre-emphasis filter params n put on that 1920 hz carrier frequency i got u
Modem A: im here baby
[SCRAMBLED]

Ich bin jedenfalls völlig begeistert!


01.02.2013 19:49 CC0 freiheit netz technik Gefunden






Unterschiedliche Django-Objekte nach gemeinsamen Kriterium sortieren

Dieses Blog läuft ja bekanntlich mit einer von mir selbst geschriebenen Django-App. Ich bin sehr zufrieden mit meinem Werk, aber eins hat mich immer gestört: wenn ich ein Update zu einem Posting geschrieben habe UND neue Bilder angehängt habe, wurden diese unzsammenhängend angezeigt (erst das Posting, dann alle Updates, dann alle Bilder). Wirklich doof.

Jetzt werden Bilder und Updates in zeitlicher Reihenfolge angezeigt, hier in Aktion zu bewundern.

Die Schwierigkeit dabei ist, dass es sich bei den Updates und Bildern um völlig verschiedene Objekte handelt, die - abgesehen davon, dass sie mit dem Posting verknüpft sind - nichts miteinander zu tun haben. Trotzdem kann ich beide nach einem gemeinsamen Kriterium, dem Erstellungsdatum, sortieren und in EINER for-Schleife anzeigen. Wie cool ist das denn?!

So guckt das im Django aus:

        def attachments(self):
                snippets = self.snippet_set.all()
                images   = self.image_set.all()
                both     = []
                both.extend(snippets)
                both.extend(images)
                both.sort(key=lambda x: x.date, reverse=False)
                return both

Der Trick dabei ist, sich eine Liste aus beiden Objektlisten zu erzeugen. Das muss man mit einer neuen Liste und extend() machen, weil das mit '+' nämlich nicht geht. Die Methode all() liefert nämlich keine Liste, sondern ein Queryset aus. Durch das both.extend() mache ich also aus 2 Querysets eines. Da beide Objekttypen das Attribute date haben, kann man dann danach sortieren.

Und so der entsprechende Teil im Template:

        {% for item in post.attachments %}
                {% if item.image %}
                        {% with image=item %}
                         ..
                        {% endwith %}
                {% else %}
                        {% with snippet=item %}
                        ..
                {% endif %}
         {% endfor %}

Um welche Art Objekt es sich jeweils handelt frage ich mit dem {% if item.image %} ab. Das geht, weil nur die Images bei mir das Attribut "image" haben und dieses ist immer befüllt (weil mandatory).

Hachmach...


01.02.2013 18:49 CC0 django python software Source