We’re Expecting!

Thursday, December 22nd, 2011

A boy? A girl? Nope. We are soon to be the proud parents of our very own in-studio game and graphics engine! I know, we're excited too.

Late last fall we began the beautiful process of creating an engine that not only suits our needs perfectly, but by default can efficiently deliver unparalleled digital experiences to our clients.  Currently the engine has been codenamed Skroob, because if you were going to spend countless hours working on a project, wouldn’t you want to be picturing Mel Brooks with a smarmy mustache?

So what does this mean for you and your brand? Well, now we can free up more of our resources for thinking up art and storylines that make your projects really pop. Our creations are being used across browsers and devices so we want to be sure that your customers have access to your custom digital assets no matter where they are or how they experience media.

Here’s the lowdown on the features:

Our JavaScript based 2D engine is perfect for creating the branded experiences you are looking for that can be launched as social media applications, stand-alone games, animations or even show-stopping graphics for your new website. The engine leverages current features of all major browsers and even supports GPU accelerated canvas…say what? Yah, that means the killer looking graphics we design for your brand will look awesome, load faster and do some really cool things thanks to HTML5. Using a component-oriented game object model we can quickly try out new things and reuse stuff which means you save money. The game engine is data driven which supports rapid prototyping without changing game code. Graphics are loaded at run-time using our own resource management system and we are darn good at managing resources.

We have chosen a select group of people to try out our in-house demo that was rebuilt from the ground up (save the art and storyline) using the Skroob Engine and hope to complete the build shortly after we receive some feedback on the demo prototype. We look forward to officially announcing the arrival of this mega-multitasking tool in early 2012 but most of all we look forward to helping you engage your customers even more efficiently and effectively than before. We’ll keep you posted!

Author: Nikki
  • Tags:
  • uncategorized

Our Team is Looking for a Front-End (Web) Developer

Thursday, September 8th, 2011

Plexipixel is a full-service, award-winning interactive agency specializing in consumer-driven, digital experiences across multiple platforms that utilize what we call “Sticky Brand Play”. We employ hard-working, fun loving, slightly crazy characters whom we house in a studio on Lower Queen Anne located amongst a plethora of dining options, music stores and tons of cultural stuff. Our folks work collaboratively in an open studio environment. So you will have to be okay with the occasional bad joke and music being played almost as loud as the bar downstairs.

We are currently looking for contract as well as full time candidates. If you think you have what it takes to become a co-conspirator in our dev team please submit a resume and cover letter or brief introduction via email. Please no phone calls or surprise visits to the office (yes, this has happened).

Essential Duties and Responsibilities:

  • Assist Developers with planning and development of interactive projects from start to finish
  • Work with Designers and Animators on asset preparation to ensure that creative intent and results are achieved
  • Research code/technique for applications, test/debug applications, assist in quality assurance testing
  • Integrate design assets and build the application
  • Follow creative briefs and functional specifications
  • Participate in daily team meetings, update your lead with project progress and any potential roadblocks/risks that may come up
  • Exercise quality control in all aspects of development maintaining high coding standards and practices

Qualifications:

  • Associate’s degree or equivalent from two-year college or technical school; and one year related experience and/or training; or equivalent combination or education and experience
  • 2+ years of web development experience, must have successfully created an application or interactive website
  • Working knowledge of Object Oriented Design and Programming
  • Working experience with the following web languages: HTML, JavaScript, CSS, XHTML, PHP, and ASP
  • Basic understanding of HTML5 and CSS3
  • Experience with C#, C++, ASP.NET, XAML, and/or SML
  • Working experience with the usual Microsoft Office products (Outlook, Excel, Word)
  • Ability to work under tight time constraints and within established deadlines, while handling multiple jobs/projects
  • Experience working with source control and bug tracking (in Subversion and Trac preferably)
  • Have the desire to push technology to its limits and be a tech-buff at heart

