Schlagwort-Archive: Uni Ulm

Paper des Tages: “Those edibles hit hard”

Sowas schlaegt mir Google Scholar in den persoenlichen Empfehlungen vor: “Those edibles hit hard”: Exploration of Twitter data on cannabis edibles in the U.S – Drug & Alcohol Dependence

Inhaltlich ist das zwar eher fad, aber vielleicht kann ich damit endlich auch Teil des uulm-hilarious-paper-review-club werden

 

Arduino mit Protoshield

Richtiges Werkzeug. Dann gehts.

Arduino mit Protoshield

Gut vier Jahre habe ich nun meinen Arduino, und ganz offen gestanden: Die meiste Zeit lag er in der Ecke herum.

Das hat sich ganz drastisch geaendert, seitdem ich mir ein Protoshield mit Breadboard drauf und endlich flexible(!) statt starrer Breadboardkabel gekauft habe. Die gab’s fuer jeweils wenige Euros auf ebay, wahlweise mit vier Wochen Lieferzeit aus China, oder fuer ein bissel mehr Geld mit schnellerem Versand aus Europa.

Ob und wie der Abgesang auf die 8-bit-µCs bald kommen wird, und ob wir dann alle nur noch auf RasPis und anderen „vollwertigen“ Rechnern coole Hardware-Dinge machen, vermag ich nicht zu sagen. In der Zwischenzeit prototype ich jedenfalls IR-Sender und -Empfaenger, damit wir beim Girls’Day eigene „uulmduinos“ zum Selberloeten und Fernseher-ausmachen bauen lassen koennen 🙂 In der Selbstloet-Variante kosten die unter 10 EUR – und liegen damit noch weit ueber den Uno- und Nano-Clones aus China, die teilweise fuer weniger Geld zu haben sind, als ein blanker Atmega328 in der DIP-Variante. Wahnsinn.

(Randnotiz: Was ausserdem sehr zum Spass am Arduino-prototypen beigetragen hat, war die Anschaffung eines  Sortierkoefferchens. Meine Eltern wollten mir wohlmeinend die Vorzuege von Sortierkoefferchen, z.B. fuer Lego, schon im Kindesalter beibringen. Aber manche Dinge versteht man wohl erst ab einem gewissen Alter. Tja.)

Immer aktuelle POI-Karten mit Leaflet und Overpass

uulm-map

Wir hatten neulich das Gebaeudemanagement der Uni um eine Uebersicht der von ihr aufgestellten Radparkanlagen gebeten – mit dem Hintergedanken, das schoen aufbereitet zu veroeffentlichen, um moegliche Bedarfe zu erkennen und potenziellen Radler*innen eine schoene Uebersicht an die Hand zu geben.

Die Uebersicht kam dann in Form eines PDF-Plans mit blauen Bobbeln je Abstellanlage – und der PDF-Plan war nicht etwa irgendein Geospatial PDF, nein, das war einfach „nur“ ein Umgebungsplan ohne auch nur den Ansatz eines Koordinatensystems oder sonstiger Hinweise, wo man sich denn befaende. Leider benutzt man in der Univerwaltung kein GIS, so dass es kein Repository fuer relevante Geodaten (z.B. auch Hoersaele, Eisautomaten,…) an der uulm gibt.

Passt genau!

Passt genau!

Als Fingeruebung habe ich deswegen erst einmal die Karte (bzw. einen Export davon) in QGIS georeferenziert. Anstatt (wie geplant) daraus eine Onlinekarte mit qgis2leaf zu exportieren, habe ich dabei erst einmal Dinge gelernt, von denen ich nicht dachte, dass ich sie einmal lernen wuerde. Zum Beispiel, dass WGS84 nicht gleich WGS84 ist, sondern einmal WGS84 als Koordinatensystem auf dem Referenzellipsoiden (EPSG:4326) und einmal als sphaerische Merkatorprojektion (EPSG:3857). Waehrend die OSM-Ursprungsdaten in EPSG:4326 sind, werden die Kacheln (wie auch bei Google Maps) als Projektion in EPSG:3857 referenziert; Koordinateneingaben werden aber als EPSG:4326 angenommen und dann in EPSG:3857 umprojiziert…

