Leonard Nimoy – 1931 to 2015

Star Trek (NBC)   TV Series 1966-1969 Shown: Leonard NimoyWhen my wife messaged me that Leonard Nimoy had died I was shocked and sad but not surprised (they’re all getting up there in years). Of all the Star Treks the original series, the one I used to watch at 6 p.m. after school on channel 11, is still my favorite.

spock-amok-time-llapI stopped by a colleague’s cube at work to tell him the news (his Next Generation coffee cup indicated his fandom). He had already heard the news but we spent a brief time with his adjacent cube mate, who was also a fan, talking about our favorites episodes, our favorite Star Trek series, and science fiction television shows in general.

The-Wrath-of-Khan-mr-spock-23640452-1405-776After getting William Shatner’s autograph on my 1977 Star Trek Blueprints at this years RI ComicCon I had hoped to get the rest of the surviving cast on subsequent events.

 

I’ll end with clips from two excellent Original Series episodes featuring Spock – Amok Time and This Side of Paradise.

Posted in Other | Tagged , | Leave a comment

Grocery Shopping with Xamarin.Forms

My wife and I have tried using several iPhone list programs over the past year to create a shared grocery list so either of us could pick up items that we needed when one of us happened to be at the store.

We first tried Apple’s Reminders app since it was already on our phones and it allowed the sharing of lists via iCloud. It worked well at first when the list was small but completed items weren’t alphabetized automatically so we end up with duplicates in our list–it was quicker for my wife and I to add a new item to the list rather than spend time searching through an ever-growing list of unalphabetized items to find what you wanted to buy. We switched to Wanderlust, a more generic list program, that allows sharing but still doesn’t allow alphabetizing of bought, i.e. completed items (I don’t know why we chose that one, I guess I happened to have it on my iPhone and at first glance it seemed like it would solve the problem–lesson learned).

So I’m decided to write my own iPhone program using the latest version of Xamarin Platform and teach myself Xamarin.Forms.

The app will be relatively simple–two lists in a tabbed interface. The Buy list contains the items you want to purchase, the Add list contains the items you purchased previously (you can add items to each list). When you purchase something on the Buy list you swipe right on that item to remove it from the Buy list and automatically place it in the Add list. On the Add list you swipe left on an item to add it to the Buy list or swipe right on an item to remove it from the Add list entirely. The Add list is automatically alphabetized and has an index on the right so you can quickly get to the items you want to add. Right now I don’t know how I’ll handle syncing between devices, probably iCloud, Dropbox, or Azure.

Viand-Mockup-1

A Blank App (Xamarin.Forms Portable) solution contains three projects–one for your common code and one for each platform. In the solution below the common project is Viand and the Android and iOS projects are Viand.Droid and Viand.iOS, respectively.

Viand-Solution-1

When I was last building Android and iOS apps with Xamarin for Trimble you could share your controller, model, and view model code across platforms but your views, the actual screens the user interacted with, had to be coded specifically for each platform. Xamarin.Forms promises “native UIs for iOS, Android, and Windows Phone from a single, shared C# codebase.”

Out of the box Xamarin.Forms comes with a collection of pages, layouts, and controls. The grocery list app calls for a TabbedPage with two ContentPages, one for each tab. Each ContentPage will contain a single TableView.

Viand-Page-Layout-View

The TabbedPage page and the ContentPage layouts are created by right-clicking the “common” project, selecting Add -> New File, and then choosing Forms Content Page. In keeping with the Xamarin.Forms hierarchy I’ve name the page and the layouts appropriately.

Viand-Solution-2

I changed TabPage so it inherits from TabbedPage instead of ContentPage and replaced the default code that was in the its constructor with a single line that set it’s Title property.

public class TabPage : TabbedPage
{
    public TabPage()
    {
       this.Title = "Viand";
    }
}

I left the default code in BuyLayout but added two lines to set its Title and Icon properties, both of which will be used by TabPage.

public class BuyLayout : ContentPage
{
    public BuyLayout()
    {
        Title = "Buy";
        Icon = "19-checkmark.png";

        Content = new StackLayout {
            Children = {
                new Label { Text = "Hello BuyLayout" }
            }
        };
    }
}

I did the same with AddLayout.

public class AddLayout : ContentPage
{
    public AddLayout()
    {
        Title = "Add";
        Icon = "13-plus.png";

        Content = new StackLayout {
            Children = {
                new Label { Text = "Hello AddLayout" }
            }
        };
    }
}