The "Musts":

  • Be a team player
  • Be self-managed, motivated and thrive on multi-tasking while remaining calm in stressful situations
  • Have excellent verbal and written communication skills and ability to talk effectively with people at all levels of the organization
  • Have excellent attention to detail but also know the fine art of prioritizing and when to let something go
  • Have strong problem-solving and crisis-management skills
  • Willingness to research “unknowns” and try out new skills
  • Have no shame about raising questions or asking for assistace figuring out the best approach for a project
  • Have the ability to handle multiple projects at once and be able to balance time & communication appropriately
  • Have the ability to find the answers to help facilitate any need beyond the basic level of knowledge
  • Should have a sense of humor and love of the silly

Who We Are:

We are a tight-knit team that offers our employees excellent creative freedom and growth potential. Plexipixel was voted finalist for NWjob’s Favorite Creative Company in 2010 as well as finalist for Small Company - Most Unusual Perk(s).

Author: justinn

Join Our Team! Plexipixel is Looking for a Web Developer

Friday, May 20th, 2011


Plexipixel is a full-service, award-winning interactive agency specializing in consumer-driven, digital experiences across multiple platforms that utilize what we call “Sticky Brand Play”. We're proud of our work environment and employ fun loving, slightly crazy characters whom we house in a studio on Lower Queen Anne located amongst a plethora of dining options, music stores and tons of cultural stuff. There’s no strict dress code and we play music just as loud as the bar downstairs.

What does it take to become a member of our wacky team you ask? Be passionate about learning and have a natural curiosity for the unknown.

Essential Duties and Responsibilities:

  • Assist with planning and development of interactive projects from start to finish
  • Work with Designers on asset preparation to ensure that creative intent and results are achieved
  • Research code/technique for applications, test/debug applications, assist in quality assurance testing
  • Follow creative briefs and functional specifications
  • Participate in daily team meetings, update your lead with project progress and any potential roadblocks/risks that may come up
  • Exercise quality control in all aspects of development maintaining high coding standards and practices

Qualifications:

  • 1+ years of web development experience
  • Must have a solid foundation in coding logic and have explored at least one if not more programming language while successfully creating an application or website
  • Prior experience with PHP, ASP.NET, JavaScript, XML, XHTML, CSS
  • Working knowledge of Object Oriented Design and Programming
  • Working experience with the usual Microsoft Office products (Outlook, Excel, Word)
  • Ability to work under tight time constraints and within established deadlines, while handling multiple jobs/projects

Bonus Skills:

  • Flash
  • Silverlight
  • C#
  • XAML
  • HTML5
  • Experience with game or application development
  • Physics and math background
  • Experience working with source control and bug tracking (in Subversion and Trac preferably)

The "Musts":

  • Be a self-managed, team player who is motivated and able to prioritize tasks
  • Excellent written and verbal communication skills and ability to talk effectively with people at all levels of the organization
  • High attention to detail but also know the fine art of prioritizing and when to let something go
  • Remain calm in stressful situations
  • Strong problem-solving and crisis-management skills
  • Be eager to learn and teach
  • Have the ability to handle multiple projects at once and be able to balance time & communication appropriately
  • Have the ability to find the answers to help facilitate any need beyond the basic level of knowledge
  • Should have a sense of humor and love of the silly

Who We Are:
We are a tight-knit team that offers our employees excellent creative freedom and growth potential. Plexipixel was voted finalist for NWjob’s Favorite Creative Company in 2010 as well as finalist for Small Company - Most Unusual Perk(s).

To Apply:
Individuals looking for a contract position and those looking for full time employment are encouraged to apply. Please submit a cover letter and resume via email to pickme-at-plexipixel.com. No phone calls or surprise visits to our office.

Author: vicky
  • Tags:
  • uncategorized

Join Our Team! Plexipixel is Looking for a RIA Developer

Monday, April 4th, 2011

