FlashSim Blog

Product simulations, Flash, state machines, and observations

Making Better Call-to-Actions with Simulation Contexts and Behavioral Tracking

Dynamic advertisement delivery strives to serve ads most relevant to the user’s behavior.  I feel we can develop more effective call-to-actions in a similar way by helping the user select a relevant context, and then using simulation in that context to refine our sense of what call-to-action is going to appeal to that user.  I realized in the process that we have not given this adequate consideration in some recent interactive pieces we’ve produced, but we will be more sensitive to this in the future.

For example, in basic equipment orientation-type of presentations, we always have some means to contact the manufacturer for more information.  We have taken a simple-minded, lazy approach in this, which is bad.  Not only does it require the user to make an effort to tell us what he feels is relevant (which, for those who do so, should be treated specially because the effort in successfully requesting contact likely means the user is fairly serious about something), but also it ignores any patterns of interest we might have detected in the user’s behavior using the orientation.

I think I more productive approach would be to weave the request for information, or suggested contact, much more into the user’s discovery of the content, unobtrusively, but intentionally.  In the title of this post, I mention “simulation contexts.”  What I’m thinking is that one can use a user’s selection of different ways in which a product is used (different contexts) to help narrow what type of relevant information the user might want to acquire.  It’s not just making a simulation that highlights unique or compelling features–it’s creating contexts that have problems which the product is suited to solve (and hence the user can see how the product saves the day).

If we understand better what context is relevant to the user’s pursuit of information, we can make it easy for the user to request that information in that context, or understand where to go for more details.  I believe that the more that the user has to disconnect mentally from content discovery/exploration to go find how to contact the advertiser, the more likely they will not.

November 23, 2009 Posted by jonkaye | simulation-based marketing | | No Comments Yet

Did I mean to say “Simulation-Based Advertising”?

As I delve a bit more into what we want to address in “simulation-based marketing,” I realize that a lot of what I have said relates specifically to how we are introducing or portraying products to the prospect or customer.  In other words, it deals with the ‘advertising’ side of product marketing, not so much with other aspects (such as determining the product, target audience, pricing, etc.).  A friend of mine came up with the name of “educational advertising,” which is appropriate, but sounds kind of academic.  “Simulation-based Advertising” sounds a bit technical, so I’m still searching for the right combination of words.

November 22, 2009 Posted by jonkaye | sim-based advertising, simulation-based marketing | | No Comments Yet

Is a Product Demo Simulation-Based Marketing?

I was explaining to a friend today about my ideas regarding “simulation-based marketing,” and he said that in his (IT) line of work, they demonstrate their software to potential customers, using fake data.  The question becomes, “is simulation-based marketing” just another term for doing product demos?

I think that at the heart of product sales and marketing is a product demo, since the point is really to tell prospects what the product is and why they should want it.  However, simulation-based marketing is a broader concept, encompassing not only the product demo itself, but also the context in which the demo is presented.

For example, he does his demonstrations live (via the Internet, through WebEx or GoToMeeting), as well as at conferences.  The kind of simulations I originally thought about were more of the variety where there is no live element to it, i.e., it is self-running.  Clearly, though, that is only one possible mode for presenting demonstrations, and our work in the past few years has expanded to build out the other components for online product demonstrations, namely SimTracker (for behavioral metrics), and LiveDrive (our own term, not the online storage site), for synchronous meetings around specific products.

In my head, I’ve always thought about marketing as about generating awareness, where it goes over to sales to do things like conduct product demos and close the sale.  However, especially in today’s markets where access to product information is so readily available (people making buying decisions virtually completely on the basis of what they find on the Internet), it makes sense that companies use product demos even as first-exposure to prospects so the prospects are aware of competitive or unique features.

Bottom line is that I think one could tease apart a product demonstration meant for marketing, from one meant for sales.  They may have a great deal in common (and also have a lot in common with product demos used for training or customer support, for that matter), but I could see someone making a distinction between a product demo meant to generate awareness of capability, versus a product demo for the actual sale that is more comprehensive.

