Spoiler: My main point in this post is not given away by the title.
But first things first: What are all those words?
Would you like to know more?
Part of me wants to write about all the [horror](https://www.bleepingcomputer.com/news/security/ten-malicious-libraries-found-on-pypi-python-package-index/) and [glory](https://crates.io) there is to be seen in package management, but quite frankly it'll take too long. Instead, I will just leave you with a tiny piece of advice. Here comes. If you are on Windows and you want to install a *legitimate* Python package (like for example [PyCryptodome](https://pypi.python.org/pypi/pycryptodome), because naturally you are **fully aware** that [PyCrypto is dead](https://github.com/dlitz/pycrypto/issues/173).), which in reality is a bottomless pit, at the center of which there is a C library, straight from hell - then maybe get the [Microsoft Compiler for Python](http://www.microsoft.com/en-us/download/details.aspx?id=44266) instead of, who knows, wasting hours or even days looking for a less reasonable solution. Credit, as so very often, [goes to stackoverflow](https://stackoverflow.com/a/27327236/1578458).
I am currently on vacation and my Hotel offers free WiFi in the lobby. The reception on the third floor, where my room is, is pretty bad on my Thinkpad and my phone doesn't receive anything at all.
Fortunately, I am always carrying a high gain USB WiFi stick with me that gave me almost optimal signal strength.
Having 2 network cards ((My Thinkpad's internal card (named "Wi-Fi") and the USB card (named "Wi-Fi 2") )) I was able to use my Windows 8.1 machine as a Wireless Repeater (more…)
On 2016-08-01 a law came into force, allowing customers in Germany to use any internet router they want, as long as it meets the providers requirements.
On that day I decided to buy a Fritz!Box 6490, for three reasons:
1. I wanted to replace the crappy router my provider gave me (which didn't even have WiFi)
2. besides its routing function, it is able to stream up to 4 concurrent TV programs into the Network
3. it was the only device that fulfilled the above-mentioned requirements.
I wanted to setup [Tvheadend](https://tvheadend.org/) to act as an intermediate between clients and the router, because it would allow me to have an EPG, stream the same program to 2 clients, while only occupying a single stream of the Fritz!Box, and allow me to record TV shows.
As you can see from the date of this post, it took me one year to figure out how to do it.
This blag post describes how to use a [Raspberry Pi](http://amzn.to/2wjICvo) to remotely "press" and potentially "hold" the power button on a PC. This is my first non-trivial (still pretty-trivial) hardware-related project. So don't expect anything too fancy.
Would you like to know more?
I have a [problem with my Nokia 3](https://android.stackexchange.com/q/180669/197410) and decided to try the [Nokia customer support](https://www.nokia.com/en_int/phones/support) while doing some [recreational math](https://projecteuler.net/), that's what a great Saturday is to me. Don't judge. During the conversation, I grew very suspicious that I was talking to a chat bot. This was the first time for me hearing about chat robots being deployed in support by a [respectable company like Nokia](https://en.wikipedia.org/wiki/Nokia#Controversies), so I decided to make sure I wasn't being paranoid. Time for a Turing test! I guess you can never really know, but I am quite convinced they lie to me and are actually robots. You can try it yourself, just go to [their support site](https://www.nokia.com/en_int/phones/support) and start a chat. Would you like to know more?
My lamenting will be about the overall way in which device encryption is implemented in Android. This is mostly a collection of links where you can find out more about how it ~~worked across the recent versions~~ all went south. This article strictly expresses my own, badly informed opinion and you should check all the provided references carefully before forming your own.
read();
We decided to use the javascript markdown engine [showdown](https://github.com/showdownjs/showdown) for the blawg, and [$\KaTeX$](https://khan.github.io/KaTeX/) for rendering latex. If you think that's a good way to go: Here is how to do it with wordpress.
I like to have all "stuff that I need to do something with" collected at one place. For the virtual world, this place is my email inbox. To remind me of things, I send myself an email and can be sure that I'll process it at a later point in time for example. Having another place with the result of RSS feeds always annoyed me a bit. As soon as I realized that I find this annoying, a solution was easy to implement of course:
aptitude install rss2email
r2e new your@email.address
r2e add blag https://blag.nullteilerfrei.de/feed/
and a cronjob, executed every few minutes:
*/10 * * * * r2e run
will lead to all our fine blag posts ending up as email notifications.
Github has a history of not giving a frack what their users want ((https://github.com/dear-github/dear-github)) ((https://github.com/isaacs/github/issues)). For example, a few developer friends of mine were reluctant to click any links in their notifications-page, since after they clicked the link, the notification was marked as read and you might lose track of it, if you just close the browser tab ((on a side note, tellmewhenitcloses.com is pretty handy to avoid too many notifications in the first place)).
So David Badura ((https://github.com/DavidBadura)) and I decided to fix this problem by writing a browser extension. The result can be found on Github: https://github.com/larsborn/GithubToDos. After installation (also possible in Opera btw, the best browser there is), the extension injects an "Add ToDo" button on every issue page and pull request. When clicking, it, the URL gets saved to the local storage of the browser ((Using local storage is handy for people that are not very concerned about privacy and just use the cloud synchronization feature of their browser: the content of their ToDo list will then also just be synced to all their devices.)). The list of all URLs added like this can then be access through a new button in the header toolbar of github.
You can clone the project from github and add it as an "Unpacked extension" or just head to the Github ToDos on the Chrome Store and just install it from there. Pull requests are welcome, open an issue, if you find a bug, open source yadayada.
I wanted to crop out a specific rectangle in a few dozen scanned documents with ImageMagick like this:
convert -crop 1600x1880+100+420 image.nrm.png cropped.png
Scanning often results in a tiny skew, which would lead to a slightly different rectangle location on every image. It seems that a common preprocessing step when doing OCR is to automatically correct this skew. The Python toolset ocropy ((https://github.com/tmbdev/ocropy)) for example contains a tool to do this: ./ocropus-nlbin image.jpg
creates the file image.nrm.png
which is optimized for OTR and has corrected skew.
Obviously, my Bank does not provide a REST API to download the transactions happening on my accounts. After I asked for "machine parseable" data, they told me that I can download CSV files. Awesome! So I wrote a parser and lived happily ever after. Except that they change their CSV format without notice every few months
and at some point they started to mix different encodings in the same file. So I lived unhapply, regularly fixing the script reading the CSV file.
What did not change for around 10 years now are their banking statements. And this also holds for the PDFs you have to download, if you want to avoid getting them via snail mail (and paying for the postage of course). I decided to parse the PDFs instead and this went pretty well for may years... up to recently, when something changed (it may have been a software update of the parser I use or something on their side). Do you want to know more?
We have updated the layout, also the posts are now markdown-rendered on the client side. Oh, and we switched to [$\KaTeX$](https://khan.github.io/KaTeX/) for math rendering. Since this breaks compatibility with the old hairball of plugins we had, it will take some time before all the old entries are fixed, but we are working on it.