Plexipixel is a full-service, award-winning interactive agency specializing in consumer-driven, digital experiences across multiple platforms that utilize what we call “Sticky Brand Play”. We're proud of our work environment and employ fun loving, slightly crazy characters whom we house in a studio on Lower Queen Anne located amongst a plethora of dining, options, music stores and tons of cultural stuff. There’s no strict dress code and we play music just as loud as the bar downstairs.

What does it take to become a member of our wacky team you ask? Be passionate about learning and have a natural curiosity for the unknown.

Essential Duties and Responsibilities:

  • Assist other Developers with planning and development of interactive projects from start to finish
  • Work with Designers and Animators on asset preparation
  • Working knowledge of Object Oriented Design and Programming
  • Integrate design assets when building applications
  • Work closely with Art Directors and Designers to ensure that creative intent and results are achieved at the highest level
  • Research code/technique for applications, test/debug applications, assist in quality assurance testing
  • Follow creative briefs and functional specifications
  • Participate in meetings and communicate about the applications with all stakeholders
  • Participate in daily team meetings, update your lead with project progress and any potential roadblocks/risks that may come up
  • Maintain high coding standards and practices and exercise quality control on all aspects of development

Qualifications:

  • Associate’s degree or equivalent from two-year college or technical school; and 2 years related experience and/or training; or equivalent combination of education and experience
  • Must have a solid foundation in coding logic and have explored at least one if not more programming language while successfully creating an application or interactive website
  • Experience with ASP.NET, PHP, JavaScript, XAML, XML, XHTML
  • Awareness of: SCRUM, software architecture best practices, waterfall development, and agile development
  • Working experience with the usual Microsoft Office products (Outlook, Excel, Word)
  • Experience working with source control and bug tracking (in Subversion and Trac preferably)
  • Ability to work under tight time constraints and within established deadlines

Bonus Skills:

  • Experience with Silverlight, C# or Flash
  • Strong physics and math background
  • Experience with game development

The "Musts":

  • Be a team player
  • Be self managed, motivated and able to prioritize your tasks
  • Have excellent written and verbal communication skills and ability to talk effectively with people at all levels of the organization
  • Have excellent attention to detail but also know the fine art of prioritizing and when to let something go
  • Have the ability to remain calm in stressful situations
  • Have strong problem-solving and crisis-management skills
  • Thrive on multi-tasking
  • Be eager to learn and teach
  • Have the ability to handle multiple projects at once and be able to balance time & communication appropriately
  • Have the ability to find the answers to help facilitate any need beyond the basic level of knowledge
  • Should have a sense of humor and love of the silly

Who We Are:

We are a tight-knit team that offers our employees excellent creative freedom and growth potential. Plexipixel was voted finalist for NWjob’s Favorite Creative Company in 2010 as well as finalist for Small Company - Most Unusual Perk(s).

To Apply:

Please submit a cover letter and resume to pickme@plexipixel.com. No phone calls or surprise visits to our office.

Author: justinn

Join Our Team! Plexipixel is Hiring an Entry-Level Web Developer

Thursday, March 31st, 2011

Plexipixel is a full-service, award-winning interactive agency specializing in consumer-driven, digital experiences across multiple platforms that utilize what we call “Sticky Brand Play”. We're proud of our work environment and employ fun loving, slightly crazy characters whom we house in a studio on Lower Queen Anne located amongst a plethora of dining options, music stores and tons of cultural stuff. There’s no strict dress code and we play music just as loud as the bar downstairs.

What does it take to become a member of our wacky team you ask? Be passionate about learning and have a natural curiosity for the unknown.

Essential Duties and Responsibilities:

  • Assist Developers with planning and development of interactive projects from start to finish
  • Work with Designers and Animators on asset preparation to ensure that creative intent and results are achieved
  • Research code/technique for applications, test/debug applications, assist in quality assurance testing
  • Follow creative briefs and functional specifications
  • Participate in daily team meetings, update your lead with project progress and any potential roadblocks/risks that may come up
  • Exercise quality control in all aspects of development maintaining high coding standards and practices

