Änderungen

Zur Navigation springen Zur Suche springen
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 ====
   −
CouchDB ist ein [[OpenSource]]-Datenbank-System, das über eine [[REST]]-Schnittstelle gesteuert wird. Mit PouchDB gibt es eine Replikation im Browser, so dass offline weitergearbeitet werden kann.
+
Siehe [[CouchDB]]
   −
Siehe
+
==== Echtzeit-Datenbanken ====
* den [http://guide.couchdb.org/draft/index.html#part/i Definitive Guide]
  −
* die [http://sitr.us/2009/06/30/database-queries-the-couchdb-way.html Suche nach Substrings mittels Indizes]
  −
* [http://pouchdb.com/2014/06/17/12-pro-tips-for-better-code-with-pouchdb.html Design Patterns für PouchDB] (gelten im Regelfall auch für CouchDB)
  −
* [https://pouchdb.com/2015/04/05/filtered-replication.html Gefilterte Replikation zur Vermeidung zu hohen Datentransfervolumens]
  −
* [https://github.com/pouchdb-community/pouchdb-authentication#couchdb-authentication-recipe PouchDB Authentication] (Browser-Seite)
      +
* https://rethinkdb.com/
 +
* Die in Google Firebase integrierte Echtzeitdatenbank
 +
** https://levelup.gitconnected.com/todo-app-using-firebase-react-typescript-ea0a34bd417d
 +
* [[SurrealDB]]
 +
* [[Supabase]]
   −
===== Einrichten eines Administrators =====
+
=== 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]
   −
Zu Beginn kann jeder Nutzer in CouchDB alles ändern und lesen. Das nennt man die Admin Party. Diese kann durch Erzeugen eines Administrators zerstört werden.
+
=== Datenbanken im Browser ===
  curl -s -X PUT http://localhost:5984/_node/couchdb@localhost/_config/admins/admin -d '"admin_pw"'
      +
* 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
   −
===== Views =====
+
* [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
   −
Um eine View "words", die einem Designdokument "_design/myDesignDoc" in der Datenbank "texts", hinterlegt ist, zu nutzen, ruft man sie folgendermaßen auf:
+
=== Datenbank-Frontends ===
  curl -X GET 'http://localhost:5984/texts/_design/myDesignDoc/_view/words?startkey="Man"&endkey="Manz"' | python -m json.tool
     −
Damit erhält man mehrere Datensätze, die zuvor mit der emit()-Funktion erzeugt wurden. Will man nur Treffer für einen bestimmten Schlüssel, ersetzt man die startkey und endkey durch ein einzelnes <code>key=SUCHWORT</code>.
+
* [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
   −
Will man sich die Ausgangsdokumente gleich mit anzeigen lassen, nimmt man den zusätzlichen Parameter <code>include_docs=true</code>.<ref>Vgl. http://docs.couchdb.org/en/latest/ddocs/views/collation.html</ref>
+
=== Datenbank-Frontend in der Cloud ===
   −
===== PouchDB =====
+
* https://restdb.io/features/
   −
Bei einer Replikation von CouchDB zu PouchDB ist die <code>retry</code>-Option wichtig, um das Abbrechen der Replikation zu vermeiden. Beispiel:
+
=== Append-only Datenbanken ===
  var localdb=new PouchDB("mylocalDB");
  −
  var remoteDB=new PouchDB("http://www.example.com:5984/couchdb/myremoteDB");
  −
  localdb.replicate.from(remoteDB,{ retry:true })
  −
      .on('complete', function() {
  −
      status("Replication completed.");
  −
    }).on('error', function(err) {
  −
        status("an Error occured: "+err);
  −
       
  −
        ergebnis(err);
  −
    }).on('change', function(change) {
  −
      counter++;
  −
      status("Change #"+counter+": "+change);
  −
    });
      +
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.
   −
===== Fehlerbehebung =====
+
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
   −
Unter Linux Mint 18 gab es nach dem Upgrade auf Version 2.1.1-1~xenial von CouchDB folgenden Fehler ("internal_server_error"): <cite>No DB shards could be opened.</cite>.
     −
Abhilfe schaffte ein Downgrade auf Version 2.1.0~xenial. Dazu geht man in der Beschreibung des Pakets <code>couchdb</code> in <code>aptitude</code> ganz nach unten. Hier werden die möglichen Versionen angezeigt, die dann wie Pakete installiert werden können. Mit der Taste ''F'' bei Version 2.1.1-1~xenial kann dann noch verhindert werden, dass bei einer normalen Aktualisierung dieses Paket wieder mitinstalliert wird.
+
Siehe auch
 +
* https://www.dolthub.com/blog/2022-03-21-immutable-database/
 +
* https://en.wikipedia.org/wiki/Merkle_tree
    
== Webbrowser steuern ==
 
== Webbrowser steuern ==
Zeile 229: 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 253: 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 275: 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 385: Zeile 511:     
* [http://www.webreference.com/authoring/languages/Lightweight-Languages/index.html Textile und Markdown] sind sog. leichtgewichtige Markup-Sprachen, die in HTML konvertiert werden können.
 
* [http://www.webreference.com/authoring/languages/Lightweight-Languages/index.html Textile und Markdown] sind sog. leichtgewichtige Markup-Sprachen, die in HTML konvertiert werden können.
 +
** Siehe auch [[Markdown]]
 
** Zu Textile siehe auch das Xilize-Plugin für den Editor [[jEdit]].
 
** Zu Textile siehe auch das Xilize-Plugin für den Editor [[jEdit]].
    
== 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 399: Zeile 543:  
Siehe auch [[HTML5]] und [[HTML für Smartphones]].
 
Siehe auch [[HTML5]] und [[HTML für Smartphones]].
   −
=== JavaScript Multitasking ===
+
=== Sprachkonstrukte ===
 +
==== Algorithmen und Datenstrukturen ====
 +
 
 +
Siehe
 +
* https://github.com/trekhleb/javascript-algorithms
 +
==== Promises ====
 +
Siehe
 +
* https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html
 +
 
 +
=== Coding Style ===
 +
 
 +
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.
 +
 
 +
=== 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 410: Zeile 570:  
* [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.
   −
=== HTTP Long Polling ===
+
=== JavaScript Multitasking ===
 +
 
 +
Für Threads in JavvaScript sieht [http://www.sitepoint.com/javascript-threading-html5-web-workers/ HTML5 Web-Workers vor].
 +
 
 +
=== Service Worker ===
 +
 
 +
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 Fehler beim Erfassen dieses Konstrukts machen].
 +
 
 +
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 Install-Handler des Service Workers muss self.skipWaiting() und
 +
* 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
 +
* https://vaadin.com/pwa/build
 +
* https://davidwalsh.name/service-worker-claim
 +
* https://serviceworke.rs/immediate-claim_service-worker_doc.html
 +
* https://vaadin.com/pwa/build/production-pwa-with-webpack-and-workbox
 +
 
 +
=== 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].
Zeile 416: Zeile 601:  
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 423: 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 431: 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 450: Zeile 748:  
[[Category:Informationstechnik]]
 
[[Category:Informationstechnik]]
 
[[Category:Softwareentwicklung]]
 
[[Category:Softwareentwicklung]]
 +
[[Category:Datenbank]]
 
[[Category:Java-Tipps]]
 
[[Category:Java-Tipps]]
 
[[Category:Podcast]]
 
[[Category:Podcast]]

Navigationsmenü