Skip to content

PHP WTF - a string is not a string

$ php -a 
Interactive shell

php > function foo(string $s) { echo $s; }
php > foo("bar");
PHP Catchable fatal error:  Argument 1 passed to foo() must be an instance of string, string given, called in php shell code on line 1 and defined in php shell code on line 1

Mal die Ernte verarbeitet

Chili Ernte
Chili Ernte
Chili Sauce
Chili Sauce kochen
Chilisauce
Die fertige Saucen
Die gelben Habaneros ergaben zwar recht wenig Sauce, aber es hat sich ausgezahlt die extra zu verarbeiten: Genialer Geschmack und teuflisch scharf.
Tags für diesen Artikel:

Firefox installieren ist echt anstrengend geworden

Neuer Laptop, neuer Firefox. Und dann beginnt man den wieder so herzurichten wie man ihn haben will... echt unglaublich was man inzwischen alles so braucht um einen halbwegs benutzbaren, hübschen und sicheren Browser will:
  • Menüs einblenden
  • Extension Classic Theme Restorer installieren und konfigurieren - Tabs nach unten, Stop-Reload nicht in URLbar einbauen, RSS-Icon anzeigen...
  • Extension Status-4-Evar installieren
  • Extension oldbar installieren - Gute alte einzeilige Anzeige bei URL-Eingabe
  • About:config aufrufen - browser.urlbar.trimURLs auf false (in der URLbar http:// usw nicht wegkürzen), und browser.formfill.bucketSize auf 9999999 (Vorschläge bei Textinputs immer alphabethisch anzeigen)
  • Extension Adblock Plus Adblock Edge uBlock Origin installieren und diverse Filterlisten abonnieren
  • Extension Disconnect installieren - auch durch uBlock Origin ersetzt
  • Extension Google search link fix installieren
  • Extension NoSquint installieren - Zoom-Buttons und merkt sich Zoom pro Domain
  • Extension QuickJava installieren - Java im Browser habe ich zwar schon lange nicht mehr installiert, aber diese Extension hat auch Buttons für Cookies, Javascript, Animated Gifs, Flash...
  • Extension ImageZoom installieren
  • Extension Open Image in New Tab installieren
  • Extension RefControl installieren
  • cuteButtons Crystal SVG installieren - das Ganze mal hübsch machen.
  • Dann mal ein paar nützliche Tools: Video Download Helper, DownThemAll!, GrabMyBooks (macht eBooks aus Webseiten)
  • Dann kommen mal DAS Webdeveloper-Tool dran: Firebug mit Firepicker, FireRainbow und Firefinder
  • Noch ein paar Developer-Tools: User Agent Switcher, TimestampDecode, MeasureIt, IPvFox, ColorZilla
  • PasswordMaker - Der von mir bevorzugte Passwordmanager - der Passwörter eigentlich gar nicht merkt sondern immer wieder frisch erzeugt
  • Scuttle installieren - meine Bookmarkverwaltung
  • Customize Toolbars aufrufen und die ganzen Buttons dort hin stellen wo ich sie haben will
  • Ein paar SearchEngines wie DuckDuckGo, Wikipedia usw. hinzufügen ...geschafft. Endlich wieder ein gewohnter Firefox. Trotz allem ist Firefox noch immer der Browser meiner Wahl, nicht zuletzt weil es die ganzen Extensions und Anpassungsmöglichkeiten gibt.

Chilis

Trotz des kaum vorhandenen Sommers bekommen meine Balkonchilis (Jalapenos und rote und gelbe Habaneros) endlich Farbe ;) Chilis
Tags für diesen Artikel:

PCB Herstellung @ IT-Syndikat