Qualifications:

  • 1+ years of web development experience
  •  Experience with ASP.NET, PHP, JavaScript, XML, XHTML, CSS
  • Must have a solid foundation in coding logic and have explored at least one if not more programming language while successfully creating an application or website
  • Working knowledge of Object Oriented Design and Programming
  • Working experience with the usual Microsoft Office products (Outlook, Excel, Word)
  • Ability to work under tight time constraints and within established deadlines, while handling multiple jobs/projects
  • Experience working with source control and bug tracking (in Subversion and Trac preferably)

Bonus Skills:

  • Flash
  • Silverlight
  • C#
  • XAML
  • HTML5
  • Experience with game or application development
  • Strong physics and math background, a plus

The "Musts":

  • Be a team player
  • Be self managed, motivated and able to prioritize your tasks
  • Have excellent written and verbal communication skills and ability to talk effectively with people at all levels of the organization
  • Have excellent attention to detail but also know the fine art of prioritizing and when to let something go
  • Have the ability to remain calm in stressful situations
  • Have strong problem-solving and crisis-management skills
  • Thrive on multi-tasking
  • Be eager to learn and teach
  • Have the ability to handle multiple projects at once and be able to balance time & communication appropriately
  • Have the ability to find the answers to help facilitate any need beyond the basic level of knowledge
  • Should have a sense of humor and love of the silly

Who We Are:
We are a tight-knit team that offers our employees excellent creative freedom and growth potential. Plexipixel was voted finalist for NWjob’s Favorite Creative Company in 2010 as well as finalist for Small Company - Most Unusual Perk(s).

To Apply:
Please submit a cover letter and resume to pickme@plexipixel.com. No phone calls or surprise visits to our office.

Author: justinn

Plexipixel.com Reboot: Development

Tuesday, February 15th, 2011

We here at Plexipixel just recently launched a totally redesigned version of our website, rebuilt from the ground up.  Our old site, while lovely in its day, was definitely showing its age and was long overdue for an upgrade.  It’s not that we weren’t aware that our site had become a little stale over the years, but when you’re as busy as we have been and you have to budget your time, the internal projects always take a back seat to those with a much more immediate impact on keeping the lights on (see MSN Games Preview and Unite).

What was lacking from our old site?

Among the most common grumbles heard in the studio was the fact that the site was primarily comprised of a single ~800 pixel wide Flash object (.swf) that felt very constraining in a world where many users, even at home, now have widescreen monitors spanning 1680 pixels wide and beyond—not to mention the ever expanding number of platforms and their accompanying displays.

Plexi site v2.2, RIP

Plexi site v2.2, RIP

Having a site built in Flash means that all of your content and text is either hard-coded within the .fla or in an external source such as XML that is imported dynamically at runtime.  In our case, we tried to keep all of our content external for the sake of flexibility.  When the site was first architected, there was a single XML file that contained the navigation and project data.  As time went on, we needed to add more and more types of data to the content XML, which eventually led to us splitting navigation, news, and project content into separate files.  It wasn’t a perfect solution, but it worked.

The boxy constraints of Flash weren’t the only features we were hoping to improve.  Our user experience and navigation through the site needed to be made simpler and the cryptic process of updating the site needed a complete overhaul, too—a project manager shouldn’t need to enlist a developer just to make simple site updates, right?

What did we need from the new site?

We needed…

  1. User account management.
  2. To drastically simplify the way in which we were adding and updating content.
  3. To be able to categorize that content within one of five “buckets.”
  4. A templating system with plenty of flexibility so our site wouldn’t look like an “out of the box” $50 website.
  5. Easy syndication of our blog posts and automatically pushing new blog posts to our Facebook page.

Could we have built all of these features from scratch?  Sure.

In light of the fact that there were already quite a few great open source content management systems (CMS) out there that did all of this heavy lifting already, would it have been a good use of our time?  Not really.

We needed a CMS.

Which CMS did we choose?

