RSS-Feed

David Hadizadeh

E-Mail

Xing-Profil

LinkedIn

Impressum

 




Autoren Archiv

The indoor positioning solution (java library) has been updated for Android 7. You can find the download of the version 1.1 on the documentation page (http://hadizadeh.de/indoor-positioning/) or in the download center.

Kategorie: News | Keine Kommentare »

More technology implementations
20.02.2017 (David Hadizadeh)

There are some other technology implementations for this library. You can find them here: https://github.com/davidhadizadeh/…/technologies

Kategorie: Indoor-Positioning Addons | Keine Kommentare »

Neue Version der Dokumentation
13.09.2015 (David Hadizadeh)

Es ist nun eine neue Version der OHDM-API verfügbar. Diese beinhaltet auch das entfernen von External-Sources.
Die API-Version davon wird in den nächsten Tagen eingespielt.
Die aktuelle Version der Dokumentation ist hier zu finden: OhdmApi-Documentation

Kategorie: OHDM | Keine Kommentare »

Authentifizierung aktiviert
10.07.2015 (David Hadizadeh)

Die Authentifizierung ist nun für den Test-Server von OHDM aktiviert.
Sie ist in der Dokumentation im Kapitel 2.1 beschrieben.
Die Dokumentation ist hier zu finden: OhdmApi-Documentation

Kategorie: OHDM | Keine Kommentare »

Here is an implementation for Bluetooth LE on Android which filters them by UUID and uses their rssi. The other bluetooth addons will just take the iBeacon with the strongest signal. This one will take all signal rssi and map them. You can add this technology to the positioning manager with a single line of code:

1
positionManager.addTechnology(new BluetoothLeStrengthTechnology("BLUETOOTH_LE_STRENGTH", 4000, null));

The second parameter is the validity time for each scanned iBeacon. You can filter the devices with the third parameter. It is a list which contains all allowed iBeacon UUIDs.

Add the following classes to your technology package:

[weiter lesen…]

Kategorie: Indoor-Positioning Addons | Keine Kommentare »

Here is an implementation for Bluetooth LE on Android which filters them by UUID. This can be used for devices which switch their MAC address like the Gimbal beacons. You can add this technology to the positioning manager with a single line of code:

1
positionManager.addTechnology(new BluetoothLeTechnology("BLUETOOTH_LE"));

The technology will take the strongest signal of an iBeacon or another Bluetooth LE device.

Add the following classes to your technology package:

[weiter lesen…]

Kategorie: Indoor-Positioning Addons | Keine Kommentare »

Die API ist nun auf die neue DB-Struktur umgestellt, welche die Verknüpfung der Tag-Dates anders handhabt.
Sie ist unter http://ohsm.f4.htw-berlin.de:8080/OhdmApi erreichbar. Dort befinden sich auch aktuelle Daten von Berlin (mit richtiger Lat/Lng Zuweisung).

Kategorie: OHDM | Keine Kommentare »

API-Version 1.1 online
26.05.2015 (David Hadizadeh)

Die API-Version 1.1 ist jetzt auf dem Test-Server http://ohsm.f4.htw-berlin.de:8080/OhdmApi aktiv. Diese enthält eine neue Version der nahen Geographien. Außerdem ist sie komplett auf die neue Datenbank-Struktur umgestellt.

Die neue Dokumentation ist hier zu finden: OhdmApi-Documentation

Die Dokumentation enthält bereits die Authentifizierung, diese ist aber in der aktuellen API noch nicht aktiviert.
Geändert haben sich in der Dokumentation die Kapitel 3.2.2 bis 3.2.5.

Kategorie: OHDM | Keine Kommentare »

– Anpassung der entstandenen Authentifizierungs-Webservices
– Verknüpfung der API mit der Authentifizierung
– Erstellung von Unit-Tests
– Orte in der Nähe (Geometrien liefern) -> verbesserte Version
– Anpassung der API an die neue Datenbank (siehe Änderungen der Datenbank+)
– Auslieferung von Tile-URLs zu Zeiträumen (für die JavaScript-Animation)

Kategorie: OHDM | Keine Kommentare »

GPS Technology
10.05.2015 (David Hadizadeh)

If you want to combine indoor positioning with GPS positioning (outdoor) you can use the indoor-positioning library as well.
Here you can see an implementation of GPS technology, which will notify if a persisted position is in a defined range to the current GPS position.
It also checks if the GPS signal is new enough.
You can add this technology to the positioning manager with a single line of code:

1
positionManager.addTechnology(new GpsTechnology(this, "GPS", 5, 3000, 1));

3. parameter: radius of each persisted position (in meters)
4. parameter: minimum time interval between location updates (in milliseconds)
5. parameter: minimum distance between location updates (in meters)

Add the following class to your technology package:

[weiter lesen…]

Kategorie: Indoor-Positioning Addons | Keine Kommentare »

Indoor Ortung: Addons
7.05.2015 (David Hadizadeh)

Unter Indoor Positioning –> Addons sind jetzt Beispiele und Zusatzfunktionen für die Indoor Ortungs Bibliothek zu finden. Dabei handelt es sich um eine weitere Schicht um Koordinaten auf die Positions-IDs zu mappen, um eine alternative Persistierung und um ein Beispiel für eine Bluetooth-Low-Energy Implementierung unter Android.

Kategorie: News | Keine Kommentare »

If you do not want to save and receive IDs for positions you can use an alternative positionManager: MappedPositionManager.
The MappedPositionManager works the same way but takes and will send MappingPoints. A MappingPoint consist of X, Y and Z coordiantes so you can handle the positions in a coordinate system.

[weiter lesen…]

Kategorie: Indoor-Positioning Addons | Keine Kommentare »

Here is an implementation for Bluetooth LE on Android. You can add this technology to the positioning manager with a single line of code:

1
positionManager.addTechnology(new BluetoothLeTechnology("BLUETOOTH_LE"));

The technology will take the strongest signal of an iBeacon or another Bluetooth LE device.

Add the following classes to your technology package:

[weiter lesen…]

Kategorie: Indoor-Positioning Addons | Keine Kommentare »

SQLite Persistence-Manager (Java)
6.05.2015 (David Hadizadeh)

Here you can see an alternative implementation of the persistence manager for the positioning library.
This implementation is not for Android. If you want to use SQLite for Android you should adapt it for the SQLite database in Android.

[weiter lesen…]

Kategorie: Indoor-Positioning Addons | Keine Kommentare »

API-Dokumentation (Version 1)
4.03.2015 (David Hadizadeh)

Die finale Version der API-Dokumentation für dieses Semester ist jetzt online. Die API wird im nächsten Semester noch weiter entwickelt. Gerade, was das Abfragen von Geometrien in der Nähe angeht, wird noch viel geschehen.
Bitte benutzt diese Funktion derzeit noch sehr Vorsichtig und nehmt nur geringe Radius-Werte und kleine Geometrien, ansonsten wird der Server schnell überlastet.
Bei allen anderen Funktionen sollte es keine Probleme geben.

Download der API-Dokumentation: OhdmApi-Documentation.pdf

Kategorie: OHDM | Keine Kommentare »

API wieder erreichbar
26.02.2015 (David Hadizadeh)

Die API ist wieder erreichbar.
Die aktualisierte URL des Test-Systems ist oben zu finden.
Eine erste Version (Inhaltlich komplett, sprachlich noch in Verbesserungsarbeit) ist hier zu finden: OhdmApi-Documentation

Kategorie: OHDM | Keine Kommentare »

OHDM Server-Umzug
19.02.2015 (David Hadizadeh)

Weil wir gerade auf einen neuen Test- und Produktiv-Server umstellen, ist die API leider momentan nicht erreichbar. Wer derzeit damit arbeiten will, kann sie sich lokal installieren. Hierzu wird ein Tomcat-7 + Java 7 benötigt. Die War-Datei der API kann ich dann per Mail zukommen lassen.

Kategorie: OHDM | Keine Kommentare »

Indoor Ortung: Java-Library
22.01.2015 (David Hadizadeh)

Unter dem Menüpunkt Indoor-Positioning habe ich eine Java Bibliothek veröffentlicht, welche das Implementieren einer Innenraum-Ortung in einfachster Weise ermöglicht.

Die Library arbeitet Hardware unbezogen und unterstützt somit sämtliche zur Ortung in Frage kommenden Techniken.

Indoor Positioning Library

So sind beispielsweise folgende Elemente denkbar und werden durch die Bibliothek unterstützt:

  • WLAN
  • Bluetooth
  • NFC
  • RFID
  • QR-Codes / andere Symbole
  • Infrarot
  • Tastendruck
  • Lichtschranke
  • Kamera

Dabei kombiniert die Ortungs-Library die unterschiedlichen Medien und liefert automatisiert die aktuelle Position. Hierfür wird auf ein Fingerprinting Verfahren (Mapping) gesetzt, das aus einer Offline- und einer Online-Phase besteht. In der Offline-Phase werden die Positionen im zu ortenden Gebäude einmalig gemappt. In der Online-Phase wird anschließend die aktuelle Position mit ihnen abgeglichen und der wahrscheinlichste Ort ermittelt. Auch eine Caching Funktionalität ist verfügbar, welche es ermöglicht Signalstärken eines Zeitintervalls zu interpolieren.

Eine ausführliche Dokumentation und der Download der Jar-Datei ist unter folgender URL zu finden: http://hadizadeh.de/indoor-positioning/

Kategorie: News | 2 Kommentare »

OHDM-API auch von außerhalb erreichbar
22.01.2015 (David Hadizadeh)

Es ist nun kein VPN-Zugang mehr notwendig, um mit der OHDM-API zu kommunizieren.

Kategorie: OHDM | Keine Kommentare »

Aus aktuellem Anlass hier mal ein Beispiel-Code in Java zum Abfragen von Geometrien:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
URL url = new URL("http://141.45.146.152:8080/OhdmApi/geographicObject/nearObjects/highway=primary,highway=traffic_signals/1/"+URLEncoder.encode("MULTILINESTRING((13.513375234473285 52.42776656340422 0,13.513293936940071 52.42797876424454 0))", "UTF-8").replace("+", "%20"));
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Content-Type",
			"application/json; charset=utf-8");
 
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
		new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
 
