EWU Software GmbH - BLOG

Hier finden Sie Beiträge rund um das Thema Softwareentwicklung
01 Okt 2016
by marc
Comments are closed

Bootstrap Modal – Multiple und Dynamisch

Als erstes benötigen wir einen Event für unser Bootstrap Modal. Im folgenden Beispiel sind einige Attribute auf die wir weiter eingehen müssen.

data-pophtml = ist die Bezeichnung der gewünschten HTML-Datei die den HTML- und Javascript-Code enthält, der für die weitere Verarbeitung und für unsere Bootstrap Modal nicht weiter relevant ist.

data-funct = ist die Javascript-Funktion, im Template von data-pophtml geladen wird, die nach dem Laden der Bootstrap Modal aufgerufen wird. Sie füllt evtl. noch Inhalte im Template die z.B. von einer Restful-Api kommen können.

data-getUrl = ist die Möglichkeit daten an data-func zugeben, die vorab, wie in diesen Fall, von einer RESTFul stammen.

data-toggle = Ist der Trigger der den Event aufruft und die Bootstrap Modal öffnet.

data-keyboard=“false“, data-backdrop=“static“ = Das sind Optionen für die Bootstrap Modal weitere Informationen entnehmt ihr hier: http://holdirbootstrap.de/javascript/#modals


//html

<a href=""
class="btn btn-xs btn-success" 
data-pophtml="p_anmeldung" 
data-funct="init" 
data-target="#ewumodal" 
data-getUrl="/kurse/info/anmeldung/300" 
data-toggle="modal" 
data-keyboard="false" 
data-backdrop="static" >Meine Modalbox</a>

//

Der Javascript-Teil sollte schon etwas Erfahrung mit jQuery voraussetzen und erklärt sich eigentlich auch von selbst.


//javascript

