Softwareentwicklung: Unterschied zwischen den Versionen

Aus CodicaTipps
Zur Navigation springen Zur Suche springen
 
(155 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
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 16: Zeile 17:
 
=== Teamorganisation ===
 
=== Teamorganisation ===
  
 +
==== Agile Entwicklung ====
 
* [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?]
 +
 +
==== 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 31: Zeile 42:
  
 
=== Projektmanagement ===
 
=== Projektmanagement ===
* 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://wiki.netbeans.org/MavenBestPractices Netbeans Maven Best Practices]
 
** [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)
 
  
 +
==== Apache Maven ====
 +
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://wiki.netbeans.org/MavenBestPractices Netbeans Maven Best Practices]
 +
* [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)
 +
* 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 =====
 +
 +
Um eine Main Class z.B. in einem mit Netbeans erzeugten Maven-Projekt festzulegen, kann man Folgendes<ref>Vgl. http://www.ibm.com/developerworks/library/j-5things13/</ref> zur pom.xml hinzufügen:
 +
 +
    <build>
 +
      <plugins>
 +
        <plugin>
 +
            <groupId>org.apache.maven.plugins</groupId>
 +
            <artifactId>maven-jar-plugin</artifactId>
 +
            <version>2.3.2</version>
 +
            <configuration>
 +
                <archive>
 +
                    <manifest>
 +
                        <addClasspath>true</addClasspath>
 +
                        <classpathPrefix>lib/</classpathPrefix>
 +
                        <mainClass>MYPACKAGE.MYMAINCLASS</mainClass>
 +
                    </manifest>
 +
                </archive>
 +
            </configuration>
 +
        </plugin>
 +
        <plugin>
 +
          <groupId>org.apache.maven.plugins</groupId>
 +
          <artifactId>maven-dependency-plugin</artifactId>
 +
          <version>1.0</version>
 +
          <executions>
 +
              <execution>
 +
                  <id>copy</id>
 +
                  <phase>install</phase>
 +
                  <goals>
 +
                      <goal>copy-dependencies</goal>
 +
                  </goals>
 +
                  <configuration>
 +
                      <outputDirectory>
 +
                        ${project.build.directory}/lib
 +
                      </outputDirectory>
 +
                  </configuration>
 +
              </execution>
 +
          </executions>
 +
        </plugin>
 +
      </plugins>
 +
    </build>
 +
 +
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.
 +
 +
===== 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 ====
 
Softwareprojekte sind auch ganz herkömmliche Projekte. Zum Projektmanagement allgemein siehe [http://www.olev.de/p/projekt.htm Lexikoneintrag mit weiteren Nachweisen]. Für das Projektmanagement gibt es verschiedenste Projektmanagementsoftware.  
 
Softwareprojekte sind auch ganz herkömmliche Projekte. Zum Projektmanagement allgemein siehe [http://www.olev.de/p/projekt.htm Lexikoneintrag mit weiteren Nachweisen]. Für das Projektmanagement gibt es verschiedenste Projektmanagementsoftware.  
 
Außerdem gibt es noch Online-Sites, die Projektmanagement anbieten. Z.B.:
 
Außerdem gibt es noch Online-Sites, die Projektmanagement anbieten. Z.B.:
Zeile 46: Zeile 127:
  
 
* Zu Subversion siehe [[Versionsmanagement-Tipps]]
 
* Zu Subversion siehe [[Versionsmanagement-Tipps]]
 +
 +
=== Test ===
 +
 +
Das Testen von Sofwareprodukten ist ein wichtiger Bestandteil der Entwicklung.
 +
 +
Neben der manuellen Kontrolle, für die es auch Testmethoden und -tools gibt, sollte die Automatisierung von Tests eine wichtige Rolle einnehmen. Letztere sind zwar beim ersten Mal meist aufwändiger, rentieren sich aber über die Laufzeit eines Projekts, weil sie Rückschritte bei der Entwicklung verhindern können, da sie bei jeder Änderung ohne großen Aufwand erneut durchlaufen werden können.
 +
 +
Zu unterscheiden sind
 +
* Unit-Tests (dabei werden einzelne Funktionen getestet)
 +
* Integrations-Tests (dabei wird das Zusammenspiel vieler Komponenten, teilweise auch auf verschiedenen Maschinen getestet)
 +
* Oberflächen-Tests (dabei wird die GUI getestet).
 +
 +
Für Oberflächentests gibt es verschiedenste Tools, z.B.
 +
* [[Selenium]] für den Test von Webanwendungen
 +
* [https://de.wikipedia.org/wiki/Tosca_%28Software%29 Tosca], eine proprietäre Testsuite u.a. zum Test von [[Java]]-Desktopanwendungen z.B. mit [[Swing]]
 +
* [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]]
 +
 +
=== 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 51: 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 66: 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 78: Zeile 216:
 
* [http://forum.chip.de/php-mysql-etc/rechte-phpmyadmin-360637.html Zugriff von phpMyAdmin (Setzen der Zugriffsrechte)]: Die Rechte in der Datei <code>/etc/dbconfig-common/phpmyadmin.conf</code> werden mit folgendem Befehl geändert und umgesetzt:
 
* [http://forum.chip.de/php-mysql-etc/rechte-phpmyadmin-360637.html Zugriff von phpMyAdmin (Setzen der Zugriffsrechte)]: Die Rechte in der Datei <code>/etc/dbconfig-common/phpmyadmin.conf</code> werden mit folgendem Befehl geändert und umgesetzt:
 
   sudo dpkg-reconfigure phpmyadmin
 
   sudo dpkg-reconfigure phpmyadmin
 +
 +
 +
===== CSV in MySQL importieren =====
 +
 +
Siehe
 +
* http://code.dedu.ch/2011/07/csv-file-direkt-in-mysql-importieren/
 +
 +
==== 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.
  
 
=== NoSQL ===
 
=== NoSQL ===
 +
 +
Siehe
 +
 +
* [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.
+
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
  
* Siehe den [http://guide.couchdb.org/draft/index.html#part/i Definitive Guide]
+
=== 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]
 +
 
 +
 
 +
Siehe auch
 +
* https://www.dolthub.com/blog/2022-03-21-immutable-database/
 +
* https://en.wikipedia.org/wiki/Merkle_tree
  
 
== Webbrowser steuern ==
 
== Webbrowser steuern ==
Zeile 103: Zeile 317:
  
 
* [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 116: Zeile 347:
 
* Zueinander passende Farben findet man bei  
 
* Zueinander passende Farben findet man bei  
 
** [http://www.colorexplorer.com/ colorexplorer.com]
 
** [http://www.colorexplorer.com/ colorexplorer.com]
 +
 +
Siehe auch
 +
* http://www.html-seminar.de/design_per_css_-_float.htm
  
 
== HTML ==
 
== HTML ==
Zeile 124: Zeile 358:
 
* [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 133: Zeile 372:
 
Mit HTML5 lassen sich auch Offline-Apps erstellen, z.B. [http://sixrevisions.com/web-development/html5-iphone-app/ für das iPhone].
 
Mit HTML5 lassen sich auch Offline-Apps erstellen, z.B. [http://sixrevisions.com/web-development/html5-iphone-app/ für das iPhone].
 
Der [http://www.quirksmode.org/blog/archives/2010/03/html5_apps.html Vorzug von HTML5-Apps] gegenüber [[Android]]- bzw. [[iPhone]]-Apps ist die relative [[Plattformunabhängigkeit]].
 
Der [http://www.quirksmode.org/blog/archives/2010/03/html5_apps.html Vorzug von HTML5-Apps] gegenüber [[Android]]- bzw. [[iPhone]]-Apps ist die relative [[Plattformunabhängigkeit]].
 +
 +
Siehe
 +
* [http://www.selfhtml5.org/ SelfHtml5 - Blog rund um HTML5]
  
 
Siehe Beispiel-Apps bei
 
Siehe Beispiel-Apps bei
 
* [http://miniapps.co.uk/ miniapps.co.uk]
 
* [http://miniapps.co.uk/ miniapps.co.uk]
 +
 +
 +
==== HTML5 Canvas ====
 +
 +
Siehe u.a.
 +
* [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]
 +
 +
==== 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 ====
 +
===== React =====
 +
Siehe [[React]]
 +
===== Ember.js =====
 +
 +
Ember.js ist wie [[AngularJS]] ein umfassendes Javascript-Framework.
 +
 +
Neben der [https://guides.emberjs.com offiziellen guten Dokumentation] gibt es auch verschiedene Bücher, z.B.
 +
* [https://leanpub.com/ember-cli-101/read EmberCli 101], online kostenlos zu lesen
 +
* [http://www.jeffreybiles.com/build-pacman Build Pacman mit Ember.js]
 +
* [https://www.netguru.co/blog/free-ember-run-loop-guide kostenloses Ebook zur Ember Run Loop]
 +
 +
* [http://emberwatch.com/books.html Übersicht über Ember-Bücher bei Emberwatch.com]
 +
 +
===== AngularJS =====
 +
====== Allgemeines zu AngularJs ======
 +
Siehe
 +
* [http://www.ng-newsletter.com/posts/how-to-learn-angular.html How to learn Angular - Post]
 +
 +
====== AngularJS 2.0 ======
 +
 +
Die Version 2.0 kommt einer Neuprogrammierung des Frameworks, allerdings mit einem Upgrade-Pfad, gleich. Die Version 2.0 verzichtet dabei auf Browserunterstützung des Internet Explorers vor Version 10. Favorisierte Programmiersprache des von [[Google]] gestützten Frameworks ist die als [[Open Source]] veröffentlichte Programmiersprache [[TypeScript]].
 +
 +
Einen ersten Einblick liefert [http://www.heise.de/developer/artikel/Vorschau-auf-AngularJS-2-2595545.html?artikelseite=4 ein Artikel auf heise Developper].
 +
 +
====== AngularJS and Google Visualization API ======
 +
 +
[http://gavindraper.com/2013/07/30/google-charts-in-angularjs/ AngularJS und Google Visualization API arbeiten etwas holprig zusammen:] AngularJS darf erst arbeiten, wenn die Google Visualization API geladen ist.
 +
 +
Daher darf das <code>ng-app</code>-Attribut nicht im HTML-Quellcode stehen, sondern die Zuordnung zur AngularJS-App muss dynamisch nach dem Laden der Visualisierungs-API geladen werden<ref>http://gavindraper.com/2013/07/30/google-charts-in-angularjs</ref>:
 +
 +
  google.setOnLoadCallback(function () { 
 +
      angular.bootstrap(document.body, ['my-app']);
 +
  });
 +
  google.load('visualization', '1', {packages: ['corechart']});
  
 
=== HTML für Smartphones ===
 
=== HTML für Smartphones ===
Zeile 152: Zeile 448:
 
* [http://www.emanueleferonato.com/2007/08/22/create-a-lightbox-effect-only-with-css-no-javascript-needed/ leichtgewichtige Lightbox] ([http://www.webreference.com/programming/javascript/CSS-Only-Lightbox/ weitere Erläuterung])
 
* [http://www.emanueleferonato.com/2007/08/22/create-a-lightbox-effect-only-with-css-no-javascript-needed/ leichtgewichtige Lightbox] ([http://www.webreference.com/programming/javascript/CSS-Only-Lightbox/ weitere Erläuterung])
  
 +
=== Treemap ===
 +
 +
Treemaps stellen hierarchische Datenstrukturen in verschieden großen Flächen, z.B. Rechtecken, dar.
 +
 +
Für HTML/Javascript/CSS gibt es dazu verschiedene frei nutzbare Hilfsmittel
 +
 +
* jQWidget [https://www.jqwidgets.com/jquery-widgets-documentation/documentation/jqxtreemap/jquery-treemap-getting-started.htm jqxTreemap]
 +
* [http://jstreemap.com/ JsTreemap.com] lässt sich frei verwenden. Es erzeugt per Javascript ein Canvas-Element <small>(also nicht für jeden Knoten ein HTML-Element)</small>, in das es den gesamten Treemap einzeichnet. Es kann weitgehend auf Benutzerwünsche angepasst werden.
 +
* das Treemap-Modul von D3.js, das z.B. auf [http://bost.ocks.org/mike/treemap/ diesem Blogartikel] genutzt wird
 +
* [https://github.com/imranghory/treemap-squared/ treemap-squared] legt den Fokus auf schönes Aussehen, allerdings scheint darunter die Interaktivität zu leiden.
 +
* Google Visualization (nicht offline nutzbar)
 +
* [https://philogb.github.io/jit/static/v20/Jit/Examples/Treemap/example1.code.html Treemap-Modul] des [http://philogb.github.io/jit/ Javascript InfoViz Toolkit]
 +
** [https://philogb.github.io/jit/static/v20/Docs/files/Loader/Loader-js.html#Loader.loadJSON Beschreibung des JSON-Datenformats für Treemap]
 +
 +
=== HTML5 Drag and Drop ===
 +
 +
Mit HTML5 ist es u.a. möglich, Elemente einer Webseite aus dieser heraus- und in eine andere geöffnete Webseite mit der Maus zu ziehen. Die entsprechende API [http://thecssninja.com/talks/dnd_and_friends/ war ursprünglich im Internet Explorer implementiert] und wurde dann standardisiert.
 +
 +
Neben dem Attribut <code>draggable=true</code> muss [http://thecssninja.com/talks/dnd_and_friends/ für WebKit-Browser noch mit etwas CSS nachgeholfen werden]. Firefox scheint auch entsprechende [[JavaScript]]- drag- und -drop-Handler zu benötigen.
 +
 +
=== Hyperlinks zu nativen Anwendungen ===
 +
Unter den verschiedenen Betriebssystemen lassen sich auch aus dem Browser native Anwendungen starten. Dazu muss man dem Betriebssystem einen Protokollhandler für ein bestimmtes Protokoll bekannt machen.
 +
 +
In Windows muss man dazu die [https://support.shotgunsoftware.com/entries/86754-How-to-launch-external-applications-using-custom-protocols-rock-instead-of-http- Registry ändern].
 +
 +
Siehe auch
 +
* [https://support.shotgunsoftware.com/entries/86754-How-to-launch-external-applications-using-custom-protocols-rock-instead-of-http- Anleitung für Hyperlinks zu nativen Anwendungen auf shotgunsoftware.com]
 +
* [http://stackoverflow.com/questions/389204/how-do-i-create-my-own-url-protocol-e-g-so Frage zu Scheme Handlern auf stackoverflow.com]
 +
 +
 +
Unter Windows kann man nicht nur Handler für eigene Protokolle (z.B.: ''"office:"'') registrieren, sondern auch Handler für Dateitypen (MIME-Handler), die bereits vor dem Herunterladen der Datei aufgerufen werden und so die Art des Herunterladens bestimmen können.<ref>Siehe https://msdn.microsoft.com/de-de/library/jj215788%28v=vs.85%29.aspx</ref>
  
 
=== REST ===
 
=== REST ===
Zeile 172: Zeile 499:
 
* [http://phprestsql.sourceforge.net/ Spielwiese auf PHP/MySQL-Basis]
 
* [http://phprestsql.sourceforge.net/ Spielwiese auf PHP/MySQL-Basis]
 
* [http://jacwright.com/250/simple-rest-server-in-php-supports-json-amf/ Simple Rest Server in PHP]
 
* [http://jacwright.com/250/simple-rest-server-in-php-supports-json-amf/ Simple Rest Server in PHP]
 +
 +
* [http://restsql.org/doc/Overview.html restSQL] - eine [[Java]]-Programmierschnittstelle, um möglichst einfach auf [[SQL]]-Daten mittels [[Rest]]-Clients zuzugreifen.
 +
* [http://sqlrest.sourceforge.net/ sqlREST] - eine andere Mittelschicht zwischen Http/Rest-Client und SQL-Datenbank, die in [[Java]] programmiert wurde
 +
 +
* [http://www.dreamfactory.com/features Dreamfactoy] - eine [[Open Source]] - REST-Schnittstelle zu [[SQL]]-Datenbanken. Zusätzlich werden noch APIs u.a. für AngularJS angeboten.
  
 
=== Alternativen zu HTML ===
 
=== Alternativen zu HTML ===
  
 
* [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 186: Zeile 536:
 
* [http://www.ooowiki.de/JavaScript Kurze Übersicht über JavaScript]
 
* [http://www.ooowiki.de/JavaScript Kurze Übersicht über JavaScript]
 
* [http://www.heise.de/developer/artikel/Konsole-Currying-2049605.html Blog "Konsole&Kontext" über funktionale Sprachen insbesondere am Beispiel JavaScript]
 
* [http://www.heise.de/developer/artikel/Konsole-Currying-2049605.html Blog "Konsole&Kontext" über funktionale Sprachen insbesondere am Beispiel JavaScript]
 +
* [https://leanpub.com/understandinges6/read Neuerungen in ECMAScript 2015 bzw. ECMAScript6]
  
 
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 200: Zeile 567:
 
* [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 206: Zeile 598:
 
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 213: Zeile 645:
 
* [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
 +
 +
=== 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 221: Zeile 719:
  
 
[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 ==

Aktuelle Version vom 15. Juli 2024, 13:35 Uhr

Aktuelles

Siehe

Programmiertechniken

Einführung in die Programmierung

Programmieren für Kinder

Mit scratch lassen sich einfache Skripte mit der Maus zusammensetzen.

Teamorganisation

Agile Entwicklung

V-Modell XT

Der IT-Beauftragte der Bundesregierung empfiehlt zur Systementwicklung das so genannte "V-Modell XT".

Siehe

Design Patterns

Sicherheit

Projektmanagement

Apache Maven

Zu Apache Maven siehe


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 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

Um eine Main Class z.B. in einem mit Netbeans erzeugten Maven-Projekt festzulegen, kann man Folgendes[1] zur pom.xml hinzufügen:

   <build>
     <plugins>
        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jar-plugin</artifactId>
           <version>2.3.2</version>
           <configuration>
               <archive>
                   <manifest>
                       <addClasspath>true</addClasspath>
                       <classpathPrefix>lib/</classpathPrefix>
                       <mainClass>MYPACKAGE.MYMAINCLASS</mainClass>
                   </manifest>
               </archive>
           </configuration>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
         <version>1.0</version>
         <executions>
             <execution>
                 <id>copy</id>
                 <phase>install</phase>
                 <goals>
                     <goal>copy-dependencies</goal>
                 </goals>
                 <configuration>
                     <outputDirectory>
                       ${project.build.directory}/lib
                     </outputDirectory>
                 </configuration>
             </execution>
         </executions>
       </plugin>
     </plugins>
   </build>

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 target/ 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

Projektmanagement allgemein

Softwareprojekte sind auch ganz herkömmliche Projekte. Zum Projektmanagement allgemein siehe Lexikoneintrag mit weiteren Nachweisen. Für das Projektmanagement gibt es verschiedenste Projektmanagementsoftware. Außerdem gibt es noch Online-Sites, die Projektmanagement anbieten. Z.B.:

  • Quassum (für 5 Benutzer / 5 Projekte kostenlos)
  • Trello (kostenlos, Extrafunktionen jedoch kostenpflichtig)
  • Wunderlist (kostenlos, derzeit nur etwas erweiterte Todo-List)

Versionsmanagement

Test

Das Testen von Sofwareprodukten ist ein wichtiger Bestandteil der Entwicklung.

Neben der manuellen Kontrolle, für die es auch Testmethoden und -tools gibt, sollte die Automatisierung von Tests eine wichtige Rolle einnehmen. Letztere sind zwar beim ersten Mal meist aufwändiger, rentieren sich aber über die Laufzeit eines Projekts, weil sie Rückschritte bei der Entwicklung verhindern können, da sie bei jeder Änderung ohne großen Aufwand erneut durchlaufen werden können.

Zu unterscheiden sind

  • Unit-Tests (dabei werden einzelne Funktionen getestet)
  • Integrations-Tests (dabei wird das Zusammenspiel vieler Komponenten, teilweise auch auf verschiedenen Maschinen getestet)
  • Oberflächen-Tests (dabei wird die GUI getestet).

Für Oberflächentests gibt es verschiedenste Tools, z.B.

Low Code

Low Code oder No Code sind Entwicklungsumgebungen, die mit verhältnismäßig mächtigen Elementen arbeiten, um rasch Anwendungen entwickeln zu können.

Beispiele:

Reguläre Ausdrücke

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 ricoshet.com; dort spricht - nach Vorgabe eines Themas - ChatGPT mit sich selbst.

Siehe

Datenbanken

Datenbankdesign

Mit der MySQL Workbench lassen sich Datenbanken designen.

SQL

SQL Syntax

Indexbildung

Siehe

Pivotieren

Zeilenwerte in Spalten darstellen ist ein häufigeres Problem. Dies kann bei Aggregationen dadurch gelöst werden, dass man die FILTER-Klausel verwendet:[2]

 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

MySQL

Dokumentation
MySQL-Nutzer
Verwaltung mit phpMyAdmin
 sudo dpkg-reconfigure phpmyadmin


CSV in MySQL importieren

Siehe

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.

NoSQL

Siehe

  • OpenXava erlaubt mit einfachen Java-Klassen recht schnell Web-Datenbankanwendungen zu erstellen.
  • EdgeDB
  • LowDB - kann nicht als wirkliche Datenbank bezeichnet werden, aber möglicherweise sinnvoll für Persistenz von wenigen Daten.

CouchDB

Siehe CouchDB

Echtzeit-Datenbanken

Datenbanken als Service

Datenbanken im Browser

  • idb dünne Hülle um IndexedDB
  • idb-keyval, einfacher Schlüssel-Wert-Speicher, basierend auf IndexedDB

Datenbank-Frontends

  • kexi tritt als Alternative für MS Access oder FileMaker an.
  • Symphytum, intuitives Datenbank-Frontend (und -Backend), noch in der Entwicklung, bisher keine relationale Daten (Stand: Okt. 2020)
  • LibreOffice Base

Datenbank-Frontend in der Cloud

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
  • Datenbanken mit Versionskontrolle
  • ImmuDb


Siehe auch

Webbrowser steuern

Java

  • Java-Tipps (J2ME Programmierung, Synchronization, SyncML, vCard/vCalendar, Bluetooth)

Python

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 staff hinzuzufügen, kann man folgendes Kommando nutzen:

 sudo adduser USER staff

Warnung: staff lässt recht weitgehende Veränderungen am System zu. Bitte nur nutzen, wenn man wirklich versteht, was man tut!

XML

CSS

Siehe auch

HTML

Allgemeines

Sonderzeichen

In HTML-Code kann man viele Sonderzeichen einbetten. Siehe

Favicon

  • Ein kleines Bild, das auf den Reitern der Webbrowser dargestellt wird, nennt man Favicon. selfhtml oder wikipedia zeigen, wie man ein solches Logo auf seine HTML-Seite einbindet.

HTML5

Mit HTML5 lassen sich auch Offline-Apps erstellen, z.B. für das iPhone. Der Vorzug von HTML5-Apps gegenüber Android- bzw. iPhone-Apps ist die relative Plattformunabhängigkeit.

Siehe

Siehe Beispiel-Apps bei


HTML5 Canvas

Siehe u.a.

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 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


HTML5 Frameworks

React

Siehe React

Ember.js

Ember.js ist wie AngularJS ein umfassendes Javascript-Framework.

Neben der offiziellen guten Dokumentation gibt es auch verschiedene Bücher, z.B.

AngularJS
Allgemeines zu AngularJs

Siehe

AngularJS 2.0

Die Version 2.0 kommt einer Neuprogrammierung des Frameworks, allerdings mit einem Upgrade-Pfad, gleich. Die Version 2.0 verzichtet dabei auf Browserunterstützung des Internet Explorers vor Version 10. Favorisierte Programmiersprache des von Google gestützten Frameworks ist die als Open Source veröffentlichte Programmiersprache TypeScript.

Einen ersten Einblick liefert ein Artikel auf heise Developper.

AngularJS and Google Visualization API

AngularJS und Google Visualization API arbeiten etwas holprig zusammen: AngularJS darf erst arbeiten, wenn die Google Visualization API geladen ist.

Daher darf das ng-app-Attribut nicht im HTML-Quellcode stehen, sondern die Zuordnung zur AngularJS-App muss dynamisch nach dem Laden der Visualisierungs-API geladen werden[3]:

 google.setOnLoadCallback(function () {  
     angular.bootstrap(document.body, ['my-app']);
 });
 google.load('visualization', '1', {packages: ['corechart']});

HTML für Smartphones

Die Entwicklung für Smartphones ist aufgrund der Vielzahl von Systemen nicht gerade einfach. Auf Basis von HTML5 versuchen verschiedene Frameworks dem Webentwickler zu erlauben, beinahe native Apps für Android,iOS... zu entwickeln, ohne allzuviel auf die Bedürfnisse der Plattformen eingehen zu müssen:

  • PhoneGap, künftig "Apache CallBack" ist ein Open Source-Framework für sieben mobile Plattformen. Dieses Framework versucht HTML-JavaScript-Code die Features der Smartphones zur Verfügung zu stellen, für die normalerweise Nativer Code erforderlich ist.
  • DoJo Mobile
  • XUI
  • jQuery Mobile
  • Sencha Touch
  • Jo HTML5 Mobile App, Open Source-Framework

Lightbox

Um eine HTML-Seite kurz in den Schatten zu stellen, um z.B. dem Benutzer einen kurzen Dialog (Login) zu zeigen, nutzt man eine sog. Lightbox.

Treemap

Treemaps stellen hierarchische Datenstrukturen in verschieden großen Flächen, z.B. Rechtecken, dar.

Für HTML/Javascript/CSS gibt es dazu verschiedene frei nutzbare Hilfsmittel

HTML5 Drag and Drop

Mit HTML5 ist es u.a. möglich, Elemente einer Webseite aus dieser heraus- und in eine andere geöffnete Webseite mit der Maus zu ziehen. Die entsprechende API war ursprünglich im Internet Explorer implementiert und wurde dann standardisiert.

Neben dem Attribut draggable=true muss für WebKit-Browser noch mit etwas CSS nachgeholfen werden. Firefox scheint auch entsprechende JavaScript- drag- und -drop-Handler zu benötigen.

Hyperlinks zu nativen Anwendungen

Unter den verschiedenen Betriebssystemen lassen sich auch aus dem Browser native Anwendungen starten. Dazu muss man dem Betriebssystem einen Protokollhandler für ein bestimmtes Protokoll bekannt machen.

In Windows muss man dazu die Registry ändern.

Siehe auch


Unter Windows kann man nicht nur Handler für eigene Protokolle (z.B.: "office:") registrieren, sondern auch Handler für Dateitypen (MIME-Handler), die bereits vor dem Herunterladen der Datei aufgerufen werden und so die Art des Herunterladens bestimmen können.[4]

REST

REST hat folgende Eigenheiten:

  • Jede Resource hat eine URL/URI[5].
  • Es gibt nur simple Operationen:
    • GET (hole Info, "retrieve", idempotent)
    • PUT (aktualisiere Info, "update", idempotent)
    • POST (erzeuge neue Info, "create", kann non-idempotent sein)
    • DELETE (lösche Info, "delete",idempotent)
    • kurz: CRUD
    • zusätzlich HEAD (hole Meta-Info über eine Ressource)[6].
  • Das Protokoll ist HTTP.

Siehe auch

  • restSQL - eine Java-Programmierschnittstelle, um möglichst einfach auf SQL-Daten mittels Rest-Clients zuzugreifen.
  • sqlREST - eine andere Mittelschicht zwischen Http/Rest-Client und SQL-Datenbank, die in Java programmiert wurde
  • Dreamfactoy - eine Open Source - REST-Schnittstelle zu SQL-Datenbanken. Zusätzlich werden noch APIs u.a. für AngularJS angeboten.

Alternativen zu 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.

JavaScript

Projektmanagment

JavaScript kann in einem einfachen Editor geschrieben werden und im Browser laufen.

Üblicherweise werden aber Projektmanagementtools verwendet:

Daneben gibt es viele Build- und Hosting-Plattformen in der Cloud, z.B.

Allgemeines

Siehe auch HTML5 und HTML für Smartphones.

Sprachkonstrukte

Algorithmen und Datenstrukturen

Siehe

Promises

Siehe

Coding Style

Mit 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:

jQuery

Mit dem jQuery-Framework werden JavaScript-Aufgaben erleichtert.

JQuery hat eine Plugin-Architektur, z.B.

JavaScript Multitasking

Für Threads in JavvaScript sieht 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 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 http-server mit der Option -c-1 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 HTTPS-Verbindungen. Zu Entwicklungszwecken kann aber auch der localhost mit einer HTTP-Verbindung genutzt werden, also http://127.0.0.1:PORT

Siehe

HTTP Long Polling und WebSockets

Für HTTP-Long Polling bieten sich JavaScript-Closures an. Siehe jQuery-Long Polling Example.

In HTML5 gibt es für Server-Push die sogenannten WebSockets. Socket.IO ist eine JavaScript-Bibliothek, die die Server-Push-Technologie (HTTP Long Poll oder Implementierungen von Websockets) kapselt.

WebSockets

Mit

kann man einen Server und einen Client in der Shell starten, um Websockets ein wenig auszuprobieren.

Bearbeiten von PDFs mit JavaScript

PDFs können derzeit noch nicht mit reinem JavaScript bearbeitet werden, sondern nur entweder erzeugt (PDF.js) oder angezeigt werden.

Siehe

Eine Alternative zur Erzeugung von PDFs könnte das Erstellen von SVGs sein:

Bearbeiten von Word-DOCX-Dokumenten

Siehe

Lesen von Word-Docx-Dokumenten

Google Apps Script

Google Apps Script basiert auf JavaScript, hat aber Erweiterungen, um auf Google Produkte zugreifen zu können. Entsprechende Scripte können beispielsweise in Googles Tabellen eingebunden oder mittels eines Timers regelmäßig gestartet werden. Siehe

JavaScript DB Frameworks

JavaScript for PostgreSQL

Siehe

JavaScript for PostgresSQL NOTIFY/LISTEN

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

Diagramme darstellen in Javascript

Darstellung von Graphen

Siehe

Test JavaScript

Zur Steuerung von Webbrowsern bzw. zum Simulieren von Webbrowser-Nutzung siehe

Unit-Tests:

PHP

Authentifizierung

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

OPA

OPA ist eine Programmiersprache, deren Ausführung unbemerkt vom Entwickler sowohl auf dem Server (mit Datenbank) als auch auf dem Client läuft.

Webservices

  • Einen Überblick über im Netz bereitstehende Webservices bietet xmethods.org
  • GIS

Google Gadgets