I would love to hear from marketing people about where this fits into traditional marketing (or sales).

November 22, 2009 Posted by jonkaye | simulation-based marketing | | 1 Comment

Simulation-Based Product Marketing

Over the past few days, I have been trying to focus on what I do and where I feel me and my company’s expertise lies.

I enjoy creating effective materials that use equipment simulations as part of marketing and training efforts.  When I say “simulation” to any group of people (who will stand still for more than a few seconds), that word seems to eclipse the importance of whatever other words surround it.  However, as I quickly follow-up as an example, “good simulation-based training” is foremost about ‘good training’, not something to be judged necessarily on how accurate the simulation is.

While the field of “simulation-based training” is roaring along, I have yet to hear the phrase “simulation-based marketing.”  Based on some shoddy and incomplete research (i.e., doing hasty web searches and looking at the first few pages of results), I have yet to see this term used.  Feeling somewhat presumptuous, I wonder if I am the first person to use this term.

When I say a ’simulation-based product marketing piece,’ I mean “a presentation designed to engage viewers with the product, in which the product is reproduced to some level of interaction, for the purposes of selling to, or persuading them to buy it.”

At its core, and this relates to our work over the past few years, is the notion of “Product Engagement” (PE).  I have seen people use the term “brand engagement,” but I haven’t seen as much attention to “product engagement”, though clearly this concept is at the heart of pretty much all types of sales.  Often we talk about “putting the product into a prospect’s hands,” or giving a prospect a “hands-on feel” for the product.  ‘Product Engagement’ could be a way to measure how successful a presentation is at giving the prospect the feel for a device.  Not to carry this too far, but PE doesn’t have to relate to a simulation — it could be an assessment of an experience with the actual product itself.

In the same way a simulation or model always makes assumptions about what it is representing, the engagement is never quite identical to using the product in an on-the-job experience (except, of course, using the product in an on-the-job experience).

The idea of PE highlights an important distinction between sim-based product marketing and what could be considered a broader, sim-based product training.  In training, ultimately, our goal is to transfer correct performance using the device in realistic conditions.  In marketing, our goal is to give the prospect confidence that they know how they will perform.

Here are two posts I think that relate very well to this discussion:

The materials I see on the web relate to how products can be linked into games and into social media.  At the forefront of this area, like most, seems to be the B2C manufacturers, though a post I made a few months ago about Malvern Instruments is one demonstration that the B2B community wants and needs this approach.

I think there is a confusion between ‘engaging the viewer’ and ‘engaging the viewer with the product’.  I think that is why so much interactive marketing today focuses on games and game-like elements, because they misdirectedly (is that a word?) believe that the goal is to engage the viewer and then sneak the product in somehow.  When I hear discussions around the idea of ‘product placement’, it almost seems like a dirty secret that the manufacturer is placing its product in a position, hoping the viewer notices it–but doesn’t notice it too much.

This seems ridiculous to me.   I believe that if one makes a marketing piece about a product and lets the viewers interact with the product in realistic situations, situations that highlight the competitive or unique features of the product, then the viewer engagement will take care of itself–those viewers who are interested in the product will be retained, and those interested simply in the ‘fun’ aspect will not.  Isn’t this the core group that the marketer wants to attract?

I think that one of the neat parts about simulation-based marketing is that the concepts and materials fit so well  into other important business categories, namely training (for sales reps, customers, service technicians, etc.) and even product design and manufacturing (designing products that can engage users).  The path, then, being set is to align processes along having users interact with the product.  If one has confidence in the superiority and quality of one’s products, isn’t that the best way to sell it or learn how to use it?

Simulation-Based Marketing

I think that the same concept I’ve presented regarding ‘product marketing’ could be viewed in a larger context of purely “Simulation-Based Marketing.”  My vision is that the broader concept does not necessarily involve equipment or devices (though it could), rather, it is about re-creating the ownership experience (hence the ’simulation’) for a prospective customer.

November 15, 2009 Posted by jonkaye | effective sim applications, sim marketing, simulation-based marketing, virtual trade show | | No Comments Yet

