November 17, 2010

Adding 3D to Your Arsenal (RIA Unleashed: Boston 2010)

Adding 3D to Your Arsenal by Charlie Schulze

Can find a bunch of information on his blog at papervision2.com. Working on redoing site with Away3D examples as almost everything is Papervision3D focused at this point.

Talk is more about how to add 3D to your application than how to do 3D modeling.

Good uses for 3D


  • Games - Redbull / Farmville

  • Enhancements to entertainment, automotive, educational sites

  • It's just the spice not the main course

Bad Uses


  • Games that should just be 2D

  • Text and content heavy sites

  • AmericanExpress.com

What is easy


  • Getting started

  • Creating rich and compelling 3D experiences

  • Moving into more advanced aspects of the 3D engines

What isn't easy


  • Performance tweaks

  • General optimization

  • Advanced mathematics
  • Two main engines are Papervision3D and Away3D. Right now Away3D is planning to have better support for Molehill. Speaker has found Away3D to be more optimized (especially if you can target Flash Player 10) and robust, so if he had to pick would go with that, even though he has mostly used Papervision3D.

    Both engines follow the same format of creating a view, renderer, scene, objects with materials, and a camera. Besides a few syntax differences the majority of your code will be the same regardless of which engine you are using.

    One gotcha is that in Away3D by default planes lay flat, need to change that otherwise it is hard to see anything.

    Likes TweenMax for all his tweening.

    Working with 3D models is hard. They really need to be optimized for the engine you are working with.

    Tags: 3d api flash riaunleashedboston2010

November 17, 2010

Beyond IoC: Advanced Experiments with Swiz (RIA Unleashed: Boston 2010)

Beyond IoC: Advanced Experiments with Swiz by Ben Clinkinbeard

Swiz is all about custom meta-data parsing as returned from describeType(). Recent changes have exposed that meta-data processing to anyone. General switch from autowire to inject.

Swiz is all about defining a list of beans that it knows about. Swiz watches for views to be added and then manages them (i.e. set beans on the view).

In general most of what you can do with a meta-data tag you could also do with an interface, but it isn't as cool.

IProcessor (root of it all)
init() - reference to Swiz instance one is operating in
priority - determine what order processors are run in

IBeanProcessor (extensions) any object that Swiz manages
setUpBean() and tearDownBean()

SwizInterfaceProcessor: checks for common interface types (backwards compatibility)

Bean is wrapper that Swiz puts around your object. It has source property and type descriptors that handles meta-data. Support for class, property, and method meta-data.

IMetadataProcessor (parse custom metadata tags)
metadataNames() - associate with more than one metadata tag
setUpMetadataTags() - metadata tags found and the bean
tearDownMetadataTags()

PostConstruct run after all injections satisfied
MetadataTag allow additional properties like "order"

var f:Function = bean.source[metadataTag.host.name];

Bad things might happen if two register the same meta-data tag. Might be good to add a mapping report to let you know what was injected where.

Unit testing custom meta-data tags is possible.

When an event is dispatched, to check permissions or security constraints, may prevent method from running.

Growing collection of third party custom meta-data processors.

New feature is event chains and command chains. Determine flow by returning AsyncToken or AsynchronousIOOperation.

Tags: as3 flex riaunleashedboston2010 swiz

November 17, 2010

ColdFusion, Solr, and Killer Robots (RIA Unleashed: Boston 2010)

ColdFusion, Solr, and Killer Robots by Raymond Camden

Solr gives us better searching and file and data indexing versus SQL.

Verity (now dead to us) was the old school way of doing full text searching it was really good but had data limits.

A SQL like query is bad because it lacks relevancy, it is complex, misses context, can't handle binary files, and misses a lot of language kung fu.

Solr is an open source Java search engine built on top of Lucene that provides searching, highlighting, file indexing, and REST APIs among other features.

ColdFusion supports Solr with admin features, language support (3 tags), and includes Solr itself.

Important to update your ColdFusion to 9.0.1 with the cumulative hot fix, also helps with AJAX.

Definitions:


  • Collections (think: DSN)

  • Indexes (think: Table)

  • Separate from your actual data (must update index after updating data)

CF Admin


  • create, edit, delete collections

  • optimize collections

  • focused on file based collections

  • No native ability to search but there is an open source add-on

Can't turn on content highlighting with a tag

cfcollection tag


  • create, edit, delete, and optimize

  • Need to include engine even though docs say otherwise

  • Programatic collections should go in CF default

Can only search against index, must keep it up to date

cfindex tag


  • purge or refresh

  • incremental adds are important

  • results are totally broken don't use it

When indexing files


  • Key - primary key for index

  • Title - acts as title

  • Body - the main thing you search, can be multiple columns

  • Plus additional things like custom fields and categories or category trees

