Sunday, January 23, 2011

Price Chopper's RoboDeli is great idea, but flawed

I just did some Sunday shopping at a local Price Chopper supermarket.  It was pretty busy and there was a long line at the deli counter.  With in the last few months, they implemented a computerized ticket system.  Instead of grabbing a ticket and waiting for a number to be called, you pushed a button on a touch screen and a numbered ticket was printed out for you.  On a large TV screen above the deli, the ticket numbers currently being served and tickets to be served were listed, along with their approximate wait times.

Knowing the wait time is handy, it gives you a better idea of how long you will be waiting before you be served..  They also have a touch screen set up to allow you to place your order and come back later to get it.  Since the wait time was up to 20 minutes, I decided to give the "RoboDeli" a shot.

The RoboDeli worked, but it was an exercise in frustration to use.  The touch screen was the main culprit, but the software design had a few flaws too.  The touch screen was just bad.  It was very difficult for it to register a button press and when it did pickup a button press, it would often get the wrong button.

I just wanted to get some ham.  While I was able to easily select "ham", I had to scroll through several pages of items to get the one I wanted.  Those buttons were large and while it took a while to get it to read my finger press, it got the right selection.

Next came the weight and thickness.  Those buttons were smaller and it took much longer to get the right selection to register.  I then added the ham to the order and went to complete the order.

It asked if I wanted to get a text message on my phone when the order was ready.  That's a brilliant idea, but they really messed up on the implementation.  To enter in the phone number, you were presented with a numeric keypad on the screen, plus skip, completed, and clear buttons.

The number buttons were small and close together.  I don't know if it's supposed to remind you of a phone, but it only used a small portion of the display.  Every time I pressed the "5" key, it would register as "2".  The really annoying part was that it had no concept of a backspace button.  The clear button would clear all of the numbers, forcing you to start from the beginning.

After several failed attempts, my 10 year old daughter took time off from texting all of her friends to take pity on me and enter the number in herself.  She had less luck than I did.  We finally gave up and pressed the skip key to send the order to the deli.

At that point, it went back to it's home screen.  No order number or any other way of identifying my order.  When they processed my order, it would be placed in a cold case next to the deli.  It would have an order number on it, but you wouldn't know what that order was.  You just have to remember what you ordered and grab the right one.  And also to remember to periodically check back to see if it was ready.  You also had to know where the pickup would be, that was not clearly identified.

It took about 4 minutes for me to place the order.  That's a long to order a 1/2 lb of ham.  Of that time, 2.5 minutes were occupied with my failed attempt to enter in my phone number. It would take longer for 10 people to enter in their orders in total (without picking them up), than it would for 10 people to wait at the counter and actually get their order.

