Downloading PDF Documents from Scribd

Are you also sometimes annoyed by only finding documents on and nowhere else? Furthermore this site is missing of a download or printing opportunity – at least there is no one for ordinary vitors.

Fortunately there is a little trick which might help you to still download a pdf: For mobile visitors using a mobile browser (tested with Opera Mini), there is a download button. You just have to:

  1. use Firefox
  2. Tell scribd untruly, that you are using Opera Mini
    • open a new tab, enter about:config in the address bar and go for it
    • accept the security hint
    • use the context menu to create a new string named general.useragent.override
    • set the value of this string to Opera/9.80 (J2ME/MIDP; Opera Mini/6.24288/25.729; U; en) Presto/2.5.25 Version/10.54
  3. visit the scribd page again and use the now appearing download button to reveive your pdf.
  4. you should reset this string afterwards again to an empty value

If you need this regularly, you can install the Firefox Agent Switcher Plugin for some automatization.


Nach dem Schwimmen

Nach dem Schwimmen

Es ist schon spät, ich fahre heim.
Bin auf den den Straßen ganz allein.

Die Müdigkeit, sie drückt mich nieder.
Es regnet außerdem schon wieder.

Das gelbe Straßenlampenlicht
durchdringt den dichten Nebel nicht.

Ich träume wach, und bin ganz still.
Denk’ an die eine, die ich will.

Und während ich noch an sie denke,
mein Rad ich über Scherben lenke.

Ganz kurz…
bin ich im Einklang mit der Welt.
Sie hat sich auf mich eingestellt.

Verfasst am 18. November 2010 und meiner damals vormaligen Freundin gewidmet.



When updating my only productive computer system to the latest opensuse version 12.1, I decided to give the feature rich, shiny new filesystem btrfs a try. It’s not yet so stable, but it is already delivered by all main distribution. Fedora actually wants to use it as default.

Up to now I have to evaluate this disission to be more risky than lucky. After something like two month, I experienced two filesystem corruptions. The first one hit my root-filesystem. I had to setup my system from scratch, because every write attempt on the partition ended with a kernel failure, most probably caused by the btrfs driver. Mounting the partition in read-only mode while using a Live-CD was the only way to do a late backup.

Yesterday I ran into btrfs problems again. I copied some photos to my hard disk. In the next moment, I got some weird kernel sys messages, that didn’t help me at all.

Message from syslogd@theta at Dec 9 17:45:00 ...
[Freitag, 9. Dezember 2011] [17:45:10] <saLOUt> kernel:[ 454.807770] Code: e9 8c fe ff ff 66 0f 1f 44 00 00 b8 ea ff ff ff e9 cf fe ff ff 48 89 de 4c 89 f7 89 04 24 e8 80 ec ff ff 8b 04 24 e9 b9 fe ff ff <0f> 0b 0f 0b 0f 1f 40 00 41 57 49 89 f7 41 56 41 55 41 54 55 53 

All apps accessing my picture btrfs subvolume were crashing.

After disabling the whole btrfs system by commenting the appropriate lines in my /etc/fstab file, I had a stable system again – just without any pictures.

Data Rescue

