Samstag, 2. Juli 2011

(Feuerwehr) Hydranten Map App

(Feuerwehr) Hydranten Map App (für Android)


Mit dieser App können Hydranten ein eingetragen werden. Diese Daten werden dann an das OpenStreetmap Projekt übertragen, so dass die Community profitieren kann.

Besonderheiten:

Diese App wurde geschrieben, um die Jugendfeuwerwehr Leipzig Lausen zu unterstützen. Die Idee ist die Jugend mit dieser Technik zu motivieren.
Weiterhin soll der Sachverhalt angegangen werden, im Einsatzfall schneller einen Hydranten zu finden und damit wertvolle Einsatzzeit zu sparen.
Möglich wird das, weil Smartphones mittlerweile zum Alltag gehören. An dieser Stelle soll diese App für jede Feuerwehr einen Beitrag leisten.
Bei Fragen und Wünschen bitte eine Email senden.


Bestimmung des nächstgelegenen Hydranten


Die Kernfunktionalität der App ist die Anzeige des nächsten (Feuerwehr) Hydranten. Der Hinweis ("Hydrant in XX Metern.") wird sofort eingeblendet sobald eine Positionsveränderung festgellt wird.

Hinweis zum nächstegelegenen Hydranten

Start der App


Nach dem Start wird automatisch die aktuelle Position via des GPS ermittelt und die Karte zentriert.

Mit den Plus und Minus Buttons kann heraus und herein gezoomt.

Hydranten App Map Start

Eintragen eines Hydrants


Mit dem Klick auf das Menu (den Menu Button) werden die Fähigkeiten:

  • Hydrant hinzufügen

  • Hochladen
  • Damit wird die Synchronisierung mit der Seite Zscho.de vorgenommen. Er werden alle gespeicherte Einträge gesendet.
    Es werden keine personalsierten Daten übertragen. Lediglich Positionsdaten, Art und Durchmenge des Hydranten.

    Eingetragene Hydranten sind unter Übersichtskarte einsehbar.


Hydranten App Menu

Hinweisschild


Ausgehend vom Hydrantenhinweisschild kann man die Informationen ablesen und eintragen. Zur Zeit sind nur die Verbreitesten auswählbar.
Gerne werden aber weitere Unterarten auf Wunsch eintragen (Email senden.)

Hydranten Auswahl

Hochladen


Das Hochladen bzw. Synchronisieren kann je nach Verbindung und nach Anzahl etwas dauern.

Hydranten Hochladen

Danksagung

An dieser Stelle möchten wir gerne dem OpenStreetmap Projekt bedanken für das Kartenmaterial.

Nicolas Gramlich für guten Beispielquellcode des Openstreetmapviewers.

Referenzseite bei Zscho
Hinweis

Sie möchten eine eigene Android App für Ihr Geschäft haben? Melden Sie sich unverbindlich bei uns.
.

Freitag, 24. Juni 2011

PHP time confusion

PHP (5.3.5) seems only wanting English date format:
Few days ago, I wanted to convert German month names (Februar, März etc.) into time and it failed. Although
$>locale -a | grep de_DE
de_DE
de_DE@euro
de_DE.utf8

says de_DE is installed. Strange. See here:
<?php 
//print_r(localeconv());
setlocale(LC_ALL,"de_DE");
setlocale(LC_TIME,"de_DE");
//print_r(localeconv());
echo strtotime("01. October 2011")."\n";
echo strtotime("01. Dezember 2011")."\n";
// echo strtotime("01. Dezember 2011")."\n";
// echo strftime("%d %B %Y","01 Dezember 2011");
echo "\n";
// echo strftime("%B","Dezember");echo "\n";
//var_dump(date_parse("01 Dezember 2011")); ?>

What would you expect? That is what I'm get:
$>php test.php
1317420000


Right, German month names are not recognized anymore.

Mittwoch, 22. Juni 2011

NSClient++, Nagios and Eventlog

Nagios reading Windows Event Log



The host configuration for the example looks like:

define service{
use generic-service
host_name windows-host
service_description EventLog_YOURAPPLICATION
check_command check_windows_eventlog
}


In commands configuration (/etc/nagios/objects/commands.cfg)

