Difference in experience with Garmin GPS and iPod Touch illustrate Open vs Proprietary

by Bruce Abernethy 30. June 2010 06:08

So we’ve been getting back into geocaching over the last few weeks, and things have really come a long way in the last five years or so.  Today there are a number of great online resources and applications to really make the tasks of finding caches and getting them into your GPS very easy – but a this isn’t a post on geocaching (though that would be fun too).

Over the last week I have been updating software and maps on our Garmin GPS and learning about the cool new ways of adding geocache data to the device.  When updating files and applications on the GPS it was easy to make the comparison to updating files and apps on my iPod Touch, and the differences were quite revealing.

Apple is famous/notorious for their interest in “controlling the experience” for their users.  This means that the only way to get files and applications onto their devices is through their custom iTunes application.  While this does enable Apple to standardize and homogenize all their users’ experience, it also severely limits and prohibits what anyone outside Apple can do with their devices.

Garmin, on the other hand, has created an amazingly open platform.  This enables their users to also have a great experience with their custom software (e.g. BaseCamp) and purchase maps and features through their software and web site.  But open interfaces allow web sites such as geocaching.com directly access and add data to Garmin GPS devices.  Likewise, open access allows authors to write their own software, such as EasyGPS as one example, which can add functionality and data, also directly to the device.

Here are a few notable differences between how Apple allows interaction with the iPod Touch and how Garmin enables interaction with their GPS devices.

1) Multiple computers without pain

I connected the Garmin to my home PC, a laptop and my machine at work.  All I needed was a USB cable and the device came up fine on all the machines without installing any extra software on the local machines.  At home I installed Garmin BaseCamp to do some of the cool things that it enables, but the other devices just accessed the Garmin as a storage device and copied data to and from the device.

With Apple iTunes you really can only sync one computer with one device.  If you want to add music or apps from a second or third computer you really can’t – if you do then everything added from the first computer is removed first.

2) Add features/files without custom software

As mentioned above, I didn’t need any custom software to install data onto the Garmin – just drag and drop the files (nice).

easygps3) Software from multiple authors can be written and work with hundreds or thousands of different devices

Using EasyGPS as an example, software developers can create their own software that can communicate with Garmin GPS devices (without being approved by Garmin). 

Also, and this is important, software developers can also allow their software to connect and integrate with non-Garmin devices.  If the screen capture is any indication, not only can EasyGPS connect with over 300 Garmin devices, but also with 26 other companies GPS devices.

Interesting as well, you will see phone manufacturers on their like Blackberry and Nokia, but this software will never (and could never) integrate with an Apple iPhone.

4) Easy expansion or storage using standard media

Ok, so I went a little overboard loading up the GPS when I found out all the cool things I could start doing with it and maxed out the internal storage available on the device – but I wanted more.  Turns out that the GPS has a standard SD-card slot built in.  I went to Meijer and looked at their selection of cards.  I found a SanDisk 4Gb SD-card for $17 dollars and was ready to get it, but then the helpful Meijer guy showed me the “off-brand” 4Gb card they had on sale for $12.  It turns out there were three different 4Gb SD-card choices that would have worked for me – all under $20 out-the-door.

In the case of my iPod I have 8Gb of storage – will never have more or less than this – no expansion in the iPod (can’t even open it up – more below).

5) AA batteries or rechargeable battery pack

Seems like a simple thing, but the Garmin works with standard AA batteries, a rechargeable battery pack, or on a car-adapter/USB style power connection.  After two years of using the iPod Touch my battery life is about 3-4 hours now (sometimes less).  It’ll cost me $75 dollars to get a new battery installed, and it must be at the Apple store – rechargeable AA batteries (with charger) are about $10 and available anywhere.

6) Both have model to sell add-ons and protect intellectual property

Finally, it is important to note that Garmin doesn’t lose money by making their devices open.  I still spent money using their web site to enable satellite imagery through BaseCamp and can add topographical maps and other tourist-type data if I desire.

After the iPod/iTunes experience, I almost felt like a “hacker” having all this power and potential with the Garmin devices.  To do anything similar with an iPod Touch or iPhone you’d have to literally “hack” them using one of the “jailbreak” distributions – and then everything else could go haywire or eventually blocked by Apple.

I really like the trend with non-Apple phones from RIM/Blackberry, Nokia, and Android and I hope the Windows Phone 7 devices this fall will allow for end-user customization without an “iTunes-equivalent”.  The experience with the Garmin device was quite revealing, so that’s why I wanted to share it here.

Tags:

Santa doesn’t believe in the Easter Bunny

by Bruce Abernethy 7. June 2010 10:32

A funny thing happened on my way to work this morning, which has so messed with my head that I had to write and talk about it a little to try to get over it.

Monday mornings I usually stop off at Big Apple bagels on Plainfield on my way to work in the morning. I've done this for so many years now that it is basically a habit for me. So I parked my car, got out, opened the door, made eye-contact with the "bagel lady" and she turned and grabbed an everything bagel which is my "usual" bagel. So everything was going according to the usual "Monday-morning script."

But then something happened that threw a wrench into the rest of the morning. My attention briefly went to a table with by a woman and a young boy at one of the tables. They were wrapping up their meal, and I guess also a heated conversation. The only part of the discussion I caught was her response to her son that was something like "No, Santa Claus doesn't even believe in the Easter Bunny".

This single statement took me from a peace of mind, where I thought the day was starting out "as normal" to more of a stunned state where I nearly bumped into the counter. To make things worse, the mom and her son put their trash in the bin and left the building, so I could not hear any of the follow-on conversation - not that I was snooping in the first place, it was just an innocent overhearing of two people talking in a public place. But without context my mind tried to process what it had heard without any further help from context or additional input.

So I was left to wonder what could have led up to that worldview-bending statement, and what came from it. Was the boy questioning the reality of Santa and that brought up the "Easter Bunny" - which is "clearly make believe". Was the lady really pushing to keep the belief in Santa - so much that she further revealed her personal discussions and knowledge of Santa to understand his beliefs about other "Fairy Tale" figures. What about the Tooth Fairy? Does Santa believe in the Tooth Fairy? Does the Tooth Fairy believe in the Easter Bunny? Or, perhaps she was one of the rare few adults that hold on to a belief in Santa Claus and who extends that belief into complex worldview of "what Santa believes" - kind of a "Santaism" (which just sounds bad).

My brain just started hurting at that point and I drove to work with my bagel which had somehow become much less important to me.

So, in the end, I was reminded of something my mother told me about not being nosey and listening in on other people's conversations. I guess this morning's incident is just one more reason that this is wise advice.

Tags:

Thoughts on Steve Job’s Thoughts on Flash

by Bruce Abernethy 29. April 2010 03:13

First, I think it is quite helpful and open for Steve Job’s to post his Thoughts on Flash.  He didn’t have to do this.  He could have just left it out there.  But since Apple is generally in the doghouse in the Public Relations area (blocking Flash, prosecuting Gizmodo for the iPhone scoop, etc.) it was probably time for something like this.

If you care about this issue then you should read the original article, and maybe a little further – if not, thanks for reading this far and have a nice day.

So I don’t know if Jobs is being intentionally misleading or just trying to confuse or convince the less informed buyers of their stuff, but his post is really full of dishonest and hypocritical statements.

It’s Not About Protecting the App Store

Early on he says that Adobe believes “they say we want to protect our App Store – but in reality it is based on technology issues.”.  To say that Apple isn’t trying to “protect” iTunes and the App Store is just plain lying.  This is how they make a huge amount of their money.  To allow users to only use iTunes to get music on to their iPhones, and only allow a single source of applications for the iPhones, is how they operate.  This legal monopoly means millions and millions of dollars for Apple and it is something they want to fiercely protect.

It’s About Being “Open”

The bad thing about Flash is that it is “100% proprietary”. Um, Steve what about iTunes.  What about the App Store.  What about only allowing development for the iPhone to be on Macs, and only with Apple’s 100% proprietary tools.  To make this claim as the reason they block Flash is so obviously false that I don’t even need to say anything more about it.  But I will.  Steve further says that “Rather than use Flash, Apple has adopted HTML5, CSS and JavaScript – all open standards.” For web browsing.  What about application development (which is what Flash, Silverlight, etc.) are for – there Apple is “100% proprietary” and “100% blocking” of other options.

Flash is Only Used for Video

Apple, and others, have repeatedly said that the main use of Flash is for viewing videos and that today “video is also available in a more modern format, H.264” which works on iPhones.  This is true, but this assumes that the video is not interactive and that all video players must be identical.  Since I am working on a custom video player at the moment, I can tell you that customers want a lot more that just play, pause, and fast-forward today and the customization and integration/analytics are very desired from a branding and functionality perspective.  Plus, features like smooth-streaming (i.e. making sure you have a good experience with video whether it is on a small cell phone over wireless or high-definition and high-bandwidth set up at home) will not work without a modern player.

Flash Games Should be Ported into the App Store

At least here Jobs is being honest.  I’ll paraphrase “Since we block Flash, many of the Flash game authors have been forced to create a proprietary App Store version of their game to get on our platform”.  But then he lies again saying “There are more games and entertainment titles available for iPhone, iPod and iPad than for any other platform in the world”, um sorry, my netbook has access to far more games, entertainment, and educational titles (i.e. Flash, Silverlight, etc.).  And anyone anywhere on Earth can write one over the weekend and publish it to the web where anyone can run them – not having to buy a Mac, get into the Developer Program, and get it through the App Store approval process.

Let’s Play on Users Fears of Security

Since we can’t be honest about all of the above, let’s tell people that their phones will crash and be unsecure if they try to run Flash on them.  This way when Flash and Silverlight come out for the Android and Windows Phone 7 platforms, they will think twice about using them.  Next, we’ll tell them that Flash uses more battery life because it is all “software” instead of “hardware”.  This is no longer true with new versions of Flash and Silverlight, but putting this FUD out there (fear, uncertainty and doubt) will scare uniformed people into trusting only iPhones.

Flash Works with Mice not Fingers

This lie goes along with the false theme of “Flash is old technology, but iPhone is new technology”.  Jobs states it as “Flash was created during the PC era – for PCs and mice” which, again is partially true (as most good lies are).  What he doesn’t tell you is that Objective C (what iPhone apps are developed in) was also designed originally for writing programs for the Macintosh computer (and even NeXT machine before that).  With the development of the iPhone they added functionality to enable touch-based applications.  Would it surprise anyone to know that Flash and Silverlight have also added functionality for touch in current versions.  He supports this lie with another half-truth saying “For example, many Flash websites rely on “rollovers”, which pop up menus or other elements when the mouse arrow hovers over a specific spot.”  Again, shocking I know, but many Macintosh programs (using the same programming language as iPhone apps) also have (gasp) menus that can be clicked on and buttons (no) that have roll-over and click effects.  This ongoing set of double-standards and half-truths make the rest of what Jobs says very suspect.

Apple is Best at Determining What Should Run on iPhones and iPads

Job’s last and “most important” reason is actually the most grave and most dangerous and actually why I decided to write this post.  Jobs claims that “letting a third party layer of software come between the platform and the developer ultimately results in sub-standard apps” being written and executed on Apple devices.  Wow. That is bold.  Apple not only wants to be the sole entity that can determine who can develop, how they develop, and where they can distribute, but they also want to be the ones who determine which applications are “worthy” of running on their devices.  Applications that are not, in Apple’s eyes, “the best apps the world has ever seen” will not be allowed to be written or to run on Apple hardware.

One of the greatest commercials of all time was the Macintosh 1984 commercial.  It depicted a scene where a runner in white with a sledge hammer ran past all the guards and huddled masses who in the end hurls the hammer through the screen of a draconian speaker, implying an end to the control of Big Brother in the technology arena.  The quote of the background speaker is worth repeating here.

Today, we celebrate the first glorious anniversary of the Information Purification Directives. We have created for the first time in all history, a garden of pure ideology. Where each worker may bloom secure from the pests of contradictory and confusing truths. Our Unification of Thoughts is more powerful a weapon than any fleet or army on earth. We are one people, with one will, one resolve, one cause. Our enemies shall talk themselves to death and we will bury them with their own confusion. We shall prevail!

What Jobs is defending in this post is that Apple is now trying to create is “a garden of pure ideology” where iPhone users can be “secure from the pests of contradictory and confusing truths” from outside developers – that their developers will be “one people, with one will, one resolve, one cause”.  Jobs has become the man on the screen and iPhone/iPad users will become the drones in the audience – happy with the perfect Apple-cleansed devices and Apple-created development tools that have all passed by the Apple thought-police.

So while “1984 won’t be like 1984” it may be that “2014 is just like 1984” if Apple has their way.

Tags:

Lessons Learned: Craftsmen and artists of all types have a lot in common

by Bruce Abernethy 19. April 2010 01:41

