Hey, ich bin Wieland! Hier sind ein paar meiner Projekte:

Dönerfinder

Weil ich mit dem Verwenden von OSM-Daten experimentieren wollte, habe ich im Sommer 2020 angefangen, eine App zu entwickeln, mit der man für jede Stadt eine Liste der Dönerläden, die es dort gibt ansehen kann. Die App hat zwei besondere Features:

Die App bietet die Möglichkeit, die Dönerbuden in der Stadt nach bestimmten Eigenschaften zu filtern. Zum Beispiel, ob Lieferung angeboten wird, oder ob es dort vegetarischen Döner gibt.

Dönerfinder

Die App ist relativ redundant, da man ja auch einfach Google nach Dönerbuden in der Nähe fragen kann, aber für den Fall, dass jemand einen Verwendungszweck für diese App sieht, habe ich sie in den Play Store gestellt:

(Permalink/einzelne Projektseite)

Dokuwiki "Druckansicht" Bookmark-Applet

Manchmal kommt es vor, dass man einen Ausdruck einer Seite eines DokuWikis braucht. Doch da sind immer die störenden Seitenleisten, Header und Footer. Deswegen habe ich ein kleines Scriptlet gebaut, dass eine DokuWiki-Seite in eine Druckansicht überführt.

Zieh diesen Link auf deine Lesezeichenleiste. Wenn du auf einer DokuWiki-Seite bist, klicke das Lesezeichen an, um die Seite in die Druckansicht zu überführen.

(Permalink/einzelne Projektseite)

DriveUsageAnalyser

Manchmal kommt es bei mir (und sicher auch bei euch) vor, dass ihr euch denkt: 79 GB von 80 GB belegt!? Aber wo!? Na klar, man könnte bei jedem Ordner auf Eigenschaften rechtsklicken, um die größe des Ordners zu sehen und so Stück für Stück herausfinden, wo der Hund begraben ist. Oder man benutzt einfach den DriveUsageAnalyser, den ich für diesen Zweck geschrieben habe. Er zeigt euch nicht nur die Größe jedes Ordners im aktuellen Ordner an, sondern auch, wie viel Prozent des gesamten verbrauchten Speicherplatzes dieser einnimmt.

(Permalink/einzelne Projektseite)

OSM-Staticmaps

Ich hoste hier auf haukauntrie.de eine modifizierte Version von staticMapLite, womit sich statische Ansichten von OpenStreetMap-Karten generieren lassen. Diese können einfach mit einer URL angefragt werden. Bedeutet: Überall, wo ein Bild von einer URL eingebettet werden kann, kann ein immer aktuelles Bild von einer Kartenansicht eingebettet werden.

Original-Version und Änderungen

Das Projekt basiert auf "StaticMapLite" von dfacts. Ich habe das Skript noch mit ein paar Änderungen ausgestattet.

Dokumentation

Der Basis-Endpunkt, an den die GET-Parameter angehangen werden, ist https://haukauntrie.de/online/api/staticmaps/staticmap.php.

GET-Parameter übersicht

Parameter Beschreibung Beispiel
center Das Zentrum der Kartenansicht center=52.51621,13.37842
zoom Die Zoomstufe (1 bis 19) zoom=14
size Die Größe des Bildes, in BreitexHöhe. Das maximum ist 4000. size=865x512
maptype Der Kartentyp. Es gibt mapnik und humaniterarian. maptype=mapnik
nocopy Diesen Parameter kann man auf 1 setzen, damit der Copyright-Verweis nicht eingeblendet wird. Dies sollte man nur tun, wenn man die API für ein privates Projekt verwendet. Ein Bild ohne Copyright-Vermerk öffentlich zu zeigen, stellt eine Urheberrechtsverletzung dar. nocopy=0
markers Hier kann man Marker übergeben, die an den entsprechenden Stellen hingerendert werden. Die Liste wird mit | getrennt, jedes Element der Liste besteht aus lat,lon,marker. Die verfügbaren Marker sind lightblue1 bis lightblue5, emote_1 bis emote_59, bullseye, ltblu-pushpin, pink-pushpin, purple-pushpin, red-pushpin, ylw-pushpin, ol-marker, ol-marker-blue, ol-marker-gold, ol-marker-green markers=40.70,-74.015,lightblue1

Beispiel

Das ist das Bild, dass man durch den Aufruf von https://haukauntrie.de/online/api/staticmaps/staticmap.php?center=52.51621,13.37842&zoom=18&size=1080x512&maptype=mapnik&markers=52.51682,13.37944,lightblue1 erhalten würde:

Eine Karte

(Permalink/einzelne Projektseite)

StreetCompleteNess

StreetCompleteNess ist ein kleines Tool, dass ich entwickelt habe, mit dem man sehen kann, zu wie viel Prozent einige ausgewählte StreetComplete-Quests in einer Stadt erledigt wurden. Allerdings ist das Tool nicht nur für StreetComplete-User interessant, sondern für jeden, der für eine Stadt sehen möchte, wo es eventuell noch viele (oder nur ganz wenige) Details zu ergänzen gibt. Das fehlen dieser Attribute kann man nämlich auf einer Karte nicht so gut sehen.

StreetCompleteNess

Was kann mit dem Tool gesucht werden?

Das Tool ist auf Städte ausgelegt, und sucht bei einer Eingabe auch erstmal primär nach Städten, allerdings funktionieren alle Eingaben, die durch ein "Boundary"-Polygon angegeben werden. Bedeutet, auch Stadtteile oder Gemeinden könnten funktionieren. Allerdings sollte man aufpassen, denn nicht nur bei anderen Dingen die durch Grenzen angegeben werden (z.B. Bundesländer), sondern auch einfach bei großen Städten geht meinem Server gerne mal der Arbeitsspeicher aus. Daher ist das Tool eher für kleinere Städte gedacht. Anfangs hatte ich einen speziellen Fall eingebaut, um auch die drei Städte in Deutschland abfragen zu können, die technisch gesehen eigene Bundesländer sind. Da diese aber alle drei sowieso den Arbeitsspeicher übersteigen, habe ich diesen special case wieder ausgebaut und dafür die allgemeine Suche nach einem anderen Boundary-Polygon als Fallbacklösung wieder eingebaut.

StreetCompleteNess ist hier zu finden.

(Permalink/einzelne Projektseite)

StreetCompleteNumbers

StreetCompleteNumbers ist ein Python-Skript, um die Anzahl der gelösten StreetComplete-Quests für einen OpenStreetMap-Benutzer zu ermitteln.

Das Skript ist auf GitHub verfügbar.

Nach dem Importieren kann man die Funktion StreetCompleteNumbers mit einem OSM-Benutzernamen als Parameter aufrufen. Die Funktion akzeptiert auch einen integer als zweiten optionalen maximum-Parameter, der, wenn er gesetzt ist, dafür sorgt, dass das Skript nicht mehr als ( maximum * 100 ) Changesets abruft.

from StreetCompleteNumbers import StreetCompleteNumbers
StreetCompleteNumbers("maxmustermann")

Beispielausgabe

Die Funktion liefert ein Tupel mit der Gesamtzahl der gelösten Quests (in StreetComplete als ★ dargestellt) als ersten Wert und ein JSON-Objekt mit den gelösten Questzahlen für jeden Questtyp.

(31549, {'AddMaxSpeed': 231, 'DetermineRecyclingGlass': 29, 'AddRecyclingType': 44, 'AddFootwayPartSurface': 71, 'AddCyclewayPartSurface': 68, 'AddAddressStreet': 30, 'AddHousenumber': 129, 'AddCycleway': 455, 'AddMaxWeight': 28, 'AddParkingFee': 131, 'AddParkingType': 184, 'AddParkingAccess': 209, 'AddPostboxCollectionTimes': 75, 'AddPlaygroundAccess': 85, 'AddRecyclingContainerMaterials': 58, 'AddTrafficSignalsButton': 82, 'AddTrafficSignalsVibration': 102, 'AddTrafficSignalsSound': 93, 'AddVegetarian': 75, 'AddOpeningHours': 450, 'AddPlaceName': 98, 'AddWheelchairAccessBusiness': 307, 'AddVegan': 35, 'AddBenchBackrest': 245, 'AddSidewalk': 511, 'AddStepCount': 290, 'AddHandrail': 297, 'AddStepsIncline': 259, 'AddStepsRamp': 315, 'AddPathSurface': 2983, 'AddForestLeafType': 65, 'AddRoadSurface': 987, 'AddLanes': 204, 'AddRoofShape': 4189, 'AddBuildingLevels': 6030, 'AddBuildingType': 8146, 'AddTactilePavingCrosswalk': 155, 'AddCrossingIsland': 58, 'AddCrossingType': 76, 'AddBollardType': 12, 'AddToiletsFee': 6, 'AddWheelchairAccessToilets': 9, 'AddRailwayCrossingBarrier': 18, 'AddInternetAccess': 15, 'AddGeneralFee': 5, 'AddRoadName': 58, 'AddPitchSurface': 22, 'AddBusStopShelter': 42, 'AddBenchStatusOnBusStop': 44, 'AddTactilePavingBusStop': 78, 'CheckExistence': 325, 'AddTracktype': 31, 'AddMaxHeight': 63, 'AddWayLit': 2521, 'AddBusStopLit': 40, 'AddBikeParkingType': 18, 'AddCyclewaySegregation': 83, 'AddProhibitedForPedestrians': 18, 'AddPitchLit': 19, 'AddBikeParkingFee': 1, 'AddBikeParkingCapacity': 34, 'AddClothingBinOperator': 17, 'AddFireHydrantType': 4, 'AddChargingStationOperator': 11, 'AddChargingStationCapacity': 10, 'AddBabyChangingTable': 5, 'AddBikeParkingCover': 26, 'AddBoardType': 21, 'AddBikeParkingAccess': 1, 'SpecifyShopType': 1, 'AddBarrierType': 1, 'MarkCompletedHighwayConstruction': 16, 'AddAtmOperator': 3, 'AddPowerPolesMaterial': 42, 'AddBusStopName': 3, 'AddSummitRegister': 1, 'AddBridgeStructure': 8, 'AddSport': 11, 'AddCarWashType': 4, 'CheckShopType': 5, 'MarkCompletedBuildingConstruction': 3, 'AddSuspectedOneway': 3, 'AddToiletAvailability': 1, 'AddOneway': 2, 'AddInformationToTourism': 3, 'AddWheelchairAccessOutside': 1, 'AddKerbHeight': 1, 'AddTactilePavingKerb': 1, 'AddMotorcycleParkingCover': 2, 'AddFerryAccessMotorVehicle': 1})