We were already using WordPress to power two blogs on the site: our primary blog and LineFeed, our developer blog (which has now been integrated into our main blog).  We’d also had prior experience using WordPress as a CMS for a couple client projects we’d worked on, so we felt pretty comfortable creating custom themes and manipulating “The Loop,” the beating heart of the WordPress anatomy.

How did we organize content?

After a long and sometimes painful strategizing phase, we came up with a plan for the new site that allowed reuse of small content modules (posts) throughout different areas of the site in a way that creates a custom view of our content based on the path the user takes through the site.  We would tag our content with one of five bucket tags that correspond to the way we approach a project:  Strategize, Conceptualize, Execute, Measure, and Maintain.  Then through a series of custom queries on different pages we could either include or omit posts to build the different sections of our sites.  We also created a handful of pages for content that didn’t really fit in as a tagged post, e.g., The Team page and all of our Case Study pages.

Additional features

  • Image attachments
    By attaching images to posts/pages with a certain naming convention, we were able to add some PHP to our case study template that displays screenshots of the current case study and thumbnails in our Related Projects sidebar.
  • Custom meta boxes
    We took advantage of WordPress’ ability to create custom meta boxes to allow the content editor to associate additional content with a case study page like sidebar quotes, portfolio launch URLs, and related projects.
  • Modifying existing plug-ins
    We used a handy plug-in called RB Internal Links that gives users a content picker for linking to other pages and posts within the site (something that seems like it should be a core WordPress feature, right?).   By hacking apart the plug-in a bit, we were able to use the content picker popup functionality of the plug-in to allow users in the dashboard to pick related projects and content from a list of post/page titles.

Plexipixel.com v4.0?

While we’re very happy with the new site, being a digital media agency we are always eyeballing the latest web technologies and are already thinking of ways to beef up the site!  HTML5?  CSS3?  Lasers?  Unicorns?  Laser Unicorns!?  The possibilities are endless!  Stay tuned…

Author: Jesse Rinehart

Keeping an Eye on Silverlight Adoption

Tuesday, April 14th, 2009

We recently launched a cool adaptation of RPS-101 on Facebook.  It's built in Silverlight and it's loads of fun turning up some pretty funny results.  Of course when you get an app out into the wild it's nice to know what's going on with it.

Overview of Silverlight tracking features

Our custom tracking tool was integrated into the app with our new feature set.  The new features include graphs, user-agent details, and a custom gameplay stats module.  But we decided to go one-up on those features and build a custom Silverlight suite to track penetration and new installs.

There's some contention about Scott Guthrie's "one in four" so the first number we're after is penetration before they come to our app.  The second number is "what happens next" - when presented with the prompt to install Silverlight are users likely to take action and install it?

Tim Sneath detailed the Silverlight install experience guidelines in his blog.  It outlines the best-practices around the install experience.  It appears from the documentation that it's possible for a seamless installation experience inside of Internet Explorer but most browsers require a restart after the plug-in is installed.

Unfortunately it's a little outdated (Oct 2007) and fails to detect Silverlight correctly in non-IE browsers breaking the code around their seamless experience for everyone else.  The premise is simple, though, prompt the user for a download and then set a timeout to repeatedly check for plug-in availability.  When it comes online replace the <div> contents with the Silverlight object tag.

So we did some research around the install experience and used a simplified check to see if the browser has Silverlight 2.0 available:

function isSilverlightInstalled()
{
   var isSilverlightInstalled = false;

   try {
      try {
         var slControl = new ActiveXObject('AgControl.AgControl');
         isSilverlightInstalled = true;
      }
      catch (e) {
         if ( navigator.plugins["Silverlight Plug-In"] ) {
            isSilverlightInstalled = true;
         }
      }
   }
   catch (e) { }

   return isSilverlightInstalled;
};

This simple function (from the JavaScript files in the experience guidelines) worked for us.  Whenever the client hits the Silverlight page the JavaScript simply posts back the availability of the Silverlight client.  Because our Dormouse platform seamlessly handles stateful users we're able to keep track of install statistics and adoption across sessions.