I spent last Thursday, Friday and Saturday at the Festival of Faith and Writing which is a conference for authors, playwrights, publishers, readers, teachers, etc.  I’ve been going to the conference since 1996, which was three years after I wrote my last/only book, but was right in the middle of the nine years I was writing monthly articles on technology in education.  So if it has been four years now since I have written anything (for money), why keep going to the conference?

The short answer is that I always learn something new, and always am reminded of things I had learned before but have forgotten (or stopped paying attention to).  I think all creative people who are working in their chosen craft share a lot of the same struggles.  These craftsmen can learn a lot from each other, whether they be authors, film makers, musicians, artists, or even people trying to create a good user interface or user experience using web sites and computer software.

So briefly below is my “Top 10+” list of things I learned or relearned this year.  Each of these items is probably a blog post or book in itself, but I don’t have time for that right now – perhaps I’ll expand on some of these in the near future.

  • Nothing replaces experience when conceiving and starting a project
  • No craftsman (or woman) is an island
  • A picture is still worth a thousand words
  • Nothing is more inspiring than a talented craftsman with passion
  • Give your audience something that they recognize, even/especially in brand new creations
  • The best way to learn how to create something yourself is to regularly view/review other people’s creations
  • Another great way to learn to to create something is to just get started creating something
  • Spending only time with the “latest stuff” makes you “a mile wide, but an inch deep”
  • Even the “masters” of any craft, if they are honest, will tell you of their daily struggles and fears
  • “Process Versus Product” is a key concern for every craftsman
  • “Picturing the Invisible” is another difficult and important skill to learn
  • A true craftsman will be satisfied with a work well done, no matter if the audience is 2, 10, 100 or thousands of people
  • A large motivation of craftsmen of all kinds is the puzzle, mystery or problem to be solved

Tags:

Why I make a fuss over the release of Visual Studio 2010

by Bruce Abernethy 12. April 2010 00:33

visual_studio_logo It is no secret that most of my friends and family are non-programmers.  When a group of us get together “in real life” and I do find someone to talk technology with, we usually get the look of “oh they’ve gone off into the fantasy world of acronyms again, give them some space.”  I even slipped with my kids this weekend and mentioned something like “oooh, this week Visual Studio 2010 and Silverlight 4 come out!!”, and they politely asked what that was and why I was acting something like a kid at Christmas. So here is the short answer.

Every so often, programmers get an update of either their programming language, or their programming tools, or in this case BOTH.  While programming can be quite technical, it is still largely a creative process.  When writing new code you are creating something that did not exist before.  Usually you are creating this new thing for a customer or a group of people who need it or want it to improve their business or organization.  Software people sometimes use roles and titles from other crafts to describe what they do; some of us are “architects” or “engineers”.  When working with Silverlight we use all kinds of terms from artists like Canvas, Pens, Brushes, Strokes, etc.

So imagine you were in another creative craft such as painting.  And every so often you not only got a fresh set of brushes, but you also got some new brushes that you never had before, that enabled new strokes and techniques on your new canvases.  And a little less often you actually get new paints and even new colors that you never had before.  When the perfect storm happens and you get new tools, canvases, paint, colors, and more, this is a very exciting time.  This is a bit dramatic, but close to how I feel, especially when I am involved with a new project that actually needs some of these new tools and colors for what we are trying to do.

What are some of the new “tools and colors” in VS2010?

Well two big things are the ability to develop custom applications for both Windows 7 and Windows Phone 7 – Windows 7 has been out for a while and now programmers can take full advantage of a lot of the new features of Windows 7.  Windows Phone 7 will be out this fall and it basically a re-launch of the mobile phone platform for Microsoft.  No one knows how well Windows Phone 7 will compete with the iPhone and the Android phones, but the new features are very compelling and it should be fun to see what we can build for the new phones.

silverlight-logo But the main thing that I’ve been looking forward to is Silverlight 4 and its integration with VS2010. Developing in Silverlight with Visual Studio 2008 has been possible and productive, but going along with the painting analogy here, it has kind of been like “fingerpainting” compared to other kinds of development.  Now in VS2010, there is a full designer built in so you can preview and edit how Silverlight applications look and function right in the tool – this is nice.  It is also now much easier to change the style of an entire application so all the text, graphics, data input, etc. all look and work the same.  A big thing for me is enhancements to how animations and digital video can be streamed and manipulated in Silverlight.  Far beyond a simple video player with “VCR” controls, we can now do things with video that could never be done before. There are a ton more new features and possibilities coming out, but you get the picture.

So, in a nutshell, by Wednesday I will be actively using a bunch of new tools, brushes, and colors that I don’t have today (for production use) and be able to release applications that anyone on the Internet can use, which is why I am a little excited right now.

Tags:

iPad Hands-On Impressions

by Bruce Abernethy 5. April 2010 05:11

I headed over to the Apple Store over lunch to see the new iPad, and I was really happy they had about 12 of them out for people to try out.  I did not become an iPad owner, though it would be very tempting if I didn’t have to pay off my surgery (could actually buy one for the entire family for that deductible) – the point is, it is a very nice device.  For Apple to further be able to put all of this functionality into a $499 starting price, is a nothing short of a milestone.

The iPad looks great from a short distance – the cool glass edge-to-edge cover over black with the shiny silver undercarriage.  I got to try out the only open device as people were really swarming around them, even at 11:20am a few days after launch.  It really did remind me of my iPod Touch, though it made that device seem quite inadequate in a number of ways.  The screen is much bigger, the processor is noticeably quicker, and the colors seem brighter (though that might have been just the size of the screen again).

So every application on your iPod Touch or iPhone that you ever wanted to be “bigger” works so much better.  Reading is so much better on the big screen, especially if you are needing bigger type sizes these days.  Watching a movie on the screen is quite impressive.  I fired up the “Plants vs. Zombies” game, and the detail is much better and the interface makes it actually easier and more enjoyable to play.  And games like Scrabble – where you want to play with a friend – is much easier for both to view on the larger screen.

Things that were just too hard to reasonably do on a small screen:

  • Reading books or magazines (i.e. more than a few pages at a time)
  • Games of any complexity (e.g. board/war games, real-time strategy games, etc.)
  • Productivity Apps (e.g. word processing, spreadsheets, etc.)
  • Watching a full-length movie (and really enjoying it)

Things that are still just fine on a small screen

  • Music
  • E-mail (reading, writing short messages).
  • Handheld games – e.g. Gameboy / Nintendo DS class games
  • Mapping / GPS
  • Twitter / Facebook
  • News

New classes of apps made possible by the iPad / Tablets

  • Multimedia/Interactive publications – not just moving print and pictures to the web, but interlacing video and interactive components into the publications as well (Flash and Silverlight would sure be nice here – see below).  This would include “textbooks” that are so much more than textbooks; Imagine the ability to watch a key scene from a Shakespeare drama included within the text itself, or a live physics simulation embedded in the chapter on Newtonian forces.
  • Mobile sales/presentations – this is the perfect type of device for sales people and others that do presentations to take on the road.  It works well in 1-on-1 or small group situations to host the content itself, and can be hooked up to a projector for larger audiences.

The iPad’s issues to resolve

  • Even with the iPad’s ancestors in the iPhone and iPod Touch, it is still a “1.0” device.  There are already reports of issues with WiFi reception and charging via the USB connection.  Apple has been very good in the past at working with people to resolve issues and updating the hardware in future releases.  And with 3/4 of a million of these devices already out there, I am sure they will get a lot of feedback.
  • While the 9.7” beautiful glass screen is its #1 feature it is also potentially the iPad’s #1 problem.  How do you keep it from scratching when there is no cover?  If it is in a backpack or bag with other things it’ll get scratchy pretty quickly.  Along with added size is added mass.  If this thing falls off a table and hits one of the edges (even on carpet) I think you will start to see some cracked or shattered devices.  I don’t know if this is repairable or if it needs to be replaced.  In my mind I see some kind of leather flap or cover (like an executive leather folder) with perhaps a clasp or zipper to protect the device in transit.  The iPhone still fits nicely in a pocket or holster and I think that becomes a selling point now over the iPad. UPDATE: Search found that they have thought of this $40 case with some protection here.  This will be available in Late April.  Good.
  • Battery life.  I know my iPod Touch after a couple years of solid use now needs to be recharged at least once a day.  I don’t know how long the 9-10 hours of battery life will be true for the iPad.
  • Customer choice for applications and content. 
    • The irony of how nice the version of the “Plants vs. Zombies” game is on the iPad, is that it was finally getting back some of the functionality of the “original” Flash version – yes, this is a game that started on the web with Flash but was simplified for the smaller iPhone screen, and is now “enhanced” by bringing back some of the features of the Flash version.  PvZ is one of thousands of popular Flash games that are out on the web that are inaccessible to all iPad users.  Most interactive educational materials were developed in Director/Authorware/Flash and are also inaccessible on the iPad. 
    • Further I can’t pick something as basic as a browser on the iPad.  In daily use I use Chrome and Internet Explorer as my two main browsers – neither of these (nor Firefox, Opera, etc.) are allowed on the iPad because they would compete with the Safari browser from Apple.  I am sure they will do the same thing to “protect” the profits from their productivity software and other utilities.
  • No built-in camera?  Need to figure that one out – maybe it put them over that $499 target price?
  • No GPS in the WiFi models?  Must be some weird contractual thing (or the $499 target price)  This could have been the perfect “travel companion” if the travel guides would have GPS-enabled maps included.
  • No phone calling/receiving capabilities in the 3G models?  It is already on the network why not allow calls for those with a plan?
  • No ports for camera or video out?  They have helped with adapters for cameras now for USB or SD cards.  Now they’ll just need to come out with an HDMI out adapter.

Tags:

Toastmasters for Techies

by Bruce Abernethy 30. March 2010 08:52

ToastmastersAbout a month ago I started attending a new group forming now in Grand Rapids called “ Toastmasters for Techies”.  I had heard of “Toastmasters” many times in the past as a group that had been around for a long long time to help people get better at speaking in public.  Today in 2010, Toastmasters has served over four million people and is growing all the time – case in point being this “Toastmasters for Techies” group.

What drew me to this group was that is was:

  1. just getting started (didn’t want to be “behind”)
  2. “unbranded” (some groups are part of businesses or organizations that I am not a part of)
  3. local / close (meets downtown at Wealthy/Diamond at Atomic Object)
  4. focused on techies (not just “nerds” getting together and giving speeches, but better yet “geeks” getting together and giving speeches)
  5. and I knew a few of the people who were already going and knew they were good people

If you know me you know I like to talk – probably too much, and probably too often.  I gave professional presentations seven times last year, and five times each of the previous two years.  I’ve also led a Robotics club with a bunch of kids and parents, been a Den Leader in Cub Scouts, taught classes at church, and spend quite a bit of time at work talking/discussing/debating ideas and projects with clients and team members.  And all of this just means I am really part of the problem that Toastmasters is trying to solve.

If we are being honest right now, there are a lot of just-plain-bad-presentations out there in the computer field.  Either a presenter is just too smart for the audience and loses them in the first five minutes, or they get caught up in a failed demo that was the basis of their entire session, or they are a good speaker but it is clear that “someone else” prepared the slides and the demos for them, or some unfortunate combination of these which we won’t talk about. I have even seen some speakers that seem to be just speaking for themselves and do not seem to be aware or care that there are any other people in the room.  I am not alone in these observations.

Also, I’ll stop short of saying that “PowerPoint is Evil!” but I will say that it is a tool that has been used much more often as a crutch for bad speech preparation, or as a smoke screen for a clear lack of content, than to support presentations of substance.  Even people that have gotten the whole “Presentation Zen” idea seem to work harder on trying to find the right catchy picture for their content (or worse yet, catchy content for a cool picture they found).

Even if you have had similar experiences with such presentations, I need to say that the audience is also somewhat at fault.  I have reviewed many evaluation forms from people at the events we have held or my own talks. The feedback always seems to be quite minimal and almost always “4-5 stars.”  I don’t know if this is because most of the talks are free or given by volunteers, or if the bar has been set fairly low.  There is an occasional “gem” of an evaluation, with some constructive criticism or suggestions for additions/improvement, and those are really “gold” to someone who takes their speaking seriously. One of the biggest things I have learned in my first month in Toastmasters is really how to evaluate and give feedback to speakers that they can use and work with.

I’ll be the first to stand up and testify that I need help being a better speaker.  I have always gone over on time in my recent presentations – or at least cut out content that I had “intended” to get to.  I always thought it was better to have a lot of content that covered a variety of areas.  I have used and abused PowerPoint.  Because I try to squeeze an over-abundance of content into talks I tend to talk very quickly, which can be entertaining and engaging, but is not optimal for learning.  I admit I have sometimes finished or “tweaked” demos for a talk while setting up in the very room for the talk – again, keeps things “current” and “exciting” but doesn’t always show a concern for the content or audience.  I want to improve.