Measuring Engagement

Thanks to the folks at Unisfair via Twitter, I just saw a very nice blog post about developing metrics for engagement of social media: http://econsultancy.com/blog/4887-35-social-media-kpis-to-help-measure-engagement.  As my focus is on ‘product engagement’, I have been thinking about how that fits into other activities that express a viewer’s/user’s interest level.

Joerg from Unisfair mentions the Unisfair Engagement Index, an attempt to measure engagement in virtual events–another  interesting concept.  It seems like a useful endeavor to focus on a grouping of interaction opportunities — like a virtual trade show — and then distill the engaging elements.

November 6, 2009 Posted by jonkaye | virtual trade show | | No Comments Yet

Embarking on Adventures in Flex Multipage Printing

For my CommandSim project, we have a new Flex application in a late alpha stage that requires multipage DataGrid printing.  Of course I am using PrintDataGrid, but as I am finding out around the Internet, Flex still has a way to go in making this work properly for complex forms.

In our situation, we create an ArrayCollection for the data, then set the dataProvider of the PrintDataGrid to the collection, and then have our form pull out relevant stuff in a variable-sized row.  We also have a form that has a page number and header and footer things.  It almost looks like it is working, but invariably the last one or two rows of the grid either get cut off or consumed.  I would say it is a page size thing except the header and footer print properly, it’s just something to do with the PrintDataGrid getting overly ambitious about stuffing more rows than will fit into the page.

Therefore, I tried to change the height of the PrintDataGrid (usually it is set to fill both height and width of the page), but reducing the height results in some wacky results (1st page ok, 2nd page the whole grid offset to the left of the page — very bizarre!).

In my internet search for help, I found a bunch of complaints regarding PrintDataGrid, and two packages/components that tried to help:

1. FlexReport – Looks interesting, but they say it is for “non-critical” applications.  Mine is not critical, but I need it to work!  I tried their example, and it looked good in the preview pane but didn’t print out correctly on my printer.  I thought maybe it was sized for A4 paper, so I tried printing like that, but I didn’t get the right results.  I didn’t want to mess with it further, given all the caveats in the documentation.

2. BentBit Report – This said it was going to save a lot of frustration, and it’s nice that they give you the component to try.  It costs $400, but I’m all for it if it can save my rear.  I really need to see more examples — they have only 1, though 3 are listed (the link is to only 1 of them).  Also, the web site is not well structured, as the FAQ talks about something completely different.  I contacted support yesterday through email, but have not received a response.  If you’re out there, BentBit people, please let me know!

Anyway, my current thought is to try to mock-up the page using a DataGrid, then set the dataProvider of the PrintDataGrid to the dataProvider of the DataGrid — maybe my problem has to do with me trying to bind variables in the PrintDataGrid based on the info packed in from the array collection.  Who knows…I will post as I continue to try things out!

[11-04-09 Update:

I thought I would go back to basics and make a PrintDataGrid that mirrored a DataGrid exactly — just have a single column, and then stuff all the text into each row, then assign the dataProvider from the DataGrid to the PrintDataGrid.  After all, that is how the included examples seem to suggest it should work.  After some time, I found it was still clipping rows at the end of the page.  I felt like I was almost there — I could use verticalScrollPosition to back up one row on the next page, but there was no way to change the rowCount on the current page to leave the last one off.  Argh!

Anyway, as luck would have it, I made contact with the BentBit folks and we’re working something out now.  Yay!  I am very encouraged.  Still, I’m extremely surprised that this part of Flex is so weak — hopefully it will get some attention in Flash Builder 4.

October 23, 2009 Posted by jonkaye | Flex | | No Comments Yet

Revisiting Git thanks to Scott Chacon and O’Reilly

I just watched Scott Chacon’s excellent video introduction to basic Git functionality: http://video.linuxfoundation.org/video/1516.  The audio was a bit tough to take, but it was free, and the content was so good that the audio didn’t bother me too much.  There are many excellent resources on git-scm.org, home of Git, but for whatever reason I didn’t find anything as straightforward as what Scott has done.  Admittedly, I probably didn’t try to hard, rather I just dove in and then became confused.  The video introduces a bunch of concepts along with the commands, and that helped a lot in terms of orienatation to functionality.

To help me in the future, I made a list of the various commands I think I will be using once I get more into modifying the code of my projects that are now in repositories.  Sorry for the brief explanations but perhaps the list can be useful to you as well (and I’m nervous about just leaving it on my hard drive and then forgetting where I put it, not that that ever happens to me :-) !).

