The latest posts in full-text for feed readers.
Yesterday I purchased an ebook from buecher.de, Corvus by Neal Stephenson. Apart from the water mark file it contains advertisements that take half of the size of the ebook file.
The DRM-free .epub file is 3.8 MiB in size. It is a zip file, and the unzipped contents are 6 MiB.
There are a lot of files in the folder OEBPS/BICMediaMarketing/, and their size sums up to 2.98 MiB. The non-BIC files are 3.04 MiB. Nearly 50% of the ebook's size are advertisements :(
Similar to ads bloating websites and making them so unusable that we have to use ad blockers, advertisements in ebook files waste bytes on our hard disks and make downloads slower.
I know who get electronic books without adverts: Pirates.
Similar to pirates having a
much better movie experience
than people buying and playing DVDs.
2048 2023-10-12 19:11 OEBPS/BICMediaMarketing/marketing.css 2907 2023-10-12 19:11 OEBPS/BICMediaMarketing/mp1.xhtml 763 2023-10-12 19:11 OEBPS/BICMediaMarketing/lastpage.xhtml 162174 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/253EF476A2ED49549DED6D5B26C0EA1A.xhtml 859 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/336E6DD3E68F4990B1D19F3CA30C4990.xhtml 623 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/6FE2556344D849B281E012E50151547D.xhtml 1112 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/9B8E49F3338942609923919A284CB82E.xhtml 1009 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BAED857E61C049ECB974C479521A9207.xhtml 1025293 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/cover.jpg 748 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/cover.xhtml 2958 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/DA9C6990BEF64CE68BF0407505CF793F.xhtml 484 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/E8719B7E1C4B4C418F61C704A8FD8134.xhtml 721 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/toc.ncx 10054 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/70653622D0534CC6B6C67CBE13E33104.xhtml 1548 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/Amazon.gif 1191 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/Apple.gif 1397 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/Google.gif 10740 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/Kobo.JPG 2517 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/tolino.gif 20577 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/Kostenlos_reinlesen.gif 45514 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/Kostenlos_reinlesen.PNG 60808 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/Kostenlos_reinlesen_klein.png 8724 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/button--reinlesen--color.png 5155 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/button--zumshop--color.png 46701 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/Zur_Bestellung_mit_einem_Klick_50.png 6050 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/button--one-click--color.png 9294 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/Kostenlos_reinlesen2.png 1712 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/BICMediaMarketing/marketing.css 3582 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/image/153C113ED16D44E4B456D68D5AC45E41.jpg 3914 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/image/372C80CDB20A44AE86BA05250A1FB430.jpg 3175 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/image/4451B938ADFD4EA89F1F71CEC775730C.jpg 3172 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/image/5C5B46C79F5C45128F4142D96EA0DAEA.jpg 9272 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/image/F6C0DD5F607649E282DA83BCBB0D67DA.jpg 77824 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/font/AGaramondPro-Bold.otf 94208 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/font/AGaramondPro-Italic.otf 126976 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/font/AGaramondPro-Regular.otf 73728 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/font/FuturaLTPro-Book.otf 106496 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/font/HelveticaLTPro-Oblique.ttf 106496 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/font/HelveticaLTPro-Roman.ttf 16357 2023-10-12 19:11 OEBPS/BICMediaMarketing/9783641300852_shortened/OEBPS/css/idGeneratedStyles.css 37278 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/9783641300852_front.jpg 757076 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/DejaVuSans.ttf 1548 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/Amazon.gif 1191 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/Apple.gif 1397 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/Google.gif 10740 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/Kobo.JPG 2517 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/tolino.gif 20577 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/Kostenlos_reinlesen.gif 45514 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/Kostenlos_reinlesen.PNG 24354 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/mehr_zum_buch.png 8724 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/button--reinlesen--color.png 5155 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/button--zumshop--color.png 9294 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/Kostenlos_reinlesen2.png 145531 2023-10-12 19:11 OEBPS/BICMediaMarketing/BICMediaMarketing/rh_bg640_6.jpg
I chained together some command line tools to get the size.
$ unzip -l Stephenson_Corvus_9783641249878.epub\
| head -n-2 | tail -n +4\
| grep BICMedia\
| sed 's/^ *//' | cut -d' ' -f1\
| xargs | sed 's/ /+/g' | bc
3129777
$ unzip -l Stephenson_Corvus_9783641249878.epub\
| head -n-2 | tail -n +4\
| grep -v BICMedia\
| sed 's/^ *//' | cut -d' ' -f1\
| xargs | sed 's/ /+/g' | bc
3193311
Published on 2024-04-24 in bigsuck, books
Die Leipziger Verkehrsbetriebe verkaufen weiterhin Werbeplätze in den Haltestellendurchsagen der Straßenbahnen, und diese sind viel schlimmer - störender - geworden.
Während es 2021 auf der Linie 10 und 11 vom Hauptbahnhof in Richtung Markkleeberg nur einzelne Werbeplätze waren, ist jetzt bis zum Connewitzer Kreuz fast jede Haltestelle mit Werbung zugepflastert:
Das ganze ist ziemlich nervig und stört sehr beim Lesen.
Published on 2024-04-24 in bigsuck, kundeistkönig
Ich war im Podcast "Besser Wissen" von Golem.de und habe mit Martin Wolf in der Folge Die OUYA lebt! über die OUYA, deren Untergang und die Rettung geredet.
Siehe auch: Initialer Blogpost, alle OUYA-Blogposts und ouya.cweiske.de
Published on 2024-04-05 in ouya
Es ist das Jahr 2024, 26 Jahre nach der Standardisierung von IPv6. Die 1blu RootServer unterstützen kein IPv6, wie auch die meisten anderen Produkte bei 1blu. Traurig.
Der Support meint:
Wir bedauern Ihnen mitteilen zu müssen, dass IPv6 bei Ihrem Produkt aktuell noch nicht unterstützt wird. Unsere Technik arbeitet bereits daran dies zu ermöglichen. Bitte haben Sie Verständnis, dass wir Ihnen jedoch noch keinen genauen Termin nennen können.
Siehe auch:
Published on 2024-03-05 in bigsuck, network
I'm using a Fairphone 4 smart phone, running the MicroG-enabled LineageOS instead of the default software (ROM).
Unfortunately, the phone has several shortcomings:
Sometimes the touch screen triggers scrolls, swipes and zoom gestures without anyone touching it.
Thousands of FP4 users had this problem, and it was fixed in the official Fairphone software version Fairphone OS version B.086:
Ghost touches: an issue that causes the user interface to move or jump without touching the screen.
Unfortunately the fix is not available on LineageOS 20 (2024-01-05), which means I still experience the problem.
I once disassembled the phone, "cleaned" the display contacts by blowing onto it and re-assembled it. Afterwards the ghost touches appeared less often.
Enabling "touch visualization" in the Android developer settings gave me this screenshot of ghost inputs:
Sometimes the touch screen does not work (does not recognize touches) when the phone is lying flat on a table or my lap. When touching the frame it becomes responsive again.
Other people also reported this problem:
All we know is that there is some empirical evidence that the FP4’s touchscreen now requires the phone to be connected to some larger conductive body to reliably work – Either the user also touching the phone’s chassis, or the phone being connected to something else by its USB cable (like while charging it).
KurtF, 2023-08-26, Software update: FP4.SP2J.B.086.20230807
The Fairphone 3 already had this problem:
Seit ich das FP3+ habe funktioniert das Touch Display nicht,
wenn ich es auf den Tisch lege.
Wenn ich es in die Hand nehme, ist alles in Ordnung.
Lotta_Hund, 2021-05-06,
FP3+ Touch Display funktioniert nicht, wenn es liegt
I can't listen to podcasts via the Fairphone 4's built-in speakers because the sound is awful. My ring tone and message notification sounds also sound very tinny.
This hardware problem is known and acknowledged by the Fairphone developers:
Time to call it. It’s a hardware problem that we could mitigate in software by artificially reducing the volume of the top speaker. We believe that a blanket volume reduction will be perceived negatively by the majority of users, so we opted to leave it as it is.
The workaround described above (Accessibility Settings > Mono > balance all the way to the left) works in most cases. [...]
We’ve learned a lot from this investigation and we’ll use these lessons when designing future products.
Yasen_Tomov, 2023-06-08, Check for and replace blown speaker
For me the workaround is to use the Android accessibility settings to downmix all sounds to mono and move them to the right speaker (bottom of the phone), completely bypassing the right speaker (top of the phone).
I love to use SkyMap (F-Droid) to see which stars are visible in the sky at night.
Unfortuantely the compass on the Fairphone 4 is so bad that the map just jumps around and shows a totally different direction when rotating the phone for a couple of degrees.
As usual, other people have the same problem:
In almost all cases, the orientation error ranges from 45 to 180 degrees.
ChristianH, 2023-01-25, FP4: The compass is unreliable
Moving the phone in a "8"-pattern several times while Skymap or the compass app is open did improve accuracy quite a bit, but I have to recalibrate every time I use Skymap.
Published on 2024-02-25 in android, hardware
The OUYA's servers were shut down in 2019,
and Google shut down the servers for its Stadia
game console in
january 2023.
I thought it would be cool to use the controller of one dead console
on a resurrected dead gaming console :)
The Stadia controllers did connect directly to Google's internet servers via WiFi and only used Bluetooth for initial setup. After shutdown, Google provided a website that let you install a controller firmware update, finally making the controller a standard Bluetooth one.
The Stadia controller only supports Bluetooth Low Energy
(BLE).
The OUYA
contains
a AzureWave AW-NH660 chipset that is based on BCM4330,
whose datasheet says it is
forward-compatible with the impending Bluetooth Low Energy operating mode
.
Android supports BLE
starting from version 4.3:
Bluetooth Low Energy (BLE), available in Android 4.3 and later, creates short connections between devices to transfer bursts of data
The OUYA runs Android 4.1, so you cannot use BLE controllers on an OUYA.
The Stadia controller has a USB-C port. Connecting it to the OUYA's own USB-A port gives you a partially working controller: The d-pad, right thumb stick and L2+R2 do not work at all - only the left thumb stick works.
A custom key layout file is needed, just as I did before with a playstation controller.
Connect the controller via USB to your Android device and then run getevent -i in a terminal, e.g. via adb shell:
$ getevent -i
add device 2: /dev/input/event0
bus: 0003
vendor 18d1
product 9400
version 0111
name: "Google LLC Stadia Controller rev. A"
location: "usb-tegra-ehci.2-1/input1"
id: "99200YCAC2LJ5L"
version: 1.0.1
events:
KEY (0001): 0072 0073 00a4 0130 0131 0133 0134 0136
0137 013a 013b 013c 013d 013e 0140 0141
0142 0143
ABS (0003): 0000 : value 0, min 1, max 255, fuzz 0, flat 15, resolution 0
0001 : value 0, min 1, max 255, fuzz 0, flat 15, resolution 0
0002 : value 0, min 1, max 255, fuzz 0, flat 15, resolution 0
0005 : value 0, min 1, max 255, fuzz 0, flat 15, resolution 0
0009 : value 0, min 0, max 255, fuzz 0, flat 15, resolution 0
000a : value 0, min 0, max 255, fuzz 0, flat 15, resolution 0
0010 : value 0, min -1, max 1, fuzz 0, flat 0, resolution 0
0011 : value 0, min -1, max 1, fuzz 0, flat 0, resolution 0
MSC (0004): 0004
input props:
<none>
Here we see that the controller has 18 buttons (keys) and 8 axes.
Now run getevent without parameters, press the buttons and axes and make notes of their IDs:
$ getevent
[...]
/dev/input/event1: 0004 0004 00090001
/dev/input/event1: 0001 0130 00000001
/dev/input/event1: 0003 0000 0000007f
/dev/input/event1: 0003 0001 0000007f
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0004 0004 00090001
/dev/input/event1: 0001 0130 00000000
/dev/input/event1: 0003 0000 0000007c
/dev/input/event1: 0003 0001 0000007d
/dev/input/event1: 0000 0000 00000000
Here button A was pressed and released - it has the Linux key code 0x130. Doing that for all the buttons gives us this list:
A 0x130 B 0x131 X 0x133 Y 0x134 ... 0x13a === 0x13b L1/LB 0x136 R1/RB 0x137 L3 0x13d R3 0x13e Stadia 0x13c
Now do the same for the axes:
D-Pad left-right 0010 up-down 0011 Left stick left-right 0000 up-down 0001 Right stick left-right 0002 up-down 0005 Left trigger 000a Right trigger 0009
And this is all the information needed to write the key layout file:
# Google Stadia Controller via USB key 0x130 BUTTON_A key 0x131 BUTTON_B key 0x133 BUTTON_X key 0x134 BUTTON_Y #L1 key 0x136 BUTTON_L1 #R1 key 0x137 BUTTON_R1 #L3 Stick key 0x13d BUTTON_THUMBL #R3 Stick key 0x13e BUTTON_THUMBR #Stadia symbol key 0x13c HOME #=== key 0x13b MENU #... key 0x13a BACK #D-pad axis 0x10 HAT_X axis 0x11 HAT_Y #Left stick axis 0x00 X axis 0x01 Y #Right stick axis 0x02 Z axis 0x05 RZ axis 0x0a LTRIGGER axis 0x09 RTRIGGER
Copy that file into /system/usr/keylayout/:
$ adb push Vendor_18d1_Product_9400.kl /sdcard/
$ adb shell
$ su
$ mount -o remount,rw /system
$ mv /sdcard/Vendor_18d1_Product_9400.kl /system/usr/keylayout/
Simply unplugging and replugging makes Android load the custom key layout file instead of Generic.kl, and all buttons work.
8BitDo sells the USB Wireless Adapter 2, which bridges Bluetooth controllers to USB ports with the added benefit of letting you customize the button mappings. It supports Bluetooth Low Energy and - since firmware v1.04 - the Stadia controller:
Added support for Google Stadia Controller. (The controller is required to update to the Bluetooth mode firmware, it does not support vibration)
The adapter can behave differently depending on its mode, which can be switched when holding ··· and the directional pad keys for 3 seconds. You will see the adapter's red LED flash.
Supported modes as of firmware 1.06:
I opted to use Dinput mode (··· + d-pad left), and could use the Stadia USB key layout file without changes - I only had to give it a new name to match the USB IDs: Vendor_2dc8_Product_3105.kl!
On Android, multiple stages of input mapping take place:
On Linux and Android you can see the keys a controller supports by inspecting its device information:
$ cat /proc/bus/input/devices
I: Bus=0003 Vendor=2dc8 Product=3105 Version=0111
N: Name="8BitDo 8BitDo Receiver"
P: Phys=usb-tegra-ehci.2-1/input0
S: Sysfs=/devices/platform/tegra-ehci.2/usb2/2-1/2-1:1.0/input/input8
U: Uniq=E417D86076B0
H: Handlers=js0 event1
B: PROP=0
B: EV=1b
B: KEY=7fff0000 0 0 0 0 0 0 0 0 0
$ cat /sys/devices/platform/tegra-ehci.2/usb2/2-1/2-1\:1.0/input/input8/capabilities/key
7fff0000 0 0 0 0 0 0 0 0 0
This key bit mask value 7fff0000 in bits is:
1111111111111110000000000000000
which are 15 buttons/keys.
The input driver selected by Linux then takes care of mapping the bits onto key codes. You can inspect this information in the /sys/ file system as well:
$ cat /sys/devices/platform/tegra-ehci.2/usb2/2-1/2-1\:1.0/input/input8/modalias
input:b0003v2DC8p3105e0111-e0,1,3,4,k130,131,132,133,134,135,136,137,138,139,13A,13B,13C,13D,13E,ra0,1,2,5,9,A,10,11,m4,lsfw
With the help of the Linux kernel sources input.c and input.h this can be decoded:
b0003 #bustype v2DC8 #vendor p3105 #product e0111- #version e0,1,3,4, #evbit k130,131,132,133,134,135,136,137,138,139,13A,13B,13C,13D,13E, #keybit r a0,1,2,5,9,A,10,11, #relbit m4, #mscbit l #ledbit s #sndbit f #ffbit w #swbit
The key codes that were used for the key map file above are already visible here.
During development of my key layout file I got the following message from the OUYA framework's input handler:
E/OuyaInputMapper( 548): onInputDeviceAdded device=5 not found D/ControllerInputDeviceListener( 565): InputDevice 8BitDo 8BitDo Receiver (id: 5, desc: 9c597667366a6b3d65e77ad35e1bc1f757d19732) is not a gamepad...
It turned out that I had used Android key code values (2xx range) instead of Linux key codes (3xx/0x13x range) in the key layout file as keys. After correcting the codes to 0x130 and above, the controller was correctly detected as gamepad.
When the Stadia controller is connected via USB to the OUYA and the Stadia button glows orange instead of white, then you have to reboot the OUYA.
This often happens when connecting the USB cable 5+ minutes after bootup.
Published on 2024-02-05 in ouya
I tried to get a Windows 8.1 system running inside VirtualBox 7.0.12,
but it fails as soon as I install the Guest Additions
.
All Windows updates have been installed. When installing the Guest Additions, there are 4 errors about Windows preventing the installation of unsigned drivers.
After rebooting, Windows sees something is broken and will do an automatic repair, which yields no results. Rebooting does not help, the system is broken beyond repair :(
Bug report: #21979: Installing Guest Additions in Windows 8.1 leads to non-bootable system
Published on 2024-02-05 in bigsuck
Nach dem Erwärmen von Milch in unserer 20 Jahre alten Mikrowelle vom Typ Severin MW 7840 drückte ich den Türöffnerknopf und nichts passierte: Die Tür blieb einfach zu; wiederholtes Drücken brachte auch nichts.
Also die Mikrowelle aufgeschraubt und da war das Problem: Das Drücken des Türöffners ist eine horizontale Bewegung, und im Inneren gibt es eine Umlenkeinrichtung, die diese in eine vertikale Bewegung nach oben umwandelt. Oben ist dann ein Schalter, der die Tür dann öffnet (und die Mikrowelle sicherheitshalber ausschaltet).
Der Umlenker ist mit 2 Nippeln beweglich im Gehäuse befestigt, und einer davon war abgebrochen:
Ein Freund besitzt einen 3D-Drucker. Er fand ein ähnlich aussehendes Modell eines Umlenkers und druckte es aus - leider passte es nicht.
Dann griff er selbst zu Lineal und Winkelmesser und baute die Umlenkeinrichtung am Computer nach. Als Extra gab es noch eine Stabilisierung des Nippels, damit das Ersatzteil länger hält als das Original:
Das
3D-Modell des Ersatzteils für die
Mikrowelle mit Grill "electronic plus" MW 7840
ist auf printables.com herunterladbar.
Published on 2024-01-28 in hardware
Sometimes I download images from The Internet™ for later use. For reference I'd like to store some meta data inside the image itself:
The question is now: Which meta data field should I use for those URLs?
Basic meta data can be stored in the image's EXIF data, but there is no URL field:
$ exiftool -list -EXIF:All|grep -i url
$
The Exif 2.3 metadata for XMP document also does not list a single URL field, so exiftool was right.
The XMP standard is another way to store meta data in files. XMP Specification Part 1 defines multiple fields that one could use:
Property | Type | Description |
---|---|---|
dc:relation | Unordered array of Text | A related resource. |
dc:source | Text | A related resource from which the described resource is derived. |
Unfortunately there are no "real" URL fields.
There is another vocabulary, the IPTC Photo Metadata Standard.
Property | Type | Description |
---|---|---|
Iptc4xmpCore:Source | Text | The name of a person or party who has a role in the content supply chain. |
Iptc4xmpCore:CreatorContactInfoCiUrlWork | URL, multiple |
The creator's contact information provides all necessary information to get in contact with the creator of this item and comprises a set of sub-properties for proper addressing. The contact information web address part. Multiple addresses can be given, separated by a comma. |
plus:ImageSupplier | Seq ImageSupplierDetail | Identifies the most recent supplier of the item, who is not necessarily its owner or creator. For identifying the supplier either a well known and/or registered company name or a URL of the company's web site may be used. |
Only Iptc4xmpCore:CreatorContactInfoCiUrlWork sounds like it could be used to identify the web site that linked to the image, but I think it is meant to directly link to the creator's homepage - and not to a random URL that just contains a image tag.
The Metadata Working Group published the Guidelines for Handling Image Metadata spec in 2010, and it contains a tag that actually matches my idea of "URL of website that linked to the image":
Property | Type | Description |
---|---|---|
mwg-coll:CollectionURI | URI | URI describing the collection resource. |
A "collection" in MWG speak is a group of images that this specific image is part of. And a website that links to the image can be seen as such a group.
I'm not satisfied with the available properties I found. But instead of inventing my own namespace with source and website properties, I'll simply use the Dublin Core XMP properties:
Property | Usage |
---|---|
|
URL of image that was downloaded |
dc:relation | URL of website that linked to the image |
Let's say that I visited http://cweiske.de/bdrem.htm and downloaded the image http://cweiske.de/graphics/bdrem/html.png. Now I want to add the website URL and image URL to its meta data.
Embedding the URLs in the downloaded image is easy with exiftool:
$ wget http://cweiske.de/graphics/bdrem/html.png -O bdrem-html.png
$ exiftool -source=http://cweiske.de/graphics/bdrem/html.png\
-relation=http://cweiske.de/bdrem.htm bdrem-html.png
Warning: [minor] IPTC:Source exceeds length limit (truncated)
1 image files updated
Despite the warning, the full source URL is stored in the image file. But on JPG files the source is really truncated:
$ exiftool -S -source -relation bdrem-html.jpg
Source: http://cweiske.de/graphics/bdrem
Relation: http://cweiske.de/bdrem.htm
To work around this issue, we force exiftool to use the XMP source property instead of the IPTC source property:
$ exiftool -XMP:source=http://cweiske.de/graphics/bdrem/html.png\
-XMP:relation=http://cweiske.de/bdrem.htm bdrem-html.jpg
1 image files updated
Extracting the data is also possible:
$ exiftool bdrem-html.png
ExifTool Version Number : 9.46
File Name : bdrem-html.png
...
MIME Type : image/png
Image Width : 463
Image Height : 122
...
Software : Shutter
Source : http://cweiske.de/graphics/bdrem/html.png
XMP Toolkit : Image::ExifTool 9.46
Relation : http://cweiske.de/bdrem.htm
Image Size : 463x122
$ exiftool -S -source -relation bdrem-html.png
Source: http://cweiske.de/graphics/bdrem/html.png
Relation: http://cweiske.de/bdrem.htm
Adding the meta data manually is possible, but it would be best if they were
added automatically when saving-by-right-clicking the image in my brower.
Unfortunately, no browser supports this.
On MacOS, downloaded files have the download source in the "Where from" file information. Safari, Chrome and Firefox (bug, commit) support this.
It is stored as extended attribute com.apple.metadata:kMDItemWhereFroms in the file system, so it is not tied to the file itself (but also does not modify the file, and works for all types of files).
2024-01: Kelvin Thompson sent me an e-mail explaining that exiftool allows to access this attribute and copy it into a different tag in the file itself:
$ exiftool '-XMP:source<MDItemWhereFroms' filename.jpg
The XDG defines a list of Common Extended Attributes, among them is user.xdg.origin.url. It shall be used as extended file system attribute, similar to what MacOS does.
curl supports writing this file system attribute:
$ curl --xattr --output html.png http://cweiske.de/graphics/bdrem/html.png
$ getfattr --dump html.png
# file: html.png
user.mime_type="image/png"
user.xdg.origin.url="http://cweiske.de/graphics/bdrem/html.png"
Chromium once supported it, but
removed it in 2019
because
metadata doesn't provide any security guarantees on Linux, and is a privacy risk
.
wget, just like curl, supports the --xattr option:
$ wget --xattr http://cweiske.de/graphics/bdrem/html.png
$ getfattr --dump html.png
# file: html.png
user.xdg.origin.url="http://cweiske.de/graphics/bdrem/html.png"
Firefox has a feature request open since 2011 for supporting user.xdg.origin.url.
But it does write the origin URL to gnome gvfs meta data:
$ gio info --attributes=metadata:: html.png
[...]
attributes:
metadata::download-uri: http://cweiske.de/graphics/bdrem/html.png
Daniel Aleksandersen suggested that we already have a property that means "URL of the thing we talk about", and that is rdf:about:
[...] goes on to identify the resource the statement is about (the subject of the statement) using the rdf:about attribute to specify the URIref of the subject resource.
Published on 2016-07-05 in photos, tools
Sicherungskopien von DVD-Filmen liegen bei uns auf einem NAS, welches per NFS auf der Dreambox DM7080HD verfügbar gemacht wird. Aus Sicherheitsgründen ist der NFS-Ordner im NAS für die Dreambox als "nur lesen" markiert, damit ein aus versehenes "Löschen" auf der Dreambox nichts kaputt machen kann.
Leider führt das dazu, daß der Abspielfortschritt bei Filmen nicht gespeichert wird, denn das erfolgt bei der Dreambox über .meta-Dateien, die im gleichen Verzeichnis gespeichert werden wie die Filmdatei.
Eine Lösungsmöglichkeit wäre die Überlagerung des Filmverzeichnisses vom NAS mit einem schreibbaren, so daß die Abspielstati zwar scheinbar im gleichen Verzeichnis, intern jedoch woanders gespeichert werden. Der Linux-Kernel der DM7080HD hat Version 3.4, overlayfs ist allerdings erst ab 3.18 im Kernel enthalten.
Seitdem ich mein altes Synology-NAS durch eine Kombination aus Homeserver (Bereitstellung der NFS-Freigaben) und Backupserver (tägliche Sicherungen vom Homeserver) ersetzt habe, ist eine andere Lösung möglich: overlayfs direkt auf dem Server, und die Dreambox bindet die Freigabe im Lese+Schreibmodus ein.
+----------+ +--------------------------------+ | Dreambox | --[Netzwerk]-> | NFS-Freigabe "dreambox-videos" | +----------+ | | | | [überlagert] | | v | | normaler Filmordner | +--------------------------------+
Damit kann die Dreambox ihre Metadateien in die Freigabe "dreambox-videos" des Homeservers schreiben, während die Filme darunter vor Veränderungen geschützt sind.
Ordnerstruktur auf dem Server:
/data ├ videos # Originaler Filmordner └ dreambox ├ overlay-working # temporäres Verzeichnis für das Overlay ├ videos # NFS-Freigabe für die Dreambox └ videos-changes # Dateien, die die Dreambox schreibt
Das Overlay wird automatisch beim Start des Server bereitgestellt:
overlay /data/dreambox/media x-systemd.requires-mounts-for=/data,nfs_export=on,lowerdir=/data/videos,upperdir=/data/dreambox/videos-changes,workdir=/data/dreambox/overlay-working
Wichtig ist hier das nfs_export=on, weil es sonst zu folgendem Fehler kommt:
$ exportfs -r exportfs: /data/dreambox/media does not support NFS export
Der NFS-Export ist folgendermaßen konfiguriert:
/data/dreambox/videos dreambox(rw,sync,no_wdelay,no_subtree_check,no_root_squash,insecure_locks,anonuid=0,anongid=0)
Published on 2023-12-27 in dreambox