$(document).ready(function () {
   if ( !isSilverlightInstalled() ) {
      postBackSilverlight(0);
   } else {
      postBackSilverlight(1);
   }
});

function postBackSilverlight(installed_val) {
   var restURL = getRootIFrame() + "/postBackSilverlight";

   $.get(
           restURL,
         {
            installed: installed_val,
            nt: theTime.getTime()
         },
         function(data){}
      );
}

The stateful user on the Dormouse platform keeps track of Silverlight installation status.  If it's the first time Silverlight status has even been posted back then we post a message to our Zabra REST service indicating pre-install conditions and save the information on the User objects.  When these are summed up we get "Pre-App Silverlight Penetration" statistics.

If a user has doesn't have Silverlight they'll take one of two actions - install Silverlight and come back or bounce from the app and not return.  Whenever a user comes back to the app with the plug-in newly installed we post a new message to Zabra "SilverlightInstalledAfterApp" which tells us that someone installed Silverlight and came back.  The difference between the total Users who are "Not Installed" and "Installed After App" users will leave us with our bounce number.

This works great on our Zabra system and seamlessly integrates into our Dormouse platform. Want to implement it yourself?  All you need is a way to track user data across a few sessions.  You might store their Silverlight status in a cookie, SharedObject, PHP session, or CMS system.  Here's some pseudocode to keep track of Silverlight installs:


postBackSilverlight(user, silverlightinstalled) {
   if(user.silverlightinstalled has been set) {
      if(user.silverlightinstalled equals false) {
         if(silverlightinstalled equals true) {
            statistics.post("new silverlight install");
         }
      }
   } else {
      if(silverlightinstalled) {
         statistics.post("silverlight installed before app");
      } else {
         statistics.post("silverlight not installed before app");
      }
   }
}

We've passed these into some nice charts that let our clients keep tabs on user adoption both before their app and after hitting the installation user experience.  Hopefully Silverlight will hit a critical mass where adoption is no longer a concern.  For now we're all keeping our eyes on the future of a really promising technology.

Author: andyj

Super Useful Actionscript Waiting Class

Wednesday, March 4th, 2009

Have you ever had the need to make a line of code wait a second before executing? How did you go about trying to make that happen? Well, I for one did a Google search and came up with something using setInterval (AS 2.0), or using setTimeout (AS 3.0). Either solution will work, and probably looked something like this:


var wait1 = setTimeout(callback1, 3000);

function callback1():void {
	trace("Wait 1");
};

The code above told Flash to wait three seconds before calling callback1, which traces "Wait 1". So, what if you needed to make two lines, or two blocks, or multiple blocks of code, you might have something that looked like this:


var wait1 = setTimeout(callback1, 1000);

function callback1():void {
	trace("Wait 1");
};

var wait2 = setTimeout(callback2, 2000);

function callback2():void {
	trace("Wait 2");
};

var wait3 = setTimeout(callback3, 3000);

function callback3():void {
	trace("Wait 3");
};

Notice you have to manually add up the time delay to get the individual callbacks to fire at the right time. So, it'd be a great inconvenience if you needed to adjust the delay for wait 1, since you'll need to adjust the wait time for wait 2 and 3 as well. Plus, it's a hideous looking block of code. So, out of the goodness of our hearts, and for the benefit of all developerkind, we, Plexipixel, are going to make public one of the most useful utilities in our library, our Script class.

(Okay, it's not really for the benefit of mankind, or out of the goodness of our hearts, it's more like we wanted to drive some web traffic to our blog. So, thanks for visiting! Now, buy something, thank you.)

You can download the source code with examples here. The following code will do that same thing as the code above:


var cs:Script = new Script;

cs.call(this, function() {
	trace("Start Script");
});

cs.wait(1.0);

cs.call(this, function () {
	trace("Wait 1");
});