Wie wir im Innsbrucker Hackerspace Platinen herstellen:
Layout Das Layout wird mit einem ganz normalem Laserdrucker auf Folie gedruckt, wichtig dabei: Papierart: Trasparenzfolie einstellen, Kontrast, Farbauftrag und ähnliche Einstellungen auf Maximum, Tonersparmodus aus. Es soll möglichst viel Toner auf der Folie landen. Anschließend die Folien Tonerverdichter einsprühen und trocknen lassen, das sorgt für ein gleichmäßiges deckendes Schwarz.
Vorbereitung für doppelseitige Platinen Für beidseitige Platinen wird aus den Folien eine Tasche gebaut. Auf drei Seiten zukleben und dann die Ecken herausschneiden an denen die Platine mit Klebestreifen fixiert wird.
belichten Belichtet wird bei uns mit "leicht" überdimensioniertem Gerät - die Anlage ist eigentlich für's Siebdrucken gedacht, funktioniert aber auch für Platinen sehr gut. Lampe auf 40 sec einstellen, Schutzfolien von den Platinen abziehen, in die Folientaschen kleben und...
belichten ...belichten. Die Lampe ist in warmen Zustand recht empfindlich, daher erst auskühlen lassen bevor man sie in die Ecke zurückschiebt.
entwickeln Entwickeln. Vorsicht beim Umgang mit den Chemikalien! Insbesondere beim Entwickler, der ist eine ziemlich gefährliche Lauge (NaOH). Unbedingt Schutzhandschuhe und Schutzbrille tragen! Es ist schnell zu sehen wie sich die belichteten Stellen vom Lack dunkel verfärben und ablösen. Anschließend gut abspülen und eventuelle Lackreste vorsichtig mit einem Papiertuch abwischen.
ätzen Und ab in die Ätzmaschine damit. Die Temperatur sollte 40-45°C sein. Das Ätzen dauert etwa 15min, wenn es deutlich länger dauert ist die Ätzlösung verbraucht und muß neu angesetzt werden. (400g Natriumpersulfat auf 1,75l Wasser)
Lack entfernen Platinen gut abspülen und den Lack mit Aceton entfernen.
Wenn man will kann man an dieser Stelle schon aufhören, die Platine an sich ist fertig. Oder weiter mit der Lötstoppmaske:
Lötstoppmaske Die benutzte Lötstoppmaske nennt sich Dynamask und läßt sich mit etwas Übung sehr gut verarbeiten.
Die Maske hat auf beiden Seiten eine Schutzfolie, eine glänzend eine matt. Nach dem Zuschneiden mit Hilfe von Klebestreifen die matte Folie abziehen, die Glänzende muß noch drauf bleiben.
Die Platinen ein paar Mal durch die Laminiermaschine laufen lassen um sie zu trocknen und vorzuheizen.
Lötstoppmaske Die Maske an einer Seite der Platine etwas andrücken, auf der noch warmen Platine klebt sie etwas.
Lötstoppmaske und in die Laminiermaschine damit. Das Hochhalten der Maske verhindert die Blasenbildung.
Lötstoppmaske Danach noch ein paar mal durch die Laminiermaschine schicken bis die Maske auf jeden Fall gut klebt.
Lötstoppmakse Die ausgedruckte Folie aufkleben und belichten. Bei uns haben sich 40 sec bewährt.
Lötstoppmaske Vor dem Entwickeln mindestens 15 min, besser 30 min ruhen lassen, dann mit Hilfe von Klebstreifen die zweite, glänzende, Schutzfolie abziehen.
Entwickelt wird mit Natriumcarbonat in warmen Wasser (40°).
Lötstoppmaske Alle paar Minuten leicht abbürsten, insgesamt dauert das Entwickeln etwa 5-10min.
Lötstoppmaske Nach etwa 3x abbürsten ist bei den Kontakten das blanke Kupfer sichtbar. Abspülen und beinahe fertig.
Zum endgültigen Aushärten braucht die Maske noch eine ordentliche Ladung UV. Entweder nochmals lange Zeit in den Belichter, oder einfach ein paar Stunden in die Sonne legen.

rsync for the Kobo

I've recently got an ebook reader - I decided to take a Kobo for a number of ressons:
  • pretty cheap
  • easily hackable (and it seems that they understand Open Source - Most of the software for their devices is on github - https://github.com/kobolabs )
  • no hard vendor lock-in (Well, they do have their kobo-store, but you are not forced to use it.)
First a Warning: Hacking the firmware of embedded devices always includes the risk to break the device. And it may void Warranty. If you can't live with that risk don't do it!
And always backup all your data first! If you screw something up you will need to do a factory reset - and this will wipe all data. Why rsync? For backups - my tool of choice is dirvish. Of course I could connect the Kobo via USB, mount it and do the backup from there, but I prefer the direct way. And I can do a full system backup, not only the data.

Step 1) Getting a root Shell

The Kobo runs on Linux with busybox, so it has a telnet server already installed but not activated. So we don't need additional software for this step, we just need to change a few config files. To do this the update system can be misused - it's pretty simple: Connect via USB and put a KoboRoot.tgz into the .kobo folder. This file will then be extracted to / - without any kind signature checks or similar. Easy to use, but also easy to break stuff.
Some tutorials I found recommend to do a factory reset first, I did not and it just worked fine. The hardest part is to find the download Url of the firmware package. You could try to run an update on your Kobo and sniff the network or use the (Win only) setup software and have a look what it downloads. Or just trust other people who have already collected the urls - like in this thread @ mobileread.com. Unzip that and you will find KoboRoot.tgz besides other stuff we don't need now. From the tar we just need a few files:
tar -xvzf ../KoboRoot.tgz ./etc/init.d/rcS ./etc/inetd.conf ./etc/inittab
In the Package for my device there is no /etc/inittab included, so I had to trust the files I found in the net. Get inetd to listen on port 23 and run telnet - add to etc/inetd.conf:
23 stream tcp nowait root /bin/busybox telnetd -i
The standard firmware does not mount /dev/pts which is necessary for telnet. I added to etc/init.d/rcS just below the other mount-lines:
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
And finally we need to make sure inetd gets started. Add to etc/inittab:
::respawn:/usr/sbin/inetd -f /etc/inetd.conf
or like I did just create the etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:/sbin/getty -L ttymxc0 115200 vt100
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::restart:/sbin/init
::respawn:/usr/sbin/inetd -f /etc/inetd.conf
Tar this into a KoboRoot.tgz and put the file into .kobo on your device. After disconnecting USB it will install it and reboot. Turn on Wifi in the settings and start the Browser (it enables Wifi only on demand, starting the browser makes sure it really does) and you should be able to connect via telnet as root without password. The kobo is wide open now, do this only in a secure network.

