Fachbücher als eBook

Neuerdings habe ich ja einen eBook-Reader und bin auch sehr zufrieden damit. Nun hab ich angefangen, mir neben Romanen auch mal ein paar Fachbücher auf das Teil zu laden, zum Beispiel das Arduino Cookbook. Und ich muss sagen, DAS ist eine ganz schlechte Idee gewesen.

Einen Roman liest man ja üblicherweise linear von vorn nach hinten durch und muss dazu im Reader lediglich ab und zu auf "next page" klicken. Bei einem Fachbuch wie dem Arduino Cookbook jedoch sucht man bestimmte Dinge. Ich gehe also ins Inhaltsverzeichnis. Das allein beansprucht auf dem Reader schon knapp 10 Seiten. Dort finde ich dann irgendein Kapitel was ich gerade lesen will, es ist - sagen wir - auf Seite 285. Nun muss ich das Optionsmenü aufmachen, "Zu Seite gehen" auswählen, dort ist so ein Schieberegler, wo man mehr oder weniger genau zu einer bestimmten Seite scrollen kann, und bis 285 scrollen.

Aber das ist dann nicht das gesuchte Kapitel, weil die Seitenangaben im Inhaltsverzeichnis nicht mit denen im Reader übereinstimmen. Ich muss dann also noch ein paar dutzend mal hin und her scrollen, bis ich bin, wo ich hinwollte. Endlich bin ich da und es stellt sich heraus: langweilig, kenn ich schon. Also zurück zum Inhaltsverzeichnis, wieder Optionsmenü, "Zu Seite gehen", rumscrollen, hinspringen, wieder falsch gelandet, wieder hin und her gehen, bis ich in dem Teil des Inhaltsverzeichnisses bin, wo ich vorher war.

Und so weiter.

In einem gedruckten Buch öffne ich das Inhaltsverzeichnis, halte den Daumen rein, gehe zur gewünschten Seite (was allein schon gefühlte hundertmal schneller geht als beim Reader) und guck nach. Falls langweilig, wieder die Stelle im Inhaltsverzeichnis aufschlagen, was in etwa 0.1 ns erledigt ist, da dort mein Daumen noch drinnen gesteckt hatte. Und im Lauf der Zeit sammeln sich dann auch diverse Eselsohren an von den Stellen, die mir wichtig waren. Oder wenn ich konkret am Elektronikbasteln bin, kann ich das Buch neben den Lötkolben legen und Löten und Nachschlagen gleichzeitig. Mit dem Reader wäre das ein Ding der Unmöglichkeit.

Insofern werde ich weiter echte gedruckte Bücher kaufen, und zwar immer dann, wenn es sich um Fachbücher handelt. Das Problem dabei ist allerdings gar nicht mal das grundsätzliche Konzept eBook-Reader, es ist das Format, in dem die Bücher üblicherweise vorliegen. Meist als PDF (meins war ein PDF). Wenn die Einträge im Inhaltsverzeichnis Links wären, denen man auf einem Reader auch folgen kann, wäre das schon die halbe Miete. Und wenn es dann auf jeder Seite noch einen Link zurück gäbe zu der Stelle im Inhaltsverzeichnis, wo das Kapitel verlinkt ist, wäre es perfekt.

Die Technologie dafür - Links (!) - gibts schon ein bischen länger. Warum es das in eBooks nicht gibt, ist mir ein Rätsel. Vielleicht ist das beim epub Format anders, das ist HTML. Aber nicht alles gibt es halt als epub. Man kann ein PDF zwar zu epub konvertieren (hab ich gemacht zwecks Lesbarkeit), aber dann enthält es deswegen immer noch keine Links.

17 October 2012 | #literatur

 

Felix Baumgartner Sonic Freefall Live

Grad bei RTL haben sie angekündigt, den Schallmauersprung live zu übertragen. Aber statt dessen kam irgendein Scheiss. Zum Glück haben wir das Internet Ihr Deppen: http://www.ustream.tv/cbsnews. Da kann man live zuschauen. Wie cool ist das denn?! Witzigerweise befindet sich Mission Control in Roswell, New Mexico :)

2012-10-14 - To Ground:

2012-10-14 - Landing:

2012-10-14 - Felix Mom:

2012-10-14 - Jump:

2012-10-14 - Rampe:

2012-10-14 - Foots Outside:

2012-10-14 - Ausstieg:

2012-10-14 - Door Opens:

2012-10-14 - Spaceview:

2012-10-14 - Helium Ballon:

2012-10-14 - Mission Control CBS:

2012-10-14 - Capsule Outside View:

2012-10-14 - Baumgartner Inside:

Update 2012-10-14:

Rekord geschafft! Klasse!<p>Update 2012-10-14:</p>Er steht jetzt draussen auf der Rampe!<p>Update 2012-10-14:</p>Ah, bei N-TV kommt es auch live<p>Update 2012-10-14:</p>Druckausgleich, man hört es zischen und der Luftdruck geht langsam runter.<p>Update 2012-10-14:</p>“We’re getting serious now, Felix”<p>Update 2012-10-14:</p>Pfft, die sind gründlich :)<p>Update 2012-10-14:</p>Absprunghöhe erreicht, die gehen die Checkliste durch. Wow, voll aufregend!

14 October 2012 | #science

 

Krimskrams, Goggelmoggel und Muggefugg

Update 2012-10-24:

Wie L<hier|/blog/2012/10/11/183/krimskrams-goggelmoggel-und-muggefugg/#update-2012-10-11-20:05> bereits berichtet, habe ich ja auch bei L<Humble Bundle|https://www.humblebundle.com/> teilgenommen. Wie Heise nun L<berichtet|http://heise.de/-1735699>, hat die Aktion zu Einnahmen von 1,2 Millionen US-Dollar geführt, die von ca 84.000 Käufern eingenommen wurden. Klasse!.<p>Update 2012-10-14:</p>L<How much do cats actually kill?|http://theoatmeal.com/comics/cats_actually_kill><p>Update 2012-10-14:</p><blockquote> Ein Bürger braucht keine rechtliche Grundlage dafür zu handeln. Nur staatliches Handeln bedarf einer ausdrücklichen rechtlichen Grundlage.</blockquote> Thomas Stadler<p>Update 2012-10-11:</p>L<Sie haben Krebs|http://wirres.net/article/articleview/6521/1/6/><p>Update 2012-10-11:</p>Hm. Pocketbook wird vom Rechner nicht erkannt. OS zu alt zum Updaten. Micro-SD-Adapter-Stick hab ich nicht hier. Was tun? Karte ins Handy getan, eBooks auf den Server geladen, vom Handy aus runtergeladen, auf die Karte geschoben, Karte in den Reader und ab dafür. Warum einfach?<p>Update 2012-10-11:</p>L<7 Bücher zum Preis von 12 Euro|https://www.humblebundle.com/>. SO verkauft man eBooks! Und nicht wie hierzulande mit Buchpreisbindung für 20-30 Euro pro Datei!</p><p>Klick. Deal. Download. Sehr schön, so muß das..<p>Update 2012-10-11:</p><h2>Weil die Klügeren ständig nachgeben, regieren die Dummen diese Welt!</h2>

11 October 2012 | #gefunden

 

Plugin Interface für Config::General

Meistens sind Bugreports eher lästig. Zum einen verursachen sie Arbeit und zum anderen erinnern sie den Entwickler mit zuverlässiger Regelmäßigkeit daran, dass niemand perfekt ist, auch man selbst nicht. Und dass die besten Unittests niemals alle Anwendungsfälle abdecken können.

Aktuell habe ich für das Perl Modul Config::General einen Bugreport, der eigentlich ein Featurerequest ist: rt.cpan.org#79694. Aber die Idee an sich finde ich überaus charmant: Plugins. Immer wieder kommen nämlich Leute daher, die gerne dieses Spezialverhalten brauchen oder jenes Spezialverhalten. Sofern ich das als sinnvoll erachte und es machbar ist, implementiere ich dann einen entsprechenden Parameter, der das Verhalten einschaltet und programmiere es in das Modul ein.

Das ist schön für den OP, aber es bläht mit der Zeit den Code auf. Tatsächlich bestehen sicher über 80% des Moduls nur aus solchen implementieren Feature-Requests. Entsprechend viele Parameter hat das Modul, die sich zu allem Unglück auch gerne mal in die Quere kommen, weshalb es weitere Parameter und Code gibt, um das zu verhindern oder umgehen zu können.