ti_logo1 So I enter into this Toastmasters experience with the intent to become more precise and concise in my speaking.  When I was first writing a monthly column I would write 1,200 or even 1,400 word articles only to have my ever-patient editor send them back and say to cut them down to 400-600 words but still “tell the same story.”   Over the years I got better at writing within the boundaries of a print publication and even avoided many edits in my last few years of writing.  I need to do the same thing with speaking – say less words but tell the same story.

Each Toastmasters Club needs to recruit 20 members to be formally established, and the group is almost half way there.  I hope if you are a local “techie” that you are interested in improving your speaking skills, that you would consider stopping by on Monday over lunch as an “honored guest” at one of our meetings.

Feel free to check out our web site or our Twitter account for more info.

Tags:

Candyland, LCR, and Warstorm

by Bruce Abernethy 19. March 2010 06:10

If “Candyland, LCR, and Warstorm” was a Jeopardy answer, my question of the day would be “Name three games that seem really fun when you start playing them, but quickly fade when you start thinking about them.”

candylandpic Candyland is a game that probably everyone has heard of.  Now 60 years old, it is probably the first board game that children start playing. A child really only need to know their colors and a few shapes to play; this is both a good and a bad thing.

It is good that parents and kids play Candyland together because it is a way to spend time interacting and having fun together.  But Candyland is not a great game to get kids started on because it really needs no thought, creativity or strategy whatsoever. If you think about it, once you pick a game piece and shuffle the deck, the entire game is already determined.  No matter how “good” you are at Candyland it doesn’t matter – you will will the same amount of games (over time).  There are no “Candyland Tournaments” or “Candyland World Championships.”  There are no books or web sites you can visit to discuss Candyland “strategy” with other players.  You can never been any “better” at playing Candyland, and you can certainly never get any worse. Candyland is a colorful and fun “game” you can play with pre-school kids and have a great time, but it quickly loses its appeal once you realize that it is basically a “coin flip” and that even “rock-paper-scissors” has far more strategic value.  Still don’t believe me.  Imagine playing “solitaire Candyland” with two teddy bears and realize you now have a 66% chance of losing to a stuffed animal.

LCRJump ahead a bunch of years and we got the “wildly popular and exciting LCR” game that “everyone is playing" – and yes I was one of the suckers that dropped ~$5 on this “game in a tube.”  If you haven’t played this game, it is pretty simple.  You have 3 dice and a bunch of mini poker chips which are divided up among all the players.  You roll the dice and will get either an “L” a “C” an “R” or a “*” (dot).  If you get a dot (there are three per dice) then you do nothing.  An “L” means pass a chip to the person on your left, an “R” means pass a chip to the person on your right, and a “C” means pass a chip to the center “pot” which grows as the game progresses.  Once everyone is out of chips except one person, then the game is over.  As you probably have figured out already, this is basically Candyland with dice.  Sit down with the same two teddy bears as above and you will lose far more than you win.  This isn’t to say you can’t have fun playing LCR – I’ve had a lot of fun playing Candyland and LCR – but the fun is more about the people you are spending the time with than the “game” itself.  Some of the recommendations I have read for making LCR more fun often include substituting money or M&Ms for the chips or adding a drinking component.  By the way, if you don’t tell anyone else you can play “LCR” right now at home with three 6-sided dice and some pretzels: 1=L, 2=C, 3=R, 4-6 do nothing – saving you $5 and some frustration.

There was a posting on Board Game Geek called the “Comprehensive LCR Strategy Guide” which is a very creative and funny read.  Some “strategies” for playing LCR include “Throwing Off Your Opponents” and even “Cheating”.  And beyond the humor this got me to thinking.  When people get into what they consider to be a “no win” situation or even one where their “fate has already been determined” many are not content to just sit by and watch.  If the rules aren’t fair – change the rules (bonus points if your just thought Kobayashi Maru).  If you can’t change the rules – make your own rules (i.e. cheat).  What if you could take a game like Candyland and LCR and find a way to give a particular player a better chance of winning than other players – say in a game with four players, what if the players had these chances to win: 20% 20% 20% 40% (i.e. the last person is twice as likely to win as any of the other players).  This, clearly, wouldn’t be fair and most people would call this cheating.  What if it wasn’t cheating, but right in the rules and what if all you had to do to get a better chance of winning was to pay some extra money.  If you pay $20 extra dollars then you get to play with a different deck when you play Candyland – a deck that has better cards, no traps, and more doubles.  What if LCR had a more expensive “expert” version that let certain players use dice that had better odds than other people – again not fair. But this is exactly how most games on Facebook work.

warstorm Enter Warstorm.  I’ve spent several hours over the last week playing Warstorm on Facebook, or more accurately watching Warstorm play itself in front of me. A couple family and friends started playing it and were talking about it, and you know I like a good game.  On the surface Warstorm is very compelling and well designed.  The application itself is visually stunning, the art is professional, the application programming and design is cutting-edge, and there are a great number of people playing it.  But, if you really break it down, it is really a beautifully drawn, interactive, action-packed, implementation of “Candyland” but with “cheating” built in if you want to pay for it.

Without going too deep into the game itself, suffice it to say that all players of Warstrom start with the same limited collection of cards that they build up squads or armies of infantry, cavalry, archers, and many others to fight against one another.  Each card takes a certain number of turns to come into the battle (bigger/more powerful cards take longer) and have different strengths and weaknesses.  This initially sounds like Pokemon or Magic The Gathering – but it really isn’t, for a couple of really important reasons.  In Pokemon and MTG the players actually get to play the game – in Warstrom you take your squad(s) and the computer plays the game in front of you.  In fact, when you press “Ready” it could just tell you who won without all of the fancy battle graphics and animations; the computer already knows who won.  As soon as the cards are “shuffled” the outcome of the game is set – just like Candyland.

However, unlike Candyland you can improve your odds of winning if you have some money to spend (or a whole lot of time on your hands).  Here is a quick example – two different versions of two different cards.

wsCards

The important thing to notice in this example is that these cards are identical except for the little number in the bottom left-hand corner – this is the number of turns it takes for these cards to come into play.  So the first “Barbarian Warrior” will come in after 8 turns, but his otherwise-identical counterpart will come in 2 turns earlier.  In Warstrom timing is everything.  If two people built decks where one used the “8” cards and one used the “6” cards they would have a 25% better chance of winning each battle.  The second two cards are even more extreme as the one card has a 50% speed advantage over the other one.  And how do you get the “better” version of the cards, pay real cash money for them, or play a lot (seriously a lot).

wsBeastOne more example to show how far this can go – in the bottom right of these cards there is the attack power and toughness (how much damage they can take).  The power/attack is what is important to beat the opponents army.  You want powerful cards out quickly.  The first card in this example is a 3/1 that comes out in 1 turn – so on the second turn this one is already attacking for 3 damage.  This is an “Expert” card which means each pack of cards “costs” you 12500 silver (3-4 days of playing) or 5 gold ($1 cash = 4 gold).  And this only gives you one chance of getting this card – there are many hundreds of different cards.  The best an “average” can do to get a 3 power card is to hope for an “Aanden Silverback”.  They are more common, but take 8 turns to come out – so the Golem that came out on turn 2 can kill the Silverback that comes out on turn 9 (or turn 7 if you pay more money).  If this isn’t bad enough, the Golem is “Animated” which means that even if your turn 9 Silverback kills the Golem he has a 50% chance of coming back into play one turn later.  Crazy.

Any game where the person who spends the most money wins just isn’t fair, and any game that just “plays itself” gets frustrating or boring very quickly.  So, while it took me a good week to realize that Warstrom was unfair and frustrating, at least I did and I am out.  Sorry guys.

But I won’t leave this on a down note.  Instead of Candyland, LCR, and Warstrom let me recommend three real games that fit the same need but are fun, use your creativity, and have a good combination of luck and strategy.

conclusion

With kids, instead of Candyland, try Checkers – with friends, play a simple card game like Rummy instead of LCR – and if you like the collectible card construction type of game, you can’t go wrong with Dominion.  Remember, after playing a good game will have you thinking about what you could have done differently, and what you want to try the next time you play, these three will do that.

Tags:

Book Review: Think and Make It Happen

by Bruce Abernethy 12. March 2010 03:38

thinkbook Think and Make it Happen, by Dr. Augsto Cury, caught my eye because of the catchy title, interesting premise, and seemingly lofty claims. Who doesn't want to eliminate their fears, master emotions, release creativity and even "reinvent your entire life". What follows in the book are some interesting ideas and tools for dealing with your inner self, but unfortunately it falls short of being that one book that will solve all the problems of life.  Overall I’d give it 2-3 stars, and while some chapters were quite good and helpful to many, I would not make it a general recommendation to friends.

The book goes through Cury's twelve principles for "thinking correctly" most of which are very helpful and reflect time-tested practices like setting goals, making good choices, knowing your limits, working through failure, taking personal control of your own life, staying positive, focusing on the present, and not acting rashly by letting emotions control your life.

The first chapter "Being the author of your own story I really liked because it does take a different tack on looking at your life from the outside and realizing that you are the author and director of what is going on in your life and inasmuch as you are willing to act to write the script and make the necessary changes in your life, you can radically impact the action and the plot in your story.

In the second chapter, Cury introduces his "DCD" technique for managing thoughts - that is, Doubt, Criticize, and Determine which will be mentioned throughout the book. In a nutshell this is the idea of monitoring your thoughts and picking off those that are negative or disturbing. Those negative thoughts should be challenged an analyzed critically and used for positive change or turned into something more helpful.

Where things started getting murky for me was later when Curry talked about "Protecting Your Memory" and even altering your memory. Curry continues to attempt to draw examples from the life of Jesus to support his principles. And in the memory chapter goes as far as to say that "Judas's biggest mistake wasn't the betrayal of Jesus but his failure to learn transparency and realize that his greatest problems were within him." This does sound like what I might expect to hear from a psychologist, but statements like this led me to be more critical and guarded about the rest of the book.

Curry continues with guidance on being a better listener and being open to dialogue - and I am a big fan of dialogue versus debate. He continues these ideas, which do build on each other, to working on listening to and responding to the dialogue within you own mind. True listening and productive dialogue are very important and are something people work a lifetime to do well, so spending time thinking and practicing these skills in really key.

But then we move into "contemplating beauty" and are urged to "allow everyday moments to become magical experiences" which can occasionally be true, but not in many of my everyday moments. Curry encourages the reader to use "Psycho-adaptation" to turn ugly things into beautiful things, like turning the pain of the loss of a loved to a focus on "new interests". Having been through some painful times, there is a time for mourning and grief where just "thinking happy thoughts" will not turn the loss into "magical experiences". It is the inconsistency of Cury's ideas, from insightful to questionable, which prevent me from rating this book higher.

The chapter on Creativity seems rushed and out of sync with some of the others - there are much better coverage of Creativity in other entire books - and the chapter on being "Restored in Your Sleep" makes good points which would be key if a lack of sleep or troubled sleep were an issue in someone's life.

From my view Cury gets back on track with his chapter on living an "Enterprising Lifestyle" by outlining how to be looking for change, willingness to act on change and take a risk, accepting failure as well as success, and living live as an exciting adventure.

But he then goes off on a tangent with a very "heady" chapter on "Thinking Existentially" where he tries to tie together all ideas of identity, cosmology, and religion - with a stress that "this book respects any form of belief, including atheism" - but at the same time making a case for a "God". The chapter floats between psychology, philosophy, theology, and never really "lands" in a way that makes it helpful to the reader. Again, this treatment of the topic further clouded my view of the chapters that really did seem to make sense and be helpful to me.

Overall the book was one that made me think and had some good insights, but it also caused doubts and made me critical of the content and author.

I review for BookSneeze

Tags:

One Month of No Fast Food or Drive Thru

by Bruce Abernethy 10. March 2010 08:45

I tweeted earlier that I had now officially gone one month without fast food or drive thru, and that my goal is to keep this up.  I “went public” with this achievement and goal for a couple reasons.  The first is the most obvious, and selfish, reason – I need to put it out there so other people can hold me accountable for doing this and give me some well deserved ridicule should I slip back into the deep fryer.  The other reason is kind of like the old joke: “Why did the chicken cross the road?  To prove to the possum that is was possible.”  That is to say, hopefully I can be an encouragement to others that it is possible to avoid the fast food traps and let people know that other people are trying to do this as well.

To be completely honest, while the “one month” statement is accurate it’ll be at least another week until this was a month of “conscious choice” on my part.  You see three days of that month were in the hospital with a broken arm and three or four more days of that were at home recuperating. It was during these days at home, when I had my arm propped up on pillows on the big chair, that my wife just happened to turn on Netflix for me and choose to watch supersizeme “Super Size Me”.  As I was basically a captive audience at this point I watched the whole show.  I had watched part of it before – maybe even most of it – but it was really not at a “teachable moment” in my life as I was during this recovery period.