while ((inputLine = in.readLine()) != null) {
	response.append(inputLine);
}
in.close();
System.out.println(response.toString());

Kategorie: OHDM | Keine Kommentare »

Entfernen von Tag-Dates
8.01.2015 (David Hadizadeh)

Das Löschen von Tag-Dates ist sowohl für alle Tag-Dates mit einer bekannten geographischen Objekt-ID möglich, als auch für ein spezielles Tag-Date mit eindeutiger ID möglich.

Für ein Objekt mit Tag-Date-ID:
DELETE: URL: /tagDate/<geographicTagDateId>

Für alle Objekte mit geographischer Objekt-ID:
DELETE: URL: /tagDate/geographicObject/<geographicObjectId>

HTTP-Status bei Misserfolg: 404 bei nicht vorhandener ID

Kategorie: OHDM | Keine Kommentare »

Entfernen geometrischer Objekte
7.01.2015 (David Hadizadeh)

Das Löschen von geometrischen Objekten ist sowohl für alle geometrischen Objekte mit einer bekannten geographischen Objekt-ID möglich, als auch für ein spezielles geometrisches Objekt mit eindeutiger ID möglich.

Für ein Objekt mit geometrischer Objekt-ID:
DELETE: URL: /geometricObject/<geometricObjectId>

