Änderungen

Zur Navigation springen Zur Suche springen
14.592 Bytes hinzugefügt ,  Freitag um 11:05
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
 +
 +
=== Sprachmodelle ===
 +
 +
Viele andere Sprachmodelle kann man auch lokal (und kostenlos) testen. 32GB sind aber mindestens erforderlich, 64GB machen die Nutzung rascher.
 +
 +
Als Tool bieten sich an:
 +
* [https://msty.ai/ Msty] an.
 +
* GPT4all
 +
 +
=== Spracherkennung ===
 +
 +
* https://gnulinux.ch/open-source-spracherkennung
 +
* https://www.notdefine.de/projects/nerd-dictation-spracheingabe-unter-linus-in-deutsch
 +
* https://github.com/QuantiusBenignus/BlahST
    
== Datenbanken ==
 
== Datenbanken ==
Zeile 133: Zeile 202:  
* [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 152: Zeile 237:  
* 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 =====
+
===== CSV im Browser mit SQL bearbeiten =====
 +
 
 
Siehe
 
Siehe
* http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows
+
* https://datakit.page/
 +
* [[DuckDB]]
    
==== HSQLDB ====
 
==== HSQLDB ====
    
HSQLDB ist eine kleine Java-Datenbank, die auch In-Memory-Tabellen bietet. Zusammen mit Hibernate kann sie auch als Persistenzschicht für POJOs genutzt werden.
 
HSQLDB ist eine kleine Java-Datenbank, die auch In-Memory-Tabellen bietet. Zusammen mit Hibernate kann sie auch als Persistenzschicht für POJOs genutzt werden.
 +
 +
==== AlaSQL ====
 +
[https://github.com/AlaSQL/alasql/wiki/Sql AlaSQL] ist eine SQL-Abfragesprache für JSON-Daten. AlaSQL kann auch Excel-Tabellen lesen.
    
=== 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.
 +
 +
==== Convex ====
 +
 +
[https://www.convex.dev/ Convex]
 +
 +
* TypeScript im Server und im Client
 +
* Authentication
 +
* Authorization (sehr flexibel)
 +
* Nutzt generierten Code im Client - Projektstruktur wird von Convex grundsätzlich vorgegeben.
 +
* hat derzeit (Dezember 2025) [https://stack.convex.dev/object-sync-engine keine vollständige Offline-Funktionalität]. Aber angeblich schaut sich das Convex-Team das näher an.
    
==== CouchDB ====
 
==== CouchDB ====
    
Siehe [[CouchDB]]
 
Siehe [[CouchDB]]
 +
 +
==== Echtzeit-Datenbanken ====
 +
 +
* [[AceBase]]
 +
* 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 354:     
* [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 395:  
* [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 422:  
* [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 549:     
== 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 578:     
=== Sprachkonstrukte ===
 
=== Sprachkonstrukte ===
 +
==== Algorithmen und Datenstrukturen ====
 +
 +
Siehe
 +
* https://github.com/trekhleb/javascript-algorithms
 
==== Promises ====
 
==== Promises ====
 
Siehe
 
Siehe
 
* https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html
 
* https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html
 +
 +
==== Module ====
 +
 +
In JavaScript haben sich verschiedene Formate für Module etabliert.
 +
 +
Allerdings scheint zumindest in ES6 nicht mehr sicher zu sein, dass beim Import eines
 +
Moduls von mehreren verschiedenen Modulen dieses eine Modul als Singleton importiert
 +
wird. Siehe Kommentare zur [https://stackoverflow.com/questions/69896862/javascript-imports-do-they-duplicate Stackoverflow-Frage].
    
=== Coding Style ===
 
=== Coding Style ===
Zeile 362: Zeile 598:  
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 611:  
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:
Zeile 394: Zeile 637:  
* https://vaadin.com/pwa/build/production-pwa-with-webpack-and-workbox
 
* 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 ===
 
=== Bearbeiten von PDFs mit JavaScript ===
Zeile 417: Zeile 666:  
Eine Alternative zur Erzeugung von PDFs könnte das Erstellen von SVGs sein:
 
Eine Alternative zur Erzeugung von PDFs könnte das Erstellen von SVGs sein:
 
* https://www.txtjs.com/
 
* 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.
 +
 +
=== Scannen mit JavaScript ===
 +
 +
Dokumente scannen kann man wohl auch aus dem Browser: Siehe
 +
* https://www.npmjs.com/package/scanner-js
 +
 +
Aber auch das übliche Client-Server-Modell wird in JavaScript verwirklicht:
 +
* https://github.com/sbs20/scanservjs
    
=== Google Apps Script ===
 
=== Google Apps Script ===
Zeile 425: Zeile 699:  
* [https://developers.google.com/apps-script/your_first_script Beispiel-Script]
 
* [https://developers.google.com/apps-script/your_first_script Beispiel-Script]
   −
=== JavaScript UI Framworks ===
+
=== 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 ====
React ist ein von Facebook entwickeltes Framework zum Darstellen von HTML-UI-Komponenten.  
+
[[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.
Siehe auch
  −
* [https://stackoverflow.com/questions/38033442/big-list-performance-with-react Darstellen langer Listen mit React]
      
==== Angular ====
 
==== Angular ====
Zeile 438: Zeile 732:     
Siehe https://github.com/slimjs/slim.js/wiki
 
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 Kuchen- und Balkendiagrammen ====
 +
 +
* https://plotly.com/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 ===
 
=== Test JavaScript ===
Zeile 443: Zeile 760:  
Zur Steuerung von Webbrowsern bzw. zum Simulieren von Webbrowser-Nutzung siehe
 
Zur Steuerung von Webbrowsern bzw. zum Simulieren von Webbrowser-Nutzung siehe
 
* [[Selenium]] (steuert verschiedene Browser)
 
* [[Selenium]] (steuert verschiedene Browser)
* [https://en.wikipedia.org/wiki/PhantomJS PhantomJS] (basiert auf WebKit)
+
* 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)
 
* CasperJS (basiert auf PhantomJS)
 
* [https://slimerjs.org  SlimerJS] (basiert auf Gecko, der [[Firefox]]-Engine)
 
* [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 454: Zeile 776:     
[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 473: Zeile 801:  
[[Category:Informationstechnik]]
 
[[Category:Informationstechnik]]
 
[[Category:Softwareentwicklung]]
 
[[Category:Softwareentwicklung]]
 +
[[Category:Datenbank]]
 
[[Category:Java-Tipps]]
 
[[Category:Java-Tipps]]
 
[[Category:Podcast]]
 
[[Category:Podcast]]

Navigationsmenü