“Super Size Me”, if you haven’t seen it, is an irreverent review of the fast food industry and really the food industry as a whole.  The premise is that Morgan Spurlock would eat only McDonalds food for breakfast, lunch and dinner for 30 days and see what impact this has on his health, mood, and life in general.  Simple enough.

The “side plots” include vignettes on where the food comes from, how it is processed, what it is made out of, how the same food is now in many school cafeterias, and even in some hospitals.

While the methods of Spurlock would never be classified as “true science”, and there are many valid criticisms of his process and how he chose to carry it out, there are some plain facts that really can’t be refuted. 

  • The quality of fast food can not compare to that of food prepared at home
  • Fast food offers a quick burst of energy from sugar, other carbs, and fat, but at the price of a huge let down later on with even cravings for more of the same kind of food
  • The portion sizes at fast food restaurants vastly exceed the calories needed for a single meal – just look at the history of what a “large” pop/soda has been over the last 20 years as well as what a portion of french fries has been in the same time period.

My Favorite Foods

wendysbaconatorMy “fast food drug” of choice has often been Wendy’s because it is directly across the street from work, and I worked at Wendy’s in high school and learned to like their food.  But even before I broke my arm I had some bad feelings building about Wendy’s.

In the last six months I have been troubled by their new “Baconator” line of sandwiches.  There was a huge sign by the drive thru basically taunting you to get a huge double cheese burger with multiple layers of bacon.  I never did try it – mainly because I really prefer their chicken sandwiches (having prepared the burgers at the aforementioned job) – but the idea that they were enlarging their burgers and adding multiple layers of bacon seemed to me that they were really headed in the wrong direction.

drivethrudiet The other thing I had noticed is from my #2 Fast Food destination – Taco Bell.  They started a new thing this year called the “Drive-Thru Diet Menu”.  I never saw any commercials or explanations of this, but my first gut reaction to it was “this has to be a joke.”

I would never have put together Taco Bell and being on a diet.  I guess they were trying to pull of something like Subway did with Jared several years ago, but that just doesn’t seem to work in my mind with Taco Bell.  Taco Bell is cheap, tasty, and filling food – red meat, refried beans, and some token veggies inside an amazing variety of hard and soft shells.  But it really wouldn’t fall into a diet that someone could follow.  I could buy a “lighter side” menu or even a “more veggies” icon, but I couldn’t imagine someone eating nothing but Taco Bell.

Local Shopping and Local Growing

Local-FirstThe final reason I think I was ready to step away from fast food was something that has really become important to me lately, and that is supporting local businesses and eating local foods.  There are many reasons to shop locally and eat locally-grown foods.  An obvious one is a financial reality in today’s Michigan economy – if I buy from a store owned by local owners and employing local workers, then much (even most) of the money circulates back into the local economy as they do business with other local businesses and contribute to local charities and non-profits, they employ local workers, and even profits go to local owners to invest in more local businesses.

Another big reason is potentially significant health benefits.  When local restaurants buy their food from local farmers (and yes there are great local greenhouses in our area that grow produce all year long) then the food can be much more fresh than if it had to be imported from Southern America (or even South America).  Big chains like fast food restaurants often centralize their distribution of food and even have a lot of it pre-processed before coming to the location (e.g. shredding lettuce, making meat patties, even pre-cooking some food) – as a test, just ask someone where their produce or meat comes from, if they don’t know then that should tell you something.  It’s also much better for the environment for food to travel 10, 20, or 50 miles to your destination instead of crossing the globe.

Another thing you can do if you know where your food actually comes from is you can know what the growers and farmers actually do when they are growing the food or raising the chickens.  Even if you aren’t looking for the food to be organic, it is nice to be able to know what fertilizers and pesticides are used.  What kind of chickens are they (yes there are different breeds)?  You can even, sometimes, go and visit the farms for educational purposes and peace of mind.  You will also notice that some of the “staples” that you have used in the past just don’t grow anywhere locally, but that there are alternatives and different things that you should probably try. I am really looking forward to the local Farmer’s Markets to start up again this spring to see what else I might be missing.

Is It Working?

If I thought about this more I might actually journal my health, feelings and weight loss along the way this year.  One month is not really enough to become a spokesperson or expert for this lifestyle.  But that being said I will say this.  I do generally feel much better while eating the lunch I brought with me, a home cooked meal, or even a soup and salad at Olive Garden instead of a sandwich and fries.  Some people talk about the “food coma” you can feel after a large meal or a meal high in sugar, carbs and fat.  These foods can hit your blood stream so quickly and your body reacts and tries to process (or store) the energy and you can get this feeling of just wanting to crash after eating.  A smaller and lighter meal does not have the same impact – in fact, much the opposite.  I don’t miss the food coma feeling and don’t miss any of the intestinal distress that I don’t need to really explain.

The other amazing thing I have noticed is that my recovery from my broken arm has been miraculously fast.  I am only three weeks from major surgery with a big metal plate being put in my arm and my bicep muscle being torn and cut.  Only one week ago I got my stapes out and my sling taken away.  The amount of healing my body has done in this short time shocks and confuses a lot of people, and even myself.  I have been taking some supplements of Calcium and Vitamin D and D3, but I have also been consuming many more vitamin rich vegetables, mostly raw, than I am used to and drastically reduced my meat and fat intake.  And this is not because I am “on a diet” it is really because I am preparing and bringing my lunch and not visiting fast food establishments.  I can’t directly correlate my rapid healing to eating differently, but I do believe it has been a big part of it.

This next month will be quite different as I expect to be mostly “back to normal” with my arm in a few weeks and the spring melt is enabling us to get outside a lot more.  I still have 3-5 more months until the bone in my arm is healed, but the metal plate, while a drastic and significant surgery, has the benefit of enabling me to use the arm much sooner.

I’ll post again in a month or so, and do ask me about it if you see me.  Some have asked if I could make healthy choices at a fast food place or eat the food in moderation – I don’t think so.  This is probably more of a failing in myself than anything else.  I am going to stick with the “zero fast food pledge” as it is easier for me to accomplish and easier for me to assess and be accountable for.  I’ll need to add some activity and exercise measures in there as well at some point – let’s shoot for that a month from now.

Tags:

What is hypervideo anyway?

by Bruce Abernethy 10. March 2010 00:29

If you know me or follow this blog at all you will probably know a few things about me: 1) I really like working with the latest technology and 2) I have a long history with Education and Learning.  It just so happens that a project I am working on now, that is using some “cutting edge” technology, takes me back about 18 years to a project I worked on in the summer of 1992.  I am talking about “hypervideo”, though in 2010 we are now doing it with streaming high-definition video instead of laserdisc recorders.

What did “hypertext” do for “text” with HTML?

samplehtml We are so used to hypertext and the world-wide web, that we really don’t think about the technology and features behind it any more, but let’s take a second to “review the obvious”.  The hypertext-markup language (HTML) is the coding behind the world-wide web.  It is used to take the raw text and put a structure around the text and within the text.  What started as a simple text file now gains things like:

  • a “title”,
  • “headings”,
  • “hyperlinks”,
  • navigation,
  • sections/anchors,
  • a unique identifier (uniform resource identifier (URI)),
  • and data-about-the-data or “metadata”.