Categories are like keywords (football) and category trees are like hierarchies (sports/world vs. sports/american).

cfsearch tag


  • provide one or more collections

  • criteria is what you are searching for

  • results in a ColdFusion query object

Solr relevancy score is from 0 to some number, bigger is better but not something you show user.

Providing context


  • context provides information about the match (term highlighting)

  • turning it on requires reindexing

  • modify context markers, to get around broken HTML marker issue

  • No way to set author with database context

Solr supports spelling suggest system but must be set on search request.

ColdFusion wrapper is limited to 4 custom fields

Tags: riaunleashedboston2010 solr

November 17, 2010

Keynote (RIA Unleashed: Boston 2010)

Keynote by Ryan Stewart and Terry Ryan

Flash has seen a rise in competition: Silverlight, Java FX, JS/HTML

Flash adoption is getting faster. To get penetration from 0 - 80%


  • Flash Player 8 = 12 months

  • Flash Player 9 = 11 months

  • Flash Player 10 = 6 months

  • Flash Player 10.1 = 74% in 3 months


Flash is showing up on more and different devices every day. Truly becoming a multiscreen platform. All walks of technology want Flash.

Flash is responding with device centric features like: accelerometers, GPS, multi-touch, and virtual keyboards.

Adobe is enabling you to use your Flash skills while tailoring the experience to use each devices unique capabilities.

Flash focusing on performance enhancements like: optimized garbage collection, JIT improvements, audio/video hardware acceleration, and AS2 optimizations.

Important to remember that content written for desktop won't run out of the box on the TV or mobile. Currently can target mobile using Flash in the browser or writing native applications.

Flash showcase for mobile at http://m.flash.com/.

Flash 10.1 is currently on 2 million devices and should be on 10 million by the end of the year.

Juniper Research says the mobile application market will be worth $25 billion in 5 years.

Blackberry is a whole new idea because native development is done in AIR, default applications are all AIR, and AIR runs the UI.

For multiscreen development, write once run anywhere isn't the case. Need to make changes based on UI and device.

Flash CS5 has added templates and packages for Android and iOS.

Flash Builder Burrito includes templates for Android, Flex mobile components, deployment and package tools, and on device debugging (deployments are over USB and debugging is over Wifi).

For front end development, Flex SDK "Hero" adds a mobile framework with views and view navigator and mobile optimized components, while Flex Builder "Burrito" adds mobile projects, debugging for mobile, publishing for mobile, and multiscreen testing.

For back end development, ColdFusion 9 gives you ORM, CFScript, and Flash Remoting, while ColdFusion Builder has extensions, and an IDE that works great.

ColdFusion Builder Storm gives you: code editing with better code folding, better code assist, better code formatting (with customizable preferences), better search, and better find and replace, while the new extensions offers more server data, extensions in views (instead of modal boxes), extensions code assist, and extensions custom keys.

Flash is making is easier to create games with native game controller support and new 3D APIs (code name Molehill) that can target DirectX and OpenGL to fully render on the GPU.

Multimedia improvements for Flash include StageVideo which is a new way to display video that offloads entirely to GPU which cuts down on CPU usage and battery drain.

Message of the day: It is a great time to be a Flash Developer!

Tags: adobe flash flex riaunleashedboston2010

November 17, 2010

Real Component Development on the Flex 4 Architecture (RIA Unleashed: Boston 2010)

Real Component Development on the Flex 4 Architecture by Michael Labriola

This was a hands on lab so these notes just capture general concepts discussed.

Think of Flex 4 components as the atoms of the system.


  • highly reusable

  • no external dependencies

  • everything is passed into them

  • participate in Flex lifecycle (defined by UIComponent)

  • know how big they are and should lay out nicely



Reusable components should be written in AS3 as MXML components with children can't be extended. MXML components should really be considered leaf nodes.

In Flex 3 you used UIComponent while for Flex 4 use SkinnableComponent (which separates out its visuals). In Flex 3 you used addChild() while for Flex 4 use addElement.

Parent's size children in Flex, this is what you get. The measure() method is concerned with setting measuredHeight, measuredWidth, measuredMinHeight, and measuredMinWidth.

In updateDisplayList(unscaledWidth, unscaledHeight), maybe you add scrolling if your contents won't fit in the size give, tell children via setActualSize(width, height).

In commitProperties(), continue to follow the check flag and component exists before making changes.

SkinnableComponent delegates to skin. Define SkinPart through meta-data. When the skin is set Flex adds parts to the class and calls partAdded. Typically use interfaces like IGraphicElement and IVisualElement to ensure the skin can really do whatever it wants.

Tags: flex riaunleashedboston2010 skinning

November 17, 2010

litl Lab (RIA Unleashed: Boston 2010)

litl Lab by Ryan Canulla and Kathryn Rotondo