cs.wait(1.0);

cs.call(this, function() {
	trace("Wait 2");
});

cs.wait(1.0);

cs.call(this, function() {
	trace("Wait 3");
});

cs.start();

Besides being easier to read, you don't have to add up time. For space constraints I won't reprint the Script class itself here, but I will run through how to use it.

After you've imported the Script class and instantiated a Script object, you use wait, to add a wait, it takes time in seconds, so, half second would be 0.5. Use call to call a function. call takes two parameters, the first tells Script the scope of the function to be called. The second parameter is the function to call, in the example above I used an inline function. To call a function do the following:


var cs:Script = new Script;

cs.call(this, testFunction1);

cs.start();

function testFunction1():void {
	trace("testFunction1 called");
}

So, what if you wanted the your application to wait for an indefinite time, like waiting for a MovieClipLoader to load something? We have that covered too:


var cs:Script = new Script;

var i:Number = 0;

cs.call(this, function() {
	trace("i " + i);
	i++;

	if (i < 10) return false;
	trace("Done");
});

cs.start();

If you manually include a return false in your application it'll force the Script class to loop indefinitely, until you stop sending false, or send it a true.

Anyway, we hope you find this little utility helpful in your Actionscript endeavors.

Allen is a Flash Developer here at Plexipixel. When not hard at work, he enjoys long walks on the beach (no, not really), and journaling by the fireside (definitely not).

Author: allen

Loading Fun

Thursday, February 19th, 2009

We were in need of a demo reel while the real one is being worked on, the closest thing we had was a slideshow that was part of a booth display, it was done in a hurry, with the intent of being shown on a local computer, and not over the web, composed of a player SWF externally loading multiple SWFs, varying between 40KB and 5MB, and of varying run time, totaling 35MB. To get it running smoothly for the web was going to be a challenge without completely redoing it.

To get the show on the web quickly, we first looked into converting the slideshow into either a FLV or QuickTime movie, to take advantage of the built in streaming abilities of the respective players. Even though the resulting movie ended up being smaller, the picture quality was unacceptable. The next step was to look into optimizing the player for web playback.

As a slideshow, there shouldn’t be any breaks in between the different SWFs, but with the player in it’s current state, the next SWF doesn’t get loaded until it is needed, which works in a local environment since loading a SWF is nearly instantaneous off a hard drive, but over the net, to say there’s a delay is an understatement. It’s obvious some sort of loader is needed.

We started with a simple loader that basically loads one SWF ahead of the currently playing SWF, it worked well enough for small SWFs, but when we hit the megabyters (SWFs of 1+ megabyte in size), we simply ran out of time before the next one is done loading. There were also instances where the next SWF is small and the current SWF is long in time, so we ended up with a lot of wasted time. So, we decided to get fancy and created what we’d like to call an “idle loader”.

The “idle loader” basically takes advantage of the Flash cache by loading additional SWF off stage whenever the next SWF is done loading and the current SWF is still playing, the “idle” part of “idle loader”. This loading scheme worked mostly, but had problems when multiple megabyters are queued up in a row. And code-wise, it felt needlessly complex, trying to balance what’s off-stage, dumping it, and loading it on-stage when needed. We’ve strayed from using a preloader because we wanted the experience to start right away, but at this point, looks like we’ll have to use a preloader.

We couldn’t just do a regular preloader and load all 35MB worth of SWFs at the start, because the wait time would be obscene even on a Comcastic® connection. We could just arbitrarily pick a number of SWFs to load, but it’s just not ideal since connection variances amongst our users. We have to get fancy once again, and create a semi-intelligent preloader, if we were to name it, it’d be called IntelliLoader®, but since Microsoft has the whole Intelli-Something cornered, we’ll just call it Steve®.