Users of these pages never really see any of this information, but they do appreciate it and use it all the time.  They can enter an address like www.nbcolympics.com and be taken directly to the online Olympic coverage from NBC (and how little most people appreciate how easy this is for them to do now.  Users can “bookmark” or “favorite” particular pages and get back to them whenever they want to.  Better yet, they can use Google or Bing to type in a few words or a phrase and often find exactly what they are looking for.  Search engines use the titles, headings, and metadata in the page in their search routines to find these pages.  And let’s not forget those wonderful underlined blue hyperlinks and linked buttons on pages that allow us to jump from page to page, and often find great resources and pages that we never knew that we were even interested in.

The problem with non-text items on web pages is that it is hard for computers to figure out what they are – if you put a picture of your dog on a web page it is still very hard for a browser or search engine to “look” at the picture and file it under “dog.”  With words you can often tell what they mean from the context of the words that precede it or follow it; so this helps.  Today, images can contain an “alt” attribute where you can describe the picture in words.  This was originally though to be for browsers that did not support images or for screen readers for visually impaired users of the web, but now serves very well to help identify images to search engines.

What if we could do similar things for video?

But what about video?  Sites like YouTube, Facebook, and Vimeo enabling the upload of tens of thousands of hours of video.  Each video contains a title and description which helps enable search to find the video.  But what about what is inside the video.  A single video may have many distinct sections or chapters where information is presented logically.  In each section there could be textual information describing what is going on in the video (think closed captioning or even the Descriptive Video Service).  What if you could not only search to find the video, but also find a particular time-code within the video (e.g. where the bit of text you searched for occurred in the video)?  What if you could embed hyperlinks to other videos, other timecodes, other pages or notes, etc. within the video itself, so that they would appear or become available at a particular time when the video was playing?

Well, we can.

TUVA

My favorite current example of hypervideo ideas is Project TUVA .  For one, the main content is Dr. Richard Feynman’s wonderful physics lecture series at Cornell in the ‘60s (and who doesn’t like some good physics every so often).  But, for me, it is also nice to know that it is built with Silverlight, which is a toolset that I am very aware of, so I know I could use many of these features myself down the road.

tuva1

At the core of the player you will see something that looks very common for videos on the internet.  There are the standard “VCR” controls, volume, and full-screen buttons – nothing really special so far.

tuvadetails

But it doesn’t take long to see just how much else can be added to the video player when you start thinking about hypervideo concepts of linking, navigation, chapters, notes, and more.

Chapters.

The first thing I noticed about the player was the expanded navigation and information timeline on the very bottom (I would really encourage you to open this site if possible because experiencing this live will help you understand this much more than a few static images and my attempt to describe the interactions with words).  Each of the seven videos in Feynman’s lecture series are broken up into logical “chapters” with chapter titles like “Newton” and “Electricity”.  This provides much the same functionality of HTML headings and anchor tags.  You can quickly see the structure of the video and jump to any chapter from this navigation bar.

Notes / Expert Commentary

Since this player was designed for an educational setting, the ability for the viewer to add their own notes in a left-side panel was added.  This allows for anyone watching the video to add a note at a particular time in the video which they will be able to review later.  In addition to this, you can load other people’s notes files and see what they were thinking during the video.  This feature allows for the addition of “expert commentary” within the video frame – kind of like on a DVD where some allow you to turn on an audio track that includes the director and/or other people involved with the movie.  This would also allow a teacher to include their own comments and instructions for students watching the video – and yes, these are also time-stamped so they can become clickable as well to add another layer of navigation.

Closed Captioning / Transcript

We’ve all seen closed-captioning on television shows where what is being said in a particular show is displayed on the screen for those who are hearing impaired or for situations where the ambient noise in a room is such that the television can’t be heard.

tuvatranscript

The “Tuva” interface takes closed-captioning one step further and turns it into a full transcript of the talk being given.  You can literally read through all the different close captioning entries in a scrollable textbox.  Not only can you read through the captioning, but each of the captions itself is now a hyperlink that will take you to the time in the video where that caption was on screen.

But wait.  If we have all this text now, linked to the video, can’t we search this too?  Yes.

Search

tuvasearch

The interactive search box in the “Tuva” interface will allow the user to search the transcripts of all of the chapters of all of the videos for a keyword or phrase.  Then all of the “hits” can be displayed, and yes, they are clickable hyperlinks.

Links / Extras

The other notable feature of this interface is the “Extras” which are shown at the very bottom of the screen.  Embedded into the video are bits of metadata which enable the inclusion of “notes” and “links” within the video itself.  Each extra can have an associated icon or image which becomes visible in the “Extras” pane on the right at the appropriate time in the video.  For a “note” type extra, this can pop-over a panel that includes extra information about a particular topic being discussed.  The viewer can click on the icon to read this note, which pauses the video until they are done.  Similarly clicking on a “link” extra will take the user to another part of the site or even off of the site to a page that explains a topic in more detail.  For example, if Feynman is discussing Albert Einstein, and the viewer knows a lot about Einstein, then they can ignore the picture of Einstein in the Extras panel.  If they are less familiar with Einstein, they can click on the icon and be taken to a new page that discusses the works and life of Einstein in detail.  When they are ready, the viewer can close the page and return to the video which can then proceed from where they left off.

NBC Olympics

But how might this technology look in a less “academic” and non-research or prototype situation – how about the 2010 Winter Olympics?

nbco1

NBC created an online player that would stream live and pre-recorded events to viewers everywhere.  They created a nice “blue-ice” themed player with all the functions you would expect from a modern player.  A Play/Pause button, Fast Forward, Rewind, Jump Back, Volume, Full-Screen, and even a humorous “Boss” button that filled your screen with a Windows 7 desktop with an open Excel spreadsheet – cute.

But if you look a little closer you will see some components are are not, yet, very typical of video players online.

nbc02

Clicking on the “Key Events” button for this Snowboarding video pops-up a scrollable list of all of the heats within this pre-recorded event.  So that if I scroll through the list and  want to find the round with Nick Baumgartner from the USA, I can find him in Heat 8 – clicking on this item takes me directly to that time in the video.

nbco3

Similarly, the time bar at the bottom of the player has small lines at particular times, that you might not even see if you weren’t looking for them.  In this example I was trying to find the quarter-final with Wescott and Holland from the USA – clicking on that bookmark took me directly to that point.

nbco4

One more interesting use of “metadata” here is the “Play By Play” pane that you can also call up on the player.  This allows for you to see interesting details about each event as it occurs.  For example here, we can see that the skier has achieved 54.7mph on the ramp before taking off – crazy.

How is it Done?

So, great, this is a cool technology and I’ve got a bunch of ideas on how it could be used.  What tools do I need to start building my own hypervideo projects?  Stay tuned for a near future post on this question and some tips to get you started.

Tags:

How I broke my arm and will now set off every metal detector

by Bruce Abernethy 14. February 2010 03:10

This will be brief, it is my first attempt at typing in 4 days or so, but I wanted to get a quick post out to give anyone who wanted more details on my "adventure" some info, and to practice using my left hand more because that will be key to me getting back to a normal day's work.

On Tuesday after work, I drove home and parked in the driveway as usual, but then I decided to get the garbage can at the end of the driveway.  We had gotten about an inch or two of new snow, but that is pretty normal.  Unfortunately at the end of the driveway the snow was on top of some ice - but also, not that strange.  With ice under snow, I got close to the garbage can when both feet flew out from under me at the same time, so I was going down - fast.  I think I instinctually threw out my arm to catch myself and not land on my head and I heard a pop and felt some pain, but really didn't know exactly what had happened.  I was now laying in the snow on my back "snow angel" style.  I decided to try to roll over and pick myself up.

In my mind, both of my arms were above my head, but as I rolled over I saw my left arm sitting beside me - this is probably one of the weirdest sensations I have ever felt.  My arm was were it was not "supposed to be" and when I told the hand to open and shut, it did, but it was very "wrong" and my arm was "waggling".  Trying to move my arm was pointless as it was going whatever way it wanted to and hurt more than anything  I can remember.

This is a photo from Flickr - not mine - I don't have any but I will try to get some.  This is also a woman's arm, but it comes closest on a short search to what I remember them showing me.

 

So the problem was my humerus bone was basically sheered in two and one of the broken sides was jabbed into my bicep muscle.

Long story short; got to ER, x-rays, can't cast a transverse break, 24 hours later, 10" steel plate attached with 7 screws on the bone having to tear some more muscle to attach the plate (but this should heal). Day and a half of recovery in the hospital and now I am home.

Good news is my wrist and fingers are working very well considering.  The break was within a half-inch of where the nerves attach to operate the upper arm - that could have been much worse.  My tricep muscle is progressing and I can move my arm back and forth.

Unfortunately my bicep will need some therapy and it may be months before it is back to function.  I can't lift my arm right now and need a splint or a strap to move it around.

I have a cool scar - about 10 inches long with 40 or so staples right now - looks like a bicep zipper without the zipper part. I will be going in in 10 days to have a follow up appointment and make plans for further therapy.

There are more details, but they aren't as relevant (and kind of gross) and I am done with this first typing practice.

Thanks for all the prayers, notes and e-mails - they are a great encouragement.

Tags:

Mouse Mischief: Multiple Mouse Support in PowerPoint with the MultiPoint Mouse SDK

by Bruce Abernethy 6. February 2010 04:15

I am trying to spend the early hours of Saturday morning experimenting and learning about something that interests me, with the only requirement being that is has no immediate practical value other than learning (i.e. it is not linked to work or other side projects).  If it seems interesting enough, I’ll blog it.  This was fun.  Also, this post will be much less technical than the last set, no programming needed for this one, in fact anyone with PowerPoint will be able to take advantage and use the tools here.  There may be a follow on post that will be more technical, but I wanted to alternate between tech anyone can use, and tech that really only developers could appreciate.

Back on January 18th, Scott Hansleman tweeted about the new Windows MultiPoint Mouse SDK by teasing “Want your application to support TWO mice at a time?”  This is something I remember doing waaay back with the early Macintosh computers having multiple students with different mice interacting with a single HyperCard stack.  Now we can do this again, in code wit, and with a cool PowerPoint plugin called “Mouse Mischief”. 

Then on January 26th woot.com had $.99 refurbished mice for sale on a Woot-Off – why would anyone buy three mice that had been returned and refurbished?  For just such an experiment.

Disclaimer: This is beta technology and should only be used by people who aren’t easily frustrated and don’t expect a final/polished result.  This technology will be final soon – if you want it to be more tested and full-functioned, come back in a few months and try this out.

The Mouse Micschief PowerPoint 2007 plugin can be found on Microsoft Connect.  You will need a Microsoft Live ID and register with Microsoft Connect.  This is a great place to stay current on Microsoft technology and participate in beta programs.  But, again, it is not for everyone.

Once installed, “Mouse Mischief” will show up as a PowerPoint ribbon control.

mm1

There will be a new item up in the tabs, which reveals the “Mouse Mischief” ribbon.  Also note the “pptPlex” tab that is still up there.  This is another cool PowerPoint plugin that makes your presentations use a “DeepZoom” look and feel which makes the very “Silverlighty”, but that is/was another post.

mm2

The ribbon adds some new slide types “Yes/No” and “Multiple Choice” and an important button “Play”.  If you insert the new slide types and play the slides the “normal” way in PowerPoint, there will be no new functionality in the slides.  If you launch the slides using the play button in the ribbon you will get the multi-mouse functionality.

mm3

When you first start your “Mischievous” presentation you will notice a slide you didn’t add yourself.  This allows for one (or more) mice to “register” itself as the presenter/teacher (this specific tool is education oriented, but has many uses outside of education as well).  If you move other mice at this point you will see multiple mice moving independently on the screen – very cool. Previous to this, if the different mice had been moved, they would all have controlled the single cursor on the screen.

mm4

This next screen show that the designers of this are expecting a massive number of different mice – perhaps a classroom full – we only have four (teacher/presenter and three for feedback).

mm5

When we get to a screen that has one of the Yes/No or Multiple Choice questions, then the different mice become active and they get to pick one of the answers.  When everyone has answered, or the teacher/presenter chooses to move on, we get a summary screen.

mm6 

This provides instant feedback for presenters and/or checks for comprehension from the audience.  The multiple choice slide has other options.

mm7

Notice that only the presenter/teacher mouse has the ability at the bottom to move the presentation to the next or previous slide, or to end the interaction early.  In addition to giving feedback on open-ended questions like this one, you can also pre-pick the “correct” answer on the slide and show how many had the correct answer, and who was first to respond.

mm9

When the presentation is complete, you need to end the presentation with the presenter/teacher mouse (i.e. audience/class members can’t end or control the flow of the presentation.

mm8

The ability to use multiple mice on once screen is great – and this “Mouse Mischief” plug-in tool for PowerPoint gets you started right away.

In Part 2 of this series, I will show how a developer can add multi-mouse support to their own applications using the MultiPoint Mouse SDK – if you want to get started early, check out the MultiPoint Mouse SDK Developer Info page.

Tags:

Silverlight Kata: IFS Fractals: Full Solution

by Bruce Abernethy 5. February 2010 09:23

If you have been following along with Part 1, Part 2, and Part 3, then you know we have described basically what the IFS Fractal “quest” is, how we did the rotatation/translation/scale transforms, and how we wired up the MessageBus to send our messages.

Complete Code Solution

So we are ready to put it all together: [ Download Source Code (if desired) IFSContentControl.zip (1.4Mb) ]

And, since you’ve been so patient, here is a live demo of the application.

Live Demo (Requires Silverlight 3)

 

Get Microsoft Silverlight

Pulling it Together

So, once we had the idea, the IFSContentControl, and the MessageBus wired up, pulling the rest of the Solution together is pretty straightforward.  You will see the typical Silverlight Solution structure of a Silverlight project and the hosting Web Application project.

In “polishing” this up a little I did add a few more Messages.

public class SetStartupIFSControl : CompositePresentationEvent<IFSControl> { }
public class SelfDestruct : CompositePresentationEvent<DateTime> { }

Adding SetStartupIFSControl let me add the ability to have the three buttons at the bottom with different “starter” IFS Objects.

The “Serpinski Triangle / Gasket” that I’ve been showing since Part 1 was defined like this …

public static IFSControl StarterSerpinski()
{
  var starter = new IFSControl
                    {
                        IsProbabalistic = false,
                        Background = new SolidColorBrush(Colors.LightGray),
                        XOffset = 25,
                        Age = 1
                    };

  starter.Content = starter.MyRootControl;

  starter.IFSTransforms.Transforms.Add(new IFSTransform(.5, .5, 0, 0, 0, 1));
  starter.IFSTransforms.Transforms.Add(new IFSTransform(.5, .5, 0, 200, 0, 1));
  starter.IFSTransforms.Transforms.Add(new IFSTransform(.5, .5, 0, 100, 200, 1));

  return starter;
}

The more complex “Barnsley Fern” looks like this …

public static IFSControl BarnsleyFern()
{

  var starter = new IFSControl
                    {
                        IsProbabalistic = false,
                        Background = new SolidColorBrush(Colors.Black),
                        XOffset = 100,
                        Age = 1
                    };

  starter.RectangleTemplate = new Rectangle
                                  {
                                      Height = 400,
                                      Width = 200,
                                      Stroke = new SolidColorBrush(Colors.Green),
                                      Fill = new SolidColorBrush(Color.FromArgb(200, 128, 255, 128)),
                                      StrokeThickness = 8
                                  };

  starter.Content = starter.MyRootControl;

  starter.IFSTransforms.Transforms.Add(new IFSTransform(.01, .16, 0, 0, 0, 1));
  starter.IFSTransforms.Transforms.Add(new IFSTransform(.34, .3, -50, 2, 50, 7));
  starter.IFSTransforms.Transforms.Add(new IFSTransform(.36, .28, 40, -2, 50, 7));
  starter.IFSTransforms.Transforms.Add(new IFSTransform(.85, .85, -3, -0, 50, 75));



  return starter;
}

These are both in the StarterIFSObjects static class.

The RectangleTemplate allowed for different shape Rectangles (which the “fern” required”) and also gave me a place to put the foreground and background colors – which is nice.  I added “Age” so I could tell how many iterations each object had gone through (surfaces as a ToolTip).

How well does it work?

For the Serpinski Triangle / Gasket, I was very pleased:

triangle8it

After 8 iterations, we have a fine (nearly textbook) example of what we were looking for.

For the “Checkered ‘X’”, also very nice:

cross5it

More predictable, in my opinion, than the triangle, but after only 5 iterations we have the multi-layered self-similar “X”

But for the Barnsley Fern:

fern7it

Not what I was hoping for.  Even after 7 iterations (creating 16384 IFSContentControls), this is only starting to look like what I was hoping for.  Iterating one more time left the browser “Not Responding” and was not generally a good idea.

The fern has many intricate details that do not surface well with this algorithm.  There are “bitmap” algorithms that create very nice ferns in a short amount of time (“classic” GDI+ routines) …

bitmapfern

But these do not track each translation and each message going out, which was what I was hoping to learn about from this.

So, the goal last weekend (which turned in to a goal to blog about it before “next” weekend (i.e. tomorrow)) was to learn more about TransformGroups and to see how much I could stress the EventAggregator/MessageBus without it caving.  More about that in the last installment.

  • Part 1 – Fractals with TransformGroup and MessageBus
  • Part 2 – Automating transformations by creating an IFS Content Control
  • Part 3 – Wiring up the Iterations using a basic MessageBus implementation.
  • Part 4 – But will it work for a fractal Fern?
  • Part 5 – Lessons Learned (aka limitations of the MessageBus and recursion in Silverlight)

  • Tags:

    Silverlight Kata: IFS Fractals: The MessageBus

    by Bruce Abernethy 5. February 2010 03:20

    We are almost done with this application.  What started with Part 1 (intro to Fractals and the Silverlight experiment) and continued with Part 2 (creating the IFSContentControl) now gets a MessageBus to help communicate to and from the different controls

    The EventAggregator and MessageBus patterns have been described as a pattern and  discussed for a while and recently implemented by several different frameworks within Silverlight.  The basic idea is to decouple messages for common functions from specific classes.  If there is a common set of Messages, and a shared MessageBus, then objects with access to the bus and messages can “subscribe” to the messages that they want to “hear” and “publish” messages that they want to send out.

    A more detailed description of this particular implementation as described by the Microsoft Patterns & Practices group implemented as EventAggregator.   We will use the EventAggregator for our MessageBus and CompositePresentationEvent from the Microsoft.Practices namespace described here.

    Which Messages?

    So, then, what are the messages that we will want to have in this application?

    “Iterate” is the big and obvious one.  We may, for example, want to press a Button and have it Publish the “Iterate” Message to the MessageBus.  Then, we’ll want our IFSContentControls to Subscribe to the “Iterate” message and have them generate the next generation of the fractal.

    So to start out we’d have this …

    messagebus1

    The IFSContentControl would clone itself and apply each transform (3 in this example).  These new controls would then also Subscribe to the “Iterate” Message.

    messagebus2

    So the next click of the button that publishes the message will now be “heard” by three different objects ….

    messagebus3

    And so on … and so on …

    To fully make this work though, we’ll need to (1) get the new controls onto our Container/Canvas.  And, in the case of these fractals, the original control does not “survive” the iteration and only “lives” through one generation.

    So we’ll add two more Messages: (1) AddIFSControl (to add the new IFSControls to the Container) and (2) RemoveIFSControl (to remove the current control from the Container once the Iteration is complete).

    messagebus4

    So our messages end up looking like this …

    using Microsoft.Practices.Composite.Presentation.Events;
    
    public class Messages
    {
       public class Iterate : CompositePresentationEvent<bool> { }
       public class AddIFSControl : CompositePresentationEvent<IFSControl> { }
       public class RemoveIFSControl : CompositePresentationEvent<IFSControl> { }
    }

    The CompositePresentationEvent is a generic class that takes a strongly typed object.  In the case of the “Iterate” message, there really isn’t a type we need to send up (there is no data payload that is needed to process the “Iterate” message).  In the case of the AddIFSControl and RemoveIFSControl messages, we will send along the IFSControls themselves in order to be processed.

    Where is the MessageBus?

    For this application, it is easiest to implement the MessageBus at the highest point possible in the Application itself.  So in our App.xaml.cs file we just add this …

    using Microsoft.Practices.Composite.Events;
    
    public partial class App : Application
    {
       public static IEventAggregator MessageBus = new EventAggregator();

    Really that is all it takes to set up the MessageBus.

    Publishing the Messages

    So, now how do we wire up the Button to publish the iterate event.  In the codebehind of the MainPage (or ViewModel if you’ve wired it up) we can add code something like this.

    private void Button_Click(object sender, RoutedEventArgs e)
    {
      App.MessageBus.GetEvent<Messages.Iterate>().Publish(true);
    }

    It is important to notice that there is nothing special

    about the “Button” itself – we aren’t using any of its events or properties to do this work or propagate this message.  You could just as easily set up a DispatherTimer and have it call “Iterate” every 60 seconds or so …

    void IterateMe_Tick(object sender, EventArgs e)
    {
      App.MessageBus.GetEvent<Messages.Iterate>().Publish(true);
    }

    Subscribing to the Messages

    So now we need to add code to the IFSContentControls to Subscribe to the Iterate Message.

    public IFSControl()
    {
      App.MessageBus.GetEvent<Messages.Iterate>().Subscribe(DoIteration, true);

    To wire this up we need to create a public method that takes the same payload as the message itself – in this case, Iterate sends a boolean.  So we need a public method that takes a boolean.

    private void DoIteration(bool isTrue)
    {
      foreach (var ifst in IFSTransforms.Transforms)
      {
          var newControl = new IFSControl
          {
              Content = Copy(this),
              IFSTransforms = this.IFSTransforms,
              RenderTransform = ifst.IFSTransformGroup
          };
          App.MessageBus.GetEvent<Messages.AddIFSControl>().Publish(newControl);
      }
      App.MessageBus.GetEvent<Messages.Iterate>().Unsubscribe(DoIteration);
      App.MessageBus.GetEvent<Messages.RemoveIFSControl>().Publish(this);
    }

    So IFSControl is now set up to Subscribe to the Iterate event – it will then call DoIteration() when it receives the message.  DoIteration() will iterate through all the different transforms, create a new IFSControl which is a clone/copy of the current control, and then Publish the AddIFSControl message with the new control as the payload.  In our example this will happen three times for each iteration, so three new controls will be sent in messages.

    The last two lines are interesting as well.  Once the new controls are created it is time for the current control to request that it be removed from the container – it has done its work and it is time to move on.  First we Unsubscribe from the DoIteration Message (always good to not leave loose ends) and then Publish the RemoveIFSControl message with “this” as the payload (i.e., the current control). It is thus requesting to be removed from the container.

    Container Messages

    In this example the DataContext of our MainPage will be a class called the IFSStageViewModel.  This class encapsulates all the information and logic that will be needed for the user interface of our application.

    public class IFSStageViewModel : INotifyPropertyChanged
    {
       public Canvas Stage {get;set;}
    
       public int NumStageItems
       {
           get { return Stage != null ? Stage.Children.Count : 0;  }
       }
    
       public IFSStageViewModel()
       {
           App.MessageBus.GetEvent<Messages.AddIFSControl>().Subscribe(AddIFSControl, true);
           App.MessageBus.GetEvent<Messages.RemoveIFSControl>().Subscribe(RemoveIFSControl, true);
           App.MessageBus.GetEvent<Messages.Iterate>().Subscribe(Iterate, true);
       }
    
       public void Iterate(bool isIteration)
       {
           OnPropertyChanged("NumStageItems");
       }
    
       public void AddIFSControl(IFSControl newIFS)
       {
           Stage.Children.Add(newIFS);
       }
    
       public void RemoveIFSControl(IFSControl oldIFS)
       {
           Stage.Children.Remove(oldIFS);
       }
    
       protected virtual void OnPropertyChanged(string propertyName)
       {
           if (string.IsNullOrEmpty(propertyName)) return;
    
           if (PropertyChanged != null)
           {
               PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
           }
       }
    
       public event PropertyChangedEventHandler PropertyChanged;
    }

    It starts with a XAML Canvas called “Stage” which will be assigned to the Canvas on the MainPage where we want the fractal to appear.  There is also an integer called NumStageItems – this will be bound to a TextBlock to simply display the current number of IFSContentControls are currently contained in the “Stage”.

    In the constructor you will see that three different Messages are subscribed to – that is, all three Messages that we have defined.

    For AddIFSControl the ViewModel will simply add the sent control to the Canvas.  Likewise for RemoveIFSControl the sent control will be removed from the Stage.

    For Iterate all we end up doing is calling OnPropertyChanged for NumStageItems.  Because of the binding in Silverlight, and because our ViewModel implements INotifyPropertyChanged, this will cause the TextBlock in our View/MainPage to be refreshed with the new “get” value, which is simply the number of children in the “Stage” Canvas.

    Next we will see how this works for the Serpinski Triangle / Gasket – and see if it will work for a more complex set of iterations a Barnsley Fern.

  • Part 1 – Fractals with TransformGroup and MessageBus
  • Part 2 – Automating transformations by creating an IFS Content Control
  • Part 3 – Wiring up the Iterations using a basic MessageBus implementation.
  • Part 4 – But will it work for a fractal Fern?
  • Part 5 – Lessons Learned (aka limitations of the MessageBus and recursion in Silverlight)
  • Tags:

    Silverlight Kata: IFS Fractals: Automating the Transforms

    by Bruce Abernethy 2. February 2010 00:53

    Now that we have the idea of what IFS Fractals are from Part 1, we can move on to automating these iterations via code.  Our first step is to encapsulate what an IFS Transform is.

    public class IFSTransform
    {
       public double ScaleX { get; set; }
       public double ScaleY { get; set; }
       public double Angle { get; set; }
       public double TransformX { get; set; }
       public double TransformY { get; set; }
       public double Probability { get; set; }
    }

    As detailed before, an IFS Transform will typically scale the previous iteration (bigger or smaller, and one or both axes), rotate the object, transform/move the object on one or both axes, and will add a probability.  The probability is for when the different transformations need to happen more or less often in order to create the desired shape. For example a tree may have many leaves, but less branches; a person may grow more hair than they grow in height.  Many of the transforms will be “uniform” and have all the same probability.

    It is nice that we can enter our transforms in this concise class, but it would also be nice if we could translate these numbers into a XAML TransformGroup like the ones we manually created in the last post.  To do this we’ll add a public method to the IFSTransform to accomplish this.

    public TransformGroup IFSTransformGroup {
    
      get {
    
          var sc = new ScaleTransform { ScaleX = ScaleX, ScaleY = ScaleY };
          var rt = new RotateTransform { Angle = Angle };
          var tt = new TranslateTransform { X = TransformX, Y = TransformY };
    
          var tg = new TransformGroup();
          tg.Children.Add(sc);
          tg.Children.Add(rt);
          tg.Children.Add(tt);
    
          return tg;
      }
    }

    That will do nicely, and will help us get started on the XAML IFS Control itself.

    IFSContentControl

    In order to handle multiple iterations, what we’d really like is a control that contains the object that we are copying, then applies a series of transforms from all the previous iterations. 

    At the top level we need a control that also has the “smarts” to perform the next iteration.  To do this it needs two key things.

    First it needs to know all the rules for the iteration.  Next it needs to be able to clone/copy itself and apply the next iteration.

    We already have a class that represents an individual transform.  What would a group of transformations look like.  We could just use a generic list of transforms, but the group also needs to be able to return a random transform if the group is probabilistic (i.e. has a need to generate transforms in a non-uniform fashion).

    So how can we return a random item from a generic list of transforms based on their individual probabilities (which are represented a a decimal, adding up to 1.0 (hopefully))?

    Unfortunately, the C# Random object does not have a “NextDouble” method with a range of values – only the integer method has that ability.  We’ll have to turn the doubles into integers for this calculation.

    public class IFSTransformGroup
    {
       public IFSTransformGroup()...
    
       public List<IFSTransform> Transforms { get; set; }
    
       public IFSTransform GetRandomTransform
       {
           get {
    
               var totalProbaility = 0;
               foreach (var t in Transforms) totalProbaility += t.ProbabilityEstimate;
               var rand = new Random();
               var nextIteration = rand.Next(totalProbaility);
    
               var probablilitySum = 0;
               foreach (var t in Transforms)
               {
                   probablilitySum += t.ProbabilityEstimate;
                   if (probablilitySum > nextIteration) return t;
               }
    
               throw new InvalidOperationException("Random number exceeded Probability Total");
           }
       }
    }

    Now we can make our IFSContentControl.

    public class IFSControl : ContentControl
    {
       public IFSTransformGroup IFSTransforms { get; set; }
       public bool IsProbabalistic { get; set; }
       
       public void DoIteration()...
       
       private object Copy(ContentControl original)...
    }

    We really just want a “smart” ContentControl, so let’s inherit from that.  We can add an IFSTransformGroup, decide if it is probabilistic or not, and add a method to Do the next Iteration, which will need to be able to have a private method that will clone/copy the existing control (most likely several times).

    What would need to happen for each iteration?

    private void DoUniformIteration()
    {
      foreach (var ifst in IFSTransforms.Transforms)
      {
          var newControl = new IFSControl
          {
              Content = Copy(this),
              IFSTransforms = this.IFSTransforms,
              RenderTransform = ifst.IFSTransformGroup
          };
       }
     }

    Let’s look at just the “uniform” iteration first (where all transforms are applied equally).  We will need to go through each transform and create a new control that is the existing control with the specific transform applied on “top”.  This will create a number of different copies of the existing object which are each different now based on their specific transformation.

    What do we do with these new controls?  What to we do with the existing controls?  That’ll happen in Part 3 when we get into the Messages and the MessageBus.

    To finish out today, we need to be able to make a clone/copy of each object, to enable the “Copy” method.

    private object Copy(ContentControl orig)
    {
      if (!(orig.Content is IFSControl || orig.Content is ContentControl))
      {
          var rootControl = new ContentControl 
            {
                RenderTransform = orig.RenderTransform,
                Content = new Rectangle[...]
            };
          return rootControl;
      }
    
      var newControl = new ContentControl
            {
                RenderTransform = orig.RenderTransform,
                Content = Copy((ContentControl) orig.Content)
            };
      return newControl;
    }

    It is always fun to end with a little recursion.  We’ll end up walking the control tree down through the previous iterations.  So long as we see an IFSControl or ContentControl we’ll add a ContentControl to our new object, carrying over the existing RenderTransform (i.e. TransformGroup) to the new control.  When we find something that is not an IFSControl or ContentControl, then we know we’ve reached the source object – in this case a Rectangle.

    Coming next, let’s create Messages we can send off to all the wired-up controls to tell them it is time to do the next iteration.

  • Part 1 – Fractals with TransformGroup and MessageBus
  • Part 2 – Automating transformations by creating an IFS Content Control
  • Part 3 – Wiring up the Iterations using a basic MessageBus implementation.
  • Part 4 – But will it work for a fractal Fern?
  • Part 5 – Lessons Learned (aka limitations of the MessageBus and recursion in Silverlight)
  • Tags:

    Silverlight Kata: IFS Fractals with TransformGroup and MessageBus

    by Bruce Abernethy 1. February 2010 02:36

    At the CodeMash conference this year many things stuck with me, and two have been bugging me enough to do something about them this last weekend.  One was the idea that programmers need to practice and refine their skills, which was probably best described in the ideas of “Code Katas” ala Dave Thomas in the Pragmatic Programmer.  The other was my recent concentration on all-things-Silverlight, specifically looking at the power of the platform and the emerging patters (e.g. MVVM).

    So if I can find an hour or two to “practice my craft” without expecting this will ever result in production code - just for learning – what should I tackle?  It hit me - “Fractals!!!”.  It seems like every computer system and programming environment that I’ve gotten since the late 80s I have seen what I could do with some of the now-classic fractal algorithms. Inspiration for this also came from Corey Hanes great feature summary of another classic, the “Game of Life”.

    This post isn’t intended to be a detailed primer on fractals, and specifically fractals resulting from an “iterated function system” or IFS, but here are the basics.  Many systems in nature exhibit features that look very similar to each other.  That is, leaves on a tree, mountains, crystal structures, cells, snowflakes, etc.  How can we try to simulate these patterns in a simple system to generate complex results.  The IFS routines in these systems are kind of like DNA in a cell.  Each element in the current generation of a system doesn’t know where it came from, but does know how to create the next generation in the system.  How about an example.

    Start with a square. 

    fractal_it1

    The shape you start with really doesn’t matter.  What you end up with is making a “collage” of whatever shape you start with, a square is simple and fills the space nicely (which will be important later).

    Now we need to add some simple transformation rules.  We’ll do a “classic” Serpinski triangle or “gasket”.

    A transformation rule generally has four parts: Scale, Rotation, Translation, and Probability.

    In this case each of the three translations will scale 50% on both axes and have no rotation (0 degrees).

    1. The first will not move at all (i.e. translate (0,0)).
    2. The second will be a full width horizontally away (width, 0). 
    3. The third will be a full width vertically away and a half-width horizontally away (width/2, width)

    fractal_it2

    These then are the simple rules that this system will run by.  Each square in the system will know these rules and know how to apply them to themselves.  So when told to “iterate” each square should execute each rule by creating a clone of itself, and applying the rule to it.  After the iteration, the original square(s) should self-destruct as their short life is now over.

    So what would happen with the next iteration?

    fractal_it3

    And so on and so on.  What if we did this 7 times?

    fractal_it7

    Starts looking far different that you might have expected.

    So how might we start to tackle this in Silverlight?

    Actually, this should be far easier to do in Silverlight than in previous platforms because graphics and transformations are built in to Silverlight “out-of-the-box”.

    So “Iteration 0” will be easy (just a Rectangle).

     <Rectangle Fill="Red" Height="400" Width="400"/>

    Now we could  create a rectangle with half the height, width, and translate it in XAML, but we want to be able to automate this, so perhaps there is a better way.

    <Rectangle Fill="Blue" Height="400" Width="400">
     <Rectangle.RenderTransform>
         <TransformGroup>
             <ScaleTransform ScaleX=".5" ScaleY=".5"/>
             <RotateTransform Angle="0"/>
             <TranslateTransform X="0" Y="0"/>
         </TransformGroup>
     </Rectangle.RenderTransform>
    </Rectangle>

    We can take the original Rectangle and use the RenderTransform to handle all of the scaling, rotating, and translating of the Rectangle.  This works pretty well and is starting to get promising.  What would the other two “rules” look like?

    <Rectangle Fill="LightBlue" Height="400" Width="400">
     <Rectangle.RenderTransform>
         <TransformGroup>
             <ScaleTransform ScaleX=".5" ScaleY=".5"/>
             <RotateTransform Angle="0"/>
             <TranslateTransform X="200" Y="0"/>
         </TransformGroup>
     </Rectangle.RenderTransform>
    </Rectangle>
    
    <Rectangle Fill="AliceBlue"  Height="400" Width="400">
     <Rectangle.RenderTransform>
         <TransformGroup>
             <ScaleTransform ScaleX=".5" ScaleY=".5"/>
             <RotateTransform Angle="0"/>
             <TranslateTransform X="100" Y="200" />
         </TransformGroup>
     </Rectangle.RenderTransform>
    </Rectangle>

    But now we have a problem.  This works well for Iteration 1, but not for subsequent Iterations.  We need to be able to do transformations on top of existing transformations (on top of other existing transformations, etc.).  Rectangle alone will not get us there.

    What is a very simple XAML object that can contain another object? The ContentControl is just such a basic object.  Its basic job is to contain one other object (which itself could contain other objects), and it just so happens to also inherit from UIElement, which means it has RenderTransform as well.  What does this mean.

    It means that we can do something like this …

    <ContentControl>
     <ContentControl.RenderTransform>
         <TransformGroup>
             <ScaleTransform ScaleX=".5" ScaleY=".5"/>
             <RotateTransform Angle="0"/>
             <TranslateTransform X="0" Y="0"/>
         </TransformGroup>
     </ContentControl.RenderTransform>
     <Rectangle Fill="Green" Height="400" Width="400">
         <Rectangle.RenderTransform>
             <TransformGroup>
                 <ScaleTransform ScaleX=".5" ScaleY=".5"/>
                 <RotateTransform Angle="0"/>
                 <TranslateTransform X="0" Y="0"/>
             </TransformGroup>
         </Rectangle.RenderTransform>
     </Rectangle>
    </ContentControl>

    … which, if you look at it, is the first rule in Iteration 2.  That is, apply the first rule to an object that already had the first rule already applied to it.  Now we’ll get a rectangle that is half the size of a half-sized rectangle (25%) and hasn’t rotated or moved from the origin at (0,0).

    [End of Part 1]

    Two more parts to this coming in the next few days:

    Ironically(?) It will end up taking 3-4 times as long to blog this as it actually took to code it, but there is learning in the blogging as well, so more coming soon.

    Evaluating the iPad: Consumer vs. Creator vs. Cross Platform

    by Bruce Abernethy 29. January 2010 05:14

    ipad So there have been a few days since the iPad announcement and it is a lot of what people are talking about right now.  Several people are wanting to be first in line to get one of the new iPads.  Others have a lot of questions and criticisms of the unit that was announced. I looked at my own comments and critiques and I think I know why I was personally underwhelmed.

    First, I am a life-long Apple fan.  I’ve had and Apple ][+, Apple IIe, Apple IIc, Mac SE/30, IIsi, Quadra 610, PowerBook 100 & 170, G3, G4 etc.  I still have a Newton MessagePad 110 at home that I fire up every few years (fooled a few folks that it was a prototype iPhone a while back) and may be one of the few people anywhere that used an eMate 300. I’ve also had one (or more) of the iPods since Generation 2.

    Since the day I got my first Apple][+ I have been programming on computers – you had to back then, there was very little commercial software available for purchase (and no downloads).  I only mention this, because whenever I get a new piece of technology I want to see how I can customize it or extend it by writing some code or “hacking” the unit a little bit (and sometimes have to buy a second unit after irreversibly removing or changing one too many things).  I want my technology to be adaptable and open for me to use in ways perhaps not even intended by the creators.

    Health Care, Education & E-Commerce

    My three biggest types of customers right now are health care, education and e-commerce.  The iPad is great for commerce – perhaps too great.  If you want to sell audio, video, books, or iPad-specific apps, the iPad is a mini-mall full of shopping opportunities from anywhere with connectivity.  The iPad may be  the device with the most potential for generating ongoing revenue of any device in history.  But for health care and education there are some non-trivial issues. 

    First, there are 10+ years worth of software written for health care and education that run on Macintosh and Windows platforms.  None of this software will run on the iPad.  Some educational games like Oregon Trail have updated and rewritten their titles to run on the iPhone, but 99% of the software ever written will not run on the iPad.  This is disappointing.

    I have also not heard of any way to get software on to these devices other than the App Store.  That is a school or hospital IT department can not stage a standard device and replicate it across many units, and I don’t see the ability to enable/restrict the stock iPad software that comes with the unit.  These are important tasks for tech people in both schools and medical facilities.

    Small Macintosh or Large iPod?

    I think my confusion and disappointment with the iPad came because I didn’t know if Apple’s tablet offering was going to be a “Macintosh” or an “iPod”.  That is, would it run the full OS X kernel that would allow Macintosh software to run, or would it be the more limited sub-set that enabled the iPhone.  If it was a tablet Macintosh then I could hack/code it with technologies ranging from the unix tools, Macintosh-specific SDKs, Java, Flash and even Silverlight.  Plus, I could use the tablet itself to create software for the tablet – how cool would that be. 

    Consumer vs. Creator

    But I am not the “average user” intended for this device, which I can understand.  The sad thing is that the apparent target user for the iPad is focused 95% on being a consumer and maybe 5% on being a creator.  If you want to buy music on the iPad you are fine.  If you want to compose or record music then you’ll need another device.  If you want to read a book or magazine you are fine, if you want to write a non-trivial amount of text you will need another device or an awkward docking station.  If you want to use a bunch of other people’s applications that are accepted through the App Store vetting process, then you are fine.  If you want to write your own applications you will need another device.

    Selling to Paying Clients

    My other problem now is explaining these issues to clients who want to create rich applications for their users.  A very typical request from clients is that they want a great user experience and application that will run on Macs, Windows and mobile devices.  It appears that Apple’s philosophy in this area is that there should be a custom version for the iPhone, one for the iPad, one for the Macintosh and (if necessary) one for Windows (and maybe even one for Linux). iPhone apps will run on the iPad in either “mini-mode” or “pixel doubling” neither of which is very compelling. iPad specific apps (e.g. iWork) will probably never run on the iPhone.  If I wrote a great iPhone app, that won’t run on the Mac or Windows.

    So if I want my application to work in multiple environments that is 3-5 completely different applications in almost as many different programming environments and languages.  That is a tough sell to a client – this will take a lot more money and require a lot of different talent on the same project (and don’t get me started on code coverage for testing this variety of solutions).

    Coding Cross-Platform

    I want to be able to code something once, and have it be portable to as many different environments as possible.  In a nutshell, this is why there are many people clamoring for including Flash and Silverlight on the iPhone and iPad.  These are established platforms with tens of thousands of designers and developers who must now create multiple applications in different environments if they want to support the iPad.  There are finally two ways to create rich applications for Mac, Windows and Linux but only one way to create applications for the iPad.  This is why I’d really love to see support for Flash and Silverlight in the future.  Even if Flash and Silverlight were stand-alone applications that you had to get from the App Store, but allowed you to run cross-platform software within them.  By the way I could care less if Safari on the iPad ever supported either as a plugin.

    Unfortunate Choices, But Not “Wrong”

    Finally I want to clear one more thing up. Some people have said that Apple should not be “forced” to open up their iPad operating system to alternate programming platforms – legally or otherwise - and I totally disagree.  People can vote on this with their purchases; if they want to consume their content and entertainment on an iPad, and create it on a separate device, then that is perfectly fine.  That is, Apple’s decisions about the iPad are not “wrong” they are just “unfortunate” for me and the people I am trying to serve and support.

    Tags:

    CodeMash Apps for iPhone

    by Bruce Abernethy 7. January 2010 03:35

    The CodeMash conference is next week – it is a regional “software developer smörgåsbord” covering topics on a wide variety of technologies, patterns and processes.  There are times when all 650ish attendees are together for keynotes and meals, but at other times there are 5-6+ different sessions going on throughout the conference center.

    Traditional methods for getting information to attendees at conferences such as this is a printed program with all the tracks, sessions, speaker info, and location maps with all the rooms that sessions are taking place.  This year, the organizers of CodeMash made available a set of web services using industry standard protocols that included all of this information.  Then they left it up to the CodeMash community to come up with creating great applications to use this data.

    At this time there are apps using many different platforms and technologies, but I wanted to focus on the iPod/iPhone apps (because that is the mobile device that I have) – see the CodeMash main site for more info http://www.codemash.org

    Our team is taking five members to CodeMash this year, so we are getting together today to go over the schedule and decide which sessions we should try to all get to together and which ones we could “divide and conquer”, so I added the 3 iPod applications that I could find today to my Touch.

    threeicons

    The three apps I could find for the iPhone were iCodeMash, MobiMash, and a “CodeMash 2010 Scheduler”.  The first is a web offline HTML application, and the other two are available in the AppStore (search on CodeMash). I was wondering if the offline HTML application would be able to have the same functionality as a “full iPhone application” and I have to say that I was really impressed with how much can be done using the tools available.

    This will really not be a review/recommendation for these applications – they are all free of charge and I will have all of them on my iPod for the conference.  Rather, I wanted to review how the different authors and teams implemented features and see how many things were the same, but some features were innovative and even surprising.  I won’t go application-by-application then, but feature by feature and show how all three were implemented.

    Splash Screen

    IMG_0042 IMG_0043 IMG_0051

    I only mention this “feature” because it was interesting how similar things were, using the same source material.

    Home / Start Screen

    IMG_0035 IMG_0044 IMG_0052

    Other than the obvious different color palettes, this is where the applications (with the same back-end data) start to diverge. 

    The iCodeMash application is very conscious of the “above the fold” region of the different areas of the app.  It is also seems to be written to be used “at” the conference as well as “before” the conference.  It automatically highlights the next session and has a quick-link to your favorites.  Because this is not a full iPhone application, the button bar at the bottom is not used.  iCodeMash approaches the schedule from primarily a day/time standpoint.  The “next step” from this start screen would be to go view the next session, list of favorites, or review the schedule by day/time.

    MobiMash starts with a news feed from CodeMash which is updated regularly.  This may be updated during the conference as well, so this would be a good way to get late-breaking news at the top-level of the application.  From this screen, you can view a list of all of the sessions, review those you have tagged as favorites, see a map of the venue.  The More button reveals access to Speaker info, a Twitter feed of the #CodeMash hashtag (nice feature) as well as a “Right Now” and “Next” functionality which will be functional in the future.

    The Scheduler application starts with a menu featuring links to sessions, but adds the ability to filter by Level and Track which may be helpful in finding topics that are attendee-appropriate.  The button bar provides a “My Sessions” button that displays sessions that have been added to your favorites, and a News button which shows the CodeMash news feed.

    Pick Sessions

    IMG_0036 IMG_0037 IMG_0038

    iCodeMash approaches the sessions from a day/time standpoint.  You need to pick a day (Thursday or Friday) and then you will see a list of all the titles of sessions at that time.  If you pick a session title, then you will see the details for that session.  If you select the “star” symbol on the description then this one will become a selection/favorite (very much like many Google apps use).  Also in the description is a link to the room that this session is taking place in, with the specific room highlighted with a blue dot.  This is a nice feature for when moving between sessions at the conference.  I could not find a way to filter by level or track or access the speaker/bio information.

    IMG_0045 IMG_0046

    MobiMash provides a complete list of all the sessions.  The session abstract is included as well as the location and level of the session.  The speaker’s name is a hyperlink to the speaker/bio information.  A hyperlink by the session title enables you to add/remove the session from your list of favorites.  This screen feels and works much like a web page.  At the bottom of the session description is a unique feature to rate the session if you have attended it.  I am not sure where this information surfaces, but it takes the application into the feedback/recap part of the process

    IMG_0053 IMG_0056

    Scheduler provides either a complete list or a filtered list (level/track) of the sessions.  From the formatted description you can access the speaker/bio information or Add the session to your My Sessions list.

    Review / Track Your Selections

    Viewing the list of sessions and their descriptions is a great feature (and would really be “enough” for any of these to be useful at the conference), but all add the ability to tag sessions you are interested in attending and review those selections later.

    IMG_0040 IMG_0047 IMG_0057

    iCodeMash continues to provide data in a day/time format in reviewing your session Favorites.  This is most helpful in this view as this is probably how you will be using the data at the conference.

    MobiMash and Scheduler provide a list of those items you have selected; MobiMash gives them to you, I believe, in the order you selected them, while Scheduler sorts them by day/time ascending and includes the times in the list.

    Additional Features

    All three apps do a good job of implementing the “big 3” for conference sessions: finding, tagging, and reviewing.  I would expect anyone at CodeMash with an iPhone/Touch to take advantage of one or more of these.  Beyond these features were a few unexpected bonuses.

    IMG_0039 IMG_0048

    Maps – iCodeMash and MobiMash both a venue map of the Kalahari conference center.  MobiMash enables this on the button bar at the bottom. iCodeMash includes a link from the session description.  iCodeMash goes one step more and includes a little blue dot highlighting the room that the selected session which is very thoughtful.

    IMG_0050

    Twitter – MobiMash includes a current sampling of Twitter postings using the #CodeMash hashtag.  This is also quite cool and may be the way to find the most current info from the cloud at the Conference

    Ideas While Reviewing

    This is the first year that CodeMash has made the conference data available for public consumption as web services.  I have to say that all of these developers and groups have done a real service in pulling these applications together.  I hope this is the first of many years that CodeMash, and other conferences, will offer information like this for applications.

    I couldn’t help but think of what the next-generation applications might try to take on in future releases – what might be the most useful and interesting things to add?

    Additional Mashups – Twitter, Blog, LinkedIn, Google Group, Facebook, etc.

    I liked what MobiMash started with the integration of Twitter feeds with the #CodeMash hashtag.  Why not extend this and include links from the speaker/bio information to their personal Twitter feeds (can learn a lot about someone from their feed).  Why stop there?  Integrate an RSS/Atom feed from their blog into the application as well.  Basic information from LinkedIn might also be useful.  In addition to bringing in the news feed from CodeMash, why not also include a summary feed from the Google Group where interesting conversations and threads are taking place.

    Backchannel – During the Sessions/Conference

    The Twitter feeds are a good start of this, but wouldn’t it be nice if there was a place where people could post comments, ideas, questions, etc. that were session-specific?  Speakers could get an idea of how their audience is responding, and people outside the session could get an idea of what happened in the session or even if they should gracefully exit their session and join an ongoing discussion.

    Followup – After

    Many/most speakers who have PowerPoint decks or code samples as part of their session will create a blog post and attach these resources to the post.  Comments on these posts can serve to give the speaker feedback and continue the conversation.  MobiMash had the idea of a 5-star rating system for sessions that you attended – this is a start.  But if the applications could contain access to follow-up posts and comments from the session then they would have value even after the conference was over.

    Framework

    And then you end up saying “If this can be done for CodeMash, couldn’t there be a framework or platform that could be used at the 1000s of conferences that go on every year?”  Wouldn’t it be cool if a standard schema could be agreed on for sessions, speakers, venues, news, etc. that the major conferences, even just technology conferences, could all use so that all the work these developers have put into these apps could “pay if forward” and be used beneficially in the future.

    In summary, great job to all the developers – Jonathan Penn (http://wavethenavel.com) for iCodeMash, SRT Solutions with Jay Wren (http://jrwren.wrenfam.com/blog/ http://mobimash.org ) for MobiMash, and QuickSolutions (http://www.quicksolutions.com) for CodeMash iPhone Scheduler.  Thanks for creating great resources and inspiring others with your implementations.

    Connected / Disconnected

    All applications were tested online and offline – all worked well offline which is key since WiFi is iffy at big conferences.

    UPDATE: updated some details, MobiMash author Jay Wren

    Tags:

    What I Learned at the Silverlight Partner Summit 2009

    by Bruce Abernethy 16. December 2009 07:24

    Last Thursday and Friday I attended the Microsoft Silverlight Partner Summit.  This is our second year as a Silverlight Partner, but our first time attending the summit, and it was well worth the trip to Redmond.  I am still really processing all that was announced for Silverlight 4 this month, and the additional content from the summit, but I wanted to get a few things down here while it is current.  There are some things learned at the conference that I can’t post here quite yet, but the vast majority of important details have been recently announced publically, and more is coming very soon.

    1) Community is Critical for Continuous Growth and Progress

    Events like the summit just reinforce my belief that the only real and lasting way to learn new skills or technologies is within a community of people who are also learning and creating new projects. The ability to toss ideas off of other people, make discoveries and solve problems together – this is huge. It was great to be in a group where you could hear something and look at another attendee and say something like “That is about as useful as an ‘AG_E_UNKNOWN_ERROR’” and have a quick laugh without the other person looking at you like you are out of your mind (and if you don’t understand the Silverlight reference, insert your own “private joke” here and move on).

    The community I’ve had while learning Silverlight has really just been the handful of people on our development team and those Twitter contacts who are working on similar things.  I got to talk to a bunch of people who are also “in the boat” at the summit and made a few lasting contacts that I look forward to staying in touch with.  I am also trying to get a group together in our area who are doing Silverlight (or starting to) – if you are interested let me know.  Even a small group meeting informally would be really nice to get started.

    2) Silverlight Video is Something I Have Underutilized – This Needs to Change

    Video was the premiere feature of Silverlight 1 and has only grown in features and power since then.  I have spent the majority of my time developing for Silverlight creating business line-of-business (LOB) applications (e.g. data forms, grids, charts, etc.) and not “entertainment” applications (e.g. audio, video, animation).

    Seeing what some of the partners have done with the Olympics, NFL, Netflix, etc. is amazing, and on a scale that our customers and applications do not approach.  But I also talked with people who’s companies are working with corporate and educational video management and distribution software for learning and training.  This just makes sense, and is so easy to do now with Silverlight.  If you are going to include a “help” or “about” section in a LOB application, why not include a short video and/or screencast illustrating the point instead of just describing it in text and maybe a few screenshots.  Something to think about and implement as soon as I can.

    3) Scott Gu is the Real Deal

    There were, of course, many people from Microsoft at the summit. I was really impressed with the attitude and approachability of all of them that I listened to and interacted with.  There was a lot of interest and excitement from the attendees of the summit, but what surprised me was the interest and excitement from the Microsoft staff as well.  As interested as we were in hearing about upcoming technologies, strategies, best practices and key projects using Silverlight, the Microsoft people were very interested to hear what people were using the tools for and what we needed and wanted from the platform going forward.  So in the same way that we were reenergized by what we were hearing and seeing, the Microsoft folks seem reenergized to hear about all the cool, innovative and unexpected things were doing with the tools they were creating.

    I guess I have been to so many canned and half-hearted presentations in my life, that I had really lowered my expectations in a way.  I highlighted Scott Guthrie in the title of this section, but this really goes for all of the Microsoft people who we interacted with.  Scott, though, had a few aspects that were, in my mind, even over top of all the rest.  First, he missed the first day of the summit and the keynote because his plane from Paris was stopped, held and searched by authorities which caused connection problems down the line.  But the point is he not only came back from a whirlwind tour of European countries, but scheduled a “Scott Gu Unplugged” session at the beginning of the second day moving our agenda start up an hour.  In this session he opened Notepad and took any and all questions from the group, and answered every one of them – several that I didn’t expect him to answer – and was open and honest about issues and plans going forward.

    4) Silverlight 4 and SharePoint 2010 Will Be a LOB Powerhouse

    I was really surprised when Silverlight 4 was not only demoed at the Professional Developers Conference (PDC) a few weeks ago, but a full-blown beta was released.  This followed the beta release of SharePoint 2010 and Office 2010 in November.  If you haven’t read about the new features in Silverlight 4, go read through one of the great write-ups (like Tim Heuer’s and samples from Karen Corby) and then come back – ok, now consider some of the back-end enterprise power of SharePoint 2010.  Both Silverlight 4 and SharePoint 2010 will be powerful alone – taken together they combine to provide unprecedented power for Rich Enterprise Applications (REAs?).  All the rich user interface tools and potential combined with security, workflow, services, and Office integration will enable some really useful applications – especially if you leverage the Silverlight 4 COM support.

    One thing I took away from the first day of the summit was something I guess I knew but really didn’t “get”.  In talking to some of the “big name” customers/developers at the summit, I realized that these big companies had teams using every conceivable technology platform out there including Flash/Flex/AIR, Java FX, and even a few others.  They were not using Silverlight just because it was from Microsoft - they were using Silverlight for new projects because it was simply the best platform currently available for what they need to get done.  For one of them they evaluated Silverlight 2 and decided quickly against it.  Silverlight 3 was significantly improved and they started some initial prototypes and projects with it.  Now with the feature set of Silverlight 4 in preview, and soon to be released to the public, there is a platform that is a generation ahead in many areas.  Beyond this, it sounds like the development team isn’t slowing down with implementing key features even after Silverlight 4 and the mobile/device announcement coming at MIX’10.

    5) Great Tools Make Great Things Possible

    It is one thing to have a great platform with a lot of power and features.  It is quite another thing to have a full-featured set of tools that enable teams to build and test complex applications.  Visual Studio has been the industry standard for developer productivity for years.  With Visual Studio 2010 and Blend 3 (with SketchFlow) the bar has been raised again.  If you spend days in Visual Studio now doing development, you should try out some other toolsets sometime to just realize how lucky you really are – if you don’t use Visual Studio you might not want to check it out unless you are able to switch.  I know that I have grown to rely on a unified toolset that lets me develop everything from the browser, through the services to the database and back again – in one tool.  Those who are working in other environments face a daunting task of development and testing.

    Tags:

    RecentComments

    Comment RSS
    Disclaimer
    The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

    © Copyright 2010 Bruce's Blog