(Permalink/einzelne Projektseite)

TUC Mensa Bot

Die Seite der Mensa, auf der man das Essen nachsehen kann, lädt bei gedrosseltem Internet nur schwer und die TU Chemnitz App ist irgendwie auch meistens mit der Aufgabe das Essen anzuzeigen überfordert. Also hab ich einfach einen Bot programmiert, der schnell und einfach das Essen der TU Mensa anzeigt. Das besondere: Man kann diesen Bot mit /english auch so einstellen, dass er das Essen auf Englisch versendet. Damit ist dieser Bot die einzige englischsprachige digitale Möglichkeit, das Essen der Mensa einzusehen. Um das Essen zugeschickt zu bekommen schreib einfach /essen oder irgendeinen Text (und ja, ich meine irgendeinen Text, du kannst ihm auch bnasjfn senden), und er wird mit dem Essen gemäß deiner Einstellungen antworten. Ab 2019 hat der TUC Mensa Bot eine neue, sehr wichtige Funktion! Es ist nun möglich, eine Mensa oder eine Caféteria zu wählen, für die das Essen dann angezeigt wird. Ursprünglich war es immer die Mensa Reichenhainer Straße, und das war meistens auch okay, da es in der Straße der Nationen meistens fast das selbe gibt. Aber es gibt ja auch noch zwei andere Mensen, und die Caféterien, in denen es immer andere Sachen gibt. Deshalb kann man sie jetzt mit dem Kommando /mensa einstellen.

Klicke hier, um mit dem Bot zu sprechen

2019 Update

Mensa-Bot

(Permalink/einzelne Projektseite)

Status-Saver für WhatsApp

Ich habe eine kleine App geschrieben, mit der man WhatsApp-Stories abspeichern kann.

Features
Download
Geplante Features

(Permalink/einzelne Projektseite)

WhatsAppToJSON

Damit ich versuchen kann, einen Chatterbot mit WhatsApp-Chats zu trainieren, musste ich das ganze in eine gut zu verarbeitende Form bringen. Da ich JSON sehr mag, habe ich mich entschieden die Chat-Exports in JSON zu konvertieren.

(Permalink/einzelne Projektseite)

YouTube-Annotation-Archive

Am 15.01.2019 hat YouTube die alten Anmerkungen endgültig gelöscht. In der Hoffnung, dass es irgendwann mal einen costum Player geben wird, der diese wieder anzeigen kann, hat ein GitHub-Nutzer schnell ein Programm zusammengepackt, dass die Anmerkungen Kanalweise exportieren kann. Ich wollte mich am konservieren der Anmerkungen beteiligen, also habe ich einige Kanäle (a.k.a. u.a. alle meine Abonnierten) exportiert, und die Ergebnisse auf GitHub frei verfügbar gemacht. Herausgekommen sind ~8000 XML-Dateien mit den Anmerkungen der Videos.

(Permalink/einzelne Projektseite)