Hy, my name is Paul ...
This is my Online Portfolio / Playground / Homepage / Website.
Wondering what's up with the funny domain? Let me show you.
Read more about me here or check out my projects blow.
By the way, I just started blogging on medium.
These projects are partly free-time projects, partly things I did for courses back at university. This list does not include any work-projects.
Not a typical software project, but the start of a new website. I've been reading online comics more or less regularly since I was about 18 years old. The idea of creating something like that myself always attracted me for some reason.
Since I've picked up a mixture of the habit of journaling/drawing/doodling on a semi regular basis for some time now, I thought now is as good a time as any to get this started.
Some software was of course invovled, especially since I wanted to be able to publish new content very easily so that the hassle of publishing is never something I can use as an excuse for not doing it. I wrote a little static site generator. Yes I know there are plenty out there, but a 100 line python script is still simpler for me than having to learn how some prebuilt program works.
So now all I have to do is draw some random stuff, put the image with a meaningful name into a folder, run a shellscript and the new comic is published.
This isn't something that I expect to get any traction or anything. This is just a little something for myself to be able to share some of my thoughts in a visual way.
The code isn't open source yet (but it isn't much more than running Jinja on a few files anyway).
Certain application servers/frameworks such as spring boot with actuator plugin
allow you to access logfiles via http. However you can typically only download the current version of the logfile.
This is no good if you are currently waiting for a certain message to appear at the end of a 50MB logfile possibly via a slow internet connection.
As long as the server supports the HTTP Range header httpTail allows you to view the logfile like you would with a local file
and the linux
tail -f command.
[Code on GitHub]
A tiny http server that does redirects based on the host-header of the request. Configured via a simply yaml file. Usage scenario: you configure your local LANs DNS server to redirect a wildcard subdomain (or wildcard toplevel domain like *.athome) to the device running this service. This can be used to access any service running on your lan on a cryptic IP/host combination via a simple name wihtout much configuration hassle (e.g. redirect movies.athome to 192.168.1.32:8752 or similar).
[Code on GitHub]
Some unfinished test scripts for controlling my samsung tv from a (linux) pc. Did not get anything finished, just a collection of python scripts and a go implementation both partially based on other code out there etc.
[Code on GitHub] [Original Code by Asif Iqbal]
My family has a lot of old slides (diapositive, or "Dias" in German). Their quality may degrade over time and projectors get rarer these days, so I wanted to digitize them.
After some quick research about commercial offerings I decided to do this myself and turn it into a small project. We still had an old but nice projector and I quickly bought a nice, used camera which could be controlled via USB (most DSLRs these days).
A quick Arduino-Hack and Python-script later, I had a working prototype. Over the next few days this evolved into a nice, working setup.
My final setup was:
- Projector projecting onto white A2 cardboard (canvases for projection are rough to smoothen the image, you don't want that for capturing).
- Arduino controlling a servo to trigger "next slide" button of projector.
- Python script to control Arduino and camera and give you a nice interactive shell (lets you specify folder-name, image-count etc.)
- Shellscript that generate JPEGs from cameras RAW files (to have more post-processing options)
- Shellscript that auto-crops and compresses imagse (they have big black bars around them after capturing)
[Code on GitHub]
A small hardware project that I did because I always wanted a big red button that I could just hit as a fun stress release :)
It has 5 LEDs (the button has one + 4 yellow ones around it), it's battery powered and controlled by an Arduino Pro Mini.
It doesn't actually do much except starting to blink funky in various ways when you press it, but that's all I wanted.
Ideas for future extensions:
- add buzzer for irritating beeping
- add wifi or bluetooth chip to be able to trigger something on a pc by pressing it
[Code on GitHub]
Since I am running at least 1 public server (this one) and 2-4 small private "servers" (raspberry-pis, NAS, ...), I wanted a dead-simple way to monitor them at all times and get notified when there are problems. While there are public services like pingdom and DeadMan'sSnitch, I wanted something small and simple that I could deploy myself.
I watend a way for my servers to monitor each other, even behind firewalls and notify me independently, also I wanted it to be very easy to set up, have minimal resource requirements and have the alarming part as flexible as possible.
Therefore I created uptester. It is a small python application which can simply does http-calls and records failures. How you want to react to these errors is completely up to you, simply put in any shell-command and get it executed as soon as checks start failing.
It supports periodic outgoing checks (like pingdom) and expecting periodic incoming "pings" from external services (like DeadMansSnitch). You can run different commands on the first error, repeated failures and on recover.
The code is python 2 and python 3 compatible and the project features a docker-image.
Read more on the GitHub page.
[Code on GitHub]
A simple sms-gateway application written in python currently running on my RaspberryPi. It connects directly via USB to a USB-Modem and reads and writes SMS.
It exposes its functionality via HTTP (small embedded flask webserver) and a message-queue interface (mosquitto).
Everything in under 500 lines of python.
I already wrote it some months ago but only open-sourced it now in 2015.
[Code on GitHub]
My first Chrome browser-extension. A little notification client for the core smartwork employee relationship management system.
I wrote it because we use core smartowrk at our company and I often forgot to check the webapp for new content. Since the start-page already has a "new content" notification system built in, it was very easy to just scrape that page for the necessary content and show an aggregated new-content-count.
I really enjoyed writing a chrome-extension because it is a very simple and straightforward thing if you are already used to web-development.
[Code on GitHub]
A collection of small scripts i use on my OpenWrt router for dynamically shaping bandwidth via wshaper to use my variable speed connection ideally without running into timeout issues.
The problem I ran into is commonly referred to as bufferbloat which results in ridiculously high ping times (something between 1 and 20(!) seconds). As you can imagine an internet link like this is no longer usable. The trick is to locally limit your connection so this does not occur. This can easily be done once for "static" (fixed bandwidth) connections, on a 3g connection, where the available bandwidth constantly changes this has to be adjusted from time to time (except you want to limit yourself to 0.x MBit).
These scripts do this for me automatically now on my OpenWrt router.
A better solution would be to use more recent queuing algorithms for the linux networking stack (e.g. CoDel), that was however not an option for me because of unavailable OpenWrt builds that included them for my specific router.
[Code on GitHub] [Wikipedia on bufferbloat] [OpenWrt] [Research on bufferbloat]
You need to know the IP address (or any other parameter) of your raspberrypi (or any other headless device) which gets connected to different networks. What do you do? Write your own application? Where does it send the values? How does it get displayed? ...
Just use Postar! All you need on your client then is a 3-line shellscript - NO DEPENDENCIES!
Postar makes it dead simple to push data from anywhere right to your browser.
All your script needs to do is issue a POST request to a URL with some ID you choose. Then from any browser you can easily check the payload of that request.
[postar.paukl.at] [Code on GitHub]
The RaspberryPi is an ideal home server for me, because it consume a minimal amount of energy and it fully meets my hardware needs. After some experimenting I now have the following setup:
RaspberryPi connected with my old Arduino and a USB Hub. The Arduino controls several power sockets which can be switched via a remote, Furthermore it controls an LCD display and a temperature sensor.
All the stuff that can be controlled via Arduino is exposed through a small web interface on the RaspberryPi. Furthermore several services such as Folder sharing from an external HD, run on the Raspberry.
I am really happy with the setup and currently use it for: - collecting temperature data over time (with visualization) check out the nice flot library - streaming music to my notebook/pc via subsonic - switching on/off lamps via a webinterface and/or time-schedule
To reduce the chaos factor, I built a case to house all these components out of an old wooden box. I really like how it turned out and have great fun discovering new things which it can be used for on a regular basis.
This isn't one of my typical projects, since it doesn't involve any kind of software (or even just electronics). I wanted to build a standing desk for my study so I could work in a healthier way.
I was inspired by this ikeahackers idea on do-it-yourself standing desks based on inexpensive IKEA tables/furniture. Since I had an old small black IKEA table at home I jumped into action with my saw and screwdriver to build one of these myself.
One enhancement I made was to make the board for the keyboard & mouse ''height-adjustable''. The board isn't screwed to the table. Instead there is a sliding mechanism which relies on pieces of rubber to create enough friction to hold it in place once you let go of the board and gravity pulls it into a slightly tilted position. It works really well - I am standing at it while typing this - and it was a good chance to brush up my DIY skills :D
[more standing benefits] [drastic depiction of sitting risks]
A fun little spare-time project where I printed a QR code containing a special URL on a T-shirt. Located at this URL (which I won't disclose here) is a tiny little dynamic website where I can (for example via my phone) enter messages for people to read.
The script can also be used to display images or to install a redirect to some place else.
It is a standalone application which is designed to be invoked via cron or Windows task scheduler. Its outputs are an HTML report and an RSS feed file which can easily be consumed via your favourite feed reader.
Simple extensibility is the key feature. Writing a custom reporter is as simple as dumping this python file into the designated directory:
tempDir = os.environ["TEMP"] if "TEMP" in os.environ else "/tmp/"
return ("itemsInTempDir", len(os.listdir(tempDir)))
Write reporters for all the stuff you want to observe and simply keep up to date via RSS!
[Go to info site] [Get it from GitHub]
Parcel Tracker (Android)
An enhanced port of my ParcelTracker (from WP7) to Android. Additional features of Android version:
- Postal code conversion (lookup of city names)
- Coordinate lookup and map display
- Highlighting of changed statuses
Released on Google Play.
[Go to Google Play store]
Windows Phone client for displaying notes from Tomboy. Tomboy is the client that i have been working with in my PrivateNotes project. This is a simple read-only client for Windows Phone. It is not directly linked to my PrivateNotes project because it does not have any security support, however it allows for quick access of your Tomboy notes via the Ubuntu One sync services!)
Released on WP7 market!
[Go to info site] [Go to WP market]
An interesting new approach to sliding puzzles where you tilt the phone to make the pieces slide into the position you want.
Enjoy beautiful pictures while playing and unlocking new ones.
[Go to WP market]
Parcel tracking for austrian postal service.
Features automatic background tracking and user notification when the parcel status changes.
[Go to WP market]
PrivateNotes is the project i am working on for my master degree, it is all about security for note taking aplicatoins.
It features a plugin for Tomboy and a mobile application for android. The screenshot shows an (now old) version of the plugin on linux.
Please check out the project website for more information.
[Go to Google Play store] [Project website] [Quickstart]
QtBrowserChooser is simple and (if you're like me) you will only notice it when it's not there.
If you use multiple browser (one for mails, one for banking, one for everything else) you may want to open the browser depending on the link you want to open.
QtBrowserChooser checks every time you open a link (via your instant messaging app or email program etc.) if it's one of your specified urls and open the corresponding browser. Configuration is as simple as this:
To get to the main window to open the config file or set it as your default browser,
open QtBrowserChooser directly or (if it's already the default browser) enter
http:// in your Run window.