Man ahnt schon, wo das hinführen wird: ins Chaos.

Aber mit Plugins kann ich mir das "Problem" immer abgedrehterer Spezialwünsche elegant vom Hals halten. Der jenige kann sich dann sein Spezialverhalten einfach selber bauen. Womöglich kann ich auch sowas wie eine "Rezeptesammlung" der besten Plugins anlegen oder so.

Hier also mein Kommentar dazu im erwähnten Bugreport.

Well. Now I started to add some kind of plugin interface to the module. This way one could change the modules behavior in any way. This would solve your problem as well, I think.

Here's some first shot at it:

#!/usr/bin/perl
use lib qw(blib/lib);
use Config::General qw(ParseConfig);
use Data::Dumper;

sub ck {
  my($file, $base) = @_;
  print "_open() tries $file ... ";
  if($file =~ /blah/) {
    print "ignored\n";
    return (0);
  }
  else {
    print "allowed\n";
    return (1, @_);
  }
}

my %c = ParseConfig(
              -IncludeGlob => 1,
              -UseApacheInclude => 1,
              -ConfigFile => shift,
              -Plug => { pre_open => *ck }
);

print Dumper(\%c);

Output:

_open() tries cfg ... allowed
_open() tries x/*.conf ... allowed
_open() tries x/1.conf ... allowed
_open() tries x/2.conf ... allowed
_open() tries x/blah.conf ... ignored
$VAR1 = {
          'niemand' => '2',
          'hallo' => '1'
        };

However, I'll need some time to figure out which are the best places for hooks to add. But you'll get the picture.

10 October 2012 | #source

 

error: 'TWSR' undeclared (first use in this function)

Momentan bin ich ja am überlegen, in meinen Terrarium Controller "Terraduino" eine Failsafe-Platine einzubauen. Dafür bin ich jetzt am experimentieren, wie man am Attiny85 (den hab ich da), I2C spricht. Ich hab mir also die "TWI/I2C library for Wiring & Arduino" zur Brust genommen, mir einen Attiny-Compatibility-Layer besorgt, den Kram zusammengehackt und dann mit dem avr-gcc versucht zu compilieren. Das kam dabei heraus:

env -P/usr/local/bin:/usr/bin - avr-gcc -g -mmcu=attiny85 \
  -Wall -Wstrict-prototypes -Os -mcall-prologues -funsigned-char \
  -funsigned-bitfields -fpack-struct -fshort-enums -Wundef -I. \
  -I../at/tiny/cores/tiny -DARDUINO=101 \
  -DF_CPU=16000000L -Os -c twi.c -o twi.o
twi.c: In function 'twi_init':
twi.c:80: error: 'TWSR' undeclared (first use in this function)
twi.c:80: error: (Each undeclared identifier is reported only once
twi.c:80: error: for each function it appears in.)
twi.c:80: error: 'TWPS0' undeclared (first use in this function)
twi.c:81: error: 'TWPS1' undeclared (first use in this function)
twi.c:82: error: 'TWBR' undeclared (first use in this function)
twi.c:90: error: 'TWCR' undeclared (first use in this function)
twi.c:90: error: 'TWEN' undeclared (first use in this function)
twi.c:90: error: 'TWIE' undeclared (first use in this function)
twi.c:90: error: 'TWEA' undeclared (first use in this function)
[..]

Tja. Und dann habe ich mich praktisch zu Tode gegoogelt. Verursacht wird das Ganze weil die entsprechenden Makros fehlen. Zunächst dachte ich, die fehlen, weil auf irgendeine magische Weise die Datei avr/iotn85.h nicht included wurde. Also hab ich sie included und bekam noch mehr komische Fehlermeldungen:

Attempt to include more than one  file.
Include  instead of this file.

Natürlich hat das nichts gerbacht, zumal die avr/io.h bereits included war. Langer Rede, kurzer Sinn: letzlich habe ich herausgefunden, dass der Attiny85 halt keinen TWI Support hat. Somit sind die entsprechenden Macros nicht definiert und daher kamen die Fehler.

Zum Glück hat der Attiny85 aber USI Support eingebaut und dafür gibt es auch eine I2C Slave Library. Runtergeladen, Eingebunden und den avr-gcc damit gefüttert: Läuft.

Sehr schön :)

10 October 2012 | #source