Für alle Objekte mit geographischer Objekt-ID:
DELETE: URL: /geometricObject/geographicObject/<geographicObjectId>

HTTP-Status bei Misserfolg: 404 bei nicht vorhandener ID

Kategorie: OHDM | Keine Kommentare »

Löschen eines geographischen Objekts
21.12.2014 (David Hadizadeh)

Es ist jetzt auch eine Löschfunktion für ein geographisches Objekt implementiert, welche auch alle Abhängigkeiten zu Tag-Daten, Blob-Daten und Geographien entfernt.

DELETE: URL: /geographicObject/<geographicObjectId>

HTTP-Status bei Misserfolg: 404 bei nicht vorhandener ID

Kategorie: OHDM | Keine Kommentare »

Abfrage aller Geographien in der Umgebung
16.12.2014 (David Hadizadeh)

Die hier beschriebenen neuen Funktionen ermöglichen das Abfragen aller Geographien mit allen enthaltenen Informationen in der Umgebung.
Zu erkennen ist, dass die Parameter since und until, welche den Zeitraum der Geometrien bestimmen, optional sind. Sollte einer oder beide davon weggelassen werden, gibt es keine Einschränkung in die jeweilige Richtung der Zeitachse.

Mögliche neue URLs:

/geographicObject/nearObjects/<requiredKeys>/since/<since>/until/<until>/<distance>/<geometry>

/geographicObject/nearObjects/<requiredKeys>/since/<since>/<distance>/<geometry>

/geographicObject/nearObjects/<requiredKeys>/until/<until>/<distance>/<geometry>

/geographicObject/nearObjects/<requiredKeys>/<distance>/<geometry>