Das interessiert natuerlich keine Sau, die ihr Fahrrad abstellen will.

Nach einigem Ueberlegen kam ich daher zum Schluss, die Punkte auf der Karte mit der OpenStreetMap abzugleichen. Dort wird naemlich nicht nur der Ort abgelegt, sondern auch Metainformation wie die Zahl der Abstellplaetze, ob eine Ueberdachung besteht, etc. Die habe ich also bei den fehlenden Anlagen noch nachgetragen, und so ist seit dem Wochenende die OSM an der Uni Ulm mit der Realitaet der Abstellplaetze wieder weitgehend in Einklang 😉

Blieb die Frage, wie diese Daten dann den Weg in eine interaktive Karte finden, die ein wenig moderner ist als ein 2,5 MB grosses PDF.

Ich hatte mich neulich schon einmal mit der Overpass API fuer die Openstreetmap beschaeftigt, um komplette OSM-Dumps fuer Ulm zu ziehen. Eher wenig Beachtung hatte ich dabei dem Detail geschenkt, dass das ja 1.) eine API ist und 2.) damit auch Selektionen auf bestimmte Tags moeglich sind.

Mit Overpass Turbo ist das leicht auszuprobieren: Einfach mal im Wizard oben links eine beliebige Abfrage eingeben (Beispiele stehen schon darunter) und Ausfuehren – voila, da kommen die Daten als GeoJSON und werden auch auf der Karte angezeigt. Und von einer Aenderung eines solchen Punkts im OSM-Originaldatensatz dauert es nur wenige Sekunden, bis eine neuerliche Overpass-Abfrage die aktualisierten Daten anzeigt. Wohoo!

Mit leaflet-layer-overpass existiert derweil eine JS-Bibliothek, die Overpass mit Leaflet verknuepft, und so dauerte es nicht lange, bis die erste fertige Fahrradabstellanlagenkarte fertig war. Das einzige, was noch verbleibt, sind kleine Tweaks wie bessere Infopopups und eine Unterscheidung zwischen offenen und ueberdachten Abstellmoeglichkeiten.


Größere Karte anzeigen

Ich faende es cool, wenn moeglichst viele Geodaten der uulm nach und nach den Weg in die OSM finden wuerden. So blieben die Daten zentral in der Karte schlechthin, anstelle in verschiedenen dezentralen Repositories zu versauern – und nach und nach koennten Dinge wie Hoersaalfinder oder Uebersichtskarten von Eisautomaten allesamt mit Leaflet und Overpass realisiert werden 😉

Selbstgemachte Haltestellen-Umgebungsplaene

Es gibt ja so Momente, in denen moechte man ein Problem loesen, und dann schliesst man sich so lange ein, bis man hinreichend nahe an eine Loesung gekommen ist. So in der Art erging es mir am Schwoerwochenende, eigentlich wegen einer ganz trivialen Sache: Ich haette gerne Umgebungsplaene fuer die Bushaltestellen rund um die Uni.

Ein Grund, warum ich hier im Blog nicht mehr so viel schreibe ist naemlich, dass ich seit gut einem Jahr der Mobilitaetsreferent der Uni-Studierendenvertretung bin und in dieser Eigenschaft umso mehr anderswo schreibe. Und ein Problem, auf das ich in diesem Rahmen stiess, war der Umstand, dass es an vielen Haltestellen in der Stadt mittlerweile Orientierungsplaene fuer die naehere Umgebung gibt – es so etwas aber ausgerechnet an der Uni, an die immer wieder Konferenzteilnehmer*innen und sonstige Externe anreisen, ausschliesslich an der Haltestelle Kliniken Eselsberg gibt.

