Scott Hanselman

Review: Garmin Nuvi 350 GPS

July 21, 2006 Comment on this post [7] Posted in ASP.NET | Coding4Fun | DasBlog | Reviews | Subversion | Tools
Sponsored By

Scoble (BTW, thanks for the mention) asks Do GPS's work for you? Heck ya.

Nuvi350I love me some GPS. We did an article on hooking up to the Streets and Trips (Pharos) GPS with .NET based on EdJez and Kzu's original code.

I talked about GPS's and Geotagging in a podcast earlier this year after Patrick Cauldwell, a geocaching phenom, got me thinking about getting involved in geocaching as a hobby. Portland, where I am, is near where the very first geocache was placed - it's huge here in Oregon.

Once you're GPS-enabled, everything gets more interesting. Photos gain a new dimension if you GPS-tag them.

I researched the crap out of GPSs. The TomTom GO 910 is well thought of, particularly in Europe. It's got a 20gig hard drive with the USA, Canada and Europe installed. It's meant to be installed in your car(s) - not carried around. It's rather thick, bigger that I wanted. I also couldn't find it for less than about $790.

The Garmin Nuvi is similar to the Tom Tom. However, it's thin. It's about the size and thickness of a deck of cards, except about an extra .5" tall. it's quite thin, and the antenna (the foldy thing in the picture) folds flush. No attachments, no wires except power. It has an internal lithium battery. It pops right off the suction mount using the button at the bottom.

Like the Tom Tom it also plays MP3s, shows JPEGs, and hooks up directly to Audible. The Audible feature is nicely integrated - it will pause the book for a moment, speak the directions, then start up again having backed up a few seconds so you don't lose your place.

It also supports waypoints and POIs (Points of Interest) from 3rd party providers. Great for preparing a geocaching trip. (There's also lists of Red-Light Cameras you can load in) You tell it if you're in a car or walking (or in a cab, etc) and it gives directions based on that info. The Windows software is pretty sweet too. The Nuvi has an SD Card slot (same as my camera, yay!) and also shows up as a disk drive when plugged in using a standard USB cable. The software automatically updates the firmware and maps over the net when it's connected.

It also has a nice two-way language translator available and comes with sample data. You select/build sentences by filling in nouns and verbs on the touch screen for common questions: Where is the _____? and it translates and speaks the translation. Slick.

B000BKJZ9Q.01._AA280_SCLZZZZZZZ_Let me say the TTS (Text to Speech) voices are great. There's many to choose from. I use the Australian chick, she sounds the most natural. The Nuvi speaks the street names, you'll hear "Turn left on Murray Road..." and let me tell you, it makes a difference versus "TURN! Now!"

Here's some reviews of the Garmin Nuvi 350 GPS.

  • CNET User Reviews - "The Garmin Nuvi 350 is a Work of Art!"
  • RPV Blogster - "I would rank it at the top 1% of the most useful gadget I ever used.(sic)"
  • CNET Editors - "The high-performance Garmin Nüvi 350 should be at the top of your list."
  • Joe Mehaffy - "NuVi's GPS receiver sensitivity was the best we have reviewed."
  • 37Signals - "Insanely recommended."
  • PCMag - "The nüvi 350 from Garmin may well have you prying the plastic out of your wallet."

This thing retails for $900+ at Best Buy and other places, but you can get it for as low as $600 if you look closely.  It's $620 at Amazon right now. I expect the price on this to drop at least another $200 as Garmin starts to upsell the Garmin Nuvi 360 GPS. The only difference is that the 360 has Bluetooth Phone Support.

As much as I'd like Bluetooth, I really need to stop talking on the phone. I picked my Nuvi 350 up at the local Best Buy using a combination approach of a "12% of any single item" along with a price-match I forced on them from the Froogle. It CAN be found for around (or under?) $600.

The WAF (Wife Acceptance Factor) on this is huge. Mo isn't much for directions, counting mostly on monuments. There's been a few times where she got lost, drove home to get me, and had me drive her somewhere. Not being able to get somewhere is very helpless, and while Mo's not big on gadgets, she loves this GPS. The directions are clear, the touch screen is easy to use. Our favorite feature is the "Food near here." We recently had breakfast at the wonderful Sanborn's and never would have found it if we hadn't "asked."

Seriously, Robert, I've done the Streets and Trips "have the wife hold the laptop" thing. It really doesn't work unless you want to mount your TabletPC to your dashboard vents. Mappoint 2006 tried to get turn-by-turn directions right, but barely achieved a late-90s level of mediocrity. Bless them for trying, but Mappoint is a kick-ass geodatamining tool. However, it's directions are poo.

A dedicated, installed GPS is such a joy. They change one's life in a small, but measurable way like only two other devices have thus far - the iPod and the DVR.

Now, the real question, how will Scott Bellware afford a Nuvi?

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

How to get Cookieless FormsAuthentication to work with self-issued FormsAuthenticationTickets and custom UserData

July 21, 2006 Comment on this post [2] Posted in ASP.NET
Sponsored By

Short answer: You can't.

I have an application that issues FormsAuthTickets like this...

// Create the authentication ticket                                   

FormsAuthenticationTicket authTicket = new

            FormsAuthenticationTicket(1,   //version

            userName,                    // user name

            DateTime.Now,                                //creation

            DateTime.Now.AddMinutes(Timeout),  //Expiration

            false,                      //Persistent

            MYPRIVATEANDVERYIMPORTANTDATA);

 

// Now encrypt the ticket.

string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

// Create a cookie and add the encrypted ticket to the cookie as data.

HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket);           

