[{"content":" iPROT ist eine web-basierte Lösung zum Verfassen und Versenden von Protokollen.\nDas Projekt wurde von Michael Kofler, Stephan Lenhart, Thomas Mathoi und Bernd Öggl umgesetzt. Zu unseren Kunden zählen unter anderem PORR und Red Bull.\nWeitere Informationen finden Sie auf der iPROT-Website\n","date":"14. Juli 2020","permalink":"https://webman.at/cms/projekte/iprot/","section":"Projekte","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/cms/images/iprot.png\" alt=\"iprot\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e\n\u003cp\u003eiPROT ist eine web-basierte Lösung zum Verfassen und Versenden von Protokollen.\u003c/p\u003e","title":"iPROT"},{"content":"","date":null,"permalink":"https://webman.at/cms/post/","section":"Blog","summary":"","title":"Blog"},{"content":"GIS und Datenbanken an der Uni Innsbruck # SS 2026: Web-mapping mit Klaus Förster. Wieder mit großartigen Projekt-Präsentationen. SS 2025: Web-mapping mit Klaus Förster. SS 2024: Web-mapping mit Klaus Förster. SS 2023: Web-mapping mit Klaus Förster. SS 2022: Web-mapping mit Klaus Förster. SS 2021: Web-mapping mit Klaus Förster. Wurde wegen Covid-19 als Distance Learning Kurs gehalten. SS 2020: Web-mapping mit Klaus Förster. Wurde wegen Covid-19 als Distance Learning Kurs gehalten. SS 2019: Web-mapping mit Klaus Förster SS 2018: Web-mapping mit Klaus Förster SS 2017: Web-mapping mit Klaus Förster SS 2016: Web-mapping mit Klaus Förster SS 2009: Anwendung von Geoinformatik mit Armin Heller WS 2008: Online Visualisierung von Geodaten mit Klaus Förster SS 2008: Anwendung von Geoinformatik mit Armin Heller WS 2007: Spezielle Geoinformatik Digitale Visualisierung u. Geokommunikation SS 2007: Relationale Datenbanken Relationale Datenbanken WS 2006: Linux und TNTMips SS 2006: Relationale Datenbanken WS 2005: Linux und TNTMips SS 2005: Geodatabase – SDE WS 2004: Relationale Datenbanken SS 2004: Geodatabase WS 2003: Applikationsentwicklung mit FreeGis Produkten SS 2003: Datenbanken SS 2002: Arbeiten mit TNTMips WS 2001: GIS: Datenbankprogrammierung SS 2001: EDV 2 für Geographen/Innen WS 2000: Internet für GeographInnen SS 2000: EDV 2 für Geographen/Innen ","date":"18. März 2020","permalink":"https://webman.at/cms/projekte/uni/","section":"Projekte","summary":"\u003ch3 id=\"gis-und-datenbanken-an-der-uni-innsbruck\" class=\"relative group\"\u003eGIS und Datenbanken an der \u003ca href=\"https://www.uibk.ac.at/\" target=\"_blank\" rel=\"noreferrer\"\u003eUni Innsbruck\u003c/a\u003e \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#gis-und-datenbanken-an-der-uni-innsbruck\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003eSS 2026: \u003ca href=\"https://lfuonline.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=26S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e. Wieder mit \u003ca href=\"https://geographie.uibk.ac.at/webmapping/contest\" target=\"_blank\" rel=\"noreferrer\"\u003egroßartigen Projekt-Präsentationen\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSS 2025: \u003ca href=\"https://lfuonline.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=25S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSS 2024: \u003ca href=\"https://lfuonline.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=24S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSS 2023: \u003ca href=\"https://orawww.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=23S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSS 2022: \u003ca href=\"https://orawww.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=22S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSS 2021: \u003ca href=\"https://orawww.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=21S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e. Wurde wegen Covid-19 als Distance Learning Kurs gehalten.\u003c/li\u003e\n\u003cli\u003eSS 2020: \u003ca href=\"https://orawww.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=20S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e. Wurde wegen Covid-19 als Distance Learning Kurs gehalten.\u003c/li\u003e\n\u003cli\u003eSS 2019: \u003ca href=\"https://orawww.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=19S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSS 2018: \u003ca href=\"https://orawww.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=18S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSS 2017: \u003ca href=\"https://orawww.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=17S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSS 2016: \u003ca href=\"https://orawww.uibk.ac.at/public/lfuonline_lv.details?sem_id_in=16S\u0026amp;lvnr_id_in=716409\" target=\"_blank\" rel=\"noreferrer\"\u003eWeb-mapping\u003c/a\u003e mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSS 2009: \u003ca href=\"https://orawww.uibk.ac.at/public_prod/owa/lfuonline_lv.details?sem_id_in=09S\u0026amp;lvnr_id_in=716024\" target=\"_blank\" rel=\"noreferrer\"\u003eAnwendung von Geoinformatik\u003c/a\u003e mit \u003ca href=\"https://www.uibk.ac.at/geographie/personal/heller/\" target=\"_blank\" rel=\"noreferrer\"\u003eArmin Heller\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWS 2008: Online Visualisierung von Geodaten mit \u003ca href=\"https://svg.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSS 2008: \u003ca href=\"https://orawww.uibk.ac.at/public_prod/owa/lfuonline_lv.details?sem_id_in=08S\u0026amp;lvnr_id_in=716024\" target=\"_blank\" rel=\"noreferrer\"\u003eAnwendung von Geoinformatik\u003c/a\u003e mit \u003ca href=\"https://www.uibk.ac.at/geographie/personal/heller/\" target=\"_blank\" rel=\"noreferrer\"\u003eArmin Heller\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWS 2007: \u003ca href=\"https://orawww.uibk.ac.at/public_prod/owa/lfuonline_lv.details?sem_id_in=07W\u0026amp;lvnr_id_in=716042\" target=\"_blank\" rel=\"noreferrer\"\u003eSpezielle Geoinformatik\u003c/a\u003e Digitale Visualisierung u. Geokommunikation\u003c/li\u003e\n\u003cli\u003eSS 2007: \u003ca href=\"https://orawww.uibk.ac.at/public_prod/owa/lfuonline_lv.details?sem_id_in=07S\u0026amp;lvnr_id_in=716029\" target=\"_blank\" rel=\"noreferrer\"\u003eRelationale Datenbanken\u003c/a\u003e Relationale Datenbanken\u003c/li\u003e\n\u003cli\u003eWS 2006: Linux und TNTMips\u003c/li\u003e\n\u003cli\u003eSS 2006: Relationale Datenbanken\u003c/li\u003e\n\u003cli\u003eWS 2005: Linux und TNTMips\u003c/li\u003e\n\u003cli\u003eSS 2005: Geodatabase – SDE\u003c/li\u003e\n\u003cli\u003eWS 2004: Relationale Datenbanken\u003c/li\u003e\n\u003cli\u003eSS 2004: Geodatabase\u003c/li\u003e\n\u003cli\u003eWS 2003: Applikationsentwicklung mit FreeGis Produkten\u003c/li\u003e\n\u003cli\u003eSS 2003: Datenbanken\u003c/li\u003e\n\u003cli\u003eSS 2002: Arbeiten mit TNTMips\u003c/li\u003e\n\u003cli\u003eWS 2001: GIS: Datenbankprogrammierung\u003c/li\u003e\n\u003cli\u003eSS 2001: EDV 2 für Geographen/Innen\u003c/li\u003e\n\u003cli\u003eWS 2000: Internet für GeographInnen\u003c/li\u003e\n\u003cli\u003eSS 2000: EDV 2 für Geographen/Innen\u003c/li\u003e\n\u003c/ul\u003e","title":"Universitäre Lehre"},{"content":"Gründach: Lebensraum in Zeiten von Klimawandel und Biodiversitätskrise #Wir sind Teil des Sparkling-Science Projektes „Lebensraum Gründach“! In diesem Projekt untersuchen wir die Biodiversität und die Extrembedingungen auf Gründächern. Wir, das sind Wissenschaftler:innen der Universität Innsbruck und der Tiroler Landesmuseen, Schüler:innen und deren Lehrer:innen gemeinsam. Angesichts der Biodiversitätskrise und des Klimawandels ist eine zukunftsfähige Gestaltung unseres Lebensraums – dem Siedlungsraum - von großer Bedeutung. Im Projekt erforschen wir welchen Beitrag Gründächer zur Förderung der Biodiversität leisten können, und ob diese den Folgen des Klimawandels gewachsen sind. Wissenschaftler:innen und Schüler:innen arbeiten dabei zusammen und erfassen die Insektenvielfalt mit modernsten Methoden: von Tagfalterbeobachtungen bis hin zu genetischen Analysen. Auch die Pflanzen und deren Umwelt werden untersucht – mittels direkter Beobachtungen sowie Boden- und Klimamessungen.\n„Lebensraum Gründach“ wird gefördert vom Bundesministerium für Bildung, Wissenschaft und Forschung.\n","date":"25. Oktober 2022","permalink":"https://webman.at/cms/projekte/gruendach/","section":"Projekte","summary":"\u003ch1 id=\"gründach-lebensraum-in-zeiten-von-klimawandel-und-biodiversitätskrise\" class=\"relative group\"\u003eGründach: Lebensraum in Zeiten von Klimawandel und Biodiversitätskrise \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#gr%c3%bcndach-lebensraum-in-zeiten-von-klimawandel-und-biodiversit%c3%a4tskrise\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h1\u003e\u003cp\u003eWir sind Teil des \u003ca href=\"https://www.sparklingscience.at/\" target=\"_blank\" rel=\"noreferrer\"\u003eSparkling-Science\u003c/a\u003e\nProjektes \u003ca href=\"http://www.vielfaltdach.at\" target=\"_blank\" rel=\"noreferrer\"\u003e„Lebensraum Gründach“\u003c/a\u003e! In diesem Projekt untersuchen wir die\nBiodiversität und die Extrembedingungen auf Gründächern. Wir, das sind\nWissenschaftler:innen der Universität Innsbruck und der Tiroler Landesmuseen,\nSchüler:innen und deren Lehrer:innen gemeinsam. Angesichts der\nBiodiversitätskrise und des Klimawandels ist eine zukunftsfähige Gestaltung\nunseres Lebensraums – dem Siedlungsraum - von großer Bedeutung. Im Projekt\nerforschen wir welchen Beitrag Gründächer zur Förderung der Biodiversität\nleisten können, und ob diese den Folgen des Klimawandels gewachsen sind.\nWissenschaftler:innen und Schüler:innen arbeiten dabei zusammen und erfassen\ndie Insektenvielfalt mit modernsten Methoden: von Tagfalterbeobachtungen bis\nhin zu genetischen Analysen. Auch die Pflanzen und deren Umwelt werden\nuntersucht – mittels direkter Beobachtungen sowie Boden- und Klimamessungen.\u003c/p\u003e","title":"Gründach"},{"content":"viel-falter ist ein Projekt das im Rahmen des Förderprogramms Sparkling Science durchgeführt wird und vom Bundesministerium für Wissenschaft und Forschung gefördert wird.\nAls Projektpartner betreut webman.at die EDV-Infrastruktur.\nZum viel-falter Projekt\n","date":"20. Januar 2013","permalink":"https://webman.at/cms/projekte/vielfalter/","section":"Projekte","summary":"\u003cp\u003e\u003cstrong\u003eviel-falter\u003c/strong\u003e ist ein Projekt das im Rahmen des Förderprogramms \u003ca href=\"https://www.sparklingscience.at/\" target=\"_blank\" rel=\"noreferrer\"\u003eSparkling Science\u003c/a\u003e durchgeführt wird und vom \u003ca href=\"https://www.bmwf.gv.at/\" target=\"_blank\" rel=\"noreferrer\"\u003eBundesministerium für Wissenschaft und Forschung\u003c/a\u003e gefördert wird.\u003c/p\u003e","title":"viel-falter"},{"content":"Frontend Webapplikation für das Watermanagement System.\n","date":"13. Juli 2020","permalink":"https://webman.at/cms/projekte/wms/","section":"Projekte","summary":"\u003cp\u003eFrontend Webapplikation für das \u003ca href=\"https://aquis-systems.ch/sanitaer-loesungen.html#wasser-management-system\" target=\"_blank\" rel=\"noreferrer\"\u003eWatermanagement System\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/cms/images/aq2.jpg\" alt=\"wms\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e","title":"Watermanagement System bei Aquis"},{"content":"","date":null,"permalink":"https://webman.at/cms/buecher/","section":"Bücher","summary":"","title":"Bücher"},{"content":"Aktiv # iPROT Universitäre Lehre Gründach Vielfalter Aquis WMS snowhow.info Digitab Public Display Archiv # skiline Eine interessante Übersicht bietet auch die timeline.\n","date":null,"permalink":"https://webman.at/cms/projekte/","section":"Projekte","summary":"\u003ch3 id=\"aktiv\" class=\"relative group\"\u003eAktiv \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#aktiv\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\n      \n    \u003ca href=\"https://webman.at/cms/projekte/iprot/\"\u003eiPROT\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\n      \n    \u003ca href=\"https://webman.at/cms/projekte/uni/\"\u003eUniversitäre Lehre\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\n      \n    \u003ca href=\"https://webman.at/cms/projekte/gruendach/\"\u003eGründach\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\n      \n    \u003ca href=\"https://webman.at/cms/projekte/vielfalter/\"\u003eVielfalter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\n      \n    \u003ca href=\"https://webman.at/cms/projekte/wms/\"\u003eAquis WMS\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\n      \n    \u003ca href=\"https://webman.at/cms/projekte/snowhow/\"\u003esnowhow.info\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\n      \n    \u003ca href=\"https://webman.at/cms/projekte/digitab/\"\u003eDigitab\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\n      \n    \u003ca href=\"https://webman.at/cms/projekte/pd/\"\u003ePublic Display\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"archiv\" class=\"relative group\"\u003eArchiv \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#archiv\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\n      \n    \u003ca href=\"https://webman.at/cms/projekte/skiline/\"\u003eskiline\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEine interessante Übersicht bietet auch die \u003ca href=\"/cms/webman\"\u003etimeline\u003c/a\u003e.\u003c/p\u003e","title":"Projekte"},{"content":"snowhow versucht dir bei der Planung deiner Freeride- oder Skitour in den Alpen zu helfen. Wir haben dazu eine Webseite mit Neuschnee- und Wettersuche, eine freie Karte auf Basis von Openstreetmap und ein App für Android und iOS, das dir auch offline im Gelände helfen soll.\nDie Wetter- und Neuschneesuche: snowhow-web #Mit sehr präzisen Wetterprognose Daten (ZAMG) über den ganzen Alpenraum kannst du dir den Platz suchen, wo am meisten Neuschnee, die meiste Sonne oder die niedrigsten Temperaturen in den nächsten Tagen sein werden. Die Suchergebnisse enthalten außer dem Wetterbericht auch den aktuellen Lawinenlagebericht (für AT/DE/IT), ein paar Webcams und die Übersichtskarte. Du findest die Wetter- und Neuschneesuche unter https://snowhow.info\nDie Karte: snowhow-map #Die snowhow-Karte basiert auf der wunderbaren Openstreetmap Grundlage. Für den Alpenraum haben wir die Karte um einige Eigenschaften die für den Wintersport interessant sind erweitert (genaue Höheninformationen, Felszeichnung (AT), Pisten (Partnergebiete)).\nFür die Tourenplanung sehr wertvoll sind die in der Karte vorhandenen Touren (von snowhow-Nutzern aufgezeichnet), die Gefahrensymbole in den Partnergebieten und eine Kartenebene mit Hangneigungen als Unterstützung bei der Einschätzung der aktuellen Lawinengefahr. Die snowhow-map findest du unter https://snowhow.info/map\nDie App: snowhow-freeride #Wer öfters abseits von Pisten unterwegs ist kennt die Situation gut: Auch in touristisch stark erschlossenen Regionen ist die Internetverbindung über das Mobiltelefon nicht immer fantastisch. Mit der snowhow-freeride App kannst du dir den gewünschten Kartenausschnitt der snowhow-map kostenlos (außer den anfallenden Kosten für den Datentransfer) aufs Handy laden. Am besten machst du das schon vor der Tour über ein schnelles Wifi. Die Anzeige des eigenen Standorts in Kombination mit der Hangneigung in der Karte kann bei jedem Wetter sehr hilfreich sein.\nAußerdem kannst du in der App deine Tracks aufzeichnen, Tracks von anderen herunterladen, und dir die aktuellen Lawinenlageberichte anschauen (dazu musst du natürlich online sein). Die App ist zweisprachig für Android (ab Version 4.0) und iOS gratis im jeweiligen App-Store herunterzuladen.\nWeitere Informationen zu der App findest du unter https://snowhow.info/app oder in den Beschreibungen der App im jeweiligen App-Store.\n","date":"20. August 2015","permalink":"https://webman.at/cms/projekte/snowhow/","section":"Projekte","summary":"\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://snowhow.info/\" target=\"_blank\" rel=\"noreferrer\"\u003esnowhow\u003c/a\u003e\u003c/strong\u003e versucht dir bei der Planung deiner Freeride- oder Skitour in den Alpen zu helfen. Wir haben dazu eine Webseite mit Neuschnee- und Wettersuche, eine freie Karte auf Basis von Openstreetmap und ein App für Android und iOS, das dir auch offline im Gelände helfen soll.\u003c/p\u003e","title":"snowhow"},{"content":" Eine Auswahl der realisierten Projekte von webman.at. ","date":"1. Juli 2020","permalink":"https://webman.at/cms/webman/","section":"","summary":"\u003cdiv style=\"text-align:center;\"\u003e\n\nEine Auswahl der realisierten Projekte von webman.at.\n\n\u003c/div\u003e\n\n\u003clink title=\"timeline-styles\" rel=\"stylesheet\" href=\"/cms/css/timeline.css\"\u003e\n\u003cscript src=\"/cms/js/timeline.js\"\u003e\u003c/script\u003e\n\u003cdiv id='tl' style=\"width: 100%; height: 900px;\"\u003e\u003c/div\u003e\n\n\u003cscript defer\u003e\n  const opts = {\n    timenav_height_percentage: 55,\n    marker_width_min: 90,\n    marker_height_min: 10,\n    hash_bookmark: true,\n    start_at_end: true\n    \n  }\n  \n  \n  const timeline = new TL.Timeline('tl', {\"events\":[{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/uni.png\"},\"start_date\":{\"month\":3,\"year\":2001},\"text\":{\"headline\":\"Uni Innsbruck\",\"text\":\"\\u003cp\\u003eLehrveranstaltung EDV2 für Geographen\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/uni.png\"},\"start_date\":{\"month\":3,\"year\":2005},\"text\":{\"headline\":\"Uni Innsbruck\",\"text\":\"\\u003cp\\u003eLehrveranstaltung Geodatabase\\u003c/p\\u003e\"}},{\"background\":{},\"end_date\":{\"month\":8,\"year\":2001},\"media\":{\"caption\":\"Swarowski\",\"credit\":\"hyve\",\"url\":\"img/gem_motiv.png\"},\"start_date\":{\"month\":2,\"year\":2001},\"text\":{\"headline\":\"Swarowski: Gem motivs\",\"text\":\"\\u003cp\\u003eInteraktive Web-Applikation zum Konfigurieren von Glas-Steinchen-Motiven\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/umn.png\"},\"start_date\":{\"year\":2003},\"text\":{\"headline\":\"Mapserver\",\"text\":\"\\u003cp\\u003eSysadmin Tätigkeiten bei der Firma Planalp\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/tt_openoffice.jpg\"},\"start_date\":{\"year\":2006},\"text\":{\"headline\":\"TT: Artikel zu IT-Themen\",\"text\":\"\\u003cp\\u003eMehrere Artikel zu Themen wie Wikipedia, Google, Datenspeicher\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/skiline_db.jpg\"},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/skiline06.png\"},\"start_date\":{\"year\":2004},\"text\":{\"headline\":\"skiline.cc\",\"text\":\"\\u003cp\\u003eInteraktive Web-Plattform zur Auswertung von SkifahrerInnen\\u003c/p\\u003e\\u003cp\\u003e2004 konnten wir die ersten Abfragen an die skidata-Datenbanken ausführen\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/infar.png\"},\"start_date\":{\"year\":2002},\"text\":{\"headline\":\"Infar\",\"text\":\"\\u003cp\\u003eWebsite zu Infar-Tirol. Mit Anmeldung zur Alkohollenker Nachschulung :-) \\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/pd.png\"},\"start_date\":{\"month\":11,\"year\":2007},\"text\":{\"headline\":\"Public Display\",\"text\":\"\\u003cp\\u003eEin Informationssystem auf der Basis von RSS-Feeds.\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"Digitab App\",\"credit\":\"\",\"url\":\"img/dt2.jpg\"},\"start_date\":{\"month\":8,\"year\":2013},\"text\":{\"headline\":\"Digitab v2\",\"text\":\"\\u003cp\\u003eWeiterentwicklungen zur Digitab-App.\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"Digitab App\",\"credit\":\"\",\"url\":\"img/digitab.jpg\"},\"start_date\":{\"month\":8,\"year\":2011},\"text\":{\"headline\":\"Digitab\",\"text\":\"\\u003cp\\u003eAndroid/IOS App zum Kartieren am Tablet/Handy (Auftrag von ILF)\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/npht.png\"},\"start_date\":{\"year\":2011},\"text\":{\"headline\":\"Nationalpark Hohe Tauern: Public Display\",\"text\":\"\\u003cp\\u003eEine weitere Implementierung von Public Display für den Nationalpark Hohe Tauern\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/iprot.png\"},\"start_date\":{\"month\":12,\"year\":2010},\"text\":{\"headline\":\"iPROT\",\"text\":\"\\u003cp\\u003eSoftware zum Erstellen von interaktiven Protokollen. Mit PDF-Versand, Benachrichtigungen, ...\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"\"},\"start_date\":{\"year\":2013},\"text\":{\"headline\":\"FIRE\",\"text\":\"\\u003cp\\u003eWeb-Applikation im medizinischen Umfeld. Mit Michael Kofler (Auftraggeber aus der Schweiz)\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/snowhow_app_v0.jpg\"},\"start_date\":{\"month\":12,\"year\":2011},\"text\":{\"headline\":\"snowhow app\",\"text\":\"\\u003cp\\u003eApp für Freeride SkifahreInnen\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/snowhow_app_v2.jpg\"},\"start_date\":{\"month\":11,\"year\":2018},\"text\":{\"headline\":\"snowhow app v3\",\"text\":\"\\u003cp\\u003eEin vollständiger Rewrite der App. Das auf Angular aufsetzende ionic-Framework stellt die technische Basis der Applikation dar. Der Fokus liegt jetzt mehr auf der Vermarktung von Partner-Gebieten als auf technischen Feinheiten. Die Track-Aufzeichnung und Verwaltung fliegt hinaus.\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/snowhow_app_v1.png\"},\"start_date\":{\"month\":12,\"year\":2013},\"text\":{\"headline\":\"snowhow app\",\"text\":\"\\u003cp\\u003eApp für Freeride SkifahreInnen\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/greece_2.jpg\"},\"end_date\":{\"month\":9,\"year\":2015},\"media\":{\"caption\":\"Kreta\",\"credit\":\"\",\"url\":\"img/greece_work.jpg\"},\"start_date\":{\"month\":2,\"year\":2015},\"text\":{\"headline\":\"Greece :)\",\"text\":\"\\u003cp\\u003eEine kleine Auszeit vom Tagesgeschäft.\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/aq1.jpg\"},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/aq2.jpg\"},\"start_date\":{\"month\":4,\"year\":2016},\"text\":{\"headline\":\"Aquis: WMS\",\"text\":\"\\u003cp\\u003e\\u003cem\\u003eWater Management System\\u003c/em\\u003e: Steuerung von Sanitär-Armaturen über das Netzwerk.\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/node_logo.png\"},\"start_date\":{\"month\":11,\"year\":2016},\"text\":{\"headline\":\"Workshop ZAMG\",\"text\":\"\\u003cp\\u003e2-tägiger Workshop zu moderner Web-Entwicklung (SPA, Nodejs) und Docker\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/esd.png\"},\"start_date\":{\"month\":9,\"year\":2015},\"text\":{\"headline\":\"CHES\",\"text\":\"\\u003cp\\u003eSysadmin Tätigkeiten bei der Firma ESD\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/docker_logo.png\"},\"start_date\":{\"month\":8,\"year\":2018},\"text\":{\"headline\":\"Workshop: Docker\",\"text\":\"\\u003cp\\u003e2-tägiger Workshop zu Docker beim SOS-Kinderdorf in Innsbruck\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/container.jpg\"},\"display_data\":true,\"media\":{\"caption\":\"Dockerbuch\",\"credit\":\"Bernd Öggl/Michael Kofler\",\"thumbnail\":\"img/dc.png\",\"url\":\"img/dc.png\"},\"start_date\":{\"month\":8,\"year\":2018},\"text\":{\"headline\":\"Dockerbuch\",\"text\":\"\\u003cp\\u003eEin Buch über Docker\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"Git\",\"credit\":\"\",\"thumbnail\":\"img/git-buch.png\",\"url\":\"img/git-buch.png\"},\"start_date\":{\"month\":7,\"year\":2020},\"text\":{\"headline\":\"\\u003ca href='/cms/buecher/git'\\u003eGitbuch\\u003c/a\\u003e\",\"text\":\"\\u003cp\\u003eEin sehr cooles Buch mit viel Praxisbeispielen.\\u003c/p\\u003e\"}},{\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/la.png\"},\"start_date\":{\"year\":2017},\"text\":{\"headline\":\"Landärzte Tirol\",\"text\":\"\\u003cp\\u003eInstallation und endlose Diskussionen um die Plattform Landärzte Tirol.\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"PHP und MySQL\",\"credit\":\"\",\"url\":\"img/php.jpg\"},\"start_date\":{\"year\":2007},\"text\":{\"headline\":\"Buch: PHP \\u0026 MySQL\",\"text\":\"\\u003cp\\u003eTeamwork mit Michael Kofler\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/php53a.jpg\"},\"start_date\":{\"year\":2009},\"text\":{\"headline\":\"Buch: PHP \\u0026 MySQL 2. Auflage\",\"text\":\"\\u003cp\\u003eTeamwork mit Michael Kofler\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/html5.jpg\"},\"start_date\":{\"year\":2010},\"text\":{\"headline\":\"Buch: HTML5\",\"text\":\"\\u003cp\\u003eTeamwork mit Klaus Förster\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/html5_en.jpg\"},\"start_date\":{\"month\":11,\"year\":2010},\"text\":{\"headline\":\"Buch: HTML5 Englisch\",\"text\":\"\\u003cp\\u003eTeamwork mit Klaus Förster\\u003c/p\\u003e\"}},{\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/malawi.jpg\"},\"start_date\":{\"month\":\"10\",\"year\":\"2019\"},\"text\":{\"headline\":\"SOS Außendienst Malawi\",\"text\":\"\\u003cp\\u003eFeldeinsatz bei SOS Malawi in Lilongwe\\u003c/p\\u003e\"}},{\"end_date\":{\"month\":3,\"year\":2020},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/angular.svg\"},\"start_date\":{\"month\":\"08\",\"year\":\"2019\"},\"text\":{\"headline\":\"SOS Kinderdorf\",\"text\":\"\\u003cp\\u003eFrontend Entwicklung für SOS Kinderdorf.\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/container.jpg\"},\"display_data\":true,\"media\":{\"caption\":\"Dockerbuch\",\"credit\":\"Bernd Öggl/Michael Kofler\",\"thumbnail\":\"img/dc2.png\",\"url\":\"img/dc2.png\"},\"start_date\":{\"month\":5,\"year\":2019},\"text\":{\"headline\":\"Dockerbuch 2. Auflage\",\"text\":\"\\u003cp\\u003eDie 2. Auflage des erfolgreichen Buchs über Docker\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"Webman\",\"credit\":\"\",\"thumbnail\":\"img/wman.svg\",\"url\":\"img/wman.svg\"},\"start_date\":{\"month\":7,\"year\":2020},\"text\":{\"headline\":\"Webman\",\"text\":\"\\u003cp\\u003eEin extrem cooles Re-branding\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"viel-falter.at\",\"credit\":\"\",\"url\":\"img/vf1.png\"},\"start_date\":{\"month\":6,\"year\":2014},\"text\":{\"headline\":\"Vielfalter\",\"text\":\"\\u003cp\\u003eWeb-App zur systematischen Aufnahme von Tagfaltern. Im Auftrag der Universität Innsbruck.\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"viel-falter.at\",\"credit\":\"\",\"url\":\"img/vf.png\"},\"start_date\":{\"month\":5,\"year\":2020},\"text\":{\"headline\":\"Vielfalter Updates\",\"text\":\"\\u003cp\\u003eAusbau der Web-App zur systematischen Aufnahme von Tagfaltern.\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/faltergamev2.png\"},\"display_data\":true,\"end_date\":{\"month\":\"3\",\"year\":\"2021\"},\"start_date\":{\"month\":\"02\",\"year\":\"2021\"},\"text\":{\"headline\":\"Viel-Falter Spiel v2\",\"text\":\"\\u003cp\\u003eDie 2. Auflage des Arten-Erkennungsspiel mit Vue.js und einer JSON-REST Api. \\u003ca href='https://viel-falter.at/game'\\u003eProbier es aus\\u003c/a\\u003e.\\u003c/p\\u003e\"}},{\"background\":{},\"end_date\":{\"month\":7,\"year\":2021},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/uni.png\"},\"start_date\":{\"month\":3,\"year\":2021},\"text\":{\"headline\":\"Uni Innsbruck\",\"text\":\"\\u003cp\\u003eLehrveranstaltung Webmapping\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/novo-ss.png\"},\"display_data\":true,\"end_date\":{\"month\":\"7\",\"year\":\"2021\"},\"start_date\":{\"month\":\"12\",\"year\":\"2020\"},\"text\":{\"headline\":\"COVID Test-Data processing\",\"text\":\"\\u003cp\\u003eDatenverwaltung für COVID-Test Labor Daten\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/container.jpg\"},\"display_data\":true,\"media\":{\"caption\":\"Dockerbuch\",\"credit\":\"Bernd Öggl/Michael Kofler\",\"thumbnail\":\"img/dc3.jpg\",\"url\":\"img/dc3.jpg\"},\"start_date\":{\"month\":8,\"year\":2021},\"text\":{\"headline\":\"Dockerbuch 3. Auflage\",\"text\":\"\\u003cp\\u003eDie 3. Auflage des erfolgreichen Buchs über Docker\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"Git\",\"credit\":\"\",\"thumbnail\":\"img/git-buch.png\",\"url\":\"img/git-buch.png\"},\"start_date\":{\"month\":3,\"year\":2022},\"text\":{\"headline\":\"\\u003ca href='/cms/buecher/git'\\u003eGitbuch 2. Auflage\\u003c/a\\u003e\",\"text\":\"\\u003cp\\u003eDie zweite, erweiterte Auflage des sehr cooles Buchs mit viel Praxisbeispielen.\\u003c/p\\u003e\"}},{\"end_date\":{\"month\":3,\"year\":2022},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/angular.svg\"},\"start_date\":{\"month\":11,\"year\":2021},\"text\":{\"headline\":\"SOS Kinderdorf\",\"text\":\"\\u003cp\\u003eFrontend Entwicklung für SOS Kinderdorf.\\u003c/p\\u003e\"}},{\"background\":{},\"end_date\":{\"month\":7,\"year\":2022},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/uni.png\"},\"start_date\":{\"month\":3,\"year\":2022},\"text\":{\"headline\":\"Uni Innsbruck\",\"text\":\"\\u003cp\\u003eLehrveranstaltung Webmapping\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/node_logo.png\"},\"display_data\":true,\"end_date\":{\"month\":10,\"year\":2021},\"start_date\":{\"month\":9,\"year\":2021},\"text\":{\"headline\":\"COVID Test-Data processing\",\"text\":\"\\u003cp\\u003eDatenverwaltung für COVID-Test Labor Daten\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/iprot_en.jpg\"},\"display_data\":true,\"end_date\":{\"month\":6,\"year\":2023},\"media\":{\"caption\":\"\",\"credit\":\"\",\"thumbnail\":\"img/iPROT-Logo.png\",\"url\":\"img/iPROT-Logo.png\"},\"start_date\":{\"month\":6,\"year\":2022},\"text\":{\"headline\":\"iPROT v4\",\"text\":\"\\u003cp\\u003eEin major-Update für unser erfolgreiches Software-Projekt.\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/gruendach.png\"},\"display_data\":true,\"end_date\":{\"month\":6,\"year\":2023},\"media\":{\"caption\":\"Gründach\",\"credit\":\"\",\"thumbnail\":\"img/gd.svg\",\"url\":\"img/gd.svg\"},\"start_date\":{\"month\":2,\"year\":2023},\"text\":{\"headline\":\"\\u003ca href='https://app.vielfaltdach.at/'\\u003eGründach\\u003c/a\\u003e\",\"text\":\"\\u003cp\\u003eLebensraum Gründach in Zeiten von Klimawandel und Biodiversitätskrise\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/container.jpg\"},\"display_data\":true,\"media\":{\"caption\":\"Dockerbuch\",\"credit\":\"Bernd Öggl/Michael Kofler\",\"thumbnail\":\"img/dc3.jpg\",\"url\":\"img/dc4.jpg\"},\"start_date\":{\"month\":8,\"year\":2023},\"text\":{\"headline\":\"Dockerbuch 4. Auflage\",\"text\":\"\\u003cp\\u003eDie 4. Auflage des erfolgreichen Buchs über Docker\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"\",\"credit\":\"\",\"url\":\"img/coding-mit-ki2.png\"},\"start_date\":{\"month\":1,\"year\":2026},\"text\":{\"headline\":\"Workshops zu Coding mit KI\",\"text\":\"\\u003cp\\u003eWorkshops zu KI-gestütztem Programmieren\\u003c/p\\u003e\"}},{\"background\":{},\"media\":{\"caption\":\"Git\",\"credit\":\"\",\"thumbnail\":\"img/git-buch.png\",\"url\":\"img/git-buch.png\"},\"start_date\":{\"month\":7,\"year\":2025},\"text\":{\"headline\":\"\\u003ca href='/cms/buecher/git'\\u003eGitbuch 3. Auflage\\u003c/a\\u003e\",\"text\":\"\\u003cp\\u003eDie dritte, erweiterte Auflage des sehr coolen Buchs mit viel Praxisbeispielen.\\u003c/p\\u003e\"}},{\"background\":{},\"display_data\":true,\"media\":{\"caption\":\"Coding mit KI\",\"credit\":\"Bernd Öggl/Michael Kofler/Sebastian Springer\",\"thumbnail\":\"img/coding-mit-ki2.png\",\"url\":\"img/coding-mit-ki2.png\"},\"start_date\":{\"month\":9,\"year\":2024},\"text\":{\"headline\":\"Coding mit KI, 1. Auflage\",\"text\":\"\\u003cp\\u003eEin Buch über KI-gestütztes Programmieren\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/iprot_en.jpg\"},\"display_data\":true,\"end_date\":{\"month\":\"4\",\"year\":\"2026\"},\"media\":{\"caption\":\"\",\"credit\":\"\",\"thumbnail\":\"img/iPROT-Logo.png\",\"url\":\"img/iPROT-Logo.png\"},\"start_date\":{\"month\":\"08\",\"year\":\"2025\"},\"text\":{\"headline\":\"iPROT v5\",\"text\":\"\\u003cp\\u003eEin weiteres major-Update für unser erfolgreiches Meeting-Minutes-Softwareprojekt.\\u003c/p\\u003e\"}},{\"background\":{\"url\":\"img/container.jpg\"},\"display_data\":true,\"media\":{\"caption\":\"Dockerbuch\",\"credit\":\"Bernd Öggl/Michael Kofler\",\"thumbnail\":\"img/docker5.png\",\"url\":\"img/docker5.png\"},\"start_date\":{\"month\":11,\"year\":2025},\"text\":{\"headline\":\"Dockerbuch 5. Auflage\",\"text\":\"\\u003cp\\u003eDie 5. Auflage des erfolgreichen Buchs über Docker\\u003c/p\\u003e\"}},{\"background\":{},\"display_data\":true,\"media\":{\"caption\":\"Coding mit KI\",\"credit\":\"Bernd Öggl/Michael Kofler/Sebastian Springer\",\"thumbnail\":\"img/coding-mit-ki2.png\",\"url\":\"img/coding-mit-ki2.png\"},\"start_date\":{\"month\":3,\"year\":2026},\"text\":{\"headline\":\"Coding mit KI, 2. Auflage\",\"text\":\"\\u003cp\\u003eDie 2., aktualisierte und erweiterte Auflage des Buchs über KI-gestütztes Programmieren\\u003c/p\\u003e\"}}],\"title\":{\"background\":{\"url\":\"img/code.jpg\"},\"media\":{\"caption\":\"\",\"credit\":\"komplett.cc\",\"url\":\"img/wman.svg\"},\"text\":{\"headline\":\"webman.at / komplett.cc\",\"text\":\"\\u003cp\\u003eEine unvollständige Aufzählung einiger Projekte aus vielen Jahre IT-Arbeit\\u003c/p\\u003e\"}}}, opts)\n  console.log('H: ', tl)\n\u003c/script\u003e\n\n\u003c!-- __webman.at__ (früher komplett.cc) wurde 2001 von Bernd Öggl gegründet und --\u003e\n\u003c!-- entwickelt seither, oft mit Partnern, moderne Web-Applikationen.  --\u003e\n\u003c!-- Mithilfe von modernen --\u003e\n\u003c!-- Web-Technologien (\u003ca title=\"HTML5\" href=\"https://webman.at/cms/\"\u003eHTML5\u003c/a\u003e, \u003ca --\u003e\n\u003c!-- href=\"http://html5.komplett.cc/code/index_en.html\"\u003eJavascript\u003c/a\u003e, \u003ca --\u003e\n\u003c!-- href=\"http://html5.komplett.cc/code/chap_websockets/index_en.html\"\u003eWebsockets\u003c/a\u003e, --\u003e\n\u003c!-- \u0026#8230;) und durch langjährige Erfahrung mit Computer-Netzwerken wurden --\u003e\n\u003c!-- erfolgreiche Projekte wie die Plattform \u003ca title=\"skiline.cc\" --\u003e\n\u003c!-- href=\"/cms/projekte/skiline/\"\u003eskiline.cc\u003c/a\u003e, \u003ca --\u003e\n\u003c!-- href=\"https://snowhow.info\"\u003esnowhow.info\u003c/a\u003e, oder das Informationssystem --\u003e\n\u003c!-- \u003cem\u003e\u003ca title=\"Public Display\" --\u003e\n\u003c!-- href=\"https://komplett.cc/cms/projekte/pd/\"\u003ePublic Display\u003c/a\u003e\u003c/em\u003e umgesetzt. --\u003e\n\u003c!-- __webman.at hostet unter anderem auch folgende Projekte__: --\u003e\n\u003c!--  --\u003e\n\u003c!-- * [snowhow.info](https://snowhow.info/): Informationen und Camps für Freerider und Skitourengeher. --\u003e\n\u003c!-- * \u003ca href=\"https://schullawinenkurse.at/\"\u003esnowhow Schullawinenkurse\u003c/a\u003e (auch in \u003ca title=\"snowhow Bayern\" href=\"http://schullawinenkurse.de/\"\u003eBayern\u003c/a\u003e). Eine Initiative um SchülerInnen eine kostenlose Ausbildung zur Naturgefahr Lawine zu bieten. --\u003e\n\u003c!-- * [climbhow.info](https://climbhow.info/) Die BergführerInnen von snowhow sind nicht nur im Schnee, sondern auch am Fels unterwegs. Egal ob Anfänger oder bereits engagierter Sportkletterer. Sie werden für Euch das richtige Angebot haben. --\u003e\n\u003c!-- * [klauskranebitter.com](https://klauskranebitter.com/) Fotos vom Profi. --\u003e\n\u003c!--  --\u003e\n\u003c!-- Nach 15 Jahren bei webman.at, sind folgende Websites seit 2019 auf einem eigenen (Cloud) Server unter der Obhut von Klaus Förster: --\u003e\n\u003c!--  --\u003e\n\u003c!-- * [univ.cc](https://univ.cc/) Universities worldwide. Die seit 1997 intensiv betreute Datenbank von Universitäten und Colleges weltweit. --\u003e\n\u003c!-- * [svg.cc](https://svg.cc/) Die private Webseite von Klaus Förster --\u003e\n\u003c!-- * [hemetsberger.cc](https://hemetsberger.cc) Univ.Prof. Andrea Hemetsberger --\u003e\n\u003c!--  --\u003e","title":"timeline"},{"content":"computer.komplett (komplett.cc) wurde 2001 von Bernd Öggl gegründet und entwickelt seither mit der tatkräftigen Hilfe von Klaus Förster innovative Web-Applikationen. Mithilfe von modernen Web-Technologien (HTML5, Javascript, Websockets, …) und durch langjährige Erfahrung mit Computer-Netzwerken wurden erfolgreiche Projekte wie die Plattform skiline.cc, snowhow.info, oder das Informationssystem Public Display umgesetzt.\nkomplett.cc hostet unter anderem auch folgende Projekte:\nsnowhow.info: Informationen und Camps für Freerider und Skitourengeher. snowhow Schullawinenkurse (auch in Bayern). Eine Initiative um SchülerInnen eine kostenlose Ausbildung zur Naturgefahr Lawine zu bieten. climbhow.info Die BergführerInnen von snowhow sind nicht nur im Schnee, sondern auch am Fels unterwegs. Egal ob Anfänger oder bereits engagierter Sportkletterer. Sie werden für Euch das richtige Angebot haben. klauskranebitter.com Fotos vom Profi. Nach 15 Jahren bei komplett.cc, sind folgende Websites seit 2019 auf einem eigenen (Cloud) Server unter der Obhut von Klaus Förster:\nuniv.cc Universities worldwide. Die seit 1997 intensiv betreute Datenbank von Universitäten und Colleges weltweit. svg.cc Die private Webseite von Klaus Förster hemetsberger.cc Univ.Prof. Andrea Hemetsberger ","date":null,"permalink":"https://webman.at/cms/komplett/","section":"komplett.cc","summary":"\u003cp\u003e\u003cstrong\u003ecomputer.komplett\u003c/strong\u003e (komplett.cc) wurde 2001 von Bernd Öggl gegründet und entwickelt seither mit der tatkräftigen Hilfe von \u003ca href=\"https://svg.cc\"\u003eKlaus Förster\u003c/a\u003e innovative Web-Applikationen. Mithilfe von modernen Web-Technologien (\u003ca title=\"HTML5\" href=\"https://komplett.cc/cms/\"\u003eHTML5\u003c/a\u003e, \u003ca href=\"https://html5.komplett.cc/code/index_en.html\"\u003eJavascript\u003c/a\u003e, \u003ca href=\"https://html5.komplett.cc/code/chap_websockets/index_en.html\"\u003eWebsockets\u003c/a\u003e, …) und durch langjährige Erfahrung mit Computer-Netzwerken wurden erfolgreiche Projekte wie die Plattform \u003ca title=\"skiline.cc\" href=\"/cms/projekte/skiline/\"\u003eskiline.cc\u003c/a\u003e, \u003ca href=\"https://snowhow.info\"\u003esnowhow.info\u003c/a\u003e, oder das Informationssystem \u003cem\u003e\u003ca title=\"Public Display\" href=\"https://komplett.cc/cms/projekte/pd/\"\u003ePublic Display\u003c/a\u003e\u003c/em\u003e umgesetzt.\u003c/p\u003e","title":"komplett.cc"},{"content":"Public Display ist ein Client-Server System, das Kurznachrichten aus unterschiedlichen Quellen laut Vorgaben sortiert, formatiert und in HTML konvertiert. Mit modernen Webtechniken werden Text, Bilder und Videos ohne Benutzerinteraktion angezeigt.\nClients #Als Anzeigegerät für Ihre Public Display Nachrichten reicht ein Standard-PC mit einem Bildschirm. Einmal eingerichtet sind die Stationen praktisch wartungsfrei (wir haben 15+ Jahre Erfahrung). Unsere Service-Levels am Client unterscheiden sich von\nZero-Service: wir bieten keine Support zu Ihren Clients Browser-Level: wir überprüfen Inkompatibilitäten mit den von Ihnen eingesetzten Browsern OS-Level: wir überprüfen den kompletten PC Client Site-Level: wir warten und überprüfen alle ihre PD-Clients (in der Regel mit einer Terminal Server Installation) Geschichte #Die hier besprochene Public Display Software hat eine lange Geschichte: Eine erste Version von Public Display entstand bereits im Jahr 1996, wo am Institut für Geographie der Universität Innsbruck ein Bedarf für ein Online-Nachrichten System bestand. Das neue schwarze Brett sollte aber auch verfügbar sein, ohne dass man am Computer angemeldet ist. Mit handwerklich massivem Einsatz wurde ein ausrangierter 40 kg(!) schwerer IBM Monitor an einer Wand des Instituts montiert und die Informationen „tickerten“ dort für alle Studierenden sichtbar vor sich hin.\nGut 10 Jahre später, im Jahr 2007, wollte die Feuerpolizei diesen Bildschirm so nicht mehr akzeptieren und ordnete die Demontage des Geräts an. Am Institut schätzte man das moderne und nach wie vor funktionierende Informationssystem aber sehr und wollte den Mehrwert des System auf keinen Fall vermissen. Ein neuer Auftrag erging an das Entwickler-Duo Klaus Förster und Bernd Öggl, um eine neue zeitgemäße Software zu implementieren. Um möglichst kompatibel mit den vorhandenen und möglichen zukünftigen Systemen zu sein, baut das aktuelle System ausschließlich auf offenen Standards auf.\nRSS (http://en.wikipedia.org/wiki/Rss) wird als Austauschformat für Nachrichten aller Art verwendet. Der Public-Display Server liest alle gängigen RSS-Feeds von lokalen und auch von entfernten Medien, sortiert sie korrekt und bespielt den Client mit der gewünschten Information. Der Content-Anbieter kann dadurch seine eigenen Informationen mit aktuellen Informationen aus ausgewählten Internetquellen beliebig mischen.\nIm Unterschied zur ersten Version von Public Display, bei der die Ausgabe noch auf ein spezielles Programm angewiesen war (FAT Client), ist die aktuelle Version eine moderne Web-Applikation. Ein aktueller Browser reicht, um die Informationen anzuzeigen und zur gegebenen Zeit weiter zu schalten. Für unseren ersten Kunden, die Universität Innsbruck, war der Content Provider das hauseigenen Content-Management System XIMS. Egal ob Sie bereits WordPress, Drupal, Joomla, oder sonst ein CMS verwenden das RSS exportiert, public display wird damit funktionieren.\n","date":"18. März 2011","permalink":"https://webman.at/cms/projekte/pd/","section":"Projekte","summary":"\u003cp\u003e\u003cem\u003ePublic Display\u003c/em\u003e ist ein Client-Server System, das Kurznachrichten aus unterschiedlichen Quellen laut Vorgaben sortiert, formatiert und in HTML konvertiert. Mit modernen Webtechniken werden Text, Bilder und Videos ohne Benutzerinteraktion angezeigt.\u003c/p\u003e","title":"Public Display"},{"content":"Einführung #Digitab ist eine App für Android Tablet-PCs (und große Smartphones) zum digitalisieren von geometrischen Formen. Wie von Geographischen Informationssystemen bekannt, kann die erstellte Geometrie mit anderen (thematischen) Inhalten verknüpft werden. Als Grundlage werden in der Regel Orthofotos verwendet. DigiTab kann aber auch auf online-Karten (OpenStreetMap, Bing-Maps, …) zugreifen.\nInstallation Screenshots Features ChangeLog ","date":"26. Juli 2012","permalink":"https://webman.at/cms/projekte/digitab/","section":"Projekte","summary":"\u003ch2 id=\"einführung\" class=\"relative group\"\u003eEinführung \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#einf%c3%bchrung\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eDigitab ist eine App für Android Tablet-PCs (und große Smartphones) zum digitalisieren von geometrischen Formen. Wie von Geographischen Informationssystemen bekannt, kann die erstellte Geometrie mit anderen (thematischen) Inhalten verknüpft werden. Als Grundlage werden in der Regel Orthofotos verwendet. DigiTab kann aber auch auf online-Karten (OpenStreetMap, Bing-Maps, …) zugreifen.\u003c/p\u003e","title":"Digitab"},{"content":"Viel-Falter TCS (2016 \u0026ndash; 2017) #Im Rahmen von Viel-Falter Top Citizen Science (TCS) wird untersucht, ob und wie Schmetterlingsbeobachtungen von Laien zur Unterstützung eines dauerhaften Biodiversitätsmonitorings herangezogen werden können.\nForschungsziel #Können Schmetterlingslebensräume mit einer einfachen aber wissenschaftlich korrekten Bewertungsmethode von Laien beobachtet werden? Können so gesammelte Daten ein dauerhaftes Tagfalter-Monitoring in Österreich unterstützen? Mit diesen und weiteren Fragen beschäftigt sich das Projekt Viel-Falter TCS. Wenn es gelingt eine entsprechende Datenqualität sicherzustellen, dann kann das dringend notwendige Erheben von Biodiversitätsdaten mit wichtigen Zielen einer Bildung für eine nachhaltige Entwicklung verknüpft werden.\nWie kann man mitforschen? #Jede/r an Schmetterlingen interessierte kann mit einer einfachen Bestimmungshilfe Tagfalter an zuvor vereinbarten Standorten beobachten. Diese Beobachtungen werden im Laufe des Jahres mehrmals durchgeführt. Vorkenntnisse sind hierfür keine nötig. Zur Einschulung wird ein Workshop angeboten. Kontakt: Projekt Viel-Falter.\nDas Projekt wird unterstützt vom BMWFW im Rahmen der Top Citizen Science Initiative.\nAls Projektpartner betreut komplett.cc die EDV-Infrastruktur.\n","date":"17. Dezember 2016","permalink":"https://webman.at/cms/projekte/vielfalter-tcs/","section":"Projekte","summary":"\u003ch2 id=\"viel-falter-tcs-2016--2017\" class=\"relative group\"\u003eViel-Falter TCS (2016 \u0026ndash; 2017) \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#viel-falter-tcs-2016--2017\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eIm Rahmen von \u003ca href=\"https://viel-falter.at/cms/top-citizen-science-modul/\" target=\"_blank\" rel=\"noreferrer\"\u003eViel-Falter Top Citizen Science (TCS)\u003c/a\u003e wird untersucht, ob und wie Schmetterlingsbeobachtungen von Laien zur Unterstützung eines dauerhaften Biodiversitätsmonitorings herangezogen werden können.\u003c/p\u003e","title":"Viel-Falter TCS"},{"content":"Die „skiline marketing GmbH“ (skiline.cc) wurde 2006 von Bernd Öggl, Stephan und Hans-Peter Gruber gegründet und stellt einen einzigartigen Dienst für SkifahrerInnen in ausgewählten Skigebieten zur Verfügung. Durch die Auswertung der Zutrittsdaten können Gäste des Skigebiets einen ansprechenden grafischen Linienzug, ihre skiline im Internet abrufen. An Terminals im Skigebiet ist es möglich die Grafik auch sofort auszudrucken. Der Service ist in über 100 Skigebieten weltweit verfügbar. Für eine Liste aller Skigebiete besuchen sie skiline.cc. Bis zum Ende der Saison 2009 war Bernd Öggl für alle technischen Aspekte rund um den online-Service allein verantwortlich.\nskiline Ausdruck ","date":"18. März 2011","permalink":"https://webman.at/cms/projekte/skiline/","section":"Projekte","summary":"\u003cp\u003eDie „skiline marketing GmbH“ (skiline.cc) wurde 2006 von Bernd\nÖggl, Stephan und Hans-Peter Gruber gegründet und stellt einen einzigartigen\nDienst für SkifahrerInnen in ausgewählten Skigebieten zur Verfügung. Durch die\nAuswertung der Zutrittsdaten können Gäste des Skigebiets einen ansprechenden\ngrafischen Linienzug, ihre \u003cstrong\u003eskiline\u003c/strong\u003e im Internet abrufen. An Terminals im\nSkigebiet ist es möglich die Grafik auch sofort auszudrucken. Der Service ist\nin über 100 Skigebieten weltweit verfügbar. Für eine Liste aller Skigebiete\nbesuchen sie skiline.cc. Bis zum Ende der Saison 2009 war Bernd Öggl für alle\ntechnischen Aspekte rund um den online-Service allein verantwortlich.\u003c/p\u003e","title":"Skiline"},{"content":" snowhow.info: Informationen zu Wetter, Schnee und Lawinen html5.komplett.cc Universities worldwide Geography Departments worldwide Andrea Lüth ","date":"18. März 2011","permalink":"https://webman.at/cms/links/","section":"","summary":"\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://snowhow.info/\" target=\"_blank\" rel=\"noreferrer\"\u003esnowhow.info\u003c/a\u003e: Informationen zu Wetter, Schnee und Lawinen\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://html5.komplett.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003ehtml5.komplett.cc\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://univ.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eUniversities worldwide\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://univ.cc/geolinks\" target=\"_blank\" rel=\"noreferrer\"\u003eGeography Departments worldwide\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://andrealueth.at/\" target=\"_blank\" rel=\"noreferrer\"\u003eAndrea Lüth\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\n  \n  \n  \n  \n  \n\n  \n  \n    \n    \n  \n  \u003cfigure class=\"mx-auto my-0 rounded-md\"\u003e\n    \u003cimg src=\"/cms/images/bg.jpg\" alt=\"\" class=\"mx-auto my-0 rounded-md\"/\u003e\n    \n  \u003c/figure\u003e","title":"Links"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/docker/","section":"Tags","summary":"","title":"Docker"},{"content":"Schon als ich das erste Mal von PMTiles gehört hatte war ich fasziniert: Ich kann Millionen von Karten-Kacheln in einer Datei speichern und brauche nur einen regulären Webserver um die Karten-Ebenen zum Web-Browser zu liefern. Für alle, für die das jetzt ziemlich abgespaced klingt: Das Ding rockt!\nIch habe mich schon früher mit Karten im Web und in Apps beschäftigt und so meine Kämpfe ausgefochten. Seit 2012 habe ich eigene Karten-Kacheln erstellt und zum Download für die snowhow-freeride-app angeboten, oder in verschiedenen Online Karten verwendet (zum Beispiel: https://snowhow.info/map). Dabei traten unterschiedliche Probleme und Herausforderungen auf, wie etwa den Tile-Cache teilweise zu aktualisieren, oder das Tile-Format zu konvertieren.\nDie snowhow-Freeride-Karte, mit lokal vorgehaltenen PNG-Kacheln bis Zoomstufe 18 Meine Bestrebungen beschränkten sich dabei auf den Alpenraum (innerhalb der von der Alpenkonvention festgelegten Grenzen). Der Tile-Cache, also die im Voraus berechneten PNG-Dateien waren ziemlich schwierig zu verwalten, immerhin hatten wir bis zur Zoom-Stufe 18 alle Tiles vorrätig. An einen Tile-Cache der gesamten Welt war gar nicht zu denken: Grobe Schätzungen gehen bei einer Zoom-Stufe von 16 (nicht 18!) von 5,7 Milliarden Kacheln und 85 TB Speicherplatz aus.\nWas macht PMTiles nun so viel besser? Zuerst einmal werden die Milliarden Karten-Kacheln in eine Datei verpackt und können durch HTTP-Range-Requests blitzschnell abgefragt werden. Dazu braucht man nur einen Webserver, keine weitere Konfiguration.\nGerendert wird im Browser mit MapLibre GL JS, dem Open-Source-Fork von Mapbox GL JS. Das PMTiles-SDK klinkt sich dort einfach als eigenes URL-Protokoll ein, sodass MapLibre die Vektor-Kacheln direkt aus der einen Datei liest, ganz ohne Tile-Server dazwischen.\nAlpines Gelände im hinteren Ultental, Südtirol Das war der Ausgangspunkt im Frühjahr: ein weltweiter Vektorkachel-Datensatz aus OpenStreetMap-Daten, direkt als PMTiles aus dem Browser geladen, mit ein paar Kartenstilen zum Durchklicken. Seither ist maps.webman.at deutlich gewachsen – aus der Techdemo ist eine Alpenkarte geworden, die ich inzwischen selbst immer häufiger verwende.\nDer \u0026ldquo;Weltkacheldatensatz\u0026rdquo; reicht nicht für die Alpen #Der weltweite PMTiles-Datensatz (von Protomaps, eine Datei mit 126 GB) ist grandios für einen globalen Überblick, aber im Gebirge zeigt er kaum etwas: Gipfel ohne Höhenangabe, fast keine Lifte, Gletscher nur bis Zoomstufe 7, Wanderwege ohne Schwierigkeitsgrad. Genau die Details, wegen denen man in den Bergen überhaupt eine Karte braucht.\nAlso habe ich Claude Code angewiesen, die fehlenden Layer selbst zu bauen: Aus den rohen OpenStreetMap-Daten, zugeschnitten auf ein Rechteck, das den gesamten Alpenbogen abdeckt (grob 5,5°O–16,5°O, 43,5°N–48,5°N), werden folgende Daten extrahiert.\n~554.000 durchsuchbare Orte und POIs – Gipfel, Hütten, Pässe, Seen, Lifte, Unterkünfte, Skirouten, Quellen, Höhlen, Burgen Jeder benannte Gipfel im Alpenraum mit Höhe, sofern OSM sie kennt – gestaffelt nach Zoomstufe, damit bei z11 nur die 2500er auftauchen und erst ab z14 auch der namenlose Hügel um die Ecke ~12.700 Lifte, in vier Kategorien (Seilbahnen, Sessellifte, Schlepplifte, Materialseilbahnen) einzeln zu- und abschaltbar ~3.300 Gletscherflächen, weil die Weltkarte sie ab Zoomstufe 8 einfach nicht mehr zeigt ~397.000 graded Wanderwege und Klettersteige, eingefärbt nach SAC-Schwierigkeitsskala (T1–T6) statt einheitlich als graue Linie Eine direkte Overpass-Abfrage für so eine Fläche ist keine Option – ein gleich großer Testausschnitt anderswo in den Alpen brachte mehr passende Wanderweg-Features zurück, als der ganze Tirol-Extrakt vorher hatte, weit jenseits dessen, was die öffentliche Overpass-API an Fair-Use verträgt. Die Pipeline lädt deshalb einmal die Geofabrik-Regionalextrakte für den gesamten Alpenraum herunter, schneidet sie mit osmium extract auf die Bounding-Box zu, merged sie zu einem ~3,3-GB-PBF und filtert daraus mit osmium tags-filter/osmium export – lokal, gecacht, ohne fremde API zu strapazieren. Jeder der Layer hat sein eigenes Build-Skript (build-peaks.sh, build-lifts.sh, build-glaciers.sh, build-trails.sh), verpackt als eigenes topo-builder-Docker-Image, das ich bei Bedarf neu laufen lasse, wenn sich OSM oder die Stile ändern.\nEine eigene Suche statt eines Geocoders #Ein allgemeiner Geocoder ist für alpine Ziele fast nutzlos: Ein Gipfel oder eine Hütte verliert dort gegen jeden Ort oder jede Straße mit ähnlichem Namen – und genau die alpinen Details sind ja der Grund für diese Karte. Also gibt es jetzt einen eigenen Such-Index, gebaut aus derselben OSM-Extraktion wie die Layer oben: rund 554.000 Features, gewichtet nach Fundqualität, Feature-Art und Distanz zum aktuellen Kartenmittelpunkt.\nBewusst kein Adress-Geocoder – Straßen und Hausnummern hätten den Index locker verdoppelt, für etwas, das die Karte nirgends anzeigt. Auch Geschäfte, Restaurants, Haltestellen oder Parkplätze fehlen absichtlich: Bei einer Testabfrage über denselben Alpenausschnitt lieferten allein diese vier Kategorien 744.000 zusätzliche Treffer – mehr als eine Verdopplung, und sie hätten die Gipfel und Hütten, um die es hier eigentlich geht, im Ranking begraben.\nTechnisch steckt dahinter PostGIS mit pg_trgm für Trigram-Suche, eine einzige SQL-Rankingfunktion, ausgeliefert über PostgREST und von nginx gecacht. Alternativnamen sind als eigene Zeilen indiziert – Bozen findet also auch Bolzano, Wien auch Vienna – und Umlaute/ß werden in beide Richtungen normalisiert (Großglockner = grossglockner = großglockner).\nGPX-Tracks und Fotos direkt im Browser #Über das Track-Symbol lassen sich GPX-Dateien und geotaggte Fotos laden – per Dialog oder einfach per Drag \u0026amp; Drop auf die Karte. Alles passiert im Browser, es wird nichts hochgeladen. Tracks werden nach Geschwindigkeit eingefärbt, überstehen einen Wechsel des Kartenstils, und jeder zeigt Distanz, Fahrzeit und Durchschnitts-/Höchstgeschwindigkeit. Ausreißer über 50 km/h – GPS-Aussetzer – werden zwar noch gezeichnet, damit die Linie durchgängig bleibt, fließen aber nicht in die Statistik ein.\nFotos mit GPS-Tag im EXIF landen als Thumbnail-Marker auf der Karte, mit Popup für Vollbild, Aufnahmezeit, Kamera und Koordinaten. Und für alle, die schon einen ?config=-Link vom alten webman/gpx-viewer verwenden: Das Format ist unverändert kompatibel.\nDrumherum: basemap.at, Deployment #Für Österreich lässt sich zusätzlich auf basemap.at umschalten – die offizielle Basiskarte der öffentlichen Hand, detaillierter als die Weltkarte, inklusive 30-cm-Orthofoto als Luftbild.\nAusgeliefert werden die Kacheln primär direkt als PMTiles per Range-Request, wie eingangs beschrieben. Für Clients, die das nicht unterstützen, steht ergänzend Martin als klassischer Tile-Server bereit. Dazu nginx für das statische Frontend, PostGIS/PostgREST für die Suche – alles in Docker Compose hinter meinem Traefik-Proxy. Der Quellcode ist auf GitLab öffentlich einsehbar, die CI-Pipeline baut das Image und deployt per SSH auf unseren Server.\nClaude Code macht\u0026rsquo;s möglich #Der allermeiste Code hier stammt nicht von mir. topo-builder, der Suchindex, das Track-Panel, die CI-Pipeline, große Teile von main.js – das hat Claude Code geschrieben, Anthropics KI-Coding-Agent, über unzählige Sessions in den letzten Monaten. Meine Rolle war die Planung: entscheiden, was als Nächstes gemacht wird, Architektur und Datenquellen festlegen, das Ergebnis in echt ausprobieren und nachjustieren, wenn etwas nicht passt. Von den aktuell 72 Commits im Repo tragen 59 entsprechend einen Co-Authored-By: Claude-Trailer.\nAusprobieren: maps.webman.at – für die volle Werkzeugkiste (Stil-Tabs, Quellen-Umschalter, Layer-Toggles, Feature-Inspector, Pitch-Slider) einfach ?showcase an die URL hängen.\n","date":"28. August 2026","permalink":"https://webman.at/cms/post/2026-08-maps/","section":"Blog","summary":"\u003cp\u003eSchon als ich das erste Mal von PMTiles gehört hatte war ich fasziniert:\nIch kann Millionen von Karten-Kacheln in einer Datei speichern und brauche nur\neinen regulären Webserver um die Karten-Ebenen zum Web-Browser zu liefern.\nFür alle, für die das jetzt ziemlich abgespaced klingt: Das Ding \u003cstrong\u003erockt\u003c/strong\u003e!\u003c/p\u003e","title":"Karten mit PMTiles"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/maplibre/","section":"Tags","summary":"","title":"Maplibre"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/maps/","section":"Tags","summary":"","title":"Maps"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/OpenStreetMap/","section":"Tags","summary":"","title":"OpenStreetMap"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/pmtiles/","section":"Tags","summary":"","title":"Pmtiles"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/","section":"Tags","summary":"","title":"Tags"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/b%C3%BCcher/","section":"Tags","summary":"","title":"Bücher"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/claude/","section":"Tags","summary":"","title":"Claude"},{"content":"Das CLI-Tool zur KI-assistierten Software-Entwicklung – von der Installation über CLAUDE.md, Skills und MCP-Server bis zu Subagents und Multi-Agent-Workflows.\nErscheint demnächst Claude Code – Das CLI-Tool zur KI-assistierten Software-Entwicklung Erscheint: Anfang Dezember 2026\nUmfang: ca. 250 Seiten\nISBN: 978-3-367-11964-6\nPreis: Euro 34,90 (Buch bzw. E-Book, jeweils inkl. MWSt. in D), Euro 39,90 (Bundle aus Buch und E-Book)\nAutoren: Michael Kofler, Bernd Öggl\nBuchseite beim Rheinwerk Verlag\nInhalt #Claude Code ist das CLI-Tool von Anthropic für KI-assistierte Software-Entwicklung direkt im Terminal. Dieses Buch zeigt anhand praxisnaher Beispiele – statt reiner Theorie –, wie Claude Code im Entwickleralltag eingesetzt wird: vom Berechtigungsmodell über CLAUDE.md, Skills und Plugins bis zu MCP-Servern sowie der Integration in GitHub und GitLab.\nKapitelübersicht # Installation und erste Schritte Die neue Art zu coden Arbeiten mit bestehendem Code Claude Code als IT-Agent Git und Projekt-Workflow CLAUDE.md, Skills und Slash-Commands Hooks, MCP und Plugins Subagents, parallele Workflows und Agent-Teams Lokale Modelle, OpenRouter und Alternativen Tipps \u0026amp; Tricks Referenz Weitere Informationen #Weitere Informationen sowie später Beispieldateien und Errata finden Sie auf der Verlagsseite zum Buch.\n","date":"28. August 2026","permalink":"https://webman.at/cms/buecher/claude-code/","section":"Bücher","summary":"\u003cp\u003eDas CLI-Tool zur KI-assistierten Software-Entwicklung – von der Installation über CLAUDE.md, Skills und MCP-Server bis zu Subagents und Multi-Agent-Workflows.\u003c/p\u003e","title":"Claude Code"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/cli/","section":"Tags","summary":"","title":"Cli"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/ki/","section":"Tags","summary":"","title":"Ki"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/coding/","section":"Tags","summary":"","title":"Coding"},{"content":"Das Praxisbuch für KI-gestütztes Programmieren – von Code-Generierung und Debugging bis hin zu Agentic Coding und lokalen LLMs.\nErschienen: 2026 (2. Auflage)\nUmfang: 546 Seiten\nISBN: 978-3-367-11024-7\nPreis: Euro 39,90 (in D inkl. MWSt.)\nAutoren: Michael Kofler, Bernd Öggl, Sebastian Springer\nBuchseite beim Rheinwerk Verlag\nInhalt #KI-gestütztes Programmieren hat die Softwareentwicklung grundlegend verändert. Dieses Buch zeigt, wie Sie KI-Tools effektiv in Ihren Arbeitsalltag integrieren – von der Code-Generierung über Debugging bis zum gesamten Entwicklungsprozess. Mit der 2. Auflage wurde das Buch vollständig aktualisiert und um wichtige neue Inhalte erweitert.\nNeuerungen der 2. Auflage # Agentic Coding MCP und Skills Server-Setup für lokale LLM-Ausführung Modelle mit dem Docker Model Runner ausführen Reasoning and Thinking CLI-Tools (claude code, codex, …) Kapitelübersicht # KI-Tools im Überblick: GitHub Copilot, Cursor, Claude Code, Codex und Co. Prompting-Techniken für Entwickler Code-Generierung, Refactoring und Debugging mit KI Tests schreiben und Code dokumentieren Lokale LLM-Ausführung (Ollama, Docker Model Runner) Agentic Coding und MCP KI im Entwicklungsteam: Workflows und Best Practices Beispieldateien und Errata #Weitere Informationen sowie Errata finden Sie auf der Verlagsseite zum Buch.\n","date":"29. April 2026","permalink":"https://webman.at/cms/buecher/coding-mit-ki/","section":"Bücher","summary":"\u003cp\u003eDas Praxisbuch für KI-gestütztes Programmieren – von Code-Generierung und Debugging bis hin zu Agentic Coding und lokalen LLMs.\u003c/p\u003e","title":"Coding mit KI"},{"content":"Coding mit KI, 2. Auflage #Das Praxisbuch für die Softwareentwicklung, von Michael Kofler, Bernd Öggl, Sebastian Springer\nUmfang: 546 Seiten\nISBN: 978-3-367-11024-7\nPreis: 39,90 Euro (in D inkl. MWSt.)\n2., aktualisierte und erweiterte Auflage 2026, gebunden Rheinwerk Computing\nDie zweite Auflage von »Coding mit KI« ist erschienen! Das Thema KI-gestütztes Programmieren hat sich in den letzten Monaten rasant weiterentwickelt, und wir haben das Buch vollständig aktualisiert und um wichtige neue Inhalte erweitert:\nNeuerungen der 2. Auflage # Agentic Coding MCP und Skills Server-Setup für lokale LLM-Ausführung Modelle mit dem Docker Model Runner ausführen Reasoning and Thinking CLI tools (claude code, codex, \u0026hellip;) Das Buch richtet sich an Entwickler*innen, die KI-Tools effektiv in ihren Arbeitsalltag integrieren möchten – von der Code-Generierung über das Debugging bis hin zum gesamten Entwicklungsprozess.\nWeitere Informationen finden Sie auf der Verlagsseite zum Buch sowie auf Amazon.\n","date":"29. April 2026","permalink":"https://webman.at/cms/post/2026-04-coding-mit-ki-2/","section":"Blog","summary":"\u003ch2 id=\"coding-mit-ki-2-auflage\" class=\"relative group\"\u003eCoding mit KI, 2. Auflage \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#coding-mit-ki-2-auflage\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003e\u003cem\u003eDas Praxisbuch für die Softwareentwicklung\u003c/em\u003e,\nvon Michael Kofler, Bernd Öggl, Sebastian Springer\u003c/p\u003e","title":"Coding mit KI, 2. Auflage"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/llm/","section":"Tags","summary":"","title":"Llm"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/Ollama/","section":"Tags","summary":"","title":"Ollama"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/sysadmin/","section":"Tags","summary":"","title":"Sysadmin"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/vpn/","section":"Tags","summary":"","title":"Vpn"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/WireGuard/","section":"Tags","summary":"","title":"WireGuard"},{"content":"Lokale Sprachmodelle haben mich veranlasst einen gebrauchten Gaming-PC für Inference-Aufgaben zu kaufen. Die 1000 EUR sind gut investiert, denn die Nvidia RTX 3090 mit 24 GiB bringt sehr gute Tokens/Sekunde Werte mit den aktuellen Sprachmodellen. Das Ding steht bei mir im Büro, hört auf den Namen gpu-box und hängt dort in einem ganz normalen privaten LAN (192.168.11.0/24).\nNur: Meine Web-Applikationen laufen nicht im Büro, sondern auf einem dedizierten Server bei Hetzner (Host A). Und die eine, die das Sprachmodell braucht – ein kleiner, privater Musik-Server, der Playlists per LLM zusammenstellt – müsste dafür irgendwie in dieses Büro-LAN hineinreichen.\nDer Gaming-PC ist immerhin schon als WireGuard-Client mit meinem VPN-Server verbunden (Host C, ein VPS ebenfalls bei Hetzner, der nichts anderes tut als Hub zu spielen) und dort unter einer VPN-Adresse aus 10.10.11.0/24 erreichbar. Es geht also gar nicht darum, das Büro-LAN anzuzapfen, sondern nur darum, Host A in dieses VPN-Netz zu bringen.\nDer naheliegende Weg wäre, Host A ebenfalls auf Betriebssystem-Ebene ins VPN zu hängen. Genau das wollte ich nicht: Auf der Maschine laufen rund 70 Container in ~30 Compose-Projekten hinter einem einzigen Traefik, dazu eine gewachsene nftables-Landschaft mit CrowdSec-Bouncer. Da noch ein wg0 auf Host-Ebene dazwischen zu schieben, das Routing und Firewall-Regeln für alles verändert, nur damit eine Applikation ein Sprachmodell erreicht – nein danke.\nEin Docker Container für WireGuard und ein externes Netzwerk #Der Trick besteht darin, dass neben den anderen Compose-Setups ein weiteres läuft, das nichts anderes macht als den VPN-Client zu beherbergen. Der WireGuard-Container hängt dabei in einem externen Docker-Netzwerk (wireguard-net), das er selbst definiert – und andere Compose-Setups können dieses Netzwerk zusätzlich verwenden, um über den Tunnel zu kommen.\nservices: wireguard: image: linuxserver/wireguard container_name: wireguard cap_add: - NET_ADMIN environment: - PUID=1000 - PGID=1000 - TZ=Europe/Vienna volumes: - ./wg-config/wg0.conf:/config/wg_confs/wg0.conf:ro sysctls: - net.ipv4.ip_forward=1 - net.ipv4.conf.all.src_valid_mark=1 restart: unless-stopped networks: wireguard-net: ipv4_address: 192.168.192.2 networks: wireguard-net: name: wireguard-net driver: bridge ipam: config: - subnet: 192.168.192.0/20 gateway: 192.168.192.1 ip_range: 192.168.192.16/28 Vier Details in dieser Datei sind wichtig:\nDas name: unter networks: sorgt dafür, dass das Netzwerk wirklich wireguard-net heißt und nicht, wie Compose es sonst täte, mit dem Projektnamen zu wireguard_wireguard-net verunstaltet wird. Nur so können andere Setups es unter einem vorhersagbaren Namen einbinden.\nDer Container bekommt mit ipv4_address eine fixe IP (192.168.192.2). Das ist keine Kosmetik: Diese Adresse ist gleich das Gateway, das andere Container in ihre Routing-Tabelle eintragen müssen. Damit sie ihm nicht versehentlich per DHCP in die Quere kommen, schränkt ip_range den dynamisch vergebenen Bereich auf 192.168.192.16/28 ein – .2 bis .15 bleiben für fix vergebene Adressen reserviert.\nDer Container bekommt nur NET_ADMIN. Viele Anleitungen (und das Image selbst) hätten gerne zusätzlich SYS_MODULE, um das WireGuard-Modul bei Bedarf nachladen zu können. Diese Capability erlaubt aber das Laden beliebiger Kernel-Module und ist damit praktisch Host-Root – wer sie hat, ist aus dem Container heraus. Das würde genau die Trennung aufheben, wegen der das ganze Setup überhaupt gebaut wurde. Seit Kernel 5.6 ist WireGuard ohnehin im Kernel; es reicht, das Modul einmalig am Host zu laden:\necho wireguard \u0026gt; /etc/modules-load.d/wireguard.conf modprobe wireguard Kein ports:-Eintrag. Der Container ist reiner WireGuard-Client, baut die Verbindung also selbst auf und hält sie mit PersistentKeepalive offen – er muss nichts entgegennehmen. Das ist mehr als Kosmetik: Von Docker veröffentlichte Ports landen in der DOCKER-iptables-Chain und werden damit vor den eigenen Regeln ausgewertet. Ein -p hebelt also die Host-Firewall aus, und man wundert sich später, warum ein Port trotz sauberer nftables-Regeln offen ist.\nDas Netzwerk in einem anderen Setup verwenden #Auf der anderen Seite ist es dann erfreulich unspektakulär. Das Compose-Setup der Applikation deklariert wireguard-net als external und hängt den Container zusätzlich zum normalen Traefik-Netzwerk hinein:\nservices: app: image: registry.example.com/musik:latest container_name: musik networks: - web - wireguard-net environment: OLLAMA_BASE_URL: ${OLLAMA_BASE_URL} labels: - traefik.enable=true - traefik.http.routers.musik.rule=Host(`musik.example.com`) - traefik.docker.network=web networks: web: external: true wireguard-net: external: true Wichtig ist hier traefik.docker.network=web: Sobald ein Container in mehreren Netzwerken hängt, weiß Traefik sonst nicht, über welches es ihn ansprechen soll, und greift womöglich die falsche IP heraus.\nDie Route fehlt noch #Damit ist der Container zwar im selben Netzwerk wie der VPN-Client, weiß aber noch nichts vom VPN-Netz 10.10.11.0/24. Pakete an gpu-box würden brav zum Default-Gateway und damit ins Internet laufen. Es fehlt also noch:\nip route add 10.10.11.0/24 via 192.168.192.2 Und genau hier wurde es bei mir unangenehm: Das Applikations-Image ist ein distroless-Image. Kein ip, kein sh, nichts – was ja gerade der Sinn der Übung ist, aber eben auch heißt, dass man dem Container das Kommando nicht einfach beim Start unterschieben kann. Das Image nur wegen einer einzigen Routing-Zeile mit einem iproute2 aufzublasen wäre die falsche Antwort gewesen.\nDie Lösung ist ein winziger Sidecar-Container, der sich per network_mode: \u0026quot;service:app\u0026quot; in den Netzwerk-Namespace der Applikation einklinkt, dort die Route setzt und sich wieder verabschiedet:\nmusik-route: image: alpine:3.24 container_name: musik-route network_mode: \u0026#34;service:app\u0026#34; cap_add: - NET_ADMIN command: sh -c \u0026#34;ip route add 10.10.11.0/24 via 192.168.192.2 || true\u0026#34; depends_on: - app restart: \u0026#34;no\u0026#34; network_mode: \u0026quot;service:app\u0026quot; bedeutet, dass dieser Container keinen eigenen Netzwerk-Stack bekommt, sondern den der Applikation mitbenutzt – die Route landet also genau dort, wo sie hin soll. NET_ADMIN braucht er, um sie setzen zu dürfen, restart: \u0026quot;no\u0026quot; weil er nach einer Sekunde fertig ist, und das || true verhindert, dass ein docker compose up scheitert, wenn die Route schon existiert. Das Image ist bewusst auf eine Version festgenagelt und nicht auf alpine bzw. alpine:latest – ein Container, der mit NET_ADMIN im Netzwerk-Namespace der Applikation läuft, sollte nicht bei jedem Pull etwas anderes sein.\nEin bisschen Vorsicht ist geboten: Der Sidecar läuft einmal beim Start. Wird später nur der App-Container neu erzeugt, ist die Route weg und die LLM-Funktionen fallen still aus. Ein docker compose up -d über das ganze Setup zieht sie wieder ein.\nFazit #Das Setup läuft jetzt seit Monaten ohne Wartung: Die Musik-Applikation liegt weiter brav hinter Traefik im öffentlichen Netz, spricht aber für ihre LLM-Aufrufe über den Tunnel mit einer RTX 3090, die in meinem Büro steht. Der Host selbst weiß von alldem nichts – kein wg0, keine zusätzlichen Firewall-Regeln, keine veränderten Routen. Für weitere Applikationen sind es genau zwei Zeilen (wireguard-net in networks:) plus der Sidecar.\n","date":"29. April 2026","permalink":"https://webman.at/cms/post/2026-04_wireguard_vpn_in_docker/","section":"Blog","summary":"\u003cp\u003eLokale Sprachmodelle haben mich veranlasst einen gebrauchten Gaming-PC für\n\u003cem\u003eInference\u003c/em\u003e-Aufgaben zu kaufen. Die 1000 EUR sind gut investiert, denn die\nNvidia RTX 3090 mit 24 GiB bringt sehr gute Tokens/Sekunde Werte mit den\naktuellen Sprachmodellen. Das Ding steht bei mir im Büro, hört auf den Namen\n\u003ccode\u003egpu-box\u003c/code\u003e und hängt dort in einem ganz normalen privaten LAN (\u003ccode\u003e192.168.11.0/24\u003c/code\u003e).\u003c/p\u003e","title":"WireGuard VPN für Docker Compose Setups"},{"content":"Das Praxisbuch für Entwickler und DevOps-Teams, von Bernd Öggl und Michael Kofler.\n585 Seiten, 2026, gebunden (5., aktualisierte und erweiterte Auflage) Rheinwerk Computing ISBN: 978-3-367-11495-5 Preis: Euro 44,90 (in D inkl. MWSt.) Die fünfte Auflage ist im Februar 2026 erschienen.\nE-Book-Bundle: Auf der Rheinwerk-Webseite können Sie wahlweise das gedruckte Buch, das E-Book oder das Bundle aus beidem bestellen.\nEnglish edition: This book has been translated. The English edition is available at www.sap-press.com.\nInhalt #Das Buch richtet sich an Software-Entwickler und DevOps-Teams. Es ist in drei Teile gegliedert:\nTeil I gibt eine Einführung in Docker und stellt seine Konzepte, Werkzeuge und Syntax vor. Hier finden Sie unter anderem eine Referenz aller wichtigen docker-Kommandos, eine Beschreibung der Syntax für Dockerfile und compose.yaml, Docker Desktop sowie Podman als Docker-Alternative. Teil II stellt den Werkzeugkasten vor, aus dessen Komponenten Sie Docker-Applikationen zusammensetzen können. Dazu zählen unter anderem das schlanke Alpine Linux, Webserver wie Apache, Nginx und Caddy, Node.js und HAProxy, die Programmiersprachen JavaScript, Java, PHP, Ruby, Python und Go, die Datenbanksysteme MariaDB/MySQL, MongoDB, Redis und PostgreSQL sowie komplette Webapplikationen wie WordPress oder Nextcloud. Um Docker in der Praxis geht es schließlich in Teil III: Konkrete Projekte illustrieren, wie Docker effizient und zielführend eingesetzt wird: Umbau vorhandener Software-Projekte in Docker-Projekte Container-Sicherheit und Docker ohne root-Rechte Continuous Integration (CI) und Continuous Deployment (CD) mit GitLab Multi-Architecture-Builds für Intel- und ARM-CPUs Docker in der Cloud und Kubernetes Sprachmodelle und MCP mit dem Docker Model Runner Neu in der 5. Auflage: #Für diese Auflage haben wir das Buch wie immer vollständig aktualisiert. Wichtige inhaltliche Neuerungen sind:\nDocker Model Runner (DMR): Sprachmodelle lokal ausführen MCP: den Docker-MCP-Katalog nutzen Prometheus: Monitoring mit Docker Compose einrichten Netzwerk- und Firewall-Interna von Docker und Podman Dockur: grafische Windows-Testinstallationen ausführen Toolbx: Software-Umgebungen ohne Container-Isolation betreiben Zur Begleit-Webseite dockerbuch.info. Die Beispieldateien finden Sie auf GitHub, die Präsentation des Buchs beim Rheinwerk-Verlag.\n","date":"4. April 2026","permalink":"https://webman.at/cms/buecher/docker/","section":"Bücher","summary":"\u003cp\u003e\u003cem\u003eDas Praxisbuch für Entwickler und DevOps-Teams\u003c/em\u003e,\nvon Bernd Öggl und \u003ca href=\"https://kofler.info/\" target=\"_blank\" rel=\"noreferrer\"\u003eMichael Kofler\u003c/a\u003e.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e585 Seiten, 2026, gebunden (\u003cstrong\u003e5., aktualisierte und erweiterte Auflage\u003c/strong\u003e)\u003c/li\u003e\n\u003cli\u003eRheinwerk Computing\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eISBN\u003c/strong\u003e: 978-3-367-11495-5\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePreis\u003c/strong\u003e: Euro 44,90 (in D inkl. MWSt.)\u003c/li\u003e\n\u003c/ul\u003e","title":"Docker"},{"content":"Docker, 5. Auflage #Das Praxisbuch für Entwickler und DevOps-Teams, von Bernd Öggl und Michael Kofler.\nUmfang: 585 Seiten\nISBN: 978-3-367-11495-5\nPreis: Euro 44,90 (in D inkl. MWSt.)\n5., aktualisierte und erweiterte Auflage 2026, gebunden\nRheinwerk Computing\nBereits im Februar ist die fünfte Auflage unseres Docker-Buches erschienen, aber erst jetzt habe ich die Zeit gefunden das Blog-Posting zu schreiben. Wie immer haben wir das Buch vollständig aktualisiert und einige wichtige inhaltliche Neuerungen hinzugefügt:\nSprachmodelle mit dem Docker Model Runner (DMR) ausführen MCP über den Docker-MCP-Katalog nutzen Prometheus-Monitoring mit Docker Compose einrichten Netzwerk- und Firewall-Interna von Docker und Podman Grafische Windows-Testinstallationen mit Dockur ausführen Toolbx: Software-Umgebungen ohne Container-Isolation betreiben Weitere Informationen finden Sie auf der Webseite zum Buch, beim Rheinwerk Verlag und auf GitHub.\n","date":"4. April 2026","permalink":"https://webman.at/cms/post/2026-04-docker-5/","section":"Blog","summary":"\u003ch2 id=\"docker-5-auflage\" class=\"relative group\"\u003eDocker, 5. Auflage \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#docker-5-auflage\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003e\u003cem\u003eDas Praxisbuch für Entwickler und DevOps-Teams\u003c/em\u003e,\nvon Bernd Öggl und \u003ca href=\"https://kofler.info\" target=\"_blank\" rel=\"noreferrer\"\u003eMichael Kofler\u003c/a\u003e.\u003c/p\u003e","title":"Docker, 5. Auflage"},{"content":"Docker, 4. Auflage #Das Praxisbuch für Entwickler und DevOps-Teams, von Bernd Öggl und Michael Kofler.\nUmfang: 510 Seiten\nISBN: 978-3-8362-9646-5\nPreis: Euro 39,90 (in D inkl. MWSt.)\nSoeben ist die vierte Auflage unseres Docker-Buches erschienen. Wie immer haben wir das Buch vollständig aktualisiert und einige wichtige inhaltliche Neuerungen hinzugefügt:\nmehr Podman-Beispiele und -Details Docker und Podman Desktop: neue GUIs zur Container-Administration Multi-Architecture-Builds: Images für Intel- und ARM-CPUs Caddy: Nutzung des HTTPS-only-Webservers im Container-Verbund Go: ein kleines Beispiel einer REST-API (mit gin-gonic) Weiter Informationen finden Sie auf der Webseite zum Buch und auf GitHub.\n","date":"2. Oktober 2023","permalink":"https://webman.at/cms/post/2023-10-02_dockerv4/","section":"Blog","summary":"\u003ch2 id=\"docker-4-auflage\" class=\"relative group\"\u003eDocker, 4. Auflage \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#docker-4-auflage\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003e\u003cem\u003eDas Praxisbuch für Entwickler und DevOps-Teams\u003c/em\u003e,\nvon Bernd Öggl und \u003ca href=\"https://kofler.info\" target=\"_blank\" rel=\"noreferrer\"\u003eMichael Kofler\u003c/a\u003e.\u003c/p\u003e","title":"Docker, 4. Auflage"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/dezentral/","section":"Tags","summary":"","title":"Dezentral"},{"content":"Meine (digitalen) Daten #Ich versuche keiner der großen Tech-Firmen meine digitalen Gewohnheiten allzu einfach zukommen zu lassen. Dazu gehört, dass ich statt Google Startpage verwende, /e/ OS am Fairphone und Tablet installiert habe und bei Firmen des Facebook/Meta-Konzerns keine Accounts habe (ja, auch kein Whatsapp). Bei Micro$oft gibt es einen sehr eingeschränkten, temporären Account für ein mir wichtiges soziales Projekt, bei dem ich mitarbeite. Bei Amazon bestelle ich seit 2014 nicht mehr.\nZum großen Glück gibt es Open-Source Projekte, die mir die Verwendung vieler extrem komfortabler Clould-Services on-prem also auf meinen Servern erlauben, zum Beispiel: Nextcloud, GitLab, Grafana, Prometheus, und viele mehr.\nTwitter hat meine Daten auch nie bekommen. Warum also jetzt Mastodon?\nDezentral #Das charmante an Mastodon ist, dass es ähnlich wie bei dem Matrix-Netzwerk nicht eine Firma gibt, der das Produkt gehört. Vielmehr kann jede*r selbst eine Mastodon-Instanz betreiben und am großen Fediverse teilnehmen (im Hintergrund werkt das vom W3C spezifizierte ActivityPub Protokoll).\nJetzt ist mir schon auch klar, dass die veröffentlichten Daten nicht auf der eigenen Instanz bleiben, denn das ist ja gerade der Sinn einer Micro-Blogging-Plattform wie Mastodon: Die Daten sollen ja geteilt werden.\nDamit können die Bots von Google und anderen Firmen diese Daten indizieren und mit ihren Informationen vernetzen, aber eben nur so, wie von einer Webseite. Google/Facebook/Twitter wissen nicht, wie lange ich auf ihrer Plattform verbracht habe oder welche Nachricht ich angesehen habe und welche nicht.\nGitHub und GitLab nicht --\u003e Mastodon einzusteigen. Auslöser --\u003e Unsere Instanz: webmapping.social #Als langjährige Sys-Admins war für Klaus und mich natürlich klar, dass wir unsere eigene Instanz betreiben werden. Damit erzeugen wir keine Last auf anderen Servern und können, sollte es sich bewähren und es Interesse geben, auch Platz auf unserer Instanz anbieten.\nSo gibt es seit gut 2 Monaten https://webmapping.social und die ersten Eindrücke sind sehr vielversprechen 🐘 👍️.\n","date":"9. Januar 2023","permalink":"https://webman.at/cms/post/2022-11-mastodon/","section":"Blog","summary":"Wieso bei Mastodon einsteigen? Nur weil ein wild gewordener Turbo-Kapitalist die Micro-Blogging-Plattform Nummer eins (Twitter) gekauft hat und am besten Weg ist diese zu zerstören? Nein. Mastodon verfolgt einen technisch sehr spannenden Ansatz, der Unabhängigkeit von großen Firmen garantiert.","title":"Mastodon, here we go!"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/soziales-network/","section":"Tags","summary":"","title":"Soziales Network"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/Schmetterlinge/","section":"Tags","summary":"","title":"Schmetterlinge"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/Uni/","section":"Tags","summary":"","title":"Uni"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/viel-falter/","section":"Tags","summary":"","title":"Viel-Falter"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/alpinejs/","section":"Tags","summary":"","title":"Alpinejs"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/javascript/","section":"Tags","summary":"","title":"Javascript"},{"content":"Das Problem #Wer Anfang der 2010er Jahre (oder gar noch früher) Web-Applikationen entwickelt hat, kam wohl um die Programmiersprache PHP nicht ganz herum. So verwendeten auch wir zu dieser Zeit PHP bei der Erstellung des neuen Projekts iPROT. Erste Frontend Frameworks wie Backbone.js oder Angularjs waren zwar gerade entstanden, wir vertrauten aber auf Bewährtes und bauten die Logik hauptsächlich auf der Server-Seite in PHP.\nNatürlich kam auch jQuery zum Einsatz. Es war in dieser Zeit, in der sich nicht alle Browser an den HTML-Standard hielten (sprich IE), eine Riesenerleichterung für die Frontend-Entwicklung. Ja es funktionierte so gut, dass wir immer mehr jQuery-Code ergänzten, was die Sache irgendwann unübersichtlich werden ließ.\nEs waren aber nicht nur Tausende Zeilen jQuery Code, der uns zu Schaffen machte, es waren vor allem riesige, verschachtelte PHP Schleifen-Konstrukte, in denen HTML-Code erzeugt wurde. Zu guter Letzt gab es noch PHP Konstrukte, die JavaScript Code erzeugten 🙈.\nDie Trennung #Mit der Entscheidung das Frontend und das Backend weitgehend zu entkoppeln und vom Server Daten im JSON-Format zu übermitteln war klar, dass wir im Frontend eine Bibliothek, oder ein Framework verwenden werden, das uns beim Templating unterstützt.\nZwar bin ich ein großer Fan von Vue.js und würde auch ein neues Web-Projekt sofort mit Vue starten, den Umbau dieser bestehenden Code-Basis wollte ich aber behutsamer angehen und nicht quasi bei Null starten. So kam Alpine.js ins Spiel.\nÜberzeugt hat mich Alpine.js wegen der Möglichkeit den Umstellungsprozess in kleinen Schritten anzugehen. So konnten wir in der ersten Phase etwa große Teile des bestehenden jQuery Codes weiter verwenden um diesen mit einer funktionierenden Applikation Schritt für Schritt zu reduzieren.\nZum Beispiel #Ein großer Nutzen für uns ist das unkomplizierte Templating im HTML-Code, gepaart mit der einhergehenden Reaktivität:\n\u0026lt;select name=\u0026#34;chapterSelect\u0026#34; x-model=\u0026#34;searchChapter\u0026#34; @change=\u0026#34;doSearch\u0026#34;\u0026gt; \u0026lt;template x-for=\u0026#34;chapter in chapters\u0026#34; :key=\u0026#34;chapter.id\u0026#34;\u0026gt; \u0026lt;option :value=\u0026#34;chapter.id\u0026#34; x-text=\u0026#34;chapter.name\u0026#34;\u0026gt;\u0026lt;/option\u0026gt; \u0026lt;/template\u0026gt; \u0026lt;/select\u0026gt; Die so erzeugte Auswahlliste von Kapiteln verwendet die JavaScript Variable chapters, die aus einem Array von Objekten mit id und name (und noch ein paar mehr) Eigenschaften besteht. Durch das verwendete x-model wird automatisch der Wert der Variable searchChapter vorausgefüllt. Wird ein Wert aus der Liste ausgewählt (@change) wird die Funktion doSearch aufgerufen. Die geneigte Leser*in kann sich vorstellen, wie das PHP-Konstrukt aussah, das die Auswahlliste erzeugte (wir verwendeten dazu eine eigene Funktion, der vier Parameter übergeben wurden, unter anderem ein String für style Anweisungen).\nAußerdem ändert sich die Liste automatisch, wenn sich der chapters-Array ändert (zum Beispiel wenn an anderer Stelle der Applikation ein Kapitel hinzugefügt wird).\nAlpine.js kapselt die Gültigkeit von Variablen auf DOM-Elemente. Eingeschlossene Elemente erhalten automatisch Zugriff auf die Variablen, für die Kommunikation nicht verschachtelter Alpine.js Komponenten werden Events geschickt. Mit einem Hintergrundwissen von Angular oder Vue.js wird man sich bei Alpine.js gleich wohl fühlen.\nWerkzeuge #Jetzt ist Alpine.js noch nicht so lange am Markt, weshalb auch das Vorhandensein von Werkzeugen für Editoren nicht sehr weit verbreitet ist. Für den JavaScript Code ist das unproblematisch, hier funktionieren bestehende Tools. Der HTML-Code wird auch korrekt eingerückt, einzig bei den Alpine.js-spezifischen HTML Attributen gibt es noch Luft nach oben. Auto-Vervollständigung von Variablen oder Funktionen bleibt hier außen vor, es gibt aber eine erweiterte Syntax-Erkennung als Visual Studio Code Plugin.\nVSCode mit dem Alpinejs-syntax-highlight Plugin. $t in x-text ruft die globale Übersetzungsfunktion auf (ein Alpine.js Plugin) Fazit #Mit der Umstellung konnten wir die Code-Basis gehörig aufräumen und ausmisten. Der größte Vorteil ist aber, dass das Arbeiten mit dem neuen Code wieder Spaß macht: Wir haben jetzt automatisches Neu-Laden bei Änderungen, wesentlich perfomanteren Code und vor allem wieder Übersicht.\nMich konnte das Micro-Framework Alpine.js überzeugen und ich werde es wohl auch in anderen Projekten einsetzen.\n","date":"13. Mai 2022","permalink":"https://webman.at/cms/post/2022-05-alpinejs/","section":"Blog","summary":"\u003ch2 id=\"das-problem\" class=\"relative group\"\u003eDas Problem \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#das-problem\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eWer Anfang der 2010er Jahre (oder gar noch früher) Web-Applikationen entwickelt\nhat, kam wohl um die Programmiersprache PHP nicht ganz herum. So verwendeten\nauch \u003ca href=\"https://iprot.info/cms/ueber-uns/\" target=\"_blank\" rel=\"noreferrer\"\u003ewir\u003c/a\u003e zu dieser Zeit PHP bei der\nErstellung des neuen Projekts \u003ca href=\"https://iprot.info/\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cstrong\u003eiPROT\u003c/strong\u003e\u003c/a\u003e. Erste Frontend\nFrameworks wie \u003ca href=\"http://backbonejs.org/\" target=\"_blank\" rel=\"noreferrer\"\u003eBackbone.js\u003c/a\u003e oder\n\u003ca href=\"https://angularjs.org/\" target=\"_blank\" rel=\"noreferrer\"\u003eAngularjs\u003c/a\u003e waren zwar gerade entstanden, wir\nvertrauten aber auf Bewährtes und bauten die Logik hauptsächlich auf der\nServer-Seite in PHP.\u003c/p\u003e","title":"Pimp your Web-App mit Alpine.js"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/android/","section":"Categories","summary":"","title":"Android"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/android/","section":"Tags","summary":"","title":"Android"},{"content":"tl;dr # termux App unter Android installieren App starten openssh installieren und sshd aufrufen am PC adb mit Port-forwarding aktivieren rsync am PC aufrufen Warum #Vor vielen Jahren (7.5 um genau zu sein) habe ich ein Blogpost zum Thema Datentransfer zwischen Android und PC geschrieben. Ich bin damals schier verzweifelt mit den nicht vorhandenen Möglichkeiten Daten effizient zwischen Android und meinem Linux PC zu transferieren (adb pull geht, kann aber keine Wildcards, ich möchte die Möglichkeiten die rsync bietet).\nHeutzutage ist das normalerweise kein Problem mehr, denn die Daten werden ohnehin über einen Cloud-Dienst (in meinem Fall eine selbst-gehostete Nextcloud-Instanz) übertragen. Das funktioniert bei breitbandigen Internetverbindungen so gut, dass man ganz vergisst, welchen Umweg die Daten gerade nehmen.\nEtwas anders sieht die Situation aus, wenn man, wie ich gerade, im Camper an einem griechischen Strand mit einem mobilen Hostspot arbeitet 😎.\nEs geht doch #Zwar kann ich bei meiner aktuellen, von Google-Diensten befreiten, Android Version der e.foundation auch den Datentransfer Modus für USB aktivieren, nur funktioniert der halt nur manchmal. Der USB-Port auf der rechten Seite meines Notebooks geht öfter als der auf der linken (es sind beide USB3). Und dann kann ich immer noch nicht rsync.\nZum Glück gibt es termux und das sogar ganz easy beim F-droid Store. Die App startet ein Terminal, das auf eine echte Linux-Umgebung zugreifen kann. Mit\npkg install openssh wird ein SSH-Server installiert und mit\n$ sshd -p 8090 kann man selbigen auf Port 8090 (als Beispiel) starten.\nFür die weiteren Schritte sollten Sie die Entwickler-Optionen unter Android aktivieren und die Android-Debug-Bridge (adb) auf Ihrem PC installiert haben.\nMit dem Kommando\nadb -d forward tcp:8090 tcp:8090 verbinden Sie den Port 8090 auf Ihrem Computer mit dem Port 8090 auf dem durch adb (und USB) verbundenen Android Gerät. Für eine erfolgreichen SSH-Verbindung müssen Sie jetzt nur noch das Benutzer-Passwort am Android Gerät setzen (passwd in der Shell aufrufen), oder einen SSH-Public-Key hinterlegen (in der Datei ~/.ssh/authorized_keys).\nDann reicht der Aufruf:\nssh -p 8090 localhost um die Verbindung herzustellen.\nEin Eintrag in der lokalen ~/.ssh/config Datei hilft, um die Syntax beim rsync-Kommando zu vereinfachen. Für mein Fairphone habe ich fp3 als Hostnamen gewählt:\nHost fp3 Hostname localhost Port 8090 Und nachdem ich den Public-Key meines Yubikeys am Handy hinterlegt habe, kann ich jetzt ganz locker rsync machen:\nrsync -av fp3:storage/dcim/Camera/IMG_202111\\* . Und das kopiert alle Fotos aus dem aktuellen Monat (November 2021) in den aktuellen Ordner (der storage-Ordner existiert, weil ich zuvor in der termux-Shell das Kommando termux-setup-storage ausgeführt habe).\n","date":"5. November 2021","permalink":"https://webman.at/cms/post/2021-11-android-ssh/","section":"Blog","summary":"\u003ch2 id=\"tldr\" class=\"relative group\"\u003etl;dr \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#tldr\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cul\u003e\n\u003cli\u003e\u003ccode\u003etermux\u003c/code\u003e App unter Android installieren\u003c/li\u003e\n\u003cli\u003eApp starten openssh installieren und \u003ccode\u003esshd\u003c/code\u003e aufrufen\u003c/li\u003e\n\u003cli\u003eam PC \u003ccode\u003eadb\u003c/code\u003e mit Port-forwarding aktivieren\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ersync\u003c/code\u003e am PC aufrufen\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"warum\" class=\"relative group\"\u003eWarum \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#warum\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eVor vielen Jahren (7.5 um genau zu sein) habe ich ein Blogpost zum Thema \u003ca href=\"/cms/2013/04/datentransfer-mit-rsync-openssh-und-cyanogenmod-am-galaxy-nexus/\"\u003eDatentransfer zwischen Android und PC\u003c/a\u003e\ngeschrieben. Ich bin damals schier verzweifelt mit den nicht vorhandenen\nMöglichkeiten Daten effizient zwischen Android und meinem Linux PC zu\ntransferieren (\u003ccode\u003eadb pull\u003c/code\u003e geht, kann aber keine \u003cem\u003eWildcards\u003c/em\u003e, ich möchte die\nMöglichkeiten die \u003ccode\u003ersync\u003c/code\u003e bietet).\u003c/p\u003e","title":"Android rsync"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/","section":"Categories","summary":"","title":"Categories"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/rsync/","section":"Tags","summary":"","title":"Rsync"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/ssh/","section":"Tags","summary":"","title":"Ssh"},{"content":"Docker #Das Praxisbuch für Entwickler und DevOps-Teams, von Bernd Öggl und Michael Kofler.\nDie bereits dritte Auflage unseres Buches über Docker bringt einige interessante Neuerungen:\nRootless Docker: Docker ohne root-Rechte verwenden CPU-Architekturen: Docker auf Apple-Computern mit ARM-Prozessoren Pull-Limit: Docker-Hub-Limits beim Image-Zugriff umgehen Container automatisch starten: restart-Option und systemd neue GUI-Tools: Docker Desktop, VSCode, Portainer Traefik: ein Proxy-Server speziell für Container-Anwendungen Für Web-Entwickler*innen wird der neue Abschnitt über Traefik sehr interessant sein. Mit dem Proxy-Server wird es zu einem Kinderspiel verschiedene Web-Applikationen auf einem Server zu betreiben. Als Bonus kümmert sich Traefik auch noch um das automatische Beantragen von Verlängern von SSL-Zertikaten.\nWeitere Informationen zum Buch erhalten Sie auf der Webseite zum Buch (natürlich im Docker Container) und beim Rheinwerk Verlag. Den Sourcecode für alle Beispiele aus dem Buch finden Sie auf unserem Github Account.\n","date":"24. September 2021","permalink":"https://webman.at/cms/post/2021-09-docker-buch/","section":"Blog","summary":"\u003ch2 id=\"docker\" class=\"relative group\"\u003eDocker \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#docker\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003e\u003cem\u003eDas Praxisbuch für Entwickler und DevOps-Teams\u003c/em\u003e,\nvon Bernd Öggl und \u003ca href=\"https://kofler.info\" target=\"_blank\" rel=\"noreferrer\"\u003eMichael Kofler\u003c/a\u003e.\u003c/p\u003e","title":"Docker Buch, 3. Auflage"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/git/","section":"Tags","summary":"","title":"Git"},{"content":"Es ist zwar schon seit zwei Wochen im Handel erhältlich, aber ein aktuelles Projekt ließ mir nicht einmal die Zeit den kurzen Blog-Eintrag dazu zu verfassen.\nDie Zusammenarbeit mit Michael Kofler war wieder einmal grandios. Sowohl die von ihm entwickelte Arbeitstechnik auf der Basis von Markdown, als auch der tägliche Ablauf mit Code review waren ein Genuss. Nach PHP5 \u0026amp; MySQL5 und Docker war es schon das dritte Buch, das ich mit ihm zusammen schreiben durfte. Sein großes Wissen um Aufbau und Struktur von guten Computerbüchern ist der Grundstein für den Erfolg des Buches.\nMehr zum Inhalt des Buches finden Sie auf der eigenen Seite zum Gitbuch.\n","date":"16. September 2020","permalink":"https://webman.at/cms/post/2020-09-git-buch/","section":"Blog","summary":"\u003cp\u003eEs ist zwar schon seit zwei Wochen im Handel erhältlich, aber ein aktuelles\nProjekt ließ mir nicht einmal die Zeit den kurzen Blog-Eintrag dazu zu\nverfassen.\u003c/p\u003e","title":"Git Buch erschienen"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/versionsverwaltung/","section":"Tags","summary":"","title":"Versionsverwaltung"},{"content":"Da der anstehende Urlaub der erste seit langer Zeit ohne Laptop sein wird (die Fahrradtaschen bieten nur begrenzt Speicherplatz), suchte ich nach einem seriösen SSH-Client für das Android Mobiltelefon. Da die Zugänge auf meinen Servern inzwischen ausschließlich mit den SSH-Keys auf meinen beiden Yubikeys abgesichert sind, war die Anforderung, dass der Client die Schlüssel von dem Hardware-Token verwenden kann.\nTermux #Auf meinem Smartphone (Fairphone 3), das dank e.foundation ohne die Closed Source Google Erweiterungen von Android auskommt, verwende ich schon seit langer Zeit Termux. Für Commandline Heroes ist die Umgebung einfach traumhaft: Die Zsh läuft mit Oh-my-zsh, git, vim und meinen Dotfiles vom Linux-Desktop. Damit sind auch alle SSH-Zugänge in ~/.ssh/config vorhanden, nur leider unterstützt Termux die SSH-Keys vom Yubikey (noch) nicht. Es gibt dazu einen Eintrag im Issue Tracker, aber leider noch keine Lösung.\nDie Termux Commandline am Android Smartphone Termbot zur Rettung #Doch nach kurzer Internet-Recherche wurde ich aber fündig: Die Open-Source-App TermBot, die es auch im F-Droid Store gibt, ist ein Fork der bekannten Android App ConnectBot und wurde um den Hardware Support für einige gängige USB und NFC Tokens erweitert. Damit gelingt ein SSH-Login auf den Servern, wodurch auch ohne Laptop auf Reisen ein wichtiges Paket-Update oder Reboot ausgeführt werden kann 👍.\nTermbot bei der PIN-Abfrage vom Yubikey ","date":"16. Juli 2020","permalink":"https://webman.at/cms/post/android-ssh-yubikey/","section":"Blog","summary":"\u003cp\u003eDa der anstehende Urlaub der erste seit langer Zeit ohne Laptop sein wird (die\nFahrradtaschen bieten nur begrenzt Speicherplatz), suchte ich nach einem\nseriösen SSH-Client für das Android Mobiltelefon. Da die Zugänge auf meinen\nServern inzwischen ausschließlich mit den SSH-Keys auf meinen beiden Yubikeys\nabgesichert sind, war die Anforderung, dass der Client die Schlüssel von dem\nHardware-Token verwenden kann.\u003c/p\u003e","title":"Android SSH-App mit Yubikey Support"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/termbot/","section":"Tags","summary":"","title":"Termbot"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/yubikey/","section":"Tags","summary":"","title":"Yubikey"},{"content":"Nach ziemlich genau 19,5 Jahren wird aus komplett.cc webman.at.\nDabei gibt es nicht nur eine neue Domain, sondern auch das extrem coole Logo von Mister KG:\nWer es einmal gesehen hat, kann nicht mehr wegschauen 😎.\nAußerdem neu ist die timeline, eine unvollständige Aufzählung von Projekten, in grafisch ansprechender Form.\n","date":"13. Juli 2020","permalink":"https://webman.at/cms/post/webman/","section":"Blog","summary":"\u003cp\u003eNach ziemlich genau 19,5  Jahren wird aus komplett.cc\nwebman.at.\u003c/p\u003e","title":"Alles neu"},{"content":"Das umfassende Praxisbuch zu Git – von den Grundlagen über GitHub und GitLab bis zu fortgeschrittenen Workflows und Troubleshooting.\nErschienen: Ende April 2022 (2. Auflage)\nUmfang: 424 Seiten\nISBN: 978-3-8362-8845-3\nPreis: Euro 39,90 (in D inkl. MWSt.)\nAutoren: Bernd Öggl 🐘 und Michael Kofler 🐘\nBuchseite beim Rheinwerk Verlag\nEnglish edition: This book has been translated. The English edition is available at www.sap-press.com.\nInhalt #Git gehört zum unverzichtbaren Handwerkszeug aller IT-Profis und darf in keiner Toolbox fehlen. Dabei macht es keinen Unterschied, ob Sie Konfigurationsdateien versionieren wollen, an Open-Source-Projekten mitarbeiten oder im Team komplexe Anwendungen entwickeln: Git sorgt dafür, dass Sie den Überblick behalten. Daher lernen Sie hier nicht nur, wie Sie Änderungen einchecken und fremde Repositorien klonen, sondern erfahren, wie Git Ihnen den Arbeitsalltag leichter macht.\nGit effektiv nutzen und sicher administrieren Eigene Repositorien auf GitHub und GitLab einrichten Best Practices und Troubleshooting für die Praxis Jeder verwendet es, keiner versteht es … #An Git geht im Entwickleralltag kein Weg vorbei. Viele Anwender können mit Git aber nur soweit umgehen, dass sie gerade einmal Commit, Pull und Push ausführen können. Auf kurz oder lang treten unweigerlich Probleme auf. Unverständliche Fehlermeldungen bringen Git-Anwender dann rasch zur Verzweiflung.\nIn unserem Buch erklären wir Ihnen, wie Git wirklich funktioniert. Wir zeigen Ihnen anhand vieler Beispiele die effiziente Nutzung in der Praxis sowie gängige Arbeitstechniken. Dabei berücksichtigen wir, dass Git heute mehr ist als das gleichnamige Kommando. Erst im Zusammenspiel mit Plattformen wie GitLab oder GitHub entfaltet Git sein ganzes Potential.\nFür die 2. Auflage haben wir das Buch vollständig aktualisiert. Neue Themen sind die Umstellung des Defaultzweigs von master nach main, der Umgang mit Tokens sowie GitPods und Codespaces.\nKapitelübersicht # Git in zehn Minuten: der Schnelleinstieg Learning by Doing: Installation, Einrichtung, Authentifizierung, erste Schritte mit und ohne GUI Grundlagen: Repos, Commits, Branches, Merging, Rebasing, Stashing, Tags, Interna GitHub: Pull Requests, Actions, CI, Packages, CLI GitLab: lokales Hosting, Pipelines, Web IDE GitHub/GitLab-Alternativen: Bitbucket, Azure DevOps Services, Bonobo, Gitolite Arbeitstechniken: 2FA, Hooks, prägnante Commit Messages, Submodule + Subtrees Workflows: Feature Branches, Pull/Merge Requests, Long Running Branches (Gitflow), Trunk Based Development Probleme und Lösungen: Fehlermeldungen, Single File Merge, Dateien aus Repo entfernen Kommandoreferenz Beispieldateien #Zu diesem Buch gibt er einige Beispiel-Repositorys, die Sie hier finden:\nFür die 1. Auflage: https://github.com/git-buch Für die 2. Auflage: https://github.com/git-compendium\nLeseprobe und Errata #Eine PDF mit Inhaltsverzeichnis und Vorwort finden Sie hier:\nhttps://kofler.info/buecher/git\n","date":"13. Juli 2020","permalink":"https://webman.at/cms/buecher/git/","section":"Bücher","summary":"\u003cp\u003eDas umfassende Praxisbuch zu Git – von den Grundlagen über GitHub und GitLab bis zu fortgeschrittenen Workflows und Troubleshooting.\u003c/p\u003e","title":"Git"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/github/","section":"Tags","summary":"","title":"Github"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/gitlab/","section":"Tags","summary":"","title":"Gitlab"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/linux/","section":"Tags","summary":"","title":"Linux"},{"content":"\n","date":null,"permalink":"https://webman.at/cms/","section":"","summary":"\u003cp\u003e\u003ca href=\"https://showyourstripes.info/l/europe/austria/innsbruck\" target=\"_blank\"\ntitle=\"#showyourstripes: by Ed Hawkins, National Centre for Atmospheric Science, University of Reading., National Centre for Atmospheric Science, UoR.\"\u003e\u003c/p\u003e\n  \u003cdiv class=\"well striped\"\u003e\n    \u003cdiv class=\"box\"\u003e\n      \u003cdiv class=\"img wman-logo\"\u003e\n        \u003cimg itemprop=\"thumbnail\" src=\"/cms/images/wman.svg\" alt=\"/cms/images/wman.svg\"\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/a\u003e\n\u003c!-- __webman.at__ (ursprünglich komplett.cc) wurde 2001 von Bernd Öggl gegründet\nund entwickelt seither mit der tatkräftigen Hilfe von \u003ca\nhref=\"http://svg.cc\"\u003eKlaus Förster\u003c/a\u003e innovative Web-Applikationen. --\u003e\n\u003c!-- Mithilfe\nvon modernen Web-Technologien (\u003ca title=\"HTML5\"\nhref=\"https://komplett.cc/cms/\"\u003eHTML5\u003c/a\u003e, \u003ca\nhref=\"http://html5.komplett.cc/code/index_en.html\"\u003eJavascript\u003c/a\u003e, \u003ca\nhref=\"http://html5.komplett.cc/code/chap_websockets/index_en.html\"\u003eWebsockets\u003c/a\u003e,\n\u0026#8230;) und durch langjährige Erfahrung mit Computer-Netzwerken wurden\nerfolgreiche Projekte wie die Plattform \u003ca title=\"skiline.cc\"\nhref=\"/cms/projekte/skiline/\"\u003eskiline.cc\u003c/a\u003e, \u003ca\nhref=\"https://snowhow.info\"\u003esnowhow.info\u003c/a\u003e, oder das Informationssystem\n\u003cem\u003e\u003ca title=\"Public Display\"\nhref=\"https://komplett.cc/cms/projekte/pd/\"\u003ePublic Display\u003c/a\u003e\u003c/em\u003e umgesetzt. --\u003e\n\u003c!-- Technische Artikel zu aktuellen Themen finden Sie im [Blog](post), --\u003e\n\u003c!-- Informationen zu [Git](buecher/git), [Docker](buecher/docker), [HTML](buecher/html5) und [PHP](buecher/php5) finden Sie in unter [Bücher](buecher). --\u003e","title":""},{"content":"Auch wenn es derzeit nicht nur positive Entwicklungen für die Firma Docker Inc. gibt, so ist die Container-Technologie doch gekommen um zu bleiben. Lesen Sie in der 2. Auflage unseres Docker Buches unter anderem über podman, eine Alternative zum Docker Kommandozeilenprogramm. Außerdem wurde der Text und alle Beispiele für die 2. Auflage vollständig aktualisiert.\nDen Quellcode für alle Beispiele können Sie von github.com/docbuc laden.\nMehr zum Inhalt finden Sie auf Webseite zum Buch.\n","date":"12. Februar 2020","permalink":"https://webman.at/cms/post/docker_v2/","section":"Blog","summary":"\u003cp\u003eAuch wenn es derzeit \u003ca href=\"https://www.heise.de/developer/meldung/Kommentar-Docker-hat-s-vergeigt-4586232.html\" target=\"_blank\" rel=\"noreferrer\"\u003enicht nur positive\nEntwicklungen\u003c/a\u003e\nfür die Firma Docker Inc. gibt, so ist die Container-Technologie doch gekommen\num zu bleiben. Lesen Sie in der 2. Auflage unseres Docker Buches unter anderem über\n\u003cstrong\u003epodman\u003c/strong\u003e, eine Alternative zum Docker Kommandozeilenprogramm.  Außerdem wurde\nder Text und alle Beispiele für die 2. Auflage vollständig aktualisiert.\u003c/p\u003e","title":"Docker 2. Auflage"},{"content":"Out now #Unser Docker-Buch gibt es zwar schon seit über einen Monat zu kaufen, aber bislang fehlten mir für einen Blog-Eintrag eigene Bilder von Docker Containern. Das Wochenende in Hamburg konnte hier Abhilfe schaffen :-)\nDas Buch richtet sich an Entwickler und DevOps, die die faszinierende Docker Technologie gerne hands-on ausprobieren möchten. Wir stellen viele Beispiele vor, die weit über das Hello-World Niveau hinausgehen und einen Einblick geben sollen, wo Docker bei der täglichen Arbeit helfen kann.\nWir haben sehr bewusst keine Referenz aller Docker Kommandos und deren Parameter abgedruckt; die online Dokumentation ist sehr gut und immer am aktuellen Stand. Unser Ziel war es anhand von echten Beispielen die Möglichkeiten von Docker aufzuzeigen und unsere Erfahrungen aus der Praxis mit experimentierfreudigen Entwicklern zu teilen.\nEs gibt eine kleine Website zu dem Buch und wir freuen uns sehr über konstruktive Kritik.\n","date":"2. Oktober 2018","permalink":"https://webman.at/cms/post/2018-10-docker-buch/","section":"Blog","summary":"\u003ch2 id=\"out-now\" class=\"relative group\"\u003eOut now \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#out-now\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eUnser \u003ca href=\"/cms/buecher/docker\"\u003eDocker-Buch\u003c/a\u003e gibt es zwar schon seit über einen\nMonat zu kaufen, aber bislang fehlten mir für einen Blog-Eintrag eigene Bilder\nvon Docker Containern. Das Wochenende in Hamburg konnte hier Abhilfe schaffen\n:-)\u003c/p\u003e","title":"Docker"},{"content":"Die Karten bei snowhow-maps basieren auf den Daten von Openstreetmap und werden um Geländeinformationen ergänzt. Das Ergebnis sind über 7 Millionen Karten-Kacheln im PNG-Format für den Alpenraum, die mit Carto-CSS und Mapnik (Kosmtik) erzeugt werden.\nDa wir unter anderem Felszeichnung und Schummerung in der Karte verwenden, kann mit dem JPEG-Format bei relativ geringem Qualitätsverlust einiges an Platz gespart werden. Um die mächtige Dateistruktur mit einem Einzeiler von PNG in JPEG zu konvertieren und dabei noch ansprechende Dateinamen zu erhalten, kann man folgendes Kommando im Wurzelverzeichnis des Tilestore verwenden:\nfind . -type f -name \u0026#39;*.png\u0026#39; -exec bash -c \\ \u0026#39;echo \u0026#34;convert $1\u0026#34; \u0026amp;\u0026amp; convert -format jpg \\ -quality 90% -sharpen 0.1 \u0026#34;$1\u0026#34; \u0026#34;${1/\\.png/.jpg}\u0026#34;\u0026#39;\\ -- {} \\; Original PNG (256x256px 107 KB) Geschärftes JPG (256x256px 40 KB) Der Unterschied liegt ca. bei einem Faktor von 2.8, was bei grob 7 Millionen (wenn auch kleinen) Dateien schon einen gehörigen Unterschied macht. Der Trick mit dem Schärfen (-sharpen 0.1) kommt von Mapbox.\n","date":"23. März 2018","permalink":"https://webman.at/cms/2018/03/wmts-tiles-von-png-nach-jpg/","section":"Blog","summary":"\u003cp\u003eDie Karten bei \u003ca href=\"https://snowhow.info/map\" target=\"_blank\" rel=\"noreferrer\"\u003esnowhow-maps\u003c/a\u003e basieren auf den Daten\nvon Openstreetmap und werden um Geländeinformationen ergänzt. Das Ergebnis sind\nüber 7 Millionen \u003cem\u003eKarten-Kacheln\u003c/em\u003e im PNG-Format für den Alpenraum, die mit\nCarto-CSS und Mapnik (Kosmtik) erzeugt werden.\u003c/p\u003e","title":"WMTS Tilestore von PNG nach JPEG konvertieren"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/Desktop/","section":"Tags","summary":"","title":"Desktop"},{"content":"Mein Desktop-Verhalten ist sicher nicht mehrheitsfähig: Die meiste Zeit meiner Arbeit verbringe ich in Konsole-Fenstern, dann ist da noch Firefox (und manchmal Chromium). Statt Thunderbird verwende ich wieder Mutt, weil es einfach schneller geht (ein gutes Web-Mail muss manchmal aushelfen). Vim ist natürlich der beste Editor der Welt. Für manche Projekte verwende ich aber auch Atom oder VSCode.\nFrüher \u0026ndash; mein Hintergrund #Mein erster Kontakt mit Linux reicht in das Jahr 1994 zurück (ja, da war gerade Linux kernel 1.0). Mit den Mailprogrammen elm und später pine vergingen die 90er Jahre, ge-chatted wurde mit Unix talk. NCSA Mosaic und später Netscape Navigator waren sowieso grandios. Aber auch die Freude über die aufkommenden Linux Desktops war groß: KDE selbst zu kompilieren war zwar eine große Aufgabe, aber einen Desktop wie Windows unter Linux zu haben war sensationell.\nSlackware, sehr lange Redhat und dann Ubuntu (in so ziemlich allen Ausprägungen) waren Stationen auf dem Linux-Desktop-Weg aus den 1990er Jahren bis heute. Irgendwas hat immer nicht funktioniert, aber als Linux Desktop User hat man wohl eine ausgeprägte masochistische Ader.\nJetzt \u0026ndash; 20 Jahre Linux Desktop später #Jetzt sind Linux Desktops für Computer-Einsteiger geeignet. Wenn die Hardware nicht ganz außergewöhnlich ist, sind Linux Desktops heute ideal für User die Ihre E-Mails checken wollen, im Internet surfen und Musik hören wollen. Der letzte Gnome-Desktop hat auch mir grafisch sehr gut gefallen, bis, ja bis ich i3 ausprobiert habe:\ni3 ist ein tiling window manger, Fenster werden auf dem Bildschirm verteilt und können über Tastenkürzel unterschiedlich angeordnet werden. Es gibt workspaces (virtuelle Desktops), von denen man intensiv Gebrauch machen kann. Sie verschwinden automatisch, wenn sie nicht mehr verwendet werden.\nDie Status-Zeile am unteren Bildschirmrand (i3status) kann über eine einfache Text-Konfigurationsdatei angepasst werden. Außerdem nimmt sie sogenannte Tray-Icons von Programmen auf, die hauptsächlich im Hintergrund laufen (zum Beispiel das Network-Manager Applet).\nWas nach einiger Zeit der Verwendung auffällt:\nder Lüfter meines Laptops läuft praktisch nie mehr an der Griff zur Maus erfolgt sehr selten ALT-TAB nicht mehr zu verwenden war gewöhnungsbedürftig Fazit #Es fühlt sich so an, als ob ich das von Linux wieder habe, was mir so gut gefällt. Hier gibt es keine Dialoge, die nachfragen, ob man etwas wirklich tun will und schon das Abbrechen der Aktion vorschlagen. Und habe ich schon erwähnt, dass i3 wirklich schnell ist?\n","date":"23. November 2017","permalink":"https://webman.at/cms/2017/11/mein-neuer-linux-desktop/","section":"Blog","summary":"\u003cp\u003eMein Desktop-Verhalten ist sicher nicht \u003cem\u003emehrheitsfähig\u003c/em\u003e: Die meiste Zeit\nmeiner Arbeit verbringe ich in Konsole-Fenstern, dann ist da noch\n\u003ca href=\"https://www.mozilla.org/de/firefox/\" target=\"_blank\" rel=\"noreferrer\"\u003eFirefox\u003c/a\u003e (und manchmal\n\u003ca href=\"https://www.chromium.org/\" target=\"_blank\" rel=\"noreferrer\"\u003eChromium\u003c/a\u003e). Statt Thunderbird verwende ich wieder\nMutt, weil es einfach schneller geht (ein \u003ca href=\"https://www.rainloop.net/\" target=\"_blank\" rel=\"noreferrer\"\u003egutes\nWeb-Mail\u003c/a\u003e muss manchmal aushelfen).\n\u003ca href=\"https://vim.sourceforge.io/\" target=\"_blank\" rel=\"noreferrer\"\u003eVim\u003c/a\u003e ist natürlich der beste Editor der Welt.\nFür manche Projekte verwende ich aber auch \u003ca href=\"https://atom.io\" target=\"_blank\" rel=\"noreferrer\"\u003eAtom\u003c/a\u003e oder \u003ca href=\"https://code.visualstudio.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eVSCode\u003c/a\u003e.\u003c/p\u003e","title":"i3 - Mein neuer Linux Desktop"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/Ubuntu/","section":"Tags","summary":"","title":"Ubuntu"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/devops/","section":"Categories","summary":"","title":"Devops"},{"content":"Schon seit längerer Zeit verwende ich eine selbst gehostete gitlab Instanz um meine Programmierprojekte zu verwalten. Die Features dieser OpenSource Software sind wirklich sehr beeindruckend.\nBei einem closed source Projekt entstand kürzlich die Notwendigkeit docker images gemeinsam zu verwenden. Die in gitlab integrierte docker registry macht das ohne große Klimmzüge möglich:\ndocker login gitlab.komplett.cc:4567 docker docker build -t gitlab.komplett.cc:4567/meinegruppe/meinprojekt . docker push gitlab.komplett.cc:4567/meinegruppe/meinprojekt . Und schwubdiwupp ist das docker image für alle Projektbeteiligten mit dem Kommando\ndocker run gitlab.komplett.cc:4567/meinegruppe/meinprojekt auführbar. Eine wunderbare Arbeitserleichterung um zum Beispiel ein gemeinsames Projektsetup zu teilen.\nDamit die docker registry in gitlab verfügbar ist muss das Container Registry Modul aktiviert werden. Bei meinem Setup waren dazu folgende Einträge in der gitlab.rb Datei nötig:\nregistry_external_url \u0026#39;https://gitlab.komplett.cc:4567\u0026#39; registry_nginx[\u0026#39;ssl_certificate\u0026#39;] = \u0026#34;/etc/gitlab/ssl/fullchain.pem\u0026#34; registry_nginx[\u0026#39;ssl_certificate_key\u0026#39;] = \u0026#34;/etc/gitlab/ssl/privkey.pem\u0026#34; Für bestehende Projekte muss die registry eventuell noch manuell in den Projekteinstellungen aktiviert werden. Natürlich können pro Projekt verschiedene Images und Tags für images vergeben werden (siehe Gitlab container registry).\n","date":"1. Oktober 2017","permalink":"https://webman.at/cms/2017/10/gitlab-docker-container-registry/","section":"Blog","summary":"\u003cp\u003eSchon seit längerer Zeit verwende ich eine selbst gehostete \u003ca href=\"https://gitlab.com/gitlab-org/gitlab-ce/\" target=\"_blank\" rel=\"noreferrer\"\u003egitlab\u003c/a\u003e Instanz um meine Programmierprojekte zu verwalten. Die Features dieser OpenSource Software sind wirklich sehr beeindruckend.\u003c/p\u003e\n\u003cp\u003eBei einem closed source Projekt entstand kürzlich die Notwendigkeit \u003ca href=\"https://www.docker.com/\" target=\"_blank\" rel=\"noreferrer\"\u003edocker images\u003c/a\u003e gemeinsam zu verwenden. Die in gitlab integrierte docker registry macht das ohne große Klimmzüge möglich:\u003c/p\u003e","title":"Gitlab Docker registry"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/hack/","section":"Tags","summary":"","title":"Hack"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/IPv4/","section":"Tags","summary":"","title":"IPv4"},{"content":"Als ich kürzlich die Zeilen\nWaiting for 1.2.3.4 und dann noch\nTransferring from 1.2.3.4 in der Status-Zeile des Firefox Browser las wurde ich etwas unrund. Die aufgerufene Seite (http://snowhow.info) hatte ich selbst entwickelt und ganz sicher keinen Link auf http://1.2.3.4 eingebaut. Irgendwie schaute die Seite auch anders aus, aber nicht wesentlich. Also den Quellcode der Seite studiert und da steht es: Vor der head-Anweisung hat jemand Javascript-Code aus einer anderen Domain eingeschleust:\n\u0026lt;script src=\u0026#34;http://1.2.3.4/bmi-int-js/bmi.js\u0026#34; language=\u0026#34;javascript\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; Gehackt #Die Seite wurde gehackt, ganz klar. Aber wie konnte ich gehackt werden und wer hat eigentlich die extrem coole IP-Adresse 1.2.3.4 auf die da verlinkt wird? Dr. Google hilft in solchen Fällen ja immer sehr zuverlässig: In meinem Fall wird das Javascript von meinem aktuellen Internet Service Provider (eine Prepaid SIM von Vodafone Greece) eingefügt um Datenvolumen zu sparen. Also nicht gehackt, zuerst einmal durchschnaufen.\nDoch nicht gehackt #Wie viele Seiten im Netz zeigen ist es gar nicht einfach (oder mir zumindest nicht gelungen) die wohl gut-gemeinte Optimierung abzuschalten: Vodafone proxyt alle Bilder, verkleinert sie massiv und schickt nur schlecht aufgelöste Versionen an den Client. Für Entwickler unangenehm dabei ist, dass der Javascript-Code nicht gerade state-of-the-art ist: Es werden einige globale Variable erzeugt (oder überschrieben) und es wird versucht eine Art Tooltip mit inkorrekten Informationen über alle Bilder zu legen.\nUnd wer ist jetzt 1.2.3.4? #Wie Google ebenfalls ans Licht brachte wurde der Adressblock im Jahr 2010 zwar vergeben, aber er kann nicht seriös verwendet werden, weil Skripts wie dieses den Bereich vollständig überschwemmen. Schade eigentlich.\nFazit #Mit HTTPS wäre das nicht passiert! Die Übertragung der Webseite wird dabei vom Browser zum Webserver verschlüsselt, was es für den ISP unmöglich macht eine Javascript Datei unterzuschieben.\n","date":"13. August 2015","permalink":"https://webman.at/cms/2015/08/ipv4-1-2-3-4/","section":"Blog","summary":"\u003cp\u003eAls ich kürzlich die Zeilen\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eWaiting for 1.2.3.4\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eund dann noch\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eTransferring from 1.2.3.4\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ein der Status-Zeile des Firefox Browser las wurde ich etwas unrund. Die aufgerufene Seite (\u003ca href=\"http://snowhow.info/\" target=\"_blank\" rel=\"noreferrer\"\u003ehttp://snowhow.info\u003c/a\u003e) hatte ich selbst entwickelt und ganz sicher keinen Link auf http://1.2.3.4 eingebaut. Irgendwie schaute die Seite auch anders aus, aber nicht wesentlich. Also den Quellcode der Seite studiert und da steht es: Vor der \u003ccode\u003ehead\u003c/code\u003e-Anweisung hat jemand Javascript-Code aus einer anderen Domain eingeschleust:\u003c/p\u003e","title":"IPv4 1.2.3.4"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/Programmierung/","section":"Categories","summary":"","title":"Programmierung"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/mongodb/","section":"Tags","summary":"","title":"Mongodb"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/nodejs/","section":"Tags","summary":"","title":"Nodejs"},{"content":"Das Problem #Bei snowhow verwenden wir WordPress als Content-Management-System. Die Benutzer-Accounts für die snowhow User werden auch in WordPress verwaltet. Warum? Das System ist sehr weit verbreitet, die User-Verwaltung sollte also ausgereift sein (ge-hashte Passwörter, Passwort per E-Mail zurücksetzen).\nAußerhalb von WordPress als CMS setzen wir auf Nodejs und MongoDB. Die aufgezeichneten Freeride-Tracks und Skitouren kommen als GeoJSON direkt in die MongoDB und können dort via räumlicher Suche gefunden werden, herrlich unkompliziert. Aber wie kann der Nodejs-Server (express) auf die Authentifizierung von WordPress zugreifen?\nDas node-Modul node-wordpress-auth funktionierte mit einer älteren Version von WordPress, war aber immer schon ein dirty hack. Die Passport Authentifizierung via OAuth2 für WordPress wäre prinzipiell möglich (ein OAuth2-Provider-Plugin für WordPress vorausgesetzt), die Nuss wäre damit wohl mit dem Vorschlaghammer geknackt. Als Lösung wählten wir den gemeinsamen Zugriff auf Session-Daten von PHP und Nodejs (hier kommt uns zugute, dass der Nodejs-Server durch den apache, der WordPress betreibt, ge-proxy-t wird). Wie das geht? Die Lösung: Gemeinsamer Zugriff auf Session Daten #Klingt einfacher, als es dann war. Hier die Kurzversion:\nDie PHP Sessions in den memcached Speicher verlegen. Ein WordPress Plugin schreiben, das die User-ID in die Session speichert. Nodejs Module installieren: memcached cookies php-unserialize. Den Javascript Code anpassen, damit die Session-Daten ausgelesen und dekodiert werden können. Im Detail sind dazu folgende Schritte notwendig:\nad 1.) Zuerst wird der memcached-Server installiert. Unter Ubuntu Linux ein leichtes mit\napt-get install memcached php5-memcached Der Server startet (in der Standardeinstellung unter Ubuntu) automatisch auf Port 11211 und der Zugriff ist nur vom localhost möglich. Als nächstes gilt es die PHP Konfiguration anzupassen. Im Fall von Ubuntu legt man zum Beispiel die Datei /etc/php5/apache2/conf.d/30-memcached-sessions.ini mit folgendem Inhalt an:\nsession.save_handler = memcached session.save_path=\u0026#39;127.0.0.1:11211\u0026#39; Jetzt nicht vergessen den apache neu zu starten, dann sollten die Sessions im memcached Server liegen.\nad 2.) WordPress verwaltet die Session in einem eigenen Cache, nicht in der PHP Session. Ein kleines Plugin bringt die Login Informationen von WordPress in die PHP Session (die Idee dazu stammt von dieser Seite):\n\u0026lt;?php add_action(\u0026#39;init\u0026#39;, \u0026#39;startSession\u0026#39;, 1); add_action(\u0026#39;wp_logout\u0026#39;, \u0026#39;endSession\u0026#39;); add_action(\u0026#39;wp_login\u0026#39;, \u0026#39;setSessionData\u0026#39;, 10, 2); function startSession() { session_name(\u0026#34;snowhowSession\u0026#34;); if(!session_id()) { session_start(); $_SESSION[\u0026#39;snowhowinit\u0026#39;] = true; } } function setSessionData($user_login, $user) { $_SESSION[\u0026#39;wp_user_id\u0026#39;] = $user-\u0026amp;gt;ID; $_SESSION[\u0026#39;wp_user_email\u0026#39;] = $user-\u0026amp;gt;user_email; } function endSession() { session_destroy(); } ad 3.) Das sollte ein Leichtes sein:\nnpm install memcached cookies php-unserialize Wird der Javascript Code in Form eines Node-Pakets verwaltet (was vermutlich eine gute Idee ist), trägt man die Abhängigkeiten am besten gleich in die package.json Datei ein und kann sie am Produktionssystem mit npm install installieren.\nad 4.) Zum Schluss wird noch eine Javascript-Funktion definiert, die die Login Informationen, sofern vorhanden, zurück gibt:\n\u0026lt;?php var Cookies = require(\u0026#39;cookies\u0026#39;); var PHPUnserialize = require(\u0026#39;php-unserialize\u0026#39;); var Memcached = require(\u0026#39;memcached\u0026#39;); var mem = new Memcached(\u0026#39;127.0.0.1:11211\u0026#39;); function getWPUser(req, res, cb) { var cookies = new Cookies(req, res); var sessionCookie = \u0026#34;memc.sess.key.\u0026#34;+cookies.get(\u0026#34;snowhowSession\u0026#34;); mem.get(sessionCookie, function(err,data) { var user; if (err) cb({ error: err }); if (data) { try { user = PHPUnserialize.unserializeSession(data); } catch(e) { user = {}; } } cb(user); }); } Hier ist noch anzumerken, dass das php-unserialize Modul nicht korrekt mit PHP Objekten (new stdClass) umgehen kann (zumindest nicht bei meiner Installation).\nFazit #Einige Klimmzüge sind notwendig, um die zwei Serverdienste auf der Backendseite zu verbinden. Das Session-Cookie (hier mit dem Namen snowhowSession) ist der gemeinsame Nenner der beiden Dienste. Das System funktioniert natürlich nur, wenn der Nodejs-Server durch den apache ge-proxy-t wird.\n","date":"5. November 2014","permalink":"https://webman.at/cms/2014/11/nodejs-und-wordpress-mit-gemeinsamer-authentifizierung/","section":"Blog","summary":"\u003ch2 id=\"das-problem\" class=\"relative group\"\u003eDas Problem \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#das-problem\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eBei \u003ca href=\"https://snowhow.info/\" target=\"_blank\" rel=\"noreferrer\"\u003esnowhow\u003c/a\u003e verwenden wir \u003ca href=\"http://wordpress.org/\" target=\"_blank\" rel=\"noreferrer\"\u003eWordPress\u003c/a\u003e als Content-Management-System. Die Benutzer-Accounts für die snowhow User werden auch in WordPress verwaltet. Warum? Das System ist sehr weit verbreitet, die User-Verwaltung sollte also ausgereift sein (ge-hashte Passwörter, Passwort per E-Mail zurücksetzen).\u003c/p\u003e","title":"Nodejs und WordPress mit gemeinsamer Authentifizierung"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/php/","section":"Tags","summary":"","title":"Php"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/sessions/","section":"Tags","summary":"","title":"Sessions"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/admin/","section":"Categories","summary":"","title":"Admin"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/firewall/","section":"Tags","summary":"","title":"Firewall"},{"content":"Eigentlich ist das Port-Forwarding im Router so eingestellt, dass der Remote Zugriff auf den Heimserver problemlos funktioniert. Leider hat der Provider aber die Möglichkeit den Router neu zu initialisieren (und damit meine Forward-Regeln zu löschen) und er macht auch massiv Gebrauch davon. Zwar kann der Server dann weiterhin mit dem Internet kommunizieren (und so auch als nagios-Server andere Server überwachen), der Zugriff von außen funktioniert aber nicht mehr.\nMit einem Server im Internet lässt sich dem Problem ein Schnippchen schlagen, in dem man den Heimserver anweist einen reverse ssh tunnel aufzubauen. Über diesen kann man später auf das Heimnetz zugreifen und die Port-Forwarding Regeln neu einspielen. Damit der Tunnel nach der Unterbrechung durch den Provider wieder hergestellt wird hilft autossh. Mit folgendem Eintrag in /etc/rc.local (Ubuntu Server):\nsudo -u meinuser /usr/bin/autossh \\ -R 17777:localhost:22 -N meinserver.tld \u0026amp; bleibt die Verbindung immer offen. Hier noch kurz die Erklärung der Einzelheiten:\nsudo -u meinuser: Die Datei /etc/rc.local wird als root ausgeführt, der SSH-Tunnel soll aber unter meinem User aufgebaut werden autossh -R 17777:localhost:22: autossh übergibt alle Parameter an ssh. Hier wird der reverse Tunnel auf Port 17777 zum Port 22 der lokalen Maschine hergestellt. -N: ssh soll keine Shell starten, nur den Tunnel bereit stellen Natürlich müssen die ssh-Schlüssel für den eigenen Account mit dem Server meinserver.tld zuerst ausgetausch werden, damit ein login ohne Passwort möglich ist. Anschließend kann man mit den Kommandos ssh meinuser@meinserver.tld ssh -p 17777 localhost vom Internet aus auf den Heimserver zugreifen. Der Port 17777 ist dabei nur für Benutzer am Server meinserver.tld zugängig.\n","date":"12. September 2014","permalink":"https://webman.at/cms/2014/09/reverse-ssh-tunnel-mit-autossh/","section":"Blog","summary":"\u003cp\u003eEigentlich ist das Port-Forwarding im Router so eingestellt, dass der Remote Zugriff auf den Heimserver problemlos funktioniert. Leider hat der Provider aber die Möglichkeit den Router neu zu initialisieren (und damit meine Forward-Regeln zu löschen) und er macht auch massiv Gebrauch davon. Zwar kann der Server dann weiterhin mit dem Internet kommunizieren (und so auch als nagios-Server andere Server überwachen), der Zugriff von außen funktioniert aber nicht mehr.\u003c/p\u003e","title":"Reverse ssh tunnel mit autossh"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/server/","section":"Tags","summary":"","title":"Server"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/chroot/","section":"Tags","summary":"","title":"Chroot"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/ftp/","section":"Tags","summary":"","title":"Ftp"},{"content":"Für verschiedene Dienste bekommen wir stündlich, beziehungsweise täglich Daten von unseren Partnern. Diese Systeme verwenden FTP für den Transfer, weshalb wir einen eigenen FTP-Server (vsftp) betreiben müssen. Der Zugriff wird mehrstufig abgesichert:\nFirewall-Regeln, die den Dienst auf das Subnetz des Partners einschränken FTP-Zugriff auf die entsprechenden User einschränken. Dazu wird die vsftp.conf um folgende Einträge ergänzt: userlist_deny=NO userlist_enable=YES userlist_file=/etc/vsftpd.user_list Das entsprechende /etc/vsftpd.user_list File enthält nur die Benutzernamen der erlaubten FTP-Accounts (einer pro Zeile)\nchroot Umgebung für diese User aktivieren. In vsftp.conf wird folgende Zeile hinzugefügt. chroot_local_user=YES Das alleine reicht aber noch nicht aus, zudem muss in /etc/passwd das Heimatverzeichnis der Benutzer angepasst werden:\nftpupload❌1001:1001::/mnt/ftpbase/./ftpupload:/usr/sbin/nologin Das Umschreiben von /mnt/ftpbase/ftpupload auf /mnt/ftpbase/./ftpupload hat zur Folge, dass der User nicht aus dem Verzeichnis /mnt/ftpbase ausbrechen kann.\nAndere Zugänge für diese User deaktivieren. Im passwd Ausschnitt oben sieht man außerdem, dass als Shell /usr/sbin/nologin angegeben wird. Dadurch wird der Zugang via SSH für den account gesperrt. Hier gibt es nur einen Stolperstein: Ubuntu führt nologin nicht in der Datei /etc/shells auf. Dadurch funktioniert der Zugriff auch via FTP nicht und vsftp meldet, dass das Passwort falsch ist 🙁 root@sidi:~# cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /usr/bin/screen /usr/sbin/nologin und schließlich läuft auch noch fail2ban mit folgendem Eintrag: [vsftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = vsftpd logpath = /var/log/vsftpd.log maxretry = 6 ","date":"4. September 2014","permalink":"https://webman.at/cms/2014/09/vsftp-mit-chroot-fuer-sehr-eingeschraenktes-ftp/","section":"Blog","summary":"\u003cp\u003eFür verschiedene Dienste bekommen wir stündlich, beziehungsweise täglich Daten von unseren Partnern. Diese Systeme verwenden FTP für den Transfer, weshalb wir einen eigenen FTP-Server (vsftp) betreiben müssen. Der Zugriff wird mehrstufig abgesichert:\u003c/p\u003e","title":"vsftp mit chroot für sehr eingeschränktes FTP"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/cordova/","section":"Categories","summary":"","title":"Cordova"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/cordova/","section":"Tags","summary":"","title":"Cordova"},{"content":"Das Problem #App-Entwicklung mit Cordova funktioniert großartig. Beim Aufzeichnen von GPS Tracks stößt man aber an die Grenzen der Technologie, da es keine Möglichkeit gibt, einen Prozess zu starten, der nicht automatisch vom System beendet werden kann. Dazu benötigt man ein Plugin…\nEin Android Service #Mit ein wenig Java Kenntnissen ist es einfach einen Hintergrund-Dienst (Service) als Plugin für Cordova zu realisieren. Android kann den Service zwar auch beenden, startet ihn aber sofort wieder, wodurch das GPS tracking fortgesetzt wird. Einen Haken gibt es bei der Sache allerdings: Die Kommunikation zwischen Plugin und der Web-app ist schwierig. Die vorhandene Schnittstelle über den Callback-Context funkioniert (nach meinem Wissen) nicht, da der Service abgekoppelt läuft.\nGPS Websocket Server #Moderne Browser unterstützen das effiziente Websocket Protokoll nativ. Der GPS-Service startet einen einfachen Websocket-Server auf einem hohen Port und die Web-app verbindet und wartet auf Messages:\nvar ws = new WebSocket(\u0026#39;ws://localhost:8887/snowhow\u0026#39;); ws.onmessage = function (evt) { var data; try { data = JSON.parse(evt.data); } catch (e) { console.log(\u0026#34;illegal json data via websocket\u0026#34;, evt.data); } handleWSResopnse(data); } Doch damit nicht genug: Über den Websocket Server kann das HTML-UI auch die Nachricht zum beenden des Service schicken. Natürlich steigt durch den Server und den Websocket Client der Stromverbrauch etwas, erste Tests haben aber keine dramatischen Änderungen gezeigt.\n","date":"30. Juli 2014","permalink":"https://webman.at/cms/2014/07/cordova-plugin-als-android-service/","section":"Blog","summary":"\u003ch2 id=\"das-problem\" class=\"relative group\"\u003eDas Problem \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#das-problem\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eApp-Entwicklung mit \u003ca href=\"https://cordova.apache.org/\" target=\"_blank\" rel=\"noreferrer\"\u003eCordova\u003c/a\u003e funktioniert großartig. Beim Aufzeichnen von GPS Tracks stößt man aber an die Grenzen der Technologie, da es keine Möglichkeit gibt, einen Prozess zu starten, der nicht automatisch vom System beendet werden kann. Dazu benötigt man ein Plugin…\u003c/p\u003e","title":"Cordova/Phonegap Plugin als Android Service"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/GPS/","section":"Tags","summary":"","title":"GPS"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/phonegap/","section":"Tags","summary":"","title":"Phonegap"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/websockets/","section":"Tags","summary":"","title":"Websockets"},{"content":"Nach dem letzten Crash bin ich dazu übergegangen die virtuellen Maschinen jede Nacht per lvm-snapshot mit lzop komprimiert zu sichern. Eine separat eingebaute Festplatte (/mnt/backup) hält diese backups. Das ultra-kurze Skript dazu sieht so aus:\n#!/bin/bash LVMS=\u0026#34;snowhow komplett root\u0026#34; VG=vg0 BUP_DST=/mnt/backup/snapshot_vms NICE=15 VERBOSE=0 ## cron needs full path to commands LVCR=/sbin/lvcreate LVRM=/sbin/lvremove LVS=/sbin/lvs VIRSH=/usr/bin/virsh while getopts \u0026#34;:vl:\u0026#34; opt; do case $opt in v) VERBOSE=1 ;; l) LVMS=$OPTARG ;; esac done function doBackup { logger -t SNAPSHOT_BACKUP \u0026#34;starting backup for $LV\u0026#34; if [ -f $BUP_DST/$LV-snap.lzo ] then mv $BUP_DST/$LV-snap.lzo $BUP_DST/$LV-snap.lzo.old fi $VIRSH suspend $LV $LVCR -L1G -s -n $LV-snap /dev/$VG/$LV $VIRSH resume $LV if [ $VERBOSE -eq 1 ] then $LVS SIZE=$($LVS --nosuffix --units b -o lv_size --rows --separator \u0026#39;:\u0026#39; /dev/$VG/$LV | cut -d\u0026#39;:\u0026#39; -f2) echo $SIZE nice -n $NICE bash -c \u0026#34;dd if=/dev/$VG/$LV-snap bs=4M | pv -s $SIZE | lzop -c | dd of=$BUP_DST/$LV-snap.lzo bs=4M\u0026#34; $LVS else nice -n 15 bash -c \u0026#34;dd if=/dev/$VG/$LV-snap bs=4M | lzop -c | dd of=$BUP_DST/$LV-snap.lzo bs=4M\u0026#34; fi $LVRM -f /dev/$VG/$LV-snap logger -t SNAPSHOT_BACKUP \u0026#34;done backup for $LV\u0026#34; } for i in $LVMS do LV=$i doBackup done Die Parameter funktionieren folgendermaßen: Wird der -l switch angegeben, so werden die default Logical Volumes snowhow komplett root überschrieben. Mit -v gibt es eine graphische Ausgabe des Fortschritts. Damit die VM im suspend Modus gesichert werden kann, muss die KVM Instanz den gleichen Namen haben wie das LV auf dem sie liegt.\nNatürlich läuft auch ein konventionelles backup um einzelne Files wiederherzustellen, aber sicher ist sicher.\n","date":"15. Mai 2014","permalink":"https://webman.at/cms/2014/05/snapshot-backups-der-virtuellen-maschinen/","section":"Blog","summary":"\u003cp\u003eNach dem letzten Crash bin ich dazu übergegangen die virtuellen Maschinen jede Nacht per lvm-snapshot mit lzop komprimiert zu sichern. Eine separat eingebaute Festplatte (\u003ccode\u003e/mnt/backup\u003c/code\u003e) hält diese backups. Das ultra-kurze Skript dazu sieht so aus:\u003c/p\u003e","title":"Snapshot Backups der virtuellen Maschinen"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/Uncategorized/","section":"Categories","summary":"","title":"Uncategorized"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/GIS/","section":"Categories","summary":"","title":"GIS"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/mapnik/","section":"Tags","summary":"","title":"Mapnik"},{"content":"Unsere Basiskarte wird laufend um Informationen ergänzt (zum Beispiel ein Shapefile mit Skipisten). Nach einer solchen Ergänzung soll nicht der gesamte Karten-Cache (mod_tile/renderd) neu gerechnet werden, sondern nur der Ausschnitt in dem Veränderungen stattgefunden haben.\nLösung #Drei Schritte um die Kartenkacheln neu zu erzeugen:\nExtent des Shapefiles ermitteln #ogrinfo -geom=SUMMARY pp.shp pp ... Extent: (11.015149, 46.848712) - (11.085476, 46.911385) ... Liste der Tiles für diesen Ausschnitt erzeugen #Die maximale Zoomstufe meiner Karte ist 17. Jetzt nur noch die Bounding Box des Shapefiles angeben und die gewünschte Ausgabe (nach grep und awk) in eine Datei umleiten.\n./globalmaptiles.py 17 46.848712 11.015149 46.911385 11.085476 | grep __Goo | awk \u0026#39;{print $1}\u0026#39; \u0026amp;gt; /tmp/expired.lst Das globalmaptiles.py Script wurde ge-patched um die gewünschten „Google“-Coordinaten einfach auszulesen\n--- globalmaptiles.py.orig\t2014-02-06 00:36:01.021060820 +0100 +++ globalmaptiles.py\t2014-02-06 00:15:42.459082600 +0100 @@ -427,7 +427,7 @@ print tilefilename, \u0026#34;( TileMapService: z / x / y )\u0026#34; gx, gy = mercator.GoogleTile(tx, ty, tz) -\tprint \u0026#34;tGoogle:\u0026#34;, gx, gy +\tprint \u0026#34;%s/%s/%s __Google__\u0026#34; % (tz, gx, gy) quadkey = mercator.QuadTree(tx, ty, tz) print \u0026#34;tQuadkey:\u0026#34;, quadkey, \u0026#39;(\u0026#39;,int(quadkey, 4),\u0026#39;)\u0026#39; bounds = mercator.TileBounds( tx, ty, tz) render_expired mit der Liste der Tiles aufrufen #Abschließend wird das Programm render_expired mit der generierten Liste der Tiles aufgerufen. Um die unteren Zoomstufen kümmert sich das Script selbst.\nrender_expired -m snowhow -s /var/run/renderd/renderd.sock \u0026amp;lt; /tmp/expired.lst ","date":"6. Februar 2014","permalink":"https://webman.at/cms/2014/02/mapnik-tiles-fuer-einen-ausschnitt-neu-erzeugen/","section":"Blog","summary":"\u003cp\u003eUnsere \u003ca href=\"http://snowhow.info/cms/snowhow-map/\" target=\"_blank\" rel=\"noreferrer\"\u003eBasiskarte\u003c/a\u003e wird laufend um Informationen ergänzt (zum Beispiel ein Shapefile mit Skipisten). Nach einer solchen Ergänzung soll nicht der gesamte Karten-Cache (mod_tile/renderd) neu gerechnet werden, sondern nur der Ausschnitt in dem Veränderungen stattgefunden haben.\u003c/p\u003e","title":"Mapnik tiles für einen Ausschnitt neu erzeugen"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/apache/","section":"Tags","summary":"","title":"Apache"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/CORS/","section":"Tags","summary":"","title":"CORS"},{"content":"Ein Problem, das vermutlich mehrere Entwickler haben, die in einer Web-Applikation mit Javascript auf ein backend zugreifen: Entwicklet wird auf der lokalen Maschine, das backend liegt (zum Entwickeln) auf einem anderen Server.\nBrowser lassen HTTP-Requests in Javascript von localhost auf eine andere Domain nicht zu (hier gilt die same origin policy). Auf den Seiten des Mozilla Developer Network wird sehr übersichtlich erklärt, wie man diese Einschränkung sicher umgehen kann. Da wir im content der requests json verschicken müssten unsere Zugriffe recht aufwändig als preflighted requests behandelt werden.\nBisher verwendeten wir zur Umgehung dieses Problems google-chrome mit dem Command-line switch --disable-web-security. Etwas unschön und vor allem konnten wir mit Firefox erst testen, nachdem der Code am Entwicklungsserver deployed war.\nMit wenigen Zeilen in der lokalen apache Konfiguration ist das Problem auch vom Tisch: Man richtet einen lokalen Proxy ein, der die ajax-requests an den Server weitergibt:\n\u0026lt;IfModule mod_proxy.c\u0026gt;\r## mod_proxy for ajax CORS troubles\rProxyPassMatch ^/(.*/specimen/.*)$ http://server.tld/$1\rProxyPassMatch ^/(.*/j_spring_security_logout)$ http://server.tld/$1\rProxyPassMatch ^/(.*/j_spring_security_check)$ http://server.tld/$1\r\u0026lt;/IfModule\u0026gt;\rIst das apache-Modul mod_proxy aktiviert (a2enmod mod_proxy), werden alle requests die in der Adresse den Pfad /specimen/ enthalten zu server.tld umgeleitet. Gleiches gilt für die security-checks.\n","date":"9. Oktober 2013","permalink":"https://webman.at/cms/2013/10/http-requests-aus-javascript/","section":"Blog","summary":"\u003cp\u003eEin Problem, das vermutlich mehrere Entwickler haben, die in einer Web-Applikation mit Javascript auf ein backend zugreifen: Entwicklet wird auf der lokalen Maschine, das backend liegt (zum Entwickeln) auf einem anderen Server.\u003c/p\u003e","title":"HTTP requests aus Javascript auf der Entwicklermaschine"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/proxy/","section":"Tags","summary":"","title":"Proxy"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/xhr/","section":"Tags","summary":"","title":"Xhr"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/apps/","section":"Categories","summary":"","title":"Apps"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/osmand/","section":"Tags","summary":"","title":"Osmand"},{"content":"Die tolle OSMAnd-App für Android bietet ein reichhaltiges Set von Funktionen für mobile Kartenanwendungen. Unter anderem ist es auch möglich, eigene Tile-Layer einzubinden.\nHier die einfache Variante für Tiles vom mapnik Server: Im Verzeichnis /sdcard/osmand/tiles einen Ordner anlegen (hier snowhow). In diesem Ordner die Datei .metainfo mit folgendem Inhalt erzeugen:\nshell@android:/sdcard/osmand/tiles/snowhow $ cat .metainfo [url_template] http://mein.tileserver.com/osm/{0}/{1}/{2}.png [ext] .png [min_zoom] 1 [max_zoom] 17 [tile_size] 256 [img_density] 8 [avg_img_size] 18000 Und wenn die Tiles im TMS-Format vorliegen (also mit umgedrehter y-Achse), auch kein Problem:\nshell@android:/sdcard/osmand/tiles/snowhow_slope $ cat .metainfo [rule] beanshell [url_template] public static String getTileUrl(int z, int x, int y) {return \u0026#34;http://mein.tileserver.com/tms/\u0026#34;+z+\u0026#34;/\u0026#34;+x+\u0026#34;/\u0026#34;+((1 \u0026amp;lt;\u0026amp;lt; z) - 1 - y) + \u0026#34;.png\u0026#34;;} [ext] .png [min_zoom] 1 [max_zoom] 17 [tile_size] 256 [img_density] 8 [avg_img_size] 18000 Fünf Sterne (und 5.99 EUR) für die Entwickler von OSMAnd, die Software rockt.\n","date":"7. August 2013","permalink":"https://webman.at/cms/2013/08/eigene-kartenebenen-in-osmand/","section":"Blog","summary":"\u003cp\u003eDie tolle \u003ca href=\"https://play.google.com/store/apps/details?id=net.osmand\" target=\"_blank\" rel=\"noreferrer\"\u003eOSMAnd-App für Android\u003c/a\u003e bietet ein reichhaltiges Set von Funktionen für mobile Kartenanwendungen. Unter anderem ist es auch möglich, eigene Tile-Layer einzubinden.\u003c/p\u003e\n\u003cp\u003eHier die einfache Variante für Tiles vom mapnik Server: Im Verzeichnis \u003ccode\u003e/sdcard/osmand/tiles\u003c/code\u003e einen Ordner anlegen (hier \u003ccode\u003esnowhow\u003c/code\u003e). In diesem Ordner die Datei \u003ccode\u003e.metainfo\u003c/code\u003e mit folgendem Inhalt erzeugen:\u003c/p\u003e","title":"OSMAnd-App"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/tiles/","section":"Tags","summary":"","title":"Tiles"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/webapps/","section":"Tags","summary":"","title":"Webapps"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/backup/","section":"Tags","summary":"","title":"Backup"},{"content":"Das Backup für PCs und Laptops macht Backuppc sehr fein, aber für die Root-Server braucht es eine andere Lösung.\nDuplicity macht gpg-verschlüsselte Backups und unterstützt die unterschiedlichsten Endpunkte wie ftp, rsync, scp, ssh, webdav[s] und auch Amazon S3. Hier mein Mini-Bash-Skript mit dem ich meine Server dorthin sichere:\n#!/bin/bash\rBDIRS=\"/etc /home /\"\rLOGDIR='/var/log/duplicity'\rBAC=\"s3+http://ihr_bucket_name.s3.amazonaws.com\"\r# symmetrische verschluesselung fuer gpg\rexport PASSPHRASE='einelangeschwierigepassphrase'\rexport AWS_SECRET_ACCESS_KEY=\"amazon_aws_secret_access_key\"\rexport AWS_ACCESS_KEY_ID=\"amazon_aws_access_key\"\r##### end of config ##########\rBCLIENT=$(hostname);\rfor FULL_DIR in $BDIRS\rdo\rDIR=$(basename $FULL_DIR)\rif [ $DIR == \"/\" ]\rthen\rDIR=\"root\"\rfi\rEXCLUDELIST=\"/usr/local/etc/duplicity-exclude-$DIR.conf\"\rif [ -f $EXCLUDELIST ]; then\rEXCLUDE=\"--exclude-filelist $EXCLUDELIST\"\relse\rEXCLUDE=''\rfi\rduplicity remove-older-than 60D -v3 --force $BAC/$BCLIENT_$DIR \u0026gt;\u0026gt; $LOGDIR/$DIR.log\rduplicity --full-if-older-than 30D -v3 $EXCLUDE $FULL_DIR $BAC/$BCLIENT-$DIR \u0026gt;\u0026gt; $LOGDIR/$DIR.log\rdone\rexport PASSPHRASE=\"\"\rexport AWS_SECRET_ACCESS_KEY=\"\"\rexport AWS_ACCESS_KEY_ID=\"\"\rexit 0\rDas Skript entstand in Anlehnung an ein Backup-Skript von Hetzner, wobei ich es noch weiter vereinfacht und auf S3 umgestellt habe. Backups werden 60 Tage aufbewahrt, wobei alle 30 Tage ein volles Backup gemacht wird. In den Zeilen 3 bis 9 sind die entsprechenden Anpassungen zu machen. Aufgerufen wird das Skript jede Nacht von cron:\nroot@yourhost:/root $ cat /etc/cron.d/duplicity # /etc/cron.d/duplicity: crontab fragment for backup\r# backup at 4 in the morning\r55 3 * * * root /usr/local/sbin/backup.sh \u0026gt;/dev/null 2\u0026gt;\u00261\rroot@yourhost:/root $\r","date":"19. Juli 2013","permalink":"https://webman.at/cms/2013/07/server-backup-mit-duplicity-auf-amazon-s3/","section":"Blog","summary":"\u003cp\u003eDas Backup für PCs und Laptops macht \u003ca href=\"https://komplett.cc/cms/2012/05/backuppc-zum-sichern-von-desktops/\" title=\"Backuppc zum Sichern von Desktops\" target=\"_blank\" rel=\"noreferrer\"\u003eBackuppc sehr fein\u003c/a\u003e, aber für die Root-Server braucht es eine andere Lösung.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://duplicity.nongnu.org/\" target=\"_blank\" rel=\"noreferrer\"\u003eDuplicity\u003c/a\u003e macht gpg-verschlüsselte Backups und unterstützt die unterschiedlichsten Endpunkte wie ftp, rsync, scp, ssh, webdav[s] und auch Amazon S3. Hier mein Mini-Bash-Skript mit dem ich meine Server dorthin sichere:\u003c/p\u003e","title":"Server-backup mit duplicity auf Amazon S3"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/df/","section":"Tags","summary":"","title":"Df"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/inodes/","section":"Tags","summary":"","title":"Inodes"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/Linux/","section":"Categories","summary":"","title":"Linux"},{"content":"Nachdem der Server eigenartige Verhaltensweisen an den Tag legte und im syslog die Meldung „No space left on device“ erschien, war ich einigermaßen verwundert: Immerhin zeigte df an, dass alle relevanten Partitionen mehr als 50% freien Speicher haben. Ein Lesefehler auf der (virtuellen) Festplatte? Glücklicherweise nicht. Das Kommando\ntune2fs -l /dev/mapper/vg0-var brachte die entscheidende Information ans Licht:\n... Filesystem OS type: Linux Inode count: 10076160 Block count: 40296448 Reserved block count: 2014822 Free blocks: 12087119 Free inodes: 9 First block: 0 Block size: 4096 ... Free inodes 9. Das habe ich auch noch nicht erlebt, dass auf einer Linux (ext4) Partition die inodes ausgehen, aber natürlich kommt das nicht von ungefähr: Das Erstellen der Karten-Kacheln für den ganzen Alpenraum erzeugte die vielen Dateien.\nLösung #Hmm, laut Dokumentation kann man die Anzahl der inodes auf bestehenden ext4-Partitionen nicht vergrößern. Also eine neue Partition mit ausreichend inodes erzeugen und die Karten-Kacheln dorthin verschieben.\n","date":"11. Juli 2013","permalink":"https://webman.at/cms/2013/07/no-space-left-on-device/","section":"Blog","summary":"\u003cp\u003eNachdem der Server eigenartige Verhaltensweisen an den Tag legte und im syslog die Meldung „\u003ccode\u003eNo space left on device\u003c/code\u003e“ erschien, war ich einigermaßen verwundert: Immerhin zeigte \u003ccode\u003edf\u003c/code\u003e an, dass alle relevanten Partitionen mehr als 50% freien Speicher haben. Ein Lesefehler auf der (virtuellen) Festplatte? Glücklicherweise nicht. Das Kommando\u003c/p\u003e","title":"No space left on device?"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/Hardware/","section":"Categories","summary":"","title":"Hardware"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/hdparm/","section":"Tags","summary":"","title":"Hdparm"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/SSD/","section":"Tags","summary":"","title":"SSD"},{"content":"Ja, ich weiß, das ist inzwischen ein alter Hut, aber auch mir hing die Kinnlade herunter und die Augen starrten ungläubig auf den Laptop: Boot in 5 Sekunden (mit Apache/MongoDB/MySQL) und Firefox-Start in unter einer Sekunde.\nHardware-Upgrade #Nach langem Zögern wurde jetzt doch investiert: Der Dell-Laptop L502x (Core i5-2410M) mit 4GB Ram bekommt eine Samsung-SSD und wird auf den maximalen Arbeitsspeicher von 8GB aufgerüstet. Rund 150 EUR kostet die Hardware dafür und der Unterschied ist wie eingangs beschrieben, unbeschreiblich. Einige Hinweise in Foren, dass das Austauschen der Festplatte bei diesem Modell besonders schwierig sei und nur von Fachpersonal durchgefürht werden sollte, hielt mich einige Zeit von dem Upgrade ab, im Nachhinein völlig zu unrecht. Das Abnehmen der Tastatur gelingt auch dem durchschittlichen Heimwerker in wenigen Minuten ohne Hardware-Schäden.\nPerformance #Der gefühlte Performance-Unterschied ist wie gesagt sensationell. Zu Festplatten-Benchmarks gibt es ja glaub ich eigene Bücher, sicher aber Diplomarbeiten und Dissertationen. Linux mit hdparm kann dem Profi wahrscheinlich nur ein müdes Lächeln abringen, aber der Vollständigkeit halber hier die Platte auf meinem Desktop und die neue SSD im Laptop:\nroot@meinDesktop:~ # hdparm -t /dev/sda2 /dev/sda2: Timing buffered disk reads: 326 MB in 3.02 seconds = 108.07 MB/sec root@meinLaptop:~ # hdparm -t /dev/sda1 /dev/sda1: Timing buffered disk reads: 1512 MB in 3.00 seconds = 503.45 MB/sec Zum Vergleich noch ein USB3-Stick (hama, 16GB):\nroot@meinLaptop:~ # hdparm -t /dev/sdb1 /dev/sdb1: Timing buffered disk reads: 186 MB in 3.00 seconds = 62.00 MB/sec Und noch eine SDHC Karte (Transcend, 32GB) im internen Card-Reader:\nroot@meinLaptop:~ # hdparm -t /dev/mmcblk0p5 /dev/mmcblk0p5: Timing buffered disk reads: 34 MB in 3.18 seconds = 10.68 MB/sec (immer das dritte Ergebnis von drei Tests)\n","date":"4. Juli 2013","permalink":"https://webman.at/cms/2013/07/ssd-super-speed-disk/","section":"Blog","summary":"\u003cp\u003eJa, ich weiß, das ist inzwischen ein alter Hut, aber auch mir hing die Kinnlade herunter und die Augen starrten ungläubig auf den Laptop: Boot in 5 Sekunden (mit Apache/MongoDB/MySQL) und Firefox-Start in unter einer Sekunde.\u003c/p\u003e","title":"SSD – Super Speed Disk"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/html/","section":"Tags","summary":"","title":"Html"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/jqplot/","section":"Tags","summary":"","title":"Jqplot"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/jspdf/","section":"Tags","summary":"","title":"Jspdf"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/PDF/","section":"Tags","summary":"","title":"PDF"},{"content":"ich sags gleich, ein steiniger Weg.\nDie Anforderung #Zum Zweck der analogen Archivierung musste ich für ein aktuelles Projekt (CHES) eine moderne HTML-Seite (mit mehreren Canvas-Elementen) in eine druckbare Form bringen. Mit CSS-Anweisungen ist es mir nicht gelungen, nur in zwei modernen Browsern ein halbwegs vergleichbares Layout zu Papier zu bringen. Mit viel Javascript ging es eher in diese Richtung, aber im dritten Browser war dann auch da wieder alles anders.\nEine PDF-Datei war die schlüssige Entscheidung. Diese kann dann auch digital archiviert werden, was bei CHES, einem Projekt im Medizinumfeld, durchaus sinnvoll scheint. Jetzt wäre der einfachste Weg folgender: Verwenden Sie Google-Chrome, drücken Sie auf diesen Button und wählen Sie im anschließenden Dialog „Speichern als PDF“. Aber das wäre ja zu einfach …\nDas Ausgangsmaterial #\nMit serverseitig-erzeugten PDFs habe ich schon mehrfach Erfahrung: mit PHP, wkhtmltopdf, und batik gab es immer brauchbare Ergebnisse. Bei CHES verwenden wir die jqplot-Bibliothek von Chris Leonello, die (mehr oder weniger) aufwändige Diagramme mit Hilfe von HTML und canvas im Browser anzeigt. Die Darstellung kann clientseitig angepasst werden, soweit so gut. Serverseitig kann ich diese Bibliothek aber nicht verwenden und um die veränderte Seite durch wkhtmltopdf zu jagen, müsste ich alle Veränderungen mitgeben und … ach, zu kompliziert. Also versuchen wir das PDF am Client zu erzeugen: jspdf.com.\njspdf.com #jspdf ist noch ein recht junges Projekt und vom Funktionsumfang überschaubar. Für die Ansprüche im aktuellen Projekt schien es möglich, einen Versuch damit zu starten. Mit canvas kann jspdf (noch) nicht umgehen, darum werden die Diagramme zuerst in Grafiken konvertiert. Der Qualitätsverlust ist schmerzlich, wo jspdf obendrein nur mit JPEGs und nicht mit PNG arbeiten will.\nvar doc = new jsPDF(); $(jquery_selector_fuer_jqplots_hier).each(function() { // hier werden xoff, yoff, w, h berechnet // jqplot muss ge-patcht werden, damit nicht image/png sondern image/jpeg kommt var img = $(this).jqplotToImageStr(); doc.addImage(img, \u0026#39;JPEG\u0026#39;, xoff, yoff, w, h); }); doc.save(\u0026#34;ches_report_\u0026#34;+what+\u0026#34;_\u0026#34;+CHES.patientWithoutPrefix+\u0026#34;.pdf\u0026#34;); Und hier das Resultat, not too bad (Firefox, Linux):\nWunderbar, und sehr übersichtlicher Code. Funktioniert auch in Firefox, Chrome, Safari (sogar am iPad), you name it. Ach ja, der IE, da geht das aller leider nicht. Mehrere Problem:\nIE8: Kennt das canvas Element nicht. Damit man im IE8 überhaupt jqplot Diagramme sehen kann lädt man die excanvas Bibliothek. Alles wunderbar, sehr langsam, aber immerhin, 100% Funktionalität. Fast, die toDataURL()-Methode ist nicht unterstützt und nach meinen ausführlichen google-Recherchen wird das im IE8 auch nie möglich sein. Die Folge: Der IE8 kann diese Seiten weder drucken noch in PDFs konvertieren. IE9: Hmm, pdfjs funktioniert wunderbar, allein das PDF kann weder angezeigt noch gespeichert werden. Klingt absurd, ist aber so. Der workaround ist noch aberwitziger: Man lade eine kleine Flash-Bibliothek, die einen Button anzeigt, der den PDF-String herunterladen lässt. Unglaublich aber wahr, hier der Code (vollständiges Beispiel bei github.com): if (badIE === true) { var docString = doc.output(\u0026#39;datauristring\u0026#39;); $(\u0026#34;#ieWarning\u0026#34;).show(); Downloadify.create(\u0026#39;downloadify\u0026#39;,{ filename: \u0026#34;ches_report_\u0026#34;+what+\u0026#34;_\u0026#34;+CHES.patientWithoutPrefix+\u0026#34;.pdf\u0026#34;, data: docString, onComplete: function(){ $(\u0026#34;#ieWarning\u0026#34;).hide(); }, onCancel: function(){ $(\u0026#34;#ieWarning\u0026#34;).hide(); }, onError: function(){ $(\u0026#34;#ieWarning\u0026#34;).hide(); }, dataType: \u0026#39;base64\u0026#39;, transparent: false, swf: \u0026#39;js/jspdf/libs/Downloadify/media/downloadify.swf\u0026#39;, downloadImage: \u0026#39;js/jspdf/libs/Downloadify/images/download.png\u0026#39;, width: 100, height: 30, append: false }); } IE10: soll das alles ohne schmutzige Tricks können, konnte ich aber noch nicht testen. tl;dr — Fazit #Das sehr einfache PDF-Dokument kann mit jspdf gut erstellt werden. Der Ausschluss des IE8 ist mit der mangelnden Unterstützung des canvas-Elements begründet und nicht mit jspdf an sich. Der IE9 workaround ist aberwitzig, aber kann vermutlich bald entfernt werden (der IE9-Marktanteil ist eh rückläufig). Alle anderen, aktuellen Browser können gut bedient werden und erzeugen eine druckbare PDF Datei, die plattformübergreifend gleich aussieht.\n","date":"14. Mai 2013","permalink":"https://webman.at/cms/2013/05/von-jqplot-diagrammen-zu-einer-pdf-datei/","section":"Blog","summary":"\u003cp\u003eich sags gleich, ein steiniger Weg.\u003c/p\u003e\n\u003ch2 id=\"die-anforderung\" class=\"relative group\"\u003eDie Anforderung \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#die-anforderung\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eZum Zweck der analogen Archivierung musste ich für ein aktuelles Projekt\n(\u003ca href=\"http://ches.at/\" target=\"_blank\" rel=\"noreferrer\"\u003eCHES\u003c/a\u003e) eine moderne HTML-Seite (mit mehreren Canvas-Elementen) in eine\ndruckbare Form bringen. Mit CSS-Anweisungen ist es mir nicht gelungen, nur in\nzwei modernen Browsern ein halbwegs vergleichbares Layout zu Papier zu bringen.\nMit viel Javascript ging es eher in diese Richtung, aber im dritten Browser war\ndann auch da wieder alles anders.\u003c/p\u003e","title":"Von jqplot Diagrammen zu einer PDF Datei"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/cyanogenmod/","section":"Tags","summary":"","title":"Cyanogenmod"},{"content":"Datentransfer #Um unter Linux Dateien auf das Galaxy Nexus zu kopieren gibt es leider keine einfache und performante Lösung. Mit Airdroid kann man wunderbar ein, zwei Dateien hin und her kopieren, der Transfer läuft über das Wlan, was von haus aus schon eine Geschwindigkeitsbeschränkung mit sich bringt. Alle meine Versuche mit mtp (auch unter Ubuntu 13.04) brachen regelmäßig ab und waren auch nicht von hohen Geschwindigkeiten gekennzeichnet.\ncyanogenmod, openssh, rsync #Ganz anders verhält es sich mit rsync über ssh, getunnelt durch adb via USB. Hier erreicht man wirklich sehr zufriedenstellende Transferraten (für große Dateien lesend 15 MB/s). Eine ausführliche Anleitung dazu gibt es bei alainwolf.ch. Hier eine Kurzfassung, wie ich den Kopiervorgang starte. Voraussetzungen:\nAndroid Debug Bridge am PC installieren (apt-get install android-tools-adb) Handy per USB anstecken am Handy: Cyanogenmod 10.1 (momentan noch einen nightly build) installieren Einstellungen - Entwickleroptionen: Root-Zugriff für Apps \u0026amp; ADB aktivieren Einstellungen - Entwickleroptionen: USB debugging aktivieren Dann am PC:\n#pc:# adb root #pc:# adb remount #pc:# adb -d forward tcp:8090 tcp:8090 #pc:# adb shell root@android:/ # /system/bin/sshd -D -p 8090 Mit dem letzten Kommando wird der SSH-Dienst am Handy auf Port 8090 gestartet. Der Dienst wird absichtlich nicht im Hintergrund ausgeführt, er läuft nur während die adb shell aktiv ist. Das adb -d forward tunnelt den IP port 8090 durch USB auf den PC.\nJetzt funktioniert der Zugriff via rsync. Um ein Backup der virtuellen sdcard zu machen kann man folgendes Kommando verwenden:\nrsync -e \u0026#39;ssh -p 8090\u0026#39; -rv root@127.0.0.1:/mnt/sdcard/ ./ --exclude=Android/data/info.snowhow/files/tilestore/ --exclude=osmand/ Update 2015 #Mit dem wunderbaren gratis App SSHelper wird das etwas einfacher: SSHelper am Handy starten, den SSH-Port via adb am PC weiterleiten\nbernd@pc\u0026gt; adb -d forward tcp:2222 tcp:2222 und schon können die Fotos mit\nbernd@pc\u0026gt; rsync -e \u0026#39;ssh -p 2222\u0026#39; -av localhost:~/SDCard/DCIM/Camera/ ~/handypics/ synchronisiert werden.\n","date":"21. April 2013","permalink":"https://webman.at/cms/2013/04/datentransfer-mit-rsync-openssh-und-cyanogenmod-am-galaxy-nexus/","section":"Blog","summary":"\u003ch2 id=\"datentransfer\" class=\"relative group\"\u003eDatentransfer \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#datentransfer\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eUm unter Linux Dateien auf das Galaxy Nexus zu kopieren gibt es leider keine einfache und performante Lösung. Mit \u003ca href=\"http://airdroid.com\" target=\"_blank\" rel=\"noreferrer\"\u003eAirdroid\u003c/a\u003e kann man wunderbar ein, zwei Dateien hin und her kopieren, der Transfer läuft über das Wlan, was von haus aus schon eine Geschwindigkeitsbeschränkung mit sich bringt. Alle meine Versuche mit mtp (auch unter Ubuntu 13.04) brachen regelmäßig ab und waren auch nicht von hohen Geschwindigkeiten gekennzeichnet.\u003c/p\u003e","title":"Datentransfer mit rsync, openssh und cyanogenmod am Galaxy Nexus"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/galaxy-nexus/","section":"Tags","summary":"","title":"Galaxy Nexus"},{"content":"In der Karte im Viel-Falter Projekt sollte zu den gekachelten Rasterlayern ein weiterer Layer mit der Biotop-Kartierung von Tirol dazukommen. Da die gesamte Vektor-Geometrie mit über 200 MB im GeoJSON Format zu Buche schlägt, muss der Datensatz auf die Ausmaße aktuellen Ansicht (BoundingBox) eingeschränkt werden. Einigermaßen überrascht stellte ich fest, dass es hierzu (fast) keine fertige Lösung gibt. Hier mein Weg:\nPostGIS #Da der Vektordatensatz aus vielen kleinen Polygonen besteht eignet er sich wunderbar für Einschränkungen anhand der aktuellen BoundingBox. Postgresql in Kombination mit PostGIS macht diese Berechnungen sehr einfach und mit einem räumlichen Index auch sehr schnell. Also war der erste Schritt den Vektordatensatz im Shapefile Format in die Postgresql Datenbank zu importieren.\nshp2pgsql -I -W LATIN1 -s 31254 BIK_PL.shp \u0026gt; bik.sql\rDas Datenfile im Shapefile lag in der Kodierung LATIN1 (ISO-8859-1) und in der Projektion EPSG:31254 (MGI / Austria GK West) vor. Der Parameter -I erzeugt automatisch einen räumlichen Index am Ende des Imports.\nLeaflet Vector Layer #Um mit der leafletjs-Bibliothek auf die PostGIS Daten zugreifen zu können braucht man noch zwei zusätzliche Software Komponenten: Leaflet-Vector-Layer von Jason Sanford und den das PostGIS RESTful Web Service Framework. Um die Javascript Bibliothek Leaflet-Vector-Layer zu installieren reicht es die Datei lvector.js in das Projektverzeichnis zu kopieren und entsprechend zu referenzieren. Die Layerdefinition in leaflet ist wie folgt:\npglayer = new lvector.PRWSF({\rurl: \"http://meinserver.at/pgrest\",\rgeotable: \"bik_pl\",\rfields: \"gid,name\",\rsinglePopup: true,\runiqueField: \"gid\",\rsrid: 31254,\rscaleRange: [15, 19],\rpopupTemplate: '\u0026lt;div class=\"biotop\"\u0026gt;\u0026lt;h3\u0026gt;{name}\u0026lt;/h3\u0026gt;'\r+'\u0026lt;footer class=\"popup\"\u0026gt;Datenquelle: Land Tirol - data.tirol.gv.at\u0026lt;/footer\u0026gt;\u0026lt;/div\u0026gt;',\rsymbology: {\rtype: \"single\",\rvectorOptions: {\rfillColor: \"#2f4a00\",\rfillOpacity: 0.4,\rweight: 1.8,\rcolor: \"#2f4a00\",\ropacity: 1,\rclickable: true\r}\r}\r});\rPostGIS RESTful Web Service Framework #Was jetzt noch fehlt ist die Schnittstelle zur Datenbank. Mit dem PostGIS RESTful Web Service Framework ist dieser Zugang sehr einfach, denn im besten Fall reicht es die PHP Skripte an die entsprechende Position zu kopieren. Anschließend muss noch die Datenbank-Verbindung eingetragen werden und, vorausgesetzt die aufwändig Rechte Konfiguration in Postgresql ist korrekt, der Layer scheint in der Karte auf.\n","date":"19. April 2013","permalink":"https://webman.at/cms/2013/04/leaflet-vektor-layer-mit-postgis/","section":"Blog","summary":"\u003cp\u003eIn der \u003ca href=\"http://viel-falter.at/cms/karte/\" target=\"_blank\" rel=\"noreferrer\"\u003eKarte\u003c/a\u003e im \u003ca href=\"https://komplett.cc/cms/viel-falter/\" title=\"viel-falter\" target=\"_blank\" rel=\"noreferrer\"\u003eViel-Falter\u003c/a\u003e Projekt sollte zu den gekachelten Rasterlayern ein weiterer Layer mit der Biotop-Kartierung von Tirol dazukommen. Da die gesamte Vektor-Geometrie mit über 200 MB im GeoJSON Format zu Buche schlägt, muss der Datensatz auf die Ausmaße aktuellen Ansicht (BoundingBox) eingeschränkt werden. Einigermaßen überrascht stellte ich fest, dass es hierzu (fast) keine fertige Lösung gibt. Hier mein Weg:\u003c/p\u003e","title":"Leaflet Vektor Layer mit PostGIS"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/leafletjs/","section":"Tags","summary":"","title":"Leafletjs"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/postgis/","section":"Tags","summary":"","title":"Postgis"},{"content":"Das GN #Das Galaxy Nexus ist das coolste Smartphone das ich bisher hatte, was bei meinem zweijährigen Neukaufzyklus nicht weiter verwunderlich ist. Seit fast einem Jahr verwende ich es jetzt schon und bin immer noch sehr zufrieden: Es ist superdünn, hat ein großes Display und einen schnellen Prozessor. Mit cyanogenmod 10.1 experimental ist man auch mit der nicht mehr ganz akutellen Hardware softwaremäßig immer noch am Puls der Zeit.\nSchlaflosigkeit #Doch seit einigen Tagen schaltete sich das Display des tollen Geräts immer wieder ungefragt ein und leerte so den Akku in weniger als der halben Zeit als gewohnt. Auch sonst zeigte mein Handy einige merkwürdige Verhaltensweisen, die ich nicht reproduzieren konnte. Jetzt habe ich das Gerät wirklich nicht sehr geschont und es wurde auch ab und zu einer gewissen Feuchtigkeit ausgesetzt. Deshalb war meine erste Vermutung, dass es sich um einen feuchtigkeitsbedingten Hardware Defekt handelt. Wie so oft, wurde ich von google eines besseren belehrt, denn das Problem ist weit verbreitet und was noch viel erfreulicher ist: es lässt sich in wenigen Sekunden beheben (zumindest in meinem Fall): Der USB Anschluss wurde beim (schlampigen) Anstecken des Ladekabels wohl ganz leicht verbogen, auf jeden Fall reichte es den Abstand zwischen der sehr feinen Zunge (im Foto in der Mitte unten) und dem unteren Rand mit einem Zahnstocher etwas zu vergrößern. Ich hatte dazu den Akku entfernt und war sehr vorsichtig 😉\n","date":"31. März 2013","permalink":"https://webman.at/cms/2013/03/das-galaxy-nexus-will-nicht-schlafen/","section":"Blog","summary":"\u003ch2 id=\"das-gn\" class=\"relative group\"\u003eDas GN \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#das-gn\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eDas Galaxy Nexus ist das coolste Smartphone das ich bisher hatte, was bei meinem zweijährigen Neukaufzyklus nicht weiter verwunderlich ist. Seit fast einem Jahr verwende ich es jetzt schon und bin immer noch sehr zufrieden: Es ist superdünn, hat ein großes Display und einen schnellen Prozessor. Mit cyanogenmod 10.1 experimental ist man auch mit der nicht mehr ganz akutellen Hardware softwaremäßig immer noch am Puls der Zeit.\u003c/p\u003e","title":"Das Galaxy Nexus will nicht schlafen"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/USB/","section":"Tags","summary":"","title":"USB"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/Ubuntu/","section":"Categories","summary":"","title":"Ubuntu"},{"content":"Nach langem hin und her bin ich jetzt (Ubuntu 13.04 beta) doch auch bei der Ubuntu Unity Oberfläche gelandet, denn unter xfce (xubuntu) gab es auch so manches Problemchen (ich sag nur Sound, Netzwerkmanager, …). Einige Sachen sind gewöhnungsbedürftig, aber was gar nicht geht ist der Unity-application-switcher. Die ALT-TAB Kombination wurde in ihrem Verhalten verändert, worauf ich mich trotz gutem Willen nicht umstellen kann.\nGlücklicherweise kann das relativ einfach geändert werden (siehe askubuntu ). Was in der default Installation von Ubuntu allerdings fehlte war das Paket compiz-plugins, das die rettende Option „Static Application Switcher“ enthält. Also apt-get install compiz-plugins und (fast) alles wird gut.\n","date":"27. März 2013","permalink":"https://webman.at/cms/2013/03/unity-application-switcher/","section":"Blog","summary":"\u003cp\u003eNach langem hin und her bin ich jetzt (Ubuntu 13.04 beta) doch auch bei der Ubuntu Unity Oberfläche gelandet, denn unter xfce (xubuntu) gab es auch so manches Problemchen (ich sag nur Sound, Netzwerkmanager, …). Einige Sachen sind gewöhnungsbedürftig, aber was gar nicht geht ist der Unity-application-switcher. Die \u003cstrong\u003eALT-TAB\u003c/strong\u003e Kombination wurde in ihrem Verhalten verändert, worauf ich mich trotz gutem Willen nicht umstellen kann.\u003c/p\u003e","title":"Unity Application switcher"},{"content":"Eigentlich speichere ich meine E-Mails in $HOME/Maildir im Maildir Format. Durch eine Fehlkonfiguration im MTA kann es aber passieren, dass die E-Mails in /var/mail/\u0026lt;username\u0026gt; landen. Um diesen Fehler für alle Benutzer am System nachträglich zu korrigieren reicht der Einzeiler:\nfor i in /var/mail/* ; do formail -s procmail -d ${i##*/} \u0026lt; $i ; done\rDazu muss natürlich das procmail Paket installiert sein und die entsprechenden procmail-Regeln entweder im Benutzerverzeichnis als ~/.procmailrc oder in /etc/procmailrc liegen. Hier ein Beispiel:\nDEFAULT=$HOME/Maildir/\rORGMAIL=$HOME/Maildir/\rLOGFILE=/var/log/procmail.log\rVERBOSE=off\rDROPPRIVS\r","date":"4. Januar 2013","permalink":"https://webman.at/cms/2013/01/e-mails-von-varmail-nach-maildir/","section":"Blog","summary":"\u003cp\u003eEigentlich speichere ich meine E-Mails in \u003ccode\u003e$HOME/Maildir\u003c/code\u003e im Maildir Format. Durch eine Fehlkonfiguration im MTA kann es aber passieren, dass die E-Mails in \u003ccode\u003e/var/mail/\u0026lt;username\u0026gt;\u003c/code\u003e landen. Um diesen Fehler für alle Benutzer am System nachträglich zu korrigieren reicht der Einzeiler:\u003c/p\u003e","title":"E-Mails von /var/mail nach ~/Maildir"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/mailserver/","section":"Tags","summary":"","title":"Mailserver"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/procmail/","section":"Tags","summary":"","title":"Procmail"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/iptables/","section":"Tags","summary":"","title":"Iptables"},{"content":"Es hat sich so ergeben, dass ich circa alle zwei Jahre meine Server auf neue Hardware verlege. Bei den gemieteten root-servern kommen dabei immer neue IP-Adressen ins Spiel. Da das Update der DNS-Einträge ein wenig zeitversetzt geschieht und das den Zeitpunkt der Umstellung nicht ganz genau planen lässt, ist es günstig alle Anfragen von der alten IP-Adresse auf die neue umzuleiten. Mit iptables ist das sehr einfach, hier das Skript, das nicht nur Webanfragen, sondern auch Mailserver (SMTP und IMAP/POP) umleitet. Das Skript muss am alten Server ausgeführt werden, wobei 10.0.0.1 hier die IP-Adresse des neuen Servers ist.\necho 1 \u0026gt; /proc/sys/net/ipv4/ip_forward\r# http/https\riptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1\riptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.0.0.1\r# imap/imaps\riptables -t nat -A PREROUTING -p tcp --dport 143 -j DNAT --to-destination 10.0.0.1\riptables -t nat -A PREROUTING -p tcp --dport 995 -j DNAT --to-destination 10.0.0.1\r# SMTP\riptables -t nat -A PREROUTING -p tcp --dport 25 -j DNAT --to-destination 10.0.0.1\r# POP3/POP3s\riptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.0.0.1\riptables -t nat -A PREROUTING -p tcp --dport 995 -j DNAT --to-destination 10.0.0.1\riptables -t nat -A POSTROUTING -j MASQUERADE\rZum Anzeigen der NAT-Tabellen eignet sich dieses Kommando (credits):\niptables -nvL -t nat\rDamit kann man die Servermigration mit einem Schalter umlegen.\nUpdate:\nDa dieser tolle Trick so gut funktioniert, besteht die Gefahr, dass man nicht alle DNS-Einträge auf die neue IP korrigiert hat. Nachdem der Server vom Provider Netz genommen wurde kamen die ersten Beschwerden … Deshalb das nächste mal vorher die Server-Abschaltung selbst testen.\n","date":"4. Januar 2013","permalink":"https://webman.at/cms/2013/01/server-migration/","section":"Blog","summary":"\u003cp\u003eEs hat sich so ergeben, dass ich circa alle zwei Jahre meine Server auf neue Hardware verlege. Bei den gemieteten root-servern kommen dabei immer neue IP-Adressen ins Spiel. Da das Update der DNS-Einträge ein wenig zeitversetzt geschieht und das den Zeitpunkt der Umstellung nicht ganz genau planen lässt, ist es günstig alle Anfragen von der alten IP-Adresse auf die neue umzuleiten. Mit iptables ist das sehr einfach, hier das Skript, das nicht nur Webanfragen, sondern auch Mailserver (SMTP und IMAP/POP) umleitet. Das Skript muss am alten Server ausgeführt werden, wobei 10.0.0.1 hier die IP-Adresse des neuen Servers ist.\u003c/p\u003e","title":"Server-Migration"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/ALT-F2/","section":"Tags","summary":"","title":"ALT-F2"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/commandline/","section":"Tags","summary":"","title":"Commandline"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/verve/","section":"Tags","summary":"","title":"Verve"},{"content":"Die merkwürdigen Userinterface Änderungen der letzten Ubuntu Versionen (Unity) haben mich bereits vor geraumer Zeit bewogen, auf Xfce als Desktop System umzusteigen. Ich bin äußerst zufrieden, da es eigentlich alles beinhaltet, was ich am Desktop benötige. Leider gibt es in der aktuellen Version (Xfce 4.10 in Ubuntu 12.10) ein Problem mit dem Programm-Starter xfrun4 (das jetzt xfce4-appfinder heißt und IMO etwas überladen ist), der über ALT-F2 aufgerufen wird (mehrere Bugreports, zum Beispiel hier).\nNachdem ALT-F2 die von mir am meisten benützte Tastenkombination ist, musste eine schnelle Lösung her: Das verve-plugin integriert sich in ein vorhandenes Panel und ist sehr leichtgewichtig. Trotzdem bietet es eine History, die mit Pfeiltasten abgerufen und TAB ergänzt werden kann. Um die Kommandozeile von der Tastatur aus zu aktivieren muss man den Keyboard-Shortcut ALT-F2 auf das Programm verve-focus legen und los gehts.\n","date":"19. Oktober 2012","permalink":"https://webman.at/cms/2012/10/xfce-und-xfrun/","section":"Blog","summary":"\u003cp\u003eDie merkwürdigen Userinterface Änderungen der letzten Ubuntu Versionen (Unity) haben mich bereits vor geraumer Zeit bewogen, auf Xfce als Desktop System umzusteigen. Ich bin äußerst zufrieden, da es eigentlich alles beinhaltet, was ich am Desktop benötige. Leider gibt es in der aktuellen Version (Xfce 4.10 in Ubuntu 12.10) ein Problem mit dem Programm-Starter \u003ccode\u003exfrun4\u003c/code\u003e (das jetzt \u003ccode\u003exfce4-appfinder\u003c/code\u003e heißt und IMO etwas überladen ist), der über \u003ccode\u003eALT-F2\u003c/code\u003e aufgerufen wird (mehrere Bugreports, zum Beispiel \u003ca href=\"https://bugs.launchpad.net/ubuntu/\u0026#43;source/xfce4-appfinder/\u0026#43;bug/1058814\" target=\"_blank\" rel=\"noreferrer\"\u003ehier\u003c/a\u003e).\u003c/p\u003e","title":"Xfce und xfrun"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/xfce4/","section":"Tags","summary":"","title":"Xfce4"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/xfrun/","section":"Tags","summary":"","title":"Xfrun"},{"content":"Version 1.3.0, 7. Juni 2016 # Anpassungen für Android 5 und Android 6 (Speicherpfad) KML Unterstützung für zusätzliche Vektor Dateien kleine Bugfixes Version 1.2.7, 1. August 2013 # Änderung des Speicherpfades funktioniert ohne Neustart TMS-Layer können auch im Google Format (verkehrte y-Achse) offline verwendet werden Version 1.2.6, 14. Mai 2013 # Vektor-Layer werden nicht standardmäßig angezeigt kleinere Bugfixes zur Positionsbestimmung Version 1.2.5, 6. September 2012 # neue Launcher-Icons GPS: Feedback bei Positionsbestimmung (Vibration und loading-Icon) Version 1.2.4, 1. August 2012 # Unterstützung für das Global Mapper XML-Fileformat Version 1.2.3, 31. Juli 2012 # Hilfe Funktion in der App Möglichkeit beliebige CSV-Dateien einzubinden Bugfixes und Erweiterung bei der Verwendung von Liniengeometrien (Layer) ","date":"6. September 2012","permalink":"https://webman.at/cms/projekte/digitab/changelog/","section":"Projekte","summary":"\u003ch4 id=\"version-130-7-juni-2016\" class=\"relative group\"\u003eVersion 1.3.0, 7. Juni 2016 \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#version-130-7-juni-2016\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h4\u003e\u003cul\u003e\n\u003cli\u003eAnpassungen für Android 5 und Android 6 (Speicherpfad)\u003c/li\u003e\n\u003cli\u003eKML Unterstützung für zusätzliche Vektor Dateien\u003c/li\u003e\n\u003cli\u003ekleine Bugfixes\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"version-127-1-august-2013\" class=\"relative group\"\u003eVersion 1.2.7, 1. August 2013 \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#version-127-1-august-2013\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h4\u003e\u003cul\u003e\n\u003cli\u003eÄnderung des Speicherpfades funktioniert ohne Neustart\u003c/li\u003e\n\u003cli\u003eTMS-Layer können auch im Google Format (verkehrte y-Achse) offline verwendet werden\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"version-126-14-mai-2013\" class=\"relative group\"\u003eVersion 1.2.6, 14. Mai 2013 \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#version-126-14-mai-2013\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h4\u003e\u003cul\u003e\n\u003cli\u003eVektor-Layer werden nicht standardmäßig angezeigt\u003c/li\u003e\n\u003cli\u003ekleinere Bugfixes zur Positionsbestimmung\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"version-125-6-september-2012\" class=\"relative group\"\u003eVersion 1.2.5, 6. September 2012 \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#version-125-6-september-2012\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h4\u003e\u003cul\u003e\n\u003cli\u003eneue Launcher-Icons\u003c/li\u003e\n\u003cli\u003eGPS: Feedback bei Positionsbestimmung (Vibration und \u003cem\u003eloading-Icon\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"version-124-1-august-2012\" class=\"relative group\"\u003eVersion 1.2.4, 1. August 2012 \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#version-124-1-august-2012\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h4\u003e\u003cul\u003e\n\u003cli\u003eUnterstützung für das Global Mapper XML-Fileformat\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"version-123-31-juli-2012\" class=\"relative group\"\u003eVersion 1.2.3, 31. Juli 2012 \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#version-123-31-juli-2012\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h4\u003e\u003cul\u003e\n\u003cli\u003eHilfe Funktion in der App\u003c/li\u003e\n\u003cli\u003eMöglichkeit beliebige CSV-Dateien einzubinden\u003c/li\u003e\n\u003cli\u003eBugfixes und Erweiterung bei der Verwendung von Liniengeometrien (Layer)\u003c/li\u003e\n\u003c/ul\u003e","title":"Digitab ChangeLog"},{"content":"Das Problem: Kein Platz mehr auf /var #Es ist also wieder einmal passiert: Der Heimserver, der eigentlich nie für große Datenbank-Arbeiten gedacht war schlägt sich tapfer als Tileserver für Openstreetmap Karten. Nachdem das bei der Installation nicht abzusehen war, habe ich /var nicht auf eine eigene Partition gelegt und die root-Partition ist jetzt natürlich voll.\nJetzt könnte man ein bestehendes Logical Volume verkleinern (zuvor natürlich auch das unterliegende Filesystem) und den neu freigegebenen Platz für ein neues LV verwenden und dieses dann unter /var mounten. Der Quick-and-dirty-workaround ist /var einfach auf eine bestehende Partition zu verschieben und dann zu verlinken (softlink). Gesagt, getan, nur apparmor, der Sicherheitsdienst von Ubuntu-Linux ist damit nicht ganz einverstanden.\nkernel: [11407.253478] type=1400 audit(1346434922.210:36): apparmor=\u0026quot;DENIED\u0026quot; operation..... OK, jetzt kann man die apparmor-Profile anpassen, aber das ist gar nicht ganz trivial und vor allem muss das für jede neue Software wieder gemacht werden.\nbind bindet Verzeichnisse wie Mount-Points #Hier kommt eine seit Kernel 2.4 bestehende Erweiterung zu Hilfe: Die mount-Option bind kann Teile der Verzeichnisstruktur als eigenen Mount-Point einhängen. In der /etc/fstab kann das dann so aussehen:\n# \u0026lt;file system\u0026gt; \u0026lt;mount point\u0026gt; \u0026lt;type\u0026gt; \u0026lt;options\u0026gt; \u0026lt;dump\u0026gt; \u0026lt;pass\u0026gt; proc /proc proc nodev,noexec,nosuid 0 0 /dev/mapper/vg1-root / ext4 errors=remount-ro 0 1 /dev/mapper/vg1-swap none swap sw 0 0 /dev/mapper/vg1-mm\t/media/mm\text4\tdefaults\t0\t0 /media/mm/var /var none bind Jetzt ist liegt /var physikalisch auf der Partition mm und kann den ganzen Plattenplatz dieser Partition (LV in diesem Fall) verwenden.\nWie gesagt, ein Quick-and-dirty hack, aber dies können ja manchmal auch ganz nützlich sein …\n","date":"6. September 2012","permalink":"https://webman.at/cms/2012/09/var-auf-eine-andere-partition-linken/","section":"Blog","summary":"\u003ch4 id=\"das-problem-kein-platz-mehr-auf-var\" class=\"relative group\"\u003eDas Problem: Kein Platz mehr auf /var \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#das-problem-kein-platz-mehr-auf-var\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp\u003eEs ist also wieder einmal passiert: Der Heimserver, der eigentlich nie für große Datenbank-Arbeiten gedacht war schlägt sich tapfer als \u003cem\u003eTileserver\u003c/em\u003e für Openstreetmap Karten. Nachdem das bei der Installation nicht abzusehen war, habe ich \u003ccode\u003e/var\u003c/code\u003e nicht auf eine eigene Partition gelegt und die root-Partition ist jetzt natürlich voll.\u003c/p\u003e","title":"/var auf eine andere Partition linken"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/apparmor/","section":"Tags","summary":"","title":"Apparmor"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/fstab/","section":"Tags","summary":"","title":"Fstab"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/lvm/","section":"Tags","summary":"","title":"Lvm"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/apps/","section":"Tags","summary":"","title":"Apps"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/java/","section":"Tags","summary":"","title":"Java"},{"content":"Bei manchen Mobilfunk-Anbietern in Österreich bekommt man eine SMS, wenn jemand versucht hat anzurufen und man selbst gerade nicht erreichbar war. Die SMS schaut dann so ähnlich aus wie der erste Screenshot.\nAus technischen Gründen kann in der SMS nur die Nummer, nicht aber der Name des Anrufers aus meinem Telfonbuch stehen. Das wäre aber gerade recht spannend, denn ich kann mir leider nicht alle Namen zu den Nummern in meinem Adressbuch merken (dann wäre das Adressbuch ja auch umsonst). Um das so unkompliziert wie möglich zu lösen, habe ich eine winzige App geschrieben, die als Eingabe den Text der SMS nimmt und die dort enthaltenen Nummern im Adressbuch auflöst. Super simpel.\nZur Verwendung: Lange auf die SMS drücken, Text kopieren, dann die App starten, dort Einfügen, dann Knopf drücken Get Number(s). Das wars. Momentan filtert die App den Java-Regexp (\\+[0-9]+),, also ein + dann Ziffern und dann einen Beistrich (manche sagen auch Komma dazu).\n","date":"30. August 2012","permalink":"https://webman.at/cms/2012/08/kontaktdaten-von-telefonnummern-aus-dem-eigenen-adressbuch/","section":"Blog","summary":"\u003cp\u003e\u003ca href=\"/cms/wp-content/uploads/2012/08/contactfromstring2a.png\"\u003e\u003cimg class=\"alignleft size-medium wp-image-414\" title=\"SMS vom Mobilfunk Provide\" src=\"/cms/wp-content/uploads/2012/08/contactfromstring2a-300x187.png\" alt=\"\" /\u003e\u003c/a\u003eBei manchen Mobilfunk-Anbietern in Österreich bekommt man eine SMS, wenn jemand versucht hat anzurufen und man selbst gerade nicht erreichbar war. Die SMS schaut dann so ähnlich aus wie der erste Screenshot.\u003c/p\u003e","title":"Kontaktdaten von Telefonnummern aus dem eigenen Adressbuch"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/owncloud/","section":"Tags","summary":"","title":"Owncloud"},{"content":"Owncloud finde ich ein spannendes Projekt, hauptsächlich wegen der Möglichkeit von unterschiedlichen Geräten und mit unterschiedlichen Personen Daten auszutauschen. Für Kalender und Adressen verwende ich andere Systeme. (Update Aug. 2013: Jetzt werden auch der Kalender und die Kontakte von owncloud verwaltet).\nInstallation und upgrade ist eigentlich ganz einfach, dazu gibt es genügend Anleitungen im Netz (owncloud Installation). Zum Upgrade reicht es, das neue Archiv über das alte zu entpacken, Konfigurationsdateien und Daten werden dabei nicht verändert. Hat man jedoch nach der Installation das owncloud Verzeichnis umbenannt, benötigt man einen speziellen switch beim entpacken des Archivs:\ncd \u0026lt;pfad_zur_owncloud_installation\u0026gt;\rtar --strip-components 1 -jxvf ../owncloud-4.0.7.tar.bz2\rDurch --strip-components 1 wird der erste Pfad in der Archivdatei (owncloud) entfernt und das Archiv im aktuellen Ordner entpackt.\nNoch eleganter kann das Archiv entpackt werden, ohne die Datei überhaupt zu speicher:\nwget -O - http://download.owncloud.org/releases/owncloud-4.5.1.tar.bz2 | tar --strip-components 1 -jxvf -\r","date":"20. August 2012","permalink":"https://webman.at/cms/2012/08/owncloud-upgrade/","section":"Blog","summary":"\u003cp\u003e\u003ca href=\"http://owncloud.org/\" target=\"_blank\" rel=\"noreferrer\"\u003eOwncloud\u003c/a\u003e finde ich ein spannendes Projekt, hauptsächlich wegen der Möglichkeit von unterschiedlichen Geräten und mit unterschiedlichen Personen Daten auszutauschen. Für Kalender und Adressen verwende ich andere Systeme. (\u003cstrong\u003eUpdate Aug. 2013:\u003c/strong\u003e Jetzt werden auch der Kalender und die Kontakte von owncloud verwaltet).\u003c/p\u003e","title":"owncloud upgrade"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/csv/","section":"Tags","summary":"","title":"Csv"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/GIS/","section":"Tags","summary":"","title":"GIS"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/mongo/","section":"Tags","summary":"","title":"Mongo"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/mongodb/","section":"Categories","summary":"","title":"Mongodb"},{"content":"Die Daten von Geonames können in einem wunderbaren CSV-Format länderweise heruntergeladen werden. Der Import der Daten in mongo ist wirklich einfach. Zuerst benötigen wir eine Header-Datei, in der die Spalten definiert sind (siehe dazu das entsprechende readme).\ncat header.txt id\tname\tasciiname\talternatenames\tlatitude\tlongitude\tfeatureclass\tfeaturecode\tcountrycode\tcc2\tadmin1\tadmin2\tadmin3\tadmin4\tpopulation\televation\tdem\ttimezone\tmodification Die Felder müssen natürlich mit Tabulatoren getrennt sein, wie in der von mir heruntergeladenen AT.txt Datei mit den Geonames Einträgen für Österreich. Anschließend den Header und die Daten zusammen kopieren und mit mongoimport in die Datenbank einspielen.\ncat header.txt AT.txt \u0026amp;gt;\u0026amp;gt; AT_header.txt mongoimport --db geonames --collection snowhow -type tsv --file AT_header.txt --headerline mongo geonames db.snowhow.find({ \u0026#34;name\u0026#34;: \u0026#34;Sattelspitze\u0026#34; }) { \u0026#34;_id\u0026#34; : ObjectId(\u0026#34;502d20427529fd3eebcaf58d\u0026#34;), \u0026#34;id\u0026#34; : 6939577, \u0026#34;name\u0026#34; : \u0026#34;Sattelspitze\u0026#34;, \u0026#34;asciiname\u0026#34; : \u0026#34;Sattelspitze\u0026#34;, \u0026#34;alternatenames\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;latitude\u0026#34; : 47.33778, \u0026#34;longitude\u0026#34; : 9.77, \u0026#34;featureclass\u0026#34; : \u0026#34;T\u0026#34;, \u0026#34;featurecode\u0026#34; : \u0026#34;PK\u0026#34;, \u0026#34;countrycode\u0026#34; : \u0026#34;AT\u0026#34;, \u0026#34;cc2\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;admin1\u0026#34; : 8, \u0026#34;admin2\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;admin3\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;admin4\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;population\u0026#34; : 0, \u0026#34;elevation\u0026#34; : 1562, \u0026#34;dem\u0026#34; : 1541, \u0026#34;timezone\u0026#34; : \u0026#34;Europe/Vienna\u0026#34;, \u0026#34;modification\u0026#34; : \u0026#34;2009-03-19\u0026#34; } Extrem cool. Aber leider ist so kein 2D-Index auf die Felder longitude und latitude möglich. Ein bisschen Googlen bestätigte die Vermutung, dass mongoimport keine Möglichkeit bietet, Geopositionen so zu erkennen. Als schnellste Möglichkeit für kleine Datensätze exportierte ich die Collection im JSON Format und korrigierte die Positionen mit sed. Ein mögliches Suchen-Ersetzen Kommando mit sed dazu lautet wie folgt:\nsed -e \u0026#39;s/\u0026#34;latitude\u0026#34; : ([0-9.]+), \u0026#34;longitude\u0026#34; : ([0-9.]+),/loc: { \u0026#34;lon\u0026#34; : 2 , \u0026#34;lat\u0026#34; : 1 },/\u0026#39; \u0026amp;lt; at.json \u0026amp;gt; at_loc.json Jetzt wird die collection gelöscht und die neue, konvertierte JSON-Datei in die Datenbank eingespielt:\nmongo geonames db.snowhow.remove() exit mongoimport --db geonames --collection snowhow --file at_loc.json Abschließend noch den Geospatial-Index erzeugen, dann können räumliche Abfragen durchgeführt werden:\ndb.snowhow.ensureIndex( { loc: \u0026#34;2d\u0026#34; } ); db.snowhow.find( { loc : { $nearSphere : [9.77, 47.33778] } }, {name: true, loc: true}).limit(5) { \u0026#34;_id\u0026#34; : ObjectId(\u0026#34;502d20427529fd3eebcaf58d\u0026#34;), \u0026#34;name\u0026#34; : \u0026#34;Sattelspitze\u0026#34;, \u0026#34;loc\u0026#34; : { \u0026#34;lon\u0026#34; : 9.77, \u0026#34;lat\u0026#34; : 47.33778 } } { \u0026#34;_id\u0026#34; : ObjectId(\u0026#34;502d20417529fd3eebcacf19\u0026#34;), \u0026#34;name\u0026#34; : \u0026#34;Alpkopf\u0026#34;, \u0026#34;loc\u0026#34; : { \u0026#34;lon\u0026#34; : 9.76667, \u0026#34;lat\u0026#34; : 47.33306 } } { \u0026#34;_id\u0026#34; : ObjectId(\u0026#34;502d20427529fd3eebcaf578\u0026#34;), \u0026#34;name\u0026#34; : \u0026#34;Salzbödenkopf\u0026#34;, \u0026#34;loc\u0026#34; : { \u0026#34;lon\u0026#34; : 9.79361, \u0026#34;lat\u0026#34; : 47.33056 } } { \u0026#34;_id\u0026#34; : ObjectId(\u0026#34;502d20417529fd3eebcac667\u0026#34;), \u0026#34;name\u0026#34; : \u0026#34;Ebnit\u0026#34;, \u0026#34;loc\u0026#34; : { \u0026#34;lon\u0026#34; : 9.75, \u0026#34;lat\u0026#34; : 47.35 } } { \u0026#34;_id\u0026#34; : ObjectId(\u0026#34;502d20427529fd3eebcaf55a\u0026#34;), \u0026#34;name\u0026#34; : \u0026#34;Hörnle\u0026#34;, \u0026#34;loc\u0026#34; : { \u0026#34;lon\u0026#34; : 9.74056, \u0026#34;lat\u0026#34; : 47.31944 } } Update #Zugegeben, wesentlich elaganter ist der hier (Update 2017: Link zu laulima.com funktioniert leider nicht mehr) vorgeschlagene Weg: Nach dem importieren der Daten wird die Struktur direkt in mongo umgebaut:\ndb.snowhow.find().forEach(function(data) { db.snowhow.update({_id:data._id},{$set:{loc:{lng:parseFloat(data.longitude),lat:parseFloat(data.latitude)}}}); }) Update 2012 / 2013 #Und hier die Variante um nach dem Import mit mongoimport GeoJSON Punkte anzulegen:\ndb.geonames.find().forEach(function(data) { db.geonames.update( { _id: data._id }, { $set: { loc: { type: \u0026#34;Point\u0026#34;, coordinates: [parseFloat(data.longitude), parseFloat(data.latitude)] } } }) }) ","date":"16. August 2012","permalink":"https://webman.at/cms/2012/08/mongoimport-von-csv-dateien-mit-xy-koordinaten/","section":"Blog","summary":"\u003cp\u003eDie Daten von \u003ca href=\"http://geonames.org/\" target=\"_blank\" rel=\"noreferrer\"\u003eGeonames\u003c/a\u003e können in einem wunderbaren CSV-Format länderweise heruntergeladen werden. Der Import der Daten in mongo ist wirklich einfach. Zuerst benötigen wir eine Header-Datei, in der die Spalten definiert sind (siehe dazu das entsprechende \u003ca href=\"http://download.geonames.org/export/dump/readme.txt\" target=\"_blank\" rel=\"noreferrer\"\u003ereadme\u003c/a\u003e).\u003c/p\u003e","title":"Mongoimport von CSV Dateien mit X/Y Koordinaten"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/sed/","section":"Tags","summary":"","title":"Sed"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/app/","section":"Tags","summary":"","title":"App"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/digitab/","section":"Tags","summary":"","title":"Digitab"},{"content":"Digitab ist eine App für Android Tablet-PCs (und große Smartphones) zum digitalisieren von geometrischen Formen. Zu den Funktionen von DigiTab zählt unter anderem:\nDigitalisieren von Geometrie und speichern im GML-Format Cloud-Speicher auf komplett.cc wo GML auch gleichzeit in das Shapefile Format konvertiert wird intelligentes Autovervollständigen für ihre thematischen Informationen (Grundlagen als CSV) Online Karten: OpenStreetMap, Bing-Maps (auf Wunsch weitere) Offline Karten: Raster auf dem Device-Speicher im TMS-Format, Vektoren im GML-Format CSV-Export der thematischen Daten Finden Sie alle Informationen zur App auf der eigenen Seite dazu.\nFür weiter Informationen zur Verfügbarkeit kontaktieren Sie bitte bernd@komplett.cc.\n","date":"27. Juli 2012","permalink":"https://webman.at/cms/2012/07/digitab-version-1-2-1/","section":"Blog","summary":"\u003cp\u003eDigitab ist eine App für Android Tablet-PCs (und große Smartphones) zum digitalisieren von geometrischen Formen. Zu den Funktionen von DigiTab zählt unter anderem:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigitalisieren von Geometrie und speichern im GML-Format\u003c/li\u003e\n\u003cli\u003e\u003cem\u003eCloud-Speicher\u003c/em\u003e auf komplett.cc wo GML auch gleichzeit in das Shapefile Format konvertiert wird\u003c/li\u003e\n\u003cli\u003e\u003cem\u003eintelligentes\u003c/em\u003e Autovervollständigen für ihre thematischen Informationen (Grundlagen als CSV)\u003c/li\u003e\n\u003cli\u003eOnline Karten: OpenStreetMap, Bing-Maps (auf Wunsch weitere)\u003c/li\u003e\n\u003cli\u003eOffline Karten: Raster auf dem Device-Speicher im TMS-Format, Vektoren im GML-Format\u003c/li\u003e\n\u003cli\u003eCSV-Export der thematischen Daten\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFinden Sie alle Informationen zur App auf der \u003ca href=\"/cms/digitab/\"\u003eeigenen Seite dazu\u003c/a\u003e.\u003c/p\u003e","title":"DigiTab Version 1.2.1"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/digitalisieren/","section":"Tags","summary":"","title":"Digitalisieren"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/smartphone/","section":"Tags","summary":"","title":"Smartphone"},{"content":" ","date":"27. Juli 2012","permalink":"https://webman.at/cms/projekte/digitab/screenshots/","section":"Projekte","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/cms/wp-content/uploads/2012/07/digitab_edit_device-2012-07-26-195724.jpg\" alt=\"Edit\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e\n\u003c!-- ![Polygon](/cms/wp-content/uploads/2012/07/digitab_device-2012-07-26-195601.jpg) --\u003e\n\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/cms/wp-content/uploads/2012/07/digitab_autocomplete_device-2012-07-26-235343.jpg\" alt=\"Autovervollstänigen\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e\n\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/cms/wp-content/uploads/2012/07/digitab_layer_device-2012-07-26-2352461.jpg\" alt=\"Layer\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e","title":"DigiTab Screenshots"},{"content":" Digitalisieren von Geometrie und speichern im GML-Format Cloud-Speicher auf komplett.cc wo GML auch gleichzeit in das Shapefile Format konvertiert wird intelligentes Autovervollständigen für ihre thematischen Informationen (Grundlagen als CSV) Online Karten: OpenStreetMap, Bing-Maps (auf Wunsch weitere) Offline Karten: Raster auf dem Device-Speicher im TMS-Format, Vektoren im GML-Format CSV-Export der thematischen Daten ","date":"27. Juli 2012","permalink":"https://webman.at/cms/projekte/digitab/features/","section":"Projekte","summary":"\u003cul\u003e\n\u003cli\u003eDigitalisieren von Geometrie und speichern im GML-Format\u003c/li\u003e\n\u003cli\u003e\u003cem\u003eCloud-Speicher\u003c/em\u003e auf komplett.cc wo GML auch gleichzeit in das Shapefile Format konvertiert wird\u003c/li\u003e\n\u003cli\u003e\u003cem\u003eintelligentes\u003c/em\u003e Autovervollständigen für ihre thematischen Informationen (Grundlagen als CSV)\u003c/li\u003e\n\u003cli\u003eOnline Karten: OpenStreetMap, Bing-Maps (auf Wunsch weitere)\u003c/li\u003e\n\u003cli\u003eOffline Karten: Raster auf dem Device-Speicher im TMS-Format, Vektoren im GML-Format\u003c/li\u003e\n\u003cli\u003eCSV-Export der thematischen Daten\u003c/li\u003e\n\u003c/ul\u003e","title":"DigiTab Features"},{"content":"Kartengrundlagen #Als Kartengrundlagen verwendet die Applikation intern einerseits das offene TMS-Format (Raster) und andererseits GML für Vektoren. Dadurch kann DigiTab auf online-Ressourcen wie OpenStreetMap oder Microsoft Bing Maps zurürckgreifen, oder offline auf Daten aus dem Speicher des Gerätes (meist SD-Karten).\nBeim Start duchsucht die Applikation den in den Einstellungen angegebenen Pfad nach Unterverzeichnissen. Jeder Ordner wird als Projekt angesehen und muss folgende Struktur enthalten:\nprojektname/\r|-tiles/\r| |-10/\r| |-11/\r| |-...\r| |-tilemapresource.xml\r|-gml/\r|-kml/\r|-csv/ Offline Raster #Der Ordner tiles enthält die umgewandelte Raster-Grundlage (zum Beispiel ein Orthofoto). Für die Konvertierung in das TMS-Format gibt es sowohl Open-Source-Software, als auch kommerzielle Programme. Wichtig ist, dass die tile-size der einzelnen Kacheln auf 256×256 Pixel eingestellt wird. Die Raster Daten müssen in der Projektion WGS 84 / Pseudo-Mercator (EPSG:3857) vorliegen. Die Konfirutationsdatei muss tilemapresource.xml heißen und im Verzeichnis tiles liegen.\ngdal2tiles: aus der hervorragenden gdal-Bibliothek. Kommandozeilenprogramm, kein grafisches Benutzerinterface. Open-Source (Linux, Windows, Mac) MapTiler: Ebenfalls auf gdal basierende Software mit GUI für Linux, Windows, Mac Open-Source MapTiler Cluster: Hoch performante Lösung für sehr große Geodaten und sehr, sehr große Budgets. Kommerziell Global Mapper: komfortable Windows Software. Freie, zwei-wöchige Probelizenz. Erstellt leider (noch, rev.13.2) kein entprechendes XML-File (hier die entsprechende Anfrage). (wurde in der aktuellen Version (31.7.2012) auf Anfrage behoben) Kommerziell Offline Vektor #Vektor Geometrie kann im GML-Format in dem Ordner gml/ abgelegt werden und wird dann über vorhandene Rasterdaten gelegt. Jede Datei wird in einer anderen Farbe dargestellt und kann im Menü „Overlay Ebenen“ einzeln sichtbar oder unsichtbar gemacht werden.\nDamit die Vektor und Rasterdaten zusammen passen sollten alle GML-Dateien in der Projektion WGS 84 / Pseudo-Mercator (EPSG:3857) vorliegen. Zum Konvertieren (zum Beispiel aus dem Shape-Format) und Projezieren eigenen sich Open-Source Werkzeuge wie Qgis, oder ogr2ogr (aus der gdal Bibliothek) an der Kommandozeile.\nOffline CSV-Daten #Im Ordner csv kann pro Projekt eine eigene Artenliste (oder andere thematische Information) im CSV-Format abgelegt werden. Die CSV-Definition wird dabei streng ausgelegt: Trennzeichen ist das Komma (,) und die Zeichenkodierung der Datei muss UTF-8 sein (Achtung unter Windows!). Folgende Felder der CSV-Datei werden ausgewertet:\nid,Gattung,Art,Unterart,Trivialname Eine eindeutige ID-Spalte (zum Beispiel eine fortlaufende Nummer) ist sinnvoll, da im Shapefile-Format nicht alle Details der CSV-Datei gespeichert werden können. Diese Spalte dient als Referenz auf die vollständigen CSV-Datei. Das GML-Format unterliegt nicht dieser Beschränkung.\n","date":"26. Juli 2012","permalink":"https://webman.at/cms/projekte/digitab/installation/","section":"Projekte","summary":"\u003ch2 id=\"kartengrundlagen\" class=\"relative group\"\u003eKartengrundlagen \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#kartengrundlagen\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eAls Kartengrundlagen verwendet die Applikation intern einerseits das offene \u003ca href=\"https://en.wikipedia.org/wiki/Tile_Map_Service\" target=\"_blank\" rel=\"noreferrer\"\u003eTMS-Format\u003c/a\u003e (Raster) und andererseits \u003ca href=\"https://en.wikipedia.org/wiki/Geography_Markup_Language\" target=\"_blank\" rel=\"noreferrer\"\u003eGML\u003c/a\u003e für Vektoren. Dadurch kann DigiTab auf online-Ressourcen wie OpenStreetMap oder Microsoft Bing Maps zurürckgreifen, oder offline auf Daten aus dem Speicher des Gerätes (meist SD-Karten).\u003c/p\u003e","title":"Digitab Installation"},{"content":"Ubuntu legt die Apache Logfiles als gzippte Dateien in /var/log/apache2 ab. Um von alten Logdateien nachträglich eine Statistik zu erstellen kann folgendes Kommando nützlich sein:\nfor i in `ls -tr /var/log/apache2/ssl_meinhost.com*access*gz` ; do gunzip -c $i \u0026amp;gt; /tmp/ssl_log.txt; /usr/lib/cgi-bin/awstats.pl -config=ssl.meinhost.com -LogFile=/tmp/ssl_log.txt ; done ssl_meinhost.com bzw. ssl.meinhost.com sind natürlich auf die entsprechenden Logfiles bzw. awstats-Konfiguration anzupassen.\nLinks: # https://help.ubuntu.com/community/AWStats http://awstats.sourceforge.net/ ","date":"22. Juni 2012","permalink":"https://webman.at/cms/2012/06/awstats-unter-ubuntu-alte-apache-logfiles-einspielen/","section":"Blog","summary":"\u003cp\u003eUbuntu legt die Apache Logfiles als gzippte Dateien in \u003ccode\u003e/var/log/apache2\u003c/code\u003e ab. Um von alten Logdateien nachträglich eine Statistik zu erstellen kann folgendes Kommando nützlich sein:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e i in \u003cspan class=\"sb\"\u003e`\u003c/span\u003els -tr /var/log/apache2/ssl_meinhost.com*access*gz\u003cspan class=\"sb\"\u003e`\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edo\u003c/span\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gunzip -c \u003cspan class=\"nv\"\u003e$i\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003egt\u003cspan class=\"p\"\u003e;\u003c/span\u003e /tmp/ssl_log.txt\u003cspan class=\"p\"\u003e;\u003c/span\u003e /usr/lib/cgi-bin/awstats.pl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -config\u003cspan class=\"o\"\u003e=\u003c/span\u003essl.meinhost.com -LogFile\u003cspan class=\"o\"\u003e=\u003c/span\u003e/tmp/ssl_log.txt \u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003essl_meinhost.com\u003c/code\u003e bzw. \u003ccode\u003essl.meinhost.com\u003c/code\u003e sind natürlich auf die entsprechenden Logfiles bzw. awstats-Konfiguration anzupassen.\u003c/p\u003e","title":"Alte Logfiles in Awstats einspielen (Ubuntu)"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/awstats/","section":"Tags","summary":"","title":"Awstats"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/shell/","section":"Tags","summary":"","title":"Shell"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/backuppc/","section":"Tags","summary":"","title":"Backuppc"},{"content":"Dazu gibt es schon viele Anleitungen, aber ein Problem bei meinem Linux-Desktop ließ mich nicht los:\nRemote[1]: rsync: readlink_stat(\"/home/bernd/.gvfs\") failed: Permission denied (13)\rDer dritte Eintrag im Thread http://ubuntuforums.org/showthread.php?t=767311 half schließlich: Mit --one-file-system wird rsync angewiesen, das gemountete fuse-Filesystem unter ~/.gvfs nicht zu sichern.\nDie entsprechende Config-Zeile in /etc/backuppc/hostname.pl sieht dann bei mir folgendermaßen aus:\n$Conf{RsyncClientCmd} = '$sshPath -q -x -l backuppc --one-file-system $host sudo $rsyncPath $argList+';\r$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l backuppc $host sudo $rsyncPath $argList+';\r$Conf{RsyncArgsExtra} = [\r'--one-file-system'\r];\rZur Erklärung der RsyncClient -Zeilen: Ich verwende rsync über ssh als Methode, wobei der User backuppc am host sudo-Rechte für das rsync-Kommando braucht.\nAuch die Exclude-Syntax von Backuppc (die in meinem Fall auf rsync zurückgreift), bedurfte einiger Anläufe. Ein Auszug\n$Conf{RsyncShareName} = [\r'/etc',\r'/home/bernd'\r];\r$Conf{BackupFilesExclude} = {\r'*' =\u0026gt; [\r'VirtualBox VMs/',\r'.VirtualBox/HardDisks/',\r'.VirtualBox/Machines/',\r'local/mobile_atlas_creator/atlases/'\r]\r};\rMit diesen Einstellungen werden die VirtualBox-Ordner und der mobile_atlas-Ordner in meinem Standardverzeichnis von der Sicherung ausgeschlossen.\nLinks # https://help.ubuntu.com/community/BackupPC http://backuppc.sourceforge.net/ ","date":"23. Mai 2012","permalink":"https://webman.at/cms/2012/05/backuppc-zum-sichern-von-desktops/","section":"Blog","summary":"\u003cp\u003eDazu gibt es schon viele Anleitungen, aber ein Problem bei meinem Linux-Desktop ließ mich nicht los:\u003c/p\u003e\n\u003cpre class=\"brush: plain; title: ; notranslate\" title=\"\"\u003eRemote[1]: rsync: readlink_stat(\"/home/bernd/.gvfs\") failed: Permission denied (13)\r\n\u003c/pre\u003e\n\u003cp\u003eDer dritte Eintrag im Thread \u003ca href=\"http://ubuntuforums.org/showpost.php?s=e16b12882f026838f0c95f3d16c110d3\u0026amp;p=5474631\u0026amp;postcount=3\" target=\"_blank\" rel=\"noreferrer\"\u003ehttp://ubuntuforums.org/showthread.php?t=767311\u003c/a\u003e half schließlich: Mit \u003ccode\u003e--one-file-system\u003c/code\u003e wird rsync angewiesen, das gemountete fuse-Filesystem unter \u003ccode\u003e~/.gvfs\u003c/code\u003e nicht zu sichern.\u003c/p\u003e","title":"Backuppc zum Sichern von Desktops"},{"content":"Information gemäß e-commerce-Gesetz #Verantwortlich für den Inhalt:\nwebman.at\nMag. Bernd Öggl\nPlanötzenhofstr. 19\n6020 Innsbruck\nAUSTRIA\nUID: ATU71076113\nWeb: https://webman.at\neMail: info@webman.at\nFachgruppe: Unternehmensberatung, Buchhaltung und Informationstechnologie\nProd./Dienstl.: Dienstleistungen in der automatischen Datenverarbeitung und Informationstechnik\nBehörde gem. ECG: Magistrat der Stadt Innsbruck\nKammer: Wirtschaftskammer Tirol\nLogo by: Mister KG\nRechtliches #Alle Angaben werden ständig aktualisiert. Angebote und Bereichsdefinitionen sind veränderlich und können vom Webinhalt abweichen. Satz- und Textfehler vorbehalten.\nDatenschutzerklärung #Der Schutz Ihrer persönlichen Daten ist uns ein besonderes Anliegen. Wir verarbeiten Ihre Daten daher ausschließlich auf Grundlage der gesetzlichen Bestimmungen (DSGVO, TKG 2003). In diesen Datenschutzinformationen informieren wir Sie über die wichtigsten Aspekte der Datenverarbeitung im Rahmen unserer Website.\nBeim Besuch unserer Webseite wird Ihre IP-Adresse, Beginn und Ende der Sitzung für die Dauer dieser Sitzung erfasst. Dies ist technisch bedingt und stellt damit ein berechtigtes Interesse iSv Art 6 Abs 1 lit f DSGVO dar. Soweit im Folgenden nichts anderes geregelt wird, werden diese Daten von uns nicht weiterverarbeitet.\nCookies #Diese Seite verwendet keine Cookies.\nHaftungsausschluß #Es wird hiermit ausdrücklich erklärt, dass keinerlei Einfluss auf die Gestaltung und die Inhalte aller auf dieser Homepage gelinkten Seiten besteht, und diese Inhalte nicht zu Eigen gemacht werden. Diese Erklärung gilt für alle unter webman.at angezeigten Links und für alle Inhalte der Seite, zu denen die hier angemeldeten Banner und Links führen. Trotz sorgfältiger Kontrolle wird keine Haftung für die Inhalte externer Links übernommen. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich!\n","date":"17. Januar 2012","permalink":"https://webman.at/cms/imprint/","section":"","summary":"\u003ch3 id=\"information-gemäß-e-commerce-gesetz\" class=\"relative group\"\u003eInformation gemäß e-commerce-Gesetz \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#information-gem%c3%a4%c3%9f-e-commerce-gesetz\" aria-label=\"Anker\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h3\u003e\u003cp\u003eVerantwortlich für den Inhalt:\u003c/p\u003e\n\u003cp\u003ewebman.at\u003cbr\u003e\nMag. Bernd Öggl\u003cbr\u003e\nPlanötzenhofstr. 19\u003cbr\u003e\n6020 Innsbruck\u003cbr\u003e\nAUSTRIA\u003cbr\u003e\nUID: ATU71076113\u003c/p\u003e\n\u003c!-- Tel.: +43 (0) 512 / 328048   --\u003e\n\u003cp\u003eWeb: \u003ca href=\"https://webman.at\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://webman.at\u003c/a\u003e\u003cbr\u003e\neMail: \u003ca href=\"mailto:info@webman.at\"\u003einfo@webman.at\u003c/a\u003e\u003c/p\u003e","title":"Impressum"},{"content":"Unser neues Buch HTML5: Leitfaden für Webentwickler von Klaus Förster und Bernd Öggl ist im November 2010 im Addison-Wesley Verlag erschienen. Die aktualisierte englische Fassung ist im Juli 2011 ebenfalls bei Addison Wesley erschienen.\nDie Webseite zum Buch zeigt alle Beispiele aus dem Buch online.\nHier können Sie unser Buch online kaufen:\namazon CN: Fach-Chinesisch: jetzt auch auf Chinesisch (simplified chinese) :-) wem das zu einfach ist, hier auch in complex chinese amazon DE: Hardcover (deutsche Ausgabe) Paperback (englisch) Kindle Edition (englisch) amazon US: Paperback (englisch) Kindle Edition (englisch) amazon UK: Paperback (englisch) Kindle Edition (englisch) ","date":"19. August 2011","permalink":"https://webman.at/cms/buecher/html5/","section":"Bücher","summary":"\u003cp\u003eUnser neues Buch \u003cem\u003eHTML5: Leitfaden für Webentwickler von Klaus Förster und Bernd Öggl\u003c/em\u003e ist im November 2010 im Addison-Wesley Verlag erschienen. Die \u003ca href=\"https://www.amazon.com/gp/product/0321772741/\" target=\"_blank\" rel=\"noreferrer\"\u003eaktualisierte englische\u003c/a\u003e Fassung ist im Juli 2011 ebenfalls bei Addison Wesley erschienen.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://html5.komplett.cc/\" target=\"_blank\" rel=\"noreferrer\"\u003eDie Webseite zum Buch\u003c/a\u003e zeigt alle Beispiele aus dem Buch online.\u003c/p\u003e","title":"HTML5"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/hosted-apps/","section":"Tags","summary":"","title":"Hosted Apps"},{"content":"","date":null,"permalink":"https://webman.at/cms/categories/Public-Display/","section":"Categories","summary":"","title":"Public Display"},{"content":"","date":null,"permalink":"https://webman.at/cms/tags/public-display/","section":"Tags","summary":"","title":"Public Display"},{"content":"Das von Klaus Förster und Bernd Öggl (beide komplett.cc) entwickelte, innovative Informationssystem Public Display wird jetzt auch vom Nationalpark Hohe Tauern eingesetzt. Die Nationalparkverwaltung war auf der Suche nach einem flexiblen und offenen System um die Besucher im Nationalpark über neue Veranstaltungen, Öffnungszeiten und aktuelle Ereignisse im Park zu informieren. Public Display konnte überzeugen.\nWenn sie auch an dem offenen Infosystem interessiert sind, wenden Sie sich an info@komplett.cc .\n","date":"22. Juli 2011","permalink":"https://webman.at/cms/2011/07/public-display-goes-nationalpark-hohe-tauern/","section":"Blog","summary":"\u003cp\u003eDas von \u003ca href=\"http://svg.cc\" target=\"_blank\" rel=\"noreferrer\"\u003eKlaus Förster\u003c/a\u003e und Bernd Öggl (beide \u003ca href=\"https://komplett.cc\" target=\"_blank\" rel=\"noreferrer\"\u003ekomplett.cc\u003c/a\u003e) entwickelte, innovative Informationssystem \u003ca href=\"https://komplett.cc/cms/pd/\" title=\"Public Display\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cem\u003ePublic Display\u003c/em\u003e\u003c/a\u003e wird jetzt auch vom \u003ca href=\"http://www.hohetauern.at/\" target=\"_blank\" rel=\"noreferrer\"\u003eNationalpark Hohe Tauern\u003c/a\u003e eingesetzt. Die Nationalparkverwaltung war auf der Suche nach einem flexiblen und offenen System um die Besucher im Nationalpark über neue Veranstaltungen, Öffnungszeiten und aktuelle Ereignisse im Park zu informieren. Public Display konnte überzeugen.\u003c/p\u003e","title":"Public Display goes „Nationalpark Hohe Tauern“"},{"content":"PHP 5.3 \u0026amp; MySQL 5.4 von Michael Kofler und Bernd Öggl.\nRezensionen zu dem Buch können Sie bei Amazon lesen. Bei einem Vergleich von 13 Büchern zu PHP und MySQL in der renomierten Computerzeitschrift iX (September 2005) wurde das Buch als das eindeutig beste Buch dieser Auswahl beschrieben (iX 9/2005)\n","date":"18. März 2011","permalink":"https://webman.at/cms/buecher/php5/","section":"Bücher","summary":"\u003cp\u003e\u003ca href=\"https://www.amazon.de/PHP-5-3-MySQL-5-4-Programmiertechniken/dp/3827328764/ref=sr_1_2?ie=UTF8\u0026amp;s=books\u0026amp;qid=1251328317\u0026amp;sr=1-2\" target=\"_blank\" rel=\"noreferrer\"\u003ePHP 5.3 \u0026amp; MySQL\n5.4\u003c/a\u003e\nvon Michael Kofler und Bernd Öggl.\u003c/p\u003e","title":"PHP5"}]