What they are trying to do is a great idea, they just dropped the ball on how they implemented it.  Something that is supposed to save you time should not take longer and annoy you in the process.  This is what they need to do to fix it:

  1. Display a large sign over the screen that would list the steps needed to place the order and where to pick up the order.  While you can display that information on the screen, this way it's always available for the user.
  2. Get a more responsive and accurate touch screen.  This isn't esoteric technology.  Your self serve checkout registers have much better accuracy and response on their touch screens.  You should be at least at that level of accuracy for the RoboDeli.
  3. Page Up and Page Down types of buttons are keyboard/mouse navigation tools.  With touch screens, you scroll through lists by dragging the list with your finger.  The system feels like it was designed to be used with a mouse, not a finger.  Find the person who designed this system and give him an iPad and show him how touch screen applications really work. 
  4. Use the entire screen for input.  A larger phone number pad would have been better.  It doesn't cost anything extra to use more of the screen.
  5. Add a backspace key. Not being able to the delete just a single character is just mind boggling bad.
  6. Display the order number so the user can remember what order to pick up.
  7. Have an option to print the order ticket.  With the information of what the customer just ordered, you can suggest complimentary items to go with that order and provide coupons on the ticket itself.  "Buying a lot of cold cuts? Here's a coupon for mustard."  Every point of interaction with a customer is a chance to sell him something.  The store already has a machine that prints out coupons when you swipe your AdvantEdge card, so you already have the ability to do this.
  8. Have a mag strip reader to be able to read the AdvantEdge card (Price Chopper's loyalty card) and be able to print the customer's name on his order.  If you could add a mobile number to the AdvantEdge card account, that would be even easier for text notifications.

Monday, January 10, 2011

A Random Vegas Observation

I like walking the strip in Vegas at night, it makes for great entertainment.  I just love watching everything going on.  I’m not into gambling, so I just walk around and take pictures of the bright lights.  One of the seedier parts of the Vegas Strip Life are the “Porn Slappers”.  If you have never been to Las Vegas, Porn Slappers are people who stand on the sidewalk and hand out “business cards” for “contractors in the adult service industry”.  Prostitution is illegal in Clark County, this is one of the ways that they advertise their services.

They are not allowed to come up to you and harass you (that right is reserved for Crossgates Kiosk employees), so they need to do something to get you attention.  They slap the cards in their hand to get your attention.  Thus, the “Porn Slapper” name.  The more likely they think you would be interested, the more slaps you hear.  Welcome to Las Vegas!

The streets are just littered with cards with pictures of half-naked women, sporting what appears to be non-factory equipment. I’ve been to Las Vegas for work a few times, but it’s not a place I would bring my kids to see.  I don’t want to have to explain to an 8 year old what an “escort” is.

While I have never seen anyone take one of the cards, they must be effective.  The Porn Slappers are all over the strip.  While I tune them out as background noise, I have seen quite a few people take offense to them.  They are harmless, but it’s not what you expect to see back home.

I was walking down by Planet Hollywood and I found myself instep with a retired couple from Milwaukee.  They were on vacation and this was their first trip to Vegas.  They were a little unnerved by the Porn Slappers, so I decided to help them out a bit  We chatted a bit and I explained what the Porn Slappers were. I told them that I usually say gibberish to the Porn Slappers, it confuses them and throws them off their game a bit.

So we walked one, and whenever a Porn Slapper came close, I would go into “Denny Crane” mode.  I would just say random things like:

  • I’m looking for a one-armed man
  • Are you my mummy?
  • Denny Crane, Denny Crane
  • Tippecanoe and Tyler too
  • Vote for me and shoes for all
  • Member, FDIC

Pretty much just random sayings, whatever floated out the archives. And the Porn Slappers would just back away from us.  Mr and Mrs Milwaukee were greatly entertained and I had a chuckle or too.  Cheap fun on the strip.

Wednesday, January 05, 2011

Scrolling a ListView’s EditItemTemplate with some help from jQuery

I’ve been using ASP.Net’s ListView control and I cam across a little quirk while setting up the editing bits.  I have an EditItemTemplate defined that has some input controls and a couple of nested ListViews.  It’s a nice way of defining a hierarchal editing view.  If you haven’t used a ListView before, Scott Mitchell have a great tutorial.

My ItemTemplate displays the data for each line of data and has a couple of buttons, one to edit the item, the other to delete it.  When you click the edit button, you get a page refresh and ASP.NET renders the EditItemTemplate with the editing controls and the user can edit the item and save the changes.
The problem was when you needed to scroll down the page to make the EditItemTemplate visible in the browser.  If the height of the ListView was greater than the visible height of the browser, the user would have to scroll down the page to get to the first input control.  I ended up using a bit of jQuery to scroll the edit area into view for the user. 
This is an edited down version of the EditItemTemplate for a ListView that I’m currently working on:
<EditItemTemplate>
    <div style="padding: 0 0 10px 0;" class="MyEditItemTemplate">
        <b>Calendar Name:</b>
        <asp:TextBox ID="txtCalendarName" runat="server" 
            Text='<%# Bind("CalendarName") %>'></asp:TextBox>
        <asp:ImageButton ID="imgbUpdateCalendar" runat="server" 
            ToolTip="Update Calendar" AlternateText="Update Calendar" 
            CommandName="Update" 
            ImageUrl="~/Images/accept.png" />&nbsp;
        <asp:ImageButton ID="imgbCancelUpdate" runat="server" 
            ToolTip="Cancel" AlternateText="Cancel" 
            CausesValidation="false" CommandName="Cancel" 
            ImageUrl="~/Images/cancel.png" />
        <br />
        <div style="padding: 5px 0 0 40px;">
            <div style="border: 1px black solid">
                <asp:ListView ID="ListViewChildCalendars" 
                    runat="server" DataSourceID="odsChildCalendar"
                    DataKeyNames="RecordID" 
                    InsertItemPosition="FirstItem" 
                    OnItemInserting="ListViewChildCalendars_ItemInserting">
                    <LayoutTemplate>
                        <span class="SubListViewHeader"><strong>Associated Calendars</strong></span>
                        <blockquote>
                            <asp:PlaceHolder runat="server" 
                            ID="itemPlaceholder"></asp:PlaceHolder>
                        </blockquote>
                    </LayoutTemplate>
                    <ItemSeparatorTemplate>
                        <hr />
                    </ItemSeparatorTemplate>
                    <ItemTemplate>
                        <%# Eval("CalendarName") %>&nbsp;
                        <asp:ImageButton ID="imgbDeleteCalendar" 
                            runat="server" 
                            AlternateText="Remove Calendar from Group" 
                            ToolTip="Remove Calendar from Group" 
                            OnClientClick="return DeleteConfirmation('C', this.name);" 
                            CommandName="Delete" 
                            ImageUrl="~/Images/delete.png" />
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <div>
                            <b>Calendar Name: </b>
                            <asp:DropDownList ID="ddlChildCalendars" 
                                runat="server" DataSourceID="odsCalendarList"
                                DataTextField="CalendarName" 
                                DataValueField="RecordID">
                            </asp:DropDownList>
                            &nbsp;
                            <asp:ImageButton ID="imgbAddChildCalendar" 
                                runat="server" 
                                ToolTip="Associate Calendar with Group" 
                                AlternateText="Associate Calendar with Group" 
                                CommandName="Insert" 
                                ImageUrl="~/Images/accept.png" />
                        </div>
                    </InsertItemTemplate>
                    <EmptyDataTemplate>
                        <span class="SubListViewHeader"><strong>Associated Calendars</strong></span>
                        <blockquote>
                            This list is empty</blockquote>
                    </EmptyDataTemplate>
                </asp:ListView>
            </div>
        </div>
        <asp:ImageButton ID="UsedForScrolling" runat="server" 
            ImageUrl="~/Images/0.gif" CssClass="UsedForScrolling"/>
    </div>
    <br />
</EditItemTemplate>


This EditItemTemplate has a nest ListView to associate other items to item currently being edited.  It’s basically a pick list populated from a drop down list.  Since each selection from the list generated a page refresh, it is important to keep the EditItemTemplate displayed on the page.

All of the controls in the EditeItemTemplate are wrapped inside a <div>, with the CSS class name set to “MyEditItemTemplate”.  Defining a CSS class is great for styling, it also makes it very easy to locate controls using jQuery. Also notice the last control in the template, the ImageButton with the ID of “UsedForScrolling”.  It uses an image of an invisible GIF file.  It’s a 1x1 image, with the single pixel set to the transparent color.  The browser will render it (briefly), but it wont be visible.  You can download the GIF from invisible GIF file link.  I had obtained it from a page by Nick Webb.

You can use the HTML input control instead of an ImageButton, it will not matter too much.  You want to avoid using a control that will render on the screen as a visible item, like a text input control or a check box.  While the code will hide the control after the page has loaded, there would be a flash as the control is rendered, and then removed from the page,  With the invisible GIF, you avoid the brief flash on the page.

This is how we scroll the edit template so that it’s entirely in view:


  1. Check for the existence of the invisible button.  It’s only visible when you are editing an item in the ListView.
  2. Set the focus to that button.  While it will render as a transparent image, it can still receive the focus.  This will force the browser to scroll the page (if necessary) so that the focused input control is in view.
  3. Set the focus to the first input control in the EditItemLayout.
  4. Hide the transparent input button.  While you can’t see it, you don’t want the user to be able to select it.

We implement this with some jQuery code that will do all 4 four steps.  I put the code in a javascript function that I named “ScrollIntoView()” and called that function from the jQuery ready event.


$(function () {
ScrollIntoView();
});

function ScrollIntoView()
{
    var TempInputControlForScrolling = $(".UsedForScrolling:input:visible:first");
    var FirstEditControl = $(".MyEditItemTemplate input:text:visible:first");

if (TempInputControlForScrolling.length)
{
TempInputControlForScrolling.focus();
FirstEditControl.focus();
TempInputControlForScrolling.hide();
}
else {
$("input:text:visible:first").focus();
}
}


The first line in ScrollIntoView() uses a jQuery Selector to match the first visible input control with a CSS class of “UsedForScrolling”.  The next line matches the first visible text input control that is a child of the control with the CSS class of “MyEditItemTemplate”.

If we found an input control, then the length property of the TempInputControlForScrolling variable will be greater than 0.  If no match had been made, the length will be 0.  With the match, we set the focus to the invisible GIF input button, then set it to the first text edit control, then finally hide the invisible button.  If the .UsedForScrolling selector did not match any controls, which will happen when you are not editing an item in the ListView, then the first text input control on the page will get the focus.

Sunday, January 02, 2011

Cable TV Competition coming to Bethlehem? (FiOS TV vs Time Warner Cable)

On January 12th, 2011, the town of Bethlehem (NY) will be holding a monthly town meeting.  One of the topics on the agenda is to have a public hearing to allow the public to voice their opinion on whether or not to allow Verizon to provide FiOS TV.  This would be a competing cable TV service, going up against Time Warner Cable (the current provider).

This should be interesting for a few reasons.  For the last few years,Verizon has provided FiOS Internet service in parts of Bethlehem.  I’m in one of those parts and have had FiOS since it became available.  Verizon started laying down cable through out the entire town for FiOS, but abandoned that task when the economy tanked in 2008.  I heard a rumor that Time Warner was able to put pressure to block additional FiOS deployment, but I haven’t seen any proof of that.

To be able to offer TV to the town, Verizon will have to lay down fiber through out the rest of the town.  Or at the very least, cover the same area served by Time Warner Cable.  That’s a significant expense for Verizon and will take some time to rollout.

This should make Time Warner Cable very nervous.  I know a fair number of people who get the “All The Best” package from Time Warner Cable, with TV, Internet, and telephone service all bundled together,  When Verizon wired up my neighborhood with FiOS, almost no one wanted to switch from Time Warner Cable’s package to some mixture of Time Warner Cable and Verizon.  Verizon did not have FiOS TV, their equivalent to the Time Warner Cable bundle was FiOS  Internet, Verizon phone, and DirectTV satellite TV.  So most people stayed with Time Warner Cable.  The convenience of a single bill trumped the faster broadband speeds offered by FiOS.

If people have the option for a true all in one plan from Verizon, then they a competitive choice to over Time Warner’s plan.  Especially if Verizon offers a discounted rate for the first year or two.  Many people who signed up for “All The Best” were given a discounted rate for the first year (possibly two).  That rate jumped up quite a bit after the discount period was over.  If Verizon has a cheap enough rate, people will be inclined to switch.  Verizon also calls their package “Triple Play” and their introductory offer is $89.99 a month.  That beats Time Warner’s introductory rate of $99 a month.

I’m customer of both companies.  I have Verizon phone and FiOS Internet, and I have Time Warner Cable TV service.  If FiOS TV becomes available, I’m going to consider switching to it.  I spent some time talking to FiOS TV sales agents and it sounds like they offer strong competition to Time Warner Cable.

Verizon has a multi-room DVR called the Home Media DVR.  This is an upgrade from their standard HD DVR.  If you have multiple TV sets with cable, one set will have the Home Media DVR and the rest just need to have set top box (STB).  Each STB can watch shows recorded on the DVR.  I was told by the sales agent that multiple recorded shows can be watched at the same time, from different STBs.  I asked a couple of sales agents how many show could be watch simultaneously and they said it depended on the number of set top boxes.  I don’t think that is true, I think the limit is 2 STBs watching from one DVR based on materials published on the Verizon web site.

The Home Media DVR can record 85 hours of SD and 20 hours of HD content.  If you need more space, you can move shows from the DVR to a PC and back again.  You can also send your own video and music content from a PC down to the DVR,  This uses a feature called the Media Manager.  There have been sneak peeks posted online for the next version of the FiOS TV software that looks pretty cool.  It looks like the next version gets the following:

  • Support for an external ESATA hard drive so you can record more shows at once.
  • The program guide uses the 16x9 screen on HD TV Sets
  • An undelete button (sorry, I can do that now with my TiVo).
  • DVD style chaptering on recordings.

This version (IMG 1,9) is not out yet, but since it would take time to rollout FiOS TV in this town, it should be out by the time we could use it.  Some more information can be found here.

If you use a TiVo with a CableCard to get Time Warner Cable, there are a couple of benefits that you would get by switching to FiOS TV.  First off, no Switched Digital Video (SDV), which means no tuning adapter will be required.  I posted about the annoyances of SDV a while back.

The other TiVo benefit is that FiOS TV does not blindly set the CCI flag to the “Copy Once” setting that Time Warner Cable uses.  “Copy Once” means that you can record the show to your TiVo, but you can’t transfer the show from the TiVo to your PC or another TiVo.  Verizon FiOS TV does not have this limitation.

There might be some drawbacks to switching from Time Warner Cable to FiOS TV.  First off, you’ll need a STB or DVR for any TV that you want to watch cable on.  Time Warner Cable still offers the analog channels.  You can still watch most of the channels on a SD TV just by plugging the coax cable in the back of the TV.  You can’t do that with FiOS, and to be fair, you need a STB for every TV that has the Time Warner Cable digital channels.

Will we get the local sports with FiOS TV?  With Time Warner Cable, we get the local Syracuse and Siena games as part of the standard cable package.  It’s not clear if we would get that with FiOS TV.  We also get a local Time Warner news channel, YNN.  I could not get a straight answer from the sales agents if FiOS TV offered something similar.

There is also the question of support.  Time Warner Cable has local offices and branch locations in this area.  If a remote or DVR fails, you can drive to the mall or TWC office and get it replaced.  Will Verizon have locations in this area?  They don’t have any now, but a quick peek at the online store locator does show many locations across the state.  They also have online forums for support. 

Time Warner Cable has great live technical support via Twitter.  Does Verizon match that?  They both offer “live chat” support, but the Time Warner Cable Twitter support is manned by experts and they know more about the system than the live chat people.

Time Warner Cable does offer a multi-room DVR, but only as part of their Signature Home package.  That is their high end offering, $199 a month in NYC.  That’s more than I want to pay and I don’t want to switch from FiOS Internet back to RoadRunner.  I’m looking forward to hearing more about FiOS TV.