Thursday, December 20, 2007

Dash Express - Finally a connected, crowd-sourced GPS

graphic-product-santa-teresa 2113067755_d4bb5a944e_m

 

I have had a GPS system for a little over a year. It is a MIP c310x and for $150 it does more than adequate a job of guiding me to my destinations. I have looked at the more expensive systems - like the ones from Garmin (Nuvi 360) and TomTom (Go 920) which retail for close to $600. I just found them an overkill. For the extra price you get spoken street names, maybe traffic information (you have to pay a monthly subscription) and maybe a wide screen display. But $450 just for those features - no thank you! I can do with out them.

From the first day I have had my GPS unit, I have wanted some features that I just did not find on any of the GPS units out there.

  1. Ability to download route information from the computer.
    Setting up a route to just one destination is fine using the touch-screen of a PND (Personal Navigation Device). But if you have to travel cross country, or if you wish to have multiple destinations - then the touch screen interface can become a pain. I have always wanted a way to define my route on my computer, where I have access to the Internet and I can perform research on the stops, etc and then have that route uploaded to the PND. There doesn't seem to be even one such PND out there that can accomplish this simple task.
  2. An Internet connected PND
    Many a times, I have found my self in a new neighborhood and I would want to find a certain establishment to visit. For example if I wanted to find a restaurant (maybe an Italian restaurant), current PNDs will show you a list of such locations based on the distance. But without a rating or review - how do you choose which one to go to. With WiFi becoming prevalent and ubiquitous, wouldn't it be nice if you could take your device to a hotspot and look up information about a point of interest (POI)? The PND could give you recommendations that are based not only on the distance but also on reviews. To take it a step further - the device could act like the iPhone - use a WiFi connection when available - otherwise connect via the cellular network to download that information.
  3. Share information about maps, roads and POIs
    Granted TomTom's MapShare can do some of that, but with so much social networking going on - their solution is pretty crippled. An ideal solution wouldn't just allow you to share road closure information, but also POIs, new roads, events, etc. Just about any information that could leverage location should be shareable. (TomTom can download road-closures, but you cannot directly share new road information - it is uploaded to TomTom and probably provided to you as a map update - for a price of course).

Enter Dash Express.