In einer Besprechung hatten die Stadtwerke zugesagt, Plaene nachzuruesten, sofern die Haltestellen dafuer noch freie Plaetze haben – und wir sagten zu, die dazugehoerigen Plaene zu bauen. Und nachdem Stefan Wehrmeyer mir beim occ13 noch einige Funktionen von TileMill naeher brachte, die ich bis dato nicht kannte, war der Weg schon einmal vorgezeichnet 🙂

Die Idee

Lokalen OpenStreetMap-Auszug von Ulm und Umgebung (genauer: Regierungsbezirk Tuebingen) downloaden, mit TileMill stylen, exportieren und aufbereiten

umgebplan

Die Umsetzung

Vorbereitung: TileMill und PostGIS installieren

(Siehe hierzu auch https://github.com/mapbox/osm-bright und http://wiki.openstreetmap.org/wiki/PostGIS/Installation

 sudo apt-get install tilemill postgresql postgresql-contrib postgis osm2pgsql
 sudo -u postgres createuser stk # as superuser
 sudo -u postgres createdb --encoding=UTF-8 --owner=stk tuebingen
 sudo -u postgres createlang plpgsql tuebingen

PostGIS einrichten, Karte laden und importieren

 sudo -u postgres psql -d tuebingen -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql
 sudo -u postgres psql -d tuebingen -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql
 sudo -u postgres psql -d tuebingen -f /usr/share/postgresql/9.1/contrib/postgis_comments.sql
 sudo -u postgres psql -d tuebingen -c "ALTER TABLE geometry_columns OWNER TO stk;"
 sudo -u postgres psql -d tuebingen -c "ALTER TABLE spatial_ref_sys OWNER TO stk;"
 wget http://download.geofabrik.de/europe/germany/baden-wuerttemberg/tuebingen-regbez-latest.osm.pbf
 osm2pgsql -c -G -d tuebingen tuebingen-regbez-latest.osm.pbf

osm-bright laden und anpassen

 git clone https://github.com/mapbox/osm-bright.git
 cd osm-bright
 cp configure.py.sample configure.py
 # edit according to readme
 ./make.py

Projekteinstellungen in project.mml:

"bounds": [
          9.9376,
          48.4151,
         9.971,
          48.4294
],
"center": [
          9.9535,
          48.4243,
          15
]

POIs hinzufuegen

Icons: http://www.sjjb.co.uk/mapicons/downloads (SJJB)

sudo apt-get install librsvg2-bin
./generatepngall.sh

Waehrend die PNGs gerendert werden, Layer in Tilemill hinzufuegen:

{
      "geometry": "point",
      "extent": [
        8.252064998851305,
        47.14375559492619,
        10.28521039856825,
        48.91388219485537
      ],
      "Datasource": {
        "type": "postgis",
        "table": "( SELECT name, highway, way\n  FROM planet_osm_point\n  WHERE building IS NULL AND highway IN ('bus_stop')\n  ORDER BY z_order ASC NULLS LAST\n) AS data",
        "key_field": "",
        "geometry_field": "way",
        "extent_cache": "auto",
        "extent": "918615.673665123,5965570.29255198,1144944.3842703,6260261.61701241",
        "dbname": "tuebingen",
        "user": "stk"
      },
      "id": "transit",
      "class": "",
      "srs-name": "900913",
      "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
      "advanced": {},
      "name": "transit"
    },
    {
      "geometry": "point",
      "extent": [
        8.252064998851305,
        47.14375559492619,
        10.28521039856825,
        48.91388219485537
      ],
      "Datasource": {
        "type": "postgis",
        "table": "( SELECT name, way, highway\n  FROM planet_osm_point\n  WHERE building IS NULL AND highway IN ('bus_stop')\n  ORDER BY z_order ASC NULLS LAST\n) AS data",
        "key_field": "",
        "geometry_field": "way",
        "extent_cache": "auto",
        "extent": "918615.673665123,5965570.29255198,1144944.3842703,6260261.61701241",
        "dbname": "tuebingen",
        "user": "stk"
      },
      "id": "transitlabel",
      "class": "",
      "srs-name": "900913",
      "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
      "advanced": {},
      "name": "transitlabel"
    },
    {
      "geometry": "point",
      "extent": [
        8.252064998851305,
        47.14375559492619,
        10.28521039856825,
        48.91388219485537
      ],
      "Datasource": {
        "type": "postgis",
        "table": "( SELECT *\n  FROM planet_osm_point\n  WHERE building IS NULL AND amenity IN ('biergarten', 'cafe', 'restaurant', 'bicycle_parking', 'charging_station', 'parking', 'atm') \n ORDER BY z_order ASC NULLS LAST\n) AS data",
        "key_field": "",
        "geometry_field": "",
        "extent_cache": "auto",
        "extent": "918615.673665123,5965570.29255198,1144944.3842703,6260261.61701241",
        "dbname": "tuebingen",
        "user": "stk"
      },
      "id": "uulmpoi",
      "class": "",
      "srs-name": "900913",
      "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
      "advanced": {},
      "name": "uulmpoi"
    }

und dann folgendes Styling in uulm.mss:

/* ****************************************************************** */

 #transitlabel[zoom >= 16] {
  text-name: [name];
  text-face-name: @sans;
  text-placement: point;
  text-wrap-width:60;
  text-fill: @poi_text;
  text-halo-radius: 2;
  text-halo-fill: @road_halo;
  text-min-distance: 2;
  text-placement-type: simple;
  text-allow-overlap: true;
  text-placements: "S,E,N,W,NE,SE,NW,SW,14,12,10";
  text-dx: 10;
  text-dy: 20;
 }

 #transit[zoom = 16] {point-file: url(img/sjjb/transport_bus_station.glow.999999.12.png); }
 #transit[zoom >= 17] {point-file: url(img/sjjb/transport_bus_station.glow.999999.20.png); }
 #transit[zoom >= 19] {point-file: url(img/sjjb/transport_bus_station.glow.999999.24.png); }

 #uulmpoi [amenity='cafe'][zoom <= 16] {point-file: url(img/icon/cafe-12.png); }
 #uulmpoi [amenity='cafe'][zoom >= 17] {point-file: url(img/icon/cafe-18.png); }
 #uulmpoi [amenity='cafe'][zoom >= 19] {point-file: url(img/icon/cafe-24.png); }

 #uulmpoi [amenity='restaurant'][zoom <= 16] {point-file: url(img/sjjb/food_restaurant.glow.8E7409.12.png); }
 #uulmpoi [amenity='restaurant'][zoom >= 17] {point-file: url(img/sjjb/food_restaurant.glow.8E7409.20.png); }
 #uulmpoi [amenity='restaurant'][zoom >= 19] {point-file: url(img/sjjb/food_restaurant.glow.8E7409.24.png); }