git clone <git repo> – creates a git repo in current directory from the git repo id. If you clone, creates a remote called origin by default
git init – creates a new git repo in the current directory

git branch <new branch>
git checkout <branch> – switch to branch
git checkout -b <branch> – creates new branch and switches to it
git branch -v – shows last commit on each branch

gitk – visually shows branches
gitk –all

git commit -am ‘commit message here’ – does staging and committing in one shot
git add file – adds file to repo, or stages it if already there

git status – shows status of current repo
git log – shows log of commits
git diff – what changed between last commit and current
git add –p

git config –global <x> (for changing global values)
git config –list (for listing environment values)

git merge <branch> – Merges branch with current branch
git branch -d <branch> – removes a branch

git branch <new branch> <old branch> – creates a branch from old branch. You can use id from git log as old branch to identify branch point

git remote add <remote name> <remote code> – specifies a new remote location given by name and code
git push <remote name> <branch name> – pushes the branch to the remote location
git remote -v – lists the remotes for the repo
git fetch <origin> – gets the repo from the origin (remote) as a local branch (not override, like pull)

git log <branch> –not <other branch> – show a log of what is in branch but not in other branch
git log –stat <branch> –not <other branch> – shows log of specific lines in changes

git blame – lets you see who modified a line last

git bisect – awesome tool to help figure out where error introduced
git bisect good <commit point sha> – that point it was good
git bisect reset – resets to where you were before bisect process
git bisect bad – current point was bad
git bisect start – starts bisect by checking out middle commit, which you can test and then say good or bad

[Update: this wasn't part of the video, but a very useful command for people like me who rush to commit only after realizing I forgot to add a new file: git reset --soft HEAD^ - undoes the most recent commit, ready for me to add the right files and re-commit]

I also found this great resource from github.com: http://learn.github.com/

September 11, 2009 Posted by jonkaye | Git | | No Comments Yet

Latest AS3 state engine on new area in Google Code

I’ve been plugging away on my AS3 state engine, and with a side-trip through repo-learning land, I think  I finally am at a point I can return to the work that I get paid for :-) !.

In any event, I messed up a Google Code project in my Git experiment, so the new home for the AS3 state engine is http://code.google.com/p/flash-state-engine.  I created a simple example to demonstrate it, a digital watch.  I will add more examples as time goes on.  Thanks to Zjnue Brzavi for his help in combing through the code to reveal bugs that demonstrate I shouldn’t be coding/developing too late at night.  He is developing a haXe port, though as I re-implemented the engine in AS3, I also have been mucking around with the API–sorry, Zjnue!

August 17, 2009 Posted by jonkaye | AS 3.0, Google Code, State Machines | | No Comments Yet

Moving back into Subversion

Over the past few days, I’ve been struggling to get a simple process for converting my Git repo into an SVN repo for upload/changes to Google Code.  In spite of the artices I mentioned, it was a real struggle and I’m just not ready to spend the time to figure it all out — I give up, Google Code, I am going back to Subversion / Tortoise.  Of course the latter is a very nice tool/environment, but it just works so well with Google Code that I can’t justify more time in trying to finagle Git and Google Code to cooperate.  Also, my repo is pretty small, so maybe in a few months when I’ve forgotten the pain over the last few days, I’ll take another shot.

August 17, 2009 Posted by jonkaye | Git, Google Code | | 1 Comment

A few nice resources that helped me get started with Git and Google Code

I thought I would be pretty trendy and use Git for my Google Code project, though reading a bit through the Google Code docs tells me that SVN still reigns (some docs are old, though).

