Today, we entered Rudy in the world's coolest dog contest on dogster.com. Check it out!
Please vote for Rudy in the World's Coolest!
Wednesday, October 17, 2007
Tuesday, October 9, 2007
Rudy Booty
Introducing Rudy -- our foster golden retriever we've had for about a month now. We picked him up from Chicago and brought him back to Cinci to enjoy sticks in our backyard, fetching balls, and playing with other dogs in the neighborhood.
He even has a dogster page!
Plus, more photos of Rudy can be found on our Kodak gallery (View photos).
Wednesday, October 3, 2007
Adobe MAX 2007 - day 3
Final Day
Working with Data in Flex
Tom Lane
What's different about data in Flex?
the role client and server played in architecture
server is doing the work of plugging data into UI (server-side)
ajax server sends abstract data to the client (client-side/server-side hybrid model)
google suggest - selectively employs AJAX to spice up spots
roby partials - async update of a chunk of server generated HTML
Flex is 100% UI on the client
client requests and server sends abstract data
Flex Data Fundamentals
Three data "paradigm" objects:
- weakly typed
- most basic
- in actionscript
var myobject:ObjectProxy = new ObjectProxy();
myobject.title = "Pocket Symphony";
- in mxml
mx:Model (bonus: you can defined init data with xml)
<>Pocket Symphony<>
mxml has only one root node (album)
pros - you can do whatever you wan, add new properites, don't have to code anything else
cons - your misspellings kill you
- XML (still weakly typed)
in actionscript
var myxml:XML =; (weird)
you get E4X support "dot" syntax
mytree..treeitem.@label - returns all the labels of tree item nodes at any level in a tree
if you use it, it's harder to migrate to strong typing
- strongly typed
use an actionscript class to formally define the data
{Bindable]
public class Album {
public var title:string;
public var artist:string;
public var tracks:ArrayCollection;
}
To instantiate in ActionScript
var album:Album = new Album();
album.title = 'Pocket Symphony';
In MXML:
Pocket Symphony
flex builder catches problems - compile time validation
- code hinting
- get/set methods
Making data [Bindable] databinding
- every property in this class is now bindable
arrays class is too simple to suppor tdatabinding, but ArrayCollection does support it
ArrayCollection is generically typed in that everything is an Object when it comes out
var item = ac.getItemAt(0);
var item:* = ac.getItemAt(0); // confirm i really want to make this variable typeless
var item:Album = ac.getItemAt(0) as Album; // not 100% safe b/c no guarantee, but it's pretty safe
Flex Services
ways of talking between client and server
RPC servces (http, web, remoteobject)
data management service CRUD, pushing updates, breaking up large results into chunks
FlickrAPI HTTPService cilent proxy
webservice - overhauled
- wsdl (SOAP encoded)
- Data > Import Web Service
remoteObject
- aka flash remoting
- more efficient binary encoding
JSON = crazy alternative to XML serialization
security hole (never eval() JSON in the first place)
RPC service stumbling blocks
make sure to handle faults
implement fault="handleFault(event)" to display errors
function handleResult(event:resultEvent) {...
data management service
- sync collections bwetween colient & server
- resolve confilcts
- push updateds to clients
- handle large results - page results and lazily load related data
dataservice client code
- fill -
- commit
- outside of collections
automagic via servier cahcing of the fill query
to scale turn off
[Managed] on the client classes plus some service config to define relationships
server-side assembler
fill, get, count, sync
or just extend AbstractAssembeler
Robert Reinhart - schematic (flash video guy)
rreinhardt@schematic.com
Working with Data in Flex
Tom Lane
What's different about data in Flex?
the role client and server played in architecture
server is doing the work of plugging data into UI (server-side)
ajax server sends abstract data to the client (client-side/server-side hybrid model)
google suggest - selectively employs AJAX to spice up spots
roby partials - async update of a chunk of server generated HTML
Flex is 100% UI on the client
client requests and server sends abstract data
Flex Data Fundamentals
Three data "paradigm" objects:
- weakly typed
- most basic
- in actionscript
var myobject:ObjectProxy = new ObjectProxy();
myobject.title = "Pocket Symphony";
- in mxml
mx:Model (bonus: you can defined init data with xml)
<>Pocket Symphony<>
mxml has only one root node (album)
pros - you can do whatever you wan, add new properites, don't have to code anything else
cons - your misspellings kill you
- XML (still weakly typed)
in actionscript
var myxml:XML =
you get E4X support "dot" syntax
mytree..treeitem.@label - returns all the labels of tree item nodes at any level in a tree
if you use it, it's harder to migrate to strong typing
- strongly typed
use an actionscript class to formally define the data
{Bindable]
public class Album {
public var title:string;
public var artist:string;
public var tracks:ArrayCollection;
}
To instantiate in ActionScript
var album:Album = new Album();
album.title = 'Pocket Symphony';
In MXML:
flex builder catches problems - compile time validation
- code hinting
- get/set methods
Making data [Bindable] databinding
- every property in this class is now bindable
arrays class is too simple to suppor tdatabinding, but ArrayCollection does support it
ArrayCollection is generically typed in that everything is an Object when it comes out
var item = ac.getItemAt(0);
var item:* = ac.getItemAt(0); // confirm i really want to make this variable typeless
var item:Album = ac.getItemAt(0) as Album; // not 100% safe b/c no guarantee, but it's pretty safe
Flex Services
ways of talking between client and server
RPC servces (http, web, remoteobject)
data management service CRUD, pushing updates, breaking up large results into chunks
FlickrAPI HTTPService cilent proxy
webservice - overhauled
- wsdl (SOAP encoded)
- Data > Import Web Service
remoteObject
- aka flash remoting
- more efficient binary encoding
JSON = crazy alternative to XML serialization
security hole (never eval() JSON in the first place)
RPC service stumbling blocks
make sure to handle faults
implement fault="handleFault(event)" to display errors
function handleResult(event:resultEvent) {...
data management service
- sync collections bwetween colient & server
- resolve confilcts
- push updateds to clients
- handle large results - page results and lazily load related data
dataservice client code
- fill -
- commit
- outside of collections
automagic via servier cahcing of the fill query
to scale turn off
[Managed] on the client classes plus some service config to define relationships
server-side assembler
fill, get, count, sync
or just extend AbstractAssembeler
Robert Reinhart - schematic (flash video guy)
rreinhardt@schematic.com
- spitemout
- capture
- gallery2
- ffmpeg
Tuesday, October 2, 2007
Adobe MAX 2007 - day 2
Coldfusion Powered Ajax
cfgrid (use sql based page nav)
cflayout
Uses YUI libraries - download times are extremely heavy
Use compression on the files to reduce load...
cftooltip
cfdiv
cfpod like a cfdiv - not a big fan
jason graves (cf account manager) jgraves@adobe.com
debugging ajax logger
other tools (firebug, coldfire - debugs cf)
serviceCapture (IE)
charles - best ajax debugger/flash remoting - amazing
JSON serialize/deserialize
skinning is all css based
cf makex ajax easy
extensible through YUI & EXT
Keep an eye on EXT 2.0 - desktop like features (not silly js)
Resources
http://www.robgonda.com/dev/max/cf8samples
http://exths.com/blog/2007/09/06/ext-20-a-preview/
Keynote
coming soon...
Building CF powered Ajax apps
w/ Ben Forta
use cases
-------------------------------------------------------------------------------------
test.cfm
art = CreateObject("component",'art');
Test component:
results = art.GetArt(1);
---------------------------------------------------------------------------------------------
art.cfc
SELECT artname
FROM art
WHERE UCASE(artname) LIKE
ORDER BY artname
SELECT mediaid, mediatype
FROM media
ORDER BY mediatype
SELECT artid, artname
FROM art
WHERE mediaid =
ORDER BY artname
SELECT artistid, lastname, firstname, email
FROM artists
ORDER BY #arguments.gridsortcolumn#, #arguments.gridsortdir#
UPDATE artists
SET #colname# = '#value#'
WHERE artistid = #arguments.gridrow.artistid#
DELETE FROM artists
WHERE artistid = #arguments.gridrow.artistid#
cfgrid (use sql based page nav)
cflayout
Uses YUI libraries - download times are extremely heavy
Use compression on the files to reduce load...
cftooltip
cfdiv
cfpod like a cfdiv - not a big fan
jason graves (cf account manager) jgraves@adobe.com
debugging ajax logger
other tools (firebug, coldfire - debugs cf)
serviceCapture (IE)
charles - best ajax debugger/flash remoting - amazing
JSON serialize/deserialize
skinning is all css based
cf makex ajax easy
extensible through YUI & EXT
Keep an eye on EXT 2.0 - desktop like features (not silly js)
Resources
http://www.robgonda.com/dev/max/cf8samples
http://exths.com/blog/2007/09/06/ext-20-a-preview/
Keynote
coming soon...
Building CF powered Ajax apps
w/ Ben Forta
use cases
- auto suggest, related controls, inline content, data paging, form validation, non-intrusive login
- any cf app is broken from one to two (cfc's and UI)
-------------------------------------------------------------------------------------
test.cfm
art = CreateObject("component",'art');
Art Search
Test component:
results = art.GetArt(1);
---------------------------------------------------------------------------------------------
art.cfc
SELECT artname
FROM art
WHERE UCASE(artname) LIKE
ORDER BY artname
SELECT mediaid, mediatype
FROM media
ORDER BY mediatype
SELECT artid, artname
FROM art
WHERE mediaid =
ORDER BY artname
SELECT artistid, lastname, firstname, email
FROM artists
ORDER BY #arguments.gridsortcolumn#, #arguments.gridsortdir#
UPDATE artists
SET #colname# = '#value#'
WHERE artistid = #arguments.gridrow.artistid#
DELETE FROM artists
WHERE artistid = #arguments.gridrow.artistid#
Monday, October 1, 2007
Adobe MAX 2007 - day 1
keynote session
coming soon... (it's on paper :( )
adobe coldfusion monitor
runs from CF admin
stats screen 1
stats screen 2
stats screen 3
stats screen 4
alerts
trigger snapshots
A Virtual Trading Floor: Bringing Wall Street to the (Biz) Classroom
Wharton Security Xchange (WSX)
WSX, v1
Flex 2.0 w/ LiveCycle Data Services 2.5
Traders' Incoming Orders ----> Order Execution <---> Order Book ---> Order History
Move to Flex & Dataservices
Communications - design choices
Process
tech solution summary
They keep 5 years of data
Conclusion
Leveraging ColdFusion Components
blessing and curse
cf_customtag
user defined functions
CFCs
basic rules
anatomy of a cfc
Demo 1
Using CFC's
coming soon... (it's on paper :( )
adobe coldfusion monitor
runs from CF admin
stats screen 1
- active requests
- active cf threads
- slow requests
- slow cf threads
- sessions
- cumulative server usage
stats screen 2
- memory usage
- run garbage collection (be weary of this)
- tuning queries is a better method to tune cf server
- monitoring and profiling are not process intensive, memory tracking is heavy
- application scope memory usage
stats screen 3
- server scope memory
- database queries (active, slow, cached, status, pool status, most frequent)
stats screen 4
- errors and timeouts
alerts
- set them up as server crash predictors
trigger snapshots
- displays a snapshot of the server
A Virtual Trading Floor: Bringing Wall Street to the (Biz) Classroom
Wharton Security Xchange (WSX)
- knew long-term goal was the web
- a good idea: all business logic done in database
- trade handler & FIFO order handling
WSX, v1
- The Good
- Immediate response times
- Rich and realistic UI
- Compelling competitive atmosphere
- Fine-grained centralized control
- Visual Basic (team of web developers can't maintain, client-based install)
- Hindered external expansion
- Stanford case (shipped off exe, shipped off sql server db)
Flex 2.0 w/ LiveCycle Data Services 2.5
Traders' Incoming Orders ----> Order Execution <---> Order Book ---> Order History
Move to Flex & Dataservices
- Flex Builder 2.0 a powerful and familiar IDE
- Resulting SWF gave total UI control in browser
- Flex Data services
Communications - design choices
- Data Mgt
- Ideal for keeping clients sycnhed
- trickey when changes can come externally
- Data Msg'ng
- Provides a real-time consumer producer model
- Remote objects
- CFC's
Process
- Group development: challenging synchronization
- 1 week of rapid development w/ (in)experienced flex dev's
- new software dev paradigm for compiled code
- new challenge: server push
tech solution summary
- consumer/producer messaging
- coldfusion server push
- one-quarter second
- cf gateways
- cell renderers
- cf8/lcds 2.5
- flex builder 2.01
- sql server 2005
They keep 5 years of data
Conclusion
- Flex helped to achieve long-term goals - external adoption
- Flex LCDS is a viable tool fro real0time financial apps
- freedom from client
- keeping relevant tech in front of new gen of students
Leveraging ColdFusion Components
blessing and curse
- the problem with rapid development is that it's too easy to write spaghetti code
- resist the urge to File.. New,
- spaghetti code = bad
- cfinclude - good for reusing static html but that output can't be customized
cf_customtag
- for customized content
user defined functions
- can easily return values but
- code must be manually included
- udfs are just collections of methods, data is not encapsulated
- can't be used outside of a .cfm page
CFCs
- encourage better code org
- easier to call/invoke
- more functional than UDFs
- stores instance data as well as encapsulate functions
- reusable from any app that can use web services or flash remoting
basic rules
- start w/ a set of udf's in component tag
- use .cfc file extension
- store .cfc files in the web root (if cfc's will be called as web services)
anatomy of a cfc
- benefits
- the cfc file doesn't have to be included
Demo 1
- demo a simple CRUD app
- pick a page and move its brains (data access code) into CFC
Using CFC's
- building blocks for page based apps
vs CreateObject
My first blog
Hi, I'm here at Adobe MAX 2007 in Chicago, IL and starting my first blog to help save my thoughts and experiences. Not only for work, but for everything. Hope you enjoy...
Subscribe to:
Posts (Atom)