User-Personalisierte App Regionalisierung

Projekt-Kurzfassung: Es gibt zahlreiche IT-Web-Anwendungsbereiche, die zur Schnittstelle von "global" und "regional" gehören. Bei diesem Projekt geht es um die Schnittstelle von "global (Server )" und "regional ( Client )". Zu "global" können "weltweit-allumfassende-allgegenwärtige" Komponenten und Bezüge gehören. Zu "regionalen" Aufgaben und Gegebenheiten ( wie Kultur, Bildung, Technologien, usw. ) können konkrete lokale Erfordernisse ( Kleinbetriebe, Mittelstand, regionale Besonderheiten, usw. ) gehören.

Die eigene Idee soll in möglichst einfacher, robuster Weise als Projekt realisiert werden ( Plagiate sind out ). Hierbei seien user-zentrierte Anwendungsbezüge und Erwartungen vorrangig. Dieses "self-made"-Projekt kann/soll auf der "Basics-Ebene" vielfältige Bezüge aufzeigen und kann/soll als einfache, robuste, praxisbezogen App realisiert werden und regionale Anwendbarkeit erlangen.


Projekt -Einführung Client - Server

Es soll die "beste" Client-Server-Ideen ( realisierungsnah ) ausgedacht werden. Verwendet werden sollen


Ideenfindung ( Client - Server ) Was? Wie? Zeit?

Hinweise in der Veranstaltung.

Nachfolgend kommen einige unstrukturierte Anregungen zur Projektfindung. Es soll die "beste" Clien-Server-Ideen ( realisierungsnah ) ausgedacht werden. Die eigene Idee ( Plagiate sind out ) soll in möglichst einfacher, robuster Weise als Projekt realisiert werden. Hierbei seien Anwendungsbezüge und user-zentrierte Sichtweisen vorrangig. Beispiele:


Idee-Einbettungen ( allgemeines ) Was beachten?

Zur Realisierung der Projekt-Idee soll die Systemsicherheit ( gerätetechnisch ) und Informationssicherheit ( rechtlich, Vermeidung von wirtschaftlichen Risiken/Schäden, Schutz vor Gefahren/Bedrohungen ) beachtet werden. Begrifflich etwa: Was ist geheim (secret), vertraulich (confidential), intern (internal), öffentlich (public) bei diesem Projekt? Siehe z.B. bei de.wikipedia Informationssicherheit , Vertraulichkeit (Confidentiality), Authentifizierung (Authentication), Integrität (Integrity), Verbindlichkeit (Verläßlichkeit, fairer und korrekter Umgang miteinander,Quality of Service, Commitment) und Identität (Identity).


Entwicklungsschritte ( exemplarisch ) Stichworte

Es geht clientseitig um ECMAScript-Seite(n)-Programmierung mit Formvalidierung, JSON, Verschlüsselung über JSON-Form-Obj, localStorage, AJAX und

Es geht serverseitig um PHP-Seite(n)-Programmierung mit Formvalidierung, JSON und Server-File(s) für Speicherung der verschlüsselten Daten und Responnse-Generierung bei AJAX-Anfragen.

Es wird lediglich mit einem Formular in einer HTML5-Seite gearbeitet. Skizzierte Entwicklungsschritte und Vorgehen grob in Stichworten:

clientseitig


serverseitig


Hinweise ( AJAX - Schnellstart ) einführend

Siehe AJAX from Scratch ( Vergleich zwischen Formular und AJAX ) und ggf. ergänzend Lade HTML-Fragment mit AJAX

AJAX-Response ( Callback-Funktion ). Was meint synchron / asynchron ? Der Begriff "asynchrone Datenübertragung" ( zeichenweise asynchron ) darf nicht mit der Asynchrone Kommunikation verwechselt werden ( Abfolge von Anfrage/Antwort beim Übertragungsprotokoll ). Welche Vorteile haben also asynchrone Callback-Funktion gegenüber synchronen?

Zu AJAX gehört das ECMAScript-Objekt new XMLHttpRequest(), dessen Nutzung etwa wie folgt ist:

var xhr;
try {xhr = new XMLHttpRequest();} catch (try_ms) {
 try {xhr = new ActiveXObject("Msxml2.XMLHTTP");} catch (try_ms_old) {
  try {xhr = new ActiveXObject("Microsoft.XMLHTTP");} catch (failed) { xhr = false; }}}
} 
if (!xhr) { alert("Senden unmöglich\nKein Internet/XMLHttpRequest"); return; }

xhr.open("POST", "my.php", true); // AJAX-post-submit
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

var str = 'KEY1='    + MYSTR1 
     + '&JSONkey=' + JSON.stringify(obj);
xhr.send(str);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
 // lediglich zum 1. Testen 
 alert(xhr.responseText); // oder that.form.LOCATION.value = xhr.responseText;
 
 //was dann? if (o.post_reset) {that.form.reset(); }
 //was dann? if (o.post_htm) { bib.url_to_frame(o.frame_name, obj.urlpost); }
}

Wurden der var str = 'KEY1='+MYSTR1 + '&JSONkey='+JSON.stringify(obj); mit xhr.send(str) an my.php gesendet, so wird bei einer php-Antwort ( echo-Ausgabe ) die Browser-Callback-Funktion xhr.onreadystatechange = function () {...) aufgerufen. Der Antwort-String beifndet sich in xhr.responseText

Hinweise ( PHP-Strings ) Zeichenkette === String?

Hinweise in der Veranstaltung.

Was ist ein String? Systeme haben system-angepaßte nativ-Stringdarstellungen. Ein ECMAScript-String ( Quelltext ) ist nicht identisch zu einem PHP-String. PHP-Strings sind verschieden von ECMAScript-Strings. Beispiele:

Ein ' ' - PHP - String wird nicht geparst. Z.B. entspricht ein 
  PHP-String         ' $fn \n'    dem 
  ECMAScript-String  ' $fn \\n'   und dem
  ECMAScript-String  " $fn \\n"

Ein " " - PHP - String wird geparst. 
  Z.B. wird bei " $fn \n" die PHP-Variable $fn 
  eingesetzt eingesetzt und aus \n wird ASCI 10. 

                         PHP |  ECMAScript
-----------------------------|------------------------------ 
  $str1 = 'abc';             |  var str1 =  'abc';
                             | 
  $str2 .= 'UVW' . "XYZ";    |  var str2 += 'UVW' + "XYZ";
                             | 
  $arr = array("a","b","c"); |  var arr = ["a","b","c"]; 
                             | 
  $str = implode("-", $arr); |  var str = implode("-", arr);


                  PHP-Arrays | ECMAScript-Objekte
-----------------------------|------------------------------ 
  $früchte = array (         | var fruechte = { 
    "obst"  => array(        |  "obst" : { 
        "b" => "Birne",      |     "b" : "Birne",
        "c" => "Apfel")      |     "c" : "Apfel"}
  );                         |  };

Weblinks: Einführung bei php.net in das Arbeiten mit PHP-Strings ,
www.w3schools PHP-Strings , PHP-String-Funktionen

Hinweise ( PHP-debuggen ) PHP-Funktionen

Es gibt Entwicklungsumgebungen, die auch das Debuggen von PHP-Quelltexten ermöglichen. Einfache Möglichkeiten bietet PHP, wie z.B.

scandir(__DIR__) liefert Array mit den Dateinamen im aktuellen Verzeichnis. Teste mit print_r( scandir(__DIR__) )

date('Y-m-d H:i:s',time())

pathinfo(__FILE__) liefert Array mit ["dirname"] für File, ["basename"] für aktuellen php-namen ["extension"] als "php" und ["filename"] Name ohne .php Teste mit print_r( pathinfo(__FILE__) )

Achtung! PHP-Keywords, Classes, Functions und user-definierte Functions sind NICHT case-sensitive.

PHP-Beispiele

phpInfo();                         // zeigt u.a. Installationsinfos an

print_r( get_defined_functions() );  // zeigt u.a. die verfügbaren Funktionsnamen an

function get_php_url() { 
  $temp = 'http'.(isset($_SERVER['HTTPS'])?'s':'').'://';
  return "$temp{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
}

function get_dir_name() { return dirname(get_php_url()); }