The first step to making Steve® intelligent would be finding out how fast the user’s internet connection is, similar to Netflix. At the start of every Netflix streaming movie, it pops up this little dialog that tells you it’s measuring your connection speed. Steve® measures the user’s internet connection speed by loading the first five SWFs, it starts a timer when the first SWF starts loading, and it adds up the individual SWF sizes while they’re loaded, at the end of the fifth SWF it does a quick totalBytesLoaded divided by totalLoadTime, to get a KB/s number. This bit of testing not only gets us the user’s connection speed but effectively preloads 5 SWFs without the user knowing it. Steve® is a clever lad.

Now that we know how fast the user’s connection speed is, we’ll need to figure out how many SWFs to preload for the internet speed. With the help of Firefox Throttle and some manual testing, we came up with four speed tiers to account for, <50 KB/s (Tier1), 51-100 KB/s (Tier2), 101-150 KB/s (Tier3), and >151 KB/s (Tier4). With some more manual testing we’ve determined Tier1 needs about a 12 SWFs head start, Tier2 about 6, Tier3 4, Tier4 0. We ended up trimming it back to 10/4/3/0, just because 12 is a long wait.

So from here on, we added a loading indicator, status messages stating we’re buffering x of y, and percentage loaded of current SWF, so the user’s not in the dark about what’s happening, being verbose, Steve® is very talkative. Of course with this system there’s really not much you can do if the user’s connection slows down, so the buffering message will also pop whenever the user runs out of loaded SWFs.

And, there you have it, that’s how our current demo reel came about, and the birth of Steve®. See Steve® in action.

Plexipixel Steve® Loading Intelligence.


Epilogue

Okay, if you’ve been keeping up, you’re probably thinking why don’t you just find out the total file size of all the SWFs and do some divisions from there, and you’ll know exactly how much to preload? The short answer is, Steve® is not that smart, the long answer? It’s the next step for Steve®. The concept is simple enough, create a loop to start loading the SWFs, grab totalFrames, grab the file size, then dump it. With the information gathered we can use some fancy math and figure out how much to load to keep in front of play head. The honest answer? We just thought of it, we’ll upgrade Steve® when we get a chance.

Allen is a Flash Developer here at Plexipixel. He enjoys long walks on the beach (no, not really), and journaling by the fireside (definitely not) when not at work battling the Adobe Flash IDE.

Author: allen

1½ Weeks with XNA

Tuesday, February 10th, 2009

XNA One Half WeekSince we recently helped design the Hexic and Sudoku games for Zune, we decided to take a deeper dive into XNA during some downtime after the holidays. If I were to describe XNA in one word, the word would be “easy”. In four words, “easy like Sunday morning”. I’m not saying any one-eyed chimp will be able to crank out games, but it is very easy to get started, and it’s all free.

To get started head over to http://creators.xna.com/, sign up, if you don’t have Visual C# 2008, you can grab the free Express edition, then download and install Microsoft XNA Game Studio 3.0, choose a tutorial, and you’re ready to go. Every step of the way is explained in detail.

After working with Flash and ActionScript for so long, it’s kind of a relief to be working in a development environment that has so few bugs. Intellisense works beautifully in Visual Studio, showing you every member, method, function, option, and grandma available, and in detail. There is also real-time debugging if you leave the “Error List” open. It is so anal-retentive it will even tell you if a function is not being used. The scrollbars work properly, they don’t spaz out if you use the mouse wheel. I think the neatest thing about it is that it’s easy to convert a project from PC, to Xbox360, and to Zune.

It’s not perfect though, the help files are overly complex, the search function is useless, it was easier to just do a Google search most of the time. If the studio were to move to XNA, we would have to drastically alter our process. A lot of the UI stuff designers can do in Flash will have to be done completely in code, there’d be no tweaking by thee pixel pushers, me mateys, yaarrgh.

Anyway, Microsoft really made it easy for people to get started developing in XNA, this is just a really quick and brief rundown of what it is, for more information, please go to: http://creators.xna.com/. And here's more information on the Hexic and Sudoku games we did for Zune.

Zune Hexic

Zune Sudoku

Author: allen