Best thing to run on Freerunner and Neo1973 machines today?

Daniel Benoy daniel at benoy.name
Thu Feb 19 18:22:04 CET 2009


On Thursday 19 February 2009 10:41:58 you wrote:
> On Thu, Feb 19, 2009 at 5:32 PM, Daniel Benoy <daniel at benoy.name> wrote:
> > In short, that script calls nsupdate which, using some private key authentication magic, changes my 'myphone.dynamic.example.com' address to the IP of my phone's ppp0 interface.  So every time I log in to GPRS I become reachable by that address.
> >
> > Then, I made up a short script on my blog that creates an outgoing connection to the gpsd port on my phone's address, and asks it where its current location is, then renders the results using the google maps API (which is free to use non-commercially).
> 
> Nice!
> 
> Mind sharing this blog script, too?
> 
> r
> 

----
<?php
// Read in the line from cache
$fresh = 0;
$cachefile = '/var/cache/gps';
$fh = fopen($cachefile, 'r');
if ($fh) {
  $resp = fread($fh, filesize($cachefile));
  fclose($fh);
}

// Refresh from GPS only if more than a minute has passed since the creation time of the cache
if (time() - filemtime($cachefile) > 60) {
  print "Refreshing from live GPS data ... ";
  for ($i=0; $i<3; $i++) {
    $sock = @fsockopen("myphone.dynamic.example.com", 2947, $errno, $errstr, 3);
    if ($sock) { break; }
  }
  if (!$sock) {
    print "Could not connect to GPS.  Using cached data.<br/>";
  } else {
    for ($i=0; $i<10; $i++) {
      @fwrite($sock, "O\n");     # Query what we actually want
      $realresp = @fread($sock, 384);
      if (strncmp($realresp, 'GPSD,O=', 7)) {
        print "<!-- Unexpected response from GPS connection. -->";
      } elseif (strncmp($realresp, 'GPSD,O=?', 8) == 0) {
        print "<!-- The GPS connection responded, but had no fixed location. -->";
      } else {
        $resp = $realresp;

        $fh = fopen($cachefile, 'w');
        if ($fh) {
          fwrite($fh, $resp);
          fclose($fh);
          $fresh = 1;
        }
        print "Success!<br/>";
        break;
      }
    }
    if ($i == 10) {
      print "Failed.  Using cached data<br/>";
    }
    @fclose($sock);
  }
}

//print($resp);
?>

<script src="http://maps.google.com/maps?file=api&v=2&key=MY-GOOGLE-API-KEY-HERE-GET-YOUR-OWN-FROM-GOOGLE" type="text/javascript"></script>

<div id="map" style="width: 500px; height: 300px"></div>
<script type="text/javascript">
  //<![CDATA[
    if (GBrowserIsCompatible()) {
      var map = new GMap2(document.getElementById("map"));
      map.addControl(new GSmallMapControl());
      map.addControl(new GMapTypeControl());
    }
  //]]>
</script>

<?php
// Make sure the data is fresh
if ($fresh || time() - filemtime($cachefile) < 900) {
  // Parse GPS response
  $location = split(" ", $resp);
?>

  <script type="text/javascript">
    //<![CDATA[
      if (GBrowserIsCompatible()) {
        map.setCenter(new GLatLng(<?php print($location[3])?>, <?php print($location[4])?>), 13);
        var point = new GPoint(<?php print($location[4])?>, <?php print($location[3])?>);
        var marker = new GMarker(point);
        map.addOverlay(marker);
      }
    //]]>
  </script>

  Last update (GPS time): <?php print(date("Y-m-d H:i:s", $location[1]))?><br/>
  Latitude: <?php print($location[3]); ?><br/>
  Longitude: <?php print($location[4]); ?><br/>
  Heading: <?php print($location[8]); ?><br/>
  Ground Speed (km/h): <?php print($location[9]  * 3.6); ?><br/>
<?php } else { ?>
  <script type="text/javascript">
    //<![CDATA[
      if (GBrowserIsCompatible()) {
        map.setCenter(new GLatLng(0, 0), 1);
      }
    //]]>
  </script>

  <p>Unfortunately, there has been no GPS data update in at least 15 minutes.  This probably means that the phone is currently unreachable.</p>
  <p>The phone must be connected to a publicly accessible network, such as cellular internet GPRS, in order to be reached for GPS location information.   If the phone is connected to a local wireless LAN which is firewalled, or the phone is off or its GPS receiver is deactivated, then it will be unable to provide telemetry.</p>
<?php } ?>
----

-- 
Daniel Benoy
http://daniel.benoy.name




More information about the community mailing list