Luckily Chris Mason (#cmason) from #btrfs could help me to fix these problems without any loss of data!

A# simple btrfsck didn’t help me, because of a crash of the repair tool itself:

warning, start mismatch 48695640064 48695652352
block 48695652352 rec extent_item_refs 1, passed 1

No more output. That’s all. Chris told me to checkout some fresh code from his very own repo. When I did the checkout, the master was fdb6c04023.

git clone

After a reboot, I ran

make btrfs-zero-log

which went without any errors. After that I used the custom build btrfs-zero-log tool to do some btrfs magic, that I don’t understand.

./btrfs-zero-log [device]

After another reboot, I was able to mount my picture partition in read-only mode. I did a late backup again. When reading these files, one gets usually a lot of errors in /var/log/messages like this:

[ 4055.661622] btrfs csum failed ino 358 off 227975168 csum 4151547339 private 259191981

csum is the abbreviation for checksum. ino means inode, which is a kind of identifier for every file. To fix these errors, you have to find these files belonging to these inodes, deleting them and copy them back from your backup.

I wrote a small ruby script, which helps you finding the affected files


# string with error messages
error_messages = `dmesg | grep "found for inode"`
# list of integers
inode_list = error_messages.split("\n").map{|i| i.match(/inode (\d+).*/)[1].to_i}
# list of arrays of filenames
file_list ={|i| `find /mnt/test -inum #{i}`.split("\n")}

# require 'json'
#"/tmp/inode-files.json", "w") {|f| f << JSON.pretty_generate(file_list)}

puts file_list.flatten.uniq.sort.join("\n")

If you finally want to delete these files, you have to remount your partition in read-write mode.

At least for me, this walkthrough suggested by Chris resolved my problems.

Complete error log

Dec  9 11:38:03 theta kernel: [ 3235.664148] btrfs: free space inode generation (0) did not match free space cache generation (6403)
Dec  9 11:38:03 theta kernel: [ 3235.664152] btrfs: failed to load free space cache for block group 38818283520
Dec  9 11:38:34 theta kernel: [ 3266.367012] ------------[ cut here ]------------
Dec  9 11:38:34 theta kernel: [ 3266.367385] kernel BUG at /home/abuild/rpmbuild/BUILD/kernel-desktop-3.1.0/linux-3.1/fs/btrfs/extent-tree.c:5467!
Dec  9 11:38:34 theta kernel: [ 3266.368140] invalid opcode: 0000 [#1] PREEMPT SMP
Dec  9 11:38:34 theta kernel: [ 3266.368510] CPU 1
Dec  9 11:38:34 theta kernel: [ 3266.368653] Modules linked in: nls_iso8859_1 nls_cp437 vfat fat fuse af_packet ip6t_LOG xt_tcpudp xt_pkttype ipt_LOG xt_limit rfcomm bnep ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 ip6table_raw xt_NOTRACK ipt_REJECT iptable_raw iptable_filter ip6table_mangle nf_conntrack_netbios_ns nf_conntrack_broadcast nf_conntrack_ipv4 nf_defrag_ipv4 ip_tables xt_conntrack nf_conntrack ip6table_filter ip6_tables x_tables cpufreq_conservative cpufreq_userspace cpufreq_powersave acpi_cpufreq mperf microcode dm_mod mmc_block snd_hda_codec_hdmi snd_hda_codec_conexant arc4 uvcvideo videodev v4l2_compat_ioctl32 hdj_mod snd_rawmidi snd_seq_device ecb kvm_intel kvm btusb bluetooth sg joydev sdhci_pci sdhci iwlagn mmc_core mac80211 e1000e cfg80211 i2c_i801 pcspkr snd_hda_intel snd_hda_codec snd_hwdep snd_pcm iTCO_wdt iTCO_vendor_support xhci_hcd snd_timer snd_page_alloc mei(C) battery thinkpad_acpi rfkill tpm_tis tpm tpm_bios snd soundcore ac wmi autofs4 btrfs zlib_deflate thermal i915 drm_ kms_helper
Dec  9 11:38:34 theta kernel: r drm i2c_algo_bit processor button video thermal_sys
Dec  9 11:38:34 theta kernel: [ 3266.376473]
Dec  9 11:38:34 theta kernel: [ 3266.376585] Pid: 11081, comm: btrfs-endio-wri Tainted: G         C  3.1.0-1.2-desktop #1 LENOVO 4290W4H/4290W4H
Dec  9 11:38:34 theta kernel: [ 3266.377390] RIP: 0010:[<ffffffffa01444bf>]  [<ffffffffa01444bf>] alloc_reserved_file_extent+0x24f/0x270 [btrfs]
Dec  9 11:38:34 theta kernel: [ 3266.378147] RSP: 0018:ffff8800cce2fb40  EFLAGS: 00010282
Dec  9 11:38:34 theta kernel: [ 3266.378535] RAX: 00000000ffffffef RBX: ffff8800cd1d90a0 RCX: 0000160000000000
Dec  9 11:38:34 theta kernel: [ 3266.379060] RDX: 0000000000000008 RSI: 0000000000000001 RDI: ffff8801ad7fb130
Dec  9 11:38:34 theta kernel: [ 3266.379613] RBP: 00000000000000b2 R08: 0000000000000001 R09: 0000000000000001
Dec  9 11:38:34 theta kernel: [ 3266.380164] R10: ffff8800c99928e8 R11: 000000000000004e R12: 0000000000000000
Dec  9 11:38:34 theta kernel: [ 3266.380716] R13: ffff8800cce2fc0f R14: ffff8800c99928e8 R15: ffff88020f367400
Dec  9 11:38:34 theta kernel: [ 3266.381267] FS:  0000000000000000(0000) GS:ffff88021e240000(0000) knlGS:0000000000000000
Dec  9 11:38:34 theta kernel: [ 3266.381891] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
Dec  9 11:38:34 theta kernel: [ 3266.382334] CR2: 00007fbdfb6bc440 CR3: 0000000001c05000 CR4: 00000000000406e0
Dec  9 11:38:34 theta kernel: [ 3266.382885] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
Dec  9 11:38:34 theta kernel: [ 3266.383436] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Dec  9 11:38:34 theta kernel: [ 3266.383987] Process btrfs-endio-wri (pid: 11081, threadinfo ffff8800cce2e000, task ffff8800d447a580)
Dec  9 11:38:34 theta kernel: [ 3266.384693] Stack:
Dec  9 11:38:34 theta kernel: [ 3266.384844]  ffff88020f51d800 ffff880200000035 ffff8802057d4000 0000000100000001
Dec  9 11:38:34 theta kernel: [ 3266.385445]  8000000000000c16 0000000000000000 0000000000000103 0000000000000166
Dec  9 11:38:34 theta kernel: [ 3266.386045]  0000000000001000 0000003500000a4c ffff88010c730000 ffff8800c99928e8
Dec  9 11:38:34 theta kernel: [ 3266.386645] Call Trace:
Dec  9 11:38:34 theta kernel: [ 3266.386853]  [<ffffffffa014505e>] run_delayed_data_ref+0x10e/0x1c0 [btrfs]
Dec  9 11:38:34 theta kernel: [ 3266.387401]  [<ffffffffa0147978>] run_clustered_refs+0xc8/0x220 [btrfs]
Dec  9 11:38:34 theta kernel: [ 3266.387928]  [<ffffffffa0147b95>] btrfs_run_delayed_refs+0xc5/0x210 [btrfs]
Dec  9 11:38:34 theta kernel: [ 3266.388482]  [<ffffffffa0158590>] __btrfs_end_transaction+0x90/0x340 [btrfs]
Dec  9 11:38:34 theta kernel: [ 3266.389024]  [<ffffffffa015f5d5>] btrfs_finish_ordered_io+0x2a5/0x340 [btrfs]
Dec  9 11:38:34 theta kernel: [ 3266.389604]  [<ffffffffa0173310>] end_bio_extent_writepage+0x120/0x170 [btrfs]
Dec  9 11:38:34 theta kernel: [ 3266.390205]  [<ffffffffa017fcb1>] worker_loop+0xa1/0x2a0 [btrfs]
Dec  9 11:38:34 theta kernel: [ 3266.390714]  [<ffffffff81075c8e>] kthread+0x7e/0x90
Dec  9 11:38:34 theta kernel: [ 3266.391093]  [<ffffffff815a5474>] kernel_thread_helper+0x4/0x10
Dec  9 11:38:34 theta kernel: [ 3266.391550] Code: 20 8b 94 24 a0 00 00 00 48 8b 7c 24 10 48 81 c6 86 00 00 00 e8 83 90 02 00 e9 6c ff ff ff 66 0f 1f 44 00 00 b8 f4 ff ff ff eb 90 <0f> 0b 49 8b 55 09 49 8b 75 00 48 c7 c7 20 6e 1a a0 31 c0 e8 0e
Dec  9 11:38:34 theta kernel: [ 3266.393481] RIP  [<ffffffffa01444bf>] alloc_reserved_file_extent+0x24f/0x270 [btrfs]
Dec  9 11:38:34 theta kernel: [ 3266.394093]  RSP <ffff8800cce2fb40>
Dec  9 11:38:34 theta kernel: [ 3266.597905] ---[ end trace 3233c7c540de8b82 ]---
Dec  9 11:38:34 theta kernel: [ 3266.597908] note: btrfs-endio-wri[11081] exited with preempt_count 1


Als ich gefragt wurde, ob ich am Heiligen1 Abend 2010 den Weihnachtsmann vertreten würde, habe ich mir gleich überlegt, auch ein Gedicht vortragen zu wollen, um die kleinen Kinder ein wenig anzuspornen.

Nachdem der Vorsatz rechtzeitig gefasst war, hat mir jedoch etwas Zeit zur Realisierung gefehlt. Ja, der Reim ist nicht perfekt, aber hey: Die Kinder haben ja auch keine Ahnung.

Problematischer war dann noch die Präsentation. Die Vertretung des Weihnachtsmanns war viel zu aufgeregt – war die Rolle doch vollkommen neu. So ein Mist: Ich hatte damals ein Blackout. :(

Ich bin jetzt beim Sortieren wieder auf den Text gestoßen und veröffentliche ihn hier unter der CC BY-NC-SA-Lizenz, damit es nicht ganz umsonst war. Auf Namensnennung (BY) mag bei eurem Auftritt verzichtet werden. Sonst würde schließlich eure Tarnung als Weihnachtsmann auffliegen. Toll nicht? Ich habe echt an alles gedacht!


Von Himmelspforte froh und munter,
fahr’ ich mit dem Schlitten runter.

Doch meine Rentiere 12 Stück,
die lass ich im Wald zurück.

Aber mein Sack, der ist so schwer,
ganz allein’ trag’ ich ihn her.

Ich bin schon alt, mich schmerzt der Rücken,
möcht’ ich euch mit Gaben nun entzücken.

Erlaubet mir zuvor zu fragen,
kann ich was zum sitzen haben.

Die Kinder beschenke ich besonders gerne,
seh’ ich sie doch immer aus der Ferne.

Glaubt mir ja nicht, ich wüsste nicht Bescheid,
ob ihr auch immer lieb und artig seid.

  1. Für mich ist dieser Abend natürlich nicht heilig! ↩︎

Kubeplayer running on KDE Plasma Active powered ExoPC tablet

Hello Planet KDE, hello RubyCorner!

Much time has passed since i wrote my previous blog post about Kubeplayer. Things doesn’t change so much, but nowadays Kubeplayer is quite stable and doesn’t crash anymore. :wink:

After a lot of difficulties I got Kubeplayer packaged for opensuse. It’s ready to install with only one click in the case you are using openSuSE 11.4—thanks to the open build service.

Before delivering any further details, you may want to see the video demonstration on how Kubeplayer performs using Meego and KDE Plasma Active.

If you don’t like watching the video using Youtube, you can download the webm file directly.

How To

If you want to turn your ExoPC into a Youtube-Player, too, here is the way to go:

That was the easy part. The rest is quite hard, due to the fact, that I didn’t found the ruby KDE language bindings. So maybe it is easier to use the opensuse based Plasma Active Installation.

  • Try to compile smokegen, smokeqt, smokekde, qtruby and korundum

Because the KDE Plasma Active team doesn’t seem to use KDE vanilla and there might be some other reasons, too, it is quite hard to do that. I had to monkey patch (commenting) a lot of files.

The installation of Kubeplayer is again quite simple, as you don’t have to build anything, but to meet the conventions, you can use cmake to copy the files to the right place. By now, the Kubeplayer repo is in playground.

git clone git://
cd kubeplayer
git checkout -t -b tablet origin/tablet
make # nothing happens
sudo make install

Next Steps

There are plenty different tasks yet to do:

  • Up to now there are no packages for any other distro than opensuse. It would be awesome if someone could help me to build packages for other distros (using the openbuild service), too.
  • Do you have ideas which other video platforms could be added? I checked vimeo, but it seems to be complicated. I didn’t found any other app doing something similar with youtube. Weird.
  • Probably the interface could be made more touchfriendly by using some QML. I have absolutely no experience with that. Maybe someone can propose an idea how to make the list view be more slide friendly (flickable).
  • To be able to deliver any ruby-KDE application to the not so experienced KDE hacker, it would be necessary to package the kdebindings for Meego.

So if you can help me, please get in contact!