Not nearly enough hands on coding, especially since half of the session was devoted to their upcoming set-top box product but for which they didn't have a hardware demo.

Flash based SDK for developing channels. Each channel has three views: card (menu with optional slideshow), focus (mouse, keyboard support), and channel view (passive view, swipe type gestures only).

User can install multiple channel instances with different settings. Think weather widget with different zip codes all displayed at once.

Card view should have minimal animation but can reflect live data.

Focus view is the most details. Put ability to change channel options in this view and things like capturing username and passwords for remote data. Can configure a website and links that will launch in the litl chrome based browser.

Channel view should be designed for distance viewing. Think of it like a screen saver, very passive, but should be used for video and games since it provides the most screen real estate. For gestures in the view put most common in the middle (least likely, somewhat likely, most likely, somewhat likely, least likely).

Keep in mind the user can switch between the three views at any time. Be smart about what you do. Remember that data should update regularly but handle the fact that the network will come and go.

A channel can store properties in either shared properties (part of the channel, consider them public) (example same channel in marketplace with different defaults), device properties (specific to the device the channel is running on, consider them private) (example font size for webbook versus TV STB), or account properties (tied to your account, consider them protected) (example Facebook username and password).

New set-top box offering will have trackpad with slide out keyboard. Will offer gestures, accelerometers, microphone, and possibly webcam. For STB you need to worry about overscan, but the litl SDK will tell you usable dimensions when switching which view is active. Important to liquify your layout as STB dimensions will vary like crazy.

Tags: api as3 flex litl riaunleashedboston2010

November 17, 2010

How to Launch a Small Software Project (RIA Unleashed: Boston 2010)

How to Launch a Small Software Product by Jesse Warden

Why do it?


  • You might want to change the world, do good, and make money.

  • Think about it as the next stage of your software career.

For the Money. Think Zynga. There is more money in products than consulting.

Fame. Think Digg or Pownce.

Lifestyle. Get to work when you want.

People that have made the switch:
Nick Bradbury: HomeSite, TopStyle and FeedDemon.
Dan Florio: RunPee.com
Randy Troppmann: Runningmap.com

Skill Validation vs. Unapplied Academia


  • Consumers (more fickle) vs. Clients

  • Vision you need to show the world

Service vs. Product


  • Service work = working for another business

    • low risk lots of opportunity/jobs

    • low return: company takes a cut of your pay

  • Product work = building a product consumers buy

    • high risk, no guarantee it'll sell

    • high return you own all profits: scale is higher

What doesn't work


  • not releasing a working build

  • coding first, designing second

  • non-standard architecture

  • no clearly defined goals

  • misaligned goals

  • unsustainable cost structure

  • scalability: ignore it

  • no competency

  • not getting along with partners (someone that undoes your changes in SVN)

  • not releasing early

  • not releasing often

  • no commitment

  • mythical man month

  • waterfall

What works


  • designing to 70% finished

  • clear goal(s)

  • clear finish line

  • competency: should you build, or learn

  • something simple, done really well

  • "Red ocean versus blue ocean"

  • why people buy (Sandler Sales System): fear, pleasurable experiences, get out of trouble

  • improving an existing technology

  • first to market

  • small agile teams: UIKit of iOS = 1 person vs. XCode = 16 people

  • market research

  • iterative development

  • motivation is sacred

2 methodologies that work

Plan A: Product process

1) Research and documentation


  • who my market is, most viable product, tipping point

  • list your goals (list features)

  • research market or define personna

2) Design and iterate


  • sketch interface on paper, if fail, refine #1

  • wireframe through, not fidelity

  • build design only 70%

3) Develop


  • commit to 1 feature per build

  • release bi-weekly or monthly basis

4) Launch


  • alpha: on right track or wrong users

  • beta: need a website (download, screen shot, feedback, easy to access you)

  • get beta out the door

Plan B: Reasoning

Kind of like throwing soldiers into a position where there is no escape.
Only one rule: release a build on 1st and 15th of ever month.

Marketing ideas


  • gather quotes from forums for text

  • use website email as primary email

  • get friends to RT on Twitter

  • use all social networks

  • invest in metrics

  • discounts

  • contests

Motivation and focus


  • no motivation, no products

  • no focus == slow velocity

  • set aside time

  • oasis/tortoise environment

  • iterator and user feedback

  • feedback versus validation

  • blocks of your time

  • consulting or freelance allows you to build time to devote

Created Powerz as an example


  • People 26 years old don't read book

  • D&D isn't like wow

  • make a digital solution

  • 1) launch

  • 2) super simple thing

  • 3) get bought or get shutdown (get attention)

Lessons learned


  • do something simple, get it work, provides validation

  • motivation is sacred, focus is essential


Tags: life riaunleashedboston2010 software