requiredKeys ist dabei eine dynamische Map, welche eine Reihe von Keys und Values beschreibt, bei der die Values ausgelassen werden können.
Diese Map beschreibt welche keys mit welchen Values in der Ergebnismenge bei den „tagDates“ vorhanden sein müssen.
Ein Beispiel:
key1=value1,key2,key3=value3
Damit wird festgelegt, dass key1 den Wert value1 genauso wie key3 den Wert value3 haben muss. Für key2 ist wegen ausgelassenem Wert nur erforderlich, dass er für das Geographische Objekt existiert. Auf diese Weise ist es möglich nach Straßen, Postleitzahlen etc. zu filtern. Auch alle straßenbezogenen Daten (oder andere Bereiche) wie die Straßen selbst, Verkehrszeichen oder Fußgängerüberwege in gesammelter Form können durch das Setzen des Keys bei weggelassenem Wert erreicht werden. Möchte man beispielsweise alle Objekte mit Straßen-Informationen erhalten, so ist der Parameter einfach nur auf „highway“ zu setzen. Werden die requiredKeys frei gelassen wird (//), so wird kein Filter verwendet und es werden alle Objekte in dem gewählten Umkreis (Angabe in Metern) und der Zeitspanne ermittelt.

Beispiel-Antwort der API:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[  
   {  
      "geographicObjectId":2177858,
      "attributes":{  
 
      },
      "externalSourceId":0,
      "externalSource":{  
         "id":0,
         "title":"OSM_nodes",
         "text":"OSM geometries with the id nodes"
      },
      "originalId":620874781,
      "geoBlobDates":null,
      "tagDates":[  
         {  
            "tags":{  
               "highway":"traffic_signals",
               "osm_timestamp":"2012-09-09T12:37:42Z",
               "osm_user":"Balgofil",
               "osm_version":"3",
               "osm_uid":"95702"
            },
            "valid":{  
               "since":"0001-01-01",
               "until":"3000-01-01"
            }
         }
      ],
      "geometricObjects":[  
         {  
            "valid":{  
               "since":"0001-01-01",
               "until":"3000-01-01"
            },
            "multipolygonString":null,
            "geometryCollectionString":null,
            "multilinestringString":null,
            "multipointString":"SRID=4326;MULTIPOINT(13.513375298118923 52.42776659475573 0)"
         }
      ]
   }
]

Kategorie: OHDM | Keine Kommentare »

Die in diesem Beitrag beschriebenen API-Funktionen wurde wieder entfernt und durch folgende ersetzt:

http://hadizadeh.de/2014/12/16/abfrage-aller-geographien-mit-allen-enthaltenen-informationen-in-der-umgebung/

 

Bei den neu hinzugefügten API-Befehlen handelt es sich bei allen um GET-Anfragen.

Mögliche neue URLs:

/geometricObject/nearObjects/since/<since>/until/<until>/<distance>/<geometry>

/geometricObject/nearObjects/since/<since>/<distance>/<geometry>

/geometricObject/nearObjects/until/<until>/<distance>/<geometry>

/geometricObject/nearObjects/<distance>/<geometry>

 

Zu erkennen ist also, dass die Parameter since und until, welche den Zeitraum der Geometrien bestimmen, optional sind. Sollte einer oder beide davon weggelassen werden, gibt es keine Einschränkung in die jeweilige Richtung der Zeitachse.
Die Abfrage der Geometrie-IDs ist derzeit noch nicht auf eine Anzahl beschränkt oder sortiert, bei großem angegebenem Umkreis kann es also zu größeren Datenmengen kommen. Darauf ist bitte beim Testen zu achten. Eine Implementierung dieser Einschränkungen wird noch folgen.

Beispiel-Antwort der API:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[  
   {  
      "key":1217525
   },
   {  
      "key":1217569
   },
   {  
      "key":1217581
   },
   {  
      "key":1238006
   }
]

Kategorie: OHDM | Keine Kommentare »

Folgende API-Funktion liefert alle Daten eines geographischen Objekts. Nur die Medien-Daten sind derzeit noch leer.

 

GET: URL: /geographicObject/<geographicObjectId>

Beispiel-Ergebnis:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{  
   "attributes":{  
 
   },
   "externalSourceId":0,
   "externalSource":{  
      "id":0,
      "title":"OSM_nodes",
      "text":"OSM geometries with the id nodes"
   },
   "originalId":2919204078,
   "geoBlobDates":null,
   "tagDates":[  
      {  
         "tags":{  
            "osm_user":"Slight",
            "osm_timestamp":"2014-06-16T19:36:51Z",
            "osm_version":"1",
            "osm_uid":"2120048"
         },
         "valid":{  
            "since":"0001-01-01",
            "until":"3000-01-01"
         }
      }
   ],
   "geometricObjects":[  
      {  
         "valid":{  
            "since":"0001-01-01",
            "until":"3000-01-01"
         },
         "multipointString":"SRID=4326;MULTIPOINT(12.93592839819927 52.391893794756506 0 0)",
         "multilinestringString":null,
         "geometryCollectionString":null,
         "multipolygonString":null
      }
   ]
}

Kategorie: OHDM | Keine Kommentare »

Neue API-Funktionalität:

GET: URL: /geometricObject/geographicObject/<geographicObjectId>

Beispiel-Ergebnis:

1
2
3
4
5
6
7
8
9
10
11
12
[  
   {  
      "valid":{  
         "since":"0001-01-01",
         "until":"3000-01-01"
      },
      "multipointString":"SRID=4326;MULTIPOINT(12.93592839819927 52.391893794756506 0 0)",
      "multilinestringString":null,
      "geometryCollectionString":null,
      "multipolygonString":null
   }
]

Kategorie: OHDM | Keine Kommentare »

Datenbank-Umstellung
7.12.2014 (David Hadizadeh)

Die API auf dem v-Server ist nun auf die ohdm-dev2 umgestellt worden. Dort können Änderungen über die API eingesehen werden.

Kategorie: OHDM | Keine Kommentare »

Auslesen einer externen Ressource
5.12.2014 (David Hadizadeh)

2 neue APi-Funktionen stehen zur verfügung:

GET: URL: /externalSource/geographicObject/<geographicObjectId>

Beispiel-Ergebnis:

1
2
3
4
5
{  
   "id":0,
   "title":"OHDM",
   "text":"OHDM internal geometries"
}

GET URL: /externalSource/<externalSourceId>

Beispiel-Ergebnis:

1
2
3
4
5
{  
   "id":101,
   "title":"OSM_nodes",
   "text":"OSM geometries with the id nodes"
}

Kategorie: OHDM | Keine Kommentare »

Get tagDates
3.12.2014 (David Hadizadeh)

Über die URL /tagDate/geographicObject/<ObjectId> lassen sich nun auch die Tag-Dates zu einem Geographic-Object abrufen. Dabei werden mehrere Tags, welche für das gleiche Datum valide sind, zusammengefasst.

Beispiel-Ergebnis:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[  
   {  
      "tags":{  
         "osm_user":"Slight",
         "osm_timestamp":"2014-06-16T19:36:51Z",
         "osm_version":"1",
         "osm_uid":"2120048"
      },
      "valid":{  
         "since":"0001-01-01",
         "until":"3000-01-01"
      }
   }
]

Kategorie: OHDM | Keine Kommentare »

Die Kommunikation zwischen v-Server und Cluster funktioniert nun. Der Port des v-Servers (Outgoing) war für Postgresql nicht geöffnet. Die aktuelle Version der API ist demnach jetzt testbar.

Kategorie: OHDM | Keine Kommentare »

Eintragen von Tag-Dates implementiert
1.12.2014 (David Hadizadeh)

Das Eintragen von Tag-Dates ist sowohl einzeln über einen POST auf die URL /tagDate/<ObjectId> als auch integriert als PUT in /geographicObject/ implementiert.

Beispieldaten:

1
2
3
4
5
6
7
8
9
10
11
{  
   "tags":{  
      "key1":"value1",
      "key2":"value2",
      "key3":"value3"
   },
   "valid":{  
      "since":"2013-12-01",
      "until":"2014-05-14"
   }
}

Wichtig: Die ObjectId muss natürlich in der Datenbank vorliegen.

Derzeit gibt es noch Probleme mit der Verbindung zwischen dem V-Server und dem Cluster, auf dem die Datenbank liegt.

Kategorie: OHDM | Keine Kommentare »

Die Präsentation ist hier als PDF zu finden: Zwischenpraesentation_04-12-2014

 

Sie enthält folgende Themen:

– Aufbau der API

– Grundlagen zu REST

– Möglichkeiten zum Upload von Mediendateien für OHDM

– Stand der aktuellen Implementierung

– JSON-Beispiel Anweisungen zum einfachen Anpassen

– Beispielhafter Client-Code

– Planungen

– Zusammenspiel mit Open Layers

 

Formatierte JSON-Strings aus der Präsentation:

URL (PUT): /externalSource/

1
2
3
4
{  
   "title":"Source-Titel",
   "text":"Source-Text"
}

URL (POST): /geometricObject/<geographicObjectId>

1
2
3
4
5
6
7
{  
   "valid":{  
      "since":"2013-12-01",
      "until":"2014-05-14"
   },
   "multipoint":"MULTIPOINT(1 2,1 2)"
}

URL (PUT): /geographicObject/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{  
   "originalId":"12345",
   "attributes":{  
      "key1":"value1",
      "key2":"value2",
      "key3":"value3"
   },
   "externalSourceId":400,
   "geoBlobDates":[  
      {  
         "valid":{  
            "since":"2013-12-01",
            "until":"2014-05-14"
         }
      },
      {  
         "valid":{  
            "since":"2013-10-01",
            "until":"2014-05-11"
         }
      }
   ],
   "tagDates":[  
      {  
         "tags":{  
            "key1":"value1",
            "key2":"value2",
            "key3":"value3"
         },
         "valid":{  
            "since":"2013-12-01",
            "until":"2014-05-14"
         }
      }
   ],
   "geometricObjects":[  
      {  
         "valid":{  
            "since":"2013-12-01",
            "until":"2014-05-14"
         },
         "multipoint":"MULTIPOINT(1 2,1 2)"
      }
   ]
}

Kategorie: OHDM | Keine Kommentare »

Für das Importieren von Kontakten in das Android-Adressbuch gibt es unterschiedliche Wege. Es gibt die Möglichkeit über ContentValues die Kontaktinformationen anzulegen und anschließend über den Android-ContentResolver den Kontakt hinzuzufügen. Hierfür müssen aber alle Werte einzeln angelegt und entsprechenden Konstanten von Android zugewiesen werden. Somit ist die vCard zuerst zu parsen und für jedes Element eine Bedingung, die zur richtigen Konstanten führt, anzulegen. Das ist bei sich ändernden vCard-Versionen schwer erweiterbar und wartbar. Daher ist der gewünschte Weg ein direkter Import der vCard. Dafür ist eine nahe liegende Lösung ein Content Provider.

[weiter lesen…]

Kategorie: News, Programmierung | Keine Kommentare »

NFC-Visitenkarte
27.01.2014 (David Hadizadeh)

Im Rahmen meines Studiums ist neben der Erzeugung eines Prototyps von einer Visitenkarte mit integriertem NFC-Tag auch eine Android-Applikation entstanden, welche ich hier vorstellen will.
Im Gegensatz zu bereits verfügbaren Applikationen ist diese auch in Hinsicht Kompression auf Kontakte spezialisiert und unterstützt somit mehrere Modi.

Die App kann über Google Play installiert werden.

Get it on Google Play

[weiter lesen…]

Kategorie: News | Keine Kommentare »

Es gab soeben ein Update der hier beschriebenen App „Radiation Runner“.

Dies verbessert die App um folgende Punkte:
Sobald man ein Spiel startet oder einen Track anlegen will, wird das WLAN aktiviert. Derzeit wurde dies nach Fertigstellung des Tracks nicht wieder deaktiviert, das wurde nun geändert.
Außerdem hat die Englische Hilfe ein Update erhalten.
Als letztes wurde ein Bug behoben, der das Einlesen von NFC-Tags betraf, dies sollte nun reibungslos funktionieren.

Bei Problemen oder Fragen stehe ich weiterhin gerne per E-Mail (zu finden im Header dieser Seite) oder über die Kommentarfunktion zur Verfügung.

Kategorie: News | Keine Kommentare »

Radiation Runner (Android-App)
21.06.2013 (David Hadizadeh)

Die nächste Android-App, die ich vorstellen möchte ist eine, die sich mit Techniken mobiler Geräte beschäftigt.
Dabei handelt es sich um ein Spiel, das man sich als Mischung von einer Schnitzeljagd, einem Topfschlagen und einem Versteckspiel der modernen Technik vorstellen kann.

Die App kann in „Google play“ unter folgendem Link herunter geladen werden:

Get it on Google Play

Alternativ ist der Link zusammen mit einem QR-Code im Download-Center verfügbar:
http://hadizadeh.de/downloadcenter/downloaddetails/?id=8

[weiter lesen…]

Kategorie: News | 1 Kommentar »

Gerade für Android-Entwickler ist es ein sehr interessantes Thema:
Wie veröffentliche ich ein Bildschirm-Video meiner App?

Mit dem Nexus 4 ist das kein einfaches Unterfangen.

Hierbei will ich in drei verschiedene Ansätze unterteilen:
– Aufnahme mittels einer App auf dem Android-Gerät
– Aufnahme per USB (mit der Android Debug Bridge)
– Aufnahme per HDMI

[weiter lesen…]

Kategorie: News | 2 Kommentare »

Android-App: MapTrack (Reise-Tracking)
28.02.2013 (David Hadizadeh)

Im Rahmen meiner Spezialisierung entstand in Zusammenarbeit mit Alexander Czyrny eine Android App, die ich an dieser Stelle vorstellen möchte.
Die App ermöglicht es, Reisen zu tracken, POIs (Point of Interest) hinzuzufügen und diese Reisen dann abzuspielen.
Als erstes möchte ich auf die Hauptfunktionen der App eingehen:
[weiter lesen…]

Kategorie: News, Programmierung | Keine Kommentare »

In Artikel 2 hatte ich die verschiedenen Spielarten bereits erklärt. Dabei fällt auf, dass bei allen Spielen Zufallswerte eine große Rolle spielen.
Es macht keinen Sinn das Farbspiel mit immer der gleichen Abfolge zu spielen. Man wüsste dort schon vorher, wann zu drücken ist.
Genauso wenig macht es Sinn beim Client diese Abfolge per Zufall zu ermitteln. Beide Clients hätten dann unterschiedliche Abfolgen.

[weiter lesen…]

Kategorie: News, Programmierung | Keine Kommentare »

Team Challenger Teil 4: OpenGL
17.09.2012 (David Hadizadeh)

Heute will ich auf die Spiele selbst eingehen, die über das Client-Server-Modell gespielt werden können.
Im ersten Artikel hatte ich erwähnt, dass ich vermeiden will, jedes mal die App zu updaten, wenn es ein neues Einzelspiel gibt.

Dazu wollte ich einen OpenGL-Parser programmieren. Dies habe ich auch lange Zeit gemacht, was sehr aufwändig ist. Eine wirkliche Freiheit hat man dadurch aber nicht, da man stark eingeschränkt ist, was die Funktionen angeht (welche für den Parser implementiert wurden). Daher bin ich von diesem Gedanken weg gegangen und habe einen viel schöneren Weg gefunden.

[weiter lesen…]

Kategorie: News, Programmierung | 2 Kommentare »

Team Challenger Teil 3: Synchronisation
14.09.2012 (David Hadizadeh)

Kommen wir zum 3. Teil der Android-App-Planung, zur Synchronisation.
Dazu gibt es mehrere Möglichkeiten.
Bei vielen Tools spielt die Zeit eine Rolle, zu der die Daten vom Client beim Server ankommen.
Das zu realisieren ist trivial.
In meinem Fall benötige ich aber die Zeit des Absendens der Daten vom Client zum Server.
Der Grund dafür ist, dass bei einem Geschwindigkeitsspiel, wie im letzten Beitrag beschrieben,
interessant ist, wann der Spieler beim Client den Button gedrückt hat und nicht, ob er eine bessere
Anbindung zum Server hat, als ein anderer Client.

[weiter lesen…]

Kategorie: News, Programmierung | 2 Kommentare »

Team Challenger Teil 2: Spielidee
11.09.2012 (David Hadizadeh)

Heute will ich kurz auf die Spielidee eingehen.
Es ist keine innovative neue Idee, sondern eine Weiterführung einer App, die mir im Playstore sehr zugesagt hat. Es handelt sich dabei um ein Multiplayer-Spiel, das aus vielen verschiedenen einfachen Spielen besteht.
Dabei geht es im Groben um Wissen und um Geschwindigkeit.

[weiter lesen…]

Kategorie: News, Programmierung | Keine Kommentare »

In den letzten Tagen habe ich angefangen ein Multiplattform-Spiel für Android und PC (Windows / Unix) zu planen und zu entwickeln. Dieses soll auf einem Client-Server Modell aufbauen.

Bei meinen Texten darüber will ich auf zwei Elemente genauer eingehen, die mich interessieren:

  • Client-Server-Synchronisation
  • Open-GL-Parser

[weiter lesen…]

Kategorie: News, Programmierung | Keine Kommentare »

PDFs zusammenfügen (auch encryptete)
28.06.2012 (David Hadizadeh)

In Vorbereitung auf einige Prüfungen füge ich mir gerne Folien aus verschiedenen PDFs zusammen, um diese eine zusammengefasste PDF besser lernen zu können. Dazu hat mir lange Zeit ein komfortables Programm gefehlt. Es gibt sie zwar wie Sand am Meer, allerdings fehlten bei bislang allen getesteten Tools immer essentielle Funktionen. Sei es mal die Vorschau, mal das Heranzoomen (wozu soll ich eine Vorschau haben, auf der ich nichts erkenne) oder Probleme mit verschiedenen Formaten.

[weiter lesen…]

Kategorie: News | 1 Kommentar »

In den letzten Tagen habe ich für einen Vortrag den Huffman Algorithmus in Cpp implementiert.

Da ich das Thema der String-Kompression sehr interessant finde, will ich euch heute den Code und die verschiedenen algorithmischen Herangehensweisen dazu vorstellen.

Zum Überblick aber erst mal ein paar Daten des Projekts:

Die Huffman-Klasse selbst, stellt alle notwendigen Möglichkeiten zur Verfügung, die der Huffman-Algorithmus ermöglicht.

Er ist stark an den Shannon-Fano-Algorithmus angelehnt. Allerdings ist die Optimalität des Binärbaums garantiert (Beweis siehe: Wikipedia-Artikel)

Dort sind auch weitere Beschreibungen zur theoretischen Funktionsweise nachzulesen. Auf diese möchte ich nicht länger eingehen, sondern mich auf die Implementierung konzentrieren. Eine Präsentation von mir auf Englisch über die theoretischen Ansätze, Vor- und Nachteile des Huffman Codes findet ihr aber auch in meiner Filebase.

[weiter lesen…]

Kategorie: News, Programmierung | 1 Kommentar »

Update des LSF Noten Checkers
20.02.2012 (David Hadizadeh)

Ich habe den LSF Noten Checker heute mal um eine interessante Funktion erweitert.

Es ist jetzt auch möglich, die geschützte PDF mit allen Studienleistungen anzusehen und daran auch den berechneten Notendurchschnitt zu prüfen. Dieser berechnet sich anhand folgender Formel: (Note * LP) / Gesamt-LP

Das Script parst die PDF und liest dadurch alle notwendigen Informationen auf.

Der Quellcode wurde wieder im Download-Center veröffentlicht.

Die Liste und der Notendurchschnitt sind über die Datei „average_calculator.php“ aufgerufen.

Viel Spaß mit den neuen LSF-Funktionen!

Kategorie: News, Programmierung | Keine Kommentare »

Interessante Links hinzugefügt
16.02.2012 (David Hadizadeh)

Im vor Kreativität strotzenden Bereich „Anderes“ habe ich ein paar interessante Links zu Websites (hauptsächlich Blogs) von Freunden hinzugefügt. Es lohnt sich in jedem Fall mal reinzuschauen.

Kategorie: News | Keine Kommentare »

Das LSF (Lehre Studium Forschung) dient für viele Hochschulen als Kurs- und Notenverteilung.
Leider besitzt es keine Benachrichtigungsfunktion für neu eingetragene Noten.
Alexander Czyrny und ich (David Hadizadeh) haben uns heute die Aufgabe gestellt, diese Funktion unabhängig vom LSF zu realisieren.
Den Code dazu wollen wir hier veröffentlichen.
Der LSF Noten Checker besteht aus fünf Dateien.
Die saveCount.txt und tmpSave.txt beinhalten das Ergebnis des letzten Aufrufes und reduzieren den Traffic zum LSF.
Beide Dateien sollten 777 (chmod) Rechte erhalten (Lese-, Schreibrechte sind mindestens notwendig).
Die einzige Datei, die angepasst werden muss, ist die config.php.
Diese beinhaltet euer LSF-Passwort, den LSF-Loginname (Matrikelnummer) und eine E-Mail-Adresse, an die die Benachrichtigungen für neue Noten gesendet werden.
Das Hauptscript selbst befindet sich in der lsf_reader.php. Diese stellt eine Verbindung mit der PHP eigenen Funktion Curl zum LSF her und liest die entsprechenden Daten aus.

[weiter lesen…]

Kategorie: News, Programmierung | Keine Kommentare »

C++ Mau-Mau (Windows Compiled)
30.11.2011 (David Hadizadeh)

Ich habe jetzt auf Anfrage zusätzlich eine für Windows compilierte Version im Download-Center hochgeladen.

Viel Spaß damit.

Kategorie: News | Keine Kommentare »

C++ Mau-Mau
24.11.2011 (David Hadizadeh)

Es gab mal wieder einen Beleg für das C++ Modul. Da dies etwas amüsant ist, will ich das hier mal posten.
Es handelt sich um das Spiel Mau-Mau, das objektorientiert und auf Console basierend programmiert werden sollte.

Mein Programm ermöglicht es nun 0-4 menschlichen Spielern und dem Rest vom PC gesteuerten Spielern (also auch 0-4) Mau-Mau mit den bekannten Grundregeln und den Sonderregeln (7: Ziehen, Bube: Wünschen, Ass: Aussetzen, Bube auf Bube nicht erlaubt) zu spielen.

[weiter lesen…]

Kategorie: News, Programmierung | 1 Kommentar »

Seitenumzug
19.11.2011 (David Hadizadeh)

Ich habe die Seite in den letzten Tagen mal auf einen neuen Server und eine neue Domain umziehen lassen.
Die Struktur wurde auch ein wenig geändert.

Kategorie: News | Keine Kommentare »

Mensa-Speiseplan auf dem Desktop
19.11.2011 (David Hadizadeh)

Wie einigen vermutlich bekannt ist, bin ich ein leidenschaftlicher Esser oder anders gesagt Nahrungsvernichter.
Aus dem Grund habe ich mir vor längerer Zeit ein kleines Widget gebastelt, um die Mensa-Speisekarten auf meinem Desktop zu sehen.
Dieses wurde dann noch an die HTW angepasst.
Eingeblendet werden alle Beilagen und die „Standard-Essen“. Aktionsessen habe ich ausgeblendet, da die sowieso meistens überteuert sind.
Da es sich hier ja um die Seite eines Informatik-Studenten handelt, will ich natürlich auch kurz auf die technischen Aspekte eingehen.
Das Ganze ist ein Widget für das Programm Samurize, das ich allen, die ihren Desktop ein wenig individueller gestalten wollen, ans Herz legen will.

[weiter lesen…]

Kategorie: News, Programmierung | Keine Kommentare »

Programmierung eines kompletten Netzwerkes
19.11.2011 (David Hadizadeh)

Dieses Projekt entstand im Rahmen einer großen Belegarbeit im Modul „Kommunikationssysteme“.
Das Projekt wurde in Groovy programmiert (war vorgeschrieben), was eine Abwandlung von Java ist. Ein Groovy-Framework wurde uns zur Verfügung gestellt.
Inhalt war die Programmierung eines Netzwerkes mit folgenden Daten:
2 File-Server, 1 Client, 1 Nameserver, insgesamt 4 Router, ein Hub.
Hierbei gab es 2 Netzwerke, die durch die Router mit verschiedenen Wegen verbunden wurden.
Das eine Netzwerk hatte die Token-Ring Topologie, das andere war ein Stern-Netzwerk.
Implementiert wurden alle Schichten und Protokolle der Netzwerke und der Geräte, mit zusätzlicher Fehlersteuerung und Wegefindung.

[weiter lesen…]

Kategorie: News, Programmierung | Keine Kommentare »

Sudoku-Löser
19.11.2011 (David Hadizadeh)

Ein kleines Praktikum an der Universität, das finde ich auf Grund seines praxisnahen Anwendungsbereichs erwähnenswert ist.
Das in Java geschriebene konsolenbasierte Programm liest automatisch ein Sudoku ein und löst es.
Hierbei ging es nicht um das Lösen allein, sondern auch um die Effizienz, bei der es das Tool unter die Top 10 geschafft hat.
Es hat am Ende ca. 30 verschieden schwierige Sudoku in 2 Sekunden gelöst.
Eine gute Lösung, um dem Sudoku-Wahn einen Strich durch die Rechnung zu machen.
Sollte allerdings behutsam eingesetzt werden, da es zu unerwarteten Reaktionen der Betroffenen kommen kann, wenn das neu gekaufte Sudoku-Buch auf diese Weise zu nichte gemacht wird.

Kategorie: News, Programmierung | Keine Kommentare »

Beschreibung
18.11.2011 (David Hadizadeh)

Diese Website ist eine kleine Seite, auf der ich regelmäßig meine Studiumsinhalte hochlade, um sie überall verfügbar zu wissen.
Sie sind in der Navigation zu finden. Zum Zugriff auf die Daten ist ein Login notwendig, der an gezielte Mitstudenten weiter gegeben werden kann.
In der Filebase sind einige alte Klausuren, Übungsaufgaben und Mitschriften zu finden.
Außerdem organisiere ich auf der Startseite alle für mich und meine Mitstudenten wichtigen Links, um sie schnell zugänglich zu machen.
Als weiteren Punkt habe ich einen Bereich für ausgewählte derzeitige Arbeiten oder Spielereien eingerichtet.
Dort ist derzeit die Entwicklung einer kleinen Android-Applikation zu finden.
Über die Entwicklung werde ich im Programmierungsbereich regelmäßig Notizen hinterlassen.
Außerdem habe ich im selbigen Bereich ein kleines Mensa-Gadget für den Desktop vorgestellt.
Sollte jemand eines der Tools interessant finden, Fragen zur Programmierung haben oder es nutzen wollen, dann kann man sich einfach auf direktem Weg (in der Hochschule) oder per Mail an mich wenden.
Ein gewisses Verständnis für Humor ist für einige der Texte auf der Website und der Übungsabgaben/Mitschriften von Nöten. Wer mich kennt, sollte wissen, welche hoch gestelzten Sätze ernst oder spaßig gemeint sind. Oder auch nicht.
Die Inhalte der Seite entstehen hauptsächlich in Freiblöcken und anderen enorm hilfreichen Zeiten.

Kategorie: News | Keine Kommentare »

Impressum