Programmierprojekte
KommunenViewer
- Status: alpha-Version
- Kommunen-Viewer - ein einfaches GIS zur Darstellung von Werten für Gemeinden
- Siehe auch
Mail-Nachschau
- Idee: Während des Schreibens einer Mail sollte (ähnlich einem Vorschaufenster) automatisch die letzte Korrespondenz mit den Empfängern angezeigt werden.
- Umsetzung: z.B. als Plugin für Thunderbird
Erzeuge PDF im Browser
- Status: Idee
- Ziel: Editor, der nach dem WYSIWG-Prinzip zumindest einfache Formatierungen des Texts erlaubt, die PDFs in einer Vorschau anzeigt, die PDFs zum Download anbietet, im Browser mit JavaScript und CSS arbeitet und in andere Anwendungen integriert werden kann.
- Umsetzung
- Darstellung mit drei Feldern:
- Eingabe/Editor-Feld (in HTML/JavaScript bzw. TypeScript implementiert)
- JSON-Feld, das den Text samt Formatierung ähnlich dem pdfmake.org-Format anzeigt
- PDF-Feld, in dem das mit pdfmake.org erzeugte PDF mittels PDF.js in einem IFrame angezeigt wird
- Features
- Markieren, Löschen, Formatieren
- Cut & Paste mit dem Systemclipboard
- Darstellung mit drei Feldern:
PDF-Maschine
- Status: Idee
- Ziel: Zurverfügungstellung eines virtuellen Netzwerkdruckers auf dem lokalen PC, der die Druckausgaben in PDFs umwandelt.
- Umsetzung: Linux-Server mit CUPS, PDF-Druckertreiber und Samba. Der PDF-Drucker sollte die PDFs in ein öffentliches Verzeichnis des Linux-Servers ablegen, auf das (Windows)-Clients zugreifen können. Der Linux-Server wird in einer (kleinen) virtuellen Maschine mittels Virtual Box aufgesetzt. Diese Virtuelle Maschine sollte beim Booten automatisch gestartet werden.
PDF-Anmalen
- Status: Idee
- Ziel: User soll PDF-Dateien im Browser eines Tablets (wie z.B. Microsoft Surface) öffnen und mit handschriftlichen Anmerkungen versehen können.
Das Ziel wird bereits durch Desktop-Programme erreicht:
Siehe auch für die Zeichenschicht:
- Stackoverflow: JavaScript-Freihandzeichnung
- Tutorial Javascript Canvas
- Tutorial Javascript Freihand-Dots
- GoJS FreehandDrawing
- DrawerJS
- Google Chrome hat eine Verbesserung bei der Latenz für Stylus-Anwendungen: den
desynchronized
Hinweis fürcanvas.getContext()
Siehe auch für die PDF-Anzeigeschicht:
Farbname-App
- Status: Idee
- Ziel: Mit Hilfe der Kamera eines Smartphones wird dem Benutzer die Farbe eines Objekts in Klarschrift/Sprachsynthese mitgeteilt. Das könnte eine Hilfe für Farbenblinde sein.
LED-Licht-Webpage
- Status: Idee
- Ziel: Bildschirm kann in einer frei einstellbaren Farbe leuchten. Am einfachsten wohl Umsetzung über eine HTML-Seite im Browser.
- Umsetzung: drei kleine Regler rechts unten für die Farbkomponenten, Umsetzung mit CSS und javaScript
- Erweiterungen:
- Speichern der Farbe in Cookie (Versionsnummer der Cookie-Ablage auch mit abspeichern)
- Popupfenster für gesamten Bildschirm ohne Rand mit Schließen-Button
- Festlegung einer Abfolge von Farben mit Zeitdauer der jeweiligen Farben
- Weiterer Regler zur Helligkeit (dieser ändert dann alle Farbkomponenten gleichzeitig)
MyPortal
- Status: Idee
- Ziel: Auf einer Website werden Inhalte anderer Webseiten vereinigt. Diese kann der Nutzer frei vorgeben, z.B. indem er eine URL samt XPATH zum abzubildenden Element mitgibt. Das könnte noch durch OpenData-Bestände erweiter werden, z.B.
- Umsetzung: Zu verwenden wäre wohl die IFRAME-Technik. Als Alternative kann der Portalserver die entsprechenden Elemente laden und weitergeben.
- Zur Auswahl des abzubildenden Elements kann man evtl. die Technik, die bei Zoho für die Einbindung fremder Inhalte in Tabellen verwendet wird, nutzen.
MediaWiki-Sync
- Status: Idee
- Ziel: Synchronisation eines MediaWikis mit einem Offline-MediaWiki, so dass Änderungen z.B. auf einem Laptop wieder ins Haupt-MediaWiki eingespeist werden können, ohne dass Änderungen auf dem Laptop noch auf dem Hauptserver verloren gehen.
- Umsetzung: Nutzen des XML-Outputs von Mediawiki (Über Seite Spezial:Export);
- Herunterladen des kompletten Wikis auf den Laptop
- Änderungen auf Laptop und Server vornehmen
- Maschinelles Überprüfen, ob auf dem Laptop neuere Versionen als auf dem Server vorhanden sind; dann einspeisen auf dem Server (über Spezial:Import)
- Anschließend wieder komplettes Herunterladen auf den Laptop nötig.
- Weitere Infos:
SimpleServerEditor
- Status: Lösungsansatz (s.u.)
- Ziel: In einer HTML-Form wird ermöglicht eine Datei auf dem Server auszuwählen, diese in einem Textfeld zu editieren und wieder auf dem Server abzuspeichern. Ergänzt muss dies durch einen Zugriffsschutz werden.
- Umsetzung mit
- Apache Webserver (Zugriffsschutz) und
- PHP (Datei schreiben)
- Lösungsansatz:
Kalenderwoche-Rechner
- Status: Beginn der Umsetzung (s. Google Gadget Kalenderwoche)
- Ziel:
- Auf einer Webseite soll als Information neben dem aktuellen Datum die aktuelle Kalenderwoche ausgegeben werden.
- Mittels zwei Eingabefelder soll zu einer bestimmten Kalenderwoche (Wochennummer + Jahr) das entsprechende Datum ausgegeben werden.
- Umgekehrt soll zu einem bestimmten Datum das Jahr ausgegeben werden.
- Evtl. als Yahoo/Google-Gadget zu implementieren.
- Lösungsansatz: Definition der wikipedia:Kalenderwoche (Woche beginnt am Montag, die erste Woche beinhaltet den 4. Januar), s. auch Kalender. Hier findet sich ein eleganter Algorithmus zur Berechnung der Kalenderwoche und des Kalenderjahrs auf Basis der Erkenntnis, dass der
- erste Donnerstag eines Kalenderjahres immer in der ersten Kalenderwoche sich befindet und
- dass alle Donnerstage jeweils in dem Kalenderjahr liegen, zu dem auch die entsprechende Kalenderwoche gehört.
- Ziel Nr. 1 ist erfüllt, (s. Google Gadget Kalenderwoche)
P2P-Backup
- Status: Idee
- Ziel:
- Private Rechner, die heutzutage über DSL ins Netz gehen, könnten auch der ideale Backup-Ort für Freunde sein. Wichtig ist dabei allerdings, dass selbst die "Freunde" nicht die zu backupenden Daten einsehen können. Außerdem sollte von vornherein bestimmt werden, wieviel Backup-Platz anderen zur Verfügung gestellt wird.
- Weitergehend könnte dies zu einer Art Community ausgebaut werden. Jeder bekommt Speicherplatz in Abhängigkeit von dem vom ihm zur Verfügung gestellten Platz/von seiner Erreichbarkeit.
- Überflüssiger/zu kleiner Speicherplatz könnte monetär abgerechnet werden.
- Möglich wären auch zweifach-/mehrfach-Sicherungen, wenn mehrere Rechner zur Verfügung stehen. Möglich wäre auch einzelne Backups auf mehrere Rechner zu verteilen (Vorteil insbesondere die Wiederherstellung müsste schneller gehen).
- Lösungsansätze:
- Auf Remote Rechner sollte ein Image fester Größe angelegt werden, das mit einem verschlüsselnden Filesystem beschrieben wird. Der Remote Rechner sollte eine feste IP-Adresse haben oder per Dynamisches DNS zu erreichen sein. Der Remote Rechner müsste wohl einen SSH-Zugang zulassen (Zugriff sollte aber auf das genannte Image plus notwendige Programme wie sshd und z.B. rsync begrenzt werden). Der lokale Rechner muss z.B. durch einen Cron-Job mit ping feststellen, ob er einen Backup starten kann (Alternative: Anmeldung der Rechner an einer zentralen Stelle im Netz).
- Auf Remote Rechner läuft ein FTP-, WebDAV-Server oder ähnliches. Die Verschlüsselung erfolgt auf dem lokalen Rechner. Der Remote Rechner sollte eine feste IP-Adresse haben oder per Dynamisches DNS zu erreichen sein. Der lokale Rechner muss z.B. durch einen Cron-Job mit ping feststellen, ob er einen Backup starten kann (Alternative: Anmeldung der Rechner an einer zentralen Stelle im Netz).
- Variante: Es gibt einen festen Zwischenspeicher im Netz (z.B. freier WebDAV-Server von GMX). Darauf werden durch lokalen Rechner nach und nach Teile des Backups abgelegt. Der Remote Rechner holt dann nach und nach die Teile ab und gibt wieder Bereiche im Zwischenspeicher frei.
- Lokaler Rechner: Erstellen der Backup-Datei (z.B. mit tar)
- Lokaler Rechner: Verschlüsseln der Backup-Datei
- Lokaler Rechner: Aufteilen der Backup-Datei in kleine Snippets (z.B. mit split)
- Lokaler Rechner: Hochladen der Snippets zum Zwischenspeicher
- Remote Rechner: Herunterladen der Snippets
Weitere Schritte:
- Lokaler Rechner übermittelt Löschen-Befehl an Remote Rechner für alte Backup-Dateien
- Lokaler Rechner übermittelt RESTORE Befehl an Remote Rechner, obiger Backup-Vorgang wird umgekehrt
BGH-Leitsätze
Allgemeines
- Status: Idee
- Analyse der BGH-Urteilsdatenbank
- Sortieren nach Gesetzen, innerhalb von Gesetzen nach Artikeln/Paragraphen, anschließend nach Absätzen/Nummern/etc. (keine weitere Aufteilung)
- Ähnliches:
- OpenJur - Portal, in das Gerichtsentscheidungen eingestellt werden.
- Vorgehen:
- Schritt 1: Abrufen der PDFs (ausreichend zunächst aktuelle Entscheidungen)
- Schritt 2: Konvertieren in Text (evtl. schon Aufnahme in Datenbank)
- Schritt 3a: Analyse I
- Leitsatz / -sätze
- Datum
- Aktenzeichen
- LawRefFull
- Link zur BGH-Seite
- Schritt 3a: Analyse I
- Schritt 3b: Analyse II
- LawRef aus LawRefFull
- Gesetze
- Paragraphen/Artikel
- künftig Absätze / Nummern
- weitere Konkretisierungen (Sätze, Nummern etc.)
- LawRef aus LawRefFull
- Schritt 3b: Analyse II
- Schritt 4: Veröffentlichung
- Einfügen in Datenbank
- HTML-Output (z.B. über PHP)
- Schritt 4: Veröffentlichung
Einzelfälle von BGH-Leitsatzentscheidungen
Einzelprobleme / Use Cases für Unit-Tests:
- Mehrere Gesetze in einer Zeile, §§ zusammen, getrennt wie die Gesetze durch Semikolon
- Ein Gesetz, mehrere §§ mit Zusätze, §§ jeweils einzeln (§)
- Ein Gesetzt, mehrere §§, jedoch nicht vor jedem § ein §-Zeichen
- Mehrere Paragraphen teils erweitert um Absätze, teils um nicht zuordbare Beschreibungen (evtl. falsch?)
- Mehrere Gesetze in einer Zeile, getrennt durch Semikolon; Gesetze ergänzt um Paragraphen und teilweise Absätze sowie mit Buchstabenkürzeln "Aa", "C", "B", "G"
- Mehrere Gesetze in einer Zeile, getrennt durch Semikolon; ergänzt um "Bb", "Cc"
- Ein Gesetz/Paragraph in einer Zeile mit mehreren durch Kommata getrennten Absätzen sowie "Bl, Cb", mit "Fa"
- Mehrere §§ mit Buchstabenkennzeichnung, wobei die Zahl davor nicht wiederholt wird: §§ 32a, b GmbHG
- Mehrere Gesetze, an die jeweils die Leitsätze mit a), b) angefügt werden
- Kennzeichnung einer Entscheidung mit einem Namen
- Gesetz mit erklärendem Klammerzusatz; nächstes Gesetz in einer Zeile, nur abgetrennt durch Semikolon
- Mehrere Gesetze in einer Zeile, getrennt durch Semikolon
- DIN als Rechtsnorm ohne Paragraphen/Artikel
Mietwagen-Meta-Suchmaschine
Ziel
Das Projekt soll es ermöglichen, Mietwagenangebote zu finden. Dabei soll es auf die Angebote der verschiedenen Mietwagenanbieter, auch von Weiterverkäufern/-vermittlern wie ADAC oder billiger-mietwagen.de zurückgreifen. Persönliche Vorlieben sollen berücksichtigt werden, wie z.B.
- Winterreifen
- Zusatzfahrer
- Mitgliedschaften (z.B. Miles & More, ADAC, Kreditkarten)
Umsetzung
Soweit möglich soll auf APIs der Anbieter zurückgegriffen werden.
Im Übrigen wird auf die normalen Webseiten zugegriffen. Dabei wird auf das Open Source-Projekt Selenium zurückgegriffen um Browser fernzusteuern. Alternativen:
- direkter Zugriff auf HtmlUnit (Vorteil: headless; Nachteil: schwächerer JavaScript-Support)
- PhantomJS (Vorteil: headless, Webkit-basiert; Nachteil: JavaScript-, aber noch keine Java-API).
Die Browser können in einem virtuellen X-Server, z.B. Xvfb, laufen, um Ressourcen zu sparen (fraglich, weil dann ja auch die Fähigkeiten des Grafikprozessors nicht genutzt werden).
Mit GhostDriver, das in PhantomJS integriert ist, kann ein headless WebKit-basiertes System von Selenium ferngesteuert werden.
APIs von Mietwagenanbietern
- Hotwire, REST, straight forward, API key nötig
- Rental Car Manager - Webservice-API
- Car2Go, CarSharing-Anbieter
- OTA (Open Travel Alliance) XML API[2]
- rentalcars.com XML API[3]
- CarTrawler - to be checked
- AMADEUS bietet für seine API keine öffentlich zugänglichen Informationen.
- Carsolize ist ein kommerzieller Anbieter u.a. von Mietwagenreservierungs-APIs.
- Expedia bietet derzeit nur eine API für Hotelreservierungen, nicht für Mietwagen an (Stand: 3.1.2013; Neuigkeiten auf dem Partner-Blog).
Weitere Infos
- AutoRentalNews - mit RentalSoftware gewidmetem Teil
- miewa.de
- Das ProgrammableWeb bietet viele Infos rund um Web-APIs.
Sicherer Chat
Ziel
Es soll ein sicherer Messenger geschaffen werden mit Hilfe von Open Source, Identifizierung an Hand von privaten / öffentlichen Schlüsseln (siehe auch Kryptographie) und dezentralen Chat-Servern, die ihrerseits die Namen der Teilnehmer nicht kennen, sondern lediglich die öffentlichen Schlüssel.
Anforderungen
Die Anforderungen orientieren sich ungefähr an einem einfachen Whatsapp-Dienst.
Whatsapp bietet
- sofortige Kommunikation
- leichtes Finden von Teilnehmern (über Telefonnummer aus Adressbuch)
- niedrige Hürde der Kommunikation (keine Anrede, kein Betreff)
- einfaches Nutzen von Gruppen
- einfaches Hinzufügen
- einfaches Austreten
- so gut wie kein Spam (wahrscheinlich durch Identifikation der Absender mittels Telefonnummer und zentraler Kontrolle durch Whatsapp/Facebook)
- Spaß durch Emoticons und sonstige Icons
- Versenden von Bildern (zur Bandbreitenersparnis auch in niedrigerer Auflösung)
- sichere Kommunikation (angeblich Ende-zu-Ende-Verschlüsselung)
Umsetzung
Use Cases
- Ablauf des Versendens einer Nachricht
- Nachricht wird auf Client A erstellt
- Nachricht wird auf Client A mit privatem Schlüssel des A verschlüsselt
- Nachricht wird auf Client A mit öffentlichem Schlüssel des B verschlüsselt
- Nachricht wird an Server (oder Servercluster) mit Ziel (öffentlicher Schlüssel des) B übermittelt
- Ablauf des Empfangens einer Nachricht
- Mittels HTTP-Long-Poll oder Server-Push wird die an (den öffentlichen Schlüssel des) B adressierte Nachricht vom Server (oder Servercluster) heruntergeladen.
- Nachricht wird auf Client B mit privatem Schlüssel des B entschlüsselt.
- Nachricht wird auf Client B mit öffentlichem Schlüssel des A entschlüsselt
- Nachricht wird auf Client B gelesen.
- Senden an eine Gruppe
- wohl Senden mehrerer Nachrichten durch Client????
- oder Gruppenserver mit privatem/öffentlichem Schlüsselpaar???
- Hinzufügen eines Gruppenteilnehmers
- ???
- Austreten aus einer Gruppe
- ???
- Ausschließen aus einer Gruppe
- durch Gruppeneigentümer - gibt es so etwas??
- Ausschließen des Empfangs von bestimmten Gruppenteilnehmern
- Ausschließen von Spam
- Nur durch Geheimhaltung öffentlicher Schlüssel zur Identifikation der Teilnehmer ????
- Hinterlegung der öffentlichen Schlüssel der Gesprächspartner in lokalen Kontakten des Smartphones
Weiteres aus dem Umfeld
- Möglicherweise ist XMPP ein Standard, auf den ein solcher sicherer Client aufgebaut werden kann.
- Für Android hat G Data mit Secure Chat bereits einen Open Source-Client und -Server entwickelt (aber wohl noch nicht dezentrale Serverstruktur).
Luigis Smart Home
Luigi möchte die Heizung seines Appartements selbst steuern und vielleicht irgendwann weitere Smart Home-Funktionen nutzen. Siehe Luigis Smart Home.