function get_anz_files_in_dir() { return count($files = scandir(__DIR__)); 
PHP-Funktionen und ECMAScript-Funktionen nachgeschriebener Code

Zu Funktionsbibliotheken gehören neben Umfang und Komplexität auch Einsatzbereiche und eine Historie. PHP-Funktionen sind keine ECMAScript-Bibliotheken. Natüröich gibt es Versuche, Bibliotheken in eine andere Sprache zu übertragen.

Kevin van Zonneveld und andere haben zu PHP-Functionen einen equivalenten Code in JavaScript-Code (nach-) geschrieben ( Siehe php.js ( "online functions that are far from perfect" ).

ECMAScript-Funktionen mit PHP nachbilden ( Beipspiele ):

/* Danke! Source siehe http://eqcode.com/wiki/... */

function utf8_ord($ch) { $len = strlen($ch); if($len <= 0) { return false; }
  $h = ord( $ch{0} );
  if ($h <= 0x7F) {return $h;}
  if ($h < 0xC2) {return false;}
  if ($h <= 0xDF && $len > 1 ) { return ($h & 0x1F) <<  6 | (ord($ch{1}) & 0x3F); }
  if ($h <= 0xEF && $len > 2 ) {return ($h & 0x0F) << 12 | (ord($ch{1}) & 0x3F) << 6 
                                                         | (ord($ch{2}) & 0x3F); }
   if ($h <= 0xF4 && $len>3) {return ($h & 0x0F) << 18 | (ord($ch{1}) & 0x3F) << 12 
                                    | (ord($ch{2}) & 0x3F) << 6 | (ord($ch{3}) & 0x3F);
   } return false;
}
function utf8_charAt($str, $num) { return mb_substr($str, $num, 1, 'UTF-8'); }
function charCodeAt($str, $num)  { return utf8_ord(utf8_charAt($str, $num)); }
function fromCharCode($num) {
  if($num<128) {return chr($num);}
  if($num<2048) {return chr(($num>>6)+192).chr(($num&63)+128);}
  if($num<65536) {return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);}
  if($num<2097152) {return chr(($num>>18)+240).
    chr((($num>>12)&63)+128).chr((($num>>6)&63)+128).chr(($num&63)+128);
  } return false;
}

function myhash($s) { $b = 10;
 if (!$s || strcmp($s, "") == 0) { return 0; } else { $h = 0; $g = 0;
   for ($i = strlen($s) - 1; $i >= 0; $i -= 1) { $c = charCodeAt($s, $i);
     $h = (($h << 6) & 0xfffffff) + $c + ($c << 14);
     if (($g = $h & 0xfe00000) != 0) { $h = ($h ^ ($g >> 21)); }
   } return $h;
 }
}
// Danke! Source von Stephan
function decrypt($str, $key) {
  $c = 0; $i = 0; $key_char = 0;$crypt = "";
  for ($i = 0; $i < strlen($str); $i += 1) { 
    $c = charCodeAt($str, $i);
    $key_char = charCodeAt($key, $i % strlen($key));
    if ($c != $key_char) { $c ^= $key_char; }
    $crypt .= fromCharCode($c);
  } return $crypt;
};

Wie fange ich konkret an? Start-Beispiele

Die Start-Beispiele dienen dem experimentellen Untersuchen, Erfassen und Abstimmen von zahlreichen Aspekten. Die ausgereiften Start-Beispiele sind dann recht universell einsetzbar und leicht anpassbar. Die Seite auf-7-2015-start.htm sendet mit JSON.stringify(obj). Der Server $arr = json_decode($erhaltenen_JSONstr,true) verwendet das assoziative $arr für weitere Aktionen ( Passworte prüfen, Sicherheitsprüfungen, Speicher/Lesen im/von Daten-File, usw.). Siehe clientseitig auf-7-2015-start.htm und serverseitig auf-7-2015-start

http://www.cilie.org/esa/prakt-2015/auf-7-2015-start.htm http://www.cilie.org/esa/prakt-2015/auf-7-2015-start.php?show_php

So wie auf den weltweiten Wegen zwischen Clients und Servern unermesslich viele Bitfolgen und Wechselwirkungen sind, so können im pfadlosen Neuland komplexer Unwägbarkeiten Intuition und Fantasie ein humanes Miteinander ermöglichen.

Plagiate sind out!
Viel Freude bei der Ausarbeitung!
Letzter Abgabetermin
So nach Pfingsten 12.00 Uhr