Softwareentwicklung: Unterschied zwischen den Versionen

Aus CodicaTipps
Zur Navigation springen Zur Suche springen
Zeile 164: Zeile 164:
 
==== 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  
 
* 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)
 
 
 
 
 
===== Einrichten eines Administrators =====
 
 
 
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.
 
  curl -s -X PUT http://localhost:5984/_node/couchdb@localhost/_config/admins/admin -d '"admin_pw"'
 
 
 
 
 
===== Views =====
 
 
 
Um eine View "words", die einem Designdokument "_design/myDesignDoc" in der Datenbank "texts", hinterlegt ist, zu nutzen, ruft man sie folgendermaßen auf:
 
  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>.
 
 
 
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>
 
 
 
===== PouchDB =====
 
 
 
Bei einer Replikation von CouchDB zu PouchDB ist die <code>retry</code>-Option wichtig, um das Abbrechen der Replikation zu vermeiden. Beispiel:
 
  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);
 
    });
 
 
 
 
 
===== Fehlerbehebung =====
 
 
 
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.
 
  
 
== Webbrowser steuern ==
 
== Webbrowser steuern ==

Version vom 21. November 2017, 14:29 Uhr

Aktuelles

Programmiertechniken

Einführung in die Programmierung

Programmieren für Kinder

Mit scratch lassen sich einfache Skripte mit der Maus zusammensetzen.

Teamorganisation

Agile Entwicklung

Design Patterns

Sicherheit

Projektmanagement

Apache Maven

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.

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.

Reguläre Ausdrücke

Datenbanken

Datenbankdesign

Mit der MySQL Workbench lassen sich Datenbanken designen.

SQL

SQL Syntax

MySQL

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


CSV in MySQL importieren

Siehe

Doppelte Daten entfernen

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

CouchDB

Siehe CouchDB

Webbrowser steuern

Java

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

Python

XML

CSS

Siehe auch

HTML

Allgemeines


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 Frameworks

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[2]:

 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.[3]

REST

REST hat folgende Eigenheiten:

  • Jede Resource hat eine URL/URI[4].
  • 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)[5].
  • 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.
    • Zu Textile siehe auch das Xilize-Plugin für den Editor jEdit.

JavaScript

Allgemeines

Siehe auch HTML5 und HTML für Smartphones.

JavaScript Multitasking

Für Threads in JavvaScript sieht HTML5 Web-Workers vor.

jQuery

Mit dem jQuery-Framework werden JavaScript-Aufgaben erleichtert.

JQuery hat eine Plugin-Architektur, z.B.

HTTP Long Polling

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.


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

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.

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