Wire Framing Tools

Sind nützliche Programme mit denen man den Ablauf von App’s visuell simulieren kann.

Hier der Beginn einer Liste, Erfahrungsberichte folgen:

balsamiq 
Wird gerade (6/2017) getestet….

Advertisements

EditText und der scheinbar gespeicherte Inhalt

…wäre schön wenn dem so wäre.

Wenn eine Activity die ein, oder mehrere EditText– Felder enthält   verlassen und danach wieder gestartet wird, dann bleibt der Inhalt der Felder scheinbar erhalten. Greift man dann aber mit xx.getText().toString() den vermeitlich erhaltenen Inhalt ab, ist das Ergebnis ein leerer String.

Die Erkentniss:

Am onSaveInstanceState() führt kein Weg vorbei,wenn man den Inhalt besagter Felder über den Lebenszyklus ihrer Activity hinaus retten möchte.

Focus lost..

Die Folgende Fehlermeldung hatte ich erhalten:

W/ViewRootImpl: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=202.125, y[0]=1358.5625, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=5879866, downTime=5875801, deviceId=0, source=0x1002 }

Das Resultat: In der auslösenden Activity wurde der der Klick auf den dort eingebaute Floating Action Button (fab) nicht mehr erkannt, satt dessen, Fehler wie oben beschrieben.

Der Grund:

setContentView(R.layout.activity_new_score);

wurde zweimal aufgerufen. Einmal in on Create() und das zweite Mal in onResume(). Nachdem ich den Befehl in onResume() entfernt hatte, war der Fehler verschwunden und das anklicken des fab wieder erkannt.

Android+ Big Data

Anbei ein paar Notizen zum Umgang mit großen Dateien.

Ich wollte wissen, wie man eine App schreibt, die eine Datenbank mitbringt, ohne das sich der Benutzer eine Datei selber herunterladen muss. Mein Ansatz war eine Datenbank die eine Sternenkarte enthält. Benutzt habe ich dazu die H2- Engine. Größe der Datenbank ca. 134MB.

Erster Versuch: Die Datenbank in den Assests Folder ablegen und von da, beim Start der App, in das Dateisystem kopieren. Das hat keinen Sinn gemacht, es funktioniert zwar, aber verdammt langsam!

Zweiter Versuch: Die Datenbank als Datei in das Filesystem geschrieben (Data/Data….) und beim Start der App geladen. Dauert zwar immer noch relativ lange, aber, es passiert in einer einigermaßen vertretbarer Zeitspanne. Da ist aber noch Optimierungsbedarf! Denn, auch wenn das Gerät gedreht wird, muss wieder gewartet werden.

(Hashes)Prinzip

Notiz: Ein Hash– Funktion verwandelt X nach Y. Zurück von Y nach X geht’s nimmer.Das letztere wäre der Fall wenn wir ein symmetrisches Kryptografie- Verfahren anwenden würden.

Nehmen wir an, wir möchten eine Zugangskontrolle – für eine Datenbank, eine Webseite etc. – bauen. Das ganze soll für mehrere Nutzer, jeder hat seinen eigenen usernamen und sein eigenes Passwort, funktionieren. Beides ist in einer Datenbank abgelegt. Da es sich um Sicherheitsrelevante Daten handelt, wäre es nicht sehr schlau, wenn das dort im Klartext stehen würde. Denn, ein Hexeditor gibt Aufschluss:

Screen Shot 2016-08-13 at 9.47.03 PM
Verdächtige Strings. Welche sind wohl eine  User/ Password Kombination?

Eine Hash- Funktion hilft. Nehmen wir an die Funktion heist H(x). x Sei eine Zeichenkette und H liefert dafür den Hashwert h zurück. Wenn man einen neuen user anlegt, berechnet man aus dem Password- String x den Wert h und legt nun h in der Datenbank ab. Das war es!

Das Selbe macht man beim Login. Wenn das Password eingegeben wurde berechnet man daraus wieder h und gleicht das mit der Datenbank ab. Ist h drin, dann ist das Password richtig.

Die Hash- Funktion ist umso besser, je unzweideutiger h ist. Zum Beispiel: Wird die Stellung der Zeichen im String nicht berücksichtigt, dann würde ‚abc‘ das Selbe h ergeben wie ‚cba‘. Nehmen wir an, die Menge der möglichen Eingabe- Strings sei unendlich, dann sollten auch unendlich viele h herauskommen und kein h sollte dem anderen gleichen. Die Kunst ist es nun eine für seine Zwecke möglichst brauchbare Funktion H zu finden.

 

 

 

Java, C++, Objective C

Das Konzept der Objektorientierten Programmierung spiegelt am ehesten die Art und Weise wieder wie wir denken. Klassen sind Blaupausen für Objekte die Eigenschaften und Funktionalitäten (Code) enthalten. Von einer Klasse können theoretisch beliebig viele Instanzen (Objekte) gebildet werden. Diese Objekte interagieren dann miteinander, ähnlich wie Funktionen bei den Prozeduralen Programmiersprachen. Der scheinbare Nachteil bei diesem Konzept ist, dass der Kontrollfluss in Programmmen nicht so leicht nachvollziehbar ist, wie das bei Prozeduralen Pogrammiersprachen der Fall ist.

DNS

Domain Name System. Weist IP- Adressen im Internet oder in lokalen Netzwerken Namen zu. Also in etwa so wie ein Telefonbuch Teilnehmernahmen einer Telefonnummer zuordnet. 

Erste Erfahrungen damit habe ich zunächst einmal in meinem lokalem Netzwerk beim Aufbau eines File- Servers mit Hilfe von NFS  gemacht.

Unix, Linux und Co.

Auf Unix- Systemen und deren Verwandtschaft (Darwin, Linux) kann man die Namen der möglichen Host’s im Netzwerk in der Folgenden Datei konfigurieren:

/etc/hosts

Dazu braucht man root- Rechte. Also, beim Aufruf des Editors seiner Wahl darauf achten dass man das mit sudo … macht. Dort stehen die IP Adressen gefolgt von deren Namenszuordnung als Liste in etwa so:

127.000.000.001 localhost
xxx.xxx.xxx.100 Notebook1
xxx.xxx.xxx.101 Tablet

Hat man was neues gekauft, kann man es in der Datei mit eintragen und kann fortan damit kommunizieren indem man es beim Namen nennt.