/*
 #uulmpoi [amenity='bicycle_parking'][zoom <= 16] {point-file: url(img/sjjb/transport_parking_bicycle.n.0092DA.12.png); }
 #uulmpoi [amenity='bicycle_parking'][zoom >= 17] {point-file: url(img/sjjb/transport_parking_bicycle.n.0092DA.20.png); }
 #uulmpoi [amenity='bicycle_parking'][zoom >= 19] {point-file: url(img/sjjb/transport_parking_bicycle.n.0092DA.24.png); }
*/

 #uulmpoi[amenity='restaurant'][zoom >= 16] {
  text-name: [name];
  text-face-name: @sans;
  text-placement: point;
  text-wrap-width:60;
  text-fill: @poi_text;
  text-halo-radius: 2;
  text-halo-fill: @road_halo;
  text-min-distance: 2;
  text-placement-type: simple;
  text-allow-overlap: true;
  text-placements: "S,E,N,W,NE,SE,NW,SW,14,12,10";
  text-dx: 10;
  text-dy: 10;
 }

FIXME die Marker sollten SVG sein, das ist noch TODO

Labelprobleme

Beim Rendern nach SVG oder PDF sehen die Labels (Strassennamen etc) seltsam aus: Buchstaben und Halos werden jeweils einzeln gerendert, so dass die Halos jeweils den naechsten Buchstaben ueberdecken. Das Problem scheint bekannt, siehe http://support.mapbox.com/discussions/tilemill/6001-text-halos-look-bad-in-pdfsvg-export, bleibt wohl nur die manuelle Beschriftung. Ich habe einfach die Labels in einem separaten Layer exportiert, der eingeblendet werden kann (oder auch nicht)

