Zeile 1: |
Zeile 1: |
| == Aktuelles == | | == Aktuelles == |
| | | |
− | * Siehe
| + | Siehe |
− | ** [http://www.heise.de/developer heise.de]
| + | * [http://www.heise.de/developer heise.de] |
− | ** [http://www.golem.de golem.de]
| + | * [http://www.golem.de golem.de] |
| * [http://www.heise.de/developer/podcast/ Heise.de - Podcast für Entwickler] | | * [http://www.heise.de/developer/podcast/ Heise.de - Podcast für Entwickler] |
| + | * [https://open.hpi.de/courses Kurse zu IT des Hasso-Plattner-Instituts] |
| | | |
| == Programmiertechniken == | | == Programmiertechniken == |
Zeile 19: |
Zeile 20: |
| * [http://kai-beck.de/42-ueberzeugungsmuster 42 Überzeugungsmuster für Agilität in der Softwareentwicklung] | | * [http://kai-beck.de/42-ueberzeugungsmuster 42 Überzeugungsmuster für Agilität in der Softwareentwicklung] |
| * [https://www.itemis.com/de/agile/scrum/kompakt/einfuehrung-in-scrum/scrum-prozess Wie läuft Scrum ab?] | | * [https://www.itemis.com/de/agile/scrum/kompakt/einfuehrung-in-scrum/scrum-prozess Wie läuft Scrum ab?] |
| + | |
| + | ==== V-Modell XT ==== |
| + | |
| + | Der IT-Beauftragte der Bundesregierung empfiehlt zur Systementwicklung das so genannte "V-Modell XT". |
| + | |
| + | Siehe |
| + | * https://www.heise.de/developer/artikel/V-Modell-XT-an-Unternehmen-anpassen-Teil-1-227030.html |
| + | * https://www.heise.de/developer/artikel/V-Modell-XT-an-Unternehmen-anpassen-Teil-2-227032.html |
| | | |
| === Design Patterns === | | === Design Patterns === |
Zeile 35: |
Zeile 44: |
| | | |
| ==== Apache Maven ==== | | ==== Apache Maven ==== |
− | * Zu [http://maven.apache.org/maven-features.html Apache Maven] siehe
| + | Zu [http://maven.apache.org/maven-features.html Apache Maven] siehe |
− | ** [http://books.sonatype.com/maven-book/reference/public-book.html Maven: The Definitive Guide]
| + | * [http://books.sonatype.com/maven-book/reference/public-book.html Maven: The Definitive Guide] |
− | ** [http://wiki.netbeans.org/MavenBestPractices Netbeans Maven Best Practices]
| + | * [http://wiki.netbeans.org/MavenBestPractices Netbeans Maven Best Practices] |
− | ** [http://famvdploeg.com/blog/?p=39 Einzelne JARs zum lokalen Maven-Repository hinzufügen]
| + | * [http://famvdploeg.com/blog/?p=39 Einzelne JARs zum lokalen Maven-Repository hinzufügen] |
− | ** [http://maven.apache.org/plugins/maven-assembly-plugin/usage.html Ausführbare JARs (mit MANIFEST.MF) erzeugen] (nutzt neueres maven-assembly-plugin) ([http://www.blackslash.de/archives/26-Maven-JAR-ausfuehrbar-machen;-Hauptklasse-dem-Manifest-hinzufuegen.html Alternative]; nutzt älteres maven-jar-plugin)
| + | * [http://maven.apache.org/plugins/maven-assembly-plugin/usage.html Ausführbare JARs (mit MANIFEST.MF) erzeugen] (nutzt neueres maven-assembly-plugin) ([http://www.blackslash.de/archives/26-Maven-JAR-ausfuehrbar-machen;-Hauptklasse-dem-Manifest-hinzufuegen.html Alternative]; nutzt älteres maven-jar-plugin) |
| + | * Maven kann frei konfiguriert werden, allerdings ist es grundsätzlich sinnvoll, sich an [https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html die Standard-Verzeichnisstruktur eines Maven-Projekts] zu halten. Damit kommen auch fremde Entwickler leichter zurecht. |
| + | ** Diese Struktur kann zum Einsatz [https://www.petrikainulainen.net/programming/maven/integration-testing-with-maven/ von Integration Tests modifiziert] werden. Siehe auch [https://www.linkedin.com/pulse/example-how-run-integration-test-maven-linda-wu Tutorial zu Integrationstest mit Maven]. |
| + | |
| + | |
| + | ===== Maven Quick Start ===== |
| + | |
| + | Mit |
| + | mvn archetype:generate maven-archetype-quickstart |
| + | und Angabe von frei wählbarem groupId, artifactId und version kann ein neues leeres Maven-Java-Projekt im aktuellen Verzeichnis erstellt werden. |
| + | |
| + | |
| + | ===== Maven und Webpack ===== |
| + | |
| + | Mit dem [https://github.com/eirslett/frontend-maven-plugin frontend-maven-plugin] kann Maven ein projekt-spezifisches [[node.js]] nutzen. Damit kann z.B. [[Webpack]] genutzt werden, um [[JavaScript]]-Dateien zu bündeln. |
| | | |
| ===== Main Class in Maven JAR ===== | | ===== Main Class in Maven JAR ===== |
Zeile 85: |
Zeile 108: |
| Außerdem muss man als dependencies zum Projekt die Plugins maven-jar-plugin und maven-dependency-plugin hinzufügen. | | Außerdem muss man als dependencies zum Projekt die Plugins maven-jar-plugin und maven-dependency-plugin hinzufügen. |
| Die erzeugte JAR findet sich im Ordner <code>target/</code> des Projekts, nachdem man mit Rechtsklick auf das Projekt und "Build with Dependencies" den Bauprozess gestartet hat. | | Die erzeugte JAR findet sich im Ordner <code>target/</code> des Projekts, nachdem man mit Rechtsklick auf das Projekt und "Build with Dependencies" den Bauprozess gestartet hat. |
| + | |
| + | ===== JAR mit allen Abhängigkeiten ===== |
| + | |
| + | Um ein einziges JAR mit allen Abhängigkeiten (fat JAR oder uber-jar) zu erzeugen, kann man das maven-assembly-plugin, das onejar-maven-plugin oder wohl auch das maven-shade-plugin nutzen. |
| + | |
| + | Siehe |
| + | * https://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven |
| + | * http://tutorials.jenkov.com/maven/maven-build-fat-jar.html |
| | | |
| ==== Projektmanagement allgemein ==== | | ==== Projektmanagement allgemein ==== |
Zeile 113: |
Zeile 144: |
| * [http://www.eclipse.org/jubula/ Eclipse Jubula] kann u.a. [[Java Swing]]-Anwendungen testen. | | * [http://www.eclipse.org/jubula/ Eclipse Jubula] kann u.a. [[Java Swing]]-Anwendungen testen. |
| * [https://www.qfs.de/de/index.html QF-Test], eine proprietäre Testsuite u.a. für [[Java]]-Desktopanwendungen z.B. mit [[Swing]] | | * [https://www.qfs.de/de/index.html QF-Test], eine proprietäre Testsuite u.a. für [[Java]]-Desktopanwendungen z.B. mit [[Swing]] |
| + | |
| + | === Low Code === |
| + | |
| + | Low Code oder [https://de.wikipedia.org/wiki/No-Code-Plattform No Code] sind Entwicklungsumgebungen, die mit verhältnismäßig mächtigen Elementen arbeiten, um rasch Anwendungen entwickeln zu können. |
| + | |
| + | Beispiele: |
| + | |
| + | * [https://www.airtable.com/pricing Airtable] |
| + | * [https://www.make.com/ Make], früher als Integromat bezeichnet |
| | | |
| == Reguläre Ausdrücke == | | == Reguläre Ausdrücke == |
Zeile 118: |
Zeile 158: |
| * [http://regexlib.com/CheatSheet.aspx Übersicht über "regular expressions (regex)"] | | * [http://regexlib.com/CheatSheet.aspx Übersicht über "regular expressions (regex)"] |
| * [http://openoffice.blogs.com/openoffice/2009/06/using-regular-expressions-in-openoffice-calc-filters-phrases-like-contains-rather-than-equals-less-t.html Reguläre Ausdrücke für Filter] in [[OpenOffice]] Calc. | | * [http://openoffice.blogs.com/openoffice/2009/06/using-regular-expressions-in-openoffice-calc-filters-phrases-like-contains-rather-than-equals-less-t.html Reguläre Ausdrücke für Filter] in [[OpenOffice]] Calc. |
| + | |
| + | == Künstliche Intelligenz == |
| + | |
| + | |
| + | === Allgemeines === |
| + | Siehe [[Neuronale Netze]] |
| + | |
| + | === ChatGPT === |
| + | |
| + | ChatGPT ist eine künstliche Intelligenz, mit der man Dialoge im WhatsApp-Stil führen kann. Es kann nach Anmeldung auf openai kostenlos genutzt werden. |
| + | |
| + | Eine lustige Anwendung ist [https://www.ricoshet.com/ ricoshet.com]; dort spricht - nach Vorgabe eines Themas - ChatGPT mit sich selbst. |
| + | |
| + | Siehe |
| + | * https://www.golem.de/news/kuenstliche-intelligenz-so-funktioniert-chatgpt-2302-171644-3.html |
| | | |
| == Datenbanken == | | == Datenbanken == |
Zeile 133: |
Zeile 188: |
| * [http://db.apache.org/derby/docs/10.4/ref/ Apache Derby SQL reference] | | * [http://db.apache.org/derby/docs/10.4/ref/ Apache Derby SQL reference] |
| * [http://www.tgunkel.de/it/software/doc/sql_database.de SQL-Tipps] | | * [http://www.tgunkel.de/it/software/doc/sql_database.de SQL-Tipps] |
| + | |
| + | ==== Indexbildung ==== |
| + | |
| + | Siehe |
| + | * [https://use-the-index-luke.com/de Optimierung von SQL-Indizes] |
| + | |
| + | ==== Pivotieren ==== |
| + | |
| + | Zeilenwerte in Spalten darstellen ist ein häufigeres Problem. Dies kann bei Aggregationen dadurch gelöst werden, dass man die <code>FILTER</code>-Klausel verwendet:<ref>Vgl. https://modern-sql.com/de/anwendung/pivot</ref> |
| + | SELECT SUM(Betrag) AS Jahressumme, SUM(Betrag) FILTER (WHERE month="Januar") AS Januarsumme, SUM(Betrag) FILTER (WHERE month="Februar") AS Februarsumme,... |
| + | FROM daten |
| + | |
| + | |
| + | ==== Doppelte Daten entfernen ==== |
| + | Siehe |
| + | * http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows |
| | | |
| ==== MySQL ==== | | ==== MySQL ==== |
Zeile 151: |
Zeile 222: |
| Siehe | | Siehe |
| * http://code.dedu.ch/2011/07/csv-file-direkt-in-mysql-importieren/ | | * http://code.dedu.ch/2011/07/csv-file-direkt-in-mysql-importieren/ |
− |
| |
− | ===== Doppelte Daten entfernen =====
| |
− | Siehe
| |
− | * http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows
| |
| | | |
| ==== HSQLDB ==== | | ==== HSQLDB ==== |
Zeile 161: |
Zeile 228: |
| | | |
| === NoSQL === | | === NoSQL === |
| + | |
| + | Siehe |
| + | |
| + | * [[SurrealDB]] |
| + | * [https://github.com/nocodb/nocodb NocoDB] |
| + | * [https://www.openxava.org/ate/matrify-alternative OpenXava] erlaubt mit einfachen [[Java]]-Klassen recht schnell Web-Datenbankanwendungen zu erstellen. |
| + | * [https://www.edgedb.com/docs/intro/quickstart#ref-quickstart EdgeDB] |
| + | * LowDB - kann nicht als wirkliche Datenbank bezeichnet werden, aber möglicherweise sinnvoll für Persistenz von wenigen Daten. |
| | | |
| ==== CouchDB ==== | | ==== CouchDB ==== |
| | | |
| Siehe [[CouchDB]] | | Siehe [[CouchDB]] |
| + | |
| + | ==== Echtzeit-Datenbanken ==== |
| + | |
| + | * https://rethinkdb.com/ |
| + | * Die in Google Firebase integrierte Echtzeitdatenbank |
| + | ** https://levelup.gitconnected.com/todo-app-using-firebase-react-typescript-ea0a34bd417d |
| + | * [[SurrealDB]] |
| + | * [[Supabase]] |
| + | |
| + | === Datenbanken als Service === |
| + | * [https://www.elephantsql.com/plans.html ElephantSQL] - Postgres as a service |
| + | * Google [[Firebase]] |
| + | * IBM Cloudant basierend auf [[CouchDB]] |
| + | * [https://nhost.io/pricing Nhost] u.a. mit [[PostgreSQL]] |
| + | * [https://www.back4app.com/ Back4App] |
| + | ** https://parseplatform.org/ |
| + | * [https://devcenter.kinvey.com/rest/guides/core-overview Kinvey] |
| + | * [https://kuzzle.io/pricing/ Kuzzle] |
| + | |
| + | === Datenbanken im Browser === |
| + | |
| + | * SQLite |
| + | * [[pouchdb]], basiert im Browser auf IndexedDB, läuft aber auch in [[Node.js]] |
| + | * [[IndexedDB]] |
| + | ** kann in [[Node.js]] z.B. zum Testen imitiert werden, siehe [https://www.npmjs.com/package/fake-indexeddb fake-indexeddb] |
| + | * [https://github.com/julienetie/db64 db64] ist ein kleiner Wrapper um [[IndexedDB]] |
| + | * [https://github.com/jakearchibald/idb idb] ist wohl der häufigst genutzte Wrapper [[IndexedDB]] |
| + | * [https://dexie.org/ Dexie.js], unterstützt auch [[TypeScript]] |
| + | * [https://nanosql.io/ NanoSQL] |
| + | * [https://www.npmjs.com/package/localforage LocalForage] |
| + | * [https://github.com/google/lovefield lovefield], SQL-angelehnt |
| + | |
| + | * [https://www.npmjs.com/package/idb idb] dünne Hülle um IndexedDB |
| + | * [https://www.npmjs.com/package/idb-keyval idb-keyval], einfacher Schlüssel-Wert-Speicher, basierend auf IndexedDB |
| + | |
| + | === Datenbank-Frontends === |
| + | |
| + | * [http://kexi-project.org/ kexi] tritt als Alternative für MS Access oder FileMaker an. |
| + | * [https://github.com/giowck/symphytum Symphytum], intuitives Datenbank-Frontend (und -Backend), noch in der Entwicklung, bisher keine relationale Daten (Stand: Okt. 2020) |
| + | * [[LibreOffice]] Base |
| + | |
| + | === Datenbank-Frontend in der Cloud === |
| + | |
| + | * https://restdb.io/features/ |
| + | |
| + | === Append-only Datenbanken === |
| + | |
| + | Unveränderliche Datenbanken, also Datenbanken, die die gesamte Historie bis zum Erreichen des aktuellen Status behalten, (Insert-only- bzw. Append-only-Datenbanken) gibt es in unterschiedlicher Ausprägung. |
| + | |
| + | Z.B. |
| + | * Oracle Immutable Tables (oder Blockchain-Tables) |
| + | * temporale Tabellen mit "as of <timestamp>"-Operator |
| + | ** [https://mariadb.com/kb/en/system-versioned-tables/ MariaDB] |
| + | * Datenbanken mit Versionskontrolle |
| + | ** [https://www.dolthub.com/ Dolt] |
| + | ** [https://terminusdb.com/ TerminusDB] |
| + | * [https://immudb.io/ ImmuDb] |
| + | * [[BigchainDB]] - blockchain-basiert |
| + | |
| + | |
| + | Siehe auch |
| + | * https://www.dolthub.com/blog/2022-03-21-immutable-database/ |
| + | * https://en.wikipedia.org/wiki/Merkle_tree |
| | | |
| == Webbrowser steuern == | | == Webbrowser steuern == |
Zeile 182: |
Zeile 320: |
| | | |
| * [http://www.python.org Python-Homepage] | | * [http://www.python.org Python-Homepage] |
| + | * [https://realpython.com/python-development-visual-studio-code/ Einrichten von Visual Studio Code] als Python-IDE |
| + | |
| + | === Python Package Manager PIP === |
| + | |
| + | PIP ist der Standard-Packagemanager für Python. Er lässt sich folgendermaßen auf [[Ubuntu]]/[[Debian]] installieren: |
| + | |
| + | sudo aptitude install python3-pip |
| + | |
| + | |
| + | Wenn er durcheinander kommt und z.B. folgende Fehlermeldung zeigt: |
| + | PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.8/dist-packages/python_dateutil-2.8.1.dist-info' |
| + | |
| + | dann kann das an fehlenden Berechtigungen liegen. Das kann man beheben. Um den Benutzer USER der Gruppe <code>staff</code> hinzuzufügen, kann man folgendes Kommando nutzen: |
| + | |
| + | sudo adduser USER staff |
| + | |
| + | '''Warnung: [https://wiki.debian.org/SystemGroups#Groups_without_an_associated_user staff lässt recht weitgehende Veränderungen am System zu]. Bitte nur nutzen, wenn man wirklich versteht, was man tut!''' |
| | | |
| == XML == | | == XML == |
Zeile 206: |
Zeile 361: |
| * [http://reference.sitepoint.com/html SitePoint HTML-Reference] | | * [http://reference.sitepoint.com/html SitePoint HTML-Reference] |
| | | |
| + | === Sonderzeichen === |
| + | |
| + | In HTML-Code kann man viele Sonderzeichen einbetten. |
| + | Siehe |
| + | * https://www.mediaevent.de/tutorial/sonderzeichen.html |
| | | |
| === Favicon === | | === Favicon === |
Zeile 228: |
Zeile 388: |
| * [http://www.htmlgoodies.com/html5/client/the-complete-guide-to-building-html5-games-with-canvas-svg.html#fbid=1sCuPBXjCgS Anleitung zum Bau von HTML5-Spielen auf Basis des Canvas- | | * [http://www.htmlgoodies.com/html5/client/the-complete-guide-to-building-html5-games-with-canvas-svg.html#fbid=1sCuPBXjCgS Anleitung zum Bau von HTML5-Spielen auf Basis des Canvas- |
| Elements] | | Elements] |
| + | |
| + | ==== HTML5 Web Share API und Web Share Target API ==== |
| + | |
| + | Auf Mobil-Browsern wird die Web Share API, mit der Webapplikationen Inhalte mit nativen Apps "teilen" können, bereits weitverbreitet. |
| + | |
| + | Eher suchen muss man noch die [https://w3c.github.io/web-share-target/level-2/ Web Share Target API], mit der Webapplikationen im nativen "Teilen"-Dialog der Smartphones bzw. im "Öffnen mit ..."-Dialog der Desktops erscheinen können. In [[Chrome]] scheint es sich noch hinter einer Einstellung zu verstecken. Zu den Einstellungen kommt man mit chrome://flags. |
| + | |
| + | Siehe |
| + | * https://mconverter.eu/blog/web_share_target_api/ |
| + | * https://web.dev/web-share-target/ |
| + | |
| | | |
| ==== HTML5 Frameworks ==== | | ==== HTML5 Frameworks ==== |
| + | ===== React ===== |
| + | Siehe [[React]] |
| ===== Ember.js ===== | | ===== Ember.js ===== |
| | | |
Zeile 342: |
Zeile 515: |
| | | |
| == JavaScript == | | == JavaScript == |
| + | === Projektmanagment === |
| + | |
| + | JavaScript kann in einem einfachen Editor geschrieben werden und im Browser laufen. |
| + | |
| + | Üblicherweise werden aber Projektmanagementtools verwendet: |
| + | |
| + | * Gulp |
| + | ** https://engineroom.teamwork.com/10-things-to-know-about-gulp-2e99176f9c74 |
| + | * Grunt |
| + | * [[Maven]] mit dem maven-frontend-plugin |
| + | * [[Webpack]] - eigentlich nur ein Paketierer für einzelne JavaScript-Dateien. |
| + | |
| + | Daneben gibt es viele Build- und Hosting-Plattformen in der Cloud, z.B. |
| + | * Netlify |
| + | * [https://www.gatsbyjs.com/pricing/#buildsDetails GatsbyJS] |
| + | * Back4app |
| + | |
| === Allgemeines === | | === Allgemeines === |
| * [http://de.selfhtml.org/javascript/index.htm Javascript-Dokumentation von selfhtml] | | * [http://de.selfhtml.org/javascript/index.htm Javascript-Dokumentation von selfhtml] |
Zeile 354: |
Zeile 544: |
| | | |
| === Sprachkonstrukte === | | === Sprachkonstrukte === |
| + | ==== Algorithmen und Datenstrukturen ==== |
| + | |
| + | Siehe |
| + | * https://github.com/trekhleb/javascript-algorithms |
| ==== Promises ==== | | ==== Promises ==== |
| Siehe | | Siehe |
Zeile 362: |
Zeile 556: |
| Mit [https://github.com/standard/standard/blob/master/docs/README-en.md JavaScript Standard ] wird ein Coding Standard nicht nur festgelegt, sondern auch automatisch überwacht. | | Mit [https://github.com/standard/standard/blob/master/docs/README-en.md JavaScript Standard ] wird ein Coding Standard nicht nur festgelegt, sondern auch automatisch überwacht. |
| | | |
− | === JavaScript Multitasking === | + | === Inversion of Control === |
| + | |
| + | Auch für JavaScript gibt es Frameworks zum Implementieren des Inversion of Control-Musters: |
| | | |
− | Für Threads in JavvaScript sieht [http://www.sitepoint.com/javascript-threading-html5-web-workers/ HTML5 Web-Workers vor].
| + | * http://inversify.io/ |
| + | * https://www.npmjs.com/package/typescript-ioc |
| | | |
| === jQuery === | | === jQuery === |
Zeile 372: |
Zeile 569: |
| JQuery hat eine Plugin-Architektur, z.B. | | JQuery hat eine Plugin-Architektur, z.B. |
| * [http://tablesorter.com/docs/ TableSorter] zum Ausstatten einer [[HTML]]-Tabelle mit Sortierknöpfen. | | * [http://tablesorter.com/docs/ TableSorter] zum Ausstatten einer [[HTML]]-Tabelle mit Sortierknöpfen. |
| + | |
| + | === JavaScript Multitasking === |
| + | |
| + | Für Threads in JavvaScript sieht [http://www.sitepoint.com/javascript-threading-html5-web-workers/ HTML5 Web-Workers vor]. |
| | | |
| === Service Worker === | | === Service Worker === |
| | | |
− | Mittels Service Worker kann man (als Ersatz für den früheren AppCache) Offline-Applikationen für den Browser schreiben. | + | Mittels Service Worker kann man (als Ersatz für den früheren AppCache) Offline-Applikationen für den Browser schreiben. Die Service Worker sind spezielle Web Worker mit längerem Lebenszyklus. |
| | | |
− | Das Konzept ist aber komplex und man kann [https://gist.github.com/Rich-Harris/fd6c3c73e6e707e312d7c5d7d0f3b2f9 viele falsche Fehler beim Erfassen dieses Konstrukts machen]. | + | Das Konzept ist aber komplex und man kann [https://gist.github.com/Rich-Harris/fd6c3c73e6e707e312d7c5d7d0f3b2f9 viele Fehler beim Erfassen dieses Konstrukts machen]. |
| | | |
| Bereits das Aktualisieren des Service Workers scheint komplex zu sein: | | Bereits das Aktualisieren des Service Workers scheint komplex zu sein: |
| | | |
| + | * Der Service Worker sollte mit einem HTTP-Header ausgeliefert werden, der kein oder nur ein kurzes Caching erlaubt. Z.B. den [[Node.js]]-Server <code>http-server</code> mit der Option <code>-c-1</code> aufrufen. |
| * Im Web-Front-End muss registration.update() aufgerufen werden. | | * Im Web-Front-End muss registration.update() aufgerufen werden. |
| * Im Install-Handler des Service Workers muss self.skipWaiting() und | | * Im Install-Handler des Service Workers muss self.skipWaiting() und |
| * Im Activate-Handler des Service Workers self.clients.claim() aufgerufen werden. | | * Im Activate-Handler des Service Workers self.clients.claim() aufgerufen werden. |
| + | |
| + | Grundsätzlich erlauben die Browser aus Sicherheitsgründen nur HTTP'''S'''-Verbindungen. Zu Entwicklungszwecken kann aber auch der localhost mit einer HTTP-Verbindung genutzt werden, also http://127.0.0.1:PORT |
| | | |
| Siehe | | Siehe |
| + | * https://vaadin.com/pwa/build |
| * https://davidwalsh.name/service-worker-claim | | * https://davidwalsh.name/service-worker-claim |
| * https://serviceworke.rs/immediate-claim_service-worker_doc.html | | * https://serviceworke.rs/immediate-claim_service-worker_doc.html |
| + | * https://vaadin.com/pwa/build/production-pwa-with-webpack-and-workbox |
| | | |
− | === HTTP Long Polling === | + | === HTTP Long Polling und WebSockets === |
| Für HTTP-Long Polling bieten sich JavaScript-[[Closure]]s an. | | Für HTTP-Long Polling bieten sich JavaScript-[[Closure]]s an. |
| Siehe [http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery jQuery-Long Polling Example]. | | Siehe [http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery jQuery-Long Polling Example]. |
| | | |
| In HTML5 gibt es für Server-Push die sogenannten [[WebSocket]]s. [http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery Socket.IO] ist eine JavaScript-Bibliothek, die die Server-Push-Technologie (HTTP Long Poll oder Implementierungen von Websockets) kapselt. | | In HTML5 gibt es für Server-Push die sogenannten [[WebSocket]]s. [http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery Socket.IO] ist eine JavaScript-Bibliothek, die die Server-Push-Technologie (HTTP Long Poll oder Implementierungen von Websockets) kapselt. |
| + | |
| + | ==== WebSockets ==== |
| + | |
| + | Mit |
| + | * https://github.com/danhab99/interactive-websocket-cli |
| + | kann man einen Server und einen Client in der Shell starten, um Websockets ein wenig auszuprobieren. |
| + | |
| + | === Bearbeiten von PDFs mit JavaScript === |
| + | |
| + | [[PDF]]s können derzeit noch nicht mit reinem JavaScript bearbeitet werden, sondern nur entweder erzeugt (PDF.js) oder angezeigt werden. |
| + | |
| + | Siehe |
| + | * http://pdfmake.org |
| + | ** https://www.npmjs.com/package/pdfmake |
| + | * [http://pdfkit.org PDFKit] ist eine JavaScript-Bibliothek, um PDFs zu erzeugen. Einlesen kann sie PDFs nicht<ref>Siehe https://github.com/devongovett/pdfkit/issues/83</ref> (Stand: Mitte 2018). |
| + | * [https://github.com/MrRio/jsPDF jsPDF] ist eine JavaScript-Bibliothek, um PDFs zu erzeugen. Einlesen kann sie PDFs <small>(noch, Stand:Mitte 2018)</small> nicht. |
| + | * [https://github.com/galkahana/HummusJS HummusJS] erzeugt und modifiziert PDF-Dateien. Es läuft in [[Node.js]], nicht im Browser. Es läuft auf Basis der entsprechenden C++-Bibliothek. |
| + | ** [http://pdfhummus.com/ Blog für HummusJS] |
| + | * [https://github.com/won21kr/pdfedit PDFedit] scheint nicht mehr weiterentwickelt zu werden. |
| + | * https://github.com/officeonlinesystems/pdfeditor_chromeextension sollte man sich mal anschauen, ob es etwas hilft. |
| + | * https://stackoverflow.com/questions/742271/generating-pdf-files-with-javascript |
| + | |
| + | Eine Alternative zur Erzeugung von PDFs könnte das Erstellen von SVGs sein: |
| + | * https://www.txtjs.com/ |
| + | |
| + | === Bearbeiten von Word-DOCX-Dokumenten === |
| + | |
| + | Siehe |
| + | * [https://docxtemplater.readthedocs.io/en/latest/faq.html DocxTemplater] |
| + | * [https://github.com/lalalic/docx4js docx4js] - ein Docx-Parser |
| + | * [https://jstool.gitlab.io/demo/preview-ms-word-docx-document-in-browser/ Rendern von Docx im Browser] |
| + | ** basiert auf [https://github.com/mwilliamson/mammoth.js mammoth.js] |
| + | * https://stackoverflow.com/questions/44698896/javascript-library-to-read-doc-and-docx-on-client |
| + | |
| + | Lesen von Word-Docx-Dokumenten |
| + | * [https://www.npmjs.com/package/word-extractor?activeTab=readme word-extractor] - liest nur Text |
| + | * [https://github.com/mwilliamson/mammoth.js mammoth.js] erzeugt simples HTML aus Word. |
| + | ** [https://jstool.gitlab.io/demo/preview-ms-word-docx-document-in-browser/ Mammoth-Online-Demo] |
| + | * [https://www.npmjs.com/package/any-text any-text] ermöglicht, den Text eines Docx-Dokuments auszulesen. |
| + | * [https://github.com/dkiyatkin/node-office node-office] nutzt unoconv zur Extrahierung von Text |
| + | ** [https://wiki.ubuntuusers.de/unoconv/ unoconv] ist ein Kommandozeilentool zur Konvertierung von Office-Dokumenten, das ein installiertes OpenOffice oder LibreOffice nutzt. |
| | | |
| === Google Apps Script === | | === Google Apps Script === |
Zeile 401: |
Zeile 648: |
| * [https://developers.google.com/apps-script/your_first_script Beispiel-Skripterstellung] | | * [https://developers.google.com/apps-script/your_first_script Beispiel-Skripterstellung] |
| * [https://developers.google.com/apps-script/your_first_script Beispiel-Script] | | * [https://developers.google.com/apps-script/your_first_script Beispiel-Script] |
| + | |
| + | === JavaScript DB Frameworks === |
| + | |
| + | ==== JavaScript for PostgreSQL ==== |
| + | |
| + | Siehe |
| + | * [https://www.npmjs.com/package/pg pg ] ist der Standard für Zugriffe von [[Node.js]] auf [[PostgreSQL]] |
| + | ** https://www.npmjs.com/package/pg-types |
| + | ** https://github.com/brianc/node-postgres |
| + | * [[slonik]] ist insbesondere für [[TypeScript]]-Nutzer eine Möglichkeit, weitgehend typensicher SQL-Code zu schreiben und trotzdem uneingeschränkt SQL-Code zu nutzen. |
| + | * [https://www.npmjs.com/package/pg-promise pg-promise] baut auf pg auf und ermöglicht insbesondere Transaktionsmanagement mittels [[Promise]]s. |
| + | * [https://www.npmjs.com/package/knex knex ] ist ein SQL-Dialekt-übergreifende Möglichkeit, SQL in JavaScript-Funktionsaufrufen zu schreiben. Es unterstützt u.a. auch [[PostgreSQL]] via [[pg]]. Siehe |
| + | ** [https://knexjs.org/ Knex-Homepage mit Dokumentation] |
| + | ** Siehe aus dem [[Java]]-Bereich dazu auch [[JOOQ]] |
| + | * [https://www.npmjs.com/package/bookshelf Bookshelf.js] ist eine "leichte" ORM-Ebene, die sich [[Knex]] bedient. Für spezielle Abfragen kann auf Knex zurückgegriffen werden. |
| + | |
| + | ===== JavaScript for PostgresSQL NOTIFY/LISTEN ===== |
| + | |
| + | |
| + | * https://github.com/andywer/pg-listen |
| + | * https://www.npmjs.com/package/pg-pubsub |
| + | * https://github.com/emilbayes/pg-ipc |
| + | |
| + | === JavaScript UI Frameworks === |
| + | |
| + | ==== React ==== |
| + | [[React]] ist ein von Facebook entwickeltes Framework zum Darstellen von HTML-UI-Komponenten. Es gibt es auch in einer React Native-"Geschmack" zum Erstellen von nativen [[Android]]- oder [[iOS]]-Apps. |
| + | |
| + | ==== Angular ==== |
| + | Siehe [[Angular]] |
| + | |
| + | ==== Slim.js ==== |
| + | |
| + | Siehe https://github.com/slimjs/slim.js/wiki |
| + | |
| + | === Bauen eines DSL-Parsers in JavaScript === |
| + | |
| + | Siehe |
| + | * [https://tomassetti.me/parsing-in-javascript/ Grundsätzliches zum Parsen in Javascript] |
| + | * Earley |
| + | * Nearley |
| + | ** https://medium.com/@gajus/parsing-absolutely-anything-in-javascript-using-earley-algorithm-886edcc31e5e |
| + | * PEG.js kann mit Hilfe eines Plugins auch TypeScript-Parser bauen. |
| + | |
| + | === Diagramme darstellen in Javascript === |
| + | |
| + | ==== Darstellung von Graphen ==== |
| + | |
| + | Siehe |
| + | * [https://js.cytoscape.org/ Cytoscape] (MIT-Lizenz) |
| + | * [https://mermaid.js.org/ mermaid.js] - Darstellung von in Text-Notation beschriebenen Graphen |
| + | ** https://blog.ordix.de/flowcharts-as-code-mit-mermaid-js |
| + | * https://github.com/jpb12/react-tree-graph |
| + | * [https://kroki.io/ Kroki] ist ein freier HTTP-Dienst, der Diagramme erzeugt. Er basiert auf Open Source. |
| + | |
| + | === Test JavaScript === |
| + | |
| + | Zur Steuerung von Webbrowsern bzw. zum Simulieren von Webbrowser-Nutzung siehe |
| + | * [[Selenium]] (steuert verschiedene Browser) |
| + | * https://github.com/puppeteer/puppeteer - Puppeteer lädt eine passende [[Chromium]]-Version herunter |
| + | * [https://en.wikipedia.org/wiki/PhantomJS PhantomJS] (basiert auf WebKit, wird nicht mehr weiterentwickelt) |
| + | * CasperJS (basiert auf PhantomJS) |
| + | * [https://slimerjs.org SlimerJS] (basiert auf Gecko, der [[Firefox]]-Engine) |
| + | |
| + | Unit-Tests: |
| + | * [[Jest]] - ein JavaScript / [[TypeScript]]-Test-Framework einschließlich Mocking-Hilfsmittel |
| + | * [https://mochajs.org/ Mocha] |
| | | |
| == PHP == | | == PHP == |
Zeile 409: |
Zeile 723: |
| | | |
| [http://hueniverse.com/oauth/ OAuth] ist ein offener Standard zur Identifizierung für einzelne Web-Dienste. Der Upgrade auf Oauth 2.0 wird von manchen Beteiligten kritisch gesehen. | | [http://hueniverse.com/oauth/ OAuth] ist ein offener Standard zur Identifizierung für einzelne Web-Dienste. Der Upgrade auf Oauth 2.0 wird von manchen Beteiligten kritisch gesehen. |
| + | |
| + | Siehe auch |
| + | * [[OpenID]] |
| + | * [https://hubzilla.org//page/hubzilla/hubzilla-project Hubzilla-Projekt] |
| | | |
| == OPA == | | == OPA == |
| | | |
− | [http://doc.opalang.org/ OPA] ist eine Programmiersprache, deren Ausführung unbemerkt vom Entwickler sowohl auf dem Server (mit Datenbank) als auch auf dem Client läuft. | + | [http://opalang.org/ OPA] ist eine Programmiersprache, deren Ausführung unbemerkt vom Entwickler sowohl auf dem Server (mit Datenbank) als auch auf dem Client läuft. |
| + | |
| + | * https://www.openpolicyagent.org/docs/latest/policy-language/ |
| | | |
| == Webservices == | | == Webservices == |
Zeile 428: |
Zeile 748: |
| [[Category:Informationstechnik]] | | [[Category:Informationstechnik]] |
| [[Category:Softwareentwicklung]] | | [[Category:Softwareentwicklung]] |
| + | [[Category:Datenbank]] |
| [[Category:Java-Tipps]] | | [[Category:Java-Tipps]] |
| [[Category:Podcast]] | | [[Category:Podcast]] |