I originally had installed Cygwin on my Windows machine to use with Git, but I saw that msysgit makes the process easier, and of course I prefer easier.  I am a bit concerned that when setting up Git, I chose the Windows options, and I don’t know how that will affect my downloads on non-Windows machines.  A challenge for a later day.

I muddled through my first commit using the GUI provided with msysgit — very nice, lots of buttons to muck about with.  It seems like I got it after one or two tries.  I had created a new folder for my code and documentation, then git init to create the repository.  A few minutes later, with the code in the folders, I made my first commit. Yay!

After I installed Git, I started watching Scott Chacon’s video tutorials.  They gave me a whole new set of commands to play with, which I did through the Git Bash (shell), but comparing those commands with what I could see in the Git GUI, I got a better idea of what I was doing.

Emboldened by the appearance of success (though I still have my doubts), I decided to put my code on GitHub, so everyone who is waiting on the edge of their seat for my code can get access immediately.  The GitHub documentation was pretty gentle, and helped me to commit my code there, only after a few tries.  Through the Git Bash, I tried to create a remote origin and then push my stuff, but I kept getting GitHub to hang up on my process.  Then I saw I had to give GitHub my public RSA key, which is probably why it kept hanging up on me.  I could generate the key through Git Bash, then set it to the account.  I’m not sure if I have to make a new key for each repository, but again, not my problem right now.  A few more minutes later and the sweet smell of success!

Now I’m off to see how to synchronize GitHub with Google Code, or at least my local Git reposity with my Google Code repository.  I found an article from last year about this, “Develop with Git on a Google Code Project“.  Stay tuned…

[Update, 4PM]

Trying to follow the article above (Develop with Git on a…), I got frustrated for two reasons.  First, because of the ambiguity I thought in the line:

First we perform the equivalent of a svn checkout. In an empty subdirectory, run:

$ git svn clone --username your-name -s https://your-project.googlecode.com/svn

Which username, the one for Google Code or the one for Git?  It was pretty obviously the Google Code username, no problem.  But “in an empty subdirectory”?  Subdirectory of my Git repository?  Any folder?  Again, trying to remain calm, I figured a subdirectory of my repository.  So I created one, then I changed into it.  Finally, I was ready:

git svn clone  --username myname https://flashsim-state-engine.googlecode.com/svn

Argh!  Unexpected errors after it created the clone.  I spent the next 45 minutes clearing things out (couldn’t find a Git command for removing a clone, so the ol’ rm seemed to work in the end).  Nothing doing, I was almost ready to give up.  Once it looked like it was working, it would ask for my password.  Which password?  I found the password on Google Code, Profile, Settings.  Great!  But I was still getting problems.

Time to search for more help on Google.  I came across this article, by digitaleagle,  regarding trying to get Git and Google Code to work together.  I was very grateful the blogger had put a transcript of commands, so I could verify I was creating the right subdirectory.

Second issue I had–it then dawned on me that my code project is at “flashsim-state-engines”, not “flashsim-state-engine”.  When I repeated the steps, voila!

So apparently I have my code now on Google Code and on GitHub.  I see in Git GUI there is a place for a remote push — I wonder if I can hook it up right through the GUI (that would be nice).  I’m not betting on it because it doesn’t seem to ask for all the info that was explained.

[Update, 4:45]

Seemed like it was uploading stuff, but on my Google Code page there is nothing.  Bummer.  I also saw this follow-up article to one of the previous articles, and it got the uploads started, but I don’t see anything in my Google Code page.

[Update, 5:30]

In a true Homer Simpson moment, I realized what the problem was.  I had set my Google Code to use Mercurial versioning, since the comment there said it was for systems like Git.  All this time making a subversion-compatible upload, I didn’t think I would have to set the versioning to Subversion.  Needless to say, when I switched the option over to Subversion (in the Administer tab), I saw my code in all its glory.  Yay!

August 10, 2009 Posted by jonkaye | Git, Google Code | | No Comments Yet