a.k.a. "My Bank does not support CSVs". When I asked my bank for "machine readable" versions of my bank statements, they where like: Their website has a CSV-export function. But only data from the last three months can be exported. Of course, it would have been smart to have performed this export every two months or so, but let's talk about something else. Sure!
I started to play around with ArangoDB and used Python to get some data into my first database. Long story short: if you want to set your own key for the documents, do it on the document, not on the initialization data. EDIT: this is only true for the most recent version 1.3.1 release on pypi by the time of writing1. Read the longer story!
Flask pretty-prints response generated by the
flask.json.jsonifyfunction. Avoiding this on a per request basis doesn't seem to be intended: There is a configuration variable for the whole application:
JSONIFY_PRETTYPRINT_REGULAR. But setting that to
Falseminifies every JSON responses. And, in general, I enjoyed the pretty printed output. So implementing
X-PrettyPrint- which seems to be a quasi-standard - also sounded like a the wrong way because it means replacing the call to
jsonifyby a custom implementation. This short story has a happy end though: Flask does not pretty-print the response if it receives an AJAX request. So one can just send the appropriate header:
curl -H 'X-Requested-With: XMLHttpRequest' "https://exmaple.com/api/endpoint.json";
I am not very disciplined. So trying not to be distracted while
working at my computer is a major project for me. Since "deep work" is en vogue, it is possible to disable notifications in nearly every app nowadays. But there are often tiny bits one cannot change: Slack's icon in the notification area is one of those things: Whenever you have an unread message in any of the channels you are part of, Slack will show a small blue dot on its icon in the notification area. One can argue that it is not that hard to ignore that but fishing is also not that hard and I cannot do it. What I can do though is overwrite
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 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:
and a cronjob, executed every few minutes:
aptitude install rss2email r2e new email@example.com r2e add blag https://blag.nullteilerfrei.de/feed/
will lead to all our fine blag posts ending up as email notifications.
*/10 * * * * r2e run
Github has a history of not giving a frack what their users want12. 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 tab3. So David Badura4 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 browser5. 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.
- https://github.com/dear-github/dear-github [↩]
- https://github.com/isaacs/github/issues [↩]
- on a side note, tellmewhenitcloses.com is pretty handy to avoid too many notifications in the first place [↩]
- https://github.com/DavidBadura [↩]
- 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. [↩]
I wanted to crop out a specific rectangle in a few dozen scanned documents with ImageMagick like this:
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 ocropy1 for example contains a tool to do this:
convert -crop 1600x1880+100+420 image.nrm.png cropped.png
./ocropus-nlbin image.jpgcreates the file
image.nrm.pngwhich 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?