Handarbeit

Die Idealvorstellung war ja, dass sich der Prozess irgendwie automatisieren lassen wuerde, insbesondere wegen der Labels ging das aber nicht so einfach. Deswegen ging ich den folgenden Weg:

  • Einzelne Layer nacheinander exportieren, Breite 4000, Zoomlevel 17, Ausgabeformat PDF
    • Baselayer (Geometrien)
    • Strassenlabels
    • Transitmarker
    • POIs
  • Alle Layer in Illustrator (ich weiss, keine freie Software, gibts aber im PC-Pool an der Uni) zu einem Composite zusammenfuegen
  • Haendisch Beschriftungen hinzufuegen, einmal detailliert und einmal fuer den Uebersichtsplan
  • Alles in InDesign fuer den Druck anpassen

  • Optional: Versehentlich Schriftfarbe auf Passermarken setzen und sich wundern, warum die Glyphen pixelig rauskommen, bis man den Fehler bemerkt

Eine bessere Variante waere es, die Beschriftungen nochmals als eigene Datenquelle vorzuhalten und einzublenden, dann liesse sich das auch als SlippyMap exportieren, haette aber genau wieder dasselbe Problem, wenn man PDFs fuer den Druck exportieren moechte. Den derzeitigen Weg halte ich fuer einen gangbaren Kompromiss aus Aufwand/Ergebnis.

Betaversionen:

Mindstorms-Spende

Wir haben heute vom Institut fuer eingebettete Systeme einen Satz richtig alter Mindstorms-Kaesten ueberlassen bekommen, die wir hoffentlich kuenftig mit SchuelerInnen benutzen koennen, nachdem sie bislang hauptsaechlich im Schrank vor sich hin lagen.

mindstorms

Bei der naechsten Messe oder dem naechsten Schulbesuch kann ich dann auch eine neue Antwort auf die Frage geben, was man als InformatikerIn denn beispielsweise so alles macht: Unter anderem naemlich kilogrammweise Legoteile sortieren 😀

Reaktorkonferenz

Neben der Silvester-KIF 2010 in Wien war vergangene Woche nun die dritte „offizielle“ Konferenz der Informatikfachschaften, auf der ich war — an meiner Heimatuniversitaet Ulm 🙂

Letztes Jahr in Hamburg hatten sich einige FINnies spontan auferlegt, die kif 40.0 hier in Ulm ausrichten zu wollen, was im Laufe des Jahres zu einigen internen Verstimmungen fuehrte. 2004 war das wohl in Ulm ganz anders gelaufen: Die OrganisatorInnengruppe wuchs umso enger zusammen, je naeher die KIF rueckte — und wollte danach quasi nichts mehr miteinander zu tun haben. Dieses Mal war es quasi andersherum — was im Endeffekt auch ganz gut so war 😉

Juka und ich hatten noch auf der KIF in Hamburg angekuendigt, nur operativ kurz vor und waehrend der Konferenz selber dabei zu sein — und je naeher die Veranstaltung kam, desto schwieriger wurde es fuer mich, auf der Orgamailingliste querzulesen, da ich staendig zwischen „Mist, das geht in die Hose“ und „Nein, du mischst dich da nicht ein und schreibst denen vor, wie sie zu arbeiten haben“ schwankte. Dann kam die Veranstaltungswoche, und mir ist mehr denn je bewusst, wie froh wir eigentlich ueber unsere saucoole Uni und die saucoolen Studierenden hier sein koennen.