The final step is to modify the App class to set the MainPage to my TabPage “container” and add the two layouts as children (the App class can be found in the Viand.cs file located in the Viand project.)

public class App : Application
{
    public App()
    {
        // The root page of your application
        MainPage = new TabPage {
           Children = { new BuyLayout(), new AddLayout() }
        };
    }
 }

Selecting each project as the startup project and running it in its respective emulator shows how native iPhone (left) and Android (right) user interfaces are created easily from a single codebase.

Viand-Tabbed-Screen-1

Very cool. Next steps, adding the TableViews to each layout, creating a data structure to handle Buy and Add list items, and implementing the swiping actions.

 

 

Posted in Side Projects, Software Development | Tagged , , , | Leave a comment

The Maturity Climb

maturity_climb1

Posted in Other | Tagged | Leave a comment

TRS-80 Model 1

I’ve been reading articles over the past couple of days about Radio Shack’s history and their descent into Chapter 11 bankruptcy. It’s sad and nostalgic because without Radio Shack and their TRS-80 Model 1 I might never have gotten into computers.

Tenenbaum William Newspaper article 1980

That’s me in the foreground before I added “Maya” to my last name. Funny, despite what the caption says, both Jim Misko and I are playing Invasion Force, a Star Trek clone from Processor Technology.

invasion-force-trs-80

Here’s a YouTube video showing the game in action. The graphics were something back in those days.

Posted in Other | Tagged | Leave a comment

You Can’t Keep a Good Plan Down

Back in January 2011 when I was part of Trimble’s Market Solutions Team, creating prototypes for new vertical markets, I met had my annual review. I had decided then that I wanted to gradually move away from day-to-day software development and towards product management.

To prepare for my meeting with Tony Scott, my manager, I came up with this chart, outlining where I would focus my efforts over the next five years.

Trimble MST 2011-2015 1b

Tony agreed with my plan and we began executing on the plan. Six months later Tony took another position within the company, the Market Solutions Team was put into a holding pattern with no work to do and eventually, in late 2012, I was assigned to work with a team in New Zealand developing TerraFlex, a product inspired by one of the prototypes I had created (I also did some project and product management for MojoTech in the interim). I forgot all about the career plan I had drawn up back in 2011.

Contacted by a recruiter via my LinkedIn profile, I joined CVS Health in April 2014 as a Manager of Mobile Application Developers. It seemed like a growth opportunity with no downside and I was a bit tired of having little say in the direction of the product I was developing.

Recently, while going through one of my old journals, I found a copy of the chart above and it made me smile. Instinctively I had been following the path I created back in 2011 and it looks like I’m right on track.

It seems you can’t keep a good plan down.

Posted in Software Development | Tagged | Leave a comment

My Definition of Interactive Storytelling

Interactive storytelling is a form of entertainment that uses the computer as a medium to allow readers to create or influence a dramatic storyline through small, significant actions.

Interactivity is the computer’s competitive advantage, a cyclic conversation between the user and the machine in which each participant listens, thinks and speaks. These simple conversations, combined with Moore’s Law, have weaved this technology so deeply into the fabric of our societies that it is hard to imagine a life without them.

Storytelling is one of the most ancient forms of communication, spanning over four thousand years of human evolution. From Gilgamesh to Ulysses, from The Odyssey to Star Wars, people have used stories to share life experiences and learn through real or imaginary tales.

Chris Crawford discusses three strategies for developing interactive storytelling systems in the 1st edition of his book on the subject  – environmental, data-driven, and language-based. He considers the first a dead end, the second having potential, and the third having the most promise and the basis for his Storytron system (interesting, in the 2nd edition he doesn’t even mention the first two strategies, doubling down on the third).

Having worked with Storytron I’m most familiar with Chris’ approach and it appeals to the software developer in me. I’m going to continue experimenting in that direction and see what happens.

 

Posted in Side Projects | Tagged | Leave a comment

Riding Light

In our terrestrial view of things, the speed of light seems incredibly fast. But as soon as you view it against the vast distances of the universe, it’s unfortunately very slow. This animation illustrates, in realtime, the journey of a photon of light emitted from the surface of the sun and traveling across a portion of the solar system, from a human perspective.

Posted in Other | Tagged | Leave a comment