Dash Express seems to be the first PND that seems to have all of the capability that I always dreamed of wanting in my PND. I always wanted to build such a system - now I guess I don't have to smile_sad.

  1. Computer to PND Connectivity:
    screenshot-send2car
    The feature is called "Send2Car". Currently Dash Express does not seem to have the capability of defining your route on a mapping application like Google Maps or Virtual Earth, but you can use Send2Car to send addresses from your computer to the device. Even cooler, you can have someone else send you an address while you are on the road - Woof! Woof!
    The Dash - supports GeoRSS and KML (Getting your web content in the car!). So I don't see why it wont be possible to export your route from Google Maps as KML or use another tool to export it as GeoRSS and load the content on the Dash. Even if not possible in the first release - I am sure that the capability will be added very soon to the Dash.
  2. Traffic information:
    graphic-screen-santa-teresa
    The traffic information that Dash provides you isn't the same information that you see in your other PNDs. The traffic information is not just from the traditional sources, Dash also uses information from other Dash users - called the Dash Driver Network. (More on this technology in a later post). And because Dash uses other Dash users to detect traffic changes - it can provide information about local streets in addition to high-ways. This technology is just not available via any of the other PNDs.

  3. An Internet connected device:
    wifi_behind_the_bus
    The Dash supports both connecting to the Internet via WiFi and GPRS (cell phone) networks. Which means that while you are at home or near a HotSpot you could take advantage of the higher speed and band-width of WiFi and while you are on the road you could exchange information using the cellphone networks.
    It is this Internet connectivity that allows the Dash to break out of the mold of older PNDs. Which include:
    * Crowd-sourced traffic information from traditional sources as well as the Dash Driver Network.
    * Yahoo local search - and possibly ability to search using other services. (This makes the amount of POIs available to the device unlimited).
    * Send2Car - which allows you to send information from other Internet connected devices (traditional computers, cell-phones, etc) to the Dash.
    * MyDash - a portal for owners of the Dash. I am not clear about what this site provides - but you can possibly customize your Dash with specialized search buttons and maybe other customizations such as skins in the future.
    * AutoUpdate - which allows your Dash to always have the latest software and maps running on it.
    Because the Dash needs to use GPRS, there is a subscription component to owning the Dash. This varies from $9.99 to $12.99 depending on the plan you sign up for. (Compare that to TomTom's Plus Traffic service, which costs € 39.95 for 1 year subscription + costs for use of your mobile phone. http://www.tomtom.com/page.php?Page=rds-tmc - and gives you information only about the traffic as opposed to Dash - which gives you access to all the above features - value, value, value if I may say so)
  4. Open Content Platform:
    Though not touted as a feature on the product page itself - there is a lot of talk of the "open content platform" on the company's blog. This feature might be huge if it allows 3rd parties to either develop plug-ins that can be installed on the device and can then download location based data to the device or if the 3rd parties can publish data in a specific way, so that the Dash can take advantage of it (though one would be able to do that with the GeoRSS or KML formats).

graphic-product-promo

And just like the expensive Garmins and TomToms, the Dash Express sports a wide screen. At a price of $599 (http://shop.dash.net/Dash-Express-Pre-order), I think there is almost no reason that one would still want to but one of the other PNDs that are available at the same price point.

What does all this mean: Since the early 1980s when the first PNDs debuted the devices have hardly changed (current position showed on built-in maps and routing). In my opinion the Dash Express is the biggest innovation seen in almost 20 years. Every one of its new features will definitely strike a chord with current and new PND customers. This, I am sure, in the near term will translate to many of the other PND manufactures dropping their prices so as to compete with the better feature set that Dash provides. In the long term many of these features (especially true Internet connectivity) will start appearing on the other PNDs. And as the currently unique features to the Dash start appearing on the other devices - the Dash will start becoming cheaper. I would also think that the subscription costs might get cheaper as more people purchase the device. Another price driver might be the fact that by dropping prices, more people will sign on to the Dash service. And as more people get tied into Dash's network - the more information the Dash will have for it's users, which will possibly keep Dash as one of the best services to stay with. (So the faster that Dash can get more people tied to its service, the harder its competitors will find to steal away those users).

So for all my gushing for the product - are there features I don't like: Yes.

  • The Dash uses Linux: I wish it were a Windows device - because those are typically easier to hack. The device I have runs on Windows PocketPc and the GPS software is called iGO. The device is highly hackable and hence highly customizable. I can turn my Mio into PDA, I can customize the skin to show exactly what information I want on the map. (None of these are easy to do as there are no tools that allow easy access to the settings - never the less it is possible). On the other hand the TomTom that I have - has Linux running - and even though you can get an OpenSource TomTom app on to it, it mediadoesn't seem to be as customizable as my Mio running iGO. Though this is not a huge issue - where there is software - hack-ability will followsmile_wink.
  • The form factor: The Dash is not flat and thin and so wont fit in your pocket. So in it's current avatar - you probably will find it a pain to take it out of your car and walk with it. (It would be nice if the wing section in the back would fold down for storage - v2.o maybe).
     
  • The price: at almost $600 - is still pretty expensive. It makes the WAF (wife acceptance factor) that much lower.
  • 3D View of map:  The one feature I cannot find anything about and which I think is extremely important in today's GPS navigation systems is a 3D view into the map. None of the screen shots, nor the specifications on the company's website talks about 3D maps. I think that 3D maps make it a lot more easier to follow a route and if it isn't there in this version - then I would most probably wait for a version on which it will be offered.

So will I be pre-ordering the device? Even though I would love to have one to test, my Xmas gifts for this year have already been bought and I typically wait for v2.0 of any device before I go out I buy them. So probably not yet.... but if the device has 3D maps and given that the cool factor is so high for me on this device - I just might.

Finally, here is a video of a presentation the company did at Web2.0 Summit:

And Gizmodo has a video where the device was taken for a spin in a car: http://gizmodo.com/gadgets/gps/video-dash-gps-%252B-zillow--real-estate-stalk-fest-319732.php

The videos shows you all the cool features I have written about: Send2Car, Search using Yahoo! and mashups using Zillow and CraigsList.

A very cool device indeed!

Tuesday, December 18, 2007

Virtual Cable™ Car Navigation - Why Didn't I Think of That?

Here is an invention that makes me go "Now, why didn't I think of that?". A heads up GPS navigation system for cars.

1 

It is called the Virtual Cable. The driver sees the Virtual Cable - a line representing his path - projected on to the windshield. It looks like its a suspended cable - hence the name "Virtual Cable".

According to the inventor's website "The image is in true 3D and appears to be a natural part of the landscape. The driver uses only peripheral vision to follow the Virtual Cable™."

Virtual Cable™ Car Navigation - Safe, Simple and Intuitive

More about the technology: http://www.mvs.net/technology.html

The device is only a prototype right now and from the looks of the site - the inventor is trying to line up funding for taking this device to production.

Will be cool to see how the finished product looks and how much more information is displayed on the wind-shield.

Sunday, December 16, 2007

Mobile phone tracking

sc2  sc1

Beta GSM mobile phone tracking system via the GPS-TRACK satellite network

You plug in a cell phone number and it shows you where the phone is on a map.

Mobile phone tracking

According to the website:

Based on repeater triangulation, the system tracks mobile phones using GPS and GSM technology

Approximate margin of error:
10 meters (max.) for mobile phones in Europe and the U.K.
25 meters (max.) for mobile phones in the U.S.A., South America and Canada.
50 meters (max.) for mobile phones elsewhere.
This system will not work in countries without GSM technology networks.

Thumb Calendar

via Thumb Calendar [Adam Sporka's Home Page]

2037019771_2b77d5fa55

The "Thumb Calendar" by Adam Sporka is something I stumbled upon while searching for a calendar to print and keep in my wallet. And this calendar qualifies for it.... it is simple, small and most of all - innovative. The dates are printed continuously across the face and to read the dates for a particular month - you cover all the other months with your thumb - hence "Thumb Calendar".

398045889_5546076e53_m

Best plugin for publishing code snippets via Windows Live Writer

After testing a couple of different code snippet publishing plugins for Windows Live Writer (WLW), I found that Leo Vildosola's plugin to work best with Google's Blogger.

If you select the embedded option - the code is published properly colored and formatted with indentations and all.

Download from WLW Plugin Gallery

A couple of other useful plugins for developers:

Here is some sample code pasted via Leo's "Insert Code Snippet" plugin

// NOTE: This code snippet is designed for VS.NET 2005 or later.
// Additional reference: System.Security.dll
// using using System.Security.Cryptography;
// using System.IO;
// This is a button click event - to encrypt the DB string to disk:
private void btnEncrypt_Click(object sender, EventArgs e)
{
    // The DB string that we want to encrypt/decrypt:
    String strConnectionString = $strDBString$;
    // Call the custom method for encrypting the string:
    this.EncryptDBString(strConnectionString);
}

// This is  a button click event - to unencrypt the saved DB string:
private void btnDecrypt_Click(object sender, EventArgs e)
{
    String strConnectionString = this.DecryptDBString();
    // Do something with the unencrypted DB string ...
    MessageBox.Show(strConnectionString);
}

// This method will encrypt the provided DB string to disk
private void EncryptDBString(String DBString)
{
    /**************** Encrypt/Protect Database String ****************/
    // Convert the string to a byte array:
    byte[] arrDBString = System.Text.Encoding.Unicode.GetBytes(DBString);
    // Provide additional protection via entropy with another byte array:
    byte[] arrEntropy = { 4, 5, 7, 9, 4, 5, 7, 9 }; // Save this for unprotecting later
    // Encrypt/protect the DB string:
    byte[] arrEncryptedDBString = ProtectedData.Protect(arrDBString, arrEntropy,
        DataProtectionScope.CurrentUser);

    // Write the encrypted DB string to disk:
    using (FileStream fs = new FileStream($strFileName$, FileMode.OpenOrCreate))
    {
        fs.Write(arrEncryptedDBString, 0, arrEncryptedDBString.Length);
    }
}

// This method will decrypt the saved encrypted DB string
private String DecryptDBString()
{
    /**************** Decrypt/Unprotect Database String ****************/
    // Setup the unencrypted DB string to return:
    String strUnencryptedDBString = null;
    // Provide additional protection via entropy with another byte array:
    byte[] arrEntropy = { 4, 5, 7, 9, 4, 5, 7, 9 }; // Save this for protecting later
    // Setup the byte array that will hold the encrypted DB string:
    byte[] arrEncryptedDBString = new byte[0];
    // Read the encrypted DB string from disk:
    if (File.Exists($strFileName$))
    {
        using (FileStream fs = new FileStream($strFileName$, FileMode.Open))
        {
            // Reset the byte array's length based on read length:
            arrEncryptedDBString = new byte[fs.Length];
            // Read the encrypted file into the byte array:
            fs.Read(arrEncryptedDBString, 0, (int) fs.Length);
        }
    }

    if (arrEncryptedDBString.Length > 0)
    {
        // Decrypt/unprotect the DB string:
        byte[] arrUnencryptedDBString = ProtectedData.Unprotect(arrEncryptedDBString,
            arrEntropy, DataProtectionScope.CurrentUser);
        // Convert the byte array to a string:
        strUnencryptedDBString = System.Text.Encoding.Unicode.GetString(arrUnencryptedDBString);
    }
    // Return the unencrypted DB string:
    return strUnencryptedDBString;
}
            

XML Serialization/Deserialization in C#

Here is a code snippet that I continuously use; it is used to serialize an object to a string and deserialize an object from a string. (The interesting thing to see here is during serialization the code uses a StringBuilder object which is passed to an XMLWriter which is in turn sent to the XMLSerializer).
public static object Deserialize(string data, Type dataType)  
{   
    using (TextReader rd = new StringReader(data))   
    {
        XmlSerializer sr = new XmlSerializer(dataType);
        return sr.Deserialize(rd);   
     }  
}

public static string Serialize(object item)  
{   
    StringBuilder bld = new StringBuilder();   
    using (XmlWriter xmlWr = XmlWriter.Create(bld))   
    {
          XmlSerializer sr = new XmlSerializer(item.GetType());    
          sr.Serialize(xmlWr, item);    
          return bld.ToString();
     }  
}

Saturday, December 15, 2007

~| 137 |~

 

from: ~| 137 |~

137"One hundred thirty-seven is the value of a number called the fine-structure constant. This constant, 137, is the way physicists describe the probability that an electron will emit or absorb a photon. Because this is the basic physical mechanism of electricity and magnetism, the fine-structure constant has its own symbol, the Greek letter a, “alpha.”

Now, alpha is nothing more, nothing less than the square of the charge of the electron divided by the speed of light times Planck’s constant. Thus this one little number contains in itself the guts of electromagnetism (the electron charge), relativity (the speed of light), and quantum mechanics (Planck’s constant). All in one number! Not only that, this number isn’t like the gravitational constant or the universal gas constant, full of meters and kilograms and degrees Celsius. Alpha is a pure, dimensionless number — little wonder that people have been fascinated."

The Manycore Shift

Microsoft Parallel Extensions to .NET Framework 3.5: a managed programming model for data parallelism, task parallelism, and coordination on parallel hardware unified by a common work scheduler.

The Manycore Shift White Paper : This paper describes how Microsoft and industry partners are working together to enable businesses, software and hardware vendors, and individuals to take advantage of the “manycore shift”.

 

MSDN Magazine Article: Parallel Performance: Optimize Managed Code for Multi-Core Machines

MSDN Magazine Article: Parallel LINQ: Running Queries on Multi-Core Processors

Sunday, December 09, 2007

LAS 2.0 data types and corresponding data types in .NET

The LAS2.0's specification defines the data types it supports in table 3.1 on page 4.

The following table shows the corresponding .NET data types as well as the C# built in data type.

LAS 2.0 Moniker Data Type Size (in bytes) .NET Data Type C# Type Range
BOOL Logical 1 Boolean bool true or false
B1 Byte 1 SByte sbyte -128 to 127
UI1 Unsigned Byte 1 Byte byte 0 to 255
I2 Signed Short Integer 2 Int16 short -32768 to 32767
UI2 Unsigned Short Integer 2 UInt16 ushort 0 to 65535
I4 Signed Long Integer 4 Int32 int 2,147,483,648 to 2,147,483,647
UI4 Unsigned Long
Integer
4 UInt32 uint 0 to 4,294,967,295
I8 Signed 8 byte integer 8 Int64 long -9,223,372,036,854,775,808 to
9,223,372,036,854,775,807
UI8 Unsigned 8 byte integer 8 UInt64 ulong 0 to
18,446,744,073,709,551,615
R4 Real Float 4 Single float  
R8 Real Double 8 Double double  
R10 Real Extended precision Double 10 ?? ??  
STR STR zero (null – binary
0000 0000)
terminated variable
length string
VAR Byte[] byte[] Even though the data is stored as an array of bytes, one can use the string data type and use convertors to convert the string to the byte values. Also remember the values are not the .NET Char type which is 2 bytes in size
BFx bit field x, where x = 1,2,4,8 Byte, UInt16, UInt32, UInt64 byte, ushort, uint, ulong data types are used as bit fields
[n] Array VAR Array Array of any of the types defined above for example UI[4] is uint[4]

Notes:

  • The BitConvertor class as well as the BinaryReader class can be used to convert bytes to their corresponding .NET data types.
  • To convert a byte array to string one can do the following:
public static byte[] StrToByteArray(string str)
{  
    System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding();  
    return encoding.GetBytes(str);
}
  • And to do the reverse
byte [] dBytes = ...
string str;
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
str = enc.GetString(dBytes);
  • The BitArray class (System.Collections namespace) can be used as a helper class to work with the BFx data type. It can handle arbitrary length bit fields and provides methods that allow you to perform bit arithmetic.
  • An important thing to remember is that bool in .NET is actual 4 bytes long (which corresponds to a WIN BOOL). So if you need to marshal your structure to native code or need to convert the data to bytes - you will need to use the Marshal As attribute to do it as a byte (UI1)

More information:
C# Data Type:
http://msdn2.microsoft.com/en-us/library/1dhd7f2x(VS.71).aspx 
LAS 2.0 Specification:
http://www.asprs.org/society/divisions/ppd/standards/incitsl1_las_format_v20.pdf 
LAS Documents:
http://www.asprs.org/society/divisions/ppd/standards/lidar_exchange_format.htm

Got Tech Posters?

Via Chris Bowen's blog post - Got Tech Posters?

The post lists all the different posters available to .Net programmers. The posters are related to .NET 3.5, Visual Studio 2008 and other MS technologies like BizTalk Server.

Here are my favorites from my list (which are related mainly to VC# and VC++):