...that was written in .NET 1.1. (FYI - It could have just as easily been written in .NET 2.0, there's nothing special here, but I want to write this code to support (be run under) both 1.1 and 2.0.)

The built-in ASP.NET helper functions SetAuthCookie and GetAuthCookie have been expanded to handle Cookieless formsauth in .NET 2.0.  So, if I used have used these methods in 1.1 I'd get the new funcitonality when my app was run under 2.0. However, I wanted to include UserData - extra encrypted context stuff - in my FormsAuthenticatonTicket, so the only choice was to issue the cookie myself.

For many of us, the promise of a cookieless Session AND cookieless FormsAuthentication is very exciting:

  <sessionState cookieless="true"/>
  <authentication mode="Forms">
   <forms name=".SOMEAUTH"
             loginUrl="default.aspx"
             protection="All"
             timeout="30"
             path="/Whatever"
             requireSSL="false"
             slidingExpiration="true"
             defaultUrl="default.aspx"
             cookieless="UseUri" />
  </authentication>

If you issue your own cookie like I do, adding it to Response.Cookies yourself as I do, your ASP.NET application won't get cookieless FormsAuthentication.

The problem is, System.Web.Security.FormsAuthentication.SetAuthCookie(String, Boolean) doesn’t allow the setting of UserData. (only String.Empty is passed in on creation of the ticket)

To be clear – if I could use SetAuthCookie and GetAuthCookie (the public static interfaces) I'd have been fine and received the new functionality. However, the UserData support is where this important scenario falls down. I thought I could roll this myself, but all the classes I need are very internal and more than a little icky.

A Microsoft ASP.NET insider said:

There isn't an API that allows the use of UserData with cookieless tickets.  Unfortunately UserData was [not included] in the cookieless forms auth implementation.

Conclusion: If you want cookieless FormsAuthentication you must use SetAuthCookie. Full stop. Until then I will find somewhere else to store my UserData.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

How to show multiple columns in an ASP.NET Mobile ObjectList

July 21, 2006 Comment on this post [1] Posted in ASP.NET
Sponsored By

An object list with one columnWhen using ASP.NET Mobile Controls to display a list of information, you'll usually use an ObjectList and databinding. ObjectList is a great control with lousy documentation.

When you turn off AutoGenerateFields and bind a collection of objects to the list - as I'm in banking, my example is always "Accounts" - you need to give a list of Fields that you want to bind to.

<mobile:ObjectList
        ID="listAccounts"
        Runat="server" 
        AutoGenerateFields="False" 
        TableFields="Description;AvailableBalance">
    <Command Name="AccountHistory" Text="Account History" />
    <Command Name="Transfer" Text="Make a Transfer" />
        <Field DataField="Description" Name="Description" Title="Account" />
        <Field DataField="NumberMasked" Name="NumberMasked" Title="Number" />
        <Field DataField="AvailableBalance" DataFormatString="${0:0,0.00}" Name="AvailableBalance"
            Title="Balance" />
        <Field DataField="Index" Name="Index" Visible="False" />

</mobile:ObjectList>

An object list with two columnsHere's the icky part. By default the list will only show the FIRST field - in my case "Description" - in the list. It'll be hyperlinked to a subform that will show the rest of the fields. Remember, we're designing for mobile here.

The useful little-known/documented trick is that if you put a semicolon separated list of DateFields in the TableFields attribute you'll get multiple columns when the ObjectList first displays.

One other unrelated note. For some reason when I use DataFormatString="C" to format the decimal AvailableBalance as a Currency, I get a string star-like character. Perhaps something wrong with the current UI culture. I worked/hacked around it with a format string like DataFormatString="${0:0,0.00}" for now.

 

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Time Saver - Using Watir as a Startup Program in your ASP.NET Projects

July 21, 2006 Comment on this post [10] Posted in ASP.NET | Ruby | Watir | Bugs
Sponsored By

Often when you're inching forward within an ASP.NET project you'll find yourself repeating actions over and over again to get to a certain page, often three or four actions in to the application. As someone who hates repetitive actions this is what I do.

(These examples are in VS2005, but will work in VS2003, although the property dialogs have changed)

I use Watir to automate the clicks that will get me to where I'm going and set my Watir script to startup when I press F5 to start my project debugging.

Aspnetrubystart1

In this example, I have a script called justsignon.rb that signs on, visits the customer's accounts page, then goes to their Account History page. It's that page that I am currently debugging so I want to automatically show up there in a certain state when I start debugging.

require 'watir'

include Watir

require 'test/unit'

class WatirMakerRecorded < Test::Unit::TestCase

    def test_recorded

        ie = IE.new

        ie.goto('http://localhost:4970/MobileDemo/default.aspx')

 

        ie.text_field(:name, 'userTextBox').set('testuser1')

        ie.text_field(:name, 'passwordTextBox').set('123456')

        ie.button(:name, 'signInCommand').click

        ie.link(:text, /Hanselman/).click

        ie.link(:text, "Account History").click

        #UPDATE - the debugger will detach if the spawned process ends, so wait for ENTER

        gets

    end

end

Aspnetrubystart2

As I move forward in my development process I use different scripts to get me to different states.  This easily adds up to as much as 15 minutes to a half hour of rote "monkey clicking" that is usually wasted time.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

A half-year Podcasts

July 20, 2006 Comment on this post [11] Posted in PowerShell | ASP.NET | TechEd | Speaking | XML | Gaming | Bugs | Tools
Sponsored By

Hanselminuteslogo2When podcasting first came out I declared it totally lame in October of 2004.  Actually I said:

Sorry folks, PodCasting = Verbal Incontinence.  I'm just not feeling it.  You can't speak as fast as I read.  I don't like it when you read your PowerPoints to me, and I REALLY don't like it when you ramble on.  My commute isn't nearly long enough to slog through your PodCasts to find a nugget of goodness.  If you blog, I can ignore it, or read it in any order. I can skip forward by, gasp, moving my eyes. [Me in 2004]

Other folks had some good comments on Podcasting back in 2004:

FastmediaplayerThen fifteen months later I started a Podcast. I had started using iTunes' Podcast Directory and re-listened to some episodes of DotNetRocks. Carl Franklin called me and convinced me that if there was a short Podcast that was densely packed with information, it might not suck. After I started the podcast, Martin Plante said podcasting still sucks, but later came around and said it sucked less. :) Others have also had nice things to say. I also found that listening to a Podcast in double speed was helpful.

A half year later, we've hit 25 podcasts and had a blast doing it. I encourage you to check them out if you missed a topic you might be interested in. Also note that they all have PDF Transcripts if you prefer to read your podcasts.

A Half Year of Podcasts

Anyway, thanks again to Carl for the hard work and idea. Thanks to Travis for the name. Thanks to the listeners for listening. As always, send me your topics!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.