# windows eventlog
define command{
command_name check_windows_eventlog
command_line /usr/lib64/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c CheckEventLog -a file=application MaxWarn=1 MaxCrit=2 filter+eventSource=YOURAPPLICATION "filter=generated gt -10m" truncate=1000 "syntax=%generated%: (%count%)" unique
}

The really important time consuming issue was:



"filter=generated gt -10m"

Most site wrote something like:

"filter=generated > -10m"

Hint: the gt instead of >
But that did not work. Mainly the result was:

CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.

Dienstag, 14. Juni 2011

Simple Web benchmark with Perl or faking web login with Perl

Sometimes it is not necessary to start Apache's jmeter or selenium for benchmarking a web site.
But one difficulty remains: Authentification.

What else is needed by common frameworks?
- HTTPS
- Cookies
  • Package libwww-perl (perl-libwww-perl-5.805-1.1.1.noarch or perl-libwww-perl)
  • Package HTTP
For details have a look at CPAN

Perl helps out with a few lines. Furthermore this also one way for automating web login to gain a valid session. This valid Session (or rather the Cookie) will be stored in the variable "$browser".

#!/usr/bin/perl
use LWP;
use Data::Dumper;
use HTTP::Cookies;
use Time::HiRes qw( time );

my $browser = LWP::UserAgent->new;
my $cookie_jar = HTTP::Cookies->new();
$browser->cookie_jar($cookie_jar);

my $loggedinPage = $browser->post(
'https://cv-parser.de/',
['username'=>'user', 'password' => 'password' ]
);
my $start = time();
print 'Header: '. Dumper($loggedinPage->{'_headers'})."\n";
my $end = time();
printf("Login: %.2f\n", $end - $start);


The only difficult part, is to evaluate the form parameter which the original site uses.
At this point Firebug or Chrome development bar is your friend.

Samstag, 11. Juni 2011

Circumvent AJAX Cross Domain Errors

Browser Cross Domain Problems


This time: two ways of executing asynchronous Javascript Browser calls to deal with Browser's security policy.
AJAX Cross Domain calls are usually forbidden, but in somtimes it is needed. Think of including third party libraries.

Apache's mod_rewrite module


If you use OpenSUSE you need the modules: mod_proxy,mod_headers, mod_proxy_http, php5. See /etc/sysconfig/apache2 at APACHE_MODULES= .

In the vhost.d configuration file it would look like:

ServerName 127.0.0.1
RewriteEngine On
RewriteLoglevel 99
RewriteLog /tmp/apache_rewrite.log
RewriteRule ^/RewriteThisStringToTarget$ https://TargetDomain.com/ [P,QSA,L]
/Virtualhost>

Whereby P stands for Proxy mode, all queries will be redirected to the target (ProxyPass).
QSA query string append, that means all parameter will be redirected
L last, no more rewrite rules will be executed

rewrite the AJAX calls in PHP


Well, not every web host runs Apache, so an alternative solution is:

Write an HTTP relay. What to do? Read the response HTTP header and re-set/forward the actions.
Hereby essential is:
Cookies

if (preg_match("/Set-Cookie: ([A-Za-z]+)=([a-zA-Z0-9]+); expires=(.+);/", $line, $match))
setcookie($match[1],$match[2]); //,$match[3],'/');

Content length (for not waiting for timeout)

if (preg_match("/^Content-Length:\\s+([0-9]+)/", $line, $match))
$content_length = $match[1];

Transfer ecoding

if (strpos($response, "\r\n\r\n") > 0 && 0 == preg_match("/Transfer-Encoding: chunked/i",$response))
$content_length -= strlen($line);

Chunked transfer

/* saerch for the hint of chunked transfer length, e.g. "^f512$"; strip them out */
if (preg_match("/\r\n[a-z0-9]+/m",$response))
$response = preg_replace("/\r\n[a-z0-9]+/m","",$response,1);
/* search for chunked transfer termination, chunked transfer sends an explicit 0 */
if ($line=="0\r\n")
$response = preg_replace("/\r\n0/m","",$response,1);


I hope this few hints give a good overwiew about what to do, when dealing with HTTP relay.