jQuery(document).on('click','[data-toggle*=modal]',function(){

        var ha = Math.floor(Date.now() / 1000);
        var modal = $('
<div class="modal fade" id="ewumodal'+ha+'" tabindex="-1" 
role="dialog" aria-hidden="true" 
aria-labelledby="ewumodalLabel"></div>

');

        var button = $(this)
        $( "body" ).append( modal );

        $('#ewumodal'+ha).on('show.bs.modal', function (event) {

        var buttonArray = new Array();
        buttonArray = button.data();

       if (button.data('pophtml')) {
        var cURL = "/popover/"+button.data('pophtml');
       } else {
        var cURL = 0;
       }
       var funct = button.data('funct');
       var y = {};

       for(z in buttonArray) {
        if (z.match('daten')) {
         y[z.replace('daten','').toLowerCase()]=buttonArray[z];
        }
       }

       $('#ewumodal'+ha).load(cURL, function(response, status) {
        if (funct!=undefined) {
         var fn = window[funct]
        if (typeof fn === "function") {
         fn(buttonArray);
        } else {
         $(modal).modal('hide')
        }
       }                 
      });

      $('#ewumodal'+ha).on('hidden.bs.modal', function (e) {
       $(this).removeData('bs.modal');
       $(this).empty();
       $(this).remove();
      });

    });

 $('#ewumodal'+ha).modal('show');

});

Bitte versteht, dass es sich hier um einen Lösungsansatz handelt und noch einen Feinschliff benötigt. Mit dieser Variante könnt ihr so viele Bootstrap Modal laden wie ihr möchtet. Jede eurer Bootstrap Modal-Boxen behält die Möglichkeit bei mit dem Server zu kommunizieren.

Viel Spaß damit!

19 Jan 2016
by marc
Comments are closed

Dynamische Bind Params mit MySQLi

SQL-Injections sind Probleme die man als Online Software-Betreiber nicht gebrauchen kann. Diese Sicherheitslücken entstehen durch Nichtwissen, Bequemlichkeit und durch stressige Projekte. Viele benutzen PDO oder MySQLi und denken das sie damit alles in punkto Sicherheit erfüllt haben. Weit gefehlt! Ohne die Benutzung von Prepared Statements (Bindings), wird man auch hier Lücken finden und sich einen Zugang erschleichen können.

 

Was können wir da gegen tun?

Wie schon erwähnt, können wir Binding Params bei MySQLi und PDO verwenden. Sicher ist das ein wenig mehr Aufwand, aber wenn man wert auf eine strikte Typisierung legt, muss der Mehraufwand gar nicht sein. Im folgenden Beispiel zeige ich euch wie man dynamische Binds Param mit MySQLi verwenden kann.

Als erstes schreiben wir einen Query. Als Beispiel verwenden wir eine Loginabfrage.


$db = $meine_datenbank_verbindungsdaten_die_streng_geheim_sind;
$email = "show@irgendeinemail.xx";
$passwort = "meinpasswort";

SQL-Anweisung, die Fragezeichen sind unsere Binds

$sql="SELECT id FROM accounts WHERE email=? AND md5_passwd=? ";

Wir legen die Email und das Passwort in ein array(), in der gleichen Reihenfolge wie die Fragezeichen

$bindings = array($email, md5($passwort));

prepare

$stmt = $db->prepare($sql);

$type="";

An dieser Stelle werten wir die Typen aus.
Wer das nicht Strikt hat, muss den Type-String
selbst schreiben, sonst erkennt die Schleife wahrscheinlich richtig um welchen Type es sich handelt.
Dies ist auch nur ein vereinfachtes Beispiel!

Bind-Parameters. Types: s = string, i = integer, d = double,  b = blob

foreach($binding AS $b) {

if(is_int($b)) {
$type.="i";
}

if(is_double($b)) {
$type.="d";
}

if(is_string($b)) {
$type.="s";
}

}

$queryParams = array();
$queryParams[] = $type;

foreach ($binding as $id => $term) {
$queryParams[] = &$binding[$id];
}

Als nächstes kommt der user_call

call_user_func_array(array($stmt, 'bind_param'), $queryParams);

Daten holen

$stmt->execute();
$result=$stmt->get_result();
$stmt->close();

$daten =  $result->fetch_assoc();



var_dump($daten);


Ihr braucht euch das Beispiel nur Anpassen, evtl. eine Funktion oder Klasse erstellen und schon habt ihr einen kleinen „Mapper“.

05 Jan 2016
by marc
Comments are closed

Streitschlichtung für Onlineshops

EU-Verordnung zur Streitschlichtung für Online-Shop Betreiber ab 09.01.2016

Die „Verordnung (EU) Nr. 524/2013 des Europäischen Parlaments und Rates vom 21. Mai 2013

Ab 09.01.2016 tritt eine neue EU Verordnung in Kraft, die sich mit der Online-Streitbeilegung zwischen Betreibern eines Online-Shops und dessen Kunden auseinandersetzt. Diese neue Verordnung des Europäischen Parlaments betrifft alle Shop-Betreiber in der EU. Die neue EU-Verordnung beschäftigt sich lediglich mit Streitigkeiten zwischen Unternehmern und Verbrauchern, es werden keine Offline-Kaufverträge behandelt.

Art. 14 Abs. 1 der Verordnung schreibt vor:

In der Union niedergelassene Unternehmer, die Online- Kaufverträge oder Online-Dienstleistungsverträge eingehen, und in der Union niedergelassene Online-Marktplätze stellen auf ihren Websites einen Link zur OS-Plattform ein. Dieser Link muss für Verbraucher leicht zugänglich sein. In der Union niedergelassene Unternehmer, die Online-Kaufverträge oder Online- Dienstleistungsverträge eingehen, geben zudem ihre E-Mail- Adressen an.

Diese neue EU Verordnung hat die Aufgabe, die Sicherheit und das Vertrauen der Kunden im Online-Handel zu stärken. Aus diesem Grund wurde eine neue Plattform für die „Online-Streitbeilegung“ ins Leben gerufen und diese soll dabei eine außergerichtliche Lösung für Streitigkeiten darstellen. http://dogtrotter.de/shop5/online-streitbeilegungsplattform

Soweit können auch alternative Streitbeilegungsstellen genutzt werden. https://de.wikipedia.org/wiki/Alternative_Streitbeilegungsstellen

Die neue Plattform der EU für die Online-Streitbeilegung sollte bis zum 15.02.2016 verfügbar sein. Bis dahin wird geraten, bereits ab dem 09.01.2016 im Impressum oder den AGB, mit folgenden Text auf die neue Plattform hinzuweisen:

„Die Europäische Kommission stellt demnächst eine Plattform zur Online-Streitbeilegung (OS) bereit. Den Link werden wir an dieser Stelle veröffentlichen, sobald die Plattform existiert.“

13 Aug 2015
by marc
Comments are closed

Palette Gear

Mit Palette Gear lassen sich Programme wie Photoshop & Lightroom ganz bequem mit kleinen Hardware-Controllern steuern. Überall da, wo eine Maus zu wackelig wird, oder gleichzeitig mehrere Eingaben gefordert sind, werden diese kleinen Hardware-Bricks zu wahren Helden. Es gibt ein Hauptmodul das über USB kommuniziert und durch eine Software, die es für Windows und OSX gibt, die eingaben der Regler, Buttons verarbeitet. Insgesamt gibt es drei verschiedene Controller-Typen, die sich durch Magnetismus verbinden lassen. Die Software erkennt die Verbindungen der einzelnen Controller und bildet diese Grafisch ab. So lassen sich ganz einfach Profile für Photoshop, Illustrator, Lightroom und After Effects konfigurieren. Unterstützung für weitere Programme werden folgen.

Wenn ihr neugierig seid und euch informieren möchtet, so schaut auf der Seite des Entwicklers. Dort findet ich viele Anwendungsmöglichkeiten. http://goo.gl/6j7saQ

 

Hier gibt es noch ein Youtube-Video, was sehr eindrucksvoll zeigt, was das Palette Gear eigentlich so alles kann.

https://goo.gl/fhwmk5

05 Aug 2015
by marc
Comments are closed

Windows 10 langsame Internetverbindung durch Peer-to-Peer Dienst

Microsoft verwendet die Computer ihre Nutzer für ihre Update- & Upgrade-Datenpakete via Peer-to-Peer-Verbindung, also von Nutzer zu Nutzer, über ihre Microsoft-Server weiterzuleiten. Ist in der Regel auch nicht weiter schlimm, denn diese Technik verwenden viele Unternehmen um ihre Produkte zu ihren Nutzern zu bringen. Die meisten Softwareanbieter stellen für so einen Service in der Regel einen extra Launcher dafür bereit. Doch Microsoft kann diese Funktion immer benutzen, selbst wenn ihr eigentlich gar keine Updates und Upgrades braucht. Wenn ihr das nicht möchtet dann stellt diese Option in den Einstellungen aus.

Wir zeigen Euch wie das geht.

 

Als erstes öffnet ihr eure Einstellungen. Die findet ihr gleich als Menüpunkt im neuen schicken Startmenü, wählt Einstellungen auf klickt auf Update & Sicherheit.

a1

 

Dann geht ihr zu den Unterpunkt „Erweiterte Optionen“

a2

 

 

Von hier aus erreicht ihr den Unterpunkt „Übermittlung von Updates auswählen“

a3

 

Wir schalten jetzt die Option auf AUS.

a4

Jetzt darf Microsoft Windows 10 nicht mehr euren Computer und die Computer aus euren Netzwerk für ihren P2P Dienst verwenden. Wir denken, das Microsoft seine Windows-Nutzer über ihren peer-to-pee(r)- Dienst hätte informieren müssen. Da es Netzwerke geben kann die keine Flat-Tarife benutzen und so Kosten entstehen können, die der jeweilige Nutzer zu tragen hat. Und das kann unter Umständen richtig teuer werden.

Microsoft hat diesen Dienst bei allen Windows-Versionen außer bei der Enterprise- und Education-Version standardmäßig aktiviert.

04 Aug 2015
by marc
Comments are closed

Factory-Pattern

Mit einem Factory-Pattern kann man eine Klasse erzeugen ohne unbedingt den Konstruktor dieser Klasse zu nutzen. Es kann vorkommen das man das nicht möchte oder auch nicht kann. Man erstell also zwei Klassen. Eine normale Klasse und eine zweite Klasse, welche unsere Factory-Klasse ist. Unsere Factory-Klasse besitzt Methoden die ein Objekt der ersten Klasse zurückliefern.

Anwendungsmöglichkeiten gibt es dafür für genug. Ich möchte euch ein Beispiel an Hand eines Datenbank-Mapper zeigen.

 


class Datenbank {
	private $host = null;
 
	public function __construct() {
		$this->host = "mysql.local";
	}
 
	public function setHost($newhost) {
		$this->host= $newhost;
	}
 
	public function getHost() {
		return $this->host;
	}
}

Unsere Hauptklasse oder erste Klasse steht. Wir können uns nun den Host zur Datenbank holen oder neu Setzen. Jetzt brauchen wir noch die Factory-Klasse.


class DatenbankFactory {

    private function __construct() {

    }

    public static function getDatenbankUser() {
        return self::getDatenbank("berlin.db.de");
    }

    public static function getDatenbankMandant() {
        return self::getDatenbank("london.db.de");
    }

    private static function getDatenbank($host) {
        $db = new Datenanbank();
        $db->setHost($host);
        return $db;
    }
}

Jetzt haben wir die Public-Methoden die uns den Datenbank-Host für User oder/und uns den für die Mandanten liefert. Eine Private Methode die unsere Anfrage erstellt. Wie man das macht seht ihr im folgenden Beispiel.


$hosteins = DatenbankFactory::getDatenbankUser();
print "DantenbankHost User ".$hostEins->getHost();

$hostZwei = DatenbankFactory::getDatenbankMandant();
print "DatenbankHost Mandant ".$hostZwei->getHost();

Wie wir sehen haben wir jetzt ein gutes Beispiel erzeugt wie wir Factory-Klassen mit PHP realisieren. Wenn wir jetzt die Klassen dementsprechend erweitern, können wir daraus einen einen Mapper für unsere Datenbank erstellen.

 

Die Nachteile des Pattern ist eher der Overhead da man immer zwei Klassen erstellen muss. Für kleine bis mittlere Projekte ist das akzeptabel, für Größere sollte man sich evtl. für ein anderes Pattern entscheiden.

03 Aug 2015
by marc
Comments are closed

X-Editable für BootstrapTable

Mit der X-Editable-Bibliothek wird euch ermöglicht editierbare Elemente auf eurer Seite zu integrieren. Die Bibliothek kann nur mit jQuery und Bootstrap verwendet werden und umfasst sowohl Popup und einen Inline-Modus. Wer von euch die BootstrapTable verwendet kann damit eine wirklich tolle Tabelle mit professionellen Formular-Eigenschaften erstellen.

X-Editable unterstützt Ajax und RESPFul und kombiniert verschiedene Erweiterungen von Bootstrap.

 

X-Editable findet ihr hier http://vitalets.github.io/x-editable/index.html

 

Um X-Editable mit BootstrapTable zu verwenden benötig ihr noch eine kleine Erweiterung die ihr hier findet: http://bootstrap-table.wenzhixin.net.cn/extensions/

Die Anwendungsmöglichkeiten sind sehr hoch und wer separate Eingabemöglichkeiten um eine höhere Übersicht zu erreichen sucht, sollte diese Erweiterung unbedingt einmal ausprobieren.

29 Jul 2015
by marc
Comments are closed

Windows 10 Release

Windows 10 betritt offiziell die Bühne der Betriebssysteme und wir sind mit dabei.

Die Entwickler von EWU Software GmbH freuen sich darauf endlich ihre Android- und iOS-Apps unter Windows 10 zu starten. Wir freuen uns auch auf  Microsoft Edge und die Holo-Lens und die neuen interaktiven Möglichkeiten des neuen Systems.

Wer nicht auf den automatischen Upgrade warten möchte, kann sich jetzt unter http://www.microsoft.com/de-de/software-download/windows10 das Upgrade besorgen. Die Möglichkeit einen bootfähigen USB-Stick oder bootfähige DVD zu erstellen um Windows 10 von diesen Speichermedien zu installieren ist auch gegeben.

 

Weiteres findet ihr hier http://www.engadget.com/gallery/windows-10-event-highlights/

 

 

 

18 Jul 2015
by marc
Comments are closed

jQuery 3.0 & jQuery Compat 3.0 Alpha Version veröffentlicht

Die jQuery Foundation kündigte am 13.07.2015 die Alpha-Version von jQuery 3.0 und jQuery Compat 3.0 an. Timmy Willison erklärte in seinem Blog einige Breaking Changes die diesen Versionssprung rechtfertigen. Die Updates der ersten Alpha-Versionen sind zwei Updates die zum einen jQuery 3.0, der jetzt auch den Support für den Internet Explorer ab Version 9 unterstützt und zum anderen jQuery Compat 3.0, das auch den Support für den IE8 bietet. Beide Versionen werden auch den im Jahre 2012 veröffentlichen Browser Yandex-Browser unterstützen. Was uns persönlich richtig freut.


Welche Änderungen erwarten uns in jQuery 3.0

An erster Stelle stehen für jQuery 3.0 & jQuery Compat 3.0 natürlich die zahlreichen Bug-Fixes. Auch bringen die neuen Versionen von jQuery viele Verbesserungen und ein starkes Arsenal an neuen Features mit. Ein Beispiel sind die .hide() & .show() Methoden. Bisher gingen die meisten Entwickler davon aus, dass hide() mit CSS ein display:none festlegt und show() dafür sorgt, dass das DOM-Element wieder angezeigt wird. Es gibt aber auch viele komplexere Fälle, die nur für eine überflüssige Bindung der Methoden sorgen. Deswegen heißt es in jQuery 3.0: Back to the Roots.

Es wurde die neue .catch() Methode eingeführt und einige Änderungen der .then() Methode angepasst. Die Methode .data() wurde mit ein Update versehen, um sich an die Spezifikation des HTML5-Dataset anzunähern. Deswegen werden alle Keys von Kebab-Case zu CamelCase kovertiert. Auch $.deferred hat ein Update erhalten, das für eine verbesserte Kompatibilität mit Promises/A+ und ECMAScript-2015-Promises sorgt. Ihr findet alle Änderungen und den zugehörigen Blog-Post hier auf https://github.com/jquery/jquery/issues?q=is%3Aissue+milestone%3A3.0.0

Die Alpha 1 Versione von jQuery 3 und jQuery Compat 3.0 stehen Euch über das jQuery CDN zur Verfügung.
Oder über ’npm‘

npm install jquery@3.0.0-alpha1

npm install jquery-compat@3.0.0-alpha1

 

17 Jul 2015
by Tristan Rippel
Comments are closed
docker whale moby logo

Docker – integraler Bestandteil unseres DevOps-Workflows

Docker – integraler Bestandteil unseres DevOps-Workflows

Ein elementarer Bestandteil unseres DevOps-Workflows ist Docker. Dies ist eine Open Source Plattform zum Containerisieren von Anwendungen. Dabei handelt es sich um eine Virtualisierung auf Betriebssystem-Ebene, bei der einem oder mehreren Programmen eine komplette Laufzeitumgebung virtuell innerhalb eines geschlossenen „Containers“ zur Verfügung gestellt wird.
Beim Containern wird aber kein weiteres Betriebssystem gestartet; die OS-Container stellen nur eine Teilmenge des Host-OS dar. Es wird also im Gegensatz zur Hardwarevirtualisierung wie beispielsweise bei KVM (Kernel-based Virtual Machine) nicht ein komplettes Gastsystem emuliert, sondern es werden lediglich Komponenten des Betriebssystems virtualisiert.

An dieser Stelle soll eine Serie von Blogbeiträgen entstehen, in welchen wir unseren Entwicklungsprozess, unsere Verfahren beim Deployment, und welche Rolle Docker hierbei spielt, erklären werden. Den Beitrag werden wir um entsprechende Verlinkungen ergänzen.

Warum überhaupt Virtualisieren?

Der Einsatz von Virtualisierungstechniken ermöglicht uns eine effektivere Auslastung der verfügbaren Hardware. Während Anwendungsserver im Bare Metal Betrieb nur selten Volllast erreichen, können wir durch virtuelle Maschinen eine höhere Anwendungsdichte gewährleisten. Durch das Anlegen von Vorlagen für ganze Umgebungen – wie zum Beispiel mit Hilfe von Vagrant – und den Einsatz von Tools zur Orchestration wie zum Beispiel Ansible, ist es uns möglich, unsere verfügbaren Ressourcen flexibel zu verteilen und ganze Umgebungen innerhalb kurzer Zeitspannen zu migrieren.
Überdies wird die Arbeit unserer Entwickler und unser Deployment-Prozess erheblich vereinfacht. Durch die lokale Nachbildung komplexer Umgebungen sowohl beim Entwickler als auch innerhalb unserer Stagingsysteme, die sich von den späteren Produktivsystem jeweils nur unwesentlich unterscheiden, kommt es zu weniger Problemen im Rahmen der Auslieferung.

Warum Container?

Der Einsatz von Containern verringert den für die Virtualisierung notwendigen Overhead abermals, so dass wir die Anwendungsdichte weiter erhöhen können, was zu einer gesteigerten Auslastung unserer Systeme und einer damit verbundenen erhöhten Kosteneffizienz führt. Des Weiteren sinken die Anforderungen an die Systeme unserer Entwickler und unsere Testumgebung.
Durch den Einsatz einer privaten Docker Registry, Compose, Swarm und Docker Machine können selbst hochkomplexe Umgebungen beliebig repliziert werden. Darüber hinaus können wir gewährleisten, dass sich die lokale von der Production-Umgebung faktisch nicht unterscheidet, was eine weitere Vereinfachung unseres Deployment-Prozesses bedeutet.
Außerdem wird es bequem möglich Single-Threaded-Applikationen, wie es beispielsweise bei Node.js der Fall ist, durch den Einsatz mehrerer identischer Applikationscontainer und eines Load-Balancing-Containers auf mehrere Kerne des Hostsystems zu verteilen.

Was spricht gegen Container?

Wenn es wichtig ist die betriebenen Applikationen aus Erwägungen der Sicherheit bestmöglich voneinander abzugrenzen, ist der Einsatz von Docker nicht unbedingt angezeigt. Obwohl Red Hat durch die Unterstützung von SELinux viel für die Sicherheit tut, ist die logische Trennung in Form von Hardwarevirtualisierern bei sicherheitskritischeren Anwendungen auch weiterhin erste Wahl.

EWU Software GmbH © 2017