Geschreibsel fsteeg's scribblings, notes, and stuff http://172.105.249.169:9000/notes Sat, 06 Jan 2024 00:00:01 +0000 Sat, 06 Jan 2024 00:00:01 +0000 <p>&ldquo;Wie wäre es möglich, wissenschaftliches Publizieren als eine solche gemeinschaftliche Aufgabe zu praktizieren und die vorherrschende Erwerbungslogik zu hinterfragen? Braucht es dafür eine eigenständige Struktur? Wenn ja, in welcher Form?&rdquo; <a href="https://verfassungsblog.de/gemeinschaftsgarten/">Gemeinschaftsgärten – Verfassungsblog</a></p> http://172.105.249.169:9000/notes/1704544191950http://172.105.249.169:9000/notes/1704544191950 Sat, 06 Jan 2024 12:29:51 +0000 micro <p>&ldquo;Unser Riesenfehler ist, immer auf Eile und das Dringende zu reagieren. Dafür werden wichtige und strategische Dinge vernachlässigt, bis sie als Dringlichkeit wieder hochpoppen. Das ist auch das Muster der Klimakrise.&rdquo; <a href="https://www.derstandard.at/story/3000000183378/fuer-mehr-gelassenheit-im-job-lassen-sie-sich-ruhig-zeit">Für mehr Gelassenheit im Job: Lassen Sie sich ruhig Zeit!</a></p> http://172.105.249.169:9000/notes/1692613430332http://172.105.249.169:9000/notes/1692613430332 Mon, 21 Aug 2023 10:23:50 +0000 micro <p>&lsquo;Vielleicht machen wir dann eine ähnliche Erfahrung wie der Philosoph Albert Camus, der schrieb: &ldquo;Mitten im tiefsten Winter wurde mir schließlich bewusst, dass in mir ein unbesiegbarer Sommer wohnt.&rdquo;&rsquo; <a href="https://www.zeit.de/sinn/2023-01/winter-depression-norwegen-natur">https://www.zeit.de/sinn/2023-01/winter-depression-norwegen-natur</a></p> http://172.105.249.169:9000/notes/1675201020447http://172.105.249.169:9000/notes/1675201020447 Tue, 31 Jan 2023 21:37:00 +0000 micro <p>&ldquo;From the beginning of Micro.blog, we’ve also left off some common social network features, hoping to encourage a different kind of community, less about popularity and more about your own blog and related conversations&rdquo; <a href="https://help.micro.blog/t/whats-the-difference-between-micro-blog-and-mastodon/1395">What&rsquo;s the difference between Micro.blog and Mastodon?</a></p> http://172.105.249.169:9000/notes/1671643193251http://172.105.249.169:9000/notes/1671643193251 Wed, 21 Dec 2022 17:19:53 +0000 micro <p>&ldquo;lieb, kuschelig, verantwortungsbewusst, aber auch ein bisschen langweilig. In einer Welt der Kettenhunde ist das aber nicht so schlecht.&rdquo; <a href="https://www.zeit.de/kultur/film/2022-11/wdr-lokalzeit-oeffentlich-rechtlicher-rundfunk-reform/komplettansicht">WDR-&ldquo;Lokalzeit&rdquo;: In einem Land jenseits der Trolle - ZEIT ONLINE</a></p> http://172.105.249.169:9000/notes/1668866736941http://172.105.249.169:9000/notes/1668866736941 Sat, 19 Nov 2022 14:05:36 +0000 micro <p><a href="https://www.zdnet.com/article/log4j-after-white-house-meeting-google-calls-for-list-of-critical-open-source-projects/">&ldquo;an organization to serve as a marketplace for open source maintenance, matching volunteers from companies with the critical projects that most need support&rdquo;</a></p> http://172.105.249.169:9000/notes/1642203209597http://172.105.249.169:9000/notes/1642203209597 Fri, 14 Jan 2022 23:33:29 +0000 micro <p>&ldquo;Wir brauchen eine Kultur, dass eine freie, dezentrale, lebendige Community gute Software entwickeln kann und Unternehmen, die diese Software dann nutzen, diese Community unterstützen. Das ist nicht nur eine Frage des Geldes.&rdquo; <a href="https://www.zeit.de/digital/2021-12/log4j-sicherheitsluecke-adriana-groh-open-knowledge-foundation/komplettansicht">Adriana Groh, Open Knowledge Foundation - ZEIT ONLINE</a></p> http://172.105.249.169:9000/notes/1639844555313http://172.105.249.169:9000/notes/1639844555313 Sat, 18 Dec 2021 16:22:35 +0000 micro <p>&ldquo;In reality what is happening, is that open source maintainers are effectively unpaid outsourcing teams for giant corporations.&rdquo; <a href="https://dev.to/yawaramin/the-human-toll-of-log4j-maintenance-35ap">The human toll of log4j maintenance</a></p> http://172.105.249.169:9000/notes/1639560047207http://172.105.249.169:9000/notes/1639560047207 Wed, 15 Dec 2021 09:20:47 +0000 micro <p>&ldquo;Sobald die Schwimmbäder in Köln wieder öffnen, sollten Nichtschwimmer-Kinderkurse schnellstmöglich starten und Priorität haben. GUT Köln hat dazu eine Anfrage im Ausschuss für Schule und Weiterbildung am 07. Juni 2021 gestellt.&rdquo; <a href="https://www.dieguten.koeln/nichtschwimmer-kinderkurse/">GUT Köln</a></p> http://172.105.249.169:9000/notes/1622239393959http://172.105.249.169:9000/notes/1622239393959 Fri, 28 May 2021 22:03:13 +0000 micro <p>&lsquo;Während immer nur &ldquo;die Anderen&rdquo; Ideologien haben und Erzählungen glauben, erkennt &ldquo;Verschwörungstheorie&rdquo; an, dass wir alle Theorien über die Welt entwickeln. Dass die Theorien der einen die Welt treffend erklären, die der anderen nicht, bleibt davon unberührt.&rsquo; <a href="https://www.zeit.de/gesellschaft/2020-12/verschwoerungstheorien-corona-krise-wort-des-jahres-2020/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1609195503306http://172.105.249.169:9000/notes/1609195503306 Mon, 28 Dec 2020 22:45:03 +0000 micro <p>&ldquo;In der Bezirksvertretung Nippes werden in Zukunft 5 Parteien und Gruppierungen zusammenarbeiten […]: Bündnis 90/Die Grünen, Die Linke, Gut, Klima Freunde und FDP.&rdquo; <a href="http://www.report-k.de/Politik-Nachrichten/Politik-Koeln/5er-Buendnis-regiert-in-Zukunft-Nippes-137034">www.report-k.de</a></p> http://172.105.249.169:9000/notes/1604612790193http://172.105.249.169:9000/notes/1604612790193 Thu, 05 Nov 2020 21:46:30 +0000 micro <p>Liebe Leute, bitte. Bei rot: anhalten. ❤️ (Ich kenne die Stelle, man denkt, alles ist frei. Lieber kurz Pause machen, in den Himmel gucken und das Leben genießen.) <a href="https://www.presseportal.de/blaulicht/pm/12415/4753662">▷ POL-K: 201104-5-K Radfahrer bei Unfall schwer verletzt - Presseportal</a> 🚲</p> http://172.105.249.169:9000/notes/1604611268300http://172.105.249.169:9000/notes/1604611268300 Thu, 05 Nov 2020 21:21:08 +0000 micro <p>Auf der Aachener Straße zwischen Universitätsstraße und Eisenbahnring soll &ldquo;der rechte Kfz-Fahrstreifen in einen Radfahrstreifen von 2,50 Meter Breite und einen zusätzlichen 0,75 Meter breiten Sicherheitsraum zum fließenden Autoverkehr umgewandelt werden.&rdquo; <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/22606/index.html">www.stadt-koeln.de</a> 🚲</p> http://172.105.249.169:9000/notes/1604421787208http://172.105.249.169:9000/notes/1604421787208 Tue, 03 Nov 2020 16:43:07 +0000 micro <p>&ldquo;In dieser 88 Quadratkilometer großen Fläche leben rund eine Million Menschen. Erlaubt wäre darin nur noch Wirtschafts- und Lieferverkehr sowie Busse, Polizei, Feuerwehr und Anwohner. […] die Berliner [könnten] per Volksentscheid schon 2023 über ein Gesetz abstimmen&rdquo; <a href="https://www.zeit.de/mobilitaet/2020-10/berlin-autofrei-volksbegehren-autos-innenstadt/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1603313731023http://172.105.249.169:9000/notes/1603313731023 Wed, 21 Oct 2020 20:55:31 +0000 micro Wir können praktisch per Stichwahl das Ratsbündnis wählen <blockquote><p>&ldquo;Was Grü­ne und CDU in den ver­gan­ge­nen Jah­ren nicht hat­ten, könn­ten sie jetzt schaf­fen. Eine eige­ne hauch­dün­ne Mehr­heit von 46 Stim­men aus Grü­ne, CDU und einer evtl. OB Reker. […] Das glei­che wäre bei Grü­nen und SPD plus OB Kos­siski mög­lich.&rdquo; — <a href="https://www.dieguten.koeln/und-jetzt-nach-der-wahl/">Und jetzt nach der Wahl?</a></p> </blockquote> http://172.105.249.169:9000/notes/wir-koennen-praktisch-per-stichwahl-das-ratsbuendnis-waehlenhttp://172.105.249.169:9000/notes/wir-koennen-praktisch-per-stichwahl-das-ratsbuendnis-waehlen Mon, 21 Sep 2020 00:00:01 +0000 <p><a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/22307/index.html">1.929 Mandatsbewerber stellen sich zur Wahl - Stadt Köln</a> 💌🗳</p> http://172.105.249.169:9000/notes/1598385978421http://172.105.249.169:9000/notes/1598385978421 Tue, 25 Aug 2020 20:06:18 +0000 micro <p>&ldquo;Jetzt hat die Stadt sechs Parkplätze im Vrings- und Pantaleonsveedel für nicht-kommerzielle nachbarschaftliche Treffen freigegeben: „Beete statt Blech“ heißt das Programm. Je 1.000 Euro gab’s dafür vom Bund.&rdquo; <a href="https://www.koeln.de/koeln/nachrichten/lokales/in-koeln-gibt-es-jetzt-tomaten-statt-parkende-autos_1154618.html?utm_source=RSS&utm_medium=Feed&utm_campaign=lokalnews_rss">www.koeln.de</a> 🌿</p> http://172.105.249.169:9000/notes/1597232947684http://172.105.249.169:9000/notes/1597232947684 Wed, 12 Aug 2020 11:49:07 +0000 micro <p>&ldquo;Ab dem 13. August könnt Ihr Euch in neun Kölner Bürgerzentren kostenlos ein Lastenrad ausleihen.&rdquo; <a href="https://www.dieguten.koeln/lastenrad-ausleihen/">Lastenrad ausleihen - GUT Köln</a> 🚲</p> http://172.105.249.169:9000/notes/1596789382419http://172.105.249.169:9000/notes/1596789382419 Fri, 07 Aug 2020 08:36:22 +0000 micro Lastenrad-Förderprogramm der Stadt Köln 2020 <blockquote><p>Das Lastenrad-Förderprogramm 2020 läuft zwischen dem 25. August und 2. Oktober 2020. Das Förderangebot richtet sich, wie auch in 2019, an die in Köln ansässigen Unternehmen mit maximal neun Mitarbeitenden, sonstige Selbstständige und Freiberufler, eingetragene gemeinnützige Vereine und Verbände, in freier Trägerschaft befindliche Kindertagesstätten, Einrichtungen der Kinder-, Jugend- und Erwachsenenhilfe, Schulen und Krankenhäuser sowie Zusammenschlüsse von Privatpersonen aus mindestens drei Haushalten, wie beispielsweise Mieter- oder Eigentümergemeinschaften. Das Gesamtbudget für die Lastenradförderung beträgt 500.000 Euro und wird anteilig auf die verschiedenen Nutzergruppen aufgeteilt.</p> </blockquote><p>— <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/22178/index.html">Lastenrad-Förderprogramm der Stadt Köln 2020 - Stadt Köln</a></p> http://172.105.249.169:9000/notes/lastenrad-foerderprogramm-der-stadt-koeln-2020http://172.105.249.169:9000/notes/lastenrad-foerderprogramm-der-stadt-koeln-2020 Tue, 28 Jul 2020 00:00:01 +0000 <p>&ldquo;[The] irony of REST’s ubiquity today. REST gets blindly used for all sorts of networked applications now, but Fielding originally offered REST as an illustration of how to derive a software architecture tailored to an individual application’s particular needs.&rdquo; <a href="https://twobithistory.org/2020/06/28/rest.html">twobithistory.org</a></p> http://172.105.249.169:9000/notes/1594507206733http://172.105.249.169:9000/notes/1594507206733 Sat, 11 Jul 2020 22:40:06 +0000 micro <p>&ldquo;Nach knapp zweijähriger Umbauzeit fließt der Frechener Bach im Kölner Westen nun wieder in seinem historischen und naturnahen Bachbett.&rdquo; <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/22104/index.html">www.stadt-koeln.de</a> 💦🌳</p> http://172.105.249.169:9000/notes/1594234194475http://172.105.249.169:9000/notes/1594234194475 Wed, 08 Jul 2020 18:49:54 +0000 micro <p><a href="https://www.dieguten.koeln/fc-gleueler-wiese/">Überall gibt es Fans vom FC - auch auf der Gleueler Wiese - GUT Köln</a></p> http://172.105.249.169:9000/notes/1592426764886http://172.105.249.169:9000/notes/1592426764886 Wed, 17 Jun 2020 20:46:04 +0000 micro <p>&ldquo;Stadt Köln will Lastenräder auch in 2020 fördern&rdquo; <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/21912/index.html#">www.stadt-koeln.de</a> 🚲</p> http://172.105.249.169:9000/notes/1590444615304http://172.105.249.169:9000/notes/1590444615304 Mon, 25 May 2020 22:10:15 +0000 micro <p>&ldquo;Umwelt- und Klimapolitik muss lokal, regional, national, europäisch greifbarer werden, indem sie für die Bürgerinnen und Bürger nicht Weltrettung suggeriert, sondern einen erkennbaren und spürbaren ökologischen Nutzen stiftet, und zwar noch zu deren Lebzeiten.&rdquo; <a href="https://www.zeit.de/2020/21/klimapolitk-international-klimawandel-massnahmen-zukunft/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1589836918926http://172.105.249.169:9000/notes/1589836918926 Mon, 18 May 2020 21:21:58 +0000 micro &ldquo;Die Welt anders sehen: nicht von einer Idee aus, die gewaltsam durchzusetzen sei, sondern vom Zusammenleben der Menschen her&rdquo; <p>&ldquo;Kropotkin [holt] nach, was Darwin seiner Leserschaft schuldig blieb: Er schaut genau hin, wer diese fittest sind – also diejenigen, die sich den Anforderungen und Gefahren ihrer Lebenswelt am erfolgreichsten anpassen. Und es sind nicht die, die ruchlos nach ihrem persönlichen Vorteil streben. Sondern die, die sich am besten auf die gegenseitige Hilfe verstehen.&rdquo; <a href="https://www.zeit.de/kultur/literatur/freitext/pjotr-kropotkin-intellektueller-coronavirus/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/"die-welt-anders-sehen-nicht-von-einer-idee-aus-die-gewaltsam-durchzusetzen-sei-sondern-vom-zusammenleben-der-menschen-her"http://172.105.249.169:9000/notes/"die-welt-anders-sehen-nicht-von-einer-idee-aus-die-gewaltsam-durchzusetzen-sei-sondern-vom-zusammenleben-der-menschen-her" Sun, 10 May 2020 00:00:01 +0000 <p>&ldquo;Der weltweit größte Auslöser für Krankheiten und vorzeitige Todesfälle in der Welt sind nicht etwa Viren und Bakterien, Unterernährung, Kriege oder Verkehrsunfälle – es ist die Luftverschmutzung.&rdquo; <a href="https://www.zeit.de/wirtschaft/2020-05/luftverschmutzung-rueckgang-feinstaub-emission-lockdown-coronavirus">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1588709767315http://172.105.249.169:9000/notes/1588709767315 Tue, 05 May 2020 20:16:07 +0000 micro <p>&ldquo;The Unicode Standard Now Includes CC License Symbols&rdquo; <a href="https://creativecommons.org/2020/03/18/the-unicode-standard-now-includes-cc-license-symbols/">creativecommons.org</a></p> http://172.105.249.169:9000/notes/1584576329446http://172.105.249.169:9000/notes/1584576329446 Thu, 19 Mar 2020 00:05:29 +0000 micro <p>&ldquo;Niemand kann behaupten, dass ihn die nächsten Jahre unvorbereitet treffen. Der Klimawandel und die Digitalisierung, besser: die Daten-Wirtschaft, werden die großen Treiber dieses Wandels sein.&rdquo; <a href="https://www.zeit.de/2020/03/klimawandel-digitalisierung-big-data-wirtschaft-umweltschutz-expertenstudie/komplettansicht">Klimawandel: Wir sind gewarnt! - ZEIT ONLINE</a></p> http://172.105.249.169:9000/notes/1578860959159http://172.105.249.169:9000/notes/1578860959159 Sun, 12 Jan 2020 20:29:19 +0000 micro <p>TL;DR: Händewaschen. Plus: Schlaf, Bewegung, frisches Essen, Sauna 💤🤹‍♂️🥬🤗 <a href="https://www.zeit.de/wissen/gesundheit/2019-12/erkaeltung-desinfektion-arbeitsplatz-tastatur-keime-bakterien-buero-ansteckung/komplettansicht">Erkältung: Was wirklich gegen Keime hilft - ZEIT ONLINE</a></p> http://172.105.249.169:9000/notes/1578176050103http://172.105.249.169:9000/notes/1578176050103 Sat, 04 Jan 2020 22:14:10 +0000 micro Programmieren für Kinder mit BASIC <p>Programmieren lernen ist schon immer ein superspannendes Thema für mich. Mit einem Kind kam dann konkret die Frage, wie man an Computer und ans Programmieren heranführt. Unser Kind hatte schon länger eine alte USB-Tastatur von mir als Spielzeug, und als der erste Wunsch zu Weihnachten &ldquo;ein Computer, wo ich meine Tastatur anschließen kann, zum Programmieren, natürlich nur im Spiel&rdquo; war, habe ich mich nochmal umgesehen was es so gibt zum Programmiereinstieg.<sup><a href="#notes">1</a></sup></p><h2>Hardware</h2><p>Es wurde dann <a href="https://fukuno.jig.jp/1393">IchigoJam</a>, aber nicht das spezifische Board, sondern die <a href="https://ichigojam.github.io/RPi/">Version für Raspberry Pi</a>.</p><p><img src="/images/2019-12-29_basic-programming.jpg" alt="Am Schreibtisch: Computer, Steckdose, Monitor, Tastatur"/></p><p>Ein Raspberry Pi 3 Model B+ mit Hülle, dazu ein alter VGA-Monitor, HDMI-Adapter, USB-Tastatur (IchigoJam unterstützt nur US- und JP-Tastaturlayouts, die alte Tastatur hat tatsächlich US-Layout, sonst wäre es eine neue geworden), und eine 2er-Steckdose mit separaten Ein/Aus-Schaltern: erst Monitor, dann Raspberry Pi einschalten, und man hat in 3 Sekunden ein eingabebereites Programmiersystem.</p><p>Die IchigoJam-Dateien können einfach auf eine FAT-formatierte SD-Karte mit anderen Daten kopiert werden, man muss nicht speziell formatieren. Das Ganze ging erfreulich einfach.</p><h2>Software</h2><p>Als Start-Setup habe ich 5 Programme aus der <a href="https://fukuno.jig.jp/1393">IchigoJam-Anleitung</a> installiert (d.h. abgetippt und gespeichert): LED an/aus und 4 Minispiele (die nicht den Knopf des IchigoJam-Boards verwenden, den der Raspberry Pi nicht hat: <em>Screen jack!</em>, <em>Typing!</em>, <em>Downstream</em>, <em>Calc!</em>).</p><p>Als erstes nach dem gemeinsamen Aufbauen, Anschließen und Einschalten haben wir ein bisschen getippt, den eigenen Namen, &ldquo;Mama&rdquo;, &ldquo;Papa&rdquo;. Als erstes Programm dann das letzte Minispiel von oben (<em>Screen jack!</em>), was einen tollen Aha-Effekt zum Start bringt (und dessen Quelltext erstaunlich kurz ist, was aber noch kein Thema ist).</p><p>Später das erste (<em>Jumping rope girl</em>) von <a href="https://pcn.club/sp/diprogram/index.en.html">dieser Seite mit IchigoJam-Beispielprogrammen</a>, das im Gegensatz zum Ausweichspiel oben (<em>Downstream</em>, verlangsamt) klasse ankam, vor allem wegen der nachvollziehbaren Punktezählung glaube ich (die Minispiele oben messen, wie schnell man war, das habe ich aber noch nicht thematisiert beim Spielen).</p><p>Bei diesem letzten Spiel haben wir auch die erste Anpassung gemacht: Statt &ldquo;@&rdquo; für die Spielfigur der erste Buchstabe des eigenen Namens. 8 Punkte diesmal! Mir scheint das wirklich einen sehr kindgerechten, spielerischen Umgang mit Buchstaben, Zahlen, Zeichen allgemein zu ermöglichen.</p><p><a href="https://github.com/ichigojam/doc/">Weitergehende Doku zum IchigoJam-System</a>.</p><h2>Warum überhaupt früh Programmieren lernen?</h2><p>Ich finde, dass Programmieren eine grundlegende Technik wie Lesen, Schreiben und Rechnen sein sollte. Das heißt nicht, dass alle Programmierer werden. Genauso wenig, wie alle Lektoren, Autoren und Mathematiker werden. Aber ich glaube, es kann helfen, sich den allgegenwärtigen Computern und Algorithmen ein bisschen weniger ausgeliefert zu fühlen.</p><h2>Und warum mit einem alten System wie BASIC?</h2><p>Einerseits klar, ich bin selbst so mit Computern und Programmieren in Kontakt gekommen und kann da einen Nostalgie-Effekt wohl nicht ausschließen.</p><p>Zugleich gibt es aber wirklich den Charme des Einfachen. Eines Systems, wo die Programmierumgebung nicht eine Anwendung unter vielen ist. Wo der Computer nicht eigentlich viel mehr kann, und vieles davon noch gar nicht angesagt ist (und deshalb der Zugang zum Computer eingeschränkt werden muss). Sondern wo der komplette Computer zu verstehen ist. Wo das Betriebssystem die Programmiersprache ist und andersrum. Wo der Computer vom Wesen her ein offenes, programmierbares System ist, nicht eine geschlossene Plattform, auf der mir ein oder mehrere Anbieter Software zur Verfügung stellen.</p><p>So wird der Computer (wieder) etwas, das eher sowas wie Basteln ist, als wie Fernsehen. Wo man etwas erschafft und damit spielt. Etwas, das nicht ruhigstellt, sondern anregt.</p> <hr/><p><small id="notes"><sup>1</sup>Es gibt so viele verschiedene Ansätze. Vielleicht gut für später, auch BASIC, aber mit visuellem Fokus, mit kompletter Einführung in die Spiele-Entwicklung und vielen Beispiel-Spielen: FUZE (z.B. für Switch); Vergleichbar von der Grundidee, aber auf Hochschullevel: <a href="https://twitter.com/search?q=oberon+from%3Afsteeg">Projekt Oberon</a>; mehr auf Hardware-Ebene, programmiert wird auf einem anderen System: Lego Mindstorms, Arduino, Calliope; visuelle, animierte Ansätze: Kano, Swift Playgrounds.</small></p> http://172.105.249.169:9000/notes/programmieren-fuer-kinder-mit-basichttp://172.105.249.169:9000/notes/programmieren-fuer-kinder-mit-basic Sun, 29 Dec 2019 00:00:01 +0000 basicprogramming <p>10 yrs after setting up my twttr, still in no rush, trying to do it right <a href="https://twitter.com/fsteeg/status/1674809689">https://twitter.com/fsteeg/status/1674809689</a> w/ RSS on the open web <a href="https://fsteeg.com/notes">https://fsteeg.com/notes</a></p> http://172.105.249.169:9000/notes/1577309324686http://172.105.249.169:9000/notes/1577309324686 Wed, 25 Dec 2019 21:28:44 +0000 micro <p>&ldquo;There are people who have been thinking about and working toward more open social networks for years. […] Good luck to Jack and the new team. I hope they seriously look at existing standards, because we’ve come too far to start over.&rdquo; <a href="http://manton.micro.blog/2019/12/11/twitter-to-decentralize.html">manton.micro.blog</a></p> http://172.105.249.169:9000/notes/1576102133349http://172.105.249.169:9000/notes/1576102133349 Wed, 11 Dec 2019 22:08:53 +0000 micro <p>&ldquo;The book, Creative Commons for Educators and Librarians, is now published under CC-BY&rdquo; <a href="https://creativecommons.org/2019/12/06/cc-for-educators-and-librarians-is-available/">creativecommons.org</a> 📚</p> http://172.105.249.169:9000/notes/1575739634298http://172.105.249.169:9000/notes/1575739634298 Sat, 07 Dec 2019 17:27:14 +0000 micro <p>Fast 30 Jahre Regierungserfahrung, davon über 25 im größten Bundesland nach Wirtschaftsleistung und Einwohnerzahl, davon zuletzt 7 als Finanzminister, aber &ldquo;keinen Plan, wenig Führungserfahrung und grosses Zerstörungspotenzial&rdquo;, is klar.</p> http://172.105.249.169:9000/notes/1575403066205http://172.105.249.169:9000/notes/1575403066205 Tue, 03 Dec 2019 19:57:46 +0000 micro <p>&ldquo;Der Verkehrsausschuss des Landtags NRW hat einstimmig für ein Radverkehrsgesetz votiert und übernimmt die Forderungen von Aufbruch Fahrrad&rdquo; <a href="https://www.radkomm.de/radgesetznrw_forderungen_von_aufbruchfahrrad/">radkomm.de</a> 🚲</p> http://172.105.249.169:9000/notes/1574768695047http://172.105.249.169:9000/notes/1574768695047 Tue, 26 Nov 2019 11:44:55 +0000 micro <p>&ldquo;Eine komplette digitale Filmbibliothek mit rund 2.000 Filmen steht jetzt allen Mitgliedern der Stadtbibliothek Köln unter koeln.filmfriend.de oder in der filmfriend-App zur Verfügung&rdquo; <a href="https://stadtbibliothekkoeln.blog/2019/11/22/filmspass-fuer-zuhause-und-unterwegs-stadtbibliothek-startet-streaming-angebot-2/">stadtbibliothekkoeln.blog</a></p> http://172.105.249.169:9000/notes/1574517870067http://172.105.249.169:9000/notes/1574517870067 Sat, 23 Nov 2019 14:04:30 +0000 micro <p>&ldquo;Now, if your messages are in JSON, you can probably get away with throwing in new fields. But almost certainly not if you’re using a binary encoding.&rdquo; <a href="https://www.tbray.org/ongoing/When/201x/2019/11/17/Bits-On-the-Wire">Bits On the Wire</a></p> http://172.105.249.169:9000/notes/1574332587321http://172.105.249.169:9000/notes/1574332587321 Thu, 21 Nov 2019 10:36:27 +0000 micro <p>Eclipse &ldquo;indexes every *.java file in every Git repository hosted by git.eclipse.org and github.com/eclipse. The Open Discovered Type dialog loads this information to populate a tree view of all these packages and classes.&rdquo; <a href="http://ed-merks.blogspot.com/2019/11/getting-to-source.html">ed-merks.blogspot.com</a></p> http://172.105.249.169:9000/notes/1573981721854http://172.105.249.169:9000/notes/1573981721854 Sun, 17 Nov 2019 09:08:41 +0000 micro <p>&ldquo;Im vergangenen Jahr hat der Rat der Stadt Köln die Überprüfung, Neuplanung und gegebenenfalls den Umbau aller in Köln vorhandenen freilaufenden Rechtsabbieger beschlossen.&rdquo; <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/21150/index.html">Erhöhung der Sicherheit für den Radverkehr: erste Abbieger werden gesperrt</a> 🚲</p> http://172.105.249.169:9000/notes/1573250330646http://172.105.249.169:9000/notes/1573250330646 Fri, 08 Nov 2019 21:58:50 +0000 micro <p>&ldquo;If free software is necessary for a free society then the FSF needs to focus on the algorithms that change people behavior rather than binary blobs in wireless cards.&rdquo; <a href="https://maffulli.net/2019/10/17/why-richard-stallman-doesnt-matter/">maffulli.net</a></p> http://172.105.249.169:9000/notes/1571347859868http://172.105.249.169:9000/notes/1571347859868 Thu, 17 Oct 2019 21:30:59 +0000 micro <p>&ldquo;there is a difference between open source and open governance […] there&rsquo;s nothing wrong with single vendor controlled open source projects […] it&rsquo;s important that you understand how decisions are made and who has ownership&rdquo; <a href="https://www.aniszczyk.org/2019/10/08/open-source-gerrymandering/">Open Source Gerrymandering</a></p> http://172.105.249.169:9000/notes/1570562714379http://172.105.249.169:9000/notes/1570562714379 Tue, 08 Oct 2019 19:25:14 +0000 micro <p>Der FrauenMediaTurm in Köln [im modern ausgebauten, mittelalterlichen Bayenturm am Rhein] stellt ein: Eine wissenschaftliche Bibliothekarin mit feministischem Interesse&quot; <a href="https://frauenmediaturm.de/turm/stellenausschreibung/">frauenmediaturm.de</a></p> http://172.105.249.169:9000/notes/1569617769442http://172.105.249.169:9000/notes/1569617769442 Fri, 27 Sep 2019 20:56:09 +0000 micro <p>Gesucht: &ldquo;Beispiele aus der Praxis [..], bei denen Wohnungsbaugenossenschaften/-gesellschaften nicht nur vergleichsweise günstigen Wohnraum schufen, sondern auch gleichzeitig Zweigbibliotheken errichteten&rdquo; <a href="http://blog.bibliothekarisch.de/blog/2019/09/19/bibliotheken-und-bezahlbarer-wohnraum-am-beispiel-der-stadt-chicago/">Bibliotheken und bezahlbarer Wohnraum</a> 📚🏘</p> http://172.105.249.169:9000/notes/1568924596936http://172.105.249.169:9000/notes/1568924596936 Thu, 19 Sep 2019 20:23:16 +0000 micro <p>&ldquo;Am kommenden Freitag, 20. September 2019, findet der weltweite Klimastreik statt. In Köln beginnt die Demonstration, an der auch Oberbürgermeisterin Henriette Reker teilnehmen wird, um 11 Uhr am Hans-Böckler-Platz.&rdquo; <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/20998/index.html">www.stadt-koeln.de</a> 🌳</p> http://172.105.249.169:9000/notes/1568726430653http://172.105.249.169:9000/notes/1568726430653 Tue, 17 Sep 2019 13:20:30 +0000 micro <p>&ldquo;[D]amit alle nebeneinander klarkommen, müssen die Geschwindigkeiten angenähert werden. Das geht nur, wenn Autos in der Innenstadt höchstens 30 Kilometer pro Stunde fahren dürfen&rdquo; <a href="https://www.zeit.de/gesellschaft/zeitgeschehen/2019-09/unfall-berlin-porsch-suv-geschwindigkeit-innenstaedte">Höchstens dreißig für alle</a> 🚲🚶🏻‍♀️🚗</p> http://172.105.249.169:9000/notes/1568407529723http://172.105.249.169:9000/notes/1568407529723 Fri, 13 Sep 2019 20:45:29 +0000 micro <p>&ldquo;Wie viele Kölnerinnen und Kölner würden eine Maut akzeptieren, wenn gleichzeitig die Ticketpreise der KVB halbiert [würden]?&rdquo; <a href="http://www.dieguten.koeln/umweltmaut/">Reden wir jetzt über eine Umweltmaut? - GUT Köln</a></p> http://172.105.249.169:9000/notes/1568402017303http://172.105.249.169:9000/notes/1568402017303 Fri, 13 Sep 2019 19:13:37 +0000 micro <p>&ldquo;The Eclipse Photon (2018) release was downloaded 2.8 million times. The Eclipse 2019-06 release was downloaded 6.1 millions times.&rdquo; <a href="https://www.vogella.com/blog/posts/eclipse-ide-downloads-increased/">www.vogella.com</a> <a href="https://www.eclipse.org/downloads/">www.eclipse.org</a></p> http://172.105.249.169:9000/notes/1568400423421http://172.105.249.169:9000/notes/1568400423421 Fri, 13 Sep 2019 18:47:03 +0000 micro <p>&ldquo;All of this language [jargon in academia], in my experience, serves the purpose of gatekeeping and alienating people who could be doing phenomenal work. How do we fix it? Can we fix it? I kind of want to make it my job to fix it.&rdquo; <a href="https://kimberlyhirsh.com/2019/08/13/jargon-in-academia/">kimberlyhirsh.com</a></p> http://172.105.249.169:9000/notes/1565724659941http://172.105.249.169:9000/notes/1565724659941 Tue, 13 Aug 2019 19:30:59 +0000 micro <p>&ldquo;Fragt man indes nach den Gründen für die Verödung bestimmter Landstriche, hat auch dies weniger mit ignoranten Städtern als vielmehr mit der ökonomischen Globalisierung zu tun.&rdquo; <a href="https://www.zeit.de/kultur/2019-07/stadt-land-unterschiede-kulturkampf-infrastruktur-globalisierung-bevoelkerung/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1564950265102http://172.105.249.169:9000/notes/1564950265102 Sun, 04 Aug 2019 20:24:25 +0000 micro <p>&ldquo;in the Library’s new Strategy Plan a &lsquo;coherent and future proof digital infrastructure&rsquo; is presented as an essential precondition for all other strategic objectives (Open Collections, Open Science and Education, Open Campus, Open Knowledge)&rdquo; <a href="https://commonplace.net/?p=2795">commonplace.net</a></p> http://172.105.249.169:9000/notes/1562880443883http://172.105.249.169:9000/notes/1562880443883 Thu, 11 Jul 2019 21:27:23 +0000 micro <p>&ldquo;Nach dem Abitur schon was vor? Ab September 2019 bieten wir in der Stadtbibliothek Köln Stellen im Bundesfreiwilligendienst an.&rdquo; <a href="https://stadtbibliothekkoeln.blog/2019/06/02/freiwilligendienst-in-der-stadtbibliothek-koeln/">stadtbibliothekkoeln.blog</a></p> http://172.105.249.169:9000/notes/1559474092364http://172.105.249.169:9000/notes/1559474092364 Sun, 02 Jun 2019 11:14:52 +0000 micro <p>Die Universitäts- und Stadtbibliothek Köln sucht Leiter/in des Bereichs Administration Anwendungssysteme (w/m/d) / Dezernat IT-Dienste (Entgeltgruppe 14 TV-L, unbefristet) <a href="https://www.ub.uni-koeln.de/res/aktuell/leiter_in_des_bereichs_administration_anwendungssysteme_w_m_d/index_ger.html">www.ub.uni-koeln.de</a></p> http://172.105.249.169:9000/notes/1557528358496http://172.105.249.169:9000/notes/1557528358496 Fri, 10 May 2019 22:45:58 +0000 micro <p>&ldquo;Eine nach klassischen Mustern erstellte Webanwendung, die HTML auf dem Server erzeugt, bietet erhebliche Vorteile, und zwar aus Anwendungs-, Entwicklungs- und Architektursicht.&rdquo; — <a href="https://www.innoq.com/de/articles/2019/04/wider-die-spa-fixierung/">Wider die SPA-Fixierung</a></p> http://172.105.249.169:9000/notes/1555576277065http://172.105.249.169:9000/notes/1555576277065 Thu, 18 Apr 2019 08:31:17 +0000 micro <p>Bin übrigens immer wieder erstaunt, was alles mit dem Rad geht 🚲</p><p><a href="http://fsteeg.com/files/micropub-1555361808032-image.jpg"><img src="http://fsteeg.com/files/micropub-1555361808032-image.jpg" alt="http://fsteeg.com/files/micropub-1555361808032-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1555361808369http://172.105.249.169:9000/notes/1555361808369 Mon, 15 Apr 2019 20:56:48 +0000 micro <p>&ldquo;So, the next time you gripe about being pulled away from coding, think a little closer about it. […] Good teams give developers time to focus, but good developers give their teams their attention in return.&rdquo; <a href="http://techblog.ironfroggy.com/2019/03/interrupting-coders-isnt-so-bad.html">techblog.ironfroggy.com</a></p> http://172.105.249.169:9000/notes/1553793885030http://172.105.249.169:9000/notes/1553793885030 Thu, 28 Mar 2019 17:24:45 +0000 micro <p>&ldquo;Wir wollen, dass die Kinder hier Spaß haben. Und wenn sie mit der Bibliothek ein gutes Gefühl verbinden, überträgt sich das auch auf die Bücher&rdquo; <a href="https://www.zeit.de/2019/13/lesen-kinder-buecher-bildschirm-analog-digital/komplettansicht">www.zeit.de</a> 📚</p> http://172.105.249.169:9000/notes/1553388472830http://172.105.249.169:9000/notes/1553388472830 Sun, 24 Mar 2019 00:47:52 +0000 micro <p>&ldquo;Bei CODING FOR TOMORROW lernen Kinder und Jugendliche sowie Lehrerinnen und Lehrer den kreativen Umgang mit digitaler Technologie.&rdquo; <a href="https://coding-for-tomorrow.de/">coding-for-tomorrow.de</a></p> http://172.105.249.169:9000/notes/1552838876265http://172.105.249.169:9000/notes/1552838876265 Sun, 17 Mar 2019 16:07:56 +0000 micro <p>&ldquo;Open Distro for Elasticsearch will allow us to freely contribute to an Elasticsearch distribution, that we can be confident will remain open source and community-driven. As was the case with Java, our intention is not to fork Elasticsearch&rdquo; <a href="https://aws.amazon.com/de/blogs/opensource/keeping-open-source-open-open-distro-for-elasticsearch/">aws.amazon.com</a></p> http://172.105.249.169:9000/notes/1552743601670http://172.105.249.169:9000/notes/1552743601670 Sat, 16 Mar 2019 13:40:01 +0000 micro <p>&ldquo;Wenn wir darauf verzichten, ein besseres Netz zu konstruieren, dann hat nicht das Netz uns im Stich gelassen. Dann haben wir das Netz im Stich gelassen.&rdquo; <a href="https://faz.net/aktuell/wirtschaft/diginomics/tim-berners-lees-vision-fuer-die-zukunft-des-world-wide-web-16083091.html">Tim Berners-Lees Vision für die Zukunft des World Wide Web</a></p> http://172.105.249.169:9000/notes/1552425217781http://172.105.249.169:9000/notes/1552425217781 Tue, 12 Mar 2019 21:13:37 +0000 micro <p>&ldquo;As part of the discussion [about broken links and archiving web sites], Tantek mentioned how he saves all his blog posts and tweets to the Internet Archive as part of his posting workflow. I’ve just added a setting like that to Micro.blog&rdquo; <a href="http://manton.micro.blog/2019/02/28/automatically-save-to.html">manton.micro.blog</a></p> http://172.105.249.169:9000/notes/1551380928571http://172.105.249.169:9000/notes/1551380928571 Thu, 28 Feb 2019 19:08:48 +0000 micro <p>&ldquo;Veranstaltung zur Zukunft des Radverkehrs in Köln —Oberbürgermeisterin Reker kündigt Ausbau der Förderung für Lastenräder an&rdquo; <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/veranstaltung-zur-zukunft-des-radverkehrs-koeln">www.stadt-koeln.de</a> 🚲</p> http://172.105.249.169:9000/notes/1551281954579http://172.105.249.169:9000/notes/1551281954579 Wed, 27 Feb 2019 15:39:14 +0000 micro <p>&ldquo;15 PhD positions, to work on Eclipse technologies - Lowcomote Project: Training the Next Generation of Experts in Scalable Low-Code Engineering Platforms (H2020 European network)&rdquo; <a href="https://www.eclipse.org/forums/index.php/mv/msg/1097786/1803243/#msg_1803243">www.eclipse.org</a></p> http://172.105.249.169:9000/notes/1551190993808http://172.105.249.169:9000/notes/1551190993808 Tue, 26 Feb 2019 14:23:13 +0000 micro <p>&ldquo;The goal of this new GitHub App is to make sure that every contributor is covered by the necessary legal agreements in order to contribute to all Eclipse Foundation Projects including specification projects.&rdquo; <a href="https://www.chrisguindon.com/post/github-eclipse-eca-validation-service/">www.chrisguindon.com</a></p> http://172.105.249.169:9000/notes/1551164149427http://172.105.249.169:9000/notes/1551164149427 Tue, 26 Feb 2019 06:55:49 +0000 micro <p>&ldquo;We hope that, by making open sourcing research papers faster and safer, arXiv LaTeX cleaner will help even more researchers embrace open access and make their work freely available.&rdquo; <a href="http://opensource.googleblog.com/2019/02/arxiv-latex-cleaner.html">opensource.googleblog.com</a></p> http://172.105.249.169:9000/notes/1550868064288http://172.105.249.169:9000/notes/1550868064288 Fri, 22 Feb 2019 20:41:04 +0000 micro <p>&ldquo;repository maintainers can define exactly which people and teams need to review projects using code owners. This […] automatically requests reviews from the code owners when a pull request changes any owned files&rdquo; <a href="https://github.blog/2017-07-06-introducing-code-owners/">github.blog</a></p> http://172.105.249.169:9000/notes/1550251531542http://172.105.249.169:9000/notes/1550251531542 Fri, 15 Feb 2019 17:25:31 +0000 micro <p>GitHub blog: &ldquo;Introducing draft pull requests&rdquo; <a href="https://github.blog/2019-02-14-introducing-draft-pull-requests/">github.blog</a></p> http://172.105.249.169:9000/notes/1550250591144http://172.105.249.169:9000/notes/1550250591144 Fri, 15 Feb 2019 17:09:51 +0000 micro <p>&ldquo;Rheinpendel – eine Vision für den Kölner Nahverkehr […] Ein neues Seilbahnsystem für Köln, das das ÖPNV-Netz stärkt und ausbaut.&rdquo; <a href="http://www.dieguten.koeln/rheinpendel/">www.dieguten.koeln</a></p> http://172.105.249.169:9000/notes/1549663662161http://172.105.249.169:9000/notes/1549663662161 Fri, 08 Feb 2019 22:07:42 +0000 micro <p>&ldquo;if open source plays a role in your business, giving back — either through upstream contributions or membership in an open source software foundation — is an investment in the quality and sustainability of the projects you rely on&rdquo; <a href="https://blogs.eclipse.org/post/thabang-mashologu/open-source-can-you-afford-not-get-involved">blogs.eclipse.org</a></p> http://172.105.249.169:9000/notes/1549563516260http://172.105.249.169:9000/notes/1549563516260 Thu, 07 Feb 2019 18:18:36 +0000 micro <p>Neue Piktogrammkette auf der Venloer Str. <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/20321/index.html">www.stadt-koeln.de</a> und Grünpfeile für Fahrräder <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/20320/index.html">www.stadt-koeln.de</a> 🚲</p> http://172.105.249.169:9000/notes/1548766198893http://172.105.249.169:9000/notes/1548766198893 Tue, 29 Jan 2019 12:49:58 +0000 micro <p>&ldquo;a version of WEMI that is not tied to library catalog concepts could provide an interesting core of classes for metadata that describes creative or created resources.&rdquo; <a href="http://kcoyle.blogspot.com/2019/01/frbr-without-fr-or-br.html">kcoyle.blogspot.com</a></p> http://172.105.249.169:9000/notes/1548716796137http://172.105.249.169:9000/notes/1548716796137 Mon, 28 Jan 2019 23:06:36 +0000 micro <p>&ldquo;Bildschirme und bedrucktes Papier sind als Lesemedien nicht gleichwertig […] Da das Bildschirmlesen weiter zunehmen wird, müssen wir dringend Möglichkeiten finden, das tiefe Lesen langer Texte in Bildschirmumgebungen zu erleichtern.&rdquo; <a href="https://faz.net/aktuell/feuilleton/buecher/stavanger-erklaerung-von-e-read-zur-zukunft-des-lesens-16000793.html">faz.net</a></p> http://172.105.249.169:9000/notes/1548670692150http://172.105.249.169:9000/notes/1548670692150 Mon, 28 Jan 2019 10:18:12 +0000 micro <p>&ldquo;Traditional blogs might have swung out of favor, as we all discovered the benefits of social media and aggregating platforms, but we think they’re about to swing back in style, as we all discover the real costs and problems brought by such centralization&rdquo; <a href="https://m.signalvnoise.com/signal-v-noise-exits-medium/">m.signalvnoise.com</a></p> http://172.105.249.169:9000/notes/1547763940533http://172.105.249.169:9000/notes/1547763940533 Thu, 17 Jan 2019 22:25:40 +0000 micro <p>&ldquo;#1lib1ref has been used [to] onboard new librarians into the Wikimedia space. The campaign approach is to have a big impact with little efforts by providing basic steps to add references to improve articles of your interest on Wikipedia.&rdquo; <a href="http://1lib1ref.org">1lib1ref.org</a></p> http://172.105.249.169:9000/notes/1547540350125http://172.105.249.169:9000/notes/1547540350125 Tue, 15 Jan 2019 08:19:10 +0000 micro <p>&ldquo;The very format of the blog offers opportunities to experiment with new forms of academic writing and new ways of doing science that give pride of place to openness, sharing and collaboration.&rdquo; <a href="https://hypotheses.org/create-and-manage-your-blog">hypotheses.org</a></p> http://172.105.249.169:9000/notes/1547503524802http://172.105.249.169:9000/notes/1547503524802 Mon, 14 Jan 2019 22:05:24 +0000 micro <p>&ldquo;Very happy to see that Dialog is now out of beta! Dialog is the first Micro.blog app for Android available in Google Play.&rdquo; <a href="http://manton.micro.blog/2019/01/14/dialog-for-microblog.html">manton.micro.blog</a></p> http://172.105.249.169:9000/notes/1547486080941http://172.105.249.169:9000/notes/1547486080941 Mon, 14 Jan 2019 17:14:40 +0000 micro <p>&ldquo;Our team grew considerably in 2018, to eight staff working full-time on Thunderbird. At the beginning of this year we are going to be adding as many as six new members to our team.&rdquo; <a href="https://blog.mozilla.org/thunderbird/2019/01/thunderbird-in-2019/">blog.mozilla.org</a></p> http://172.105.249.169:9000/notes/1546988178762http://172.105.249.169:9000/notes/1546988178762 Tue, 08 Jan 2019 22:56:18 +0000 micro <p>&ldquo;Play 2.6.21 released!&rdquo; <a href="https://blog.playframework.com/play-2-6-21-released/">blog.playframework.com</a> Backing nwbib.de and our lobid.org services since 2013. — &ldquo;Play is based on a lightweight, stateless, web-friendly architecture and features predictable and minimal resource consumption&rdquo;</p> http://172.105.249.169:9000/notes/1546988008053http://172.105.249.169:9000/notes/1546988008053 Tue, 08 Jan 2019 22:53:28 +0000 micro <p>&ldquo;Köln übernimmt elektronische Langzeitarchivierung für Bergisch Gladbach&rdquo; <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/20249/index.html">www.stadt-koeln.de</a> Auf Basis von DiPS.kommunal <a href="https://www.danrw.de/ueber-das-da-nrw/da-nrw-ein-loesungsverbund/">www.danrw.de</a></p> http://172.105.249.169:9000/notes/1546964956094http://172.105.249.169:9000/notes/1546964956094 Tue, 08 Jan 2019 16:29:16 +0000 micro <p>Love to work in settings where &lsquo;will it still work in 50 years?&rsquo; is a reasonable question (about software!)</p> http://172.105.249.169:9000/notes/1546727464040http://172.105.249.169:9000/notes/1546727464040 Sat, 05 Jan 2019 22:31:04 +0000 micro <p>Geek Career Paths <a href="https://www.tbray.org/ongoing/When/201x/2017/02/18/Geek-Career-Paths">www.tbray.org</a> by @timbray <a href="https://twitter.com/ravi_mohan/status/1080791893062103040">twitter.com/ravi_mohan</a></p> http://172.105.249.169:9000/notes/1546557517523http://172.105.249.169:9000/notes/1546557517523 Thu, 03 Jan 2019 23:18:37 +0000 micro <p>Nach dem allgemeinen Überblick zu lobid.org in <a href="https://doi.org/10.11588/ip.2018.1.52445">doi.org</a> jetzt mehr zu lobid.org/gnd: Such-UI, Web-API und OpenRefine-Integration für die Gemeinsame Normdatei (GND) von @dr0ide, @acka47 und mir: <a href="http://informationspraxis.de/2019/01/03/open-peer-review-lobid-gnd-eine-schnittstelle-zur-gemeinsamen-normdatei-fuer-mensch-und-maschine/">informationspraxis.de</a> — im Open Peer Review mit hypothes.is 💬</p> http://172.105.249.169:9000/notes/1546555718600http://172.105.249.169:9000/notes/1546555718600 Thu, 03 Jan 2019 22:48:38 +0000 micro <p>TiddlyWiki, a non-linear personal web notebook, &ldquo;lets you choose where to keep your data, guaranteeing that in the decades to come you will still be able to use the notes you take today.&rdquo; <a href="https://tiddlywiki.com/">tiddlywiki.com</a></p> http://172.105.249.169:9000/notes/1546462086462http://172.105.249.169:9000/notes/1546462086462 Wed, 02 Jan 2019 20:48:06 +0000 micro <p>&ldquo;Mit […] bis zu 50 Prozent der Anschaffungskosten beim Kauf von Lastenrädern möchten wir in Köln tätigen kleinen Unternehmen, Vereinen oder Zusammenschlüssen von Privatpersonen Anreize für einen emissionsfreien Warentransport geben.&rdquo; 🚲 <a href="https://twitter.com/Koeln/status/1080448670124986369">twitter.com/Koeln</a></p> http://172.105.249.169:9000/notes/1546435864589http://172.105.249.169:9000/notes/1546435864589 Wed, 02 Jan 2019 13:31:04 +0000 micro <p>🖐 <a href="https://twitter.com/mozilla/status/1079783753768030216">twitter.com/mozilla</a></p> http://172.105.249.169:9000/notes/1546384081594http://172.105.249.169:9000/notes/1546384081594 Tue, 01 Jan 2019 23:08:01 +0000 micro <p>&ldquo;JavaScript / TypeScript library to query the GND (Gemeinsame Normdatei)&rdquo; using lobid.org/gnd <a href="https://twitter.com/suchmaske/status/1069900048861925376">twitter.com/suchmaske</a></p> http://172.105.249.169:9000/notes/1546368127317http://172.105.249.169:9000/notes/1546368127317 Tue, 01 Jan 2019 18:42:07 +0000 micro <p>Looking for advice on book preservation <a href="https://twitter.com/KentLangley/status/1079501559652700160">twitter.com/KentLangley</a></p> http://172.105.249.169:9000/notes/1546266685084http://172.105.249.169:9000/notes/1546266685084 Mon, 31 Dec 2018 14:31:25 +0000 micro <p>&ldquo;if we are serious about reducing accidental complexity, we should question our self-concept, our idea of what it means to be a software developer&rdquo; <a href="https://danielwestheide.com/blog/2018/12/07/the-complexity-trap.html">danielwestheide.com</a></p> http://172.105.249.169:9000/notes/1545774268589http://172.105.249.169:9000/notes/1545774268589 Tue, 25 Dec 2018 21:44:28 +0000 micro <p>&ldquo;if we are serious about reducing accidental complexity, we should question our self-concept, our idea of what it means to be a software developer&rdquo; <a href="https://dwestheide.github.com/danielwestheide/blog/2018/12/07/the-complexity-trap.html">dwestheide.github.com</a></p> http://172.105.249.169:9000/notes/1545771490995http://172.105.249.169:9000/notes/1545771490995 Tue, 25 Dec 2018 20:58:10 +0000 micro <p>&ldquo;By ‘good’ HTML, I mean semantic HTML, a posh term for choosing the right HTML element for the content. This isn’t a philosophical exercise; it has directly observable practical benefits.&rdquo; <a href="https://www.brucelawson.co.uk/2018/the-practical-value-of-semantic-html/">www.brucelawson.co.uk</a></p> http://172.105.249.169:9000/notes/1545610626287http://172.105.249.169:9000/notes/1545610626287 Mon, 24 Dec 2018 00:17:06 +0000 micro From RDF to JSON with JSON-LD <p>In a <a href="https://github.com/hbz/swib18-workshop">workshop at SWIB18</a>, <a href="https://lobid.org/team">we</a> recently shared our approach to making existing RDF data usable in contexts where JSON is expected. I think it&rsquo;s an accessible way to use RDF data for search, visualization, and integration with existing software. This post is a short tutorial for the first part of that workshop. Check out the <a href="https://hbz.github.io/swib18-workshop/#/">full workshop slides</a> for details, and the <a href="https://github.com/hbz/swib18-workshop#setup">setup instructions</a> if you want to follow the examples.</p><h2>JSON for web APIs</h2><p>So the basic idea is that <a href="https://twobithistory.org/2017/09/21/the-rise-and-rise-of-json.html">JSON is what we want</a> if we provide data on the web, e.g.:</p> <pre><code>$ curl https://api.github.com/repos/hbz/swib18-workshop { &quot;id&quot;: 150073510, &quot;node_id&quot;: &quot;MDEwOlJlcG9zaXRvcnkxNTAwNzM1MTA=&quot;, &quot;name&quot;: &quot;swib18-workshop&quot;, &quot;full_name&quot;: &quot;hbz/swib18-workshop&quot;, &quot;private&quot;: false, &quot;owner&quot;: { &quot;login&quot;: &quot;hbz&quot;, &quot;id&quot;: 6557108, ... </code></pre><p>We can easily access fields like <code>owner.login</code>:</p> <pre><code>$ curl https://api.github.com/repos/hbz/swib18-workshop | jq .owner.login ... &quot;hbz&quot; </code></pre><h2>Serialized RDF as JSON-LD</h2><p>But what if our source data is RDF? That&rsquo;s where <a href="https://json-ld.org/">JSON-LD</a> comes in, which is both usable as an RDF serialization (great for us), and as plain JSON, without knowing about RDF (great for users). So let&rsquo;s convert some RDF to JSON-LD (using works from the Library of Congress):</p> <pre><code>$ jsonld import data.nt &gt; loc.json ... { &quot;@id&quot;: &quot;http://id.loc.gov/resources/works/c000101650&quot;, &quot;http://id.loc.gov/ontologies/bibframe/subject&quot;: [{ &quot;@id&quot;: &quot;http://id.loc.gov/resources/works/101650#Topic650-20&quot; }, ...] }, { &quot;@id&quot;: &quot;http://id.loc.gov/resources/works/101650#Topic650-20&quot;, &quot;@type&quot;: [ &quot;http://id.loc.gov/ontologies/bibframe/Topic&quot;, &quot;http://www.loc.gov/mads/rdf/v1#ComplexSubject&quot; ], &quot;http://www.w3.org/2000/01/rdf-schema#label&quot;: [{ &quot;@value&quot;: &quot;Climatic changes--Europe.&quot; }],... } </code></pre><p>Hm, well yes, JSON, kind of. But no, this is not what we want, which is accessing something like <code>subject.label</code>. We have just a flat array of objects, there is no way to access that specific label directly. At this point, we really have the worst of both worlds: unwieldy URIs as keys from the RDF, and syntactic overhead from JSON.</p><h2>Framed JSON-LD</h2><p>JSON-LD <a href="https://w3c.github.io/json-ld-framing/">framing</a> allows us to frame the way we look at our RDF graph from the perspective of one entity type. This is what we need to get direct access to a specific field like <code>subject.label</code>. The work we&rsquo;re looking at and its subject are not two equally relevant entities in this view, but instead the subject is an attribute of the work. Framing turns the graph into trees, or documents. A frame is itself a JSON object and can look like this:</p> <pre><code>{ &quot;@type&quot;: &quot;http://id.loc.gov/ontologies/bibframe/Work&quot;, &quot;@embed&quot;: &quot;@always&quot; } </code></pre><p>Using this frame, we can frame our serialized RDF: </p> <pre><code>$ jsonld frame -f frame.json loc.json &gt; loc-framed.json ... { &quot;@id&quot;: &quot;http://id.loc.gov/resources/works/c000101650&quot;, &quot;http://id.loc.gov/ontologies/bibframe/subject&quot;: [{ &quot;@id&quot;:&quot;http://id.loc.gov/resources/works/101650#Topic650-20&quot;, &quot;@type&quot;: [ &quot;http://id.loc.gov/ontologies/bibframe/Topic&quot;, &quot;http://www.loc.gov/mads/rdf/v1#ComplexSubject&quot; ], ... &quot;http://www.w3.org/2000/01/rdf-schema#label&quot;: &quot;Climatic changes--Europe.&quot; }, {...}], } </code></pre><p>Conceptually, this is what we want: the actual subject data is emdedded under the work&rsquo;s <code>.../subject</code> field. But it&rsquo;s still not very usable, since the JSON keys are URIs, so we can&rsquo;t do something like <code>subject.label</code>.</p><h2>Compacted JSON-LD</h2><p>That&rsquo;s where the JSON-LD context comes in: the context, like the frame, is itself a JSON object. It defines a mapping of JSON keys to URIs:</p> <pre><code>{ &quot;name&quot;: &quot;http://schema.org/name&quot;, ... } </code></pre><p>With this context, we can <a href="https://w3c.github.io/json-ld-api/#compaction">compact</a> (replace URIs with short keys) or <a href="https://w3c.github.io/json-ld-api/#expansion">expand</a> (replace short keys with URIs) our JSON-LD. (For complex data, <a href="https://hbz.github.io/swib18-workshop/#/60">creating the context</a> can be a major task). We&rsquo;re going to use compaction to turn our URIs into nice, usable keys:</p> <pre><code>$ jsonld compact -c context.json loc-framed.json &gt; loc-compact.json ... { &quot;@id&quot;: &quot;http://id.loc.gov/resources/works/c000101650&quot;, &quot;subject&quot;: [ { &quot;id&quot;: &quot;http://id.loc.gov/resources/works/101650#Topic650-20&quot;, &quot;type&quot;: [ &quot;Topic&quot;, &quot;ComplexSubject&quot; ], &quot;label&quot;: &quot;Climatic changes--Europe.&quot; } ], ... } </code></pre><p>With this final format, we can now easily access specific fields directly, like the <code>id</code>, <code>type</code>, or <code>label</code> of a <code>subject</code> (subjects are actually multiple objects stored in an array, thus the <code>subject[]</code> notation):</p> <pre><code>$ cat loc-compact.json | jq .subject[].label &quot;Climatic changes--Europe.&quot; &quot;Climatic changes--Social aspects--Europe.&quot; &quot;Civilization, Medieval.&quot; </code></pre><p>And at this point, we actually have the best of both worlds: RDF-compatible linked data, and useful, practical JSON.</p><h2>The JSON view</h2><p>To add perspective, what we&rsquo;ve seen here was the RDF-first approach to JSON-LD, which involved multiple steps to create usable JSON-LD: first serialize RDF as JSON-LD, then frame it, finally compact it. The JSON-first approach to JSON-LD is very different: take some useful JSON, add IDs and context:</p> <pre><code>{ &quot;@id&quot;: &quot;https://github.com/users/hbz&quot;, &quot;type&quot;: &quot;Organization&quot;, &quot;name&quot;: &quot;hbz&quot;, &quot;blog&quot;: &quot;https://www.hbz-nrw.de&quot;, &quot;@context&quot;: { &quot;type&quot;: &quot;@type&quot;, &quot;name&quot;: &quot;https://schema.org/name&quot;, &quot;blog&quot;: { &quot;@id&quot;: &quot;https://schema.org/url&quot;, &quot;@type&quot;: &quot;@id&quot; }, &quot;Organization&quot;: &quot;https://schema.org/Organization&quot; } } </code></pre><p>You can paste a document like above into the <a href="https://json-ld.org/playground/">JSON-LD playground</a>, where you can tweak the input and see different output formats.</p><h2>Using JSON</h2><p>The resulting JSON data can be used in many ways. In our workshop we <a href="https://hbz.github.io/swib18-workshop/#/80">indexed it in Elasticsearch</a>, <a href="https://hbz.github.io/swib18-workshop/#/111">accessed it from a web app</a>, and used it <a href="https://hbz.github.io/swib18-workshop/#/141">in Kibana and OpenRefine</a>. JSON-LD provides a bridge for using RDF data in such contexts.</p> http://172.105.249.169:9000/notes/from-rdf-to-json-with-json-ldhttp://172.105.249.169:9000/notes/from-rdf-to-json-with-json-ld Sat, 22 Dec 2018 00:00:01 +0000 webprogramming <p>Wrote up the first part of our #swib18 workshop as a short tutorial: From RDF to JSON with JSON-LD <a href="http://fsteeg.com/notes/from-rdf-to-json-with-json-ld">fsteeg.com</a></p> http://172.105.249.169:9000/notes/1545481255322http://172.105.249.169:9000/notes/1545481255322 Sat, 22 Dec 2018 12:20:55 +0000 micro <p>&ldquo;Instead of continuous development, learning &amp; optimizing along the way, we’d build big sites, […] then start from scratch and do it again. &amp; again. [they] still act as if maybe this time will be the last […] redesign, this time they’ll get it right&rdquo; <a href="https://medium.com/@caw_/maintaining-the-future-of-museums-d72631f6905b">medium.com</a></p> http://172.105.249.169:9000/notes/1545168853748http://172.105.249.169:9000/notes/1545168853748 Tue, 18 Dec 2018 21:34:13 +0000 micro <p>&ldquo;Maintaining the Future of Museums. A slideshow on innovation and infrastructure&rdquo; <a href="https://twitter.com/anjacks0n/status/1073723214822555648">twitter.com/anjacks0n</a></p> http://172.105.249.169:9000/notes/1545168551303http://172.105.249.169:9000/notes/1545168551303 Tue, 18 Dec 2018 21:29:11 +0000 micro <p>&ldquo;Ein freies und sicheres Web für alle – das Internet [muss] als globale Ressource für alle geschützt werden. Mozilla, das Non-Profit, das den Browser Firefox entwickelt, setzt sich schon seit über 20 Jahren genau dafür ein.&rdquo; <a href="https://www.zeit.de/angebote/mozilla/index">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1544434798851http://172.105.249.169:9000/notes/1544434798851 Mon, 10 Dec 2018 09:39:58 +0000 micro <p>&ldquo;The topics of talks and workshops at SWIB revolve around opening data, linking data and creating tools and software for LOD production scenarios.&rdquo; <a href="https://twitter.com/swibcon/status/1070700120528818176">twitter.com/swibcon</a></p> http://172.105.249.169:9000/notes/1544290092754http://172.105.249.169:9000/notes/1544290092754 Sat, 08 Dec 2018 17:28:12 +0000 micro <p>&ldquo;Zotero is an open-source project […] used by millions of students, scholars, scientists, and researchers […] to collect, organize, cite, and share their research […] We’re a small, remote-only, international team […] building our first iOS app&rdquo; <a href="https://twitter.com/zotero/status/1069690493053726720">twitter.com/zotero</a></p> http://172.105.249.169:9000/notes/1544128060911http://172.105.249.169:9000/notes/1544128060911 Thu, 06 Dec 2018 20:27:40 +0000 micro <p>Aha-Erlebnis für mich in unserer #gndcon Session: es geht ja eigentlich vor allem um die Objekte, die mit der GND erschlossen werden, wie bekommen wir die dazu? – im Zug mit @acka47 überlegt: vielleicht mit Linked Data Notifications <a href="https://www.w3.org/TR/ldn/">https://www.w3.org/TR/ldn/</a> <a href="https://twitter.com/acka47/status/1069899356239814656">https://twitter.com/acka47</a></p> http://172.105.249.169:9000/notes/1544101906025http://172.105.249.169:9000/notes/1544101906025 Thu, 06 Dec 2018 13:11:46 +0000 micro <p>War ganz fasziniert vom Spektrum in unserer #gndcon Session: Von &lsquo;lasst uns in einem graphischen Editor die GND per drag&rsquo;n&rsquo;drop bearbeiten&rsquo; bis &lsquo;wir haben 800 Seiten Regelwerk und jetzt soll uns auch noch Software was vorschreiben&rsquo; <a href="https://twitter.com/Stealitseal/status/1069886481408425985">https://twitter.com/Stealitseal</a></p> http://172.105.249.169:9000/notes/1544101272024http://172.105.249.169:9000/notes/1544101272024 Thu, 06 Dec 2018 13:01:12 +0000 micro <p>Mein Eindruck nach der #gndcon: diese GND plus könnte richtig toll werden <a href="https://twitter.com/fdm_bayern/status/1069541011943235584">https://twitter.com/fdm_bayern</a></p> http://172.105.249.169:9000/notes/1544099875250http://172.105.249.169:9000/notes/1544099875250 Thu, 06 Dec 2018 12:37:55 +0000 micro <p>Very cool #swib18 talk. Great tool, and good reminder that it&rsquo;s not about getting a high F-score, but about applications. Encouraged me to pick up my own experiments with classification of nwbib.de data <a href="https://github.com/fsteeg/python-data-analysis">github.com/fsteeg</a> <a href="https://twitter.com/zuphilip/status/1067782439551016961">twitter.com/zuphilip</a></p> http://172.105.249.169:9000/notes/1544038586492http://172.105.249.169:9000/notes/1544038586492 Wed, 05 Dec 2018 19:36:26 +0000 micro <p>&ldquo;Start der Open Data Region Rheinland: Die Städte Bonn, Düsseldorf, Köln sowie die Kommunale Datenverarbeitungszentrale Rhein-Erft-Rur starten eine interkommunale Kooperation zum Themenbereich Open Data.&rdquo; <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/mitteilungen/20055/index.html">www.stadt-koeln.de</a></p> http://172.105.249.169:9000/notes/1542318440016http://172.105.249.169:9000/notes/1542318440016 Thu, 15 Nov 2018 21:47:20 +0000 micro <p>&ldquo;Open Access is important to me because I have experienced first hand, on a day to day basis, the frustration of not being able to keep up to date with recent discoveries and offer patients up-to-date evidence-based treatment.&rdquo; <a href="https://blog.okfn.org/2018/11/12/open-in-order-to-ensure-healthy-lives-and-promote-well-being-for-all-at-all-ages/">blog.okfn.org</a></p> http://172.105.249.169:9000/notes/1542095003512http://172.105.249.169:9000/notes/1542095003512 Tue, 13 Nov 2018 07:43:23 +0000 micro <p>&ldquo;Die Deutsche Nationalbibliothek (DNB) und Wikimedia Deutschland verbindet eine inzwischen zehnjährige Zusammenarbeit rund um die Gemeinsame Normdatei (GND).&rdquo; Normdaten als &ldquo;Rückgrat eines maschinenlesbaren, semantischen Netzes der Kultur und Wissenschaft&rdquo; <a href="https://blog.wikimedia.de/2018/11/02/gemeinsam-wieder-neuland-betreten-die-deutsche-nationalbibliothek-und-wikimedia-deutschland/">blog.wikimedia.de</a></p> http://172.105.249.169:9000/notes/1541595630466http://172.105.249.169:9000/notes/1541595630466 Wed, 07 Nov 2018 13:00:30 +0000 micro <p>&ldquo;Virtuelle Deutsche Landesbibliographie (VDL) in neuem Design&rdquo;. Die VDL erlaubt &ldquo;parallele Suchanfrage[n] in allen deutschen Landesbibliographien&rdquo; <a href="http://zkbw.blogspot.com/2018/11/virtuelle-deutsche-landesbibliographie.html">zkbw.blogspot.com</a> 🔎📚💞</p> http://172.105.249.169:9000/notes/1541539366955http://172.105.249.169:9000/notes/1541539366955 Tue, 06 Nov 2018 21:22:46 +0000 micro <p>&ldquo;Expecting people to learn skills like TDD solely in their free time will cut off a large section of software developers from progressing and becoming more productive. We need those developers too!&rdquo; <a href="https://www.praqma.com/stories/2who-pays-for-upskilling-soft-developers/">www.praqma.com</a></p> http://172.105.249.169:9000/notes/1541362155536http://172.105.249.169:9000/notes/1541362155536 Sun, 04 Nov 2018 20:09:15 +0000 micro <p>Graphviz DOT examples, visualized with JavaFX-based GEF in the Eclipse IDE: state charts, abstract syntax trees, git workflows, and plugin dependencies <a href="https://blogs.itemis.com/en/adding-gef-dot-based-visualization-support-to-the-eclipse-ide">blogs.itemis.com</a></p> http://172.105.249.169:9000/notes/1539544683655http://172.105.249.169:9000/notes/1539544683655 Sun, 14 Oct 2018 19:18:03 +0000 micro <p>Mit Bäumchen im Rad bekommt man übrigens fast noch mehr freundliche Blicke als mit Kind #radlandjetzt 🚲</p> http://172.105.249.169:9000/notes/1539184113987http://172.105.249.169:9000/notes/1539184113987 Wed, 10 Oct 2018 15:08:33 +0000 micro <p>Das Deutsche Institut für Medizinische Dokumentation und Information (DIMDI) in Köln sucht 2 IT-Projektleiter*innen und 1 Projektkoordinator*in (unbefristet, E14 TVöD) <a href="https://www.dimdi.de/dynamic/de/newsletter/vorlage-newsletter/Stellenangebote-IT-Projektleiter-innen-und-IT-Projektkoordinator-in/">www.dimdi.de</a></p> http://172.105.249.169:9000/notes/1539087752948http://172.105.249.169:9000/notes/1539087752948 Tue, 09 Oct 2018 12:22:32 +0000 micro <p>&ldquo;Die Justiz [hat] den Konzern in die Schranken gewiesen und die schwarz-gelbe Landesregierung blamiert, die mit einem für Nordrhein-Westfalen historischen Großaufgebot der Polizei ein paar Dutzend Baumbewohner vertreiben ließ.&rdquo; <a href="https://www.zeit.de/gesellschaft/2018-10/hambacher-forst-demonstration-rodung-rwe-armin-laschet/komplettansicht">www.zeit.de</a> 🌳</p> http://172.105.249.169:9000/notes/1538863308503http://172.105.249.169:9000/notes/1538863308503 Sat, 06 Oct 2018 22:01:48 +0000 micro <p>Creative Commons is looking for a new Director of Engineering for CC search, the CC catalog and API to &ldquo;unite hundreds of millions of records for works and metadata, multiple platforms, diverse media types, and a variety of user communities&rdquo; <a href="https://creativecommons.org/2018/10/04/we-are-seeking-a-new-director-of-engineering/">creativecommons.org</a></p> http://172.105.249.169:9000/notes/1538680594750http://172.105.249.169:9000/notes/1538680594750 Thu, 04 Oct 2018 19:16:34 +0000 micro <p>&ldquo;The team at the Internet Archive has fixed 9 million broken links on Wikipedia by scanning pages for broken links and updating them to point to the Wayback Machine’s copy&rdquo; <a href="http://manton.micro.blog/2018/10/04/internet-archive-fixing.html">manton.micro.blog</a></p> http://172.105.249.169:9000/notes/1538666705291http://172.105.249.169:9000/notes/1538666705291 Thu, 04 Oct 2018 15:25:05 +0000 micro <p>&ldquo;Eigene Radspur zwischen Lindenstraße und Zülpicher Platz: Die Stadt Köln hat auf einem ersten Teilabschnitt im Kernbereich der Kölner Ringe [in beiden Richtungen] eine Autospur in einen Radfahrstreifen umgewandelt.&rdquo; <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/pilotstrecke-auf-den-ringen-freigegeben">www.stadt-koeln.de</a> 🚲</p> http://172.105.249.169:9000/notes/1538666248761http://172.105.249.169:9000/notes/1538666248761 Thu, 04 Oct 2018 15:17:28 +0000 micro <p>Wir haben mal zusammengetragen, wie und warum wir in lobid.org Web-APIs auf Basis von JSON-LD als Infrastruktur für Bibliotheken anbieten <a href="http://informationspraxis.de/2018/10/01/open-peer-review-lobid-dateninfrastruktur-fuer-bibliotheken/">informationspraxis.de</a> — im Open Peer Review mit hypothes.is 💬</p> http://172.105.249.169:9000/notes/1538516742600http://172.105.249.169:9000/notes/1538516742600 Tue, 02 Oct 2018 21:45:42 +0000 micro <p>&ldquo;Die angedrohte Rodung im Hambacher Wald durch den Energiekonzern RWE rückt näher. Deshalb ruft der BUND gemeinsam mit Campact, Greenpeace und den Naturfreunden Deutschlands zu einer Demonstration am Hambacher Wald am 6. Oktober auf.&rdquo; <a href="https://www.bund.net/nc/mitmachen/demo-wald-retten-kohle-stoppen/">www.bund.net</a> 🌳</p> http://172.105.249.169:9000/notes/1538515552647http://172.105.249.169:9000/notes/1538515552647 Tue, 02 Oct 2018 21:25:52 +0000 micro <p>&ldquo;Practitioners would benefit from being able to identify overhyped technology. […] In contrast, academia has difficulty selling its inventions. […] Activities such as releasing code and working with practitioners are not adequately rewarded in academia.&rdquo; <a href="https://queue.acm.org/detail.cfm?id=3136559">queue.acm.org</a></p> http://172.105.249.169:9000/notes/1538515322038http://172.105.249.169:9000/notes/1538515322038 Tue, 02 Oct 2018 21:22:02 +0000 micro <p>Aus aktuellem Anlass: &ldquo;Schafft die Wahlumfragen ab! — Wahlprognosen sind nicht nur oft falsch, sie entpolitisieren die Gesellschaft und manipulieren die Wähler. So hart es klingt: Man sollte besser auf sie verzichten.&rdquo; <a href="https://www.zeit.de/politik/deutschland/2017-09/meinungsforschung-wahlumfragen-prognosen-einflussnahme-fuenf-fisch-d17">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1537614516848http://172.105.249.169:9000/notes/1537614516848 Sat, 22 Sep 2018 11:08:36 +0000 micro <p>The Journal of Open Source Software is looking for reviewers <a href="https://twitter.com/yoyehudi/status/1038544532059705345">twitter.com/yoyehudi</a></p> http://172.105.249.169:9000/notes/1537184662458http://172.105.249.169:9000/notes/1537184662458 Mon, 17 Sep 2018 11:44:22 +0000 micro <p>&ldquo;Das Geschäft mit Hass, Lügen, Propaganda. – Die zerstörerische Wirkung unregulierter Mediengiganten. […] Filterblasen voller Wut, die ein düsteres Zerrbild der Realität liefern.&rdquo; <a href="https://www2.sosmitmensch.at/das-geschaeft-mit-hass-luegen-propaganda">www2.sosmitmensch.at</a></p> http://172.105.249.169:9000/notes/1536941006701http://172.105.249.169:9000/notes/1536941006701 Fri, 14 Sep 2018 16:03:26 +0000 micro <p>&lsquo;Unter dem Motto &ldquo;Gemeinsam zeigt Köln Haltung - für Aufnehmen, Hierbleiben, Solidarität!&rdquo; demonstriert am Sonntag ein breites Bündnis Kölner Organisation für die Integration von Flüchtlingen und gegen Ausgrenzung und Hetze.&rsquo; <a href="https://koeln.de/koeln/nachrichten/lokales/grosses-programm-zur-demonstration-fuer-mehr-solidaritaet-in-koeln_1100269.html">koeln.de</a></p> http://172.105.249.169:9000/notes/1536851437822http://172.105.249.169:9000/notes/1536851437822 Thu, 13 Sep 2018 15:10:37 +0000 micro <p>&ldquo;libraries have an image problem: they are still linked too closely with the book. In the public perception, newly acquired, digital skills in search engine technology, for example, are not associated with the role of libraries&rdquo; <a href="https://www.zbw-mediatalk.eu/2018/09/gbv-association-conference-2018-how-libraries-embrace-the-digital-transformation/">www.zbw-mediatalk.eu</a></p> http://172.105.249.169:9000/notes/1536683062143http://172.105.249.169:9000/notes/1536683062143 Tue, 11 Sep 2018 16:24:22 +0000 micro <p>&ldquo;YouTube could become &lsquo;one of the most powerful radicalizing instruments of the 21st century.&rsquo; […] YouTube’s algorithm systemically directs users toward extremist content&rdquo; <a href="https://www.nytimes.com/2018/09/07/world/europe/youtube-far-right-extremism.html">www.nytimes.com</a></p> http://172.105.249.169:9000/notes/1536662944599http://172.105.249.169:9000/notes/1536662944599 Tue, 11 Sep 2018 10:49:04 +0000 micro <p>&ldquo;Irrende, abwegige, extreme Gesinnung, Unzufriedenheit und Zorn lassen sich nicht durch rationale Gegenrede ändern. Dafür bedarf es der Lösung jener konkreten Probleme, die das Gefühl ausgelöst haben, abgehängt, ausgegrenzt, benachteiligt zu sein.&rdquo; <a href="https://www.zeit.de/politik/deutschland/2018-09/grosse-koalition-migration-innere-sicherheit-rente-loesungen-5vor8">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1536661355711http://172.105.249.169:9000/notes/1536661355711 Tue, 11 Sep 2018 10:22:35 +0000 micro <p>Twitter richtig herum (älteste zuerst) und (meist) ein paar Tage in der Vergangenheit zu lesen (mit Tweetbot in meinem Fall) hilft wirklich enorm, sich erstmal selbst eine Sicht der Dinge zu bilden, bevor einem die Timeline sagt, wie alles einzuordnen ist.</p> http://172.105.249.169:9000/notes/1536585975860http://172.105.249.169:9000/notes/1536585975860 Mon, 10 Sep 2018 13:26:15 +0000 micro <p>&ldquo;1. What did you learn last month? 2. What tool helped you the most? 3. What did you find the most inspiring?&rdquo; <a href="https://twitter.com/etorreborre/status/1037967458601238528">twitter.com/etorreborre</a></p> http://172.105.249.169:9000/notes/1536584133120http://172.105.249.169:9000/notes/1536584133120 Mon, 10 Sep 2018 12:55:33 +0000 micro <p>&ldquo;I think there are 4 parts to finding our way out of this mess with massive social networks […] If you are frustrated with the state of social networks, I recommend blogging more.&rdquo; <a href="http://manton.micro.blog/2018/09/07/the-way-out.html">manton.micro.blog</a></p> http://172.105.249.169:9000/notes/1536355134924http://172.105.249.169:9000/notes/1536355134924 Fri, 07 Sep 2018 21:18:54 +0000 micro <p>&ldquo;Gitpod is an online IDE which can be launched from any GitHub page. Simply prefix any GitHub-URL with “https://gitpod.io#” or use our browser extension that adds a button to GitHub pages. […] based on Theia, an open-source project&rdquo; <a href="https://medium.com/gitpod/gitpod-gitpod-online-ide-for-github-6296b907a886">medium.com</a></p> http://172.105.249.169:9000/notes/1535817329049http://172.105.249.169:9000/notes/1535817329049 Sat, 01 Sep 2018 15:55:29 +0000 micro <p>Es wäre ja wirklich kein schlechter Zeitpunkt dass mal ein paar (Millionen) Leute für eine /bessere/ Welt auf die Straße gehen. Vielleicht ja über aufstehen.de #aufstehen</p> http://172.105.249.169:9000/notes/1535575480834http://172.105.249.169:9000/notes/1535575480834 Wed, 29 Aug 2018 20:44:40 +0000 micro <p>&ldquo;wir [laden] Sie ein, an der Strategie für das digitale Nordrhein-Westfalen mitzuwirken. Vom 27. August bis zum 7. Oktober 2018 können Sie hier aktiv Ihre Ideen und Meinungen zur Digitalstrategie einbringen.&rdquo; <a href="https://www.digitalstrategie.nrw">www.digitalstrategie.nrw</a></p> http://172.105.249.169:9000/notes/1535544236198http://172.105.249.169:9000/notes/1535544236198 Wed, 29 Aug 2018 12:03:56 +0000 micro <p>&ldquo;GND reconciliation for OpenRefine&rdquo; <a href="https://twitter.com/lobidOrg/status/1034034914256211968">twitter.com/lobidOrg</a></p> http://172.105.249.169:9000/notes/1535373195111http://172.105.249.169:9000/notes/1535373195111 Mon, 27 Aug 2018 12:33:15 +0000 micro <p>&ldquo;Open, extensible, feature-rich chat, proven through years of use. — All of the IRCv3 extensions are backwards-compatible with older IRC clients, and older IRC servers.&rdquo; <a href="https://ircv3.net/">ircv3.net</a></p> http://172.105.249.169:9000/notes/1535310403249http://172.105.249.169:9000/notes/1535310403249 Sun, 26 Aug 2018 19:06:43 +0000 micro <p>Oh did I mention micro.blog today? <a href="http://fsteeg.com/notes/1535228483897">fsteeg.com</a> <a href="https://twitter.com/simonw/status/1030865818739863554">twitter.com/simonw</a></p> http://172.105.249.169:9000/notes/1535229691750http://172.105.249.169:9000/notes/1535229691750 Sat, 25 Aug 2018 20:41:31 +0000 micro <p>Independent microblogs 💞 <a href="http://help.micro.blog/2015/why-i-created-this/">help.micro.blog</a></p> http://172.105.249.169:9000/notes/1535228483897http://172.105.249.169:9000/notes/1535228483897 Sat, 25 Aug 2018 20:21:23 +0000 micro <p>SWIB workshops are usually booked out early, register soon for full #swib18 workshop choice <a href="https://twitter.com/lobidOrg/status/1030021579772751872">twitter.com/lobidOrg</a></p> http://172.105.249.169:9000/notes/1534522998454http://172.105.249.169:9000/notes/1534522998454 Fri, 17 Aug 2018 16:23:18 +0000 micro <p>Themenwoche RSS <a href="https://twitter.com/lobidOrg/status/1029694942778675205">twitter.com/lobidOrg</a></p> http://172.105.249.169:9000/notes/1534333510944http://172.105.249.169:9000/notes/1534333510944 Wed, 15 Aug 2018 11:45:10 +0000 micro <p>Freie Fahrt für freie Bürger #thisiscologne #radlandjetzt 🚲</p><p><a href="http://fsteeg.com/files/micropub-1534322212765-image.jpg"><img src="http://fsteeg.com/files/micropub-1534322212765-image.jpg" alt="http://fsteeg.com/files/micropub-1534322212765-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1534322212836http://172.105.249.169:9000/notes/1534322212836 Wed, 15 Aug 2018 08:36:52 +0000 micro <p>&ldquo;ob Medienmensch, Ärztin oder Friseur - jeder, der sich für Nachrichten interessiert, regelmäßig Online-Medien besucht oder Blogs liest, spart mit RSS Klicks und ist besser informiert.&rdquo; — Darum sollten Sie RSS nutzen <a href="https://www.sueddeutsche.de/digital/rss-reader-nachrichten-1.4091261">www.sueddeutsche.de</a></p> http://172.105.249.169:9000/notes/1534253960391http://172.105.249.169:9000/notes/1534253960391 Tue, 14 Aug 2018 13:39:20 +0000 micro <p>&ldquo;If you choose to withstand the pressure to give up your own website in favour of a pure social network presence, then you already support an open web […] do the next step and liberate your news headline distribution from the social networks as well.&rdquo; <a href="https://mg.guelker.eu/saverss/">mg.guelker.eu</a></p> http://172.105.249.169:9000/notes/1534200734226http://172.105.249.169:9000/notes/1534200734226 Mon, 13 Aug 2018 22:52:14 +0000 micro <p>&ldquo;RSS and Atom are threatened by Facebook and Twitter as more and more web sites either entirely disappear in favour of social network pages, or website owners choose to only notify their readers via those social networks&rdquo; <a href="https://mg.guelker.eu/saverss/">Save RSS!</a></p> http://172.105.249.169:9000/notes/1534196485061http://172.105.249.169:9000/notes/1534196485061 Mon, 13 Aug 2018 21:41:25 +0000 micro <p>&ldquo;Die neue Radspur [zwischen Nord-Süd-Fahrt und Neumarkt] ist das mittlerweile sechste Vorhaben aus dem Radverkehrskonzept Innenstadt, das umgesetzt wurde.&rdquo; <a href="https://www.stadt-koeln.de/politik-und-verwaltung/presse/neuer-radfahrstreifen-auf-der-ost-west-achse">www.stadt-koeln.de</a> #radlandjetzt 🚲</p> http://172.105.249.169:9000/notes/1533762358372http://172.105.249.169:9000/notes/1533762358372 Wed, 08 Aug 2018 21:05:58 +0000 micro <p>&ldquo;an event where IT staff, developers, librarians, and researchers from all over the world meet and mingle and learn from each other&rdquo; <a href="https://twitter.com/swibcon/status/1026461085581369346">twitter.com/swibcon</a> #swib18</p> http://172.105.249.169:9000/notes/1533677339132http://172.105.249.169:9000/notes/1533677339132 Tue, 07 Aug 2018 21:28:59 +0000 micro <p>&ldquo;Where Vim Came From&rdquo; <a href="https://twobithistory.org/2018/08/05/where-vim-came-from.html">twobithistory.org</a></p> http://172.105.249.169:9000/notes/1533675684080http://172.105.249.169:9000/notes/1533675684080 Tue, 07 Aug 2018 21:01:24 +0000 micro <p>&ldquo;Attackers who attempt to find and exploit bugs in software will, with high probability, find an intentionally placed non-exploitable bug and waste precious resources in trying to build a working exploit.&rdquo; — Deterring Attackers by Making Software Buggier <a href="https://arxiv.org/abs/1808.00659">arxiv.org</a></p> http://172.105.249.169:9000/notes/1533631634208http://172.105.249.169:9000/notes/1533631634208 Tue, 07 Aug 2018 08:47:14 +0000 micro <p>&ldquo;41% of the linked data projects/services described in 2018 reported using Wikidata as a source they consumed, versus just 9% of the projects/services described in 2015.&rdquo; — The rise of Wikidata as a linked data source <a href="http://hangingtogether.org/?p=6775">hangingtogether.org</a></p> http://172.105.249.169:9000/notes/1533566318821http://172.105.249.169:9000/notes/1533566318821 Mon, 06 Aug 2018 14:38:38 +0000 micro <p>Java ❤️ <a href="https://twitter.com/starbuxman/status/1023955437899509760">twitter.com/starbuxman</a></p> http://172.105.249.169:9000/notes/1533229081431http://172.105.249.169:9000/notes/1533229081431 Thu, 02 Aug 2018 16:58:01 +0000 micro <p>You know you&rsquo;re working on the right stuff when you add RSS support to a union catalog <a href="https://twitter.com/lobidOrg/status/1025015324595433472">twitter.com/lobidOrg</a></p> http://172.105.249.169:9000/notes/1533226645811http://172.105.249.169:9000/notes/1533226645811 Thu, 02 Aug 2018 16:17:25 +0000 micro <p>Programming, where so many opposites are true at the same time</p><p><a href="http://fsteeg.com/files/micropub-1533127021702-image.jpg"><img src="http://fsteeg.com/files/micropub-1533127021702-image.jpg" alt="http://fsteeg.com/files/micropub-1533127021702-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1533127022180http://172.105.249.169:9000/notes/1533127022180 Wed, 01 Aug 2018 12:37:02 +0000 micro <p>&ldquo;wo die wirklichen Probleme in den Wissenschaften liegen: In den einseitig ausgerichteten Anerkennungsstrukturen und -kulturen an Hochschulen und Universitäten.&rdquo; <a href="https://www.zeit.de/wissen/2018-07/fake-science-wissenschaft-publikation-zeitschrift/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1533053320548http://172.105.249.169:9000/notes/1533053320548 Tue, 31 Jul 2018 16:08:40 +0000 micro <p>&ldquo;Programming could be much much easier most of the time. This unnecessary difficulty wastes the effort of professional programmers, but worse, prevents many people from programming at all.&rdquo; <a href="https://alarmingdevelopment.org/?p=1173">alarmingdevelopment.org</a></p> http://172.105.249.169:9000/notes/1533030686721http://172.105.249.169:9000/notes/1533030686721 Tue, 31 Jul 2018 09:51:26 +0000 micro <p>RSS support in library catalogs: &ldquo;This may be more useful than you imagine, because RSS in library catalogues commonly hooks in to searches: effectively it allows you to subscribe to a particular set of search parameters.&rdquo; <a href="https://www.hughrundle.net/2018/03/25/watching-the-feeds/">www.hughrundle.net</a></p> http://172.105.249.169:9000/notes/1532940159417http://172.105.249.169:9000/notes/1532940159417 Mon, 30 Jul 2018 08:42:39 +0000 micro <p>&ldquo;Archäologen entdecken in Köln älteste Bibliothek Deutschlands&rdquo; <a href="https://www.ksta.de/kultur/bei-bauarbeiten-archaeologen-entdecken-in-koeln-aelteste-bibliothek-deutschlands-31008560">www.ksta.de</a></p> http://172.105.249.169:9000/notes/1532678473943http://172.105.249.169:9000/notes/1532678473943 Fri, 27 Jul 2018 08:01:13 +0000 micro <p>&ldquo;it is crucial that universities take back ownership of what they produce. Every single researcher can contribute, simply by making all of their own papers available on their institutional or subject repositories (e.g., arxiv.org)&rdquo; <a href="https://avandeursen.com/2018/07/23/the-battle-for-affordable-open-access/">avandeursen.com</a></p> http://172.105.249.169:9000/notes/1532530336468http://172.105.249.169:9000/notes/1532530336468 Wed, 25 Jul 2018 14:52:16 +0000 micro <p>&ldquo;Beide Spektren versuchen bewusst das soziale Miteinander in (post)migrantischen Gesellschaften für ihre Zwecke zu unterminieren.&rdquo; <a href="https://www.idz-jena.de/forschungsprojekte/interaktionsdynamiken-islamistisch-und-rassistisch-begruendeter-demokratie-und-menschenfeindlichkeit/">www.idz-jena.de</a></p> http://172.105.249.169:9000/notes/1532528303788http://172.105.249.169:9000/notes/1532528303788 Wed, 25 Jul 2018 14:18:23 +0000 micro <p>&ldquo;Die sind mit uns aufgewachsen, haben mit uns zusammen auf dem Pausenhof gespielt, wir saßen in denselben Klassenzimmern. Sie machen keine Unterschiede, weil sie selbst keine zwischen Deutschen und Deutschtürken erkennen.&rdquo; ✨ <a href="https://www.zeit.de/sport/2018-07/mesut-oezil-amateurfussballer-vorbild/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1532527677705http://172.105.249.169:9000/notes/1532527677705 Wed, 25 Jul 2018 14:07:57 +0000 micro <p>&ldquo;Sprechen Sie uns an, wenn Sie sich in der USB sexuell belästigt fühlen. […] Sie sollen sich bei uns sicher fühlen und ungestört lernen können!&rdquo; <a href="https://www.ub.uni-koeln.de/res/aktuell/belaestigung/index_ger.html">www.ub.uni-koeln.de</a></p> http://172.105.249.169:9000/notes/1532526907707http://172.105.249.169:9000/notes/1532526907707 Wed, 25 Jul 2018 13:55:07 +0000 micro <p>&ldquo;In short, the library has always been a place where informational and social infrastructures intersect within a physical infrastructure that (ideally) supports that program.&rdquo; <a href="https://placesjournal.org/article/library-as-infrastructure/">placesjournal.org</a></p> http://172.105.249.169:9000/notes/1532379640559http://172.105.249.169:9000/notes/1532379640559 Mon, 23 Jul 2018 21:00:40 +0000 micro <p>Mein Lieblingswort vom Kind, ausgiebig verwendet im Alter von 2–4 (wird langsam weniger): &lsquo;wiesoeh&rsquo;, verwendet wie &lsquo;sowieso&rsquo; und &lsquo;eh&rsquo;, z.B.: das hab ich ja wiesoeh schon gesehen <a href="https://twitter.com/Dudenverlag/status/1020941562476363777">twitter.com/Dudenverlag</a></p> http://172.105.249.169:9000/notes/1532372215964http://172.105.249.169:9000/notes/1532372215964 Mon, 23 Jul 2018 18:56:55 +0000 micro <p>&ldquo;Sherlock Holmes stories have done more damage to people&rsquo;s understanding of human intelligence than anyone other than René Descartes.&rdquo; <a href="http://www.shirky.com/writings/herecomeseverybody/semantic_syllogism.html">www.shirky.com</a></p> http://172.105.249.169:9000/notes/1532089205588http://172.105.249.169:9000/notes/1532089205588 Fri, 20 Jul 2018 12:20:05 +0000 micro <p>&ldquo;This post will walk you through the simplest way to get started sending webmentions to other sites […] We&rsquo;ll use static files and simple command line tools&rdquo; <a href="https://aaronparecki.com/2018/06/30/11/your-first-webmention">aaronparecki.com</a></p> http://172.105.249.169:9000/notes/1532035348313http://172.105.249.169:9000/notes/1532035348313 Thu, 19 Jul 2018 21:22:28 +0000 micro <p>So by combining webmentions and fragmentions, both conceptually really simple, we can interact with a specific word, sentence, or paragraph on the web. The key tech to revolutionize academic publishing: URL fragments and posting some form data. <a href="https://alistapart.com/article/webmentions-enabling-better-communication-on-the-internet">alistapart.com</a></p> http://172.105.249.169:9000/notes/1532034826114http://172.105.249.169:9000/notes/1532034826114 Thu, 19 Jul 2018 21:13:46 +0000 micro <p>Webmentions: &ldquo;Richer connections and interactions with other content on the web and a genuine two-way conversation instead of a mass of unidirectional links.&rdquo; <a href="https://alistapart.com/article/webmentions-enabling-better-communication-on-the-internet">alistapart.com</a></p> http://172.105.249.169:9000/notes/1532031177840http://172.105.249.169:9000/notes/1532031177840 Thu, 19 Jul 2018 20:12:57 +0000 micro <p>&ldquo;A fragmention is an extension to URL syntax that links and cites a phrase within a document by using a URL fragment consisting of the phrase itself, including whitespace.&rdquo; <a href="https://indieweb.org/fragmention">indieweb.org/fragmention</a> ✨</p> http://172.105.249.169:9000/notes/1532030912000http://172.105.249.169:9000/notes/1532030912000 Thu, 19 Jul 2018 20:08:32 +0000 micro <p>Mit dem Rad nach Hause übrigens auch #thisiscologne #radlandjetzt 🚲 <a href="https://twitter.com/fsteeg/status/1019917356993253376">twitter.com/fsteeg</a></p><p><a href="http://fsteeg.com/files/micropub-1532021472576-image.jpg"><img src="http://fsteeg.com/files/micropub-1532021472576-image.jpg" alt="http://fsteeg.com/files/micropub-1532021472576-image.jpg"/></a></p><p><a href="http://fsteeg.com/files/micropub-1532021474010-image.jpg"><img src="http://fsteeg.com/files/micropub-1532021474010-image.jpg" alt="http://fsteeg.com/files/micropub-1532021474010-image.jpg"/></a></p><p><a href="http://fsteeg.com/files/micropub-1532021476878-image.jpg"><img src="http://fsteeg.com/files/micropub-1532021476878-image.jpg" alt="http://fsteeg.com/files/micropub-1532021476878-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1532021476928http://172.105.249.169:9000/notes/1532021476928 Thu, 19 Jul 2018 17:31:16 +0000 micro <p>Mit das Beste am Leben und Arbeiten in der (gleichen!) Stadt: mit dem Rad zur Arbeit #thisiscologne #radlandjetzt 🚲</p><p><a href="http://fsteeg.com/files/micropub-1532002024092-image.jpg"><img src="http://fsteeg.com/files/micropub-1532002024092-image.jpg" alt="http://fsteeg.com/files/micropub-1532002024092-image.jpg"/></a></p><p><a href="http://fsteeg.com/files/micropub-1532002030218-image.jpg"><img src="http://fsteeg.com/files/micropub-1532002030218-image.jpg" alt="http://fsteeg.com/files/micropub-1532002030218-image.jpg"/></a></p><p><a href="http://fsteeg.com/files/micropub-1532002036163-image.jpg"><img src="http://fsteeg.com/files/micropub-1532002036163-image.jpg" alt="http://fsteeg.com/files/micropub-1532002036163-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1532002036248http://172.105.249.169:9000/notes/1532002036248 Thu, 19 Jul 2018 12:07:16 +0000 micro <p>Ja, musste schmunzeln, frage mich aber auch oft, ob wir nicht mehr Leute aufs Rad bekommen wenn wir auch kommunizieren, wie /toll/ Radfahren ist (gerade in der Stadt, und auch in Köln), und was gut läuft <a href="https://twitter.com/Radkomm/status/1018984639732637696">twitter.com/Radkomm</a></p> http://172.105.249.169:9000/notes/1531859706883http://172.105.249.169:9000/notes/1531859706883 Tue, 17 Jul 2018 20:35:06 +0000 micro <p>&ldquo;In Praise of Email&rdquo;—&ldquo;as I’ve reassessed this blog, my social media presence, and our centralized digital platforms in general, I’ve come to realize just how much the email system got right&rdquo; <a href="https://dancohen.org/2018/07/17/in-praise-of-email/">dancohen.org</a></p> http://172.105.249.169:9000/notes/1531853062659http://172.105.249.169:9000/notes/1531853062659 Tue, 17 Jul 2018 18:44:22 +0000 micro <p>&ldquo;Indiepaper is a new service for saving the text of articles you find on the web and want to read later. It’s in the spirit of Instapaper or Pocket, but built on IndieWeb technologies.&rdquo; <a href="http://help.micro.blog/2018/indiepaper/">help.micro.blog</a></p> http://172.105.249.169:9000/notes/1531766527436http://172.105.249.169:9000/notes/1531766527436 Mon, 16 Jul 2018 18:42:07 +0000 micro <p>Im Gegensatz zum DH-RSE-Workshop insgesamt waren in unserer Infrastruktur-Arbeitsgruppe viele aus dem Bibliotheksbereich — &ldquo;Das Bibliothekswesen scheint also auch im Bereich der Forschungssoftware seine Rolle als Infrastrukturanbieter wahrnehmen zu wollen.&rdquo; <a href="https://twitter.com/dh_rse/status/1018872889506922498">twitter.com/dh_rse</a></p> http://172.105.249.169:9000/notes/1531755072934http://172.105.249.169:9000/notes/1531755072934 Mon, 16 Jul 2018 15:31:12 +0000 micro <p>&ldquo;Was ist Wikidata und wie kann es die bibliothekarische Arbeit unterstützen?&rdquo; <a href="https://www.uebertext.org/2018/07/was-ist-wikidata-und-wie-kann-es-die.html">www.uebertext.org</a></p> http://172.105.249.169:9000/notes/1531748938100http://172.105.249.169:9000/notes/1531748938100 Mon, 16 Jul 2018 13:48:58 +0000 micro <p>Ich finde ja übrigens, dass Vertreter von Parteien, die ich nicht wähle, auch Meinungen vertreten dürfen (und sollten), die ich nicht teile.</p> http://172.105.249.169:9000/notes/1531691475279http://172.105.249.169:9000/notes/1531691475279 Sun, 15 Jul 2018 21:51:15 +0000 micro <p>&ldquo;How long Is the coast of Britain?&rdquo; <a href="https://twitter.com/KRUZAA_/status/965328382102777856">twitter.com/KRUZAA_</a></p> http://172.105.249.169:9000/notes/1531688969960http://172.105.249.169:9000/notes/1531688969960 Sun, 15 Jul 2018 21:09:29 +0000 micro <p>It&rsquo;s 2018 and I&rsquo;ve actually just joined a webring <a href="http://fsteeg.com">fsteeg.com</a> 🕸💍: &ldquo;IndieWeb Ring is a modern take on the 1990s-era web rings for connecting sites together&rdquo; <a href="http://help.micro.blog/2018/web-rings/">help.micro.blog</a></p> http://172.105.249.169:9000/notes/1531523626438http://172.105.249.169:9000/notes/1531523626438 Fri, 13 Jul 2018 23:13:46 +0000 micro <p>&ldquo;Wikidata: a platform for your library’s linked open data&rdquo; – &ldquo;a low-barrier method for creating and using LOD in libraries.&rdquo; <a href="http://journal.code4lib.org/articles/13424">journal.code4lib.org</a></p> http://172.105.249.169:9000/notes/1531479536590http://172.105.249.169:9000/notes/1531479536590 Fri, 13 Jul 2018 10:58:56 +0000 micro <p>&ldquo;Eclipse PMC agreed that the 4.10/2018-12 release will drop support for GTK 2.x, set the minimum supported GTK version to 3.0 and the process to rewrite some parts in pure GTK 3.x way will be initiated.&rdquo; <a href="https://dev.eclipse.org/mhonarc/lists/cross-project-issues-dev/msg15783.html">dev.eclipse.org</a></p> http://172.105.249.169:9000/notes/1531474660818http://172.105.249.169:9000/notes/1531474660818 Fri, 13 Jul 2018 09:37:40 +0000 micro <p>Das Hochschulbibliothekszentrum NRW in Köln sucht im Bereich Langzeitverfügbarkeit eine Softwareentwicklerin oder einen Softwareentwickler mit den Schwerpunkten Java und Webtechnologien (unbefristet, TV-L 11) <a href="https://www.hbz-nrw.de/ueber-uns/stellenangebote/lzv18swe">www.hbz-nrw.de</a></p> http://172.105.249.169:9000/notes/1531469740960http://172.105.249.169:9000/notes/1531469740960 Fri, 13 Jul 2018 08:15:40 +0000 micro <p>Nach einem Jahr in Entwicklung ist heute unser GND-Dienst offiziell gestartet: Rechercheoberfläche mit facettierter Suche und Visualisierung von Beziehungen, JSON-LD API, Bulk-Downloads und OpenRefine-Integration für die Gemeinsame Normdatei <a href="http://blog.lobid.org/2018/07/11/lobid-gnd-launch.html">blog.lobid.org</a></p> http://172.105.249.169:9000/notes/1531323294299http://172.105.249.169:9000/notes/1531323294299 Wed, 11 Jul 2018 15:34:54 +0000 micro <p>&ldquo;Itty bitty sites are contained entirely within their own link. (Including this one!)&rdquo;, with no server side content <a href="https://itty.bitty.site/#About/XQAAAAKrCQAAAAAAAAAeHMqHyTY4PyKmqfkwr6ooCXSIMxPQ7ojYR153HqZD3W+keVdvwyoyd+luwncAksvskG/my97qDaUEyfDGB0QDbdURMwS0L90o5EpQ7O+BMmWrcB7fs71TJEJv1I/T/JfksoiYu9CqkeO/3MjEVGWv6XhfDjWJZ9laLARogtAZtwl7FltrwO/ppSfgeKOjxCxTNdUQH9WBM3de22qOzClzeZaSsSM+/ETbHBIHe1Qc+UF7PDfY470lZNjQg3wfOam9KudUiHOOQD3Kn8FLfaae0lmdK4VHRgxpDtL1nExkdF+pzNQAIyktIv3dQUPDKhGJ61c+WBTNP6NI5AvZ0uFT+Mc2oG0mMUwwuupCrjTxxpYv3l4L3W5lBXqWDjEH+cL8VZc6xz4WwIMG5J9jaQTv1SSxJ1dLg2Z2F7iNQ0fCFI74yeqBM1koHGbscBj4GpwWuA7y/fMCu3sEzcwefjBOuUwDdDfsdxqQLnjywtBxR5qHmngo/agjHyILkZxU8IiTgJeSbjcEOWdiVxcb9tEdtZ7eDwWQcwMsQdU9A9sCnargxl1IdVsbB9dfcFTQL8OpvjdqnmFZZJ6n2cKr51FonrcrMjm68aS4Lemk+D4sRaHnN+O5BrF10BiSfjumSkvhZ0Uwu/tR35LSmtC1UmVPgRNMwWkSHZjfjEdqueqhYglmB7nHQ8TDWCTb7lJLtTdhx1btg7UWsAuNIhffUpBo+T+3oh8sg8c41WaX5JaNL19UkD2M0qFd8Sayfr0qeGXnrLrKkS0t56ckjui2rTTmUDKFup4CnEtE7fu6nGYeGSoCwGoRlYQD/SU1/GSIWfs8hSpK3KeSZgUQXk14b7dh2LaqrVKGJLja/hFcQCt2gdGD+Ml+iH+Cy0lqj3D32RSarS3k4mJyTKsGnETyXVlCbJtC7kiZ/gZ7i8ClkjOjSl7vH1h7l/yJZxfqmRNdl0Tr6HSxjwcNGISk66vPw5WVM2RxDcUJecKKoShy+sLRgZIwYj0YgSM+5NMGTXtBkBxabwiWnxcECQTItyM2XWkNjvIYJyHX5lVKC5z2wJn3yV8KPobM6ky+6l3oMBo2ffIQ4P35hgBU7bTOtF35gH0sxUWeVp+bVQ+Fwwo+v76Gcu1d/ZrXwiSFNfgxeBfE2zKfKeiZKPoJQgUSbwFXjlFgovL4fVjxBtS60mByYJLH/MakoIBlYL0w6mOukdQqv6FsyIj6Hlp4XqIBEydVIUjBSF8tQcPLdSgXxVkJKR1iWOK0tMefTK79Nn+qQE0VhRKmu7wBJeqboC7tnOpISeWc9NvG2GDVEa1W9bP7hEBEj+ThZNaWIkEOiX7PxZe/XmneEJdWyIMEKv2zB7qybBG/wVy1b7lz3wmg84u75TFjUd1hf7/+yOalyXiVvb/zrNAh8B62Hd1yAzlqY0kD2xM69DSKezUZA4seMZ7FEFdUENmkSnZwFMVIKutAgUpiMYG1fTcLHgwb6iWAi5YOrWoBlTcsk3fCDXIMrjFgSKZ/Bgp8PydrcQ2GYgkCtxRaEM4tgTHRheFg06vQdo478dSnhmSobCvF1nghp1ZuNsQvJdk8/eu/ZgeJp8OjJNzPL0Ovk9orPPtoX2uyUFXfP2qJIuVvjsx4opouk4lHrQZzADX3Wg3Tf4+eYos/HWyCeEDn/8Gnr1A=">itty.bitty.site</a></p> http://172.105.249.169:9000/notes/1531216058875http://172.105.249.169:9000/notes/1531216058875 Tue, 10 Jul 2018 09:47:38 +0000 micro <p>&ldquo;Git is clearly not a version control system […]. No, Git is something else, it is a collaboration tool.&rdquo; <a href="https://blog.feld.me/posts/2018/01/git-is-not-revision-control/">blog.feld.me</a> — and it might be just what you need if you think you need a blockchain <a href="https://go-to-hellman.blogspot.com/2018/06/the-vast-potential-for-blockchain-in.html">go-to-hellman.blogspot.com</a></p> http://172.105.249.169:9000/notes/1531172679981http://172.105.249.169:9000/notes/1531172679981 Mon, 09 Jul 2018 21:44:39 +0000 micro <p>&ldquo;With linked open data, the information in the library catalogue can be more easily understood by the rest of the web.&rdquo; <a href="http://www.mynewsdesk.com/se/kungliga_biblioteket/pressreleases/kb-becomes-the-first-national-library-to-fully-transition-to-linked-data-2573975">www.mynewsdesk.com</a></p> http://172.105.249.169:9000/notes/1531170349377http://172.105.249.169:9000/notes/1531170349377 Mon, 09 Jul 2018 21:05:49 +0000 micro <p>&ldquo;lobid-gnd: Formulierung komplexer Suchanfragen&rdquo; <a href="http://blog.lobid.org/2018/07/06/lobid-gnd-queries.html">blog.lobid.org</a></p> http://172.105.249.169:9000/notes/1531125279570http://172.105.249.169:9000/notes/1531125279570 Mon, 09 Jul 2018 08:34:39 +0000 micro <p>&ldquo;Homepages had a timeless quality, an index of interesting or useful or relevant things about a topic or about a person. You didn’t reload a homepage every day in pursuit of novelty.&rdquo; – How the Blog Broke the Web <a href="https://stackingthebricks.com/how-blogs-broke-the-web/">stackingthebricks.com</a></p> http://172.105.249.169:9000/notes/1530998395890http://172.105.249.169:9000/notes/1530998395890 Sat, 07 Jul 2018 21:19:55 +0000 micro <p>&ldquo;The web is the social network&rdquo; <a href="http://www.manton.org/2018/07/the-web-is-the-social-network.html">www.manton.org</a> – &ldquo;it’s okay if this is a work in progress and isn’t ready for everybody yet. It’s okay if it takes time&rdquo; <a href="http://inessential.com/2018/02/01/why_micro_blog_is_not_another_app_net">inessential.com</a></p> http://172.105.249.169:9000/notes/1530828543504http://172.105.249.169:9000/notes/1530828543504 Thu, 05 Jul 2018 22:09:03 +0000 micro <p>&ldquo;FailCamp wants to advocate for failure, a catharsis where failure is laughed at and a safe place to take it seriously.&rdquo; <a href="http://www.librarycamp.co.uk/2018/06/come-to-failcamp-uks-first-free.html">librarycamp.co.uk</a></p> http://172.105.249.169:9000/notes/1530824750383http://172.105.249.169:9000/notes/1530824750383 Thu, 05 Jul 2018 21:05:50 +0000 micro <p>&ldquo;The British Library, working with a group of cultural and memory organisations, is piloting a shared repository service for research content built on an open source platform.&rdquo; <a href="https://www.bl.uk/press-releases/2018/july/shared-research-repository-announcement">www.bl.uk</a> – Samvera Hyku (Hydra-in-a-Box) <a href="https://github.com/samvera-labs/hyku">github.com</a></p> http://172.105.249.169:9000/notes/1530815844735http://172.105.249.169:9000/notes/1530815844735 Thu, 05 Jul 2018 18:37:24 +0000 micro <p>Ein Überblick zu Suche und Navigation in der lobid-gnd Oberfläche <a href="http://blog.lobid.org/2018/07/04/lobid-gnd-suche.html">blog.lobid.org</a></p> http://172.105.249.169:9000/notes/1530710436903http://172.105.249.169:9000/notes/1530710436903 Wed, 04 Jul 2018 13:20:36 +0000 micro <p>&ldquo;Lediglich zwei Wochen hat es gedauert und nur 50.000 Euro gekostet – seit Wochenanfang können sich Kölns Radfahrer über die Umgestaltung des Theodor-Heuss-Rings zwischen Rhein und Ebertplatz freuen.&rdquo; <a href="https://koeln.de/koeln/die_domstadt/verkehr/mehr-platz-fuer-radfahrer-auf-dem-theodor-heuss-ring-in-koeln_1093852.html">koeln.de</a></p> http://172.105.249.169:9000/notes/1530617403855http://172.105.249.169:9000/notes/1530617403855 Tue, 03 Jul 2018 11:30:03 +0000 micro <p>&lsquo;Es handelt[e] sich hier schließlich nicht um eine gewöhnliche DFG-Ausschreibung, sondern um den erklärten Versuch, &ldquo;einen umfassenden Umstrukturierungsprozess mit anzustoßen und zu unterstützen&rdquo;&rsquo; <a href="https://twitter.com/acka47/status/1013079753383907329">twitter.com/acka47</a></p> http://172.105.249.169:9000/notes/1530617033520http://172.105.249.169:9000/notes/1530617033520 Tue, 03 Jul 2018 11:23:53 +0000 micro <p>&ldquo;lobid-gnd-Neuigkeiten: Bulk Downloads, OpenRefine-API und mehr&rdquo; <a href="http://blog.lobid.org/2018/07/02/lobid-update.html">blog.lobid.org</a></p> http://172.105.249.169:9000/notes/1530531742675http://172.105.249.169:9000/notes/1530531742675 Mon, 02 Jul 2018 11:42:22 +0000 micro <p>&ldquo;As we move away from the centralised web to the peer web, it’s time to rediscover, re-embrace, and reclaim RSS.&rdquo; <a href="https://ar.al/2018/06/29/reclaiming-rss/">ar.al</a></p> http://172.105.249.169:9000/notes/1530518934233http://172.105.249.169:9000/notes/1530518934233 Mon, 02 Jul 2018 08:08:54 +0000 micro <p>Our proposal has been accepted: &ldquo;From LOD to LOUD: making data usable&rdquo; — join @acka47 and me in our workshop at #swib18 <a href="http://swib.org/swib18/">http://swib.org/swib18/</a></p> http://172.105.249.169:9000/notes/1530517127939http://172.105.249.169:9000/notes/1530517127939 Mon, 02 Jul 2018 07:38:47 +0000 micro <p>&ldquo;This is an open-source repository for the book &lsquo;Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp&rsquo; by Peter Norvig (1992), and the code contained therein. The copyright has reverted to the author, who has shared it here&rdquo; <a href="https://github.com/norvig/paip-lisp">github.com</a></p> http://172.105.249.169:9000/notes/1530442893802http://172.105.249.169:9000/notes/1530442893802 Sun, 01 Jul 2018 11:01:33 +0000 micro <p>&ldquo;Why libraries need to get with apps and APIs — Tomorrow&rsquo;s library management software will be flexible, modular, extensible, and affordable.&rdquo; <a href="https://opensource.com/article/18/6/folio">opensource.com</a></p> http://172.105.249.169:9000/notes/1530305639354http://172.105.249.169:9000/notes/1530305639354 Fri, 29 Jun 2018 20:53:59 +0000 micro <p>Reconcile your data with the Integrated Authority File GND <a href="https://en.wikipedia.org/wiki/Integrated_Authority_File">en.wikipedia.org</a> using @OpenRefine <a href="http://lobid.org/gnd/api#openrefine">lobid.org</a> <a href="https://github.com/hbz/lobid-gnd/blob/master/app/controllers/Reconcile.java">github.com</a> <a href="https://twitter.com/lobidOrg/status/1012634612277874688">twitter.com/lobidOrg</a></p> http://172.105.249.169:9000/notes/1530267900754http://172.105.249.169:9000/notes/1530267900754 Fri, 29 Jun 2018 10:25:00 +0000 micro <p>Oberlandesgericht Düsseldorf: &ldquo;Vertrag zur Einführung einer cloudbasierten Bibliotheksinfrastruktur für Hochschulen in NRW darf nicht mit nur einem Bewerber verhandelt werden&rdquo; <a href="http://www.olg-duesseldorf.nrw.de/behoerde/presse/Presse_aktuell/20180628_PM_Bibiliotheksinfrastruktur/index.php">olg-duesseldorf.nrw.de</a></p> http://172.105.249.169:9000/notes/1530264678609http://172.105.249.169:9000/notes/1530264678609 Fri, 29 Jun 2018 09:31:18 +0000 micro <p>We&rsquo;ve added bulk downloads in lobid-gnd based on Elasticsearch scroll requests and Playframework 2.6, which uses Akka Streams for chunked HTTP responses. Works really well so far <a href="https://github.com/hbz/lobid-gnd/commit/1ee4a6de4afd8500199824ae47a6e59f5c3fb288#diff-9678430eb852d46dcd891c90a3dd1dfdR298">github.com/hbz</a> <a href="https://twitter.com/lobidOrg/status/1011935747799224321">twitter.com/lobidOrg</a></p> http://172.105.249.169:9000/notes/1530177213727http://172.105.249.169:9000/notes/1530177213727 Thu, 28 Jun 2018 09:13:33 +0000 micro <p>&ldquo;Gesucht: Schiedspersonen für Kölner Stadtteile – Ehrenamtler lösen Konflikte im Vorfeld von Zivil- und Strafprozessen&rdquo; <a href="http://www.stadt-koeln.de/politik-und-verwaltung/presse/gesucht-schiedspersonen-fuer-koelner-stadtteile-2">www.stadt-koeln.de</a></p> http://172.105.249.169:9000/notes/1529960678596http://172.105.249.169:9000/notes/1529960678596 Mon, 25 Jun 2018 21:04:38 +0000 micro <p>&lsquo;dass&rsquo; wo &lsquo;das&rsquo; stehen müsste: das deutsche &lsquo;it&rsquo;s&rsquo; wo &lsquo;its&rsquo; stehen müsste</p> http://172.105.249.169:9000/notes/1529875339046http://172.105.249.169:9000/notes/1529875339046 Sun, 24 Jun 2018 21:22:19 +0000 micro <p>&ldquo;We’re pleased to report that the Eclipse Foundation Board have approved the distribution of OpenJ9 [JVM] as part of the Eclipse IDE in a future release.&rdquo; <a href="https://blog.openj9.org/2018/06/15/eclipse-openj9-performance-a-bake-off-on-windows/">blog.openj9.org</a></p> http://172.105.249.169:9000/notes/1529615266313http://172.105.249.169:9000/notes/1529615266313 Thu, 21 Jun 2018 21:07:46 +0000 micro <p>Ganz wichtig ist da auch unser Entwicklungsprozess <a href="http://hbz.github.io/#dev-process">hbz.github.io</a>, speziell Functional Review <a href="http://slides.lobid.org/lobid-entwicklungsprozess/#/19">slides.lobid.org</a>, wo bibliothekarische Anforderungen und Entwicklung miteinander verzahnt werden <a href="https://twitter.com/lobidOrg/status/1007285801951035394">https://twitter.com/lobidOrg</a></p> http://172.105.249.169:9000/notes/1529071477510http://172.105.249.169:9000/notes/1529071477510 Fri, 15 Jun 2018 14:04:37 +0000 micro <p>&ldquo;The Camerata asked the revolutionary question: what if you could understand the words?&rdquo; <a href="https://the-composition.com/the-origins-of-opera-and-the-future-of-programming-bcdaf8fbe960">the-composition.com</a></p> http://172.105.249.169:9000/notes/1529006824625http://172.105.249.169:9000/notes/1529006824625 Thu, 14 Jun 2018 20:07:04 +0000 micro <p>Folien zum Vortrag von @acka47 auf dem #bibtag18: lobid.org – offene, webbasierte Infrastruktur für zentrale bibliothekarische Daten <a href="http://slides.lobid.org/bibtag18">slides.lobid.org</a></p> http://172.105.249.169:9000/notes/1529002181104http://172.105.249.169:9000/notes/1529002181104 Thu, 14 Jun 2018 18:49:41 +0000 micro <p>Dateninfrastruktur für Bibliotheken <a href="http://lobid.org/">lobid.org</a> am Donnerstag um 17 Uhr auf dem #bibtag18 <a href="https://opus4.kobv.de/opus4-bib-info/frontdoor/index/index/docId/3657">opus4.kobv.de</a> mit Schwerpunkt lobid-gnd <a href="http://blog.lobid.org/2018/06/07/lobid-gnd.html">http://blog.lobid.org/2018/06/07/lobid-gnd.html</a></p> http://172.105.249.169:9000/notes/1528878611828http://172.105.249.169:9000/notes/1528878611828 Wed, 13 Jun 2018 08:30:11 +0000 micro <p>&ldquo;Die Startup Unit der Stadt Köln sucht in Zusammenarbeit mit dem Ersten Deutschen Fachverband für Virtual Reality (EDFVR e.V.) und dem Digital Hub Cologne, einer Initiative von Stadt Köln, IHK Köln und Universität zu Köln, nach den innovativsten Lösungen im Bereich XR, also rund um Virtual- und Augmented Reality (VR und AR).&rdquo; <a href="http://www.stadt-koeln.de/politik-und-verwaltung/presse/innovative-startups-im-bereich-xr-gesucht">www.stadt-koeln.de</a></p> http://172.105.249.169:9000/notes/1528829111302http://172.105.249.169:9000/notes/1528829111302 Tue, 12 Jun 2018 18:45:11 +0000 micro <p>&ldquo;GitHub users with Microsoft email addresses committed to more than 8,000 non-Microsoft projects&rdquo; <a href="https://blog.tidelift.com/wtf-the-data-behind-microsofts-surprising-open-source-track-record">blog.tidelift.com</a></p> http://172.105.249.169:9000/notes/1528746287770http://172.105.249.169:9000/notes/1528746287770 Mon, 11 Jun 2018 19:44:47 +0000 micro <p>Open source governance <a href="https://twitter.com/tracymiranda/status/1003708882164776961">twitter.com/tracymiranda</a></p> http://172.105.249.169:9000/notes/1528698312185http://172.105.249.169:9000/notes/1528698312185 Mon, 11 Jun 2018 06:25:12 +0000 micro <p>Fully agree. One problem with the &lsquo;familiar&rsquo; criterion though: familiar to whom? Even familiar concepts can actually be cryptic. Like using &lsquo;!&rsquo; instead of &lsquo;send&rsquo; for actors in Scala because &lsquo;!&rsquo; is familiar from Erlang (but familiar to whom?). <a href="https://twitter.com/jacek_bilski/status/1004280832058634241">twitter.com/jacek_bilski</a></p> http://172.105.249.169:9000/notes/1528666737237http://172.105.249.169:9000/notes/1528666737237 Sun, 10 Jun 2018 21:38:57 +0000 micro <p>&ldquo;Code written using ubiquitous language or metaphors will also reveal its intent much quicker. It’s a very important property of a simple design.&rdquo; <a href="https://www.innoq.com/en/blog/understanding-decomposed/">www.innoq.com</a></p> http://172.105.249.169:9000/notes/1528665556245http://172.105.249.169:9000/notes/1528665556245 Sun, 10 Jun 2018 21:19:16 +0000 micro <p>&ldquo;there should be only one common language used to talk about the problem we’re trying to solve, no matter who’s talking to whom, developers, testers, business people, and also in the code&rdquo; <a href="https://www.innoq.com/en/blog/understanding-decomposed/">www.innoq.com</a></p> http://172.105.249.169:9000/notes/1528665516871http://172.105.249.169:9000/notes/1528665516871 Sun, 10 Jun 2018 21:18:36 +0000 micro <p>&ldquo;I think library technology should not be enabling consensus on the basis of wealth or power&rdquo; <a href="https://go-to-hellman.blogspot.com/2018/06/the-vast-potential-for-blockchain-in.html">go-to-hellman.blogspot.com</a></p> http://172.105.249.169:9000/notes/1528490175543http://172.105.249.169:9000/notes/1528490175543 Fri, 08 Jun 2018 20:36:15 +0000 micro <p>GND4C – GND für Kulturdaten: &ldquo;die spartenübergreifende Öffnung der Gemeinsamen Normdatei (GND) für nicht-bibliothekarische Einrichtungen wie Museen, Denkmalbehörden, wissenschaftliche Institutionen, Mediatheken und Archive&rdquo; <a href="https://archivalia.hypotheses.org/72572">archivalia.hypotheses.org</a></p> http://172.105.249.169:9000/notes/1528402845137http://172.105.249.169:9000/notes/1528402845137 Thu, 07 Jun 2018 20:20:45 +0000 micro <p>&ldquo;lobid-gnd – Eine Schnittstelle zur Gemeinsamen Normdatei für Mensch und Maschine&rdquo; <a href="http://blog.lobid.org/2018/06/07/lobid-gnd.html">blog.lobid.org</a></p> http://172.105.249.169:9000/notes/1528384034110http://172.105.249.169:9000/notes/1528384034110 Thu, 07 Jun 2018 15:07:14 +0000 micro <p>&ldquo;With these two initiatives, we’re closing data leaks that have been part of the domain name system since it was created 35 years ago. And we’d like your help in testing them.&rdquo; <a href="https://hacks.mozilla.org/2018/05/a-cartoon-intro-to-dns-over-https/">hacks.mozilla.org</a></p> http://172.105.249.169:9000/notes/1528302947576http://172.105.249.169:9000/notes/1528302947576 Wed, 06 Jun 2018 16:35:47 +0000 micro <p>&ldquo;I&rsquo;m afraid that careful UI creation suffers from semweb culture valuing generality over all else.&rdquo; <a href="https://twitter.com/danbri/status/997760282335301632">twitter.com/danbri</a></p> http://172.105.249.169:9000/notes/1528302660055http://172.105.249.169:9000/notes/1528302660055 Wed, 06 Jun 2018 16:31:00 +0000 micro <p>&ldquo;However you choose to address the world of New Tools, you’re way ahead if you simply recognize their power over your attention.&rdquo; — <a href="https://www.fs.blog/2016/08/dont-let-technology-tools-use-you/">Don&rsquo;t Let Your (Technology) Tools Use You</a></p> http://172.105.249.169:9000/notes/1528059782751http://172.105.249.169:9000/notes/1528059782751 Sun, 03 Jun 2018 21:03:02 +0000 micro <p><a href="https://daringfireball.net/linked/2018/05/27/usa-today-gdpr">Daring Fireball: USA Today Serves Different Site to EU Visitors That Is Way Faster Than Regular Site</a></p> http://172.105.249.169:9000/notes/1527927683435http://172.105.249.169:9000/notes/1527927683435 Sat, 02 Jun 2018 08:21:23 +0000 micro <p>The Eclipse Foundation is looking for a marketing specialist <a href="https://www.linkedin.com/jobs/view/688159040/">www.linkedin.com</a></p> http://172.105.249.169:9000/notes/1527854146456http://172.105.249.169:9000/notes/1527854146456 Fri, 01 Jun 2018 11:55:46 +0000 micro <p>&ldquo;Ruby and Python and Perl all were built with the idea that the developer should rely on the OS as much as possible. […] apps written in these languages tend to be dependent on file paths and environment variables and user paths and OS permissions&rdquo; <a href="http://www.smashcompany.com/technology/docker-protects-a-programming-paradigm-that-we-should-get-rid-of">www.smashcompany.com</a></p> http://172.105.249.169:9000/notes/1527549051073http://172.105.249.169:9000/notes/1527549051073 Mon, 28 May 2018 23:10:51 +0000 micro <p>&ldquo;Starting now, Wikidata stores a new type of data: words, phrases and sentences, in many languages, described in many languages. This information will be stored in new types of entities, called Lexemes, Forms and Senses.&rdquo; <a href="https://wikidata.org/wiki/Wikidata:Project_chat#First_experiment_of_lexicographical_data_is_out">wikidata.org</a></p> http://172.105.249.169:9000/notes/1527464977911http://172.105.249.169:9000/notes/1527464977911 Sun, 27 May 2018 23:49:37 +0000 micro <p>It seems that in Germany, being a &lsquo;centrist&rsquo; means something very different <a href="https://www.nytimes.com/interactive/2018/05/23/opinion/international-world/centrists-democracy.html">www.nytimes.com</a></p> http://172.105.249.169:9000/notes/1527464353394http://172.105.249.169:9000/notes/1527464353394 Sun, 27 May 2018 23:39:13 +0000 micro <p>&ldquo;Software source code is the literature of computer scientists, and it deserves to be studied and appreciated.&rdquo; — well unfortunately?, <em>computer science literature</em> is the literature of computer scientists <a href="http://www.computerhistory.org/atchm/adobe-photoshop-source-code/">www.computerhistory.org</a></p> http://172.105.249.169:9000/notes/1527455379010http://172.105.249.169:9000/notes/1527455379010 Sun, 27 May 2018 21:09:39 +0000 micro <p>&ldquo;Then and now, much of the code is related to input/output and the myriad of file formats that Photoshop has to attend to.&rdquo; <a href="http://www.computerhistory.org/atchm/adobe-photoshop-source-code/">www.computerhistory.org</a></p> http://172.105.249.169:9000/notes/1527454473353http://172.105.249.169:9000/notes/1527454473353 Sun, 27 May 2018 20:54:33 +0000 micro <p>Love it when decades-old software practice is still completely relevant <a href="http://fsteeg.com/notes/1527453658603">fsteeg.com</a></p> http://172.105.249.169:9000/notes/1527454022404http://172.105.249.169:9000/notes/1527454022404 Sun, 27 May 2018 20:47:02 +0000 micro <p>&ldquo;Architecturally, this is a very well-structured system. There’s a consistent separation of interface and abstraction, and the design decisions made to componentize those abstractions […] were easy to follow.&rdquo; <a href="http://www.computerhistory.org/atchm/adobe-photoshop-source-code/">www.computerhistory.org</a></p> http://172.105.249.169:9000/notes/1527453658603http://172.105.249.169:9000/notes/1527453658603 Sun, 27 May 2018 20:40:58 +0000 micro <p>&ldquo;That first version of Photoshop was written primarily in Pascal for the Apple Macintosh, with some machine language for the underlying Motorola 68000 microprocessor where execution efficiency was important.&rdquo; <a href="http://www.computerhistory.org/atchm/adobe-photoshop-source-code/">www.computerhistory.org</a></p> http://172.105.249.169:9000/notes/1527453535118http://172.105.249.169:9000/notes/1527453535118 Sun, 27 May 2018 20:38:55 +0000 micro <p>Wo ich grad so <a href="http://fsteeg.com/notes/1527283069637">retro bin</a>: wir haben auch Strom, oder so</p><p><a href="http://fsteeg.com/files/micropub-1527283486379-image.jpg"><img src="http://fsteeg.com/files/micropub-1527283486379-image.jpg" alt="http://fsteeg.com/files/micropub-1527283486379-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1527283487004http://172.105.249.169:9000/notes/1527283487004 Fri, 25 May 2018 21:24:47 +0000 micro <p>&ldquo;when it comes to technology, sometimes boring is actually better&rdquo; — totally agree. having COBOL in production though, maybe we should call it the middle way <a href="https://medium.com/production-ready/sometimes-boring-is-better-d16d38214186">medium.com</a></p> http://172.105.249.169:9000/notes/1527283069637http://172.105.249.169:9000/notes/1527283069637 Fri, 25 May 2018 21:17:49 +0000 micro <p>Was vielleicht nicht jeder weiß: &ldquo;Mailinglistenarchive sind für die Teilnehmerinnen und Teilnehmer, aber auch in wissenschaftlicher Hinsicht außerordentlich wichtige Ressourcen der Fachkommunikation&rdquo; <a href="https://archivalia.hypotheses.org/72245">archivalia.hypotheses.org</a></p> http://172.105.249.169:9000/notes/1527278864412http://172.105.249.169:9000/notes/1527278864412 Fri, 25 May 2018 20:07:44 +0000 micro <p>✅ Submitted workshop proposal for #swib18 — submission deadline is this Sunday, May 27th <a href="http://swib.org/swib18/">swib.org</a></p> http://172.105.249.169:9000/notes/1527247830647http://172.105.249.169:9000/notes/1527247830647 Fri, 25 May 2018 11:30:30 +0000 micro <p>&ldquo;The features that led to these vulnerabilities (Meltdown and Spectre), along with several others, were added to let C programmers continue to believe they were programming in a low-level language, when this hasn&rsquo;t been the case for decades.&rdquo; <a href="https://queue.acm.org/detail.cfm?id=3212479">queue.acm.org</a></p> http://172.105.249.169:9000/notes/1527149195120http://172.105.249.169:9000/notes/1527149195120 Thu, 24 May 2018 08:06:35 +0000 micro <p>In the library world, I feel the fear of dominant commercial involvement <strong>in open source projects</strong> is sometimes disproportionate. I&rsquo;d like to worry about that when we/some/most/all? of us actually switched to open systems <a href="https://twitter.com/winterking07/status/998567150108467205">twitter.com/winterking07</a></p> http://172.105.249.169:9000/notes/1527105016648http://172.105.249.169:9000/notes/1527105016648 Wed, 23 May 2018 19:50:16 +0000 micro <p>Last week to submit a proposal for #swib18, &ldquo;an event where IT staff, developers, librarians, and researchers from all over the world meet&rdquo; <a href="http://swib.org/swib18/">swib.org</a></p> http://172.105.249.169:9000/notes/1526976032073http://172.105.249.169:9000/notes/1526976032073 Tue, 22 May 2018 08:00:32 +0000 micro <p>&ldquo;something’s wrong in the library&rdquo; — &ldquo;&lsquo;The Librarian&rsquo; is a game that feels like a poem&rdquo; <a href="https://www.theverge.com/2018/5/13/17275088/the-librarian-game-lucasarts-short-play">www.theverge.com</a> 📚</p> http://172.105.249.169:9000/notes/1526732976831http://172.105.249.169:9000/notes/1526732976831 Sat, 19 May 2018 12:29:36 +0000 micro <p>&ldquo;JavaScript is now part of the toolkit of most working developers. What if network effects push it into being the first-ever truly dominant programming language?&rdquo; <a href="https://medium.com/@anildash/what-if-javascript-wins-84898e5341a">medium.com</a></p> http://172.105.249.169:9000/notes/1526732474792http://172.105.249.169:9000/notes/1526732474792 Sat, 19 May 2018 12:21:14 +0000 micro <p>&ldquo;[Over the last 10 years] everything from how we share code to how we find answers to how we discover new technologies became far more linked to the attitudes and actions of other programmers&rdquo; <a href="https://medium.com/@anildash/what-if-javascript-wins-84898e5341a">medium.com</a></p> http://172.105.249.169:9000/notes/1526732161510http://172.105.249.169:9000/notes/1526732161510 Sat, 19 May 2018 12:16:01 +0000 micro <p>Ziel von FOLIO: &ldquo;Bibliotheken [erhalten] die Möglichkeit, mit kommerziellen Anbietern auf Augenhöhe zusammenzuarbeiten und ihre Vorstellungen und Bedürfnisse eigenverantwortlich umzusetzen.&rdquo; <a href="https://www.zbw-mediatalk.eu/de/2018/05/folio-info-day-a-look-at-the-next-generation-library-system/">www.zbw-mediatalk.eu</a></p> http://172.105.249.169:9000/notes/1526721353745http://172.105.249.169:9000/notes/1526721353745 Sat, 19 May 2018 09:15:53 +0000 micro <p>&ldquo;Jupyter has broad impact across domains and use cases. Today more than 2,000,000 Jupyter notebooks are on GitHub, […] covering a range of uses from technical documentation to course materials, books and academic publications.&rdquo; <a href="https://awards.acm.org/software-system">awards.acm.org</a></p> http://172.105.249.169:9000/notes/1526507134238http://172.105.249.169:9000/notes/1526507134238 Wed, 16 May 2018 21:45:34 +0000 micro <p>&ldquo;Microsoft has been investing heavily in developer relations by making key hires (e.g., Ashley McNamara, Bridget Kromhout) and have rebooted their investment in open source to become one of the largest open source contributors in the industry.&rdquo; <a href="http://aniszczyk.org/2018/05/15/developer-advocate-wars-arms-race/">aniszczyk.org</a></p> http://172.105.249.169:9000/notes/1526410984651http://172.105.249.169:9000/notes/1526410984651 Tue, 15 May 2018 19:03:04 +0000 micro <p>&ldquo;Most Developer Advocates have backgrounds in software development, most of us contribute to Open Source, and many of us are even maintainers, meaning that we know when a product is or isn’t easy to use&rdquo; <a href="https://medium.com/@ashleymcnamara/what-is-developer-advocacy-3a92442b627c">medium.com</a></p> http://172.105.249.169:9000/notes/1526410552388http://172.105.249.169:9000/notes/1526410552388 Tue, 15 May 2018 18:55:52 +0000 micro <p>Ausstellung Medienapokalypsen — Hoffnungen und Ängste zum medialen Wandel, 29.5.–30.9. im Foyer der Universitäts- und Stadtbibliothek Köln <a href="http://www.medienapokalypsen.de/">medienapokalypsen.de</a></p> http://172.105.249.169:9000/notes/1526296591358http://172.105.249.169:9000/notes/1526296591358 Mon, 14 May 2018 11:16:31 +0000 micro <p>&ldquo;In most cases Graal will actually run your Play application way faster than a regular JVM.&rdquo; <a href="https://blog.playframework.com/play-on-graal/">blog.playframework.com</a></p> http://172.105.249.169:9000/notes/1526249078712http://172.105.249.169:9000/notes/1526249078712 Sun, 13 May 2018 22:04:38 +0000 micro <p>Und keinerlei Kennzeichnung was das soll. Die stehen einfach so mitten auf dem Radweg. Bin schon zweimal fast frontal da reingefahren 🚲 <a href="https://twitter.com/ADFCKoeln/status/994576082929160193">twitter.com/ADFCKoeln</a></p> http://172.105.249.169:9000/notes/1526238134038http://172.105.249.169:9000/notes/1526238134038 Sun, 13 May 2018 19:02:14 +0000 micro <p>&ldquo;A single academic paper, published by three Australian researchers in 2007, has been cited by Wikipedia editors over 2.8 million times—the next most popular work only shows up a little more than 21,000. And the researchers behind it didn&rsquo;t have a clue.&rdquo; <a href="https://www.wired.com/story/wikipedia-most-cited-authors-no-idea">www.wired.com</a></p> http://172.105.249.169:9000/notes/1525978419844http://172.105.249.169:9000/notes/1525978419844 Thu, 10 May 2018 18:53:39 +0000 micro <p>When one bullet point from a job ad summarizes the essence of the field — &ldquo;Ensure there is a balance between technical innovation and what&rsquo;s right for the client by considering appropriate technology choices and understanding the business vision&rdquo; <a href="https://www.thoughtworks.com/jobs/268430">www.thoughtworks.com</a></p> http://172.105.249.169:9000/notes/1525949334146http://172.105.249.169:9000/notes/1525949334146 Thu, 10 May 2018 10:48:54 +0000 micro <p>&ldquo;The solution […]: make these platforms open and have an open-compatible, market-oriented way to pay innovators [and creators]&rdquo; <a href="https://blog.core.okfn.org/?p=24083">blog.core.okfn.org</a> &ldquo;The payment would be proportional to the usage and value generated by their creation&rdquo; <a href="http://rufuspollock.com/book/#remuneration-rights">rufuspollock.com</a></p> http://172.105.249.169:9000/notes/1525894270878http://172.105.249.169:9000/notes/1525894270878 Wed, 09 May 2018 19:31:10 +0000 micro <p>&ldquo;Im Dezember 2018 findet mit der GNDCon 2018 erstmalig eine Konferenz zur GND statt. Sie […] richtet sich sowohl an Anwender und Entwickler als auch an alle, die Interesse an der GND haben. Insbesondere Museen, Archive und Wikipedianer sind herzlich eingeladen!&rdquo; <a href="https://wiki.dnb.de/display/GNDCON2018/GNDCon+2018">wiki.dnb.de</a></p> http://172.105.249.169:9000/notes/1525728479603http://172.105.249.169:9000/notes/1525728479603 Mon, 07 May 2018 21:27:59 +0000 micro <p>Eclipse IDE also talks about git annotations, not blame <a href="http://www.vogella.com/tutorials/EclipseGit/article.html#see-git-information-line-by-line-aka-git-blame">www.vogella.com/tutorials</a> <a href="https://twitter.com/stacylondoner/status/991903822229397504">twitter.com/stacylondoner</a></p> http://172.105.249.169:9000/notes/1525553774385http://172.105.249.169:9000/notes/1525553774385 Sat, 05 May 2018 20:56:14 +0000 micro <p>Meanwhile in Oslo <a href="https://twitter.com/KristinEberhard/status/990879184506490881">twitter.com/KristinEberhard</a> <a href="http://fsteeg.com/notes/1525378007477">fsteeg.com</a></p> http://172.105.249.169:9000/notes/1525381314706http://172.105.249.169:9000/notes/1525381314706 Thu, 03 May 2018 21:01:54 +0000 micro <p>Same here. Part time since 3 years, also 80%, currently 5 days (2x8h, 2x6h, 1x4h) <a href="https://twitter.com/kaffeecoder/status/991017736871514117">twitter.com/kaffeecoder</a></p> http://172.105.249.169:9000/notes/1525379426864http://172.105.249.169:9000/notes/1525379426864 Thu, 03 May 2018 20:30:26 +0000 micro <p>Amtsgericht erklärt Tempokontrolle für unrechtmäßig, Stadt ermöglicht Rückzahlung, 90% bleibt übrig, geht jetzt in Fahrradförderung 🚲 <a href="http://www.stadt-koeln.de/politik-und-verwaltung/presse/stadt-foerdert-radverkehrsprojekte-aus-bussgeldern">http://www.stadt-koeln.de</a></p> http://172.105.249.169:9000/notes/1525378007477http://172.105.249.169:9000/notes/1525378007477 Thu, 03 May 2018 20:06:47 +0000 micro <p>Frist ist heute: &ldquo;Wissenschaftliche*r Mitarbeiter*in für Softwareentwicklung in unbefristeter Tätigkeit. Das Entgelt erfolgt nach EG 13 TV-L&rdquo;, in Hamburg oder Kiel <a href="https://twitter.com/hbunke/status/990879544289710080">twitter.com/hbunke</a></p> http://172.105.249.169:9000/notes/1525365302854http://172.105.249.169:9000/notes/1525365302854 Thu, 03 May 2018 16:35:02 +0000 micro <p>&ldquo;IBM is committed to working in the OpenJDK, Eclipse OpenJ9, and AdoptOpenJDK communities to ensure that secure, high quality binaries for all LTS Java releases are available freely to Java developers until one year beyond the release of the next LTS version.&rdquo; <a href="https://developer.ibm.com/javasdk/2018/04/26/java-standard-edition-ibm-support-statement/">developer.ibm.com</a></p> http://172.105.249.169:9000/notes/1525106282762http://172.105.249.169:9000/notes/1525106282762 Mon, 30 Apr 2018 16:38:02 +0000 micro <p>Number of triples for data is as lines of code for software.</p> http://172.105.249.169:9000/notes/1525078720279http://172.105.249.169:9000/notes/1525078720279 Mon, 30 Apr 2018 08:58:40 +0000 micro <p>&ldquo;A quick one: Use Metafacture to create a list of records with cataloging errors&rdquo; <a href="http://dmaus.name/blog/2018.09/">http://dmaus.name</a></p> http://172.105.249.169:9000/notes/1525031750736http://172.105.249.169:9000/notes/1525031750736 Sun, 29 Apr 2018 19:55:50 +0000 micro <p>IMO more like: &lsquo;doctors are obsolete now that we have surgery&rsquo; — it&rsquo;s not the internet&rsquo;s fault that LIS doesn&rsquo;t own it <a href="https://twitter.com/john_f_hamer/status/988097061974364160">twitter.com/john_f_hamer</a></p> http://172.105.249.169:9000/notes/1524680383325http://172.105.249.169:9000/notes/1524680383325 Wed, 25 Apr 2018 18:19:43 +0000 micro <p>&lsquo;The origins of opera and the future of programming&rsquo; — &lsquo;This is a symmathesy. “Sym” = together, “mathesy” = learning. We work and grow in a symmathesy. This growth results in great people.&rsquo; <a href="https://twitter.com/jessitron/status/985684130804502534">twitter.com/jessitron</a></p> http://172.105.249.169:9000/notes/1524330173137http://172.105.249.169:9000/notes/1524330173137 Sat, 21 Apr 2018 17:02:53 +0000 micro <p>&ldquo;simple, explicit, not-very-DRY, pattern-empty code&rdquo;, I like that <a href="https://twitter.com/davetron5000/status/984886909410463746">https://twitter.com/davetron5000/status/984886909410463746</a></p> http://172.105.249.169:9000/notes/1523999200874http://172.105.249.169:9000/notes/1523999200874 Tue, 17 Apr 2018 21:06:40 +0000 micro <p>4 unbefristete Vollzeitstellen (TVL 13, 14) im Bereich Digital Humanities an der Universitäts- und Landesbibliothek Münster <a href="https://twitter.com/WWU_Muenster/status/984451586670977024">https://twitter.com/WWU_Muenster/status/984451586670977024</a></p> http://172.105.249.169:9000/notes/1523910457339http://172.105.249.169:9000/notes/1523910457339 Mon, 16 Apr 2018 20:27:37 +0000 micro <p>SWIB18 call for proposals — &ldquo;an event where IT staff, developers, librarians, and researchers from all over the world meet and mingle and learn from each other&rdquo; <a href="https://twitter.com/swibcon/status/984044398936842241">twitter.com/swibcon</a></p> http://172.105.249.169:9000/notes/1523829406778http://172.105.249.169:9000/notes/1523829406778 Sun, 15 Apr 2018 21:56:46 +0000 micro <p>lobid-gnd inzwischen mit erweiterten Ergebnislisten <a href="http://lobid.org/gnd/search?q=saturn">http://lobid.org/gnd/search?q=saturn</a> und EntityFacts-Integration für Links und Bilder <a href="http://lobid.org/gnd/4179170-8">http://lobid.org/gnd/4179170-8</a> <a href="https://twitter.com/lobidOrg/status/984008966308089856">https://twitter.com/lobidOrg</a></p> http://172.105.249.169:9000/notes/1523823626530http://172.105.249.169:9000/notes/1523823626530 Sun, 15 Apr 2018 20:20:26 +0000 micro <p>Folien zur Einführung in JSON-LD, und warum es das bessere RDF ist <a href="https://twitter.com/zuphilip/status/983637084593360896">twitter.com/zuphilip</a></p> http://172.105.249.169:9000/notes/1523563345134http://172.105.249.169:9000/notes/1523563345134 Thu, 12 Apr 2018 20:02:25 +0000 micro <p>&ldquo;The Journal of Open Source Software — A developer friendly journal for research software packages.&rdquo; <a href="http://joss.theoj.org/">joss.theoj.org</a> <a href="https://talkpython.fm/episodes/show/157/the-journal-of-open-source-software">talkpython.fm</a></p> http://172.105.249.169:9000/notes/1523304238980http://172.105.249.169:9000/notes/1523304238980 Mon, 09 Apr 2018 20:03:58 +0000 micro <p>&ldquo;gron transforms JSON into discrete assignments to make it easier to grep for what you want and see the absolute &lsquo;path&rsquo; to it. […] gron can work backwards too, enabling you to turn your filtered data back into JSON&rdquo; <a href="https://github.com/tomnomnom/gron/blob/master/README.mkd">github.com</a></p> http://172.105.249.169:9000/notes/1523259534512http://172.105.249.169:9000/notes/1523259534512 Mon, 09 Apr 2018 07:38:54 +0000 micro <p>RSS &ldquo;gives you a more transparent and controllable way to connect to the information you need&rdquo; <a href="https://www.wired.com/story/rss-readers-feedly-inoreader-old-reader/">www.wired.com</a></p> http://172.105.249.169:9000/notes/1522441659333http://172.105.249.169:9000/notes/1522441659333 Fri, 30 Mar 2018 20:27:39 +0000 micro <p>&ldquo;Der Rechner kann nicht nur riesige Datenmengen schnell verarbeiten – sein Mangel an Intuition, gepaart mit strikter Logik, hat auch eine heilsame Wirkung. Er decke Mängel in den Daten auf und zwinge dazu, methodische Vorannahmen offenzulegen, meint List.&rdquo; <a href="http://faz.net/aktuell/feuilleton/forschung-und-lehre/wie-erforscht-man-urspruenge-streit-der-indogermanistik-15490879.html">faz.net</a></p> http://172.105.249.169:9000/notes/1522439475017http://172.105.249.169:9000/notes/1522439475017 Fri, 30 Mar 2018 19:51:15 +0000 micro <p>Das Deutsche Institut für Medizinische Dokumentation und Information (DIMDI) in Köln sucht eine Softwarearchitektin / einen Softwarearchitekten im Bereich Java und Eclipse RCP (bis E14 TVöD) <a href="http://www.dimdi.de/static/de/dimdi/arbeiten-dimdi/stellenausschreibung/news_0235.html">www.dimdi.de</a></p> http://172.105.249.169:9000/notes/1522343581655http://172.105.249.169:9000/notes/1522343581655 Thu, 29 Mar 2018 17:13:01 +0000 micro <p>&ldquo;Es sind Orte, in denen normale oder recht gute Gehälter und Renten längst nicht mehr für das genügen, was einmal selbstverständlich war: im eigenen Freundeskreis, in der eigenen Nachbarschaft oder Kirchengemeinde alt zu werden.&rdquo; <a href="http://www.zeit.de/2018/13/wohnkosten-grossstaedte-mietpreise-wohnraum-wohnungsbau">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1522096454815http://172.105.249.169:9000/notes/1522096454815 Mon, 26 Mar 2018 20:34:14 +0000 micro <p>&ldquo;With all the talk recently about Facebook and Cambridge Analytica, it&rsquo;s timely to write about open web technologies.&rdquo; <a href="https://www.hughrundle.net/2018/03/25/watching-the-feeds/">www.hughrundle.net</a></p> http://172.105.249.169:9000/notes/1521927704953http://172.105.249.169:9000/notes/1521927704953 Sat, 24 Mar 2018 21:41:44 +0000 micro <p>&ldquo;the myth that you have to self-host […] to be part of the IndieWeb. Owning your content isn’t about portable software. It’s about portable URLs and data. It’s about domain names.&rdquo; <a href="http://www.manton.org/2018/03/indieweb-generation-4-and-hosted-domains.html">www.manton.org</a> — how that worked for me <a href="http://fsteeg.com/notes/owning-your-content-on-the-web">fsteeg.com</a></p> http://172.105.249.169:9000/notes/1521843575446http://172.105.249.169:9000/notes/1521843575446 Fri, 23 Mar 2018 22:19:35 +0000 micro <p>&ldquo;We are now about six months into the process of migrating Java EE to the Eclipse Foundation, and I think we’re all learning a lot as we go.&rdquo; <a href="https://mmilinkov.wordpress.com/2018/03/23/on-complexity-and-good-intentions">mmilinkov.wordpress.com</a></p> http://172.105.249.169:9000/notes/1521816060999http://172.105.249.169:9000/notes/1521816060999 Fri, 23 Mar 2018 14:41:00 +0000 micro <p>&ldquo;Abgleich von GND-Einträgen mit Wikidata&rdquo; <a href="https://twitter.com/nichtich/status/977120089395916801">twitter.com/nichtich</a></p> http://172.105.249.169:9000/notes/1521802649363http://172.105.249.169:9000/notes/1521802649363 Fri, 23 Mar 2018 10:57:29 +0000 micro <p>With links to our beta service to access the integrated authority file GND <a href="https://twitter.com/lobidOrg/status/976815181740290048">twitter.com/lobidorg</a></p> http://172.105.249.169:9000/notes/1521752741541http://172.105.249.169:9000/notes/1521752741541 Thu, 22 Mar 2018 21:05:41 +0000 micro <p>&ldquo;Wir haben das Parteiprogramm geschrieben, Forschung und Analysen gemacht. Wir schrieben alle Reden und haben die ganze Sache inszeniert.&rdquo; <a href="https://www.nzz.ch/international/firmen-wie-cambridge-analytica-sind-sich-der-tragweite-ihres-tuns-nicht-bewusst-ld.1368647">www.nzz.ch</a></p> http://172.105.249.169:9000/notes/1521751188317http://172.105.249.169:9000/notes/1521751188317 Thu, 22 Mar 2018 20:39:48 +0000 micro <p>&ldquo;Dividing frontend from backend is an antipattern&rdquo; <a href="https://www.thoughtworks.com/insights/blog/dividing-frontend-backend-antipattern">www.thoughtworks.com</a></p> http://172.105.249.169:9000/notes/1521546810324http://172.105.249.169:9000/notes/1521546810324 Tue, 20 Mar 2018 11:53:30 +0000 micro <p>2 Softwareentwickler/innen, 1 Systemadministrator/in, 1 Sachbearbeiter/in <a href="https://twitter.com/hbz_NRW/status/974222491819364352">twitter.com/hbz_NRW</a></p> http://172.105.249.169:9000/notes/1521403238719http://172.105.249.169:9000/notes/1521403238719 Sun, 18 Mar 2018 20:00:38 +0000 micro <p>&ldquo;Das geht so nicht! Die Wissenschaft muss sich unbedingt auf Permalinks (= Zitierlinks) verlassen können.&rdquo; <a href="https://log.netbib.de/archives/2018/03/17/permalink-frevel-der-oenb-wien/">log.netbib.de</a></p> http://172.105.249.169:9000/notes/1521321401818http://172.105.249.169:9000/notes/1521321401818 Sat, 17 Mar 2018 21:16:41 +0000 micro <p>&ldquo;Recommendations on the development, use and provision of Research Software&rdquo; <a href="https://zenodo.org/record/1172988">zenodo.org</a></p> http://172.105.249.169:9000/notes/1521201160609http://172.105.249.169:9000/notes/1521201160609 Fri, 16 Mar 2018 11:52:40 +0000 micro <p>&ldquo;So far, there has been no real alternative to Oracle’s Java HotSpot VM on Windows. With Eclipse OpenJ9, which emerged from open-sourcing IBM’s J9 VM, there is now&rdquo; <a href="https://dzone.com/articles/hello-openj9-on-windows-i-didnt-expect-you-so-soon">dzone.com</a></p> http://172.105.249.169:9000/notes/1521044579959http://172.105.249.169:9000/notes/1521044579959 Wed, 14 Mar 2018 16:22:59 +0000 micro <p>&ldquo;Google Summer of Code (GSoC) gives students from around the globe an opportunity to learn the ins and outs of open source software development while working from home&rdquo; <a href="http://opensource.googleblog.com/2018/03/gsoc-2018-student-applications.html">opensource.googleblog.com</a></p> http://172.105.249.169:9000/notes/1520876936940http://172.105.249.169:9000/notes/1520876936940 Mon, 12 Mar 2018 17:48:56 +0000 micro <p>&ldquo;Das neue Innen- und Heimatministerium in ihrer Hand ist so ziemlich die beste Idee, die bei den Koalitionsgesprächen herausgekommen ist für den Umgang mit der AfD. Wer im Osten gewinnen will, muss Konservativismus, Heimat und Strukturförderung verbunden bekommen.&rdquo; <a href="http://www.zeit.de/2018/11/ostdeutschland-politik-ost-beauftragten-vorurteile/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1520800531244http://172.105.249.169:9000/notes/1520800531244 Sun, 11 Mar 2018 20:35:31 +0000 micro <p>&lsquo;Road to hell paved with good intentions&rsquo; works both ways here <a href="https://twitter.com/moananddrone/status/971424768380588034">twitter.com/moananddrone</a></p> http://172.105.249.169:9000/notes/1520799325000http://172.105.249.169:9000/notes/1520799325000 Sun, 11 Mar 2018 20:15:25 +0000 micro <p>JavaFX and WebStart not in JDK 11, Swing and AWT out after JDK 11 <a href="https://twitter.com/DonaldOJDK/status/971445408219189248">twitter.com/DonaldOJDK</a></p> http://172.105.249.169:9000/notes/1520788462143http://172.105.249.169:9000/notes/1520788462143 Sun, 11 Mar 2018 17:14:22 +0000 micro <p>&ldquo;notice how you judge colleagues who are working less hard than you — they may have discovered something you need to learn.&rdquo; <a href="https://twitter.com/little_wow/status/971402029804544000">twitter.com/little_wow</a></p> http://172.105.249.169:9000/notes/1520784030496http://172.105.249.169:9000/notes/1520784030496 Sun, 11 Mar 2018 16:00:30 +0000 micro <p>&ldquo;the deep-neural-network software fueling the excitement has a troubling weakness: Making subtle changes to images, text, or audio can fool these systems into perceiving things that aren’t there.&rdquo; <a href="http://languagelog.ldc.upenn.edu/nll/?p=37185">languagelog.ldc.upenn.edu</a></p> http://172.105.249.169:9000/notes/1520691000130http://172.105.249.169:9000/notes/1520691000130 Sat, 10 Mar 2018 14:10:00 +0000 micro <p>&ldquo;Libraries can become leaders in the next generation of publishing technology and funding models. Sometimes, being smarter is just recognizing the power you have that you aren’t yet using.&rdquo; <a href="https://twitter.com/WikiLibrary/status/968158420900634624">twitter.com/WikiLibrary</a></p> http://172.105.249.169:9000/notes/1520166866369http://172.105.249.169:9000/notes/1520166866369 Sun, 04 Mar 2018 12:34:26 +0000 micro <p>&ldquo;librarianship is composed of a multitude of professions, activities, jobs, and perspectives that while not necessarily antagonistic, at least do not share a goal or an understanding of the business and role of the library or librarianship&rdquo; <a href="http://spopowich.ca/article/2018/02/28/is-there-such-thing-as-a-library.html">spopowich.ca</a></p> http://172.105.249.169:9000/notes/1519854944381http://172.105.249.169:9000/notes/1519854944381 Wed, 28 Feb 2018 21:55:44 +0000 micro <p>&ldquo;Ein Aufruf zum Arbeitskampf klingt weniger prickelnd als die Forderung, jedermanns sexuelle Vorstellungen einer Prüfung zu unterziehen. Trotzdem ist dieser Aufruf am Ende das eigentliche Ereignis&rdquo; <a href="http://www.zeit.de/2018/09/metoo-bewegung-arbeitsmarkt-klassenkampf-times-up/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1519503239059http://172.105.249.169:9000/notes/1519503239059 Sat, 24 Feb 2018 20:13:59 +0000 micro <p>&ldquo;Why we started OpenSCHUFA and why you should care about credit scoring&rdquo; <a href="https://blog.core.okfn.org/2018/02/22/we-crack-the-schufa-the-german-credit-scoring/">blog.core.okfn.org</a></p> http://172.105.249.169:9000/notes/1519312323678http://172.105.249.169:9000/notes/1519312323678 Thu, 22 Feb 2018 15:12:03 +0000 micro <p>&ldquo;nicht Automatisierung bestimmt das Verhältnis von Mensch und Maschine. Sondern die politischen und gesellschaftlichen Entscheidungen, wie diese Technik eingesetzt wird&rdquo; <a href="http://www.zeit.de/2018/08/digitalisierung-auswirkungen-arbeitswelt-nutzen">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1519137160405http://172.105.249.169:9000/notes/1519137160405 Tue, 20 Feb 2018 14:32:40 +0000 micro <p>Love the reactions of the Eclipse community and the original author in the comments — <a href="http://twocentsonsoftware.blogspot.de/2018/02/eclipse-vs-intellij-empirical-rant.html">Eclipse vs. IntelliJ, an empirical rant</a></p> http://172.105.249.169:9000/notes/1518896764802http://172.105.249.169:9000/notes/1518896764802 Sat, 17 Feb 2018 19:46:04 +0000 micro <p>&ldquo;The first data format that anyone could pack anything up into, send across the network to anywhere, and unpack on the other end, without asking anyone’s permission or paying for software&rdquo; <a href="https://www.xml.com/articles/2018/02/10/xml-20/">XML is 20</a></p> http://172.105.249.169:9000/notes/1518558306731http://172.105.249.169:9000/notes/1518558306731 Tue, 13 Feb 2018 21:45:06 +0000 micro <p>&ldquo;The Software Preservation Library — Reports, writings and presentations related to the preservation of software.&rdquo; <a href="https://archive.org/details/softwarepreservation">archive.org</a></p> http://172.105.249.169:9000/notes/1518536035437http://172.105.249.169:9000/notes/1518536035437 Tue, 13 Feb 2018 15:33:55 +0000 micro <p>&lsquo;Der Rat [der Stadt Köln] empfiehlt der Verwaltung als Bestandteil des Dezernates VIII ein neues Amt für „Fuß- und Radverkehr“ einzurichten&rsquo; <a href="http://www.dieguten.koeln/luftreinhalteplan-beschluss/">www.dieguten.koeln</a></p> http://172.105.249.169:9000/notes/1518123021709http://172.105.249.169:9000/notes/1518123021709 Thu, 08 Feb 2018 20:50:21 +0000 micro <p>&ldquo;The Eclipse Committer Election Workflow&rdquo; <a href="https://waynebeaton.wordpress.com/2018/02/08/the-eclipse-committer-election-workflow/">waynebeaton.wordpress.com</a></p> http://172.105.249.169:9000/notes/1518121704412http://172.105.249.169:9000/notes/1518121704412 Thu, 08 Feb 2018 20:28:24 +0000 micro <p>Think Uber for text: HyperText <a href="https://twitter.com/codepo8/status/958095726751318016">twitter.com/codepo8</a></p> http://172.105.249.169:9000/notes/1517776408051http://172.105.249.169:9000/notes/1517776408051 Sun, 04 Feb 2018 20:33:28 +0000 micro <p>&ldquo;Linked Data type people and Indieweb type people have, for whatever reason, historically been at each others&rsquo; throats despite (or perhaps because of) the enormous similarity between the kind of work that they&rsquo;re doing&rdquo; <a href="https://twitter.com/dustyweb/status/956627555599208449">twitter.com/dustyweb</a></p> http://172.105.249.169:9000/notes/1517328631863http://172.105.249.169:9000/notes/1517328631863 Tue, 30 Jan 2018 16:10:31 +0000 micro <p>&ldquo;Die Mitarbeiter/innen des CCeH, des frisch gegründeten Instituts für Digital Humanities, des Data Center for the Humanities [&hellip;] der Universität zu Köln geben ihr Bestes, um diese [DHd] Konferenz zu einer erinnernswerten Veranstaltung zu machen.&rdquo; <a href="http://cceh.uni-koeln.de/2018/01/30/cceh-dhd2018/">cceh.uni-koeln.de</a></p> http://172.105.249.169:9000/notes/1517316580779http://172.105.249.169:9000/notes/1517316580779 Tue, 30 Jan 2018 12:49:40 +0000 micro <p>&ldquo;Commit co-authors makes it easy to see who has contributed to every commit, regardless of how many contributors there are—and every author gets attribution in the pull request and in their contribution graph.&rdquo; <a href="https://github.com/blog/2496-commit-together-with-co-authors">github.com</a></p> http://172.105.249.169:9000/notes/1517264533036http://172.105.249.169:9000/notes/1517264533036 Mon, 29 Jan 2018 22:22:13 +0000 micro <p>W3C Recommendation: ActivityPub, &ldquo;a decentralized social networking protocol […]. It provides a client-to-server API for creating, updating and deleting content, as well as a federated server-to-server API for delivering notifications and content.&rdquo; <a href="https://www.w3.org/TR/activitypub/">www.w3.org</a></p> http://172.105.249.169:9000/notes/1517144972566http://172.105.249.169:9000/notes/1517144972566 Sun, 28 Jan 2018 13:09:32 +0000 micro <p>&ldquo;REMINDER: RSS is still a thing&rdquo; <a href="https://twitter.com/dkaszor/status/953383900750884865">twitter.com/dkaszor</a></p> http://172.105.249.169:9000/notes/1516623759245http://172.105.249.169:9000/notes/1516623759245 Mon, 22 Jan 2018 12:22:39 +0000 micro <p>New year&rsquo;s books, office edition 📚</p><p><a href="http://fsteeg.com/files/micropub-1516372728794-image.jpg"><img src="http://fsteeg.com/files/micropub-1516372728794-image.jpg" alt="http://fsteeg.com/files/micropub-1516372728794-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1516372728826http://172.105.249.169:9000/notes/1516372728826 Fri, 19 Jan 2018 14:38:48 +0000 micro <p>Eclipse&rsquo;s formatter off/on tags ftw!</p><p><a href="http://fsteeg.com/files/micropub-1516108136676-formatter-off.png"><img src="http://fsteeg.com/files/micropub-1516108136676-formatter-off.png" alt="http://fsteeg.com/files/micropub-1516108136676-formatter-off.png"/></a></p> http://172.105.249.169:9000/notes/1516108226229http://172.105.249.169:9000/notes/1516108226229 Tue, 16 Jan 2018 13:10:26 +0000 micro <p>&ldquo;Nachhaltigkeit in der [wissenschaftlichen] Softwareentwicklung sollte […] durch klare und längerfristige Karriereperspektiven für Entwicklerinnen und Entwickler gefördert werden.&rdquo; <a href="https://twitter.com/unzeit/status/951486237063380992">twitter.com</a></p> http://172.105.249.169:9000/notes/1516103531251http://172.105.249.169:9000/notes/1516103531251 Tue, 16 Jan 2018 11:52:11 +0000 micro <p>&ldquo;Oracle transferred ownership of these project names to the Eclipse Foundation so that they can be held and protected for the community.&rdquo; <a href="https://mmilinkov.wordpress.com/2018/01/15/ee4j-code-arrives/">mmilinkov.wordpress.com</a></p> http://172.105.249.169:9000/notes/1516053180956http://172.105.249.169:9000/notes/1516053180956 Mon, 15 Jan 2018 21:53:00 +0000 micro <p>&ldquo;My mental model of the Web is as a permanent, long-lived store of humanity’s intellectual heritage. For this to be useful, it needs to be indexed, just like a library. Google apparently doesn’t share that view.&rdquo; <a href="https://www.tbray.org/ongoing/When/201x/2018/01/15/Google-is-losing-its-memory">www.tbray.org</a></p> http://172.105.249.169:9000/notes/1516052592708http://172.105.249.169:9000/notes/1516052592708 Mon, 15 Jan 2018 21:43:12 +0000 micro <p>New year&rsquo;s books, home edition 📚</p><p><a href="http://fsteeg.com/files/micropub-1515886692146-image.jpg"><img src="http://fsteeg.com/files/micropub-1515886692146-image.jpg" alt="http://fsteeg.com/files/micropub-1515886692146-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1515886692330http://172.105.249.169:9000/notes/1515886692330 Sat, 13 Jan 2018 23:38:12 +0000 micro <p>&ldquo;The Ministry of Culture and Science of the German State of North Rhine-Westphalia has approved funding for a state-wide graduate institute on &lsquo;Digital Societies&rsquo;&rdquo; <a href="https://twitter.com/CompPolCologne/status/950713516377460737">twitter.com</a></p> http://172.105.249.169:9000/notes/1515880616869http://172.105.249.169:9000/notes/1515880616869 Sat, 13 Jan 2018 21:56:56 +0000 micro <p>&ldquo;Da wo ich einen Wert habe, wo ich mich einbringen kann und wohlfühle, ist Heimat.&rdquo; <a href="http://www.sueddeutsche.de/politik/sz-serie-was-ist-heimat-ein-linker-biobauer-fordert-die-heimatliebe-zurueck-1.3814376">www.sueddeutsche.de</a></p> http://172.105.249.169:9000/notes/1515880023369http://172.105.249.169:9000/notes/1515880023369 Sat, 13 Jan 2018 21:47:03 +0000 micro <p>&ldquo;If [a decentralized Web does achieve mass participation], someone will have figured out how to leverage antitrust to enable it.&rdquo; — It Isn&rsquo;t About The Technology <a href="http://blog.dshr.org/2018/01/it-isnt-about-technology.html">blog.dshr.org</a></p> http://172.105.249.169:9000/notes/1515753140604http://172.105.249.169:9000/notes/1515753140604 Fri, 12 Jan 2018 10:32:20 +0000 micro <p>&ldquo;With Metafacture 5 the migration from a monolithic library to smaller domain-specific libraries [for processing semi-structured data with a focus on library metadata] is completed.&rdquo; <a href="https://github.com/metafacture/metafacture-core/releases/tag/metafacture-core-5.0.0">github.com</a></p> http://172.105.249.169:9000/notes/1515750789861http://172.105.249.169:9000/notes/1515750789861 Fri, 12 Jan 2018 09:53:09 +0000 micro <p>Anmeldung zur DHd-Konferenz 2018 in Köln — Die 5. Tagung „Digital Humanities im deutschsprachigen Raum“ <a href="http://cceh.uni-koeln.de/2017/12/12/anmeldung-zur-dhd-konferenz-2018-in-koln/">cceh.uni-koeln.de</a></p> http://172.105.249.169:9000/notes/1515533773326http://172.105.249.169:9000/notes/1515533773326 Tue, 09 Jan 2018 21:36:13 +0000 micro <p>&ldquo;Just include 📚 with your microblog text about a book you’re reading or related topic, and your post will automatically be collected on <a href="http://micro.blog/discover/books">http://micro.blog/discover/books</a>&rdquo; <a href="http://www.manton.org/2018/01/books-on-micro-blog.html">www.manton.org</a></p> http://172.105.249.169:9000/notes/1515532221714http://172.105.249.169:9000/notes/1515532221714 Tue, 09 Jan 2018 21:10:21 +0000 micro <p>&ldquo;But I don&rsquo;t know how to make a video games???&rdquo; — &ldquo;here are some things that are relatively quick and easy to get into and also don&rsquo;t require a lot of art investment&rdquo; <a href="https://itch.io/jam/games-made-quick-2">GAMES MADE QUICK??? 2.0 - itch.io</a></p> http://172.105.249.169:9000/notes/1515363298945http://172.105.249.169:9000/notes/1515363298945 Sun, 07 Jan 2018 22:14:58 +0000 micro <p>&ldquo;Chinesisches Bibliotheksgesetz für Öffentliche Bibliotheken&rdquo; <a href="https://log.netbib.de/archives/2018/01/05/chinesisches-bibliotheksgesetz-fuer-oeffentliche-bibliotheken/">log.netbib.de</a></p> http://172.105.249.169:9000/notes/1515189420666http://172.105.249.169:9000/notes/1515189420666 Fri, 05 Jan 2018 21:57:00 +0000 micro <p>&ldquo;So the CPU continues to execute &lsquo;speculatively&rsquo;. […] If it is right, it has saved a lot of time. If it is wrong the processor state accumulated during the speculative execution has to be hidden from the real program.&rdquo; <a href="http://blog.dshr.org/2018/01/meltdown-spectre.html">blog.dshr.org</a></p> http://172.105.249.169:9000/notes/1515188636082http://172.105.249.169:9000/notes/1515188636082 Fri, 05 Jan 2018 21:43:56 +0000 micro <p>&ldquo;Sanic is a Flask-like Python 3.5+ web server that&rsquo;s written to go fast. […] Sanic supports async request handlers.&rdquo; <a href="https://github.com/channelcat/sanic#sanic">github.com</a></p> http://172.105.249.169:9000/notes/1515188052250http://172.105.249.169:9000/notes/1515188052250 Fri, 05 Jan 2018 21:34:12 +0000 micro <p>&ldquo;Twitter followers, podcast download stats, blog post views, the scale, whatever. Life isn’t a video game. Happiness doesn’t have a numerical value attached to it.&rdquo; <a href="http://www.manton.org/2018/01/dont-worry-about-numbers.html">www.manton.org</a></p> http://172.105.249.169:9000/notes/1515105771332http://172.105.249.169:9000/notes/1515105771332 Thu, 04 Jan 2018 22:42:51 +0000 micro <p>&ldquo;We are seeking open source projects and organizations to participate in the 14th annual Google Summer of Code (GSoC).&rdquo; <a href="http://opensource.googleblog.com/2018/01/seeking-open-source-projects-for-google.html">opensource.googleblog.com</a></p> http://172.105.249.169:9000/notes/1515104799310http://172.105.249.169:9000/notes/1515104799310 Thu, 04 Jan 2018 22:26:39 +0000 micro <p>&ldquo;Es ist bezeichnend für die heutige Bedeutung der sozialen Netzwerke, dass viele Leute offenbar nicht mehr den Unterschied erkennen zwischen einem profitorientierten Onlineportal und dem öffentlichen Raum.&rdquo; <a href="http://www.zeit.de/politik/deutschland/2018-01/soziale-netzwerke-twitter-beatrix-von-storch-netzwerkdurchsetzungsgesetz/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1515104594627http://172.105.249.169:9000/notes/1515104594627 Thu, 04 Jan 2018 22:23:14 +0000 micro Java annotation processing in Eclipse <p>Java annotations provide metadata for Java code. Many developers use annotations provided by standard Java APIs (like <code>@Override</code>) or by frameworks (like <code>@Test</code>). Developers can define their own annotations and process them at runtime using reflection. Additionally, Java provides APIs for writing custom annotation processors that can process these annotations at compile time.</p><p>Eclipse provides support for hooking these processors into the compilation process. So when you edit code with these annotations, the processor can analyse the source files, do stuff, and report information back to you.</p><p>To give you an idea about how that works, I’ll use Contracts for Java as an example, a tool that implements <a href="https://github.com/nhatminhle/cofoja#usage">a contract model similar to that of Eiffel</a> in Java, based on annotations. For our setup, we&rsquo;ll need Eclipse 4.7 (Oxygen, the 2017 release) or later.</p><p>To use Contracts for Java, create a Java project, and add <a href="https://github.com/nhatminhle/cofoja/releases">the latest release</a> to the build path:</p><p><img src="/images/jdt-apt-1.png" alt="Java project"/></p><p>Then add some code that uses contract annotations (copy and paste the code below into the src folder of your project):</p> <pre><code>import com.google.java.contract.Ensures; import com.google.java.contract.Requires; public class Contracts { public static void main(String[] args) { System.out.println(new Numbers().add(-10, 5)); } } class Numbers { @Requires({ &quot;c &gt; 0&quot;, &quot;b &gt; 0&quot; }) @Ensures({ &quot;result &gt; a&quot;, &quot;result &gt; b&quot; }) int add(int a, int b) { return a - b; } } </code></pre><p>At this point, the project should not report any issues. Normal compilation of the Java source file works just fine. Our processor is not enabled for our annotations yet. To configure the annotation processing we go to Project &gt; Properties &gt; Java Compiler &gt; Annotation Processing.</p><p>Select <em>Enable project specific settings</em> and add the following options that we want to pass to the annotation processor: set <code>com.google.java.contract.classpath</code> to <code>%classpath%</code> and <code>com.google.java.contract.classoutput</code> to <code>%PROJECT.DIR%/.apt_generated</code> (the location of your project’s generated source directory):</p><p><img src="/images/jdt-apt-2.png" alt="Project &amp;gt; Properties &amp;gt; Java Compiler &amp;gt; Annotation Processing"/></p><p>These properties are used by the processor to compile the annotated files, and to create output files. The <code>%classpath%</code> placeholder is replaced with your Java project&rsquo;s build path by Eclipse, so that the annotation processor can access all the libraries used in your project when compiling your code. The <code>%PROJECT.DIR%</code> placeholder is replaced with the path to your Java project.</p><p>Finally we add the processor Jar to Project &gt; Properties &gt; Java Compiler &gt; Annotation Processing &gt; Factory Path:</p><p><img src="/images/jdt-apt-3.png" alt="Project &amp;gt; Properties &amp;gt; Java Compiler &amp;gt; Annotation Processing &amp;gt; Factory Path"/></p><p>After confirming these changes, and running a full build, compilation issues in the annotations are now reported in the editor. Our code contains a precondition mentioning a variable called <code>c</code>. But the annotated method has no <code>c</code> parameter. This is reported as an error in the editor:</p><p><img src="/images/jdt-apt-4.png" alt="Java editor"/></p><p>After we fix the first precondition to <code>a &gt; 0</code>, the code compiles, and we can run it (Run &gt; Run as &gt; Java application).</p><p>To see the files generated by the processor in the <code>.apt_generated</code> directory in Eclipse, you should disable filtering of <code>.*resources</code> in the Package Explorer’s view menu (the little triangle &gt; Filters…):</p><p><img src="/images/jdt-apt-5.png" alt="View menu"/></p><p>Also make sure you have set up your workspace to refresh automatically in Preferences &gt; General &gt; Workspace &gt; <em>Refresh using native hooks or polling</em>:</p><p><img src="/images/jdt-apt-6.png" alt="Preferences &amp;gt; General &amp;gt; Workspace"/></p><p>Besides the annotation processing at compile time, Contracts for Java also uses bytecode instrumentation for its runtime checks. To have the contracts checked at runtime, add <code>-javaagent:cofoja.contracts.asm-1.3-20160207.jar</code> to the VM arguments of your run configuration (go to Run &gt; Run Configurations, activate the <em>Arguments</em> tab):</p><p><img src="/images/jdt-apt-7.png" alt="Run configuration"/></p><p>Now, when running, we are made aware of the violated precondition in our code, since we are passing <code>-10</code> as <code>a</code>, which is not larger than <code>0</code>:</p><p><img src="/images/jdt-apt-8.png" alt="Precondition error"/></p><p>After we fix the call violating the precondition to <code>new Numbers().add(10, 5);</code> we now see that our implementation of <code>add</code> does not fulfill the postcondition, since the result is not larger than <code>a</code>:</p><p><img src="/images/jdt-apt-9.png" alt="Postcondition error"/></p><p>After fixing our implementation to return <code>a + b</code>, not <code>a - b</code>, all contracts are fulfilled and the code now runs without errors.</p><p>Contracts for Java uses annotations in an interesting way and shows what can be achieved with annotation processing as a tool, and how Java annotation processors can integrate with Eclipse.</p><p>If you’re interested in creating your own processors, check out my <a href="https://github.com/fsteeg/eclipse-341298">test projects</a> for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341298">bug 341298</a><sup>1</sup> to get a basic setup where an annotation processor compiles the annotated Java source file.</p><p>For more information on these tools check out the <a href="https://github.com/nhatminhle/cofoja">Contracts for Java</a> and <a href="http://www.eclipse.org/jdt/apt/index.php">JDT-APT</a> project sites.</p> <hr/><p><sup>1</sup> That bug came up <a href="https://fsteeg.wordpress.com/2011/02/07/setting-up-contracts-for-java-in-eclipse/">in the comments</a> of a <a href="http://fsteeg.com/notes/setting-up-contracts-for-java-in-eclipse">previous post</a> about using Contracts for Java in Eclipse. </p> http://172.105.249.169:9000/notes/java-annotation-processing-in-eclipsehttp://172.105.249.169:9000/notes/java-annotation-processing-in-eclipse Sat, 30 Dec 2017 00:00:01 +0000 eclipseprogramming <p>&ldquo;The issue isn’t that Twitter doesn’t care. It’s instead a fundamental design flaw in the platform. Because tweets don’t exist outside of Twitter, when you’re banned, you’re done.&rdquo; <a href="http://www.manton.org/2017/12/twitters-weeds.html">www.manton.org</a></p> http://172.105.249.169:9000/notes/1513980308380http://172.105.249.169:9000/notes/1513980308380 Fri, 22 Dec 2017 22:05:08 +0000 micro <p>Totally in love with this tune <a href="https://soundcloud.com/carpe-diem-records/suite-d-dur-passagalia">soundcloud.com</a></p> http://172.105.249.169:9000/notes/1513946095405http://172.105.249.169:9000/notes/1513946095405 Fri, 22 Dec 2017 12:34:55 +0000 micro <p>Citizen Science Projekt der Open Knowledge Foundation zur Feinstaubmessung, mit Anleitung zum Sensorbau und Kartenvisualisierung <a href="http://luftdaten.info/">luftdaten.info</a></p> http://172.105.249.169:9000/notes/1513945796827http://172.105.249.169:9000/notes/1513945796827 Fri, 22 Dec 2017 12:29:56 +0000 micro <p>&ldquo;we see a thriving software industry that largely ignores research, and a research community that writes papers rather than software&rdquo; <a href="http://doc.cat-v.org/bell_labs/utah2000/">doc.cat-v.org</a></p> http://172.105.249.169:9000/notes/1513684597033http://172.105.249.169:9000/notes/1513684597033 Tue, 19 Dec 2017 11:56:37 +0000 micro <p>&ldquo;Diesen finanziellen Aufwand bringen Bibliotheken auf und verwandeln so das private Gut der Urheber von Erkenntnissen in ein öffentliches Gut, das allgemein zugänglich ist.&rdquo; <a href="http://www.deutschlandfunk.de/informationsgewinnung-wozu-noch-bibliotheken.1184.de.html?dram:article_id=399277">deutschlandfunk.de</a></p> http://172.105.249.169:9000/notes/1513683999292http://172.105.249.169:9000/notes/1513683999292 Tue, 19 Dec 2017 11:46:39 +0000 micro <p>&ldquo;Flexible, kürzere, aber vollzeitnahe Arbeitszeiten sind gefragt, sowohl von Frauen als auch von Männern.&rdquo; <a href="http://www.zeit.de/wirtschaft/2017-11/flexible-arbeitszeiten-tarifvertrag-chemiebranche-arbeitnehmer">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1512162857627http://172.105.249.169:9000/notes/1512162857627 Fri, 01 Dec 2017 21:14:17 +0000 micro <p>The Eclipse SDK is switching major releases from yearly to every 3 months <a href="https://dev.eclipse.org/mhonarc/lists/cross-project-issues-dev/msg15021.html">dev.eclipse.org</a></p> http://172.105.249.169:9000/notes/1512131306801http://172.105.249.169:9000/notes/1512131306801 Fri, 01 Dec 2017 12:28:26 +0000 micro <p>Posted to the lobid blog: &ldquo;Using the Java API for scripting in Elasticsearch 5.6&rdquo; <a href="http://blog.lobid.org/2017/11/29/java-api-scripting-elasticsearch.html">blog.lobid.org</a></p> http://172.105.249.169:9000/notes/1511946742714http://172.105.249.169:9000/notes/1511946742714 Wed, 29 Nov 2017 09:12:22 +0000 micro <p>&lsquo;der Westfälische Frieden[, fast 150 Jahre gültige Verfassung, basierte] auf einem Prinzip, das undenkbar geworden ist: Die Parteien sicherten einander &ldquo;Amnestie&rdquo; und &ldquo;immerwährendes Vergessen&rdquo; zu.&rsquo; <a href="http://www.zeit.de/zeit-geschichte/2017/05/dreissigjaehriger-krieg-westfaelische-frieden-syrien-georg-schmidt-interview/komplettansicht">www.zeit.de</a></p> http://172.105.249.169:9000/notes/1511473108063http://172.105.249.169:9000/notes/1511473108063 Thu, 23 Nov 2017 21:38:28 +0000 micro <p>&ldquo;Virtuelle Deutsche Landesbibliographie (VDL)&rdquo; <a href="https://log.netbib.de/archives/2017/11/19/virtuelle-deutsche-landesbibliographie-vdl/">log.netbib.de</a></p> http://172.105.249.169:9000/notes/1511096861391http://172.105.249.169:9000/notes/1511096861391 Sun, 19 Nov 2017 13:07:41 +0000 micro <p>Giving the German keyboard layout a serious try</p><p><a href="http://fsteeg.com/files/micropub-1510956345774-image.jpg"><img src="http://fsteeg.com/files/micropub-1510956345774-image.jpg" alt="/files/micropub-1510956345774-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1510956346041http://172.105.249.169:9000/notes/1510956346041 Fri, 17 Nov 2017 22:05:46 +0000 micro <p>Products Over Projects: &ldquo;Software projects [&hellip;] organize work into temporary teams and are funded with specific benefits projected in a business case. Product-mode instead uses durable teams working on a persistent business issue.&rdquo; <a href="https://martinfowler.com/articles/products-over-projects.html">martinfowler.com</a></p> http://172.105.249.169:9000/notes/1510842179041http://172.105.249.169:9000/notes/1510842179041 Thu, 16 Nov 2017 14:22:59 +0000 micro <p>&ldquo;Introducing Teletype for Atom: Code collaboratively in real time&rdquo; <a href="https://github.com/blog/2468-introducing-teletype-for-atom-code-collaboratively-in-real-time">github.com</a></p> http://172.105.249.169:9000/notes/1510766846624http://172.105.249.169:9000/notes/1510766846624 Wed, 15 Nov 2017 17:27:26 +0000 micro <p>&ldquo;In short, we need a new name to replace &lsquo;Java EE&rsquo;.&rdquo; <a href="https://github.com/eclipse-ee4j/ee4j/issues/1">https://github.com/eclipse-ee4j/ee4j/issues/1</a></p> http://172.105.249.169:9000/notes/1510766346354http://172.105.249.169:9000/notes/1510766346354 Wed, 15 Nov 2017 17:19:06 +0000 micro <p>The new Firefox: &ldquo;Twice as fast, and still committed to putting people over profit. We are fighting for a healthy internet […] accessible and open to all.&rdquo; <a href="https://blog.mozilla.org/blog/2017/11/14/fast-for-good-launching-the-new-firefox-into-the-world/">blog.mozilla.org</a></p> http://172.105.249.169:9000/notes/1510742786640http://172.105.249.169:9000/notes/1510742786640 Wed, 15 Nov 2017 10:46:26 +0000 micro <p>&ldquo;This Is What a Librarian Looks Like&rdquo; <a href="http://www.slate.com/blogs/behold/2014/02/11/kyle_cassidy_photographs_librarians_at_the_american_library_association.html">www.slate.com</a></p><p><a href="http://fsteeg.com/files/micropub-1510587116959-image.jpg"><img src="http://fsteeg.com/files/micropub-1510587116959-image.jpg" alt="/files/micropub-1510587116959-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1510587117761http://172.105.249.169:9000/notes/1510587117761 Mon, 13 Nov 2017 15:31:57 +0000 micro <p>&ldquo;add structure[d schema.org] data to your pages because during indexing, [search engines] will be able to better understand what your site is about&rdquo; <a href="http://dataliberate.com/?p=1867">dataliberate.com</a></p> http://172.105.249.169:9000/notes/1510583316721http://172.105.249.169:9000/notes/1510583316721 Mon, 13 Nov 2017 14:28:36 +0000 micro Micropub, IndieAuth, and posting to my own site with Micro.blog <blockquote><p>Been learning about <a href="https://indieweb.org/Micropub">Micropub</a> and <a href="https://indieauth.com">IndieAuth</a> while setting up my <a href="http://micro.blog/fsteeg">Micro.blog</a>. Posting with 3rd party client to my own site, without having to handle auth myself. Cool stuff! ✨ — <a href="http://fsteeg.com/notes/1509136632711">http://fsteeg.com/notes/1509136632711</a></p> </blockquote><p><a href="https://micro.blog">Micro.blog</a> is &ldquo;a new social network for independent microblogs&rdquo;. It’s something like Twitter based on open web standards. This is what I learned when setting up <a href="https://micro.blog/fsteeg">my Micro.blog</a> for posting to <a href="http://fsteeg.com/notes">my own site</a>.</p><p>Micro.blog supports the <a href="https://www.w3.org/TR/micropub/">Micropub W3C recommendation</a> for posting content on the open web. It does so <a href="http://help.micro.blog/2017/api-posting/">in different ways</a>. For me, the relevant one was that you can use the Micro.blog iOS and Mac clients to post content to your own site using Micropub. On the implementation side, for me this mainly meant handling <code>x-www-form-urlencoded</code> POST requests. Internally, I create the new post in my system, which is picked up by Micro.blog from my site’s RSS stream.</p><p>A crucial part of posting is authentication and authorization, otherwise anyone could post to my site. Micro.blog supports <a href="https://indieauth.com/">IndieAuth</a> for signing in with your own domain name. The actual OpenID login can be delegated to GitHub or Twitter. As with <a href="http://fsteeg.com/notes/owning-your-content-on-the-web">owning your content by owning your URLs, even if it’s hosted elsewhere</a>, we use our own site as our identity, not our profile on a 3rd party site, even if we delegate the actual login. On the implementation side, for me this mainly meant adding <code>link</code> elements with specific <code>ref</code> attributes to my site’s HTML sources.</p><p>A final cool thing that Micro.blog has, and that is relevant for my own site, is support for the <a href="https://www.w3.org/TR/webmention/">Webmention W3C recommendation</a>. For each reply to my posts on Micro.blog, it sends a Webmention to my site, so I can link back to these mentions of my site on the web. On the implementation side, for me this again mainly meant handling <code>x-www-form-urlencoded</code> POST requests. Internally, I add links in my system’s HTML sources according to the Webmention’s <code>source</code> and <code>target</code> values.</p><p>I found it quite exciting to see how Micro.blog really provides the glue for building something like Twitter <a href="http://help.micro.blog/2017/indiewebcamp/">based on open web standards</a>. Actually building an <a href="https://indieweb.org/">IndieWeb</a>, “a people-focused alternative to the corporate web”, is on all of us.</p><p>As mentioned above, Micro.blog is different things in one. If you don’t run your own site, you might care about its Wordpress support, or its hosted blogs, or <a href="http://help.micro.blog">something else</a>. Let me know if you’d like an invite code.</p> http://172.105.249.169:9000/notes/micropub-indieauth-and-posting-to-my-own-site-with-microbloghttp://172.105.249.169:9000/notes/micropub-indieauth-and-posting-to-my-own-site-with-microblog Sun, 12 Nov 2017 00:00:01 +0000 webprogramming <p>&ldquo;Since Oxygen.1a, the Eclipse IDE runs out of the box with Java 9 &amp; supports development for Java 9 as well as testing with JUnit 5&rdquo; <a href="https://eclipsehowl.wordpress.com/2017/11/11/eclipse-oxygen-1a-ide-improvements-java-9-junit-5-general-gradle-and-php/">eclipsehowl.wordpress.com</a></p> http://172.105.249.169:9000/notes/1510409748427http://172.105.249.169:9000/notes/1510409748427 Sat, 11 Nov 2017 14:15:48 +0000 micro <p>Now that Apple is big in ML &amp; AI tech, maybe they‘ll find <em>some</em> way to give playlists with a single album a meaningful name, <em>automatically</em> 😳</p> http://172.105.249.169:9000/notes/1509473084147http://172.105.249.169:9000/notes/1509473084147 Tue, 31 Oct 2017 18:04:44 +0000 micro <p>Not <em>quite</em> frustration free actually</p><p><a href="http://fsteeg.com/files/micropub-1509219538996-image.jpg"><img src="http://fsteeg.com/files/micropub-1509219538996-image.jpg" alt="/files/micropub-1509219538996-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1509219539049http://172.105.249.169:9000/notes/1509219539049 Sat, 28 Oct 2017 19:38:59 +0000 micro <p><a href="http://www.dasbibliothekswissen.de/Die-Urheberrechtsreform%3A-Das-%C3%A4ndert-sich-f%C3%BCr-Bibliotheken-zum-1.-M%C3%A4rz-2018.html">&ldquo;Bibliotheken sind exklusiv berechtigt, die ausgelesenen Daten dauerhaft zu speichern&rdquo;</a> — Forscher müssen sie nach Projektabschluss löschen.</p> http://172.105.249.169:9000/notes/1509217242916http://172.105.249.169:9000/notes/1509217242916 Sat, 28 Oct 2017 19:00:42 +0000 micro <p><a href="http://www.dasbibliothekswissen.de/Die-Urheberrechtsreform%3A-Das-%C3%A4ndert-sich-f%C3%BCr-Bibliotheken-zum-1.-M%C3%A4rz-2018.html">&ldquo;Wissenschaftler erhalten künftig das Recht, Datenbanken, Zeitschriften … auch übergreifend automatisiert auszulesen, zu speichern &amp; auszuwerten&rdquo;</a></p> http://172.105.249.169:9000/notes/1509216823442http://172.105.249.169:9000/notes/1509216823442 Sat, 28 Oct 2017 18:53:43 +0000 micro <p>Great way to find HTML icons 🔎 <a href="http://www.amp-what.com/unicode/search/">&ldquo;<strong>amp-what</strong> — a quick, interactive reference of 14,500 HTML character entities and common Unicode characters&rdquo;</a></p> http://172.105.249.169:9000/notes/1509139927461http://172.105.249.169:9000/notes/1509139927461 Fri, 27 Oct 2017 21:32:07 +0000 micro <p>1/4 there, I <em>guess</em></p><p><a href="http://fsteeg.com/files/micropub-1509138998497-image.jpg"><img src="http://fsteeg.com/files/micropub-1509138998497-image.jpg" alt="/files/micropub-1509138998497-image.jpg"/></a></p> http://172.105.249.169:9000/notes/1509138998624http://172.105.249.169:9000/notes/1509138998624 Fri, 27 Oct 2017 21:16:38 +0000 micro <p>Been learning about <a href="https://indieweb.org/Micropub">Micropub</a> and <a href="https://indieauth.com">IndieAuth</a> while setting up my <a href="http://micro.blog/fsteeg">Micro.blog</a>. Posting with 3rd party client to my own site, without having to handle auth myself. Cool stuff! ✨</p> http://172.105.249.169:9000/notes/1509136632711http://172.105.249.169:9000/notes/1509136632711 Fri, 27 Oct 2017 20:37:12 +0000 micro Re: Research Infrastructure and the Future of National Libraries <p></p><p><small>Re: Research Infrastructure and the Future of National Libraries: <a href="http://historyonics.blogspot.de/2017/02/research-infrastructure-and-future-of.html?m=1">http://historyonics.blogspot.de/2017/02/research-infrastructure-and-future-of.html?m=1</a></small></p><p><blockquote cite="http://historyonics.blogspot.de/2017/02/research-infrastructure-and-future-of.html?m=1">&ldquo;it seems to me that we are challenged to rethink ‘research’ data, and publication as a new form of infrastructure. So, the Library &ndash; or somewhere &ndash; needs to create a context in which notes and files, data stores of all kinds can be shared and curated &ndash; in a digital form. And this data, or data store, needs in turn to be tied directly to the public commentary &ndash; or publication &ndash; built upon that data&rdquo;</blockquote></p> http://172.105.249.169:9000/notes/re-research-infrastructure-and-the-future-of-national-librarieshttp://172.105.249.169:9000/notes/re-research-infrastructure-and-the-future-of-national-libraries Sat, 04 Feb 2017 00:00:01 +0000 web Re: The Zen of Missing Out on The Next Great Programming Tool <p></p><p><small>Re: The Zen of Missing Out on The Next Great Programming Tool: <a href="https://dev.to/ben/the-zen-of-missing-out-on-the-next-great-programming-tool">https://dev.to/ben/the-zen-of-missing-out-on-the-next-great-programming-tool</a></small></p><p><blockquote cite="https://dev.to/ben/the-zen-of-missing-out-on-the-next-great-programming-tool">&ldquo;The action of inaction can be an incredibly powerful one in programming. You can gain a lot of wisdom and future productivity by waiting back and being a late adopter of new technology.&rdquo;</blockquote></p> http://172.105.249.169:9000/notes/re-the-zen-of-missing-out-on-the-next-great-programming-toolhttp://172.105.249.169:9000/notes/re-the-zen-of-missing-out-on-the-next-great-programming-tool Sun, 15 Jan 2017 00:00:01 +0000 Re: Indie Microblogging: Owning your short-form writing | Marco.org <p></p><p><small>Re: Indie Microblogging: Owning your short-form writing | Marco.org: <a href="https://marco.org/2017/01/07/indie-microblogging-kickstarter">https://marco.org/2017/01/07/indie-microblogging-kickstarter</a></small></p><p><blockquote cite="https://marco.org/2017/01/07/indie-microblogging-kickstarter">&ldquo;We’ve all been pouring a lot more of our writing and attention into Twitter and Facebook than the rest of the web, and the diversity and decentralization of the web has suffered greatly.&rdquo;</blockquote></p> http://172.105.249.169:9000/notes/re-indie-microblogging-owning-your-short-form-writing-marco-orghttp://172.105.249.169:9000/notes/re-indie-microblogging-owning-your-short-form-writing-marco-org Tue, 10 Jan 2017 00:00:01 +0000 web Re: Steven Pinker on Twitter: open letter, screen time <p></p><p><small>Re: Steven Pinker on Twitter: open letter, screen time: <a href="https://twitter.com/sapinker/status/817411182621380613">https://twitter.com/sapinker/status/817411182621380613</a></small></p><p><blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">I am a signatory of a new open letter against the evidence-free moral panic about kids and electronic screens. <a href="https://t.co/c9LnM73DTJ">https://t.co/c9LnM73DTJ</a></p>&mdash;Steven Pinker (@sapinker) <a href="https://twitter.com/sapinker/status/817411182621380613">January 6, 2017</a></blockquote></p><p>From the linked article:</p><p><blockquote cite="https://twitter.com/sapinker/status/817411182621380613">&ldquo;the concept of “screen time” itself is simplistic and arguably meaningless&rdquo;</blockquote></p><p>I feel it&#8217;s like talking about &#8216;paper time&#8217; to summarize (any) reading, painting, handicrafts, etc. It makes no sense to focus on the medium only and ignore the content.</p> http://172.105.249.169:9000/notes/re-steven-pinker-on-twitter-open-letter-screen-timehttp://172.105.249.169:9000/notes/re-steven-pinker-on-twitter-open-letter-screen-time Mon, 09 Jan 2017 00:00:01 +0000 media Re: So your institute went cold turkey on publisher X. What now? | bjoern.brembs.blog <p></p><p><small>Re: So your institute went cold turkey on publisher X. What now? | bjoern.brembs.blog: <a href="http://bjoern.brembs.net/2016/12/so-your-institute-went-cold-turkey-on-publisher-x-what-now/">http://bjoern.brembs.net/2016/12/so-your-institute-went-cold-turkey-on-publisher-x-what-now/</a></small></p><p><blockquote cite="http://bjoern.brembs.net/2016/12/so-your-institute-went-cold-turkey-on-publisher-x-what-now/">&ldquo;if you find that you can indeed access most of the content you need to read via such means, let your librarian know that you are fine with dropping subscriptions &ndash; it will eventually allow your institution to be able to afford providing you with a modern digital infrastructure.&rdquo;</blockquote></p> http://172.105.249.169:9000/notes/re-so-your-institute-went-cold-turkey-on-publisher-x-what-now-bjoern-brembs-bloghttp://172.105.249.169:9000/notes/re-so-your-institute-went-cold-turkey-on-publisher-x-what-now-bjoern-brembs-blog Mon, 09 Jan 2017 00:00:01 +0000 media Re: Julia Evans on Twitter: twitter, quote tweets, screen readers <p></p><p><small>Re: Julia Evans on Twitter: twitter, quote tweets, screen readers: <a href="https://twitter.com/b0rk/status/817150930038751232">https://twitter.com/b0rk/status/817150930038751232</a></small></p><p><blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">TIL twitter renders quote tweets like &quot;julia retweeted bob.&quot;... &quot;julia added...&quot; for screen readers. (clicked &quot;view source&quot; on my timeline) <a href="https://t.co/Q1wNykOhZg">pic.twitter.com/Q1wNykOhZg</a></p>&mdash;Julia Evans (@b0rk) <a href="https://twitter.com/b0rk/status/817150930038751232">5. Januar 2017</a></blockquote></p><p>That&#8217;s actually better than the visual presentation, which puts the addition first.</p><p>Which you can <a href="https://twitter.com/fsteeg/status/818047823694405632">see here</a>.</p> http://172.105.249.169:9000/notes/re-julia-evans-on-twitter-twitter-quote-tweets-screen-readershttp://172.105.249.169:9000/notes/re-julia-evans-on-twitter-twitter-quote-tweets-screen-readers Sun, 08 Jan 2017 00:00:01 +0000 webmedia Re: James Wong on Twitter: I love this hacked meme <p></p><p><small>Re: James Wong on Twitter: I love this hacked meme: <a href="https://twitter.com/Botanygeek/status/817277095608983557">https://twitter.com/Botanygeek/status/817277095608983557</a></small></p><p><blockquote cite="https://twitter.com/Botanygeek/status/817277095608983557">&ldquo;People having an uninformed opinion about something they don&#8217;t understand and proclaiming their opinion as being equally valid as facts is what is ruining the world.&rdquo;</blockquote></p> http://172.105.249.169:9000/notes/re-james-wong-on-twitter-i-love-this-hacked-memehttp://172.105.249.169:9000/notes/re-james-wong-on-twitter-i-love-this-hacked-meme Sun, 08 Jan 2017 00:00:01 +0000 media Re: Thank you to App.net | Manton Reece <p></p><p><small>Thank you to App.net | Manton Reece: <a href="http://www.manton.org/2017/01/thank-you-to-app-net.html">http://www.manton.org/2017/01/thank-you-to-app-net.html</a></small></p><p><blockquote cite="http://www.manton.org/2017/01/thank-you-to-app-net.html">&ldquo;I could use your help to spread the idea of independent microblogging. We don’t need just another Twitter or Facebook clone. We need a new platform that encourages blogging on the open web.&rdquo;</blockquote></p> http://172.105.249.169:9000/notes/re-thank-you-to-app-net-manton-reecehttp://172.105.249.169:9000/notes/re-thank-you-to-app-net-manton-reece Sat, 07 Jan 2017 00:00:01 +0000 web Workflow: programming for iOS, on iOS <p></p><p>I had <a href="http://www.manton.org/2017/01/thank-you-to-app-net.html">this post by Manton Reece</a> in my reader and wanted to share it on Twitter. But posting about independent microblogging on Twitter seems so wrong. So I picked up a plan I&#8217;ve had for a while: to use <a href="https://workflow.is/">Workflow</a> for posting to my blog from iOS. In particular to share stuff I read on my phone (where I actually do most of my online reading).</p><p>This basically involves picking up the browser URL and clipboard content, ask for some text like a title, tag, and content for the new post, provide defaults for these, construct the path and file expected by my blog, store a file in Dropbox, preview the post in a browser, and finally tweet a link to the post.</p><p>I was surprised to see how quickly I could set that up with Workflow. Changing the workflow and testing it in the browser (it hooks into the share functionality in iOS) without any deployment, refreshing or even saving is really nice. Combined with its ability to use all the system stuff (including Dropbox and Twitter integration), this makes Workflow feel like a truly native development environment for iOS, much more than actual native iOS development, which happens on a different platform, the Mac. </p><p>So yay, I was able to share Manton&#8217;s post <a href="http://fsteeg.com/notes/re-thank-you-to-app-net-manton-reece">on my own blog</a> and <a href="https://twitter.com/fsteeg/status/817732776925523968">cross post it to Twitter</a>, from my phone.</p> http://172.105.249.169:9000/notes/workflow-programming-for-ios-on-ioshttp://172.105.249.169:9000/notes/workflow-programming-for-ios-on-ios Sat, 07 Jan 2017 00:00:01 +0000 programming Owning your content on the web <p></p><p><q>Owning your domain and URLs is the first step to owning your content.</q> &mdash;<a href="http://www.manton.org/2016/02/the-ringer-will-use-medium.html">Manton Reece</a>, so true.</p><p>A few years ago, I had my wordpress.com blog set up with my own custom domain, fsteeg.com. At some point in 2014, I&#8217;ve set up my own site at that domain, and put in place redirects for the old blog posts, so that URLs like this would remain resolvable:</p><p><code>http://fsteeg.com/2008/05/23/reporting-research-the-way-of-the-future</code></p><p>They redirected to the wordpress blog:</p><p><code>http://fsteeg.wordpress.com/2008/05/23/reporting-research-the-way-of-the-future</code></p><p>I&#8217;ve now moved that blog content (plus older stuff) to my own site, and re-redirected the old redirects to the now internal content for the original wordpress-at-fsteeg.com URLs.</p><p>They now redirect internally:</p><p><code>http://fsteeg.com/notes/reporting-research-the-way-of-the-future</code></p><p>So the mere decision to use a custom domain for my blog many years ago made it independent of the actual hosting location (wordpress.com or self-hosted) and publishing system (wordpress or my own software). In a way I&#8217;ve been referencing a system for years that I only now created. Your own domain and URLs really give you a lot of control over your content, even if that content is actually stored elsewhere for years.</p> http://172.105.249.169:9000/notes/owning-your-content-on-the-webhttp://172.105.249.169:9000/notes/owning-your-content-on-the-web Wed, 23 Mar 2016 00:00:01 +0000 webprogramming More self-containedness, less code sharing <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2015/12/18/more-self-containedness-less-code-sharing/">https://fsteeg.wordpress.com/2015/12/18/more-self-containedness-less-code-sharing/</a></small></p> <p/> There's this idea I've been encountering in different forms, that I really think is good. Here are some links on that. <p/> I think it was at the Javaland conference in early 2014, I believe in Stefan Tilkov's talk, that I first heard of not building for reuse, but building for replacement. The idea is to have modules that can be easily replaced with better or different versions, instead of many interdependent modules effectively forming one big entangled system. <p/> Martin Fowler has a great description of an architecture with a similar goal. <blockquote class="twitter-tweet" lang="en" dir="ltr">&quot;Don&#39;t use layers as top level modules in a complex application, instead make your top level modules be full-stack.&quot; <a href="http://t.co/gSdh0ugjDG">http://t.co/gSdh0ugjDG</a></p>&mdash; Fabian Steeg (@fsteeg) <a href="https://twitter.com/fsteeg/status/637581577011249152">August 29, 2015</a></blockquote> <p/> It's one of these cases where what seems to be conventional programming wisdom is turned upside down: we all learn reuse is good, we think reuse is the way to modular software. It's not always true. <blockquote class="twitter-tweet"><p lang="en" dir="ltr">&quot;Prefer duplication over the wrong abstraction.&quot; <a href="http://t.co/MbjSZzUKUy">http://t.co/MbjSZzUKUy</a></p>&mdash; Computer Science (@CompSciFact) <a href="https://twitter.com/CompSciFact/status/636898546743136256">August 27, 2015</a></blockquote> <p/> We think we're future proofing software by lots of reuse and abstraction, but we're doing it wrong. We need to take advantage of what software is like, and make it easy to change. <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Future proofing software - we&#39;re doing it wrong (Part 1):<a href="https://t.co/A3azRqDiQV">https://t.co/A3azRqDiQV</a></p>&mdash; Christin Gorman (@ChristinGorman) <a href="https://twitter.com/ChristinGorman/status/657904277608865792">October 24, 2015</a></blockquote> <p/> To close the circle, Stafan Tilkov recently posted a great description of the architecture mentioned above, giving it a new name: Self-Contained Systems. Part of these Self-Contained Systems is that to avoid tight coupling, they <a href="http://scs-architecture.org/index.html#no-code-sharing">share no business code</a>. <blockquote class="twitter-tweet"><p lang="en" dir="ltr">We’ve set up a website for “self-contained systems”, our preferred variant of the <a href="https://twitter.com/hashtag/microservices?src=hash">#microservices</a> approach: <a href="https://t.co/rfScSyIxC0">https://t.co/rfScSyIxC0</a> <a href="https://twitter.com/hashtag/scsarch?src=hash">#scsarch</a></p>&mdash; Stefan Tilkov (@stilkov) <a href="https://twitter.com/stilkov/status/675017668718645248">December 10, 2015</a></blockquote> <p/> At hbz, we're trying to build our software <a href="http://hbz.github.io/#common-architecture">according to these ideas</a>. http://172.105.249.169:9000/notes/more-self-containedness-less-code-sharinghttp://172.105.249.169:9000/notes/more-self-containedness-less-code-sharing Fri, 18 Dec 2015 00:00:01 +0000 architectureprogramming Why LOD needs applications, and libraries need APIs <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2015/12/07/why-lod-needs-applications-and-libraries-need-apis/">https://fsteeg.wordpress.com/2015/12/07/why-lod-needs-applications-and-libraries-need-apis/</a></small></p> <p/> <i>This post is based on a talk I gave at <a href="http://swib.org/swib15/">SWIB15</a> on November 24 titled "LOD for applications: using the Lobid API".</i> <p/> I recently stumbled upon a poster by the American Library Association from 1925, which advertises library work as "the profession on which all other professions and occupations depend": <p/> <img src="http://hbz.github.io/slides/swib-15/img/ala-flyer.png" alt="" /> <p/> <i>Source: <a href="http://imagesearchnew.library.illinois.edu/cdm/singleitem/collection/alaposters/id/23/rec/2">http://imagesearchnew.library.illinois.edu/cdm/singleitem/collection/alaposters/id/23/rec/2</a></i> <p/> I'm sure that anyone who does library work kind of likes that sentiment, I certainly do. At the same time it makes you wonder how true that statement actually is. Even back then. For instance my grandfather, who was a baker, I don't think he actually depended on library work. <p/> But even more, it makes you wonder how true that is today. I don't have an answer to that, but to the extend that it is true today, there's something else involved, and that's software. <p/> Because today software is a thing on which every profession and occupation depends. Well, as the statement about library work wasn't quite true even in 1925, the statement about software isn't quite true today. Not all professions and occupations actually depend on software. But there is one profession that certainly does, and that's library work. <p/> Because "libraries are software". The services that libraries provide are provided directly or indirectly through software. <blockquote class="twitter-tweet" lang="en" dir="ltr">&quot;Libraries are Software&quot; by <a href="https://twitter.com/codyh">@codyh</a> — Good short essay for dev and non-dev librarians <a href="http://t.co/Y9YLmTaZj0">http://t.co/Y9YLmTaZj0</a> <a href="http://t.co/iVGKFaBql8">pic.twitter.com/iVGKFaBql8</a></p>&mdash; Tim Spalding (@librarythingtim) <a href="https://twitter.com/librarythingtim/status/644509561076981760">September 17, 2015</a></blockquote> <p/> This post is based on a talk titled <i>LOD (Linked Open Data) for applications: using the Lobid API (Application Programming Interface)</i>. So why would you want to use an API? Well, because <i>LOD for applications</i> means building software. And APIs make software development manageable. <p/> They allow us to build modular software, with stable applications that don't have to change when other parts of the software change. At the same time, they allow us to have flexible data sources that can change without requiring changes in the applications. <p/> Lets take a look at what that means in the case of the <a href="http://lobid.org">Lobid</a> API. The Lobid API provides access to authority data from different sources in different formats, to geodata from Wikidata, and to bibliographic title data from the hbz union catalogue. Applications access this data through the API: <p/> <a href="http://fsteeg.com/images/data.png" target="_blank"><img class="alignnone size-full" src="http://fsteeg.com/images/data.png" alt="data" /></a> <p/> That way, the API decouples the applications from the concrete data sources, formats, and systems, which can change without requiring the applications to change at the same time. <p/> <h2>Using APIs</h2> <p/> So the talk mentioned above is subtitled <i>Using the Lobid API</i>. Now what does that even mean, to use an API? In the case of a Web API, it basically means opening URLs. So it's just like opening a Web site, but what we want to get back is structured data: <p/> <a href="http://beta.lobid.org/organisations/search?q=hbz" target="_blank">http://beta.lobid.org/organisations/search?q=hbz</a> <p/> <a href="http://fsteeg.com/images/demo1-1-light.png" target="_blank"><img src="http://fsteeg.com/images/demo1-1-light.png" alt="demo1-1-light" /></a> <p/> This sample queries our API for organisations containing "hbz". Now if we change the URL in the browser address bar to search for something else, like "zbw", we get a different result: <p/> <a href="http://beta.lobid.org/organisations/search?q=zbw" target="_blank">http://beta.lobid.org/organisations/search?q=zbw</a> <p/> <a href="http://fsteeg.com/images/demo1-2-light.png" target="_blank"><img src="http://fsteeg.com/images/demo1-2-light.png" alt="demo1-2-light.png" /></a> <p/> We're using the API. <p/> <h2>Application: bulk downloads</h2> <p/> The idea of an API is that we can use the same URLs we opened in a browser in different ways. For instance, we can call them from the command line, to get bulk downloads: <pre><code>curl -H "Accept: application/ld+json" -H "Accept-Encoding: gzip"</code></pre> <p/> Here we use curl to call the URL, we pass headers specifying the requested format (JSON-LD in this case) and that we want to gzip the response to save network bandwidth and disk space. <p/> We can then pass arbitrary queries, in the form of URLs, e.g. to get all holdings of a specific library: <pre><code>"http://lobid.org/resource?owner=DE-6&amp;scroll=true"</code></pre> <p/> Or all new titles for a specific subject: <pre><code>"http://lobid.org/resource?subject=4055382-6&amp;scroll=20151023"</code></pre> <p/> We finally direct the response into a file: <pre><code>&gt; "resources-4055382-20151023.gz"</code></pre> <p/> <i>Note: this should all be in a single line, using one URL only, so to reproduce this, call e.g.:</i> <p/> <code>curl -H "Accept: application/ld+json" -H "Accept-Encoding: gzip" "http://lobid.org/resource?subject=4055382-6&amp;scroll=20151023" &gt; "resources-4055382-20151023.gz"</code> <p/> So what we get from this is local data, ready for offline usage, but still retrieved from an API. There is no contradiction between local data dumps and APIs, an API is just a way to deliver data. <p/> <h2>Application: answer a single question</h2> <p/> Now let's take a look at a concrete application. Say we want to answer a single question, like "How many libraries are there in Germany?". Is it 10.000, which is kind of the traditional answer: <blockquote class="twitter-tweet" lang="de" dir="ltr">.<a href="https://twitter.com/fsteeg">@fsteeg</a> &quot;10.200 [Bibliotheken] gibt es insgesamt&quot;. Sind eher doppelt so viel, wenn man die Pfarrbibliotheken dazu zählt.</p>&mdash; Adrian Pohl (@acka47) <a href="https://twitter.com/acka47/status/604286119950176258">May 29, 2015</a></blockquote> <p/> Or is it more like 20.000, as an initial query to our API suggested: <blockquote class="twitter-tweet"><p lang="de" dir="ltr">In Deutschland gibt es 19.347 Bibliotheken <a href="http://t.co/qPcY3Kh7o7">http://t.co/qPcY3Kh7o7</a> . Datenquelle: dbs und ZDB-Sigeldatei /via <a href="https://twitter.com/lobidOrg">@lobidOrg</a> API</p>&mdash; dr0ide (@dr0ide) <a href="https://twitter.com/dr0ide/status/608588848243818496">June 10, 2015</a></blockquote> <p/> So let's take a look at how we can answer that question by using the Lobid API. First lets take a look at a single organisation ("DE-206H") in our API. This organisation contains a "type" field which specifies that this is a library. So this is the first field we'll be using, since we want to query for all libraries in Germany. The organisation also contains a nested "addressCountry" field: <p/> <a href="http://beta.lobid.org/organisations/DE-206H" target="_blank">http://beta.lobid.org/organisations/DE-206H</a> <p/> <a href="http://fsteeg.com/images/demo2-1-light.png" target="_blank"><img src="http://fsteeg.com/images/demo2-1-light.png" alt="demo2-1-light.png" /></a> <p/> The "addressCountry" field is nested in an "address" field, which itself is nested in a "location" field. We can express the path to this nested field as "location.address.addressCountry". <p/> With these two fields, we can now create a query that expresses that we're looking for organisations with "type:Library AND location.address.addressCountry:Germany" (the + in the address bar are encoded spaces). In the response, we have a "hits.total" field with the answer to our question: <p/> <a href="http://beta.lobid.org/organisations/search?q=type:Library+AND+location.address.addressCountry:Germany" target="_blank">http://beta.lobid.org/organisations/search?q=type:Library+AND+location.address.addressCountry:Germany</a> <p/> <a href="http://fsteeg.com/images/demo2-2-light.png" target="_blank"><img src="http://fsteeg.com/images/demo2-2-light.png" alt="demo2-2-light.png" /></a> <p/> So that's the answer right there: there are 13.285 libraries in Germany, according to our data. <p/> Now the initial result mentioned above said there are 19.347 libraries in Germany, this result now says 13.285. What about that? Well it's really that by using LOD for applications, by using the Lobid API, we were able to improve our query: while our data only contains German organisations, these are not necessarily in Germany, e.g. Goethe institutes. The initial query didn't consider that. <blockquote class="twitter-tweet" lang="de" dir="ltr"><a href="https://twitter.com/lobidOrg">@lobidOrg</a> <a href="https://twitter.com/InspektorHicks">@InspektorHicks</a> Um genau zu sein: da sind auch Goethe Institute im Ausland mit dabei usw. Siehe <a href="http://t.co/wbpiGZl8OC">http://t.co/wbpiGZl8OC</a></p>&mdash; dr0ide (@dr0ide) <a href="https://twitter.com/dr0ide/status/608629102652833792">June 10, 2015</a></blockquote> <p/> We were also able to improve our data. Because of course when your result is almost the double amout of the traditional answer you sanity check your results, and so we realized that we included organisations that were marked as inactive in our source data (see <a href="https://github.com/hbz/lobid-organisations/issues/79"> this issue for details</a>). <p/> So we really saw here how usage leads to improvement. <p/> <h2>Application: visualize data on a map</h2> <p/> Let's take a look at another application. Say we want to visualize data on a map, in particular the libraries in Hamburg. As a starting point, we take a query similar to the one above for answering how many libraries there are in Germany. Only in this case we don't use the "location.address.addressCountry" field, but the "location.address.addressLocality" field. <p/> If our goal would be to get the number of libraries in Hamburg we'd have the result right there, but in this case we want to do something with the result data. In particular, as we want to visualize the data on a map, we're interested in the "location.geo" field, which contains nested "lat" and "lon" fields, specifying the geo coordinates of each organisation: <p/> <a href="http://beta.lobid.org/organisations/search?q=type:Library+AND+location.address.addressLocality:Hamburg" target="_blank">http://beta.lobid.org/organisations/search?q=type:Library+AND+location.address.addressLocality:Hamburg</a> <p/> <a href="http://fsteeg.com/images/demo3-1-light.png" target="_blank"><img src="http://fsteeg.com/images/demo3-1-light.png" alt="demo3-1-light.png" /></a> <p/> To use these in a map visualization, we create an HTML file in a text editor. In its head, we include a mapping package, leaflet.js. In the body, we create the map and add a tile layer to it. We then call the Lobid API with the very query from above, specifying that we're looking for organisations where "type:Library AND location.address.addressLocality:Hamburg". In the following lines we process the API response and finally create a marker for each organisation using the "location.geo.lat" and "location.geo.lon" fields: <p/> <a href="https://github.com/hbz/slides/blob/swib-15/demo.html" target="_blank">https://github.com/hbz/slides/blob/swib-15/demo.html</a> <p/> <a href="http://fsteeg.com/images/demo3-2-light2.png" target="_blank"><img src="http://fsteeg.com/images/demo3-2-light2.png" alt="demo3-2-light" /></a> <p/> If we open that HTML file in a browser, we get an interactive map with the libraries in Hamburg. We can zoom in and out, pan around, and click the markers for the name of the library: <p/> <a href="http://hbz.github.io/slides/swib-15/demo.html" target="_blank">http://hbz.github.io/slides/swib-15/demo.html</a> <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo3-6.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo3-6.png" alt="" /></a> <p/> So that's how we can build an interactive map using the Lobid API. <p/> <h2>Application: NWBib</h2> <p/> Next, let's take a look at a more complex application based on the Lobid API. NWBib is the regional bibliography for the German state North Rhine-Westfalia (NRW). It is catalogued by the three NRW-Landesbibliotheken, the federal state libraries (in NRW we don't have a single federal state library, but instead a distributed model). The presentation of NWBib is done by hbz, and its new version, currently in beta, is based entirely on the Lobid API. <p/> So let's take a look at NWBib. This is a details page for a book in NWBib: <p/> <a href="http://lobid.org/nwbib/HT016558942" target="_blank">http://lobid.org/nwbib/HT016558942</a> <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo4-1.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo4-1.png" alt="" /></a> <p/> You'll notice the map on the right, with markers like in the previous sample application. It's basically done in the same way, only here it's not the libraries in some area, but libraries with holdings of the book this page is about. <p/> It also provides some details when a marker is clicked, only here we zoom in, and provide links to the library, to a search for the holdings in the local library catalogue, and details on the holding's signature: <p/> <a href="http://lobid.org/nwbib/HT016558942" target="_blank">http://lobid.org/nwbib/HT016558942</a> <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo4-2.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo4-2.png" alt="" /></a> <p/> But again, it's basically the same thing as in the simple example above, just with some more work on the details. <p/> Another interesting map related aspect of NWBib is that cataloguers always record a subject location, i.e. a place that a book or article is about. It is catalogued as a simple string, in the example above it's "Köln" (Cologne). <p/> We take that string and send it to the Wikidata API, which returns a geo location. With these geo locations we can do multiple interesting things. For instance, on the NWBib landing page, we offer a location based search using the administrative districts of NRW: <p/> <a href="http://lobid.org/nwbib" target="_blank">http://lobid.org/nwbib</a> <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo4-3.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo4-3.png" alt="" /></a> <p/> Clicking on one of these areas returns results related to places in that area. <p/> Having these geo loacations also provides a way to visualize search results. For instance, if we search for "braunkohle" (brown coal or lignite) we see that there are two single places in the east of NRW related to that, but over 40 places in the west of NRW, the "Rheinische Braunkohlerevier": <p/> <a href="http://lobid.org/nwbib/search?q=braunkohle" target="_blank">http://lobid.org/nwbib/search?q=braunkohle</a> <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo4-4.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo4-4.png" alt="" /></a> <p/> Again, the implementation is done basically the same way as in our simple example. Every place is a single marker, the clusters are created automatically using a plugin for the mapping package, Leaflet.markercluster. <p/> The clusters can not only be used to visualize results, they can also be used for browsing. If we select a cluster, we can restict results to the search term and the selected area: <p/> <a href="http://lobid.org/nwbib/search?location=42%20Orte%20aus%20Kartenauswahl|50.56743281656585,6.649398284703092+50.56741595187408,6.64950316743691+50.56740572145051,6.649610153165785+50.567402224513614,6.649718204347387+50.567405494978,6.649826273106689+50.56741550112544,6.6499333113982395+50.641116467728445,7.236683297212334+50.64118708557393,7.236992605139604+50.64131257624125,7.2372551206201585+50.641481703243954,7.237447338709884+50.64167932301831,7.237552048707636+50.64188774097007,7.2375598751562045+50.801476364247456,7.205534299518387+50.80157283163572,7.205503792531571+50.80166560578553,7.205452020474131+50.801752824431304,7.205380022587438+50.80183273683382,7.205289244114099+50.801903738920494,7.2051815072870795+50.942735593157785,6.9585148374414985+50.94274854294329,6.958491464498557+50.942761070357065,6.9584675187647616+50.94277316534544,6.958443019457937+50.942784818201865,6.95841798624016+50.94279601957456,6.958392439201995+51.135571375275546,6.504224715546294+51.135650777880265,6.503972479208997+51.13568724310365,6.503696329117643+51.1356783651139,6.503414485342045+51.1356247296453,6.503145543614917+51.1355298753587,6.502907248406391+51.08023056826382,6.397077338962536+51.08017993458187,6.396990484497076+51.08012371901032,6.39691281501431+51.080062575422055,6.396845233955322+51.0799972150132,6.396788527413979+51.07992839803107,6.396743354993214+50.662372032334225,6.1647798844150214+50.66215210326194,6.1647181447645485+50.661931096376996,6.16476943007207+50.66173175109583,6.164928463620679+50.66157457833666,6.165178882536564+50.66147575000503,6.1654949213560375&amp;q=braunkohle&amp;person=&amp;name=&amp;subject=&amp;publisher=&amp;issued=&amp;medium=&amp;nwbibspatial=&amp;nwbibsubject=&amp;owner=&amp;t=&amp;sort=newest&amp;set=&amp;word=&amp;corporation=&amp;raw=" target="_blank">http://lobid.org/nwbib/search?location=...</a> <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo4-5.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo4-5.png" alt="" /></a> <p/> So that's how a complex application with map visualization and browsing can look like, implemented on top of the Lobid API, in the same basic way as the simple example above. <p/> <h2>Application: OpenRefine</h2> <p/> As a final application, let's take a look at OpenRefine, "a free, open source, power tool for working with messy data". OpenRefine is based on a spreadsheet user interface, so it provides a familiar user experience for people familiar with that kind of software. It can be used to clean up data, to transform data, and to reconcile data with external data sources, like the Lobid organisations API. <p/> We've implemented our OpenRefine reconciliation API in response to a user request, so let's take a look at that. Our user had a table of libraries where every row had a name and a postal code, and some had an ID from the German national library index (DBS, Deutsche Bibliotheksstatistik). What he wanted was a uniform identifier for all of these entries, in particular an International Standard Identifier for Libraries (ISIL), if available. <p/> OpenRefine uses the browser for its user interface. You can run it as a local application, it comes with simple executables for different operating systems. You don't have to upload your data anywhere, it just happens to be browser based. At the same time, this makes it possible to set up a central instance for your organisation and have people share projects and data. <p/> In its initial view, OpenRefine allows you to select the data you want to work with: <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo5-1.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo5-1.png" alt="" /></a> <p/> Our data is a CSV file. After we load it, OpenRefine provides a preview of how it interprets the data and allows you to customize the way it is imported. As you can see in the "Parse data as" section, OpenRefine supports many different input formats. In our case it recognized the custom semicolon delimiter, and all default options are fine for us: <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo5-2.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo5-2.png" alt="" /></a> <p/> After we created the project, we get a simple tabular view of our data: <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo5-3.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo5-3.png" alt="" /></a> <p/> We'll now reconcile the "bibliothek" column, which contains the library names, with the Lobid API. We also pass the other fields (postal code and DBS ID) to the Lobid API to improve the result quality of the reconciliation candidates returned by the API (the "As property" values are arbitrary for the Lobid API, but need to be set): <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo5-4.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo5-4.png" alt="" /></a> <p/> After the reconciliation is done, i.e. every library in our table has been looked up in the Lobid organisations data, the Lobid API returns candidates for each library, ranked by their score, with the highest ranking candidate being the most likely match: <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo5-5.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo5-5.png" alt="" /></a> <p/> Each cell now contains a list of candidates. They are linked to their entries in the Lobid API, so by clicking them we can verify that the topmost candidate is actually a good match. The "best candidate's score" histogram facet on the left allows us to deselect libraries with very low scoring best candidates (by moving the left slider to the right), so we don't pollute our data with wrong matches. <p/> The next step is to create a new column with the unified ID, based on the best reconciliation candidate. We use the OpenRefine expression language for that and create a new column called "hbz-id" (not all libraries have ISILs, the Lobid API returns something like pseudo-ISILs for these, so we don't call the column ISIL): <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo5-6.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo5-6.png" alt="" /></a> <p/> The expression we use, "cell.recon.best.id" means that for each cell, from its reconciliation result, pick the best candidate, and take its id as the value for the new column. The preview we see for that expression looks good, so we create the new column: <p/> <a href="http://hbz.github.io/slides/swib-15/img/demo5-7.png" target="_blank"><img src="http://hbz.github.io/slides/swib-15/img/demo5-7.png" alt="" /></a> <p/> We could now export the resulting table with the new column as a CSV (or many other formats) to get the reconciled data set. <p/> So this is what reconciliation with OpenRefine and the Lobid API looks like. You can <a href="https://github.com/OpenRefine/OpenRefine/releases">download OpenRefine</a> and reproduce these steps based on <a href="https://github.com/hbz/lobid-organisations/issues/55#issuecomment-129771979">these instructions</a>. <p/> <h2>Lessons learned</h2> <p/> So what did we learn by building and using the Lobid API and applications based on it? We learned that it's important not to lose useful data for applications in the transformation of source data to LOD. We learned that it's important to structure data in a way that makes it useful for applications, like for queries and processing responses. And we learned that if possible, we should integrate into existing tools and workflows like OpenRefine, because if people have these tools, that's where they want to use your data. <p/> To summarize, we learned to let applications drive API and data design. To avoid premature abstraction. To support actual use cases before generalizing. Or, to put it another way: "Do usable before reusable". <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Do usable before reusable.</p>&mdash; Einar W. Høst (@einarwh) <a href="https://twitter.com/einarwh/status/634702639410884609">August 21, 2015</a></blockquote> <p/> And doing usable is great, because "having other folks use your stuff makes your stuff better!" <blockquote class="twitter-tweet" lang="en" dir="ltr"><a href="https://twitter.com/edsu">@edsu</a> Guess what - it turns out having other folks use your stuff makes your stuff better! Software and collections too!</p>&mdash; Andy Jackson (@anjacks0n) <a href="https://twitter.com/anjacks0n/status/626697087544074240">July 30, 2015</a></blockquote> <p/> So this is how we make progress: by building, using, and improving stuff. <p/> A short note on how we built our particular API: We used Metafacture (a Java toolkit for stream-based library metadata processing), Elasticsearch (a Lucene-based search server, something like SOLR, we use it with Java), and Playframework (a Web application framework, something like Rails or Django, we use it with Java). In a nutshell, that's Java programming with open source tools. But this is just our choice. An API like this could be implemented with all kinds of technologies. <p/> Now you might be wondering: but what about Linked Open Data (which is in this post's title), or even the Semantic Web (which is the topic of the conference I presented this as a talk)? For one thing, the structured data in all the examples above is JSON-LD, it is RDF compatible, we use standard vocabularies where possible, so this is linked data. <p/> But linked data and the semantic web are no goals in themselves. They are "a technological solution, one of many that might fit the real goals". <blockquote class="twitter-tweet"><p lang="en" dir="ltr">I&#39;m so over linked data/semantic web as a goal. Its a technological solution, one of many that might fit the real goals/outcomes</p>&mdash; Euan Cochrane (@euanc) <a href="https://twitter.com/euanc/status/605801349125541889">June 2, 2015</a></blockquote> <p/> And no matter what our roles or titles are, whether we're cataloguers, developers, or managers, that real goal is the same: "to make the product better for our users". <blockquote class="twitter-tweet"><p lang="en" dir="ltr">&quot;No matter what our job titles, our jobs are all the same — to make the product better for our users.&quot; <a href="http://t.co/Rz8CnWvlbm">http://t.co/Rz8CnWvlbm</a></p>&mdash; Fabian Steeg (@fsteeg) <a href="https://twitter.com/fsteeg/status/570614437016690689">February 25, 2015</a></blockquote> <p/> And that product is software. <p/> So what's the thing to take away? It's really that libraries, that we, that you, should build APIs. APIs provide infrastructure for software in libraries. They make the great work of cataloguers available for all kinds of use cases. That's why "libraries need APIs". <blockquote class="twitter-tweet" lang="en" dir="ltr">.<a href="https://twitter.com/fsteeg">@fsteeg</a> Yep. Libraries need APIs, not web portals.</p>&mdash; Ralf Claussnitzer (@claussni) <a href="https://twitter.com/claussni/status/626338710213296128">July 29, 2015</a></blockquote> <p/> They empower yourself and others: to use your data (as we saw in the simple question answering example), to build new applications (as we saw in the simple and complex map-based applications), and to improve existing applications (as we saw in the OpenRefine example). <p/> It doesn't happen by itself. It's not like you build an API and all these applications magically appear. What it takes is "an API and some large-but-finite amount of labor". <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Realizing that I say &quot;it wouldn&#39;t be difficult to X&quot; when I mean &quot;there&#39;s an API and some large-but-finite amount of labor could X.&quot;</p>&mdash; Ted Underwood (@Ted_Underwood) <a href="https://twitter.com/Ted_Underwood/status/639174204668121088">September 2, 2015</a></blockquote> <p/> But APIs are the foundation. They provide infrastructure for software in libraries. They empower yourself and others. http://172.105.249.169:9000/notes/why-lod-needs-applications-and-libraries-need-apishttp://172.105.249.169:9000/notes/why-lod-needs-applications-and-libraries-need-apis Mon, 07 Dec 2015 00:00:01 +0000 programmingswiblobidweblibrariesnwbib One issue with JSON-LD that seems not so pragmatic <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2014/01/28/one-issue-with-json-ld-that-seems-not-so-pragmatic/">https://fsteeg.wordpress.com/2014/01/28/one-issue-with-json-ld-that-seems-not-so-pragmatic/</a></small></p> <p/> <em>I originally posted this to my tumblr a few days ago, but decided the format fits better here. For context:</em> <blockquote class="twitter-tweet"><p lang="en" dir="ltr">.<a href="https://twitter.com/manusporny">@manusporny</a> I love and share the pragmatic spirit, have one issue with JSON-LD that seems to go against that though: <a href="http://t.co/TMLkFwYSxR">http://t.co/TMLkFwYSxR</a></p>&mdash; Fabian Steeg (@fsteeg) <a href="https://twitter.com/fsteeg/status/426136599756558336">January 22, 2014</a></blockquote> <p/> <p>I really like JSON-LD. We've built a linked data API serving JSON-LD at hbz over the last year, and we're really happy with it. For us, it's an awesome bridge from our RDF data to a useful representation on the web. The spirit of JSON-LD really seems all about useful tools that get the job done. And who wouldn't like that?&nbsp;But there's one thing that really seems wrong to me. First, here's some JSON-LD at its best:</p> <p><a href="http://api.lobid.org/item?id=BT000000079:DE-Sol1:GA+644&amp;format=full">http://api.lobid.org/item?id=BT000000079%3AGA+644&amp;format=full</a></p> <p>Why at its best? Because it's simply JSON. Just some data, perfectly accessible under some keys.&nbsp;<span>Now check out this:</span></p> <p><span><a href="http://api.lobid.org/organisation?id=DE-605&amp;format=full">http://api.lobid.org/organisation?id=DE-605&amp;format=full</a></span></p> <p><span></span><span>What's this? Just some data, perfectly accessible under some keys? Not quite. We have an array under the `@graph` key. In that, we have objects, each with an `@id` key, and some data. Now naturally, we're accessing these objects using their ID when we make use of the data. It's their identifier, after all. To me, the obvious way to do that in JSON would be to have an `@graph` </span><em>object</em><span>, with the IDs as </span><em>keys</em><span>:</span></p> <pre>"@graph": { "location": {...}, "address": {...} } </pre> <p>Instead of:</p> <pre>"@graph": [{ "@id": "location", ... },{ "@id": "address", ... }] </pre> <p>Because with the latter, if I want one of the objects, I have to filter the objects array and select the one I need by its `@id` value. I just want the `location` object from the graph, but instead of `get("location")` I have to inspect every object.</p> <p>A similar thing, though probably not as straightforward as the `@id` usage: languages. If I have some label in multiple languages, I naturally will be accessing them by language ('give me the english label'), so why not have:</p> <pre>prefLabel: { "de": "Land", "en": "Federal State" } </pre> <p>Instead of:</p> <pre>prefLabel: [{ @language: "de", @value: "Land" },{ @language: "en", @value: "Federal State" }] </pre> <p>I'm sure there are reasons for doing it this way, and I didn't dig deeper into the spec, the implementation, etc. Also, of course this has a lot to do with how our original RDF data is modelled. Anyway, I've just been thinking this every time that I've been working with our JSON-LD, mostly when writing code to access these values in the ways I described. I've also bounced these thoughts off some colleagues and didn't hear that I was crazy. So I thought why not share it. Of course, if there's some obvious way to get our JSON-LD into that form within the existing spec I'd love to hear about that.</p> <p/> <em>And I did, which is great:</em> <blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/manusporny">@manusporny</a> Thanks! Would prefer to serve the JSON-LD as generated from our RDF w/ LD lib we use, but will investigate post-proc &amp; lang maps</p>&mdash; Fabian Steeg (@fsteeg) <a href="https://twitter.com/fsteeg/status/426294538463092736">January 23, 2014</a></blockquote> http://172.105.249.169:9000/notes/one-issue-with-json-ld-that-seems-not-so-pragmatichttp://172.105.249.169:9000/notes/one-issue-with-json-ld-that-seems-not-so-pragmatic Tue, 28 Jan 2014 00:00:01 +0000 programmingweb The joys of being a casual Eclipse committer <p><small>Cross-posted to: <a href="http://fsteeg.tumblr.com/post/73628122452/the-joys-of-being-a-casual-eclipse-committer">http://fsteeg.tumblr.com/post/73628122452/the-joys-of-being-a-casual-eclipse-committer</a></small></p> <p>I contribute to Eclipse in my free time. I enjoy maintaining a little corner of the world. I tried a few things, and for me, being a casual Eclipse committer works best. Get started, run the Maven build. That takes a while. So I relax, listen to some music, enjoy my coffee, or whatever. And while Maven hums along, some thoughts flowing through, I relax. Then write some tests to verify a bug, write some code to fix the bug. Doing stuff, fixing stuff, improving stuff. Yay. Then: Maven again, humming along. Relax, some music, some thoughts, some coffee. Repeat. At the end of the day, push to eclipse.org. That much is done. I&rsquo;ve improved the world a tiny bit today, put it out there, for the world to use, in a safe place, available forever. At the end of the week, month, or whenever: post to bug or list, tell the world. Discuss how to proceed to common goals. Together. Such joy. Very empowering. Wow. Sounds like you might like that too? Then find some little corner of the world, there are so many, fix some stuff, maintain some code, make the world a better place, and enjoy yourself.</p> http://172.105.249.169:9000/notes/the-joys-of-being-a-casual-eclipse-committerhttp://172.105.249.169:9000/notes/the-joys-of-being-a-casual-eclipse-committer Fri, 17 Jan 2014 00:00:01 +0000 eclipseprogramming Metadata processing with Metafacture and Eclipse <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2013/04/28/metadata-processing-with-metafacture-and-eclipse/">https://fsteeg.wordpress.com/2013/04/28/metadata-processing-with-metafacture-and-eclipse/</a></small></p> <p/> A lot has happened job-wise for me since my last post: in the summer I quit my little trip into the startup world (where I used Clojure and was not just the only Eclipse user on the team, but actually the only IDE user) and joined hbz, the Library Service Center of the German state of North Rhine-Westphalia. The <em>library</em> part is actually about the book thing, and it sort of divides not only the general public, but the Eclipse community as well: <blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/waynebeaton">@waynebeaton</a> <a href="https://twitter.com/DonaldOJDK">@DonaldOJDK</a> <a href="https://twitter.com/IanSkerrett">@IanSkerrett</a> I go with my kids to get library books every week. They think it&#39;s retro.</p>&mdash; Alex Blewitt (@alblue) <a href="https://twitter.com/alblue/status/308980332684771328">March 5, 2013</a></blockquote> <p/> I’m with Alex Blewitt’s kids on this one. And for what ‘retro’ means, I recently saw a nice definition: <p/> <blockquote>"Gamers say we're 'retro', which I guess means 'old, but cool'" -- Wreck-It Ralph</blockquote> <p/> OK, so libraries are old, but cool. But what’s in the library world for a programmer? Metadata! <blockquote class="twitter-tweet"><p lang="en" dir="ltr">...and if you&#39;re interested in metadata, you should be interested in library metadata. That&#39;s where metadata began.</p>&mdash; Bob DuCharme (@bobdc) <a href="https://twitter.com/bobdc/status/304960413467045889">February 22, 2013</a></blockquote> <p/> At hbz, we don’t deal with books, but with information about books. I’m in the <em>Linked Open Data</em> group, where we work on bringing this library metadata to the web. At the heart of this task is processing and transforming the metadata, which is stored in different formats. In general, metadata provides information about specific aspects of some data. For libraries, the data is books, and the aspects described by the metadata are things like the book’s author, title, etc. These aspects can be represented as key-value pairs, giving metadata a structure of key-value pairs, grouped to describe the aspects of some piece of data. <p/> Given this general structure, metadata processing isn’t a problem specific to libraries. Even if you take only open, textual formats like XML or JSON, you simply have a myriad of ways to express your specific set of metadata (e.g. which keys to use, or how to represent nested structure). Given this reality of computing, metadata processing is not only at the heart of library data, but central to any data processing or information system. Therefore I was very happy to learn about a very useful toolkit for metadata processing called <a href="https://github.com/culturegraph/metafacture-core/wiki">Metafacture</a>, developed by our partners in the <a href="https://github.com/culturegraph">Culturegraph</a> project at the German National Library. <p/> <a href="http://fsteeg.com/images/metafacture-ide-a.png"><img class="alignnone size-full" alt="metafacture-ide-A" src="http://fsteeg.com/images/metafacture-ide-a.png" /></a> <p/> Metafacture is a framework for metadata processing. One basic idea of Metafacture is to separate the transformation rules from the specific input and output formats. In the transformation, key-value pairs are converted to other key-value-pairs, defined declaratively in an XML file (the <em>Morph</em> file). The Metafacture framework provides support for different input and output formats and is extensible for custom formats. <p/> The interaction of input, transformation rules, and output makes up the transformation workflow. This workflow is defined in Metafacture with a domain-specific language called Flux. Since I knew about the awesome power of <a href="http://www.eclipse.org/Xtext">Xtext</a>, I started working on tools for this DSL, in particular an Xtext-based editor and an Eclipse launcher for Flux files. I'll use these tools here to give you an idea of what Flux is about. We start the workflow by specifying the path to our input file, relative to the location of the Flux file (using a variables declared with the <code>default</code> keyword). The first interesting part of the workflow is how to interpret this input path. What we mean here is the path to a local, uncompressed file: <p/> <a href="http://fsteeg.com/images/metafacture-ide-b.png"><img class="alignnone size-full" alt="metafacture-ide-B" src="http://fsteeg.com/images/metafacture-ide-b.png" /></a> <p/> Next, we specify how to decode the information stored in the file (XML in our case): <p/> <a href="http://fsteeg.com/images/metafacture-ide-c.png"><img class="alignnone size-full" alt="metafacture-ide-C" src="http://fsteeg.com/images/metafacture-ide-c.png" /></a> <p/> And as a separate step, how to handle this information to make it available in the grouped key-value structure used for the actual transformation (in our case, this will e.g. flatten the sub fields in the input by combining each top field key with its sub field keys): <p/> <a href="http://fsteeg.com/images/metafacture-ide-d.png"><img class="alignnone size-full" alt="metafacture-ide-D" src="http://fsteeg.com/images/metafacture-ide-d.png" /></a> <p/> At this point we’re ready to trigger the actual transformation, which is defined in the XML Morph file. To understand the basic idea of how the transformation works, let’s open the morph.xml file with the <a href="http://www.eclipse.org/webtools/">WTP</a> XML editor and have a look at the design tab: <p/> <a href="http://fsteeg.com/images/metafacture-ide-e.png"><img class="alignnone size-full" alt="metafacture-ide-E" src="http://fsteeg.com/images/metafacture-ide-e.png" /></a> <p/> What we see here are two transformation rules for different fields of an input record. The first one just changes the attribute key: we want to map the input field <code>8564 .u</code> (the URL field identifier in the MARC format) to <code>http://lobid.org/vocab/lobid#fulltextOnline</code> (the identifier used for full text references in our linked open data). The second rule does the same for the field <code>24500.a</code>, mapping it to <code>http://iflastandards.info/ns/isbd/elements/P1004</code> (the title field), but this second rule also changes the value: it removes newlines with surrounding spaces by calling the <em>replace</em> Morph function. There are many options in the Metafacture Morph language, but this should give you the basic idea. For details, see the Metafacture <a href="https://github.com/culturegraph/metafacture-core/wiki#morph">Morph user guide</a>. <p/> After the actual transformation, we have new key-value pairs, which we now want to encode somehow. In our use case at hbz, we want to create linked open data to be processed with Hadoop, so we wrote an encoder for N-Triples, a line-based RDF graph serialization: <p/> <a href="http://fsteeg.com/images/metafacture-ide-f.png"><img class="alignnone size-full" alt="metafacture-ide-F" src="http://fsteeg.com/images/metafacture-ide-f.png" /></a> <p/> Notice how we didn’t just pipe into the <code>encode-ntriples</code> command, but first opened a <code>stream-tee</code> to branch the output of the <code>morph</code> command into two different receivers, one generating the mentioned N-Triples, the other creating a renderable representation of the graph in the Graphviz DOT language: <p/> <a href="http://fsteeg.com/images/metafacture-ide-g.png"><img class="alignnone size-full" alt="metafacture-ide-G" src="http://fsteeg.com/images/metafacture-ide-g.png" /></a> <p/> We now have a complete Flux workflow, which we can run by selecting <em>Run -&gt; Run As -&gt; Flux Workflow</em> on the Flux file (in the editor or the explorer view). This will generate the output files and refresh the workspace: <p/> <a href="http://fsteeg.com/images/metafacture-ide-h.png"><img class="alignnone size-full" alt="metafacture-ide-H" src="http://fsteeg.com/images/metafacture-ide-h.png" /></a> <p/> Since we’re running in Eclipse, it’s easy to integrate this with other stuff. For instance I’ve added the Zest feature to our build to make the <a href="http://wiki.eclipse.org/Zest/DOT#Zest_Graph_View">Zest graph view</a> available. This view can listen to DOT files in the workspace, and render their content with Zest. When enabled, the view will update as soon as the output DOT file is written by the Flux workflow, and display the resulting graph. <p/> Check out the <a href="https://github.com/culturegraph/metafacture-ide/wiki/User-Guide">Metafacture IDE user guide</a> for detailed instructions on this sample setup. The Metafacture IDE is in an early alpha stage, but we think it’s already useful. It can be installed from the <a href="http://marketplace.eclipse.org/content/metafacture-ide">Eclipse Marketplace</a>. We’re happy about any kind of feedback, contributions, etc. There's a <a href="https://github.com/culturegraph/metafacture-ide/wiki/Developer-Guide">Metafacture IDE developer guide</a> and further information on all <a href="http://culturegraph.github.com">Metafacture modules on GitHub</a>. <p/> One of the best things about Metafacture is that it is built to be extensible. Which makes sense, since you can supply tons of stuff for metadata processing, but you will never cover every format out of the box. So Metafacture helps users to solve their problems by providing hooks into the framework. For instance, both Flux commands (e.g. <code>open-file</code>, <code>decode-xml</code> in the Flux file above) and Morph functions (e.g. <code>replace</code> in the Morph XML file above) are actually Java classes implementing specific interfaces that are called using reflection internally. The additional content assist information above is generated from annotations on these classes. <p/> With its stream-based processing pipeline inspired by an architecture developed by <a href="http://github.com/jprante">Jörg Prante</a> at hbz, Metafacture is efficient and can deal with big data. With its declarative, modular setup with Morph and Flux files Metafacture provides accurate, complete, and reproducible documentation on how the data was created. <p/> <a href="http://fsteeg.com/images/metafacture-ide-i.png"><img class="alignnone size-full" alt="metafacture-ide-I" src="http://fsteeg.com/images/metafacture-ide-i.png" /></a> <p/> I think the nature of this work as well as the organizational challenges in the library community, where multiple public and commercial entities both cooperate and compete, make Eclipse a great model - both technically (build for extensibility, use a common platform, etc) and for open source governance (transparency, vendor neutrality, etc). I’m therefore very happy that hbz recently joined the Eclipse Foundation as an <a href="http://www.eclipse.org/membership/showMember.php?member_id=1072">associate member</a>. http://172.105.249.169:9000/notes/metadata-processing-with-metafacture-and-eclipsehttp://172.105.249.169:9000/notes/metadata-processing-with-metafacture-and-eclipse Sun, 28 Apr 2013 00:00:01 +0000 programmingeclipsemetadataxtextdsl Visualize Clojure code in Eclipse with DOT and Zest <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2012/02/26/visualize-clojure-code-in-eclipse-with-dot-and-zest/">https://fsteeg.wordpress.com/2012/02/26/visualize-clojure-code-in-eclipse-with-dot-and-zest/</a></small></p> <p/> In January, I started a new job where I use Clojure (<a href="https://doo.net/jobs.html">we're hiring</a>). I was happy to learn that there's a nice Eclipse plugin for Clojure called <a href="http://code.google.com/p/counterclockwise/">Counterclockwise</a>. As a committer on <a href="http://www.eclipse.org/gef/zest/">Zest</a>, I quickly had the obvious idea (well, obvious as in <a href="http://code.google.com/a/eclipselabs.org/p/debugvisualisation">other</a> <a href="http://misto.ch/tag-cloud-visualization-for-source-code/">crazy</a> <a href="http://fsteeg.com/2010/02/07/diagrams-in-wiki-markup-with-mylyn-wikitext-dot-and-zest/">stuff</a> to make the IDE more visual): visualize Clojure code as trees in Eclipse. If you use a language that is no Lisp it probably seems crazy to think about syntax trees while writing code, but if you actually write down syntax trees in your code, something like this might not only be fun, it could even be useful. <p/> This weekend I found some time to give it a spin: I hooked into Counterclockwise to generate a Graphviz DOT representation from the text selected in the Clojure editor, and pass that to the Zest graph view: <p/> <a href="http://fsteeg.com/images/ccw-zest-1.png"><img src="http://fsteeg.com/images/ccw-zest-1.png" alt="" title="ccw-zest-1" class="alignnone size-full" /></a> <p/> Using Graphviz DOT, we can create an image file for the visualized structure (e.g. for documentation): <p/> <a href="http://fsteeg.com/images/ccw-zest-2.png"><img src="http://fsteeg.com/images/ccw-zest-2.png?" alt="" title="ccw-zest-2" class="alignnone size-medium" /></a> <p/> Given the simple structure of Clojure code, supporting different nested data structures like maps, their entries, vectors, and sets was easy to implement (though I'm sure there are cases that won't work yet): <p/> <a href="http://fsteeg.com/images/ccw-zest-3.png"><img src="http://fsteeg.com/images/ccw-zest-3.png" alt="" title="ccw-zest-3" class="alignnone size-full" /></a> <p/> This alone might already be useful for exploring and explaining parts of the code you're working on, but I think a closer integration with Counterclockwise could be really interesting. One idea would be to link back from the tree, e.g. by highlighting the corresponding text in the editor, or even allowing real interaction with the tree to manipulate the code, like dragging and dropping nodes and branches to refactor the code. If the code you write really is the graphical structure you see, some kind of visual programming might actually make sense, even if it's not exactly what people expect (like programming for non-programmers). <p/> I'm not sure where or how to evolve this, but if you want to try it or contribute, you can <a href="https://github.com/fsteeg/ccw/tree/visualization">check it out on GitHub</a>. http://172.105.249.169:9000/notes/visualize-clojure-code-in-eclipse-with-dot-and-zesthttp://172.105.249.169:9000/notes/visualize-clojure-code-in-eclipse-with-dot-and-zest Sun, 26 Feb 2012 00:00:01 +0000 graphvizclojureprogrammingeclipsezest Cloudio: SWT-based tag cloud visualization for Zest <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2011/09/07/cloudio-swt-based-tag-cloud-visualization-for-zest/">https://fsteeg.wordpress.com/2011/09/07/cloudio-swt-based-tag-cloud-visualization-for-zest/</a></small></p> <p/> Thanks to a <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349969">contribution</a> by <a href="https://twitter.com/#!/sschwieb">Stephan Schwiebert</a>, the Eclipse GEF <a href="http://www.eclipse.org/gef/zest/">Zest</a> toolkit now contains an SWT-based tag cloud visualization component. Using SWT widgets and JFace viewers, you can create tag clouds like this one: <p/> <img class="alignnone" title="cloud-img-shot.png" src="http://dl.dropbox.com/u/7546431/cloud-img-shot.png" alt="" /> <p/> The tag clouds are highly customizable. To demonstrate the possibilities, Cloudio contains a sample RCP application. It can load a text file, provides access to the visualization parameters, and supports image export: <p/> <img class="alignnone" title="cloud-app.png" src="http://dl.dropbox.com/u/7546431/cloud-app.png" alt="" /> <p/> Cloudio is part of the <a href="http://git.eclipse.org/c/gef/org.eclipse.zest.git">Zest Git repository</a>. Its help content (like the other Zest documentation) is generated from the Eclipse <a href="http://wiki.eclipse.org/Zest/Cloudio">wiki</a>. Builds and p2 repos are available from the <a href="https://hudson.eclipse.org/hudson/job/gef-zest-nightly/">nightly</a> and <a href="https://hudson.eclipse.org/hudson/job/gef-zest-integration/">integration</a> CI jobs. Integration builds can also be installed from the <a href="http://marketplace.eclipse.org/content/zest">marketplace</a>. You can get in touch in the <a href="http://www.eclipse.org/forums/eclipse.tools.gef">GEF forum</a> and report bugs on <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=GEF&amp;component=Zest">Bugzilla</a>. http://172.105.249.169:9000/notes/cloudio-swt-based-tag-cloud-visualization-for-zesthttp://172.105.249.169:9000/notes/cloudio-swt-based-tag-cloud-visualization-for-zest Wed, 07 Sep 2011 00:00:01 +0000 eclipsejavaprogrammingzest Run MWE2 workflows for Xtext 2.0 in a Tycho build <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2011/07/15/run-mwe2-workflows-for-xtext-2-0-in-a-tycho-build/">https://fsteeg.wordpress.com/2011/07/15/run-mwe2-workflows-for-xtext-2-0-in-a-tycho-build/</a></small></p> <p/> I've been doing some work on the Zest build to make the MWE workflow (which generates a bunch of files from an <a href="http://www.eclipse.org/Xtext/">Xtext</a> grammar) part of the <a href="http://www.eclipse.org/tycho/">Tycho</a> build. I guess I just couldn't stand committing tons of changes after some very small tweaks to the grammar I did earlier today. <p/> To hook the workflow into the Tycho build, I was basically able to use the info in the very good and detailed <a href="http://kthoms.wordpress.com/2010/08/18/building-xtext-projects-with-maven-tycho/">tutorial by Karsten Thoms</a>. To make it work for our specific project setup and for the latest Xtext version I still had to tweak some minor things, so I thought I'll do a quick writeup of what I have actually done to make it work. This assumes you already have an Xtext project and you're already building with Tycho in general. If not, check out the tutorial mentioned above. <p/> To add the MWE workflow to the Tycho build, all I had to do was add a plugin repository in the <a href="http://git.eclipse.org/c/gef/org.eclipse.zest.git/tree/pom.xml">parent pom</a>: <pre><code>&lt;pluginRepositories&gt; &lt;pluginRepository&gt; &lt;id&gt;fornax-snapshots&lt;/id&gt; &lt;url&gt;http://www.fornax-platform.org/archiva/repository/snapshots/&lt;/url&gt; &lt;snapshots&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/snapshots&gt; &lt;/pluginRepository&gt; &lt;/pluginRepositories&gt;</code></pre> <p/> Add a plugin pointing to the MWE workflow file in the Xtext <a href="http://git.eclipse.org/c/gef/org.eclipse.zest.git/tree/org.eclipse.zest.dot.core/pom.xml">grammar project pom</a>: <pre><code>&lt;build&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;org.fornax.toolsupport&lt;/groupId&gt; &lt;artifactId&gt;fornax-oaw-m2-plugin&lt;/artifactId&gt; &lt;version&gt;3.3.0-SNAPSHOT&lt;/version&gt; &lt;configuration&gt; &lt;workflowEngine&gt;mwe2&lt;/workflowEngine&gt; &lt;workflowDescriptor&gt;src/parser/GenerateLang.mwe2&lt;/workflowDescriptor&gt; &lt;/configuration&gt; &lt;executions&gt; &lt;execution&gt; &lt;phase&gt;generate-sources&lt;/phase&gt; &lt;goals&gt;&lt;goal&gt;run-workflow&lt;/goal&gt;&lt;/goals&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/build&gt;</code></pre> <p/> And define the Xtext grammar project source folder as a resource directory: <pre><code>&lt;build&gt; &lt;resources&gt; &lt;resource&gt;&lt;directory&gt;src&lt;/directory&gt;&lt;/resource&gt; &lt;/resources&gt; &lt;/build&gt;</code></pre> <p/> When running <em>mvn clean install</em>, the MWE workflow now runs as part of the grammar project build. http://172.105.249.169:9000/notes/run-mwe2-workflows-for-xtext-20-in-a-tycho-buildhttp://172.105.249.169:9000/notes/run-mwe2-workflows-for-xtext-20-in-a-tycho-build Fri, 15 Jul 2011 00:00:01 +0000 dsleclipsejavaprogramming Setting up Contracts for Java in Eclipse <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2011/02/07/setting-up-contracts-for-java-in-eclipse/">https://fsteeg.wordpress.com/2011/02/07/setting-up-contracts-for-java-in-eclipse/</a></small></p> <p/> On Friday, <a href="http://code.google.com/p/cofoja/">Contracts for Java</a> was announced on the <a href="http://google-opensource.blogspot.com/2011/02/contracts-for-java.html">Google Open Source Blog</a>. Learning about this at the beginning of the weekend was perfect timing for me: I had time to check it out, and while setting it up was some work, <a href="http://twitter.com/#!/fsteeg/status/33977183697371136">I was hooked right away</a>. <p/> Now something like Contracts for Java is only really useful if it is well integrated into the tools you use everyday - which in my case is Eclipse. Eclipse allows many levels of integration, and I quickly had it working by running <em>javac</em> as an <a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.user/gettingStarted/qs-97_standalone_ets.htm">external tool</a> - which is OK, but not ideal, since it requires running the tool manually after every change to the annotations, and doesn't give in-place error messages. I quickly found out Eclipse has support for custom <a href="http://www.eclipse.org/jdt/apt/main.html">annotation processing</a>. I had to fiddle a little until I got that configured properly with Contracts for Java so I thought I do a quick write-up so other people can try this cool new tool in Eclipse. <p/> Contracts for Java doesn't provide any binary downloads yet, so my first step was to build a Jar. To use it, create a Java project, and add <a href="http://dl.dropbox.com/u/7546431/cofoja-current.jar">cofoja-latest.jar</a> and <a href="http://dl.dropbox.com/u/7546431/asm-all-3.3.1.jar">asm-all-3.3.1.jar</a> to the build path. Then add some code that uses contract annotations (copy and paste the code below into the src folder of the project): <pre><code>import com.google.java.contract.Ensures; import com.google.java.contract.Requires; <p/> public class Contracts { public static void main(String[] args) { System.out.println(new Numbers().add(-10, 5)); } } <p/> class Numbers { @Requires({ &quot;c &gt; 0&quot;, &quot;b &gt; 0&quot; }) @Ensures({ &quot;result &gt; a&quot;, &quot;result &gt; b&quot; }) int add(int a, int b) { return a - b; } }</code></pre> <p/> Next, configure the annotation processing in the project properties &gt; <em>Java Compiler</em> &gt; <em>Annotation Processing</em>. To make Contracts for Java work with the Eclipse Java compiler, currently some specific properties have to be set up: set the <em>com.google.java.contract.classpath</em> property to the location of your cofoja-latest.jar and the <em>com.google.java.contract.classoutput</em> property to the location of your project's <em>src</em> or separate <em>bin</em> folder (both relative to the project root, using the %PROJECT.DIR% variable): <p><a href="http://fsteeg.com/images/cofoja-setup-options.png"><img class="size-full aligncenter" title="cofoja-setup-options" src="http://fsteeg.com/images/cofoja-setup-options.png" alt="" /></a></p> If your project uses multiple Jars they currently have to be given with absolute paths as the <em>com.google.java.contract.classpath</em> value, separated with ':' on Unix or ';' on Windows. Next, make sure you have set up your workspace to refresh automatically in <em>Preferences</em> &gt; <em>General</em> &gt; <em>Workspace</em> to make Eclipse see the resources generated by the annotation processor. Then, add the cofoja-latest.jar to the project properties &gt; <em>Java Compiler</em> &gt; <em>Annotation Processing</em> &gt; <em>Factory Path</em>: <p><a href="http://fsteeg.com/images/cofoja-setup-2.png"><img class="size-full aligncenter" title="cofoja-setup-2" src="http://fsteeg.com/images/cofoja-setup-2.png" alt="" /></a></p> Now issues in the annotation values are reported in the editor, like variables that cannot be found, e.g. for our code above: <p><a href="http://fsteeg.com/images/cofoja-setup-31.png"><img class="size-full aligncenter" title="cofoja-setup-3" src="http://fsteeg.com/images/cofoja-setup-31.png" alt="" /></a></p> To have the contracts checked at runtime, add <em>-javaagent:cofoja-current.jar</em> to the VM arguments of your run configuration: <p><a href="http://fsteeg.com/images/cofoja-setup-41.png"><img class="size-full aligncenter" title="cofoja-setup-4" src="http://fsteeg.com/images/cofoja-setup-41.png" alt="" /></a></p> Now when running, we are made aware of the violated precondition in our code: <p><a href="http://fsteeg.com/images/cofoja-setup-51.png"><img class="size-full aligncenter" title="cofoja-setup-5" src="http://fsteeg.com/images/cofoja-setup-51.png" alt="" /></a></p> After we fix the call violating the precondition to <em>new Numbers().add(10, 5);</em> we now see our implementation of <em>add</em> does not fulfill the postcondition: <p><a href="http://fsteeg.com/images/cofoja-setup-6.png"><img class="size-full aligncenter" title="cofoja-setup-6" src="http://fsteeg.com/images/cofoja-setup-6.png" alt="" /></a></p> After fixing our implementation to <em>return a + b;</em> the code now runs without errors. For further information on using Contracts for Java check out the <a href="http://code.google.com/p/cofoja/w/list">project wiki</a>. General information on design by contract can be found <a href="http://en.wikipedia.org/wiki/Design_by_contract#Bibliography">elsewhere</a>. http://172.105.249.169:9000/notes/setting-up-contracts-for-java-in-eclipsehttp://172.105.249.169:9000/notes/setting-up-contracts-for-java-in-eclipse Mon, 07 Feb 2011 00:00:01 +0000 eclipsejavaprogramming Scala, object persistence, and the original NoSQL: XML <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2010/08/30/scala-object-persistence-and-the-original-nosql-xml/">https://fsteeg.wordpress.com/2010/08/30/scala-object-persistence-and-the-original-nosql-xml/</a></small></p> <p/> In our <a href="http://fsteeg.wordpress.com/2010/04/18/an-eclipse-rcp-digitization-wiki-with-e4-and-scala/">digitization wiki</a> <a href="http://github.com/spinfo/drc">project</a> based on <a href="http://www.eclipse.org/eclipse4/">Eclipse 4</a> and <a href="http://www.scala-lang.org/">Scala</a> it was time to find a persistence solution. As a quick overview of what it's about, our app will basically allow a user to edit a digitized book page, showing the original scan as an image, with the selected word highlighted. It currently looks like this: <p/> <a href="http://fsteeg.com/images/drc-b1-m4.png"><img class="alignnone size-full" title="drc-b1-m4" src="http://fsteeg.com/images/drc-b1-m4.png" alt="A digitization wiki using Scala and Eclipse 4" /></a> <p/> For the initial prototype implementation, we used XML files in zips to store the page content, combined with <a href="https://truezip.dev.java.net/">TrueZIP</a>, a library which allows access to files in zips the way it should be: like files in a folder. So we could basically create and use the zip entries like this: <pre><code>val zipEntry = new File(&quot;PPN345572629_0004.zip/0001.xml&quot;)</code></pre> <p/> The XML is created using <a href="http://www.codecommit.com/blog/scala/working-with-scalas-xml-support">Scala's XML support</a>, e.g. the top class in our domain model (Page) is serialized by specifying the root element and calling <em>toXml</em> on each containing element (the words), like this: <pre><code>def toXml:Elem = &lt;page&gt; { words.map(_.toXml) } &lt;/page&gt;</code></pre> <p/> The XML is deserialized with the reverse action, by passing the deserialized word elements contained in the root element to the Page factory method: <pre><code>def fromXml(page:Elem) = Page( for(word &lt;- (page \ &quot;word&quot;)) yield Word.fromXml(word) )</code></pre> <p/> So that was basically our prototypical persistence mechanism. Of course, to actually collaboratively correct our digitized texts, we needed a central DB instance on some server. Or maybe not exactly: having <a href="http://chaosradio.ccc.de/cre125.html">heard good things about CouchDB</a> (in german), it was the first option I looked into. The distributed nature of CouchDB sounded very interesting and seemed appropriate for our project - not for performance reasons, but to provide offline or decentralized editing as an option. <p/> So I looked into <a href="http://couchdb.apache.org/">CouchDB</a> with <a href="http://github.com/debasishg/scouchdb">scouchdb</a>, a Scala API to access it (<a href="http://twitter.com/fsteeg/statuses/20551941141">and a very welcoming project</a>). After input from my colleague, I became aware that we'd lose quite a bit of installation ease if we pick a non-Java DB, so CouchDB was not really a client side option for offline storage, and therefore the strongest reason for us to consider it no longer there. <p/> Next I considered an embedded relational Java DB with some ORM or ORM-like access. A JPA solution like EclipseLink or Hibernate seemed overkill and not ideal for Scala. Instead I took a closer look at <a href="http://github.com/szeiger/scala-query">ScalaQuery</a>, which uses Scala's <em>for expressions</em> for DB queries, which seems like the thing you want if you happen to use a language that basically has a query language built-in. <p/> For instance, in ScalaQuery, we could write a query to get all pairs of pages and words where the page contains the word and the original form of the word is <em>Bonifaci</em> like this: <pre><code>val bonifaci = for (page &lt;- Pages; word &lt;- Words; if page.id === word.pageId &amp;&amp; word.original === &quot;Bonifaci&quot;) yield (page, word)</code></pre> <p/> To allow this kind of queries, we need to define tables named <em>Pages</em> and <em>Words</em>. Defining the tables with ScalaQuery is quite elegant, e.g. our main table for pages could be defined like this: <pre><code>object Pages extends Table[(String, java.sql.Blob)](&quot;pages&quot;) { def id = column[String](&quot;id&quot;, O PrimaryKey) def image = column[java.sql.Blob](&quot;image&quot;) def * = id ~ image }</code></pre> <p/> However, this leads to either a duplication of our domain objects (have a table object as above and the original class) or a complete rewrite (use table objects like above as the domain objects), which both seemed wrong. <p/> Also, thinking about alternatives to our XML representation, I came to realize that we would want some form of XML export anyway to ensure long-term access to our data, which is in the public domain and a cultural asset. Of course it would be possible to implement this as some form of export, but if possible it would be just perfect if we could use a single persistence mechanism. <p/> I did remember there are some XML DBs around, but initially abandoned that idea since XML is only half of what we store (the other thing being the images used to correct the text, see screenshot above). But after being unhappy with these other solutions, I took a closer look at <a href="http://exist.sourceforge.net/">eXist-db</a>, an XML DB licensed under the LGPL which by default runs on <a href="http://eclipse.org/jetty/">Jetty</a>. <p/> And I learned that eXist actually supports both XML and binary data, which was just what we needed. With eXist, we also get XQuery support and various interfaces to the data. In our case, this is less of an immediate concern, given Scala's XML support and <em>for expressions</em> are a bit like built-in XQuery capabilities. For instance, a query on XML that is equivalent to the ScalaQuery from above could look like this: <pre><code>val bonifaci = for (page &lt;- xml\&quot;page&quot;; word &lt;- page\&quot;word&quot;; if (word\&quot;@original&quot;).text == &quot;Bonifaci&quot;) yield (page, word)</code></pre> <p/> This is not only about as concise as the query above, but also allows to express the hierarchical nature of our data in the query ('each word in the page'), instead of having to map the relational representation ('all words with a certain page ID'). <p/> As we already deserialize the XML to page objects, what we actually do is query on these. For switching the serialization from entries in a zip file to the eXist DB and allow these queries, the only conceptual change was to store the XML and image files in the DB instead of using a File object, which allowed a really smooth transition. <p/> And with Scala's rich semantics and XML support, our DB wrapper in Scala can be very <a href="http://lamp.epfl.ch/~odersky/blogs/isscalacomplex.html">simple</a> and precise about what it offers in its API, namely XML documents for a collection ID (if found in the DB): <pre><code>val xmls:Option[List[Elem]] = Db.xml(collection)</code></pre> <p/> Or binary data: <pre><code>val imgs:Option[List[Array[Byte]]] = Db.bin(collection)</code></pre> <p/> The elements provided by the DB in this way can be passed to the original deserialization method of Page: <pre><code>val pages:List[Page] = for(page &lt;- Db.xml(collection)) yield Page.fromXml(page)</code></pre> <p/> Given this, we can now use a plain Scala <em>for expression</em> on the deserialized objects to query our data like this: <pre><code>val bonifaci = for (page &lt;- pages; word &lt;- page.words; if word.original == &quot;Bonifaci&quot;) yield (page, word)</code></pre> <p/> At this point we have replaced the file storage with the DB, but are still creating the XML manually, using Scala's XML literals. To avoid any duplication (each class parameter or field is represented again in the serialization logic), and basically eliminate all direct XML manipulation, we could use an XML binding library like <a href="http://scalaxb.org/">scalaxb</a>, <a href="https://jaxb.dev.java.net/">JAXB-RI</a> or <a href="http://eclipse.org/eclipselink/moxy.php">MOXy</a>. <p/> On the other hand, the type safety of the Scala XML serialization code makes the duplication feel much less dangerous than traditional, string-based XML serialization (which can break easily unnoticed by the compiler). And being about as concise as some JAXB annotations and marshalling code would be, the disadvantages seem almost entirely theoretical, but we'll see - swapping the serialization logic should be as easy as swapping the storage implementation was. http://172.105.249.169:9000/notes/scala-object-persistence-and-the-original-nosql-xmlhttp://172.105.249.169:9000/notes/scala-object-persistence-and-the-original-nosql-xml Mon, 30 Aug 2010 00:00:01 +0000 programmingeclipsejavaxmlscala DOT for Zest on Eclipse 4 <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2010/07/27/dot-for-zest-on-eclipse-4/">https://fsteeg.wordpress.com/2010/07/27/dot-for-zest-on-eclipse-4/</a></small></p> <p/> I recently checked out the latest RC of the <a href="http://download.eclipse.org/e4/sdk/drops/S-4.0RC3-201007251756/">Eclipse 4.0 SDK</a> and <a href="http://twitter.com/fsteeg/status/19274741068">was excited to see</a> that I could basically install any Helios software without issues. So I thought why not do some work on <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">dot4zest</a> using Eclipse 4. <p/> I was amazed to see that Eclipse 4.0 (labeled <em>Early Adopter Release</em>) is already completely usable for me (even if it doesn't yet offer all the things I'm used to in the current version - perspective customization and custom key bindings are things I hit). And I really like that fresh look - a whole new Eclipse, after all these years! <p/> So here is a quick tour of some new dot4zest features, running on Eclipse 4. <p/> A new feature in the DOT to Zest interpreter (which now uses the <a href="http://www.eclipse.org/Xtext/">Xtext</a> switch API generated for the DOT grammar) is support for ad-hoc DOT edge definitions, without having to declare the nodes before using them in an edge, e.g. <pre><code>digraph { node[label=&quot;Node&quot;] 1-&gt;2; 2-&gt;3; 2-&gt;4 }</code></pre> <p/> <a href="http://fsteeg.com/images/screen-shot-2010-07-27-at-00-14-55.png"><img class="alignnone size-full" title="dot4zest-e4-1" src="http://fsteeg.com/images/screen-shot-2010-07-27-at-00-14-55.png" alt="" /></a> <p/> Also new is support for the <em>rankdir=LR</em> attribute in the DOT input, e.g. <pre><code>digraph { rankdir=LR; 1-&gt;2; 2-&gt;3; 2-&gt;4 }</code></pre> <p/> <a href="http://fsteeg.com/images/screen-shot-2010-07-27-at-00-23-02.png"><img class="alignnone size-full" title="dot4zest-e4-2" src="http://fsteeg.com/images/screen-shot-2010-07-27-at-00-23-02.png" alt="" /></a> <p/> The <em>rankdir=LR</em> setting is supported in Zest to DOT export, too: if a Zest graph using the horizontal layout is exported to DOT and rendered with Graphviz, the direction will be correct for the result, e.g. if we hit the export button in the view above, this is opened: <p/> <a href="http://fsteeg.com/images/screen-shot-2010-07-27-at-00-26-27.png"><img class="alignnone size-medium" title="dot4zest-export-1" src="http://fsteeg.com/images/screen-shot-2010-07-27-at-00-26-27.png?" alt="" /></a> <p/> If the DOT input contains features that are not yet supported in the Zest representation created by dot4zest, the import will now handle the input better and try to display the parts it can make sense of, e.g. DOT with subgraphs can be rendered with Zest, but subgraphs are ignored: <pre><code>digraph { subgraph cluster_1 {1-&gt;2} subgraph cluster_2 {1-&gt;3} }</code></pre> <p/> <a href="http://fsteeg.com/images/screen-shot-2010-07-27-at-00-37-48.png"><img class="alignnone size-full" title="dot4zest-e4-3" src="http://fsteeg.com/images/screen-shot-2010-07-27-at-00-37-48.png" alt="" /></a> <p/> The Graphviz image export can be customized (see toggle above) to use the original DOT input instead of a DOT representation generated from the Zest graph, e.g. with the view and the input above, the export will render the subgraphs from the original DOT input: <p/> <a href="http://fsteeg.com/images/screen-shot-2010-07-27-at-00-37-581.png"><img class="alignnone size-medium" title="dot4zest-export-2" src="http://fsteeg.com/images/screen-shot-2010-07-27-at-00-37-581.png?" alt="" /></a> <p/> Finally, the graph view now contains a toggle button (enabled in all screenshots above) to switch between different modes: listen to changes made to DOT graphs in workspace files and visualize them with Zest automatically (useful for programs outputting DOT or for live preview during DOT editing), or visualize only files loaded explicitly. <p/> The <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">dot4zest</a> code is part of <a href="http://www.eclipse.org/gef/zest/">Zest</a> (a <a href="http://www.eclipse.org/gef/">GEF</a> component) and available from the <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.gef/plugins/?root=Tools_Project">Tools repository</a>. It is not available from an eclipse.org update site yet, but can be easily installed (for Eclipse 3.6 and 4.0) from the <a href="http://marketplace.eclipse.org/content/graphviz-dot-zest-dot4zest">marketplace</a> (Help &gt; Eclipse Marketplace). http://172.105.249.169:9000/notes/dot-for-zest-on-eclipse-4http://172.105.249.169:9000/notes/dot-for-zest-on-eclipse-4 Tue, 27 Jul 2010 00:00:01 +0000 graphvizprogrammingeclipsesoczest An Eclipse RCP digitization wiki with e4 and Scala <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2010/04/18/an-eclipse-rcp-digitization-wiki-with-e4-and-scala/">https://fsteeg.wordpress.com/2010/04/18/an-eclipse-rcp-digitization-wiki-with-e4-and-scala/</a></small></p> <p/> We have reached the first milestone of a new project I have been working on since November. The goal of the <a href="http://www.spinfo.phil-fak.uni-koeln.de/forschung-drc.html">project</a> (which is funded by the <a href="http://en.wikipedia.org/wiki/Deutsche_Forschungsgemeinschaft">DFG</a>) is to create a wiki for collaboratively improving the digitization of the <em>Romansch Chrestomathy</em>, a collection of <a href="http://en.wikipedia.org/wiki/Romansh_language">Romansch</a> texts. <p/> I think the domain of this project is very interesting, as it not only aims at improving access to cultural assets, but also takes the community wiki approach, which leads to a situation that is probably not the most common case in academic software development: users are part of the plan. <p/> But perhaps even more, I'm excited about the technical parts of the project, as we use both <a href="http://www.scala-lang.org/">Scala</a> for the core, non-UI components and <a href="http://wiki.eclipse.org/E4">e4</a> for the UI. <p/> Our first milestone for the initial beta (which we plan to release in summer) provides a basic local, single-user implementation of our system. It features basic search and page selection, editing and persistence, word-based edit history and highlighting of the currently selected word in the original scan. <p/> <a href="http://fsteeg.com/images/screenshot-drc-b1-m1.png"><img class="alignnone size-full" title="screenshot-drc-b1-m1" src="http://fsteeg.com/images/screenshot-drc-b1-m1.png" alt="Screenshot" /></a> <p/> As expected, combining two cutting edge technologies (Scala 2.8 and e4) does cause some inconveniences (e.g. I currently can't develop the Scala and the e4 code in the same Eclipse instance, as the Scala IDE for Eclipse does not yet support Helios and e4 won't run on Galileo). <p/> But once I had a proper Ant build system in place (compile Scala sources, deploy as Jars into the e4 workspace, etc.), I was amazed about the concise code base we were able to build both for the backend and the UI with this approach. <p/> To give some examples of what I liked about developing using Scala and e4 I've picked out a few lines from both sides of the current (not very large) code base. <p/> On the Scala side, I really liked having features like <a href="http://www.codecommit.com/blog/scala/case-classes-are-cool">case classes</a>, <a href="http://www.scala-lang.org/node/131">XML support</a>, and <a href="http://www.codecommit.com/blog/scala/quick-explanation-of-scalas-syntax">concise anonymous functions</a>. <p/> For instance, the XML serialization method of a <code>Page</code> defines that the full structure of the XML is to be filled with the XML representation of each <code>Word</code> of the <code>Page</code>: <pre><code>def toXml = &lt;page&gt; { words.toList.map(_.toXml) } &lt;/page&gt;</code></pre> <p/> We also needed a method to get a simple text representation of the <code>Page</code>, made only of the most recent form of each <code>Word</code>: <pre><code>def toText = (&quot;&quot; /: words) (_ + &quot; &quot; + _.history.top.form)</code></pre> <p/> And to implement a simple full text search for collecting pages in which the edit history of a <code>Word</code> contains the given term, I checked each <code>Page</code> like this: <pre><code>page.words.exists(_.history.exists(_.form contains term))</code></pre> <p/> On the e4 side, the whole development experience feels much more lightweight and modern than developing with Eclipse 3 thanks to e4 features like the <del datetime="2010-07-22T17:24:48+00:00"><a href="http://wiki.eclipse.org/E4/UI/Toolkit_Model">Toolkit</a></del> <a href="http://wiki.eclipse.org/E4/UI/Modeled_UI">Workbench Model</a>, <a href="http://wiki.eclipse.org/E4/Contexts">dependency injection</a> and <a href="http://wiki.eclipse.org/E4/CSS/SWT_Mapping">CSS styling</a>. <p/> For instance, the view at the bottom of the application (showing the original scan) needs to listen to the selection of the <code>Page</code> in the top view (showing pages matching the search term). To listen to the selection of pages, the view defines a method with the following signature: <pre><code>@Inject public void setSelection(@Optional @Named(SELECTION) Page page)</code></pre> <p/> At the same time, the bottom view also needs to react to the selection of a word in the central edit view, in order to highlight the particular section in the page. Again, we define that we want to get called if a word is selected somewhere (which is represented by a <code>Text</code> widget here): <pre><code>@Inject public void setSelection(@Optional @Named(SELECTION) Text word)</code></pre> <p/> And I think it's really awesome to be able to specify font style and size (and even gradients) for the <code>Text</code> widgets used in the edit view with CSS: <pre><code>Text { font: Times 14px; background-color: #e8e8e8 #cccccc 60%; }</code></pre> <p/> With the information on how the views are put together in the TM and the CSS file containing the styling information, the remaining UI code feels much lighter than before: there are basically just a few view classes and handlers, communicating loosely via DI and the TM. <p/> So for me, combining Scala and e4 is a great new way to write a Java desktop app! And hopefully more... Our plans for the beta include multi-user support and web deployment with <a href="http://wiki.eclipse.org/RAP">RAP</a> - some challenges for sure, but with the great start I had into e4 development, I'm very confident it will work out! <p/> We have been working on this in public from the start (after all, it's publicly funded), so you can take a closer look at the code or check out this very early state of the application <a href="http://www.github.com/fsteeg/drc">on GitHub</a>.We have reached the first milestone of a new project I have been working on since November: an Eclipse RCP wiki application (implemented using e4 and Scala) to collaboratively improve the digitization of the Romansch Chrestomathy, a collection of Romansch texts. [...] http://172.105.249.169:9000/notes/an-eclipse-rcp-digitization-wiki-with-e4-and-scalahttp://172.105.249.169:9000/notes/an-eclipse-rcp-digitization-wiki-with-e4-and-scala Sun, 18 Apr 2010 00:00:01 +0000 eclipsejavaprogrammingscala Google Summer of Code 2010 at Eclipse <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2010/03/19/google-summer-of-code-2010-at-eclipse/">https://fsteeg.wordpress.com/2010/03/19/google-summer-of-code-2010-at-eclipse/</a></small></p> <p/> The <a href="http://socghop.appspot.com/">Google Summer of Code</a> 2010 is on and <a href="http://wiki.eclipse.org/Google_Summer_of_Code">once again</a>, Eclipse has been accepted as a <a href="http://socghop.appspot.com/gsoc/org/show/google/gsoc2010/eclipse">mentoring organization</a>. If you want to contribute to Eclipse, build a great project, and get more involved with the Eclipse community - all as a summer job paid by Google - then check out the <a href="http://wiki.eclipse.org/Google_Summer_of_Code_2010_Ideas">ideas page</a> and <a href="http://socghop.appspot.com/document/show/gsoc_program/google/gsoc2010/faqs#student_apply">apply</a>. <p/> I was a SOC student at Eclipse last year and it has been an awesome experience! After completing my project, I wanted to create and spread some SOC swag and had stickers printed from the official Eclipse SOC logo. Since it was the first time I did this, after sending multiple different sizes of the logo, the sticker shop gave up on me and just sent me the double amount I had ordered, but uncut. <p/> <a href="http://fsteeg.com/images/soc-stickers.jpg"><img class="alignnone size-full" title="Hand-cut Eclipse Summer of Code stickers" src="http://fsteeg.com/images/soc-stickers.jpg" alt="Hand-cut Eclipse Summer of Code stickers" /></a> <p/> So even after flooding both Ian Bull (my SOC mentor) and Gen Nishimura (the <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=184913">original logo</a> creator) with real-world postal sticker spam, I still have plenty left! So if you'd like your own Eclipse Summer of Code stickers, hand-cut by a genuine Eclipse SOC student, just mail me your address, and I'll be happy to ship you some.The Google Summer of Code 2010 is on and once again, Eclipse has been accepted as a mentoring organization. If you want to contribute to Eclipse, build a great project, and get more involved with the Eclipse community - all as a summer job paid by Google - then check out the ideas page and apply. [...] http://172.105.249.169:9000/notes/google-summer-of-code-2010-at-eclipsehttp://172.105.249.169:9000/notes/google-summer-of-code-2010-at-eclipse Fri, 19 Mar 2010 00:00:01 +0000 eclipseprogrammingsoc Generating documentation from a wiki with Ant and Mylyn WikiText <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2010/03/14/generating-documentation-from-a-wiki-with-ant-and-mylyn-wikitext/">https://fsteeg.wordpress.com/2010/03/14/generating-documentation-from-a-wiki-with-ant-and-mylyn-wikitext/</a></small></p> <p/> I was planning to update the <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">dot4zest</a> documentation when I saw the recent posts by <a href="http://greensopinion.blogspot.com/2010/03/crowdsourcing-documentation-made-easy.html">David Green</a> and <a href="http://aniszczyk.org/2010/03/13/crowdsourcing-documentation-at-eclipse/">Chris Aniszczyk</a> on generating Eclipse help right from the wiki. <p/> Outdated and duplicated documentation is one of the topics I keep encountering in basically every project I work on. Given that I was already generating the dot4zest help with WikiText (but from a file, not straight from the wiki) I decided to give it a try. <p/> Following the instructions in the <a href="http://wiki.eclipse.org/DocumentationGuidelines/CrowdSourcingExample">crowdsourcing example</a>, I first got the WikiText <a href="http://www.eclipse.org/downloads/download.php?file=/tools/mylyn/update/weekly/mylyn-wikitext-standalone-latest.zip">standalone Jars</a> and set up a small Ant script: <pre><code>&lt;project name=&quot;dot4zest&quot; default=&quot;doc&quot; basedir=&quot;.&quot;&gt; wikitext.tasks.classpath&quot;&gt; &lt;fileset dir=&quot;Graphviz_DOT_as_a_DSL_for_Zest&quot;&gt; mylyn.wikitext.*core*.jar&quot;/&gt; &lt;/fileset&gt; &lt;/path&gt; &lt;taskdef classpathref=&quot;wikitext.tasks.classpath&quot; resource= &quot;org/eclipse/mylyn/internal/wikitext/mediawiki/core/tasks/tasks.properties&quot;/&gt; &lt;taskdef classpathref=&quot;wikitext.tasks.classpath&quot; resource= &quot;org/eclipse/mylyn/wikitext/core/util/anttask/tasks.properties&quot;/&gt; &lt;target name=&quot;doc&quot;&gt; &lt;!-- Set up the base wiki location to pull content from: --&gt; &lt;mediawiki-to-eclipse-help wikiBaseUrl=&quot;http://wiki.eclipse.org&quot; validate=&quot;true&quot; failonvalidationerror=&quot;true&quot; prependImagePrefix=&quot;images&quot; formatoutput=&quot;true&quot; defaultAbsoluteLinkTarget=&quot;doc_external&quot; dest=&quot;${basedir}&quot; title=&quot;Graphviz DOT as a DSL for Zest&quot; generateUnifiedToc=&quot;false&quot;&gt; &lt;!-- Set up which wiki page to pull from: --&gt; &lt;path name=&quot;Graphviz_DOT_as_a_DSL_for_Zest&quot; title=&quot;Graphviz DOT as a DSL for Zest&quot; generateToc=&quot;true&quot;/&gt; &lt;/mediawiki-to-eclipse-help&gt; &lt;/target&gt; &lt;/project&gt;</code></pre> <p/> Running the Ant file (<em>ant</em> in a console or double-click after dragging it onto the Ant view in Eclipse) pulls the content <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">from the wiki location</a> specified in the script and generates the Eclipse help: <p/> <a href="http://fsteeg.com/images/dot4zest-eclipse-help-toc.png"><img class="alignnone size-full" title="dot4zest-eclipse-help-toc" src="http://fsteeg.com/images/dot4zest-eclipse-help-toc.png" alt="Generated Eclipse Help TOC" /></a> <p/> Next, I updated the help TOC extension in the plugin.xml: <pre><code>&lt;extension point=&quot;org.eclipse.help.toc&quot;&gt; &lt;toc file=&quot;Graphviz-DOT-as-a-DSL-for-Zest-toc.xml&quot; primary=&quot;true&quot;/&gt; &lt;/extension&gt;</code></pre> <p/> Then I added the generated help resources to the binary build in the <em>build</em> tab of the manifest editor to have them included in the deployed bundle: <p/> <a href="http://fsteeg.com/images/dot4zest-eclipse-help-build.png"><img class="alignnone size-full" title="dot4zest-eclipse-help-build" src="http://fsteeg.com/images/dot4zest-eclipse-help-build.png" alt="Including the generated help resources in the binary build" /></a> <p/> With this, the wiki page content is included in the Eclipse online help of the bundle (Help &gt; Help Contents). <p/> Being based on <a href="http://wiki.eclipse.org/Mylyn/WikiText">Mylyn WikiText</a> - which supports many wiki markup formats (textile, confluence, mediawiki, trac and twiki) as well as output to other formats than Eclipse help (e.g. DocBook and DITA) - I imagine this approach could be used in many project documentation setups. <p/> I really like this WikiText feature both for technical and collaborative reasons: it reduces duplication (<em>DRY for docs!</em>) and eases collaboration on documentation. Instead of being part of the code repository, the help content is made available to a wider range of editors than the people committing code - which I believe is useful for projects of any size.I was planning to update the dot4zest documentation when I saw the recent posts by David Green and Chris Aniszczyk on generating Eclipse help right from the wiki. [...] http://172.105.249.169:9000/notes/generating-documentation-from-a-wiki-with-ant-and-mylyn-wikitexthttp://172.105.249.169:9000/notes/generating-documentation-from-a-wiki-with-ant-and-mylyn-wikitext Sun, 14 Mar 2010 00:00:01 +0000 authoringprogrammingeclipsesoczest Diagrams in wiki markup with Mylyn WikiText, DOT, and Zest <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2010/02/07/diagrams-in-wiki-markup-with-mylyn-wikitext-dot-and-zest/">https://fsteeg.wordpress.com/2010/02/07/diagrams-in-wiki-markup-with-mylyn-wikitext-dot-and-zest/</a></small></p> <p/> I'm continuing on my <a href="http://wp.me/pwKJk-1L">ancient quest</a> for Graphviz DOT support in Eclipse: after implementing initial support for rendering DOT with Zest in Eclipse through <a href="http://wp.me/pwKJk-6M">dot4zest</a> and some <a href="http://wp.me/pwKJk-8P">early tinkering</a> with dynamically drawing DOT embedded in wiki markup with Zest, I have now started to approach the next step: integrating the Graphviz export into the Mylyn WikiText editor. <p/> Say we are editing embedded <a href="http://en.wikipedia.org/wiki/DOT_language">DOT</a> in wiki markup with the Mylyn <a href="http://wiki.eclipse.org/Mylyn/WikiText">WikiText</a> editor and have an open dot4zest Zest graph view, which displays a <a href="http://www.eclipse.org/gef/zest/">Zest</a> representation of the DOT graph (powered by the EMF <a href="http://code.google.com/p/emfmodelvisualizer/">model visualizer</a> and <a href="http://www.eclipse.org/Xtext/">Xtext</a> - <a href="http://www.eclipse.org/org/foundation/eclipseawards/project.php">vote Xtext!</a>): <p/> <a href="http://fsteeg.com/images/dot4zest-wikitext-1.png"><img class="alignnone size-full" title="dot4zest-wikitext-1" src="http://fsteeg.com/images/dot4zest-wikitext-1.png" alt="Mylyn Wikitext editor and Zest Graph View" /></a> <p/> Now upon saving, dot4zest asks if we want to add a reference to the Graphviz image export to our wiki markup file (requires a local <a href="http://www.graphviz.org/">Graphviz</a> installation, for which we are prompted the first time the export happens): <p/> <a href="http://fsteeg.com/images/dot4zest-wikitext-2.png"><img class="alignnone size-full" title="dot4zest-wikitext-2" src="http://fsteeg.com/images/dot4zest-wikitext-2.png" alt="Dialog" /></a> <p/> If we say yes, dot4zest puts a reference to the exported image file into our plain text wiki markup file. This adds an image representation of the Zest graph displayed in the view to output generated from the plain text - like HTML export or the preview tab of the Mylyn WikiText editor: <p/> <a href="http://fsteeg.com/images/dot4zest-wikitext-3.png"><img class="alignnone size-full" title="dot4zest-wikitext-3" src="http://fsteeg.com/images/dot4zest-wikitext-3.png" alt="WikiText editor including exported image" /></a> <p/> Being sort of <a href="http://wiki.eclipse.org/Gef/Incubator/Proposal">pre-incubation</a>, this is all still fairly restricted and experimental, e.g. it currently supports only a single graph per file and only Textile markup. I've added these latest changes to the update site, so if you want to check it out update your existing dot4zest installation or install it from the update site at <code>http://quui.com/updates</code> (category <em>Zest</em> -&gt; feature <em>dot4zest</em>). http://172.105.249.169:9000/notes/diagrams-in-wiki-markup-with-mylyn-wikitext-dot-and-zesthttp://172.105.249.169:9000/notes/diagrams-in-wiki-markup-with-mylyn-wikitext-dot-and-zest Sun, 07 Feb 2010 00:00:01 +0000 eclipsegraphvizsoczest Arduino, Eclipse, and the joy of extending your IDE into the physical world <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2010/01/25/arduino-eclipse-and-the-joy-of-extending-your-ide-into-the-physical-world/">https://fsteeg.wordpress.com/2010/01/25/arduino-eclipse-and-the-joy-of-extending-your-ide-into-the-physical-world/</a></small></p> <p/> Ever since I read about using <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=67492">Java and Lava</a> to monitor project build status in Mike Clark's <em>Pragmatic Project Automation</em>, I was thrilled by the idea of extending your IDE into the physical world. When I recently listened to an episode of the <em>Chaosradio Express</em> podcast about <a href="http://chaosradio.ccc.de/cre138.html">tinkering in the 21st century</a> (in german) and learned about <a href="http://www.arduino.cc/">Arduino</a>, I thought this could be simple enough for me to get started with electronics and so I ordered a <a href="http://fritzing.org/shop/starter-kit/">Fritzing Starter Kit</a> and a book on <a href="http://www.amazon.com/Getting-Started-Arduino-Make-Projects/dp/0596155514">Getting Started with Arduino</a>. <p/> With red, yellow and green LEDs included in the set, I had the idea of building something like a coder's traffic light. The Eclipse problems view seemed like a good place to start as it contains content for red (errors), yellow (warnings) and green (empty view) state. Also, it is very configurable about what's showing (through <em>Mylyn</em> or <em>Configure Contents</em>) and could thus be used flexibly with a very simple approach. <p/> So this is the basic idea: If we are completely off while coding, and we're writing something like <code>List&lt;&gt;</code>, we get the stop signal from Eclipse: <p/> <a href="http://fsteeg.com/images/red2.png"><img class="alignleft " title="red" src="http://fsteeg.com/images/red2.png" alt="Red traffic light" /></a><a href="http://fsteeg.com/images/empal-screen-error.png"><img class="size-medium alignnone" title="empal-screen-error" src="http://fsteeg.com/images/empal-screen-error.png?" alt="Eclipse JDT with error in problems view" /></a> <p/> Now we try to do a little better, removing these confusing pointy brackets and write just <code>List</code>, which is better, but not quite right yet, and Eclipse tells us so: <p/> <a href="http://fsteeg.com/images/yellow.png"><img class="alignleft " title="yellow" src="http://fsteeg.com/images/yellow.png" alt="Yellow traffic light" /></a><a href="http://fsteeg.com/images/empal-screen-warning.png"><img class="size-medium alignnone" title="empal-screen-warning" src="http://fsteeg.com/images/empal-screen-warning.png?" alt="Eclipse JDT with warning in the problems view" /></a> <p/> Now we remember it should be a <code>List&lt;Node&gt;</code>, and with an empty problems view we are good to go: <p/> <a href="http://fsteeg.com/images/green2.png"><img class="alignleft " title="green" src="http://fsteeg.com/images/green2.png" alt="Green traffic light" /></a><a href="http://fsteeg.com/images/empal-screen-empty.png"><img class="size-medium alignnone" title="empal-screen-empty" src="http://fsteeg.com/images/empal-screen-empty.png?" alt="Eclipse JDT with empty problems view" /></a> <p/> In addition to the basic functionality of red, green and yellow lights, it would be cool if these lights would not be blindingly bright all the time, but rather adjust their brightness according to ambient light when coding in dim settings. Also, we want to turn the device on and off and have a separate light indicating if it's on or off. <p/> The first step to make the thing real is to build the hardware prototype using an Arduino, a solderless breadboard, LEDs, some wires and resistors, two buttons and a light sensor (image created with <a href="http://fritzing.org/">Fritzing</a>): <p/> <a href="http://fsteeg.com/images/empal-plan1.png"><img class="alignnone size-medium" title="empal-plan" src="http://fsteeg.com/images/empal-plan1.png?" alt="empal-plan" /></a> <p/> Now that we have the hardware set up, let's write the code for the Arduino. This is the code we upload to the Arduino hardware from the Arduino IDE. First we define shortcuts for the pins used, set the pin modes, and open a serial connection from the Arduino to the computer: <pre><code>void setup() { pinMode(BLUE, OUTPUT); // #define BLUE 3 pinMode(GREEN, OUTPUT); // #define GREEN 9 pinMode(YELLOW, OUTPUT); // #define YELLOW 10 pinMode(RED, OUTPUT); // #define RED 11 pinMode(ON, INPUT); // #define ON 8 pinMode(OFF, INPUT); // #define OFF 7 Serial.begin(9600); }</code></pre> <p/> We can now define the top-level logic of what the board should do: if the device is on, turn the lights on, else turn them off: <pre><code>boolean on = false; void loop() { if(digitalRead(ON) == HIGH) on = true; if(digitalRead(OFF) == HIGH) on = false; if(on) turnOnLights(); else turnOffLights(); }</code></pre> <p/> I used two separate buttons for turning the device on and off to avoid dealing with de-bouncing issues and get a usable solution with very little code (plus I really like the separate on and off buttons on my amplifier's remote so I thought it might make sense). Turning off is simple: <pre><code>void turnOffLights() { digitalWrite(GREEN, LOW); digitalWrite(RED, LOW); digitalWrite(YELLOW, LOW); digitalWrite(BLUE, LOW); }</code></pre> <p/> If the device is on, we first reset all lights and dim the power light depending on ambient light. Then we read from the serial connection to the computer, and depending on what we are reading, we set the traffic lights to green (0), yellow (1) or red (2): <pre><code>void turnOnLights() { turnOffLights(); dim(BLUE, 5, 25); switch(Serial.read()) { case 0 : dim(GREEN, 25, 255); break; case 1 : dim(YELLOW, 25, 255); break; case 2 : dim(RED, 25, 255); break; default: turnOffLights(); } Serial.flush(); delay(1000); }</code></pre> <p/> For the traffic lights, we adjust the brightness according to what we read from the light sensor, mapping the light sensor's input values (0-1023) to values for the traffic lights (25-255). For the power light we map to values between 5 and 25 only, to make it lower than the traffic lights. For the mapping, we use Arduino's map function: <pre><code>void dim(int output, int mini, int maxi) { analogWrite(output, map(analogRead(0), 0, 1023, mini, maxi)); }</code></pre> <p/> So now we have programmed our Arduino to light the traffic lights according to the input it gets via the serial USB port connection. To make this show the thing we want (the status of the problems view in Eclipse), we now have to turn to the Eclipse side of things. To communicate via the serial connection, we set up a Plug-in project in Eclipse with the <a href="http://rxtx.qbang.org/wiki/index.php/Main_Page">RXTX</a> library and add the lib folder as <a href="http://www.eclipsezone.com/eclipse/forums/t49342.html">a native library</a> for the RXTXcomm.jar: <p/> <a href="http://fsteeg.com/images/empal-native-lib.png"><img class="alignnone size-full" style="border:1px solid gray;" title="empal-native-lib" src="http://fsteeg.com/images/empal-native-lib.png" alt="Native library setup" /></a> <p/> I had to rename the native library to <code>RXTXcomm.jnilib</code> to make this work. Also, RXTX only works with Java 5, so on my Mac I had to get Java 5 from Leopard to make this work on Snow Leopard. As Java 5 from Leopard is 32 bit, I had to use a 32 bit version of Eclipse, too. I also had to create a writable directory <code>/var/lock</code>. With the library set up, we can now connect to the Arduino from within the Java code in our Eclipse bundle. We first set up the connection, specifying the <code>cu.usbserial</code> port that is set up in the Arduino IDE: <pre><code>String portId = &quot;/dev/cu.usbserial-A9007WtK&quot;; // from Arduino IDE CommPortIdentifier id = CommPortIdentifier.getPortIdentifier(portId); SerialPort port = (SerialPort) id.open(&quot;Eclipse-Arduino&quot;, 1000); final OutputStream output = port.getOutputStream()</code></pre> <p/> Then, we declare a <code>Runnable</code> that gets the status from the problems view and sends the current state through the serial USB connection to the Arduino (note that this is not particularly clean as it uses internal API and relies on the specific format of the description string, but it's short and illustrates how to interface with the Arduino hardware from an Eclipse bundle): <pre><code>final Runnable sendStatus = new Runnable() { public void run() { String viewId = &quot;org.eclipse.ui.views.ProblemView&quot;; IViewPart view = getSite().getPage().findView(viewId); if (view == null) return; ProblemsView problemsView = ((ProblemsView) view); String desc = problemsView.getContentDescription(); try { int err = 2, warn = 1, ok = 0; output.write( desc.contains(&quot;0 items&quot;) ? ok : desc.contains(&quot;0 errors&quot;) ? warn : desc.trim().length() &gt; 0 ? err : -1); } catch (IOException e) { e.printStackTrace(); } } };</code></pre> <p/> Then, we run the <code>Runnable</code> asynchronously in a background thread: <pre><code>new Thread(new Runnable() { public void run() { while (true) { parent.getDisplay().asyncExec(sendStatus); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start();</code></pre> <p/> So with the prototype built on the breadboard we have the basic device working, and can get a heads up from Eclipse even when we're staring at the keyboard during coding: <p/> <a href="http://fsteeg.com/images/empal-picture.jpg"><img class="alignnone size-full" title="empal-picture" src="http://fsteeg.com/images/empal-picture.jpg" alt="Picture of the prototype" /></a> <p/> And it doesn't have to stop here: how about moving those lights <em>into</em> the keyboard, or building a Lego case for it, or even creating a real <a href="http://fritzing.org/shop/fab/">circuit board</a> and <a href="http://www.makerbot.com/">custom case</a> for the device. And on the software side, we could make it configurable for different Eclipse views (like the JUnit view) or connect it to continuous integration. Tinkering on hardware and software tooling with Arduino and Eclipse - oh joy! http://172.105.249.169:9000/notes/arduino-eclipse-and-the-joy-of-extending-your-ide-into-the-physical-worldhttp://172.105.249.169:9000/notes/arduino-eclipse-and-the-joy-of-extending-your-ide-into-the-physical-world Mon, 25 Jan 2010 00:00:01 +0000 eclipseprogrammingtinkering Visual textual documentation with DOT and Zest in Eclipse <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2010/01/07/visual-textual-documentation-with-dot-and-zest-in-eclipse/">https://fsteeg.wordpress.com/2010/01/07/visual-textual-documentation-with-dot-and-zest-in-eclipse/</a></small></p> <p/> Following up on my previous post, I've been playing some more with the idea of visualizing Graphviz <a href="http://en.wikipedia.org/wiki/DOT_language">DOT</a> embedded in source files with <a href="http://www.eclipse.org/gef/zest/">Zest</a> as tooling for a pragmatic kind of literate programming in Eclipse. My <a href="http://fsteeg.wordpress.com/2009/12/30/zest-for-dot-literacy-in-the-eclipse-javadoc-view/">initial idea</a> was to add the Zest graph to the Javadoc view. One problem with this is that actually using it is quite cumbersome, as it requires a patched <em>org.eclipse.jdt.ui</em> bundle. Another downside is that it limits the usability of this to Java documentation. <p/> So I tweaked the Zest <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest#Zest_Graph_View">graph view</a> I developed earlier to now kind of implement the same thing, but for any file in the workspace containing a DOT graph. So this still allows visualizing DOT embedded in Javadoc comments, but it might as well be used to document programs written in any obscure language somebody happened to write an Eclipse editor for, say Prolog: <p/> <a href="http://fsteeg.com/images/literate-zest-prolog-screen.png"><img class="alignnone size-full" title="literate-zest-prolog-screen" src="http://fsteeg.com/images/literate-zest-prolog-screen.png" alt="literate-zest-prolog-screen" /></a> <p/> Another useful thing about this approach is that it makes existing functionality from the graph view available, like a button to export the Zest graph using <a href="http://www.graphviz.org/">Graphviz</a>. So from the source file containing a DOT graph embedded in a comment, we can export something to be used as documentation outside of Eclipse: <p/> <a href="http://fsteeg.com/images/literate-zest-prolog-tree.png"><img class="alignnone size-medium" title="literate-zest-prolog-tree" src="http://fsteeg.com/images/literate-zest-prolog-tree.png?" alt="literate-zest-prolog-tree" /></a> <p/> This approach also enables a basic way to use DOT with Zest in another place I originally thought it might be useful: wiki markup. Textual DOT graph definitions can be added to the markup and visualized with Zest while being edited in the <a href="http://greensopinion.blogspot.com/2009/03/mylyn-wikitext-10-released.html">Mylyn WikiText</a> editor: <p/> <a href="http://fsteeg.com/images/literate-zest-wikitext.png"><img class="alignnone size-medium" title="literate-zest-wikitext" src="http://fsteeg.com/images/literate-zest-wikitext.png?" alt="literate-zest-wikitext" /></a> <p/> While I think this might actually be useful, there are some disadvantages to this more general approach. One downside is that it's basically limited to one graph per file. There are probably ways around this (e.g. <a href="http://www.eclipse.org/articles/Article-Tabbed-Properties/tabbed_properties_view.html">with tabs</a>), but it's different from the Javadoc view approach, where every Java element (class, method, etc.) could easily have its own graph. Another downside of having a separate view for graphs is that it distributes the documentation, while if added to the Javadoc view it's all presented in one place. But I guess that's just the price to pay for a more general solution. <p/> Also, I'd like to mention that this is a manual kind of usage of the graph view, which can also be used to visualize DOT files created or changed programmatically (it listens to changes made to files in the workspace). That way, the view can be used to dynamically visualize program output, e.g. for debugging data structures. I believe Zest in general could be used for many awesome things in Eclipse IDEs: there's already <a href="http://www.eclipse.org/pde/incubator/dependency-visualization/index.php">dependency visualization</a>, and things like <em>watch visually</em> while debugging (e.g. for maps), automatic visualization of method input and output, or visual call hierarchies could be really cool, in particular with Zest's <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest#Animation_2">animation support</a>. <p/> You can check out the graph view by installing the <em>dot4zest</em> feature from the update site at <em>http://quui.com/updates </em>(in the <em>Zest</em> category). I have added the sample files I used above to the repository (in <em>ui/resources/lp_samples</em>). General info (including repository location and documentation) is available on the dot4zest <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">wiki page</a>. http://172.105.249.169:9000/notes/visual-textual-documentation-with-dot-and-zest-in-eclipsehttp://172.105.249.169:9000/notes/visual-textual-documentation-with-dot-and-zest-in-eclipse Thu, 07 Jan 2010 00:00:01 +0000 graphvizprogrammingeclipsesoczest Zest for DOT literacy in the Eclipse Javadoc view <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/12/30/zest-for-dot-literacy-in-the-eclipse-javadoc-view/">https://fsteeg.wordpress.com/2009/12/30/zest-for-dot-literacy-in-the-eclipse-javadoc-view/</a></small></p> <p/> Edit: <em>Hello Planet Eclipse! I'm very happy to be newly syndicated here, and just in time for the new year!&nbsp;I've been developing Eclipse bundles for study and research projects and for private stuff since around 2004. Last summer, I got more involved with Eclipse itself by participating in the Google Summer of Code at Eclipse.&nbsp;This post about an idea related to my SOC project sort of made me show up here so I thought this makes sense as my first post. A great 2010 to everyone!</em> <p/> Recovering a little from playing the awesome <em>Tales of Monkey Island</em> on the Wii during these wonderful days between the years, I picked up an idea I originally had while working on <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">dot4zest</a> during&nbsp;the Google Summer of Code at Eclipse. <p/> I was listening to an episode of the Stack Overflow podcast where Jeff and Joel discuss killer IDEs and the <a href="http://blog.stackoverflow.com/2009/05/podcast-55/">lack of visualization</a> in today's IDEs. <p/> Given my general interest in <a href="http://en.literateprograms.org/Parser_%28Prolog%29">literate programming</a> I thought hey, these DOT-to-Zest transformations I'm working on could be used to include Graphviz DOT graphs in Javadoc comments, and have them automatically visualized with Zest in the Eclipse Javadoc view. <p/> So the other day I put the <del datetime="2009-12-30T02:15:50+00:00">Plug-in</del> Bundle <a href="http://www.eclipse.org/pde/incubator/spy/">spy</a> to work, cloned the org.eclipse.jdt.ui <a href="http://dev.eclipse.org/git/">Git</a> repository, downloaded&nbsp;<a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.6M4-200912101301/index.php">Helios</a> and now I've got something running that while super rough around the edges, basically does that: <p/> <a href="http://fsteeg.com/images/dot4zest-javadoc5.png"><img class="alignnone size-full" title="dot4zest-javadoc" src="http://fsteeg.com/images/dot4zest-javadoc5.png" alt="dot4zest-javadoc"></a> <p/> Playing with this I had some ideas on how this could possibly be further integrated, like refactoring support (e.g. rename, just like it works for <em>@param</em> Javadoc comments), automatic highlighting of Zest graph nodes for selected Java elements, or <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest#Animation">animation</a> support. <p/> So is this just nuts or could it be a pragmatic kind of tooling for some literate programming? http://172.105.249.169:9000/notes/zest-for-dot-literacy-in-the-eclipse-javadoc-viewhttp://172.105.249.169:9000/notes/zest-for-dot-literacy-in-the-eclipse-javadoc-view Wed, 30 Dec 2009 00:00:01 +0000 graphvizprogrammingeclipsesoczest Graphviz DOT for Eclipse Zest <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/08/17/graphviz-dot-for-eclipse-zest/">https://fsteeg.wordpress.com/2009/08/17/graphviz-dot-for-eclipse-zest/</a></small></p> <p/> I have completed my Google Summer of Code project at Eclipse, <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">Graphviz DOT as a DSL for Zest</a>. It provides API und UI elements to transform both DOT graphs to Zest visualizations (to be used in Java SWT applications), and Zest visualizations to DOT graphs (to be rendered as image files with Graphviz). <p/> <img class="alignnone" title="DotForZest" src="http://wiki.eclipse.org/images/1/1e/DotForZest.png" alt="" /> <p/> The feature can be installed into Eclipse 3.5 from the update site at <em>http://quui.com/updates</em>. <p/> Documentation is available on <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">the project's Eclipse wiki page</a>. User documentation is also available via the built-in help system. Statistics can be found on <a href="https://www.ohloh.net/p/dot4zest/analyses/latest">the project's Ohloh page</a>. I have attached tonight's CVS repository snapshot (which I will have to submit to Google, i.e. it's the formal end result) to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277380">bug 277380</a>. <p/> The Summer of Code at Eclipse was a great experience for me (not least because of having a mentor who was super supportive right from the start) - both regarding technology (Xtext,  Xpand, and Zest FTW!) and community aspects (blogging about the project, learning what Twitter is about, using Bugzilla, etc). <p/> And I have not only created a feature that I am personally very keen to use, the best part is that the end of the Google Summer of Code is really the beginning of this, as it looks like my work will actually make it into Zest, and I hope to build upon this to create some cool stuff in the future. http://172.105.249.169:9000/notes/graphviz-dot-for-eclipse-zesthttp://172.105.249.169:9000/notes/graphviz-dot-for-eclipse-zest Mon, 17 Aug 2009 00:00:01 +0000 graphvizprogrammingeclipsesoczest Zest graph view with DOT support <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/08/09/zest-graph-view-with-dot-support/">https://fsteeg.wordpress.com/2009/08/09/zest-graph-view-with-dot-support/</a></small></p> <p/> For the final milestone of <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">my Google Summer of Code project at Eclipse</a>, I've added direct image export of Zest graphs via export to DOT and subsequent calling of the local <em>dot </em>executable. <p/> On the API level, the directory containing the Graphviz <em>dot</em> executable and the desired output format are specified with the Zest graph to export. In the UI, once the directory is set in a dialog, the location is stored in the bundle's preferences. This is used in a new <em>Zest Graph</em> view I added with this milestone: <p style="text-align:left;"><img style="border:0;" title="Zest graph view" src="http://wiki.eclipse.org/images/d/d4/DotZestM8Screenshot.png" alt="" /></p> <p/> The view listens to *.dot files in the workspace and draws them with Zest. It also provides a button to export the current Zest graph as a PDF, which is stored in the same location as the *.dot file. Further information on the view can be found on <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest#Milestone_8">the project's Eclipse wiki page</a>. <p/> Besides providing UI for the new direct image export, this view also follows up on the previous milestone (see <a href="http://fsteeg.wordpress.com/2009/07/31/drawing-graphviz-dot-with-zest/">Drawing Graphviz DOT with Zest</a>). The *.dot files visualized with Zest can be edited manually in an editor, or could be generated by an application (e.g. to visualize data structures). <p/> With the 'pencils down' date of the Google Summer of Code <a href="http://socghop.appspot.com/document/show/program/google/gsoc2009/timeline">approaching</a>, this completes the actual functionality of my project. Now one more week to wrap it up. http://172.105.249.169:9000/notes/zest-graph-view-with-dot-supporthttp://172.105.249.169:9000/notes/zest-graph-view-with-dot-support Sun, 09 Aug 2009 00:00:01 +0000 graphvizprogrammingeclipsesoczest Drawing Graphviz DOT with Zest <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/07/31/drawing-graphviz-dot-with-zest/">https://fsteeg.wordpress.com/2009/07/31/drawing-graphviz-dot-with-zest/</a></small></p> <p/> In the latest milestone of <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">my Google Summer of Code project at Eclipse</a>, I have added support for dynamic creation of Zest graph instances from DOT input, which allows direct drawing of DOT with Zest. To use this, you first create a DotImport object from the DOT input, which can be given as a String, File, or IFile: <pre style="color:black;background-color:#f9f9f9;line-height:1.1em;font-size:medium;border:1px dashed #2f6fab;padding:1em;">DotImport importer = new DotImport("digraph name {1;2;1-&gt;2}");</pre> From this object, a Zest graph instance can be created in a given parent and with a style: <pre style="color:black;background-color:#f9f9f9;line-height:1.1em;font-size:medium;border:1px dashed #2f6fab;padding:1em;">Graph graph = importer.newGraphInstance(shell, SWT.NONE);</pre> Here, the parent is a shell, which if opened will contain the Zest graph created from the DOT input: <p/> <img class="alignnone" title="Simple Zest graph" src="http://wiki.eclipse.org/images/2/23/DotZestSimple.png" alt="" /> <p/> My original approach to get a graph instance was to take the generated Zest graph subclass (see previous milestones), compile it with a Java compiler and create the instance using reflection. The appeal of this was that the dynamically instantiated graph would be exactly the same thing as what is compiled from the input. <p/> So I started two approaches: using the Java 6 compiler API and the internal Eclipse JDT Java compiler. I got it working with the Java 6 compiler API when running as a plain Java application, using some tricks to avoid class reloading problems. Hitting further classloading issues when running in a workbench, I reconsidered this approach, since both possible solutions seemed not ideal. <p/> The Java 6 compiler API would introduce a dependency on Java 6. To make a possible inclusion of my code in Zest easy, this seems unfortunate. And more on the practical side: it would no longer run on my Mac (a 32-bit Core Duo). <p/> The internal Eclipse JDT compiler API initially seemed like an alternative here, but as I learned from the recent issue of the Eclipse-Magazin (ah, good old print, still useful), usage of internal API is not allowed for projects taking part in the Eclipse release train. So again, to even make an inclusion of my code in Zest possible, this seems to be no solution. <p/> So I followed up on the approach I was already using for dynamically getting the DOT graph name and compile errors: parsing the input programmatically with the parser generated by Xtext and getting info from there. In the same manner, the EMF object tree parsed from the DOT input is now interpreted to create and populate the Zest graph. <p/> The slight downside of this is that it duplicates how a Zest graph is created from DOT (which in a different way was already present in the Xpand template). On the other hand, this allows to dynamically draw DOT with Zest in a way that feels more lightweight compared to the compiler approach, and it supports all the DOT input features supported by the compiler (described in the posts for the previous milestones). <p/> The graph wizard <a href="http://fsteeg.wordpress.com/2009/06/22/zest-wizard-with-dot-templates/">added in milestone 3</a> now uses this dynamic drawing support to preview the resulting Zest graph when changes are made to the DOT template inside the wizard. <p/> With the end of the Google Summer of Code slowly approaching (two more weeks), I am very happy to have this dynamic creation of Zest graphs from DOT in, as this is an aspect of the project that I personally find particularly useful. I have been generating DOT from applications for some different use cases, often involving an Eclipse UI. The dependency on the <em>dot</em> executable and calling that from Java always added a lot of inconvenience. <p/> With this, I'll be able to use the two lines of code from above in Eclipse applications to visualize DOT without any non-Java dependencies. I'm excited to start using this in some of my other stuff, and <a href="http://eclipsesource.com/blogs/2009/07/10/a-zesty-summer/comment-page-1/#comment-2070">it seems I'm not the only one with this kind of use case</a>. <p/> With the previous milestone I have updated from oAW 4.3 to the Eclipse Modeling versions of the oAW components in Galileo. As this results in a dependency on the SVN version of the EMF model visualizer project, the changes for this milestone are only in the dot4zest HEAD and not attached to the corresponding bug. Instructions on how to set this up can be found on the <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest#Resources">wiki page</a>. http://172.105.249.169:9000/notes/drawing-graphviz-dot-with-zesthttp://172.105.249.169:9000/notes/drawing-graphviz-dot-with-zest Fri, 31 Jul 2009 00:00:01 +0000 graphvizprogrammingeclipsesoczest A Graphviz-compatible animation DSL for Zest <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/07/12/a-graphviz-compatible-animation-dsl-for-zest/">https://fsteeg.wordpress.com/2009/07/12/a-graphviz-compatible-animation-dsl-for-zest/</a></small></p> <p/> For the fifth milestone of <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">my Google Summer of Code project at Eclipse</a>, I've added support for animated Zest visualizations, representing the animation steps as subgraphs in the DOT input. With this, the DOT input effectively becomes a Graphviz-compatible animation DSL for Zest. <p/> To explain what I mean with <em>representing animation steps as subgraphs</em>, let's assume we have a directed DOT graph with global attributes and some nodes:<pre style="color:black;background-color:#f9f9f9;line-height:1.1em;font-size:medium;border-color:#2f6fab;border-style:dashed;border-width:1px;padding:1em;">node[label="Node"]; edge[label="Edge" style=dotted]; 1;2;3;4;5</pre> We then define a subgraph: <pre style="color:black;background-color:#f9f9f9;line-height:1.1em;font-size:medium;border:1px dashed #2f6fab;padding:1em;">subgraph cluster_0{ 1 -&gt; 2 [label="Dashed" style=dashed] }</pre> Now in the resulting Zest visualization, hitting the animation button once results in the structure described by the subgraph: <p/> <img class="alignnone" title="First step" src="http://wiki.eclipse.org/images/7/7e/DotZestM5Screenshot1.png" alt="" /> <p/> Then, in further subgraphs, we define how the current graph should be altered: <pre style="color:black;background-color:#f9f9f9;line-height:1.1em;font-size:medium;border:1px dashed #2f6fab;padding:1em;">subgraph cluster_1{ 1 -&gt; 3 }</pre> <pre style="color:black;background-color:#f9f9f9;line-height:1.1em;font-size:medium;border:1px dashed #2f6fab;padding:1em;">subgraph cluster_2_end{ 3 -&gt; 4; 3 -&gt; 5 } // "end" for the final step</pre> Each click alters the graph by applying the next subgraph, resulting in the final Zest visualization: <p/> <img class="alignnone" title="Final step" src="http://wiki.eclipse.org/images/3/38/DotZestM5Screenshot2.png" alt="" /> <p/> It's all quite experimental, uses a separate Xpand template, relies on conventions (numering, "end" for the final step, etc.), but overall it's already quite usable and supports all the stuff supported in the <a href="http://fsteeg.wordpress.com/2009/06/28/zest-project-type-with-dot-support/">normal DOT import</a> (global attributes, Zest layout algorithms, edge styles). <p/> Putting it all together we get the complete DOT input for this example: <pre style="color:black;background-color:#f9f9f9;line-height:1.1em;font-size:medium;border:1px dashed #2f6fab;padding:1em;">digraph SampleAnimation { node[label="Node"]; edge[label="Edge" style=dotted] //optional 1;2;3;4;5 subgraph cluster_0{ 1 -&gt; 2 [label="Dashed" style=dashed]} subgraph cluster_1{ 1 -&gt; 3 } subgraph cluster_2_end{ 3 -&gt; 4; 3 -&gt; 5} }</pre> The same DOT input can still be rendered with Graphviz, providing a static representation of the animation, with the individual steps as subgraphs: <p/> <img class="alignnone size-full" title="DotZestM5Graphviz" src="http://fsteeg.com/images/dotzestm5graphviz3.png" alt="DotZestM5Graphviz" /> <p/> The example above is automatically set up in the project created by the <a href="http://fsteeg.wordpress.com/2009/06/28/zest-project-type-with-dot-support/">Zest project wizard</a>. Besides the described animation support, in milestone 5 I've also cleaned up the import API and fixed some bugs. If you want to try it, you can find the details on the <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">dot4zest Eclipse wiki page</a>. http://172.105.249.169:9000/notes/a-graphviz-compatible-animation-dsl-for-zesthttp://172.105.249.169:9000/notes/a-graphviz-compatible-animation-dsl-for-zest Sun, 12 Jul 2009 00:00:01 +0000 graphvizprogrammingeclipsesoczest Zest project type with DOT support <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/06/28/zest-project-type-with-dot-support/">https://fsteeg.wordpress.com/2009/06/28/zest-project-type-with-dot-support/</a></small></p> <p/> I've completed the fourth milestone of my Google Summer of Code project at Eclipse. It adds a Zest project type with support for Graphviz DOT templates in a dedicated folder. These DOT files are automatically compiled to Zest graph subclasses. Details can be found on the <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">dot4zest Eclipse wiki page</a>. <p/> <img class="alignnone" title="Zest wizard with DOT template selection and preview" src="http://wiki.eclipse.org/images/2/2c/DotZestM4Screenshot.png" alt="" /> <p/> While implementing this functionality I've also updated and streamlined the DotImport API by adding methods taking IFile parameters for all of the provided functionality (importing DOT, checking for errors, and some minor other things). <p/> Between this and the previous milestone, the Eclipse world has taken a significant step forward with the release of Eclipse 3.5 and the Galileo simultaneous release. I was very happy to see that after some minor tweaks, my bundles work just fine on Galileo, so I made the move and switched to Galileo. <p/> With Galileo, most of the oAW dependencies I rely on are now part of the Eclipse release train (in particular Xtext and Xpand). However, <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277397#c3">I also depend on the oAW Graphviz feature, which is not in Galileo</a>. So for now this project still depends on oAW (and I was pleased to see that oAW works flawlessly with Galileo). <p/> I've also found some time to write unit tests for both wizards (the project wizard introduced with this milestone and the graph wizard introduced with milestone 3). I just love running unit tests for UI elements: seeing the things that are usually triggered by clicking around happen all by themselves (like wizards popping up, editors opening, etc.) is just magic. http://172.105.249.169:9000/notes/zest-project-type-with-dot-supporthttp://172.105.249.169:9000/notes/zest-project-type-with-dot-support Sun, 28 Jun 2009 00:00:01 +0000 graphvizprogrammingeclipsesoczest Zest wizard with DOT templates <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/06/22/zest-wizard-with-dot-templates/">https://fsteeg.wordpress.com/2009/06/22/zest-wizard-with-dot-templates/</a></small></p> <p/> As the third milestone of my Google Summer of Code project at Eclipse, I've implemented a Zest graph wizard supporting Graphviz DOT import. It offers different Zest graph templates, created from DOT representations. The Zest graph to be generated from the DOT template is previewed in the wizard, and the DOT representation can be customized in a second wizard page. Details can be found on the <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">dot4zest Eclipse wiki page</a>. <p/> <img class="alignnone" title="Zest wizard with DOT template selection and preview" src="http://wiki.eclipse.org/images/3/37/DotZestM3Screenshot.png" alt="" /> <p/> Behind the UI I've added a few things that were required for validation and preview in the wizard: the DOT input for the Xpand generator is parsed using EMF to get the graph name and return parser errors to the wizard. This also allowed me to return the generated file in the API (which I couldn't do before as the name of the result file is determined by the name of the DOT graph, which is defined as part of the DOT representation itself). <p/> Rather experimental is some effort I started to return an actual Zest graph instance for the generated Zest graph. One possible way to achieve this is by compiling the generated file programatically and then loading the graph via reflection. The advantage of such an approach is that it would really return the same graph that is generated. An alternative way to get a Graph instance would be to expand on the EMF interpreting I'm currently doing to validate the DOT input in the wizard (as mentioned above). <p/> The motivation for getting back an instance was to get Zest graph preview of the DOT templates into the wizard. As it turned out this was possible even without really getting the compilation to work programmatically, so I'll leave it at that for now and see which approach actually makes more sense when I get back to it in the future. http://172.105.249.169:9000/notes/zest-wizard-with-dot-templateshttp://172.105.249.169:9000/notes/zest-wizard-with-dot-templates Mon, 22 Jun 2009 00:00:01 +0000 eclipsegraphvizsoczest Graphviz DOT export for Zest <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/06/10/graphviz-dot-export-for-zest/">https://fsteeg.wordpress.com/2009/06/10/graphviz-dot-export-for-zest/</a></small></p> <p/> I've completed the second milestone of <em>Graphviz DOT as a DSL for Zest,</em> my Google Summer of Code project at Eclipse. Milestone 2 adds basic Graphviz export for Zest by generating DOT files or strings from Zest graph instances. Details can be found on <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">the project's Eclipse wiki page</a>. <p/> Milestone 2 also adds integrated DOT export support to the Zest graphs generated by the <a href="http://fsteeg.wordpress.com/2009/06/01/this-is-dot-transformation-zest-to-rock-the-foundation/">Graphviz import for Zes</a>t (milestone 1), through a <em>toDot</em> method. I was considering overriding <em>toString</em> in these classes, but while the DOT representation is human-readable, it is not always <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#toString()">concise</a>. <p/> I had some doubts using the <a href="http://www.eclipse.org/articles/Article-JET/jet_tutorial1.html">original JET</a> instead of the <a href="http://www.eclipse.org/modeling/emf/docs/architecture/jet2/jet2.html">new JET2</a> for generating the DOT representations, but <a href="http://wiki.eclipse.org/JET_FAQ_How_do_I_run_an_individual_JET_template_and_get_a_string_back%3F">it seems</a> that with JET2 I have to introduce a runtime dependency on the M2T bundles. With the original JET,  a plain Java class is generated at development time that has no additional bundle dependencies at all. This seems very useful in this case, as it would not burden Zest with additional dependencies for the export functionality. So I sticked with that for now. If I'm missing something here I'd be happy about any pointers on how this could be done with JET2. <p/> Implementing the basic export functionality was less work than I had anticipated. I guess one reason for this is the combination of the general simplicity of graphs - just nodes and edges - with the fact that the DOT output is very short and easy to write, even in a template. Also, I did not have to worry about any Zest layout algorithms like for the import, as DOT does not support them in the language itself. This could be tackled in the future by using other Graphviz commands than <em>dot</em> (like <em>circo</em>,<em> neato</em><em> </em>etc.) once the executable is called as an optional part of the export (<a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest#Timeline">planned for milestone 8</a>). <p/> When I look at the code I have written myself to implement the actual functionality (i.e. not generated or testing code), I find it almost scary to see how little that is: about 60 lines for the export (~15 for the JET template and ~45 for the DotExport wrapper class) and about 170 lines for the import (~95 for the Xpand template, ~15 for the generator workflow and ~60 for the DotImport wrapper class). <p/> Thanks to the Ohloh <a href="https://www.ohloh.net/p/dot4zest/analyses/latest">analysis</a> though, I can comfort myself, as it says overall it's at about 1000 lines, so I can see I <em>did </em>write some code. Actually, all I wanted was a timeline or changelog for the complete repository, for me to check up on what I have been doing lately from time to time. Unfortunately this is <a href="http://developer.berlios.de/support/index.php?func=detailsupport&amp;support_id=102940&amp;group_id=1">currently not available</a> for Berlios CVS repositories. <p/> So I looked around for some alternatives, and simply setting up the repository location on Ohloh seemed to be the easiest way. This gets me that complete <a href="https://www.ohloh.net/p/dot4zest/commits">timeline</a> and more. It's not perfect, though. For instance, it takes 2-4 days <a href="https://www.ohloh.net/p/dot4zest/enlistments">to catch up</a>. Also, it feels a bit weird having these contributions to Zest in a project of its own on Ohloh. But Ohloh projects can be closed anytime and in the meantime it's useful to get an overview of the existing code and changes. http://172.105.249.169:9000/notes/graphviz-dot-export-for-zesthttp://172.105.249.169:9000/notes/graphviz-dot-export-for-zest Wed, 10 Jun 2009 00:00:01 +0000 eclipsegraphvizsoczest Graphviz DOT import for Zest <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/06/01/graphviz-dot-import-for-zest/">https://fsteeg.wordpress.com/2009/06/01/graphviz-dot-import-for-zest/</a></small></p> <p/> I've completed the first milestone of my Google Summer of Code project, <em>Graphviz DOT as a DSL for Zest</em>. Milestone 1 implements basic Graphviz import for Zest by generating Zest Graph subclasses from DOT descriptions. Details can be found on <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">the project's Eclipse wiki page</a>. A useful insight I got out of this first week of coding is that <em>by</em> participating in the SOC I'm learning that I don't actually <em>need</em> the SOC to contribute to Eclipse. I could have written <a href="http://dev.eclipse.org/mhonarc/lists/gef-dev/msg01132.html">mails</a>, filed <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=specific&amp;order=relevance+desc&amp;bug_status=__all__&amp;product=GEF&amp;content=%5Bdot4zest%5D">bugs</a> and done the <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277380#c2">coding</a> just the same. Except of course for that little red book, which accumulates money on a magic 'gift card' hidden in the back cover. http://172.105.249.169:9000/notes/graphviz-dot-import-for-zesthttp://172.105.249.169:9000/notes/graphviz-dot-import-for-zest Mon, 01 Jun 2009 00:00:01 +0000 eclipsegraphvizsoczest Graphviz DOT as a DSL for Zest <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/04/22/graphviz-dot-as-a-dsl-for-zest/">https://fsteeg.wordpress.com/2009/04/22/graphviz-dot-as-a-dsl-for-zest/</a></small></p> <p/> Yay! My proposal, <a href="http://socghop.appspot.com/student_project/show/google/gsoc2009/eclipse/t124022230869">Graphviz DOT as a DSL for Zest</a>, has been accepted for the <a href="http://socghop.appspot.com/org/home/google/gsoc2009/eclipse">Google Summer of Code 2009 at Eclipse</a>. The application process went smooth and was a very exciting experience (peaking in the packed #gsoc channel when results were announced). Recieving an acceptance notification little more than <em>two weeks</em> after the application deadline is a truly refreshing experience compared to what I know from academia. So with an awesome program so far, I'm now looking forward to <a href="http://fsteeg.blogspot.com/2009/04/summer-of-zest.html">some more</a> <a href="http://googlesummerofcode.blogspot.com/2007/04/so-what-is-this-community-bonding-all.html">bonding</a> with <a href="http://www.eclipse.org/gef/zest/">Zest</a> at <a href="http://www.eclipse.org/org/">the Foundation</a> before the coding begins on May 23rd. <p/> <img border="0" src="http://fsteeg.com/images/2009socwithlogo.gif" alt="GSOC-2009" /> http://172.105.249.169:9000/notes/graphviz-dot-as-a-dsl-for-zesthttp://172.105.249.169:9000/notes/graphviz-dot-as-a-dsl-for-zest Wed, 22 Apr 2009 00:00:01 +0000 eclipsesoczest Summer of Zest <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/04/02/summer-of-zest/">https://fsteeg.wordpress.com/2009/04/02/summer-of-zest/</a></small></p> <p/> <p>I've submitted <a href="http://socghop.appspot.com/student_proposal/show/google/gsoc2009/fsteeg/t123836114274">an application</a> for the <a href="http://code.google.com/soc">Google Summer of Code 2009</a> <a href="http://wiki.eclipse.org/Google_Summer_of_Code">at Eclipse</a>. My goal is to <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">make Graphviz DOT usable as a DSL for Zest (The Eclipse Visualization Toolkit)</a>, based on <a href="http://www.eclipse.org/modeling/">Eclipse Modeling</a> technology. With all the buzz on the mailing lists, blogs and IRC, these are really exciting times!</p><p><img border="0" src="http://fsteeg.com/images/eclipsesoc.png" alt="Eclipse SOC"></p><p>And the best part is that applying alone has already made so many cool things happen: I got in contact with <a href="http://eclipsesource.com/blogs/author/irbull/">Ian Bull</a> (the <a href="http://www.eclipse.org/gef/zest/">Zest</a> component lead), <a href="http://eclipsesource.com/blogs/2009/03/13/soc-what-are-you-doing-this-summer/">who liked the idea</a>. A little later, I had a <a href="http://en.wikipedia.org/wiki/WebEx">webex</a> meeting with <a href="http://www.voelter.de">Markus Völter</a>, who (after hearing about the idea) had offered to show me around in the <a href="http://code.google.com/p/emfmodelvisualizer/">EMF model visualizer</a> project (which my proposal depends on). And I even have my very own Eclipse <a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest">wiki page</a> now (yay!). Great stuff ahead, one way or another.</p> http://172.105.249.169:9000/notes/summer-of-zesthttp://172.105.249.169:9000/notes/summer-of-zest Thu, 02 Apr 2009 00:00:01 +0000 eclipsesoczest The Eclipse Notebook <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/03/19/the-eclipse-notebook/">https://fsteeg.wordpress.com/2009/03/19/the-eclipse-notebook/</a></small></p> <p/> The Eclipse Notebook is an Eclipse editor to manage your notes. All notes are stored in a single XML file in your workspace, making it easily manageable with version control etc. For authoring, it supports embedded Graphviz/Dot (needs to be installed separately) and Wikitext. The Eclipse Notebook allows you to view, filter and edit your notes in two ways (each in a different tab of the editor): As an HTML preview (which can be saved) and as a form editor. In both modes, the notes can be filtered for flexible search criteria (like all notes tagged as x or all notes from 2003, etc). The filtered notes can be exported as an HTML page or as a new Notebook file.<p></p><p><img border="1" src="http://fsteeg.com/files/notes.png" /></p><p><i>Installation</i>: The Eclipse Notebook can be installed from the update site at <i><a href="http://quui.com/updates">http://quui.com/updates</a></i> (requires Eclipse 3.4, aka Ganymede). Use the wizard to create a new empty Notebook after installation. Note that this is an early release, and out of the box will only work on Linux systems. On other platforms, you currently need to add "-Dfile.encoding=UTF-8" to your eclipse.ini file. It also has some other rough edges, e.g. no Undo in the Edit tab, so you have been warned.</p> http://172.105.249.169:9000/notes/the-eclipse-notebookhttp://172.105.249.169:9000/notes/the-eclipse-notebook Thu, 19 Mar 2009 00:00:01 +0000 eclipsejava Eclipse Features <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/03/19/eclipse-features/">https://fsteeg.wordpress.com/2009/03/19/eclipse-features/</a></small></p> <p/> I've added two Eclipse Features to the update site: my <a href="http://wp.me/pwKJk-27">Notebook editor</a> and the very experimental Eclipse version of the qLog logging visualizer (<a href="http://quui.com">info</a>). I've also updated some of the old Eclipse Features on the update site, as well as the update site itself: to reflect the experimental status of the features provided there, I've changed the version numbers to a leading zero. So in case you have already installed some of the features, you should uninstall them first (and probably delete the contents of the cache folders in eclipse/p2). The update site can be found at: <em><a href="http://quui.com/updates">http://quui.com/updates</a></em>. http://172.105.249.169:9000/notes/eclipse-featureshttp://172.105.249.169:9000/notes/eclipse-features Thu, 19 Mar 2009 00:00:01 +0000 eclipsejava Coding Alaaf! <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2009/03/19/coding-alaaf/">https://fsteeg.wordpress.com/2009/03/19/coding-alaaf/</a></small></p> <p/> I have been using the leisure of <a href="http://en.wikipedia.org/wiki/Cologne_carnival">the fifth season</a> to play a bit with some side projects.<p></p><p>In <a href="http://splink.org/?p=10">qLog</a> for Eclipse, I've improved the scrolling behaviour (with <a href="http://stackoverflow.com/questions/570818">some help</a>) and tweaked <a href="http://www.quui.com/">our</a> Log4j appender a bit. You can install or update the plug-in using our update site at <a href="http://www.quui.com/updates">http://www.quui.com/updates</a>. If you are running on a non-Linux system, you will have to install <a href="https://developer.mozilla.org/en/XULRunner">XulRunner</a> to make this work. To use the plug-in with Log4j, simply add a <a href="http://fsteeg.com/files/ql4e/Log4jAppender.java">de.quui.qlog.Log4jAppender</a> to your Log4j logger. Check out <a href="http://fsteeg.com/files/ql4e/AppenderTest.java">this test</a>, which will log the messages you can see on the screenshot below.</p><p><img border="1" src="http://fsteeg.com/files/ql4e/ql4e.png" /></p><p>For <a href="http://hollala.sourceforge.net/">Hollala</a>, I've made WordNet optional, fixed some bugs and, most importantly, set up a proper Ant build system (to build, test, javadoc, jar and zip it). I've also added a download link to the latest version on the <a href="http://hollala.sourceforge.net/">project page</a>.</p> http://172.105.249.169:9000/notes/coding-alaafhttp://172.105.249.169:9000/notes/coding-alaaf Thu, 19 Mar 2009 00:00:01 +0000 eclipsejava Encapsulation, JAXB, and JavaBeans This was not obvious to me: When designing a class to be serialized using JAXB (and getting exceptions about missing getters, setters or no-args constructors), do we need to follow the JavaBeans anti-pattern (the 'anti' is my conclusion from reading Effective Java, 2nd ed., p. 12) and [http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html kiss encapsulation goodbye]? No, you can use a private no-args constructor and let JAXB access private fields directly by annotating the class with: ''@XmlAccessorType(value = XmlAccessType.FIELD)''. No getters, setters, or public fields required. http://172.105.249.169:9000/notes/encapsulation-jaxb-and-javabeanshttp://172.105.249.169:9000/notes/encapsulation-jaxb-and-javabeans Tue, 06 Jan 2009 00:00:01 +0000 javaprogrammming My five steps to programmer's heaven in seven years <a href="http://fsteeg.com/images/2008-12-17_programming-java-lisp-prolog-ruby-scala_My-five-steps-to-programmers-heaven-in-seven-years.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2008-12-17_programming-java-lisp-prolog-ruby-scala_My-five-steps-to-programmers-heaven-in-seven-years.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2008-12-17_programming-java-lisp-prolog-ruby-scala_My-five-steps-to-programmers-heaven-in-seven-years.dot -o 2008-12-17_programming-java-lisp-prolog-ruby-scala_My-five-steps-to-programmers-heaven-in-seven-years.svg */ digraph{node[shape=box] rankdir=LR center=true concentrate=true //subgraph cluster_0{Java Scala} //subgraph cluster_1{Lisp Prolog Ruby} Java->Scala[constraint=false dir=back] Java -> Lisp; Lisp->Prolog; Prolog->Ruby; Ruby->Scala; Scala->Java[style=dotted arrowhead=none] } </code></pre> --> http://172.105.249.169:9000/notes/my-five-steps-to-programmers-heaven-in-seven-yearshttp://172.105.249.169:9000/notes/my-five-steps-to-programmers-heaven-in-seven-years Wed, 17 Dec 2008 00:00:01 +0000 programmingjavalispprologrubyscala Notes <a href="http://fsteeg.com/images/2008-10-10_notes_Notes.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2008-10-10_notes_Notes.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2008-10-10_notes_Notes.dot -o 2008-10-10_notes_Notes.svg */ digraph{rankdir=LR; node[shape=box]; edge[head=open]; back->to->notes; notes->but->different[style=dashed];} </code></pre> --> http://172.105.249.169:9000/notes/noteshttp://172.105.249.169:9000/notes/notes Fri, 10 Oct 2008 00:00:01 +0000 notes Alas, Google Google's 10th anniversary also marks its succeeding Microsoft as the perceived number one evil software company: I've heard a guy on the radio recommending using IE over Chrome since Microsoft's business interest is selling software while Google's is collectiong (your) data. And there's some truth to it. Google came a long way, and I liked it quite some time along that way. I remember the first time Google's bundling of data made me feel a bit uncomfortable: when they aquired Deja News and what was an obscure archive of Usenet messages, which only Usenet users knew about, became part of the search engine everybody used. Well, it took a few more years for them to overtake Microsoft in perceived evilness. And that probably is required in the greater scheme of bringing down the seemingly intangible giant Microsoft. That scheme's shape seems to be disclosed with Chrome, the final step in replacing Microsoft Office. http://172.105.249.169:9000/notes/alas-googlehttp://172.105.249.169:9000/notes/alas-google Wed, 24 Sep 2008 00:00:01 +0000 web Using Mylyn with Flyspray <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2008/06/03/using-mylyn-with-flyspray/">https://fsteeg.wordpress.com/2008/06/03/using-mylyn-with-flyspray/</a></small></p> <p/> I've been thinking that I need a somewhat private issue tracking system, and when Max told me we have <a href="http://flyspray.org/">Flyspray</a> installed on <a href="http://www.quui.com">our server</a>, I thought why not set up <a href="http://www.eclipse.org/mylyn/">Mylyn</a>'s generic web connector <a href="http://wp.me/pwKJk-21">once again</a>. So here is what was required for setting up Mylyn with Flyspray for me: <p/> Task URL: <code>${serverUrl}/index.php?do=details&amp;task_id=</code> <p/> New Task URL: <code>${serverUrl}/index.php?do=newtask&amp;project=4</code> <p/> Query Request URL: <code>${serverUrl}</code> <p/> Query Pattern: <code>&lt;td class='task_id'&gt;&lt;a [^&gt;]+&gt;(\d+)&lt;/a&gt;&lt;/td&gt;.+?&lt;td class='task_summary'&gt;&lt;a [^&gt;]+&gt;([^&gt;]+)&lt;/a&gt;&lt;/td&gt;</code> <p/> The query pattern here is the simple form, where the ID is captured in the first group and the description in the second one. Building a pattern that would support <a href="http://wiki.eclipse.org/index.php/Mylyn/User_Guide#Generic_Web_Repository_Connector">Mylyn's labeled groups</a> for more attributes doesn't seem too hard as Flyspray's markup is pretty clean (by using descriptive class attributes as in the pattern above). http://172.105.249.169:9000/notes/using-mylyn-with-flysprayhttp://172.105.249.169:9000/notes/using-mylyn-with-flyspray Tue, 03 Jun 2008 00:00:01 +0000 eclipseprogramming Using Mylyn with GForge <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2008/05/27/using-mylyn-with-gforge/">https://fsteeg.wordpress.com/2008/05/27/using-mylyn-with-gforge/</a></small></p> <p/> In the <a href="http://www.planets-project.eu/">Planets</a> project we use <a href="http://gforge.org/">GForge</a> for issue tracking, which is not specifically supported by <a href="http://www.eclipse.org/mylyn/">Mylyn</a>. That's a pity, as Mylyn makes me actually use these tracking systems, I guess because integrated they provide benefit instead of being overhead (pretty much the same topic as in a <a href="http://wp.me/pwKJk-1Z">recent posting</a> actually). <p/> The great thing is Mylyn has a generic Web repository connector. I could not find much info on setting that up for GForge elsewhere, and the included GForge template (for a specific site) didn't work for me (their setup seems all different), so I make the stuff I figured out available here: <ul> <li>Server: Specify full path to the actual project under GForge, e.g. <code>http://gforge.planets-project.eu/gf/project/if_sp</code></li> <li>Under "Additional settings" add a parameter called <code>tracker_id</code> with the value of one of your trackers, e.g. <code>17</code> (bug, feature, etc. trackers)</li> <li>Task URL: <code>${serverUrl}/tracker/?action=TrackerItemEdit&amp;tracker_item_id=</code></li> <li>New Task URL: <code>${serverUrl}/tracker/?action=TrackerItemAdd&amp;tracker_id=${tracker_id}</code></li> <li>Query Request URL: <code>${serverUrl}/tracker/?action=TrackerItemBrowse&amp;tracker_id=${tracker_id}</code></li> <li>Query Pattern: <code>&lt;tr +id="content." valign="top" ?&gt;&lt;td ?&gt;({Id}\d+?)&lt;/td&gt;&lt;td ?&gt;&lt;a href="[\w="/;&amp;?]+?"&gt;({Description}[^&lt;]+)&lt;/a&gt;&lt;/td&gt;&lt;td bgcolor="#\w+?"&gt;({Type}\d)&lt;/td&gt;&lt;td ?&gt;(?:(?:&lt;a href="[\w=/]+?"&gt;)?({Owner}[^&lt;]+)(:?&lt;/a&gt;)?&lt;br ?/&gt;)+&lt;/td&gt;&lt;td ?&gt;&lt;a href="[\w=/]+?"&gt;[^&lt;]+&lt;/a&gt;&lt;/td&gt;&lt;td ?&gt;({Status}[^&lt;]+)&lt;/td&gt;</code></li> </ul> The pattern is a bit obscure but it works and supports unassigned tasks and multiple assignees (but as Mylyn expects only one, others are ignored) and might still work if in the future a few arbitrary blanks in the GForge HTML are removed. I'm not using a "." anywhere as Mylyn creates a Pattern object with the Pattern.DOTALL option, which caused trouble here (hail to open source, I would have never figured out why it was not working without checking what it's actually doing). <p/> Now when creating a query, you can specify the desired tracker by changing the <code>tracker_id</code> parameter (for the bug, feature, etc. trackers) and refine the query by changing the values in the pattern. For instance, to see open tasks only, replace <code>({Status}[^&lt;]+)</code> with <code>({Status}Open)</code> or just <code>Open</code>. In the same way you could specify to query only tasks assigned to you, etc. <p/> The most recent Mylyn version won't complain when a query is empty (like the query for open tasks assigned to you when all your work is done), making all of this quite usable once the queries are set up. If you need to log in to access your GForge site, check the <a href="http://wiki.eclipse.org/index.php/Mylyn_User_Guide#Generic_Web_Repository_Connector">Mylyn User Guide</a>. <span style="color:white;">.</span> http://172.105.249.169:9000/notes/using-mylyn-with-gforgehttp://172.105.249.169:9000/notes/using-mylyn-with-gforge Tue, 27 May 2008 00:00:01 +0000 eclipseprogramming Reporting research: the way of the future <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2008/05/23/reporting-research-the-way-of-the-future/">https://fsteeg.wordpress.com/2008/05/23/reporting-research-the-way-of-the-future/</a></small></p> <p/> I recently <a href="http://arxiv.org/abs/0805.3366">uploaded a paper to the arXiv</a>, "a highly-automated electronic archive and distribution server for research articles". I think something like this really makes sense. It makes reporting research effective and reliable, which I believe encourages getting things done: research, report - in your own pace. Then you can start looking ahead, like finding a place to present and discuss your work - or do more research. But don't let considerations of where and when to place your work hold you off from writing a report. And it seems that the arXiv's author <a href="http://arxiv.org/help/endorsement">endorsement</a> and <a href="http://arxiv.org/help/moderation">moderation</a> system, in connection with the wide and permanent visibility of papers (which raises one's inhibitions as an author), results in a quality control roughly comparable to other, classical publishing models, at much lower cost. <a href="http://people.ccmr.cornell.edu/~ginsparg/blurb/pg02pr.html">Its the way of the future</a>: openly accessible, long-term preservable digital knowledge repositories, which will still be around in <a href="http://www.amazon.com/Deepness-Sky-Zones-Thought/dp/0812536355">a future with archaeologist-programmers</a> (the ones digging real code, not coding real digging). http://172.105.249.169:9000/notes/reporting-research-the-way-of-the-futurehttp://172.105.249.169:9000/notes/reporting-research-the-way-of-the-future Fri, 23 May 2008 00:00:01 +0000 nlp Computational Representation of Linguistic Structures using Domain-Specific Languages <i>Abstract</i>: We (Fabian Steeg, Christoph Benden, Paul O. Samuelsdorff) describe a modular system for generating sentences from formal definitions of underlying linguistic structures using domain-specific languages. The system uses Java in general, Prolog for lexical entries and custom domain-specific languages based on Functional Grammar and Functional Discourse Grammar notation, implemented using the ANTLR parser generator. We show how linguistic and technological parts can be brought together in a natural language processing system and how domain-specific languages can be used as a tool for consistent formal notation in linguistic description. <p/> arXiv: <a href="http://arxiv.org/abs/0805.3366">0805.3366</a>; 12 pages http://172.105.249.169:9000/notes/computational-representation-of-linguistic-structures-using-domain-specific-languageshttp://172.105.249.169:9000/notes/computational-representation-of-linguistic-structures-using-domain-specific-languages Wed, 21 May 2008 00:00:01 +0000 reportdslnlp Tooling, not preaching, drives technology adoption <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2008/05/07/tooling-not-preaching-drives-technology-adoption/">https://fsteeg.wordpress.com/2008/05/07/tooling-not-preaching-drives-technology-adoption/</a></small></p> <p/> I'm once again convinced that tooling plays a crucial role in driving technology adoption. There are so many great technologies and ideas around, but unless they actually make your life easier, you hardly adopt them, at least I don't. <p/> I've experienced this with logging, for instance: I had read about logging, played with log4j and all. I found it nice being able to log to a file that could be viewed online as a website and stuff like that... but for debugging outputs, I rather used System.err. And why is that? Because it appears red in the console, and so sticks out between all the other stuff there. <p/> Then a friend recently showed me a little Swing app he did to log messages, which shows messages of the different log levels (like debug, info, warn, etc.) in different colors. I made an Eclipse plug-in for that (basically by displaying the HTML that was used in the Swing version in a SWT Browser widget instead), and he added a log4j appender (he was using it from Flash apps). <p/> And suddently I have something that actually makes logging something useful for me to adopt during development, instead of being overhead. Preaching didn't help for me, tooling did! http://172.105.249.169:9000/notes/tooling-not-preaching-drives-technology-adoptionhttp://172.105.249.169:9000/notes/tooling-not-preaching-drives-technology-adoption Wed, 07 May 2008 00:00:01 +0000 eclipseprogramming Literate string matching programs <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2008/01/12/literate-string-matching-programs/">https://fsteeg.wordpress.com/2008/01/12/literate-string-matching-programs/</a></small></p> <p/> I've added two little implementations to the literate programs wiki: string matching using the <a href="http://en.literateprograms.org/Boyer-Moore_string_search_algorithm_%28Java%29">Boyer-Moore</a> algorithm and a DP-based computation of the <a href="http://en.literateprograms.org/Levenshtein_distance_%28Java%29">Levenshtein</a> distance. <p/> I really like literate programs and think they are very useful, especially as they are working programs, opposed to the usual pseudocode found in many wikipedia articles and elsewhere. However, to create these, a lot of manual work has to be done, which is not up to todays development standards (when you're used to an IDE like Eclipse). This stuff really could use some nice tools support. <p/> Another problem to tackle is that the documentation actually gets lost in the generated code. Its still in the literate version, but having both code and documentation in one place is a crucial aspect of literate programming. It seems to me that there is a gap here to be filled somehow: the literate version won't run, and the running version ain't literate. http://172.105.249.169:9000/notes/literate-string-matching-programshttp://172.105.249.169:9000/notes/literate-string-matching-programs Sat, 12 Jan 2008 00:00:01 +0000 algorithmsprogramming Mach dem Mäh mal Ei Grad im Radio gehört: Mutter sagt zur Tochter im Zoo "Mach dem Mäh mal Ei" (soll heissen: Streichel mal die Ziege). http://172.105.249.169:9000/notes/mach-dem-maeh-mal-eihttp://172.105.249.169:9000/notes/mach-dem-maeh-mal-ei Thu, 03 Jan 2008 00:00:01 +0000 linguistics Trees with Generics and Visitors <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/12/31/trees-with-generics-and-visitors/">https://fsteeg.wordpress.com/2007/12/31/trees-with-generics-and-visitors/</a></small></p> <p/> Using <a href="http://en.wikipedia.org/wiki/Java_generics">generics</a> and the <a href="http://en.wikipedia.org/wiki/Visitor_pattern">visitor pattern</a>, it is actually possible to define a generic tree for different objects <span style="font-style:italic;">and</span> different operations on the tree, I have learned from the very interesting book <span style="font-style:italic;"><a href="http://www.oreilly.com/catalog/javagenerics/">Java Generics and Collections</a></span>. This seems quite useful to me. I have added an implementation for general trees based on the binary tree implementation in that book to the <a href="http://en.literateprograms.org/Generic_tree_%28Java%29">Literate Programs</a> wiki. Now what gets me thinking is that I have read someone (think it was <a href="http://www.3plus4.de/">sma</a>) writing the visitor pattern is superfluous. Could that be meant as in 'for certain languages, where visiting can be done very naturally'? Then this would still all make sense for Java. http://172.105.249.169:9000/notes/trees-with-generics-and-visitorshttp://172.105.249.169:9000/notes/trees-with-generics-and-visitors Mon, 31 Dec 2007 00:00:01 +0000 javaprogramming Update Site <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/12/31/update-site/">https://fsteeg.wordpress.com/2007/12/31/update-site/</a></small></p> <p/> I have set up an update site for my Eclipse Plug-ins. So, to install the <a href="http://wp.me/pwKJk-1P">suffix tree visualizer</a>, <a href="http://wp.me/pwKJk-1L">Graphviz viewer</a> or <a href="http://wp.me/pwKJk-1O">TopCoder algorithm competition wizard</a> plug-ins, enter <span style="font-family:courier new;">http://www.quui.com/updates/</span> in the update manger (Help -&gt; Software Updates -&gt; Find and Install...) and select the features to install. http://172.105.249.169:9000/notes/update-sitehttp://172.105.249.169:9000/notes/update-site Mon, 31 Dec 2007 00:00:01 +0000 eclipse Paradigmen, Dogmen und Konzepte <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/12/30/paradigmen-dogmen-und-konzepte/">https://fsteeg.wordpress.com/2007/12/30/paradigmen-dogmen-und-konzepte/</a></small></p> <p/> <p>Objektorientierte Programmierung (OOP) ist das Mainstream-Programmierparadigma der heutigen Zeit. Dies zeigt sich nicht nur durch die Tatsache, dass die beiden industriell wichtigsten Programmiersprachen Java und C++ diesem Paradigma folgen, sondern auch etwa darin, dass die verbreitetsten, sogenannten sprachunabhängigen Programmierhilfen, nämlich <span style="font-style:italic;">Design Patterns</span> und die <span style="font-style:italic;">Unified Modeling Language</span> (UML) dieses Paradigma voraussetzen. Nach einer Klärung der grundlegenden Begriffe beschreibe ich Eigenarten und Vorzüge der OOP, sowie im Anschluss Probleme dieses Paradigmas und geäusserte Kritik; anschließend gehe ich auf Konzepte alternativer Paradigmen (Logik- und funktionale Programmierung) vor dem Hintergrund der Frage ein, ob diese eine Lösung der Probleme der OOP darstellen können. Hier stellt sich die Frage, inwiefern es notwendig ist, in bestimmten Paradigmen zu bleiben oder ob sich diese nicht vielmehr in Konzepte zerlegen lassen, welche sich im Sinne pragmatischer Lösungen neu zusammensetzen lassen.</p> <p>Dateien: <a href="http://fsteeg.com/files/essay-oop.pdf">PDF</a>, <a href="http://fsteeg.com/files/essay-oop.zip">LaTeX/DOT</a></p> http://172.105.249.169:9000/notes/paradigmen-dogmen-und-konzeptehttp://172.105.249.169:9000/notes/paradigmen-dogmen-und-konzepte Sun, 30 Dec 2007 00:00:01 +0000 programming Polysemie zwischen Homonymie und Generalität <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/12/30/polysemie-zwischen-homonymie-und-generalitat/">https://fsteeg.wordpress.com/2007/12/30/polysemie-zwischen-homonymie-und-generalitat/</a></small></p> <p/> <p>Mehrdeutigkeit (Ambiguität) ist eine grundlegende Eigenschaft natürlicher Sprache. Im Bereich der lexikalischen Ambiguität stellt Polysemie eine Zwischenform zwischen Homonymie und Generalität dar. Polysemie spielt in verschiedenen Bereichen eine Rolle, etwa in der Lexikographie, der lexikalischen Semantik und der maschinellen Sprachverarbeitung. In der lexikalischen Semantik ist Polysemie ein kontroverser Begriff, da eine konzeptuelle Abgrenzung der Polysemie von Generalität auf bestimmten theoretischen Annahmen zum Status von Bedeutung beruht. In der maschinellen Sprachverarbeitung stellt Polysemie ein grundlegendes, ungelöstes praktisches Problem dar, da Polysemie bislang nicht automatisch aufgelöst werden kann. Bei einer Definition von Polysemie stellt sich die Frage, ob Polysemie als eigenständiges theoretisches Konzept den Anforderungen des Sparsamkeitsprinzipt der Wissenschaft genügt, oder vielmehr als rein deskriptiver Fachbegriff gesehen werden sollte.</p> <p>Dateien: <a href="http://fsteeg.com/files/essay-polysemie.pdf">PDF</a>, <a href="http://fsteeg.com/files/essay-polysemie.zip">LaTeX</a></p> http://172.105.249.169:9000/notes/polysemie-zwischen-homonymie-und-generalitaethttp://172.105.249.169:9000/notes/polysemie-zwischen-homonymie-und-generalitaet Sun, 30 Dec 2007 00:00:01 +0000 linguisticsnlp It all rocks! The release of Leopard caused a little journey of thoughts around Java and Eclipse on the Mac for me, and I come to two pleasant conclusions: Leopard rocks, and alternatives rock, too. I guess the situation after the Leopard release was really a moment that acted as a catalyst for change. The lack of Java 6 and the fact that the Mac SWT is based on the deprecated Carbon API made the Mac seem like a non-optimal platform for Java development, although the new Java is much faster than the previous one, with noticeably improved application startup times. Then, basically within a few days, both a <a href="http://landonf.bikemonkey.org/code/macosx">Java 6 port to Mac OS</a> and a <a href="http://inside-swt.blogspot.com/2007/11/great-success.html">Cocoa implementation of SWT</a> have been started and made running. This is awesome! And I found <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209376">a way around the classloader issues</a> I had with our project setup. <p/> And that's only a few days after coming to the conclusion that the recent Ubuntu is actually a wonderful alternative for all the stuff I need for work, with a nice modern UI, complete hardware support without a single tweak (on my original MacBook) and great Java and Eclipse support. So now I have both: An awesome alternative free OS which is a great basis for work stuff, giving me a relaxed feeling of non-vendor-lock-in, independence and reliability as well as everything I need right now on my favourite OS with all that awesome stuff Leopard brings along, in particular Time Machine (which really changed my feeling toward my computer a lot, like, I started using Stickies again... lately, the only thing I really trusted was the versioned stuff in my Eclipse workspace), plus a real perspective with a Cocoa SWT and a FOSS Java 6 port. <p/> So all this recent Java and Eclipse stuff really rocks, and I haven't even mentioned Google's awesome new Java (<a href="http://code.google.com/android/what-is-android.html">all that's blue</a>) mobile application framework called 'Android', with its <a href="http://code.google.com/android/intro/hello-android.html">Eclipse-integrated SDK</a>, which will establish Java (and this is the Apache-licensed Harmony Java!) in an amazingly important market area, independent of any particular company, as it happened in other areas before (like different application servers or Eclipse). With both GPL and non-GPL-but-FOSS alternatives Java really seems to become ubiquitous, be it on the server, for mobile devices or cross-platform desktop applications, be it for free or for proprietary software, and be it as a language or as a platform <a href="http://jruby.codehaus.org/">for</a> <a href="http://www.scala-lang.org/">new</a> languages. http://172.105.249.169:9000/notes/it-all-rockshttp://172.105.249.169:9000/notes/it-all-rocks Tue, 30 Oct 2007 00:00:01 +0000 macjavaeclipse Sun please embrace Eclipse! Damn I really think Sun should somehow get over its denial of Eclipse and stop the confrontation. Eclipse for some is just the coolest thing happening to Java today, and Sun should really be supportive of this! I came to writing this because I realized that I probably couldn't have resisted getting a nice x86 workstation from Sun, trying Solaris and having top Java support. A perfect Java development machine! But wait! There is no Eclipse for Solaris! Damn! http://172.105.249.169:9000/notes/sun-please-embrace-eclipsehttp://172.105.249.169:9000/notes/sun-please-embrace-eclipse Wed, 24 Oct 2007 00:00:01 +0000 eclipse Wortsinndisambiguierung durch hierarchische Kontextabstraktion (Magisterarbeit, MA thesis) <i>Zusammenfassung:</i> <p/> Mehrdeutige Wörter existieren seit Beginn der menschlichen Schriftkultur. Wortsinndisambiguierung (WSD, engl. <i>word sense disambiguation</i>), der Prozess der Auflösung der Mehrdeutigkeit eines Wortes anhand seines Kontextes fällt Menschen leicht; maschinell ist dieser Prozess jedoch bislang nicht in vergleichbarer Form durchführbar. Dies ist letztendlich ein wesentlicher Grund dafür, dass Computer Sprache nicht verstehen können und macht so die WSD zu einem Kernproblem der Computerlinguistik. <p/> Der Mensch abstrahiert beim kognitiven Prozess der WSD von konkreten Kontexten der ambigen Wörter, vermutlich auf Grundlage eines ``einheitlichen Modus [...] der Informationsverarbeitung'' (Singer2002), mit dem Daten unterschiedlicher Herkunft (d.h. die verschiedenen Sinneswahrnehmungen) verarbeitet werden. Diese Verbindung aus domänenspezifischen Daten, die mit einem domänenübergreifenden Mechanismus verarbeitet werden, entspricht Prinzipien des maschinellen Lernens, dessen Datenbasis in der Sprachverarbeitung Korpora bilden. <p/> Diese Konzepte werden in der vorliegenden Arbeit mit hierarchischer <i>Belief Propagation</i> in Bäumen implementiert und auf Daten des British National Corpus (BNC) evaluiert. Die Bestandteile des Verfahrens werden modular in einer <i>Software Architecture for Language Engineering</i> (SALE) umgesetzt, um das WSD-Verfahren für unterschiedliche Anwendungen in der maschinellen Sprachverarbeitung zugänglich zu machen. Eine solche Umsetzung eröffnet zudem zahlreiche Möglichkeiten zur Weiterentwicklung des Verfahrens selbst sowie darüber hinaus, etwa durch die Nutzung einzelner Bestandteile des WSD-Verfahrens in anderen Zusammenhängen. <p/> Dateien: <a href="http://fsteeg.com/files/fsteeg-ma.pdf">PDF</a>, <a href="http://fsteeg.com/files/fsteeg-ma.zip">LaTeX</a>; 87 pages http://172.105.249.169:9000/notes/wortsinndisambiguierung-durch-hierarchische-kontextabstraktion-magisterarbeit-ma-thesishttp://172.105.249.169:9000/notes/wortsinndisambiguierung-durch-hierarchische-kontextabstraktion-magisterarbeit-ma-thesis Sun, 14 Oct 2007 00:00:01 +0000 reportwsdnlp Magisterarbeit, WSD, Tesla <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/10/14/magisterarbeit-wsd-tesla/">https://fsteeg.wordpress.com/2007/10/14/magisterarbeit-wsd-tesla/</a></small></p> <p/> Yay! My <span style="font-style:italic;">Magisterarbeit</span> (master's thesis) on <span style="font-style:italic;">Wortsinndisambiguierung durch hierarchische Kontextabstraktion</span> (word sense disambiguation by hierarchical context abstraction) is done and has been accepted. It deals with the task of automatic <span style="font-style:italic;">word sense disambiguation</span> (<a href="http://www.wsdbook.org/">WSD</a>) using corpus-based machine learning techniques and hierarchical bayesian networks (i.e. hierarchical <a href="http://en.wikipedia.org/wiki/Belief_propagation">belief propagation</a>, inspired by Jeff Hawkins' book <a href="http://www.onintelligence.org/"><span style="font-style:italic;">On Intelligence</span></a>). It uses the <a href="http://www.senseval.org/senseval3/">Senseval-3</a> <span style="font-style:italic;">english lexical sample task</span> <a href="http://www.senseval.org/senseval3/data.html">data</a> for training and evaluation (which contains parts of the British National Corpus, BNC). <p/> The representation of training samples, the feature computation and the classification step are implemented as separate <a href="http://www.spinfo.uni-koeln.de/tesla/trac/wiki/TeslaComponents">Tesla components</a> to allow experimental exchange of corpora, different ways of feature computation and evaluation of different classification algorithms. They also allow an integration of the WSD task and the actual application, which both will hopefully lead to a bright future of these and other components in <a href="http://www.spinfo.uni-koeln.de/tesla/trac">Tesla</a>. You can check out the complete <span style="font-style:italic;">Magisterarbeit</span> (in german language) as <a href="http://fsteeg.com/files/fsteeg-ma.pdf">PDF</a> and as <a href="http://fsteeg.com/files/fsteeg-ma.zip">zipped plain text</a> (LaTeX and GraphViz). http://172.105.249.169:9000/notes/magisterarbeit-wsd-teslahttp://172.105.249.169:9000/notes/magisterarbeit-wsd-tesla Sun, 14 Oct 2007 00:00:01 +0000 linguisticsnlpprogramming Linguistic DSLs with ANTLR <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/10/06/linguistic-dsls-with-antlr/">https://fsteeg.wordpress.com/2007/10/06/linguistic-dsls-with-antlr/</a></small></p> As an update to <a href="http://fgram.sourceforge.net/">our Functional Grammar project</a> I've added some experimental ANTLR v3 grammar files for <i>Functional Discourse Grammar</i> (<a href="https://lingweb.eva.mpg.de/linguipedia/index.php/Functional_Discourse_Grammar">FDG</a>) structures on the <i>Interpersonal</i> and <i>Representational Levels</i> and updated the project page (with some details in an updated version of our overview paper). For example, on the RL, it is possible to generate a parser in all sorts of programming languages (thanks to ANTLR v3), that will parse linguistic descriptions on the RL, such as the following serial verb construction in Jamaican Creole (<i>Im tek naif kot mi</i>, 'He cut me with a knife'): <pre> (p1:[ (Past e1:[ (f1:tek[ (x1:im(x1))Ag (x2:naif(x2))Inst ](f1)) (f2:kot[ (x1:im(x1))Ag (x3:mi(x3))Pat ](f2)) ](e1)) ](p1)) </pre> The grammar looks like this (naming is based on FDG terminology): <pre> pcontent : '(' OPERATOR? 'p' X ( ':' head '(' 'p' X ')' )* ')' FUNCTION? ; soaffairs : '(' OPERATOR? 'e' X ( ':' head '(' 'e' X ')' )* ')' FUNCTION? ; property : '(' OPERATOR? 'f' X ( ':' head '(' 'f' X ')' )* ')' FUNCTION? ; individual : '(' OPERATOR? 'x' X ( ':' head '(' 'x' X ')' )* ')' FUNCTION? ; location : '(' OPERATOR? 'l' X ( ':' head '(' 'l' X ')' )* ')' FUNCTION? ; time : '(' OPERATOR? 't' X ( ':' head '(' 't' X ')' )* ')' FUNCTION? ; head : LEMMA? ( '[' ( soaffairs | property | individual | location | time )* ']' ) ? ; </pre> And with the same short grammar it is basically possible to parse all valid RL representations. It's the same for IL structures. Such an approach makes sense for two reasons, I believe: <ol><li>It provides a way for linguists to define and use a real formal description language for linguistic structures on all linguistic levels, not the more common almost formal description languages which tend to differ in the details from paper to paper, even within one theory or framework </li><li>It might in the long run provide a way for detailed computational representation of linguistic knowledge in a domain-specific language (DSL) specialized for the descriptive linguist and such make detailed linguistic knowledge available for natural language processing</li></ol>On the practical side, where this could lead into as a next step could be creating a usable tool on the basis of the FDG grammar files, that would validate an entered structure against the grammar files and provide pretty-printed HTML output (with indices and stuff) of the structure. For integration reasons (e.g. with <a href="http://www.spinfo.uni-koeln.de/space/Forschung/Tesla">Tesla</a>) this would make sense as an Eclipse Plug-in (and as a small RCP-app for simplified usage as a validator only). Also, with <a href="http://wiki.eclipse.org/Provide_an_Eclipse_IDE_generation_environment_derived_from_a_language_grammar">some interesting stuff</a> going on around Eclipse and having ANTLR grammar files, this might be relativley easy to do even with some useful stuff like auto-complete and an outline view. http://172.105.249.169:9000/notes/linguistic-dsls-with-antlrhttp://172.105.249.169:9000/notes/linguistic-dsls-with-antlr Sat, 06 Oct 2007 00:00:01 +0000 releasedslfdglinguisticsnlp TopCoder Algorithm Competition Eclipse Plug-in <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/09/26/topcoder-algorithm-competition-eclipse-plug-in/">https://fsteeg.wordpress.com/2007/09/26/topcoder-algorithm-competition-eclipse-plug-in/</a></small></p> <p/> As the latest version of my little Eclipse Plug-in for TopCoder Algorithm Competitions which I made available here on my blog was a little outdated and buried in an older post, and since I just fixed a bug when running it on Windows I decided to make the recent version available from an update site. <p/> The plugin can now be installed from the update site at: <em><a style="color:#000000;margin:0;padding:0;" href="http://quui.com/updates">http://quui.com/updates</a></em> <p/> Usage: <ul> <li>Select a Java Project that is configured to use JUnit and uses the project folder for source and class files (can be set in the new Java Project Wizard).</li> <li>Select File -&gt; New... -&gt; Others -&gt; TopCoder -&gt; TopCoder Algorithm Solution, paste the problem statement and click finish.</li> </ul> The wizard will generate a solution stub and JUnit tests for the samples in the statement and will run these (so you can immediately re-run them with 'Run Last Launched'). The plug-in also contributes some cheat sheets with stuff I sometimes find useful to remember during a <a href="http://www.topcoder.com/tc">TopCoder Algorithm Competition</a>. http://172.105.249.169:9000/notes/topcoder-algorithm-competition-eclipse-plug-inhttp://172.105.249.169:9000/notes/topcoder-algorithm-competition-eclipse-plug-in Wed, 26 Sep 2007 00:00:01 +0000 algorithmseclipsejavaprogramming Suffix trees Eclipse Plug-in <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/09/26/suffix-trees-eclipse-plug-in/">https://fsteeg.wordpress.com/2007/09/26/suffix-trees-eclipse-plug-in/</a></small></p> <p/> I've made a small bugfix and am taking that occasion to blog about my little Eclipse Plug-in that automatically draws <a href="http://en.wikipedia.org/wiki/Suffix_tree">suffix trees</a> with <a href="http://www.graphviz.org/">Dot/Graphviz</a> for an entered text (in the context of the <a href="http://stnl.sourceforge.net/">Suffix Trees for Natural Language</a> project), which is installable from our update site at http://www.quui.com/updates. <br /><br /><img src="http://stnl.sourceforge.net/screenshot2.png"><br /><br />The usage for this is mostly for visualization of suffix trees, e.g. for teaching or publications. The plug-in supports word- and letter-based trees as well as reversed suffix trees ('prefix trees'). The tree can be exported in the dot format. To use the plug-in, after installing it via the update site, select Window -&gt; Show View -&gt; Suffix Trees for NL -&gt; Suffix Tree Visualization. http://172.105.249.169:9000/notes/suffix-trees-eclipse-plug-inhttp://172.105.249.169:9000/notes/suffix-trees-eclipse-plug-in Wed, 26 Sep 2007 00:00:01 +0000 algorithmseclipsegraphviz Plain-text, content-driven writing <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/07/28/plain-text-content-driven-writing/">https://fsteeg.wordpress.com/2007/07/28/plain-text-content-driven-writing/</a></small></p> <p/> I just got to share how happy I am with my (scientific) writing toolkit, which I would sum up as "plain-text, content-driven writing". It's plain text because I try to put as much <a href="http://www.pragmaticprogrammer.com/ppbook/extracts/rule_list.html">information in plain text</a> as possible. And using tools like LaTeX, Bibtex and <a href="http://www.graphviz.org/">Graphviz</a>, that is quite a lot. LaTeX does all the layouting of text, footnotes and stuff; it also has environments for tables, <a href="http://www.ctan.org/tex-archive/help/Catalogue/entries/barkom.html">bar charts</a>, <a href="http://www.ctan.org/tex-archive/macros/latex/contrib/algorithm2e/">algorithms</a>, glossaries, an index, <a href="http://www.ctan.org/tex-archive/macros/latex/contrib/listings/">source code</a>, <a href="http://www.ctan.org/tex-archive/fonts/tipa/">IPA signs</a>, and <a href="http://www.ctan.org/tex-archive/macros/latex/contrib/covington/">glossed examples</a>. Graphviz is excellent for all kinds of graphs, like trees or state machines. It also works quite well for UML <a href="http://wp.me/pwKJk-1H">class</a> and <a href="http://wp.me/pwKJk-1G">activity</a> diagrams. Both LaTeX and Graphviz are content-driven because when using them, you can focus on content and need not worry about layouting at all, leaving that to someone who knows how to do that well and fast (like, again, LaTeX, Bibtex and Graphviz). Then take this fully plain-text content and combine it with a <a href="http://subversion.tigris.org/">great versioning system</a>, add <a href="http://www.polarion.org/index.php?page=overview&amp;project=subversive">its integration</a> and <a href="http://wp.me/pwKJk-1L">Graphviz support</a> in your <a href="http://www.eclipse.org/">favourite IDE</a>, grab an <a href="http://www.uoregon.edu/%7Ekoch/texshop/">awesome LaTeX-Editor</a>, find a way to <a href="http://www.citeulike.org/">organize your literature</a> and you will, maybe, be as happy as I am. http://172.105.249.169:9000/notes/plain-text-content-driven-writinghttp://172.105.249.169:9000/notes/plain-text-content-driven-writing Sat, 28 Jul 2007 00:00:01 +0000 authoring Why I like Books <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/07/12/why-i-like-books/">https://fsteeg.wordpress.com/2007/07/12/why-i-like-books/</a></small></p> <p/> I realized I like technical books in spite of abundant material available online, because they help me to take time to learn something for which there is no immediate need to learn. I just realized this listening to the Java Posse, where someone said he wanted to learn Scala for a while but didn't find the time for it. I feel the same, and I know the reason for it in my case: there's no book yet, I remembered searching for one. Learning a new language just isn't a thing I do during some browsing in a break from work. I remember a few things I wouldn't have learned about without the according book, like:<br /><ul><li>Mastering Regular Expressions</li><li>Programming Ruby</li><li>Java Generics and Collections</li><li>The Definitive ANTLR Reference</li></ul>As all the books above are (or were, in the Pickaxe case) the first books available on the topic they cover, I guess the point I'm trying to make is how great it is that people write these kind of great books on topics yet uncovered. Oh, and one more thing, of course: I need a Scala book. Or, an <a href="http://www.scala-lang.org/docu/files/ScalaByExample.pdf">ebook</a> reader, maybe. http://172.105.249.169:9000/notes/why-i-like-bookshttp://172.105.249.169:9000/notes/why-i-like-books Thu, 12 Jul 2007 00:00:01 +0000 programming Graphviz in Eclipse <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/07/11/graphviz-in-eclipse/">https://fsteeg.wordpress.com/2007/07/11/graphviz-in-eclipse/</a></small></p> <p/> It is for things like this that I like Eclipse so much: I just love Graphviz, which has an awesome UI in its Mac OS implementation, but isn't maintained and uses an old version of DOT. When I saw the Windows version I was totally disappointed. Since I did some Graphviz-rendering in Eclipse before, I decided to pick up Wayne Beaton's <a href="http://www.eclipse.org/evangelism/samples/imageviewer/">Image Viewer</a> from the Eclipse Evangelism site and make it a Graphviz viewer. Now I have a multi-platform, open-source and up-to-date implementation that is on par (at least for the way I use it) with the best existing platform-specific solution, and it even has my favourite editor and versioning, etc. included (download it <a href="http://89.149.194.79/fsteeg/files/de.uni_koeln.spinfo.strings.plugin.dotviewer_1.1.5-3.2.jar">for Eclipse 3.2</a> or <a href="http://89.149.194.79/fsteeg/files/de.uni_koeln.spinfo.strings.plugin.dotviewer_1.1.5-3.3.jar">for Eclipse 3.3</a>). The Plugin adds a Graphviz View that will display a DOT file, listens to changes in DOT files in the workspace and exports as PNG and PDF. <p/> <img src="http://fsteeg.com/files/graphviz-view.png" alt="" /> <p/> On the Mac, you should use the latest, non-UI version of Graphviz, as it supports both the great Mac OS features as anti-aliasing of the edges in graphs (by using Quartz or something) as well as support for the latest DOT commands, such as ports for edges (which can be used e.g. for UML activity diagrams, like <a href="http://wp.me/pwKJk-1G">this</a>). http://172.105.249.169:9000/notes/graphviz-in-eclipsehttp://172.105.249.169:9000/notes/graphviz-in-eclipse Wed, 11 Jul 2007 00:00:01 +0000 eclipsegraphviz Great Books <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/07/10/great-books/">https://fsteeg.wordpress.com/2007/07/10/great-books/</a></small></p> <p/> <span class="blsp-spelling-error"> </span> <div></div> It's awesome how much great stuff is available on the net, yet I really like technical books, e.g. books on general programming topics: <div> <ul> <li><span style="font-style:italic;">The Pragmatic Programmer</span>: The most useful book on programming I know; this teaches the right attitude towards the profession and provides great tips that stick to the mind and therefore really help.</li> <li><span style="font-style:italic;">The Mythical Man-Month: Essays on Software Engineering:</span> A quite old collection of essays, aside from puzzling mentions of things like punchcards totally relevant until today. Famous for "No silver bullet".</li> <li><span style="font-style:italic;">Structure and Interpretation of Computer Programs (SICP)</span>: The functional style introduction to computer science, very interesting and with magicians on the cover and dedicated to the "spirit living inside the machine".</li> <li><span style="font-style:italic;">Concepts, Techniques, and Models of Computer Programming</span>: A very recent book on programming, not based on a single paradigm (as functional programming for the SICP), but explaining the different programming paradigms using Oz, a multi-paradigm programming language.</li> <li><span style="font-style:italic;">Refactoring</span>: The book on the programming technique originating from the Smalltalk scene, now commonly supported by Java IDEs.</li> <li><span style="font-style:italic;">Design Patterns</span>: The classic on trying to achieve higher reusability of object-oriented software components. Useful reference, uses code samples in Smalltalk and C++.</li> </ul> Then there are books on particular programming languages and topics, which sometimes are easy to use the wrong way, or hard to use the right way if only studied too superficially: <ul> <li><span style="font-style:italic;">Java Generics and Collections</span>: Really nice compact book on the details of Generics, the most relevant change to Java in its history. It explains how Generics can be used to implement design patterns. And it also is a great reference on the collection classes.</li> <li><span style="font-style:italic;">Mastering Regular Expressions</span>: Regular Expressions are unbelievably practical for certain things, and while the basics are really easy to get, it ain't that easy to really master them in a sense that you can craft the RegEx you need in a certain situation. This book teaches how, I think it's the only book dedicated exclusivly to regular expressions.</li> <li><span style="font-style:italic;">The Definitive ANTLR Reference</span>: <span style="font-style:italic;">Building Domain-Specific Languages:</span> Implementing domain-specific languages is awesome with ANTLR, this book and the ANTLRWorks IDE.</li> </ul> And some books that I like on language and computational linguistics, a field of extreme variety of different theories and approaches: <ul> <li><span style="font-style:italic;">The Cambridge Encyclopedia of Language</span>: Richly illustrated book presenting the phenomenon <span style="font-style:italic;">language</span> in its breadth.</li> <li><span style="font-style:italic;">The Linguistics Wars</span>: Great book about the history of linguistics, the paradigm changes and rivaling schools, evolving around Noam Chomsky, the "epic hero".</li> <li><span style="font-style:italic;">The Oxford Handbook of Computational Linguistics</span>: It's up-to-date, affordable and has a great cover, it's a great reference.</li> <li><span style="font-style:italic;">Word Sense Disambiguation: Algorithms and Applications</span>: This is Computational Linguistics at its best, theoretically sound, using formal notation, taking an empirical approach. It seems other volumes in that series are equally good.</li> </ul> </div> http://172.105.249.169:9000/notes/great-bookshttp://172.105.249.169:9000/notes/great-books Tue, 10 Jul 2007 00:00:01 +0000 nlpprogramming Accessing files in Jars <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/02/23/accessing-files-in-jars/">https://fsteeg.wordpress.com/2007/02/23/accessing-files-in-jars/</a></small></p> <p/> Just as a small note, as I was only hardly finding help on this anywhere: If you are trying to access files in a folder, which is bundled inside a Jar file and you try to access them as anyone would: by instantiating a File for the directory - via <code>getResource("directory/")</code> - and then getting all the files: it doesn't work, you can't access a folder in a Jar, you will have to iterate over all the JarEntries, and check for each if it is in the directory (or check its name), like this: <pre><code>JarFile jarFile = new JarFile(&quot;some.jar&quot;); Enumeration&lt;JarEntry&gt; entries = jarFile.entries(); while (entries.hasMoreElements()) { JarEntry e = entries.nextElement(); if (e.getName().endsWith(&quot;lst&quot;)) { InputStream inputStream = jarFile.getInputStream(e); Scanner s = new Scanner(inputStream); while (s.hasNextLine()) { String nextLine = s.nextLine(); //... } } }</code></pre> <p/> On the other hand, if you need to access only a single file, the way to go is using the <code>getResourceAsStream()</code> method in Class and reading the stream. http://172.105.249.169:9000/notes/accessing-files-in-jarshttp://172.105.249.169:9000/notes/accessing-files-in-jars Fri, 23 Feb 2007 00:00:01 +0000 java Mac Apps <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2007/02/17/mac-apps/">https://fsteeg.wordpress.com/2007/02/17/mac-apps/</a></small></p> <p/> Alright, while I love my Mac and all I have noticed a relative unstableness in the apps I regularly use, probably caused by the two major switches of OS 9 to OS X and from PPC to Intel recently. I think the only Mac app I'm using from the very beginning of being a Mac user (which is since about 1999) is the fabulous MacSOUP. So when I need an app for a task I do less often (like an FTP-client) I'm lost and can't remember what that app to use is. So I decided to compile this list, mainly as a note to myself, it may act as a check list for setting up a fresh system... I've added a [commercial]-tag on the apps that are commercial, the rest is either FOSS or Freeware. First section is internet-related stuff: <ul> <li><a href="http://home.snafu.de/stk/macsoup/">MacSOUP</a> for news, a very effective, nicely key-controllable offline newsreader [commercial]</li> <li><a href="http://www.mozilla-europe.org/de/products/firefox/">Firefox</a> for the Web; I used to hesitate using Firefox over <a href="http://www.apple.com/de/macosx/features/safari/">Safari</a> but since I discovered the Firefox <a href="http://del.icio.us/help/firefox/extension">delicious extension</a> the only reason to stick to Safari -- which was the command-number commands to post a link to delicious -- is gone... well Safari renders more nicely and has build-in RSS support but crashes and is slow too often on the other hand</li> <li><a href="http://webkit.org/">Webkit</a> actually makes Safari the way it should be: really fast and supporting all the sites that trouble standard Safari</li> <li><a href="http://colloquy.info/">Colloquy</a> is a great IRC client, but the constant notices and bouncing in the dock (which couldn't be turned off completely even with using <a href="http://colloquy.info/project/wiki/Documentation/TipsAndTricks/HiddenPreferences">hidden options</a>) are just too annoying for me, so I switched to <a href="http://xchataqua.sourceforge.net/">XChat Aqua</a>, which is a lot less Mac-like but quiet at least, and seems very stable</li> <li><a href="http://transmission.m0k.org/">Transmission</a> is a great BitTorrent-Client, looks just like the download window in Safari, very nice and Mac-like</li> <li><a href="http://cyberduck.ch/">Cyberduck</a> is my favorite FTP/SCP client</li> <li><a href="http://www.adiumx.com/">Adium</a> is a nice multi-protocol IM client, and <a href="http://www.skype.com/">Skype</a> is there, too</li> <li><a href="http://www.redstonesoftware.com/products/vine/server/vineosx/index.html">OSXvnc</a> seems to be my choice for a VNC server, I don't seem to have a client installed currently, but I remember there was one with a funny name... I remember: <a href="http://sourceforge.net/projects/cotvnc/">Chicken of the VNC</a> (almost as weird as MacSOUP)</li> <li>I used to like <a href="http://www.carracho.com/">Carracho</a>, and sometimes I liked <a href="http://www.haxial.com/products/kdx/">KDX</a> too...</li> <li>Apple <a href="http://www.apple.com/macosx/features/mail/">Mail</a> only very rarely gave me reasons to complain</li> </ul> Next, something like an office-section, nothing complete again, just my personal collection, as stated above: <ul> <li>TeTeX ('tetex') from <a href="http://www.macports.org/">MacPorts</a> with <a href="http://www.uoregon.edu/%7Ekoch/texshop/texshop.html">TeXShop</a> as an editor for Word Processing</li> <li><a href="http://bibdesk.sourceforge.net/">BibDesk</a> seems like a nice desktop Bibtex app, but I usually use <a href="http://www.citeulike.org/">CiteULike</a>; same goes for <a href="http://www.scifihifi.com/cocoalicious/">Cocoalicious</a> and <a href="http://del.icio.us/">Delicious</a></li> <li>The Mac OS port (with awesome anti-aliasing through Apple's Quartz) of <a href="http://www.pixelglow.com/graphviz/">GraphViz</a> for auto-generated graphs</li> <li><a href="http://www.omnigroup.com/applications/omnigraffle/">OmniGraffle</a> for manually created diagrams, also great for handouts and posters [commercial]</li> <li><a href="http://seashore.sourceforge.net/">Seashore</a> (kind of a Gimp port) for image processing, I sometimes still use <a href="http://www.lemkesoft.de/">GraphicConverter</a>, but less and less; and <a href="http://www.inkscape.org/">Inkscape</a> for SVG</li> <li><a href="http://www.neooffice.org/">NeoOffice</a> (an OpenOffice port) for opening OpenOffice/Word-files and for spreadsheets and presentations</li> <li><a href="http://www.eclipse.org/">Eclipse</a> as an IDE for anything and nothing in particular, well for Java and Ruby mostly, and as a general-purpose text editor, which it become with installed line wrap plugin (see <a href="http://89.149.194.79:3000/notes/programming/Plugins">plugins note</a>). Eclipse is surprisingly annoying on the Mac if you are working with the Windows version from time to time; it's slow and crashes, -- certainly, most of the times it just works and rocks, but it could do better. An interesting development is SWT on Swing, used in the <a href="http://eos.sourceforge.net/">Eclipse on Swing</a> project. It's still buggy on the Mac, but that infamous occasional seconds-lasting pause for popup menus in the Mac version of Eclipse (with the Carbon-SWT) isn't there with the Swing version. Same goes for <a href="http://simplygenius.com/geekblog/2005/08/22/1124720745359.html">running under GTK</a> with X11 (both for increased performance and bugs). The eclipse.ini need some additional stuff like: -Xms40m -Xmx1024m -XX:MaxPermSize=128m</li> <li><a href="http://www.barebones.com/products/textwrangler/">TextWrangler</a> for the occasional look into some weird large file etc, most people seem to prefer <a href="http://macromates.com/">TextMate</a> as a small stand-alone editor [commercial]</li> <li><a href="http://iterm.sourceforge.net/">iTerm</a> as a tabbed terminal app</li> <li><a href="http://www.pgadmin.org/">pgAdmin</a> is a nice frontend for Postgres (which I <a href="http://developer.apple.com/internet/opensource/postgres.html">usually compile</a>), which never ever misbehaved</li> <li><a href="http://www.mamp.info/">MAMP</a> is my choice for an all-in-one web-dev package, it worked better for me with the new Intel machines than <a href="http://www.apachefriends.org/">XAMPP</a> (which wouldn't work with mod_rewrite support)</li> </ul> Then, lets call it media-related apps: <ul> <li><a href="http://www.apple.com/itunes/download/">iTunes</a> rocked ever since it was introduced (except for when it deleted your entire music collection)</li> <li><a href="http://www.rogueamoeba.com/audiohijackpro/">Audio Hijack Pro</a> is a great tool for capturing the output of a particular app, like for recording streamed audio [commercial]</li> <li><a href="http://www.elgato.com/index.php?file=products_whatiseyetv">EyeTV</a> is a great app for watching DVB-T and for editing and exporting, eg. for burning with <a href="http://www.roxio.com/enu/products/toast/titanium/overview.html">Toast</a> [both commercial]</li> <li><a href="http://handbrake.m0k.org/">HandBrake</a> is a DVD-Ripper (with one of those nice names again, a propos: an option here is <a href="http://www.mactheripper.org/">MacTheRipper</a>)</li> <li><a href="http://earth.google.de/download-earth.html">Google Earth</a> and <a href="http://maps.google.de/">Google Maps</a> for maps and satellite images</li> </ul> And finally system utils and stuff like that: <ul> <li><a href="http://www.manytricks.com/witch/">Witch</a> is the missing functionality for switching windows of an app, and is much more useful than Expose, IMO</li> <li>For the times I'm annoyed by the Finder, I use <a href="http://www.apple.com/downloads/macosx/system_disk_utilities/xfolders.html">XFolders</a> (GUI) or MC ('mc') via MacPorts (Terminal)</li> <li><a href="http://www.parallels.com/en/products/workstation/mac/">Parallels</a>, using the <a href="http://www.apple.com/macosx/bootcamp/">Bootcamp</a>-Partition gives a nice, flexible multi-OS system</li> <li><a href="http://www.derlien.com/">Disk Inventory X</a> shows disk usage, not sure how useful the app is yet, seems like I've settled with Finder+du/df in the terminal</li> <li>The most useful backup app seems to be <a href="http://www.bombich.com/software/ccc.html">Carbon Copy Cloner</a> for bootable backups (with installed psync also supports incremental backups); I also used <a href="http://www.owlfish.com/software/utils/RSyncBackup/">rsyncbackup</a> sometimes</li> <li><a href="http://www.maintain.se/cocktail/">Cocktail</a> is my choice as a frontend for admin tasks; <a href="http://krugazor.free.fr/software/desinstaller/DesInstaller.php">DesInstaller</a> lets you pick installed OS X installer packages to uninstall;</li> <li><a href="http://www.murderthoughts.com/software/">Damage Isolation</a> lets you mount iso-image-files; <a href="http://chmox.sourceforge.net/">CHMox</a> lets you open Windows help system files on your Mac</li> <li><a href="http://www.prosoftengineering.com/products/data_rescue_info.php">Data Rescue</a> was the most useful of its kind when I needed a tool for restoring data from a broken drive</li> <li><a href="http://hornware.com/sharepoints/">SharePoints</a> lets you share locations outside of home like other drives etc. via AppleShare (like you could before)</li> <li><a href="http://quicksilver.blacktree.com/">Quicksilver</a> is an interesting and useful app to access the content of your Mac; I never really got into it, but I suspect I should, so I list it here</li> <li><a href="http://kristopherjohnson.blogspot.com/2004/11/rouser-10-release.html">Rouser</a> is a small alarm clock, something I needed often when I didn't have it and never needed since I've got it...</li> <li><a href="http://www.lorax.com/FreeStuff/TextExtras.html">TextExtras</a> add stuff like Subscript to all Cocoa apps</li> <li><a href="http://www.unsanity.com/haxies/cleardock">ClearDock</a> clears or modifies the dock in other ways</li> <li><a href="http://www.unsanity.com/haxies/shapeshifter">ShapeShifter</a> allows for twaeing the entire UI, e.g. to make OS X look the way it should have with <a href="http://www.geocities.com/gershwix/">Gershwix</a></li> </ul> That should be it, I guess I'll keep this note updated to have an up-to-date resource for my personal choice of essential Mac apps. http://172.105.249.169:9000/notes/mac-appshttp://172.105.249.169:9000/notes/mac-apps Sat, 17 Feb 2007 00:00:01 +0000 authoringprogramming Computerlinguistische Hausarbeiten (coursework) <i>Zusammenfassung:</i> Dies ist eine Zusammenstellung meiner Hausarbeiten in den Fächern <i>Sprachliche Informationsverarbeitung</i> und <i>Allgemeine Sprachwissenschaft</i>, erstellt zwischen 2002 und 2007 im Rahmen eines Magisterstudiums an der Philosophischen Fakultät der Universität zu Köln. <p/> Dateien: <a href="http://fsteeg.com/files/fsteeg-ha.pdf">PDF</a>, <a href="http://fsteeg.com/files/fsteeg-ha.zip">LaTeX</a>; 92 pages http://172.105.249.169:9000/notes/computerlinguistische-hausarbeiten-courseworkhttp://172.105.249.169:9000/notes/computerlinguistische-hausarbeiten-coursework Mon, 12 Feb 2007 00:00:01 +0000 reportnlp Datentypen Diagramm zur Veranschaulichung der Verdopplung grundlegender Datentypen in Java:<br><br> <a href="http://fsteeg.com/images/2006-11-29_java_Datentypen.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-11-29_java_Datentypen.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-11-29_java_Datentypen.dot -o 2006-11-29_java_Datentypen.svg */ digraph{ rankdir=LR node[shape=box] edge[dir=back] datentyp[label="Datentyp" style=dashed] einfach[label="einfacher\nDatentyp" style=dashed] referenz[label="Referenztyp" style=dashed] boolean[style=filled] numerisch[label="numerischer\nTyp" style=dashed] integer[label="ganzzahliger\nTyp" style=dashed] gleitpunkt[label="Gleitpunkt\nTyp" style=dashed] char[style=filled] byte[style=filled] short[style=filled] int[style=filled] float[style=filled] double[style=filled] long[style=filled] rnumeral[label="numerischer\nTyp", style=dashed] rganzzahl[label="ganzzahliger\nTyp", style=dashed] rgleitzahl[label="Gleitpunkt\nTyp", style=dashed] //array[label="z.B. new String[]\n{\"Ein\",\"Array\"}"] rfloat [label="Float" style=filled] rdouble [label="Double" style=filled] rzeichen [label="Character" style=filled] rboolean[label="Boolean" style=filled] rinteger[label="Integer" style=filled] rlong[label="Long" style=filled] rbyte[label="Byte" style=filled] rshort[label="Short" style=filled] datentyp->referenz subgraph cluster_big { label=Objekte; style=dashed rnumeral->rgleitzahl rgleitzahl->rfloat rgleitzahl->rdouble referenz->rnumeral rnumeral->rganzzahl rganzzahl->rinteger rganzzahl->rlong rganzzahl->rbyte rganzzahl->rshort rganzzahl -> rzeichen referenz->rboolean } datentyp->einfach subgraph cluster_small { label=Primitive; style=dashed einfach->boolean einfach->numerisch numerisch->integer numerisch->gleitpunkt integer->char integer->byte integer->short integer->int integer->long gleitpunkt->float gleitpunkt->double } } </code></pre> --> http://172.105.249.169:9000/notes/datentypenhttp://172.105.249.169:9000/notes/datentypen Wed, 29 Nov 2006 00:00:01 +0000 java UML Class Diagrams with GraphViz <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/11/17/uml-class-diagrams-with-graphviz/">https://fsteeg.wordpress.com/2006/11/17/uml-class-diagrams-with-graphviz/</a></small></p> Class diagrams can be created with GraphViz quite nicely: hierachical structure, reversed arrows, empty arrowtails and records as node shapes, pretty compliant. Code follows, rendered result below. <p/> <a href="http://fsteeg.com/images/2006-11-17_programming_UML-Class-Diagrams-with-GraphViz.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-11-17_programming_UML-Class-Diagrams-with-GraphViz.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-11-17_programming_UML-Class-Diagrams-with-GraphViz.dot -o 2006-11-17_programming_UML-Class-Diagrams-with-GraphViz.svg */ digraph hierarchy { node[shape=record,style=filled,fillcolor=grey95] edge[dir=back, arrowtail=empty] 2[label = "{AbstractSuffixTree|+ text\n+ root|...}"] 3[label = "{SimpleSuffixTree|...| + constructTree()\l...}"] 4[label = "{CompactSuffixTree|...| + compactNodes()\l...}"] 5[label = "{SuffixTreeNode|...|+ addSuffix(...)\l...}"] 6[label = "{SuffixTreeEdge|...|+ compactLabel(...)\l...}"] 2->3 2->4 5->5[constraint=false, arrowtail=odiamond] 4->3[constraint=false, arrowtail=odiamond] 2->5[constraint=false, arrowtail=odiamond] 5->6[arrowtail=odiamond] } </code></pre> --> <p/> <PRE>digraph hierarchy { size="5,5" node[shape=record,style=filled,fillcolor=ivory] edge[dir=back, arrowtail=empty] 2[label = "{AbstractSuffixTree|+ text\n+ root|...}"] 3[label = "{SimpleSuffixTree|...| + constructTree()\l...}"] 4[label = "{CompactSuffixTree|...| + compactNodes()\l...}"] 5[label = "{SuffixTreeNode|...|+ addSuffix(...)\l...}"] 6[label = "{SuffixTreeEdge|...|+ compactLabel(...)\l...}"] 2->3 2->4 5->5[constraint=false, arrowtail=odiamond] 4->3[constraint=false, arrowtail=odiamond] 2->5[constraint=false, arrowtail=odiamond] 5->6[arrowtail=odiamond] } </PRE> http://172.105.249.169:9000/notes/uml-class-diagrams-with-graphvizhttp://172.105.249.169:9000/notes/uml-class-diagrams-with-graphviz Fri, 17 Nov 2006 00:00:01 +0000 programming UML Activity Diagrams with GraphViz <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/11/16/uml-activity-diagrams-with-graphviz/">https://fsteeg.wordpress.com/2006/11/16/uml-activity-diagrams-with-graphviz/</a></small></p> Activity diagrams are somewhat doable with GraphViz, they just don't look very nice, some straight edges would be nice. And especially, only new versions of GraphViz support that tailport thing... code and rendered result below. <a href="http://fsteeg.com/images/2006-11-17_programming_UML-Activity-Diagrams-with-GraphViz.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-11-17_programming_UML-Activity-Diagrams-with-GraphViz.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-11-17_programming_UML-Activity-Diagrams-with-GraphViz.dot -o 2006-11-17_programming_UML-Activity-Diagrams-with-GraphViz.svg */ digraph untitled { rankdir=TD edge[fontsize="11" arrowhead=open] start[shape=circle, label="", style=filled] end[shape=doublecircle, label="", style=filled] action1[shape=box,style=rounded, label="action"] action2[shape=box,style=rounded, label="action"] action3[shape=box,style=rounded, label="action"] if1[shape=diamond, label="decision"] if2[shape=diamond, label="decision"] start-> action1 action1->if1[headport=n] if1-> action2[label="condition" tailport=w] if1-> action3[taillabel="condition" labeldistance=2.5 tailport=e] action2->if2[headport=w] action3->if2[headport=e] if2->end[taillabel="condition"] } </code></pre> --> <p> </p><pre>digraph untitled {<br> rankdir=TD<br> size="4,4"<br> edge[fontsize="11" arrowhead=open]<br> start[shape=circle, label="", style=filled]<br> end[shape=doublecircle, label="", style=filled]<br> action1[shape=box,style=rounded, label="action"]<br> action2[shape=box,style=rounded, label="action"]<br> action3[shape=box,style=rounded, label="action"]<br> if1[shape=diamond, label="decision"]<br> if2[shape=diamond, label="decision"]<br> start-> action1<br> action1->if1[headport=n]<br> if1-> action2[label="condition" tailport=w]<br> if1-> action3[taillabel="condition" labeldistance=2.5 tailport=e]<br> action2->if2[headport=w]<br> action3->if2[headport=e]<br> if2->end[taillabel="condition"]<br>}<br></pre> http://172.105.249.169:9000/notes/uml-activity-diagrams-with-graphvizhttp://172.105.249.169:9000/notes/uml-activity-diagrams-with-graphviz Fri, 17 Nov 2006 00:00:01 +0000 programming Matz I heard a talk by Matz on a podcast yesterday, which was great. His english isn't very good, so weird keywords like "elsif" now make sense to me. However, he used one interesting construction twice, saying Ruby is "very quick to try". Another thing I liked was his "tri-lingual" (Ruby, Perl, Python) Hello-World: "Hello World". http://172.105.249.169:9000/notes/matzhttp://172.105.249.169:9000/notes/matz Tue, 14 Nov 2006 00:00:01 +0000 linguistics Trees <a href="http://fsteeg.com/images/2006-11-13_studies_Trees.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-11-13_studies_Trees.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-11-13_studies_Trees.dot -o 2006-11-13_studies_Trees.svg */ digraph{ rankdir=LR node[shape=box] one[style=dashed label=""] two[style=dashed label=""] I[style=filled fillcolor=gray] like[style=filled fillcolor=gray] trees[style=filled fillcolor=gray] one->I one->two two->like two->trees } </code></pre> --> http://172.105.249.169:9000/notes/treeshttp://172.105.249.169:9000/notes/trees Mon, 13 Nov 2006 00:00:01 +0000 studies Geography <table border="0" cellpadding="4" cellspacing="0"> <tbody><tr bgcolor="#f0f0f0"><td>Title</td><td>Content</td><td>LaTex</td></tr><tr><td><a href="http://fsteeg.com/files/relief-namibia.pdf">Reliefgenese in Nordwestnamibia</a></td><td>On the development of the 'Great Escarpment' in Namibia, german</td><td>two bibliographies; <a href="http://fsteeg.com/files/relief-namibia.zip">all</a>, <a href="http://fsteeg.com/files/relief-namibia.tex">just the tex file (koma-script)</a>; modified bibtex style for <a href="http://fsteeg.com/files/LandPMod.bst">"&" instead of "and"</a>, and for <span class="nobr"><a href="http://fsteeg.com/files/LandPModMod.bst">capitalized author names<br></a></span></td></tr><tr><td><a href="http://fsteeg.com/files/geo-terrassen-protokoll.pdf.zip">Terrassenlandschaft</a></td><td>Excursion report: a river terrace landscape, german</td><td><a href="http://fsteeg.com/files/geo-terrassen-protokoll.tex">default (article)</a></td></tr><tr><td><a href="http://fsteeg.com/files/geo-zok-ha.pdf">Zentrale-Orte-Konzept</a></td><td>The central-place-theory in land use planning in germany, german</td><td>--</td></tr></tbody> </table> http://172.105.249.169:9000/notes/geographyhttp://172.105.249.169:9000/notes/geography Sun, 12 Nov 2006 00:00:01 +0000 studies General-Linguistics <table border="0" cellpadding="4" cellspacing="0"> <tbody><tr bgcolor="#f0f0f0"><td>Title</td><td>Content</td><td>LaTex</td></tr><tr><td><a href="http://fsteeg.com/files/asw-kp-ha.pdf">Strukturell-Funktionale Analyse Komplexer Praedikate im Patwa <br></a></td><td>Adv. coursework: Complex predicates in Patwa in Functional Grammar and Functional Discourse Grammar (german)</td><td><a href="http://fsteeg.com/files/asw-kp-ha.zip">covington for glossed examples and trees; tables</a> </td></tr><tr><td><a href="http://fsteeg.com/files/corpus-linguistics.pdf">Eine kurze Einfuehrung in die Korpuslinguistik</a></td><td>Handout for a presentation: A short introduction to corpus linguistics (german)</td><td><a href="http://fsteeg.com/files/corpus-linguistics.zip">twopage, header and footer, modified margin</a> </td></tr><tr><td><a href="http://fsteeg.com/files/asw-tm-ha.pdf">Functional Grammar</a></td><td>Basic coursework: An overwie of the theory of Functional Grammar by Simon C. Dik, (german)</td><td><a href="http://fsteeg.com/files/asw-tm-ha.tex">download</a></td></tr></tbody> </table> http://172.105.249.169:9000/notes/general-linguisticshttp://172.105.249.169:9000/notes/general-linguistics Sun, 12 Nov 2006 00:00:01 +0000 studies Basic stuff <table border="0" cellpadding="4" cellspacing="0"> <tbody><tr bgcolor="#f0f0f0"><td>Title</td><td>Content</td><td>LaTex</td></tr><tr><td>HMMs for POS-Tagging</td><td>Adv. coursework: An experimental implementation of a statistical Part-of-Speech-Tagger based on Hidden-Markov-Models, <a href="http://fsteeg.com/files/spinfo-hmm-sources.zip">download</a></td><td>--</td></tr><tr><td><a href="http://fsteeg.com/files/spinfo-sengy-globdok.pdf">Crawler-Indexer Suchmaschine</a></td><td>Basic coursework: A crawler-indexer search engine, in german, <span class="nobr"><a href="http://fsteeg.com/files/spinfo-sengy-sources.zip">Impl, code<br></a></span></td><td>--</td></tr><tr><td><a href="http://fsteeg.com/files/spinfo-ie-ha.pdf">Informationsextraktion</a></td><td>Basic coursework: An overview of information extraction; with structured output and through text summarization, in german.</td><td><a href="http://fsteeg.com/files/spinfo-ie-ha.tex">generated by LyX</a></td></tr></tbody></table> http://172.105.249.169:9000/notes/basic-stuffhttp://172.105.249.169:9000/notes/basic-stuff Sun, 12 Nov 2006 00:00:01 +0000 studies Complexity After having failed on it in the actual match miserably, here are three solutions, each with improved runtime behaviour: (Problem: http://www.topcoder.com/stat?c=problem_statement&pm=6680&rd=10005&rm=250175&cr=10496944). <pre>// simple recursive solution<br>public class RGBStreet {<br> private String[] houses;<br> public int estimateCost(String[] houses) {<br> this.houses = houses;<br> int rec = rec(0, -1);<br> return rec;<br> }<br> int rec(int index, int last) {<br> if (index == houses.length) {<br> return 0;<br> }<br> int min = Integer.MAX_VALUE;<br> for (int i = 0; i < 3; i++) {<br> if (last != i) {<br> min = Math.min(min, rec(index + 1, i) + cost(index, i));<br> }<br> }<br> return min;<br> }<br> private int cost(int index, int i) {<br> return Integer.parseInt(houses[index].split(" ")[i]);<br> }<br>}<br></pre> <pre>// memoized recursive solution<br>public class RGBStreet {<br> private String[] houses;<br> // memoization table<br> int[][] best;<br> public int estimateCost(String[] houses) {<br> this.houses = houses;<br> // initialize the memoization table<br> best = new int[3][houses.length];<br> for (int i = 0; i < best.length; i++) {<br> Arrays.fill(best[i], Integer.MAX_VALUE);<br> }<br> int rec = rec(0, -1);<br> return rec;<br> }<br> int rec(int index, int last) {<br> // we are done:<br> if (index == houses.length) {<br> return 0;<br> }<br> // we found an optimal solution for painting the current house, given<br> // the previous color before:<br> if (last != -1 && best[last][index] < Integer.MAX_VALUE)<br> return best[last][index];<br> // search the best solution for every allowed color for the rest:<br> int min = Integer.MAX_VALUE;<br> for (int i = 0; i < 3; i++) {<br> if (last != i) {<br> min = Math.min(min, rec(index + 1, i) + cost(index, i));<br> }<br> }<br> // memoize the solution found:<br> if (last != -1)<br> best[last][index] = min;<br> return min;<br> }<br> private int cost(int index, int i) {<br> return Integer.parseInt(houses[index].split(" ")[i]);<br> }<br>}<br></pre> <pre>// dynamic programming solution<br>public class RGBStreet {<br> public int estimateCost(String[] houses) {<br> int[][] matrix = new int[3][houses.length];<br> for (int i = 0; i < matrix.length; i++) {<br> Arrays.fill(matrix[i], Integer.MAX_VALUE);<br> matrix[i][0] = Integer.parseInt(houses[0].split(" ")[i]);<br> }<br> for (int i = 1; i < houses.length; i++) {<br> for (int j = 0; j < 3; j++) {<br> for (int k = 0; k < 3; k++) {<br> if (k != j) {<br> int cost = Integer.parseInt(houses[i].split(" ")[k]);<br> int recentValue = matrix[k][i];<br> int newValue = matrix[j][i - 1] + cost;<br> matrix[k][i] = Math.min(recentValue, newValue);<br> }<br> }<br> }<br> }<br> return Math.min(Math.min(matrix[0][houses.length - 1],<br> matrix[1][houses.length - 1]), matrix[2][houses.length - 1]);<br> }<br>}<br></pre> http://172.105.249.169:9000/notes/complexityhttp://172.105.249.169:9000/notes/complexity Fri, 10 Nov 2006 00:00:01 +0000 algorithms Bastian Sick Ich sags ja: Bastian Sick (Zwiebelfisch, Der Dativ ist dem Genitiv sein Tod) ist voll auf dem falschen Dampfer, was die Frage angeht, wie Sprache funktioniert: Ich hab gerade im Fernsehen gesehen wie er sagte, man solle doch bitte <span style="font-style: italic;">einander</span> benutzen, nicht immer <span style="font-style: italic;">sich</span>, weil das doch was anderes heisse, bei <span style="font-style: italic;">Sie liebten einander</span> naemlich dass sie nicht sich selbst liebten, sondern dass es sich z.B. um ein Liebespaar handelt, die <span style="font-style: italic;">sich</span> lieben... In einem einzigen Satz eine Regel aufgestellt und selbst gebrochen! Nicht schlecht!<br><br>Nachtrag 17. Februar 2007: Wo ich das hier gerade sehe, dazu habe gestern was nettes im Radio gehoert, das hat sich ein Kommentator auch ueber diese schulmeisterhaften Forderungen und meinte, dass diese eigentuemlichen, veralteten Ausdruecke ja gerade deshalb als schoen empfunden werden, weil sie veraltet und ungewoehnlich sind.<br> http://172.105.249.169:9000/notes/bastian-sickhttp://172.105.249.169:9000/notes/bastian-sick Sun, 05 Nov 2006 00:00:01 +0000 linguistics Eclipse rocks completely! It is for something like this why Eclipse rocks so: I just love GraphViz, which has an awesome UI in its Mac OS implementation. When I saw the Windows version I was totally disappointed. Since I did some GraphViz-rendering in Eclipse before, I decided to pick up Wayne Beaton's Image Viewer from the Eclipse Evangelism site and add the rendering of GraphViz files to it. Now I have a multi-platform, open-source implementation that is on par with the best existing platform-specific solution, and it even has my favourite editor and versioning, etc. included.<br> http://172.105.249.169:9000/notes/eclipse-rocks-completelyhttp://172.105.249.169:9000/notes/eclipse-rocks-completely Fri, 03 Nov 2006 00:00:01 +0000 eclipse Konzept <a href="http://fsteeg.com/images/2006-11-02_int-sys_Konzept.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-11-02_int-sys_Konzept.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-11-02_int-sys_Konzept.dot -o 2006-11-02_int-sys_Konzept.svg */ digraph ml{ node[shape=box] texts[label="Verschlagwortete\nTexte (z.B. aus Web)"] bootstrapping[label="Lernen (Ermittlung\nvon Konstituenten)"] knowledge[label="Wissen (Mapping\nvon Konstituenten\nauf Schlagworte)"] apply[label="Anwenden (neue\nTexte verschlagworten)"] texts->bootstrapping bootstrapping->knowledge knowledge->apply apply->texts[style=dotted] } </code></pre> --> http://172.105.249.169:9000/notes/konzepthttp://172.105.249.169:9000/notes/konzept Thu, 02 Nov 2006 00:00:01 +0000 intsys Literale <a href="http://fsteeg.com/images/2006-11-01_java_Literale.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-11-01_java_Literale.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-11-01_java_Literale.dot -o 2006-11-01_java_Literale.svg */ digraph literale { node[style=filled, shape=box, fillcolor="#F0F0F0"] edge[dir=back, arrowtail=empty] literal[label="Literal", style=dashed] numeral[label="Numeral", style=dashed] wahrheit[label="Wahrheitswert-\nLiteral", style=dashed] ganzzahl[label="Ganzzahliges\nNumeral", style=dashed] gleitzahl[label="Gleitkomma\nNumeral", style=dashed] alphanumerisch[label="Alphanumerisches\nLiteral", style=dashed] //array[label="z.B. new String[]\n{\"Ein\",\"Array\"}"] float [label="12.6F, .6F\n(Float)"] double [label="12.5, .6\n(Double)"] text [label="\"Hallo\", \"1 2 3\"\n(String)"] zeichen [label="'a', '9'\n(Character)"] boolean[label="true, false\n(Boolean)"] integer[label="12, 45\n(Integer)"] long[label="12L, 56L\n(Long)"] literal->numeral numeral->ganzzahl numeral->gleitzahl gleitzahl->float gleitzahl->double ganzzahl->integer ganzzahl->long literal->alphanumerisch alphanumerisch->text alphanumerisch->zeichen literal->wahrheit->boolean } </code></pre> --> <p> </p><pre>// Numerale, ganzzahlig: Integer i = 12; // 32 bit (4 byte) Long l = 12L; // 64 bit (8 byte) // Numerale, Dezimalzahlen: Float f = 12.5F; // 32 bit (4 byte) Double d = 12.5; // 64 bit (8 byte) // Literale, alphanumerisch: Character c = '7'; // ein Zeichen String s = "Hallo 1 2 3"; // Zeichenkette // Wahrheitswert-Literal Boolean b = true; // true oder false </pre> http://172.105.249.169:9000/notes/literalehttp://172.105.249.169:9000/notes/literale Wed, 01 Nov 2006 00:00:01 +0000 java JET JET (Java Emitter Templates) ist ein Framework zur Code-Generierung. Es verwendet eine Untermenge von JSP zur Beschreibung des zu generierenden Textes. Es ermoeglicht damit das Schreiben des zu generierenden Textes unter Einsetzung von Java-Aufrufen und Verwendung von Java-Anweisungen (wie bei JSPs).<br><br>Das Vorgehen ist dabei zweistufig: Erst wird aus dem Template eine Klasse generiert. Diese kann als API verwendet werden und generiert das Ergebnis (in unserem Fall auch eine Java-Klasse).<br><br>Die Verwendung ist in Eclipse (JET ist Teil von EMF) integriert (das Template wird automatisch uebersetzt). Die Moeglichkeiten zur Anpassung sind sehr weitgehend: Sie reichen von Aenderungen der Template-Syntax ueber Anpassung der generierten Generator-Klasse bis zum Schreiben und Uebersetzen von Templates zur Laufzeit.<br><br> <a href="http://fsteeg.com/images/2006-10-29_tesla_JET.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-10-29_tesla_JET.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-10-29_tesla_JET.dot -o 2006-10-29_tesla_JET.svg */ digraph{ rankdir=LR node[shape=box] Template[label="Template\n(JSP-Syntax)"] Implementor[label="Template Implementor\n(Java Generator Class)"] Result[label="Generierter Code\n(hier: Java-Klasse)"] Template->Implementor[label="via IDE o. API"] Implementor->Result[label="via API"] } </code></pre> --> <p/> Links<br><ul><li>http://www.eclipse.org/articles/Article-JET/jet_tutorial1.html</li><li>http://www.eclipse.org/articles/Article-JET2/jet_tutorial2.html<br></li></ul> http://172.105.249.169:9000/notes/jethttp://172.105.249.169:9000/notes/jet Sun, 29 Oct 2006 00:00:01 +0000 tesla Perlis "I think that it's extraordinarily important that we in computer science keep fun in computing. When it started out, it was an awful lot of fun. Of course, the paying customers got shafted every now and then, and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful, error-free perfect use of these machines. I don't think we are. I think we're responsible for stretching them, setting them off in new directions, and keeping fun in the house." -- ''Alan J. Perlis (1922-1990, Recipient of the first Turing Award in 1966)'' http://172.105.249.169:9000/notes/perlishttp://172.105.249.169:9000/notes/perlis Fri, 20 Oct 2006 00:00:01 +0000 quotes Ruby Rails is a Framework for Web-Development on the Java VM. Because, as there is an implementation of the Ruby compiler in Java, Ruby is a scripting language for the Java VM.<br> http://172.105.249.169:9000/notes/rubyhttp://172.105.249.169:9000/notes/ruby Mon, 09 Oct 2006 00:00:01 +0000 programming Ockham The DRY-Principle is a subset of Ockham's razor. DRY can't replace it: The razor also forbids using something when it's not needed, which is not covered by DRY.<br> http://172.105.249.169:9000/notes/ockhamhttp://172.105.249.169:9000/notes/ockham Mon, 09 Oct 2006 00:00:01 +0000 programming Magicians "There are two kinds of geniuses: the 'ordinary' and the 'magicians'. An ordinary genius is a fellow whom you and I would be just as good as, if we were only many times better. There is no mystery as to how his mind works. Once we understand what they've done, we feel certain that we, too, could have done it. It is different with the magicians. Even after we understand what they have done it is completely dark. Richard Feynman is a magician of the highest calibre." -- ''Mark Kac'' http://172.105.249.169:9000/notes/magicianshttp://172.105.249.169:9000/notes/magicians Sun, 01 Oct 2006 00:00:01 +0000 trinilquotes Ajax Frameworks <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/09/23/ajax-frameworks/">https://fsteeg.wordpress.com/2006/09/23/ajax-frameworks/</a></small></p> <a href="http://fsteeg.com/images/2006-09-24_programming_Ajax-Frameworks.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-09-24_programming_Ajax-Frameworks.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-09-24_programming_Ajax-Frameworks.dot -o 2006-09-24_programming_Ajax-Frameworks.svg */ graph untitled { node[shape=box, style=filled] rankdir=TD ajax[label="Ajax\n",style=dashed] //json[label="JSON\n(JavaScript)"] jsonrpc[label="JSON-RPC\n(independent)"] dojo[label="Dojo\n(JavaScript)"] prototype[label="Prototype\n(JavaScript)"] scriptaculous[label="Scriptaculous\n(JavaScript)"] sajax[label="SAJAX\n(PHP, others)"] proxy[label="Proxy-based/ORB",style=dashed] dwr[label="DWR\n(Java)"] gen[label="Generation\nFrameworks",style=dashed] gwt[label="GWT\n(Java)"] helpers[label="Helper\nTags",style=dashed] rails[label="Rails\n(Ruby)"] jsrem[label="Request-based\nRemoting",style=dashed] rap[label="RAP\n(Java, planned)"] jsrem--helpers js[label="JavaScript\nLibraries", style=dashed] ajax--js helpers--rails ajax--gen gen--gwt gen--rap remoting--proxy proxy--jsonrpc proxy--dwr js--dojo js--scriptaculous remoting[label="Remoting\nFrameworks",style=dashed] //effects[label="Effects",style=dashed] proxy--sajax //effects--dojo //effects--scriptaculous remoting--jsrem jsrem--prototype jsrem--dojo //ajax--effects ajax--remoting //rails--prototype[style=dashed] //prototype --scriptaculous[style=dashed] //scriptaculous--rails[style=dashed] } </code></pre> --> <br><br>Fuer bestimmt serverseitige Sprachen gibt es Loesungen, die sich anbieten, etwa fuer Java GWT oder DWR, fuer Ruby Rails mit Prototype und Scriptaculous via Tag-Helpern, fuer PHP Sajax. Fuer alle anderen Varianten bietet sich eine Kombi aus den reinen JS-Frameworks fuer Remoting und Effekte (Dojo oder Prototype mit Scritaculous) und JSON (ein Standard, Implementierungen fuer alle wichtigen Sprachen) fuer ORB, wenn erwuenscht. Dojo ist ein umfangreiches Framework, mit aufwaendigen Widgets wie Baeumen und Editoren, das zudem (via Flash) ans lokale Filesystem kann... http://172.105.249.169:9000/notes/ajax-frameworkshttp://172.105.249.169:9000/notes/ajax-frameworks Sun, 24 Sep 2006 00:00:01 +0000 programming Linguistic Theories <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/09/21/linguistic-theories/">https://fsteeg.wordpress.com/2006/09/21/linguistic-theories/</a></small></p> My personal overview of linguistic theories: <a href="http://fsteeg.com/images/2006-09-22_linguistics_Linguistic-Theories.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-09-22_linguistics_Linguistic-Theories.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-09-22_linguistics_Linguistic-Theories.dot -o 2006-09-22_linguistics_Linguistic-Theories.svg */ digraph{ rankdir=TD node [shape=box,style=filled,fillcolor=white] //nodes theories[label="Linguistic Theories"] formal[label="Formal\n(Use formal rigor)"] cogling[label="Cognitive"] structuralism[label="Structural\n(Langauge is a relational\nsystem, free of semantics)"] fdg[label="Functional Dicourse\nGrammar\n(Hengeveld, Mackenzie)",fillcolor="#F0F0F0"] fg[label="Functional Grammar\n(Dik)"] sfg[label="Systemic Functional\nGrammar (Halliday)",fillcolor="#F0F0F0"] rrg[label="Role and Reference\nGrammar\n(Foley, Van Valin)",fillcolor="#F0F0F0"] sft[label="Structural-Functional\n(Term by Butler)"] gg[label="Generative Grammar\n(Chomsky, Jackendoff)"] uni[label="Unificational\nGrammars"] case[label="Case Grammar\n(Filmore)"] //gb[label="Government and Binding\nTheory (Chomsky)"] //mp[label="Minimalist Program\n(Chomsky)"] ot[label="Optimailty Theory\n(Prince, Smolensky,\nMcCarthy)",fillcolor="#F0F0F0"] lw[label="Linguistics Wars"] postgg[label="Post-Linguistic-Wars\nGenerative Grammar\n(Jackendoff)",fillcolor="#F0F0F0"] //patr2[label="PATRII",fillcolor="#F0F0F0"] hpsg[label="Head-Driven\nPhrase Structure\nGrammar (Pollard, Sag)",fillcolor="#F0F0F0"] lfg[label="Lexical Functional\nGrammar\n(Bresnan, Kaplan)",fillcolor="#F0F0F0"] cg[label="Cognitive Grammar\n(Langacker)",fillcolor="#F0F0F0"] conn[label="Connectionism\n(Neural Networks)",fillcolor="#F0F0F0"] construction[label="Construction Grammar\n(Filmore, Kay, Lakoff)"] descriptivism[label="Descriptivism\n(language documentation,\n Bloomfield)"] prague[label="Prague"] kopenhagen[label="Kopenhagen"] american[label="American"] martinet[label="Martinet"] distributionalism[label="Distributionalism\n(math-oriented, Harris)"] ft[label="Functional\n(Language is a tool\nwith a specific function)"] ic[label="Immediate Constituents\n(Bloomfield, Wells)"] //edges theories->formal formal->distributionalism formal->sft theories->ft->sft theories->cogling cogling->construction construction->cg cogling->conn sft->fg //linguisitc wars fg->lw case->lw gg->lw lw->fdg uni->postgg lw->uni lw->ot fg->fdg theories->structuralism structuralism->prague structuralism->kopenhagen structuralism->american american->descriptivism american->distributionalism descriptivism->ic->gg distributionalism->gg //gg->hpsg gg->uni gg->case //gg->postgg //gg->mp //gg->gb //construction->case //fg->case uni->hpsg uni->lfg // uni->patr2 //descriptivism->gg[label="Bloomfiled,\nWells (IC)"] ft->martinet sft->sfg sft->rrg } </code></pre> --> <p> </p> http://172.105.249.169:9000/notes/linguistic-theorieshttp://172.105.249.169:9000/notes/linguistic-theories Fri, 22 Sep 2006 00:00:01 +0000 linguistics Yay! <a href="http://fsteeg.com/images/2006-09-20_programming_Yay.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-09-20_programming_Yay.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-09-20_programming_Yay.dot -o 2006-09-20_programming_Yay.svg */ digraph{rankdir="LR" node [shape=box,style=filled,fillcolor=lightblue] Yay->Ajax->Rocks Yay->Dot->Rocks Yay->Rails->Rocks} </code></pre> --> http://172.105.249.169:9000/notes/yayhttp://172.105.249.169:9000/notes/yay Wed, 20 Sep 2006 00:00:01 +0000 programming Abstraction <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/09/13/abstraction/">https://fsteeg.wordpress.com/2006/09/13/abstraction/</a></small></p> <p/> Say we want to remove all multiple consecutive letters by a single one, i.e. for an input like <em>aaaccceeefff</em> (lowercase, sorted) we want an output like <em>acef</em>. There are conceptually different approaches to such a problem: <p/> RegEx-Solution:<pre><code>String regexRes = input.replaceAll(&quot;([a-z])\\1+&quot;, &quot;$1&quot;);</code></pre> <p/> Data-Structure-Solution:<pre><code>Set setRes = new TreeSet(); for (Character character : input.toCharArray()) { setRes.add(character); } StringBuilder builder = new StringBuilder(); for (Character character : setRes) { builder.append(character); } String dataRes = builder.toString();</code></pre> <p/> Parser solution:<pre><code>String compress(String input) { String res = &quot;&quot;; for (int i = 0; i &lt; input.length(); i++) { if (res.length() == 0 || res.charAt(res.length() - 1) != input.charAt(i)) res = res + input.charAt(i); } return res; }</code></pre> http://172.105.249.169:9000/notes/abstractionhttp://172.105.249.169:9000/notes/abstraction Wed, 13 Sep 2006 00:00:01 +0000 algorithmsprogramming TC TC is just like you'd imagine a competition to be that Harry, Ron and Hermoine would attend: "Spell a cast to flip a text" (<a href="http://www.topcoder.com/stat?c=problem_statement&pm=4639&rd=10094&rm=249634&cr=10496944">TCCC 2006 Qual. 2</a>). <p> <a href="http://fsteeg.com/images/2006-09-09_programming_TC.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-09-09_programming_TC.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-09-09_programming_TC.dot -o 2006-09-09_programming_TC.svg */ digraph{ rankdir="LR" node [shape=box,style=filled,fillcolor="#F0F0F0",font=fixed] a[label="ADG\nBEH\nCFI"] b[label="ABC\nDEF\nGHI"] a->b } </code></pre> --> </p> http://172.105.249.169:9000/notes/tchttp://172.105.249.169:9000/notes/tc Sat, 09 Sep 2006 00:00:01 +0000 programming Plugins The Eclipse-Plugins I find most useful. These are those not included in the Callisto (and I guess will not be in Europa, too, maybe Mylar will) release. So this is what I usually do: Install the Eclipse SDK, install the Callisto-Plugins from the included update site, and then add those below.<br><br>Update Sites (not linked because these URLs have to be pasted in Eclipse's update manager):<br><ul><li>http://ahtik.com/eclipse-update/ (Line wrap for Editors: make Eclipse a decent text editor)</li><li>http://antlreclipse.sourceforge.net/updates/ (ANTLR for Eclipse)</li><li>http://kurucz-grafika.de/fatjar (Fat Jar, this is so useful)</li><li>http://subclipse.tigris.org/update_1.2.x (Subclipse) or</li><li>http://www.polarion.org/projects/subversive/download/1.1/update-site/ (Subversive)<br></li><li>http://download.eclipse.org/technology/mylar/update-site/e3.2 (Mylar)</li><li>http://radrails.sourceforge.net/update (RadRails)</li><li>http://updatesite.rubypeople.org/release (Ruby Development Tools)</li><li>http://www.bastian-bergerhoff.com/eclipse/features (RegEx Tester)</li><li>http://www.maintainj.com/updates/1.0 (Generate sequence diagrams)</li><li>http://findbugs.cs.umd.edu/eclipse (Find Bugs in Java programs)<br></li></ul>Downloads (Plugins that need to be downloaded and placed in the plugins folder, or an a different extension location, which can be added through 'manage configuration'):<br><ul><li><a href="http://eclipse.ime.usp.br/projetos/grad/plugin-prolog/index.html">http://eclipse.ime.usp.br/projetos/grad/plugin-prolog/index.html</a> (Prolog editor and interpreter integration)<br></li><li><a href="http://fsteeg.com/files/tc-plugin-1.2.1.zip">http://fsteeg.com/files/tc-plugin-1.2.1.zip</a> (My TopCoder algorithm competition plugin)</li><li><a href="http://fsteeg.com/files/dotviewer-1.1.5.zip">http://fsteeg.com/files/dotviewer-1.1.5.zip</a> (My extension of Wayne Beatons's image viewer to view Dot/GraphViz files in Eclipse)</li><li><a href="http://fsteeg.com/files/trees-view.zip">http://fsteeg.com/files/trees-view.zip</a> (My suffix trees plugin, draws trees for input strings)<br></li></ul><br> http://172.105.249.169:9000/notes/pluginshttp://172.105.249.169:9000/notes/plugins Sun, 18 Jun 2006 00:00:01 +0000 eclipse SVC-Functions <a href="http://fsteeg.com/images/2006-05-30_linguistics_SVC-Functions.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-05-30_linguistics_SVC-Functions.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-05-30_linguistics_SVC-Functions.dot -o 2006-05-30_linguistics_SVC-Functions.svg */ digraph Boxes { rankdir=LR; node [shape=box,color="white"] Functions; locational; argument; aspectual; degree; Functions->locational; Functions->argument; Functions->aspectual; Functions->degree; go[fontname="Times-Italic"]; come[fontname="Times-Italic"]; surround[fontname="Times-Italic"]; be[fontname="Times-Italic"]; locational->go; locational->come; locational->surround; locational->be; give[fontname="Times-Italic"]; take[fontname="Times-Italic"]; say[fontname="Times-Italic"]; argument->give; argument->take; argument->say; finish[fontname="Times-Italic"]; return[fontname="Times-Italic"]; be[fontname="Times-Italic"]; aspectual->finish; aspectual->return; aspectual->be; pass[fontname="Times-Italic"]; suffice[fontname="Times-Italic"]; degree->pass; degree->suffice; direction_away[label="direction\naway"]; direction_torwards[label="direction\ntorwards"]; around; locative; go->direction_away; come->direction_torwards; surround->around; be->locative; benefactive; give->benefactive; dative; give->dative; instrumental; take->instrumental; comitative; object; take->comitative; take->object; finite_complementizer[label="finite\ncomplementizer"]; say->finite_complementizer; perfective; finish->perfective; iterative; return->iterative; continuative; be->continuative; comparative; pass->comparative; excessive; pass->excessive; enough; suffice->enough; } </code></pre> --> http://172.105.249.169:9000/notes/svc-functionshttp://172.105.249.169:9000/notes/svc-functions Tue, 30 May 2006 00:00:01 +0000 linguistics Licenses, Conclusion <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/05/17/licenses-conclusion/">https://fsteeg.wordpress.com/2006/05/17/licenses-conclusion/</a></small></p> <p/> Alright, there is the possibility of dual licensing GPL/commercial, but the problem can't actually be avoided with this: If someone contributes he has to donate copyright to you, which avoids larger contributions. Plain GPL is out of competition becuase it avoids any commercialization... no that's not really true, but it prevents usage in any closed-source context. The Apache license on the other hand allows for usage of contributed stuff and has a mechanism to regulate patents issues. And it's approved in real world usage through Projects like Apache, Ant, Tomcat, Lucene,... Alright, but with that, someone can take it, change it a bit, and sell it as closed source. With the LGPL, it can be used by commercial products, and a changed version can be used internally, but if a changed version is redistributed then the changes need to be made public under LGPL again. <p/> It actually seems the perfect solution in the middle between GPL and BSD-style... I mean there is something in what Stallman say about why to use GPL and not LGPL but why building up such a harsh distinction between free and proprietary developers, why not be both? I mean why not mod my own oss for a customer and sell that? Hm, could I do the same with GPL? But what if the customer doesn't want it to be oss, because they are concern about competitors or whatever, alrigth this could lead to a general debate on society and mankind, but that's where being pragmatic comes in I believe... Why not be more flexible and open to other ways, through using the LGPL, that is... I think if there was a LGPL-equal license thats not the ugly small sister I'd jump on it :D <p/> Alright so I made some of my stuff available under LGPL on Sourceforge: <ul> <li><a href="http://apes.sourceforge.net/">A Prolog Expert System using a DCG-parsed DSL for rules</a></li> <li><a href="http://hollala.sourceforge.net/">The Chatbot Hollala, The Ruby-scriptable IRC-Bot Hollaka</a></li> <li><a href="http://gram.sourceforge.net/">A modular Functional Grammar language generator using ANTLR</a></li> <li><a href="http://stnl.sourceforge.net/">Eclipse-Plugin und API for </a><a href="http://stnl.sourceforge.net/">Suffix Trees in NLP</a><a href="http://stnl.sourceforge.net/">, includes a GraphViz-Viewer for Eclipse</a></li> </ul> <p/> Why I use LGPL. Why not GPL? Because I try to be a pragmatic programmer, and therefor I prefer choice. Also, I don't think freedom can or should be enforced. Why not BSD-style? Because using LGPL I hope ensures that the project does not end fragmented. By using LGPL it is ensured that only one recent version is distributed. Also I hope it leads to an improvement of the projects. http://172.105.249.169:9000/notes/licenses-conclusionhttp://172.105.249.169:9000/notes/licenses-conclusion Wed, 17 May 2006 00:00:01 +0000 programming Apache License <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/05/17/apache-license/">https://fsteeg.wordpress.com/2006/05/17/apache-license/</a></small></p> <p/> From a Slashdot discussion:<br /><br /><blockquote>If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.<br /><br />I'm no lawyer, but this seems to be saying that if you sue anyone for breach of patent for something in apache, then you lose your patanet license?<br /><br />I'm no lawyer either, but the way I read is that there is software in Apache that is covered by patents, but the owners have given people who use Apache a licence to use them. However, if someone decides to sue over one of their patents in Apache, then they lose the licence from the other patent holders, posibly leaving them open to an infringment suit themselves.<br /><br />In short, is seems to say: you play nice, we'll play nice, and we'll all play with everyone's toys, but if you won't let someone play with your toys, then everyone else will gang up on you and not let you play with any of theirs either.</blockquote> http://172.105.249.169:9000/notes/apache-licensehttp://172.105.249.169:9000/notes/apache-license Wed, 17 May 2006 00:00:01 +0000 programming DSLs, Prolog, Ruby... <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/05/16/dsls-prolog-ruby/">https://fsteeg.wordpress.com/2006/05/16/dsls-prolog-ruby/</a></small></p> <p/> I had a short look at our Prolog expert system project today. Also I read some stuff about DSLs these days, and just realized that we had actually implemented an expert system DSL, which was processed in a sort of hybrid of the two ways to build DSLs: Using DCG-rules for parsing the mini language. This is sort of in the middle between what Martin Fowler calls internal and external DSLs. The format from Bratko was obviously an embedded DSL... That expert system also looks interesting as an addidtion to Hollala. With that DSL aspect even more so. Could I add Prolog to the mix and turn that thing into a Java/Ruby/Prolog app? Should I? http://172.105.249.169:9000/notes/dsls-prolog-rubyhttp://172.105.249.169:9000/notes/dsls-prolog-ruby Tue, 16 May 2006 00:00:01 +0000 programming DSLs, CL, Development <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/05/16/dsls-cl-development/">https://fsteeg.wordpress.com/2006/05/16/dsls-cl-development/</a></small></p> <p/> This is an interesting area which covers Development and CL in a way: Using DSLs and Tools for DSLs to improve Development... Did I write an entry on this in Webnotes? There was this Podcast about such things... http://172.105.249.169:9000/notes/dsls-cl-developmenthttp://172.105.249.169:9000/notes/dsls-cl-development Tue, 16 May 2006 00:00:01 +0000 programming Walls and Opposition Why is everybody tearing up walls in the programming world? What's wrong and unusual in liking all Java, Ruby, XML, Eclipse and Bash? Reminds me of some old entries... now included... <ul> <li>Ruby/Lisp/Python/Perl vs. Java/C++/C#/Pascal </li> <li>above actually is dynamic vs. static typing</li> <li>XML vs. other delimiters </li> <li>IDE vs. Shell </li> <li>Eclipse vs. NetBeans </li> <li>Pascal-Style vs. C-Style </li> <li>Emacs vs. vi </li> <li>Academics vs. Hackers </li> <li>Academics vs. Professionals </li> <li>Lisp-Academics vs. OO-Academics </li> </ul> <p> Maybe the reason is simply that for many people once they are comfortable with one language or similar they never want to learn anything more and shape the world according to their ideas. Or maybe someone in fact is right and I just didn't get the clue yet... But one thing is obviuos: There is no Eclipse in the Ruby world and there is no Rails in the Java world, just to mention one each... </p><p> <a href="http://fsteeg.com/images/2006-03-31_programming_Walls-and-Opposition.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-03-31_programming_Walls-and-Opposition.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-03-31_programming_Walls-and-Opposition.dot -o 2006-03-31_programming_Walls-and-Opposition.svg */ digraph untitled { rankdir=LR ide shell emacs vi static dynamic c pascal dynamic->environment static->style style->c style->pascal static->environment skills->attitude skills->experience language->typing language->paradigms coding->skills coding->language coding->data environment->shell environment->ide shell->emacs shell->vi typing->static typing->dynamic ide->eclipse ide->netbeans static->statlang dynamic->dynlang dynlang->ruby dynlang->perl dynlang->php statlang->vm vm->java vm->csharp statlang->cpp text->csv data->bin text->trees attitude->hackers attitude->academics experience->professionals experience->hackers experience->academics paradigms->oo paradigms->functional data->text trees->xml trees->parens parens->roundlisp parens->bracket } </code></pre> --> </p><p> Can't we just all be friends :D </p> http://172.105.249.169:9000/notes/walls-and-oppositionhttp://172.105.249.169:9000/notes/walls-and-opposition Fri, 31 Mar 2006 00:00:01 +0000 programming MDD An example of an area where MDD is really the established way to do things are Parser-Generators like YACC, ANTLR or JavaCC. I'd guess that is because it is required and common there to have a well-defined model, that is the Grammar of the language to parse. http://172.105.249.169:9000/notes/mddhttp://172.105.249.169:9000/notes/mdd Wed, 01 Mar 2006 00:00:01 +0000 programming LCA Usage of <i>lowest common ancestor</i> (lca) and <i>longest common extension</i> (lce) in inexact string matching with suffix trees: <br> <a href="http://fsteeg.com/images/2006-01-25_suffix_LCA.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-01-25_suffix_LCA.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-01-25_suffix_LCA.dot -o 2006-01-25_suffix_LCA.svg */ digraph{ rankdir=LR; lce->lca[label=use]; lca->st[label=use]; lce[label="lce\nqueries"]; lca[label="lca\nqueries"]; st[label="suffix\ntree"]; kmismatch[label="matching with\nk-mismatch" shape=box]; wildcards[label="matching with\nwildcards"shape=box]; kmismatch->lce[label=uses]; wildcards->lce[label=uses]; } </code></pre> --> <br> http://172.105.249.169:9000/notes/lcahttp://172.105.249.169:9000/notes/lca Wed, 25 Jan 2006 00:00:01 +0000 suffix Hybrid-DP Inexact string matching with <i>hybrid dynamic programming with suffix trees</i>: <br/> <a href="http://fsteeg.com/images/2006-01-25_suffix_Hybrid-DP.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-01-25_suffix_Hybrid-DP.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-01-25_suffix_Hybrid-DP.dot -o 2006-01-25_suffix_Hybrid-DP.svg */ digraph{ rankdir=LR; kdiff[label="matching with\nk difference" shape="box"]; pall[label="p against all\nalignment" shape="box"]; allall[label="all against all\nalignment" shape="box"]; lev[label="edit\ndistance"]; dp[label="dynamic\nprogramming"]; st[label="suffix\ntree"]; kdiff->lev[label="uses"]; pall->lev[label="uses"]; allall->lev[label="uses"]; dp->st[label="enhanced by"]; lev->dp[label=uses]; } </code></pre> --> http://172.105.249.169:9000/notes/hybrid-dphttp://172.105.249.169:9000/notes/hybrid-dp Wed, 25 Jan 2006 00:00:01 +0000 suffix Wizardry <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/01/23/wizardry/">https://fsteeg.wordpress.com/2006/01/23/wizardry/</a></small></p> <a href="http://fsteeg.com/images/2006-01-23_trinil-programming_Wizardry.dot" title="Graphviz DOT diagram source (also embedded in HTML source)"> <img src="http://fsteeg.com/images/2006-01-23_trinil-programming_Wizardry.svg" alt="Graphviz DOT diagram source (also embedded in HTML source)" /> </a> <!-- <pre><code>/* Generate image with: dot -Tsvg 2006-01-23_trinil-programming_Wizardry.dot -o 2006-01-23_trinil-programming_Wizardry.svg */ graph programming { Programming[shape=box label="Wizardry\n(Witchcraft, \nZauberkunst)\n& Programming"]; Art[shape=box label="Art\n(benefits \nfrom \nstyle)"]; Science[shape=box label="Science\n(requires \nstudy)"] Craft[shape=box label="Craft\n(requires \npractice)"] Formal[shape=box label="Formal\n(uses formal \nlanguage)"] Abstract[shape=box label="Abstract\n(manipulates \nabstract \nentities)"] Programming--Art; Programming--Science; Programming--Craft; Programming--Formal; Programming--Abstract; } </code></pre> --> <br> A small diagram of what wizardry and programming have in common. Oh, and by the way: <a href="http://www.research.att.com/sw/tools/graphviz/">graphviz</a> rules. http://172.105.249.169:9000/notes/wizardryhttp://172.105.249.169:9000/notes/wizardry Mon, 23 Jan 2006 00:00:01 +0000 trinilprogramming Magic <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2006/01/14/magic/">https://fsteeg.wordpress.com/2006/01/14/magic/</a></small></p> <p/> If I told you it was possible to search a pattern in a text, no matter how large the text, in the time it takes to read the <i>pattern</i>, wouldn't you say: "Only by <a href="http://en.wikipedia.org/wiki/Suffix_tree">magic</a>!" http://172.105.249.169:9000/notes/magichttp://172.105.249.169:9000/notes/magic Sat, 14 Jan 2006 00:00:01 +0000 algorithmsprogramming Tail Recursion <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/12/17/tail-recursion/">https://fsteeg.wordpress.com/2005/12/17/tail-recursion/</a></small></p> <p/> I'll have to look into support for tail-recursion support, recursive complexity and such. This must be the reason for the suffix tree to grow too fast: Java doesn't support tail-recursion, which Lisp does. Is this true? http://172.105.249.169:9000/notes/tail-recursionhttp://172.105.249.169:9000/notes/tail-recursion Sat, 17 Dec 2005 00:00:01 +0000 programming Rails! Awesome! Wow! Ruby on Rails is just awesome! It's sort of model driven, where model is defined by the DB. This is just the way these kind of apps should be built. Really interesting: Code generation all around, true rapid model-driven development, but totally clean, pragmatic and lightweight. Really nice! It reminds me a lot of EMF, it's a little like a webapp/relational-DB analog to the desktop-app/XML in EMF. If the task is to set up a little DB and have a web interface to it, this seem to be just the right way. http://172.105.249.169:9000/notes/rails-awesomehttp://172.105.249.169:9000/notes/rails-awesome Thu, 15 Dec 2005 00:00:01 +0000 ruby Syntagma und Paradigma in Suffix-Trees <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/12/12/syntagma-und-paradigma-in-suffix-trees/">https://fsteeg.wordpress.com/2005/12/12/syntagma-und-paradigma-in-suffix-trees/</a></small></p> <p/> In einem Suffix-Tree mit Wörtern gilt fuer einen Knoten mit vielen Nachfahren und vielen Geschwistern vielleicht etwas in der Art: Der Knoten bildet mit all seinen Geschwistern ein Paradigma, und bildet mit jedem seiner Kinder je ein Syntagma. http://172.105.249.169:9000/notes/syntagma-und-paradigma-in-suffix-treeshttp://172.105.249.169:9000/notes/syntagma-und-paradigma-in-suffix-trees Mon, 12 Dec 2005 00:00:01 +0000 linguistics Suffix-Trees und Sprache <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/12/11/suffix-trees-und-sprache/">https://fsteeg.wordpress.com/2005/12/11/suffix-trees-und-sprache/</a></small></p> <p/> Einige Notizen zu Inhalten von Referat und Hausarbeit: Ähnlichkeit, k-mismatch mit suffix trees; Wörter in suffix trees (wie es schon geht); Komplexität generell (vgl. Ukkonen) und bei Wörtern (vgl. Andersson et al.); Strukturalismus, Konstituentenermittlung, oä. ueber k-mismatch, d.h. über Ähnlichkeit von Teilstrings; Stärke von suffix trees nutzen: Viele verschiedene Muster suchen, vielleicht zu suchende Muster generieren. http://172.105.249.169:9000/notes/suffix-trees-und-sprachehttp://172.105.249.169:9000/notes/suffix-trees-und-sprache Sun, 11 Dec 2005 00:00:01 +0000 linguistics Programming, craft and literature <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/12/03/programming-craft-and-literature/">https://fsteeg.wordpress.com/2005/12/03/programming-craft-and-literature/</a></small></p> <p/> I always liked the idea of programming being a craft (as for example <i>The Pragmatic Programmer</i> indicates with it's cover) rather than well, an art I guess. At the same time when studying literature I was convinced that writing (even of literature) is a craft rather than an art. Now I recently for the first time heard of Donald Knuth's ideal of <i>literate programming</i>. And there is no contradiction: Programming is a craft, and that craft is probably closer to the craft of writing literature than to carpentry. http://172.105.249.169:9000/notes/programming-craft-and-literaturehttp://172.105.249.169:9000/notes/programming-craft-and-literature Sat, 03 Dec 2005 00:00:01 +0000 programming Paul Graham's thoughts on work <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/10/30/paul-grahams-thoughts-on-work/">https://fsteeg.wordpress.com/2005/10/30/paul-grahams-thoughts-on-work/</a></small></p> <p/> I find Paul Graham's thoughts on work very inspiring. There was some of it in a speech from last year's OSCON, and even more in one from this year's OSCON. It reminds me of Frithjof Bergmann's book "Neue Arbeit, Neue Kultur", which to my knowledge hasn't been published in english, although he's a professor in the US and the book was written in english. http://172.105.249.169:9000/notes/paul-grahams-thoughts-on-workhttp://172.105.249.169:9000/notes/paul-grahams-thoughts-on-work Sun, 30 Oct 2005 00:00:01 +0000 programming Suffix Trees <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/10/30/suffix-trees/">https://fsteeg.wordpress.com/2005/10/30/suffix-trees/</a></small></p> <p/> I am taking a course on using Suffix Trees for data mining in natural language. I like that stuff, reminds of binary search trees -- it is really cool coming up with such a structure to solve some task more efficiently (or even solve it at all). Through Suffix Trees it might be possible to search for lots of different patterns in a text. Maybe some large-scale corpus-analysis might be possible with this. But what to search for that can't be searched for with other means? Well, let's see. http://172.105.249.169:9000/notes/suffix-treeshttp://172.105.249.169:9000/notes/suffix-trees Sun, 30 Oct 2005 00:00:01 +0000 linguistics Chatbot <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/10/30/chatbot/">https://fsteeg.wordpress.com/2005/10/30/chatbot/</a></small></p> <p/> So this might be a way to mimic conversation in a chatbot: Know and reply appropriately to some adjacency pairs (could this be what pattern-matching chatbots do?), say something (further) about the current topic (this second point is what I tried to implement), and fill up gaps with senseless utterances and mimics (done a little through a simple list of words now). http://172.105.249.169:9000/notes/chatbothttp://172.105.249.169:9000/notes/chatbot Sun, 30 Oct 2005 00:00:01 +0000 linguistics Textual Conversation <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/10/23/textual-conversation/">https://fsteeg.wordpress.com/2005/10/23/textual-conversation/</a></small></p> <p/> What's interesting about textual conversation in chatrooms is that many aspects of communication are not given or fixed. Like there are neither mimics nor gestures and the setting is fixed: a chatroom. Yet this is <em>real language</em>. Another point that makes it suitable for analysis is that there is no observation problem: The fact that every conversation is recorded is true anyway, so it has no impact on the conversation (well it probably makes the whole thing special). http://172.105.249.169:9000/notes/textual-conversationhttp://172.105.249.169:9000/notes/textual-conversation Sun, 23 Oct 2005 00:00:01 +0000 linguistics Konversation <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/10/19/konversation/">https://fsteeg.wordpress.com/2005/10/19/konversation/</a></small></p> <p/> Manche Art von Konversation ist im Wesentlichen nicht viel mehr als das Aeussern von Saetzen zu einem gemeinsamen Thema. Man hoert nicht richtig zu, geht nicht aufeinander ein und redet im Wesentlichen aneinander vorbei, interpretiert dabei jedoch die Aeusserungen des Anderen so, dass diese zu den eigenen Gedanken passen. Man antwortet nicht auf Saetze, sondern man spricht ueber ein Thema. In dieser Hinsicht ist Konversation nicht nur Pattern-Matching (ev. adjacency pairs). Vielleicht ist es eine Mischung: Aus adjacency pairs wenn gefordert, Aeusserungen zum Thema sowie inhaltslosen Woerten und Mimik. http://172.105.249.169:9000/notes/konversationhttp://172.105.249.169:9000/notes/konversation Wed, 19 Oct 2005 00:00:01 +0000 linguistics Ruby iterators <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/10/13/ruby-iterator/">https://fsteeg.wordpress.com/2005/10/13/ruby-iterator/</a></small></p> <p/> An example for the higher-level, more problem-oriented things you can do with Ruby's iterators. In Java, I just tried to do this to insert blanks into all words written entirely in uppercase: <br /><br /><code>s.replaceAll("\\b([A-Z]+)\\b","$1".replaceAll("([A-Z])","$1"+" "));</code> <br /><br />Of course it didn't work, because the second replaceAll is called on "$1" before "$1" is replaced with a match.<br /><br />In Ruby such a thing is possible using iterators: <br /><br /><code>s.gsub(/\b([A-Z]+)\b/){$1.gsub(/([A-Z])/){$1+" "}}</code> <br /><br />It could be even done simpler, with only one regex and iterator involved, plus this solution has no trailing space:<br /><br /><code>s.gsub(/\b([A-Z]+)\b/){$1.split("").join(" ")}</code> http://172.105.249.169:9000/notes/ruby-iteratorshttp://172.105.249.169:9000/notes/ruby-iterators Thu, 13 Oct 2005 00:00:01 +0000 ruby Intelligence <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/10/10/intelligence/">https://fsteeg.wordpress.com/2005/10/10/intelligence/</a></small></p> <p/> Maybe so many people refuse to call computers intelligent because <i>intelligent</i> might mean 'an attribute of the human mind' more than 'being capable of processing information'. Taking these two meanings, AI either already changed the world and is ubiquitous or is a contradiction in itself and will never exist. http://172.105.249.169:9000/notes/intelligencehttp://172.105.249.169:9000/notes/intelligence Mon, 10 Oct 2005 00:00:01 +0000 linguistics Cities and Software <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/10/02/cities-and-software/">https://fsteeg.wordpress.com/2005/10/02/cities-and-software/</a></small></p> <p/> Two points where urban geography had influence on software development: 1. Design Patterns: The idea comes from planning cities (mentioned in the GOF Book) 2. Software Entropy, which is caused by "one broken window", as Hunt and Thomas write in "The Pragmatic Programmer". There seem to be similarities in the way cities and software are organized (at least some). http://172.105.249.169:9000/notes/cities-and-softwarehttp://172.105.249.169:9000/notes/cities-and-software Sun, 02 Oct 2005 00:00:01 +0000 programming Slots and Selection Restriction <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/10/02/slots-and-selection-restriction/">https://fsteeg.wordpress.com/2005/10/02/slots-and-selection-restriction/</a></small></p> <p/> <em><blockquote>{magazine} {country} is running a story on running {app} on {platform}. For those that don't know, {app} is a {category} used to {verb} your {noun}. Finally, {platform} users have a {adjective} approach to their {noun}</blockquote></em>From a <a href="http://www.slashdot.org/">Slashdot</a>-Discussion. http://172.105.249.169:9000/notes/slots-and-selection-restrictionhttp://172.105.249.169:9000/notes/slots-and-selection-restriction Sun, 02 Oct 2005 00:00:01 +0000 linguistics Ruby, a modern high-level language <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/09/16/uby-a-modern-high-level-language/">https://fsteeg.wordpress.com/2005/09/16/uby-a-modern-high-level-language/</a></small></p> <p/> It really seems like Ruby brings together much great stuff from lots of different places. Clean OO, modern API and concepts (like Exceptions, Unit-Testing), great integration of Regular Expressions or some good stuff from Lisp and friends like everything being a function (math., i.e. returning a value), support for changes at runtime or an interpreter for interactive evaluation. And like Regular Expressions can be, Ruby's usage of iterators instead of loops seems to be somewhat higher-level, more problem-oriented. http://172.105.249.169:9000/notes/ruby-a-modern-high-level-languagehttp://172.105.249.169:9000/notes/ruby-a-modern-high-level-language Fri, 16 Sep 2005 00:00:01 +0000 ruby Higher Level What I really like about regular expressions is that they take the idea of higher-level programming even further: You can describe the problem to solve (like 'remove all vowels between consonants') rather than telling the machine what to do (like 'loop over the word, now if the current character is...'). http://172.105.249.169:9000/notes/higher-levelhttp://172.105.249.169:9000/notes/higher-level Wed, 14 Sep 2005 00:00:01 +0000 trinilprogramming Regular Expressions <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/09/14/regular-expressions/">https://fsteeg.wordpress.com/2005/09/14/regular-expressions/</a></small></p> <p/> What I really like about Regular Expressions is that they take the idea of higher-level programming even further: You can describe the Problem to solve (like 'remove all vowels between consonants') rather than telling the machine what to do (like 'loop over the word, now if the current character is...'). http://172.105.249.169:9000/notes/regular-expressionshttp://172.105.249.169:9000/notes/regular-expressions Wed, 14 Sep 2005 00:00:01 +0000 programming Also das sagt aber auch so richtig gar keiner! <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/09/14/also-das-sagt-aber-auch-so-richtig-gar-keiner/">https://fsteeg.wordpress.com/2005/09/14/also-das-sagt-aber-auch-so-richtig-gar-keiner/</a></small></p> <p/> Doch!<br /><blockquote>"Schön und gut, aber es geht hier ja nicht um iPhoto oder iChat, sondern um Software, die gerne mal auf dicken Kisten läuft. Und Apple bietet (bisher) keine dicken Kisten an. Aber auch so richtig gar keine."</blockquote> (Aus dem Usenet) http://172.105.249.169:9000/notes/also-das-sagt-aber-auch-so-richtig-gar-keinerhttp://172.105.249.169:9000/notes/also-das-sagt-aber-auch-so-richtig-gar-keiner Wed, 14 Sep 2005 00:00:01 +0000 linguistics The Three Knuth Rule "Hacker lore says that two heads are faster than one and three heads are slightly faster than two. Thereafter, adding manpower to a software project actually makes it slower. The only way to speed up a project is to use cleverer people. Hence the three Knuth rule. If three Knuths working together cannot do it, it cannot be done." -- ''Korner, The Pleasures of Counting'' http://172.105.249.169:9000/notes/the-three-knuth-rulehttp://172.105.249.169:9000/notes/the-three-knuth-rule Tue, 13 Sep 2005 00:00:01 +0000 quotes OO <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/09/13/oo/">https://fsteeg.wordpress.com/2005/09/13/oo/</a></small></p> <p/> One note for the "What's the first..." section: While Smalltalk-80 was the first proper OO-Language, early academic attempts date back to Simula-67: "A central new concept in SIMULA 67 is the 'object' [...]" (Dahl &amp; Nygaard 1970:6 ie. Dahl, Ole-Johan, Bjorn Myhrhaug &amp; Kristen Nygaard (1970) Common Base Language Oslo: Norwegian Computing Center.) http://172.105.249.169:9000/notes/oohttp://172.105.249.169:9000/notes/oo Tue, 13 Sep 2005 00:00:01 +0000 programming Ruby sounds great <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2005/09/12/ruby-sounds-grea/">https://fsteeg.wordpress.com/2005/09/12/ruby-sounds-grea/</a></small></p> <p/> Today I got myself "Programming Ruby, Second Edition". I've been planning to learn a "scripting language" since I've read "The Pragmatic Programmer" about two years ago. Ruby sounds very promising. http://172.105.249.169:9000/notes/ruby-sounds-greathttp://172.105.249.169:9000/notes/ruby-sounds-great Mon, 12 Sep 2005 00:00:01 +0000 ruby Adapter Pattern and Java Interfaces <p><small>Cross-posted to: <a href="https://fsteeg.wordpress.com/2004/08/31/adapter-pattern-and-java-interfaces/">https://fsteeg.wordpress.com/2004/08/31/adapter-pattern-and-java-interfaces/</a></small></p> <p/> I just thought that patterns actually do matter even in basic programming education. Consider Java Interfaces. I think it is important to be aware of the general concept of classes having interfaces to really use Java Interfaces. It might be useful approaching it from that side. Reading the chapter on the Adapter Pattern in GOF made me realize Java Interfaces are class adapters in GOF, allowing multiple inheritance only for classes without functionality. And then it really makes sense calling these <em>Interfaces</em>, yet it is unintuitive as a class thereby has many different Interfaces which together are the interface of the class. http://172.105.249.169:9000/notes/adapter-pattern-and-java-interfaceshttp://172.105.249.169:9000/notes/adapter-pattern-and-java-interfaces Tue, 31 Aug 2004 00:00:01 +0000 javaprogramming RCP The Eclipse RCP is really such a cool thing I think. Theres really a huge professional team and the authorities in Software Engineering (Erich Gamma, Kent Beck) developing robust, well designed, reusable components for your software on a real production level - for free. Its really OO's promises for reusability becoming true. (I wont start on how great Eclipse is as a Java IDE and Tools Platform now, just for completness sake it shall have been mentioned ;) http://172.105.249.169:9000/notes/rcphttp://172.105.249.169:9000/notes/rcp Sun, 29 Aug 2004 00:00:01 +0000 java Search I read a lot on the struggle of Google to keep up its leadership in the search-engine market (esp. in TR). Google advantages are treatened by the fact taht many people exploit Googles way of ranking results (which is a hack basically in the doube sense of being easy to trick and being inappropriate in all, like not showing 'unpopular' relevant results) to place their results and the fact that as an internet search-engine they have no infrastructure thats guarantees a certain amount of market share. And everybody points out that NLP-Techniques are they key to future search-technologies, be it as a natural language inteface for queries or information-extraction technologies to rank results... It seems like MS is doing a lot of research in that area, looking for specialists in the NLP field, and also Googles recent expansions to Bangalore and Zuerich show they realise their situation and try doing their best in keeping up with the development. http://172.105.249.169:9000/notes/searchhttp://172.105.249.169:9000/notes/search Mon, 22 Mar 2004 00:00:01 +0000 programming Romans Die Romans setzen das Gemueth mit ihren gemachten Revolutionen/ freyen Vorstellungen/ feurigen Ausdruckungen/ und andren bunden Haendeln in Sehnen/ Unruh/ Luesternheit und Brunst/ nehmen den Kopff gantz als in Arrest/ setzen den Menschen in ein Schwitzbad der Passionen/ verderben folgens auch die Gesundheit/ machen Melancholicos und Duckmaeuser/ der Appetit vergeth/ der Schlaff wird verhinderet und walzt man sich im Beth herum/ als wie die Thuer im Angel/ den zu andrem tuechtig gewesten Geist machen sie traeg und ueberdruessig/ betauben und belaestigen das Gedechtniss (indem solche Sachen allzeit eh hafften/ als etwas fruchtbares) verhindern Geschaefft und studiern/ und endlich an statt Wissenschafft beyzubringen scharren sie etwas zusammen/ das schlimmer ist als jede Ohnwissenheit" -- ''Gotthard Heidegger, 1698'' http://172.105.249.169:9000/notes/romanshttp://172.105.249.169:9000/notes/romans Fri, 08 Sep 2000 00:00:01 +0000 quotes Brief eines Stuermers und Draengers <p align=justify> Dies Zimmer! Nichts ists als dies Zimmer! das mein Herz just nun erfuellet. Dies Zimmer ists, welches mir - wenngleich bislang nur vorm Geiste - mein Ruhen hier versuesset. <p/> O lieber Henry! wie sehr ich mich doch sehne, dies hier alsbald all zu erneuern. Schwer ruhet der Staub von drei Generationen auf diesem Schreibtisch, welcher in seiner Klotzigkeit ach! - mir alle Luft zum Atmen nehmet. Es passt nichts zu keinem, und diese Unruh' immerzu verwehrt mir selbst zu Haus' nun wahre Rast. <p/> So muss es sein! und lebendig gleich frommen Honigbienen schwirren die Visionen - von Tischen, Betten und von Stuehlen - mir um den gar verworrnen Geiste, der sich buckelt und gar muehet: zu finden eine Ordnung der Gedanken, der Schraenke, Teppiche und Lampen. <p/> Dies - so will ich meinen - ist wohlgar von Noeten, zu schildern dir dies Zimmer! dies Zimmer, wie ichs mir wuensche, wie ichs ertraeume. <p/> Platz zur Arbeit! den brauch' ich ganz gewiss, doch da mir Platz im Allgemeinen uebermaessig nicht gegeben ist, muss eine Ecke wohl genuegen, den Tische dort zu stellen. Doch O - wie wird mein Herz wohl danach schreien - bei Arbeit und bei sonst'ger Tat - zu schweifen mit dem Blicke sehr, bald in den Raum, bald auch hinaus. <p/> Doch werd' ich ruhen koennen wohlig? Wird nicht die Wand, die beginnt sogleich schon vor der Stirne, nicht nur das Aug', auch den Geist behindern bei dem Blicke? <p/> So ists auch gar kein richt'ges Bild (von diesem Raume), die Stimmung ists! die Atmosphaere! wie sie herrschen wuerde dort, sie ists, die mein Herz laesst flammen und ruhen doch zugleich. <p/> Ruhig ists! und klar! Doch wie? - wie? - frage ich dich - wie ists anzupacken, dies subtile Regen des Herzens zu verwirklichen in dieser Welt? <p/> Besinnen muss ich mich - und zeichnen, zu geben den Gedanken Platz - sogleich solls sein! <p/> <i>Eine Deutsch - LK Hausaufgabe zur "Werther" - Besprechung, 1997 Fabian Steeg</I> http://172.105.249.169:9000/notes/brief-eines-stuermers-und-draengershttp://172.105.249.169:9000/notes/brief-eines-stuermers-und-draengers Fri, 08 Sep 2000 00:00:01 +0000 geschreibsel Affen Die Affen sind boshaft und falsch, springen einem gerne auf den Leib und beissen ziemlich stark, um ein Stueck rauszubeissen. Man haelt sie zur Lust im Hause, weil sie mit ihrer Gaukelei allerhand kurzweilige Haendel treiben. Sie trinken gerne Wein, saufen sich zuweilen ziemlich voll, da sie denn hernach leichtlich koennen gefangen werden. Auf der Insel Java wurde ein Affe gesehen, der eine eigene Huette gahabt und in derselben ein Bett, welches er ordentlich alle Tage aufgemacht, und wenn er sich darein gelegt, den Kopf mit einem Tuch verbunden, auch in anderen Stuecken mehr viel Menschlicheres bewiesen. Von den grossen schwaerzlichen Affen in Afrika wird gemeldet, dass sie dem weiblichen Geschlechte sehr nachtrachten und die Weiber der Schwarzen, wenn sie selbige allein antreffen, zu ueberwaeltigen und zu notzuechtigen pflegten. Denn sie sind ueber alle massen geil und mutwillig, dabei aber furchtsam." -- ''Grosses Universallexicon aller Wissenschaften und Kuenste, welche bishero durch menschlichen Verstand und Witz erfunden worden (Zedlersches Lexikon), Halle 1732'' http://172.105.249.169:9000/notes/affenhttp://172.105.249.169:9000/notes/affen Thu, 07 Sep 2000 00:00:01 +0000 quotes