Da war neben Orgareferent (und FINnie) Krieger auch noch Orgareferentin (und Medizinerin) Undine da und grillte mit, und baute Pavillions auf, und fuehrte die Leute durch die Gewoelbe der Uni.

Und da war mal eben fast die ganze KIF lang Flo vom AStA-Anlagenreferat da und fuhr dem spaetabendlichen „AK Schlechte Splatterfilme schauen“ mit dem Kommentar „Die Boxen in den Seminarraeumen sind zu schlecht fuer das, was ihr vorhabt“ mal eben „die kleinsten Boxen, die ich auf die Schnelle gefunden habe“ samt Verstaerker und Mischpult in das Forschungsgebaude O29. Mit merkbaren Folgen.

Oder, dass man auch abends vor dem Feiertag noch jemandem beim kiz erreicht, um die Sache mit dem fehlenden WLAN zu fixen. Generell: Wir sind ja gewohnt, dass wir hier als Studierende eigene DECT-Geraete einbuchen und benutzen koennen, aber fuer viele andere wirkte das alles andere als selbstverstaendlich. Oder, dass wir Gartenliegen und Stuehle in der Wiese vor der Uni stehen haben. Oder, dass wir dicke Grills von FIN und FS-ET benutzen konnten. Oder, dass Undine dann noch mal eben die AStA-eigene Eiswuerfelmaschine anwarf und wir einen riesigen Container voll davon fuer Cocktails, Smoothies, das Ewige Fruehstuecksbuffett und Getraenke benutzen konnten.

Ueberhaupt, das Buffett. Anfangs sah das alles ein wenig unordentlich aus. Dann kam Bene und mischte alles auf. Mit Gurkentierchen. Oder Apfelvoegel. Oder Honigmelonenhaifischen. Frischem Ananassaft. Smoothies. Dekoobst. Kam gut an 🙂

Ich hatte dann noch ueber Nacht eine Stadtfuehrung zusammengezimmert und einen zweistuendigen Rundumschlag von der ehemaligen BTX-Leitzentrale ueber Einstein, Muenster, Rathaus, Weinhof, Schiefes Haus und Donau bis Bundesfestung gegeben, bevor eine gar nicht so kleine Gruppe das Muenster bestieg. Auch das gefiel wohl.

Und noch eine Stadtfuehrung gab’s von Juka und mir: Anstatt (vernuenftigerweise) frueh nach Hause zu gehen und tags drauf nach Friedrichshafen zum BarCampBodensee zu fahren, liess ich mich dann doch noch zur Kneipentour breitschlagen. Auch die… wirkte 😉

(Ich merke gerade, die Vielzahl der „ernsten“ AKs geht irgendwie in den abgedrehten vollkommen unter…)

Aber, ja, es gab ernste Arbeitskreise. Nach welchen Anstellungs- und Arbeitszeitenmodellen InformatikerInnen beispielsweise kuenftig arbeiten wollen. Oder die altbekannte Genderdiskussion aus dem Abschlussplenum in einen separaten AK zu verlagern. Spoiler: Klappte nicht, weil gerade diejenigen, die am lautesten rumzupoebeln anfangen, wenn die Diskussion aufkommt, sich am wenigsten wissenschaftlich mit dem Thema auseinandersetzen wollen.

Ansonsten: Wie man Konflikte zwischen Fachschaften und Hochschulleitung bzw. Profs loesen kann; wie man effizient Lerngruppen organisiert; den Dauerbrenner Zivilklausel — die meisten AKs habe ich wegen eigener Arbeit nicht einmal mitbekommen.

Das machte jedenfalls wieder Lust auf mehr. Irgendwie wirkt das immer wie ein Barcamp, nur ohne den ganzen SEO- und Vermarktungsmist. Und mit mehr Unfug.