Step 2) install the dropbear ssh server

So far I'm too lazy to set up a build environment for the Kobo, so I'm using binaries from the debian armhf port. After reading tjms comment I started with Maemo binaries. While they do work for dropbear they fail with rsync, more about that later. Download the deb from https://packages.debian.org/wheezy/armhf/dropbear/download, unpack it and create a Kobo update package:
mkdir d
cd d
ar x ../dropbear*.deb data.tar.gz
tar xzf data.tar.gz
tar -cvzf ../KoboRoot.tgz usr/{bin,lib,sbin}
Copy the KoboRoot.tgz into .kobo of the reader and let it install and reboot again. Then connect via telnet to set it up:
# add the private key(s) for the box(es) you want to connect from
mkdir -p /root/.ssh
echo "your key" >> /root/.ssh/authorized_keys

# create host key
mkdir -p /etc/dropbear
cd /etc/dropbear
test -f rsa_host_key || dropbearkey -t rsa -f rsa_host_key
test -f dss_host_key || dropbearkey -t dss -f dss_host_key

# dropbear complains if this is not present
touch /var/log/lastlog

# edit /etc/passwd
vi /etc/passwd
Here we need to disable the login without password and change root's home directory from / to /root.
root:x:0:0:root:/root:/bin/sh
You could also set a password for root, but for me it's fine to have pubkey access only. In the passwd file there is a second root user "admin" with password "admin". I don't know yet if it's used for something and if it's safe to delete it. Now we can try dropbear:
/usr/sbin/dropbear -d /etc/dropbear/dss_host_key -r /etc/dropbear/rsa_host_key -F -s -E
Try to login via ssh. Maybe there are some permissions to change. If this is successful add dropbear to /etc/inittab:
::respawn:/usr/sbin/dropbear -d /etc/dropbear/dss_host_key -r /etc/dropbear/rsa_host_key -F -s
and remove the previously added line for inetd (telnet).

Step 3) rsync

This took me a while since I started with Maemo packages - rsync just did exit 1 without any further notice, strace and LD_DEBUG did not really help, finally derRichard pointed me to the right direction: The Kobo uses EABI5, Maemo EABI4, so everything that needs additional shared libraries will fail. Download rsync and libpopt from https://packages.debian.org/wheezy/armhf/rsync/download and https://packages.debian.org/wheezy/armhf/libpopt0/download This time no more need to use the Kobo updater, i just scp it to the device:
ar x rsync_*.deb data.tar.gz
mkdir rsync
cd rsync
tar -xvzf ../data.tar.gz
scp usr/bin/rsync root@kobo:/usr/bin/
cd ..
ar x libpopt0_*.deb data.tar.gz
mkdir libpopt
cd libpopt
tar -xvzf ../data.tar.gz
scp scp lib/libpopt.so.0.0.0 root@kobo:/lib/
and on the Kobo:
cd /lib
ln -s libpopt.so.0.0.0 libpopt.so.0
and rsync works:
[root@(none) ~]# rsync --version 
rsync  version 3.0.9  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
some Kobo hacking resources:

IT-Syndikat Year11Party: Don't Panic!

Samstag 24.05.2014 - Einlass 21:00 - Eintritt frei! - @P.M.K. live: MILLICENT INGRAM (ibk/berlin) djs: BADSPIN | ..EGO. | ROBELIX Keep calm and invade the p.m.k Innsbrucks Hackerspace legt wieder die Lötkolben beiseite, packt seine Blinkendingse, Matekisten und Aluhüte und macht sich auf in die p.m.k Dort feiert das IT-SYNDIKAT sein 100 jähriges Bestehen. Die DJs BADSPIN, ..EGO. und ROBELIX bringen Crypto in die Party und MILLICENT INGRAM hauen rein bis dem letzten Vogonen der Kopf platzt. Vergesst eure Handtücher nicht, denn ab Mitternacht ist Towel Day. Hack Systems! Hack Society! Hack Spaces!

PHP WTF - Week Numbers

$php -a
Interactive shell

php > echo date('W', time());
51
php > echo strftime('%W', time());
50