Title: Fusebox 3.0 The Framework, The Methodology, The Community Nat Papovich, Fusium
1Fusebox 3.0The Framework, The Methodology, The
CommunityNat Papovich, Fusium
2Complexity
- Amoebas at the start Were not complex
- They tore themselves apart And started sex.-
Arthur Guiterman
3Agenda
- Basics
- Benefits
- Technical
- Methodology
- Community
- We have a lot to cover!
4Fusebox BasicsFree
- Fusebox will never be a for-purchase system.
- Just like the rest of ColdFusion, extras cost.
- Custom Tags
- Example Applications
- Online Training
- Extensive Articles
5Fusebox BasicsFile Organization
- Fuses
- Fusebox for files or templates not Custom Tags
- Naming conventions (covered in Technical)
- Each fuse performs a discrete task
- Small file size makes debugging easier
- Circuits
- Mini-applications
- Directory-based
- Aggregate similar functionality
- Variables available across multiple files
6Fusebox BasicsFile Organization
7Fusebox BasicsFuseactions
- Control the flow of the application
- Traditional model of a controller file
- MVC Model-View-Controller in J2EE
- main.c ?
- A default fuseaction is set
8Fusebox BasicsFuseactions
The fuseaction
ltcfswitch expression fusebox.fuseactiongt
ltcfcase valuedoSomethinggt ltcfinclude
templateact_aFuse.cfmgt lt/cfcasegt . ltcfcase
valuedoSomethingElsegt ltcfinclude
templatedsp_anotherFuse.cfmgt lt/cfcasegt lt/cfsw
itchgt
dsp_yetAnotherFuse.cfm
The fuses
9Fusebox BasicsArchitectural Decisions
- With experience, you will be able to
- Lay out circuits
- Nest circuits
- Choose persistent variables
- Create application settings
10Fusebox BasicsSites Using Fusebox
- AutoByTel.com
- SuperBowl ad massive (1900?) growth
- RoomsToGo.com
- Largest furniture retailer online
- Cluster of 10 servers
- eBags.com
- First Fusebox implementation 1997
- Largest bag retailer online
11Fusebox BasicsWhen To Use
- E-commerce sites
- Easy to implement circuits
- Intranets
- Plug-n-play new applications
- Web Applications
- Massive size demands strict architecture
12Fusebox BasicsTerminology
- Circuits
- Fuseactions
- Fuses
- SES
- Search Engine Safe URLs
- http//www.mysite.com/index.cfm/fuseaction/user.lo
gin/id/14.htm
13Moving On Fusebox Benefits
14Fusebox BenefitsSpeed Of Development
- Lower costs
- First to market is the survivor
Russ Johnson and one co-worker built www.csx.com
full content management system in 2 weeks from
scratch, having never written a Fusebox
application before.
15Fusebox BenefitsEase Of Maintainability
- Fusedocs
- Documentation for initial creation AND
maintenance - Simplified, obvious application flow
- Fuseactions
- Component independence
- Fuses
- Circuits
16Fusebox BenefitsCommunity-Owned
- Bug-free
- Closer to Linux than Microsoft
- Not bound to a company
17Fusebox BenefitsReusability
- Reuse generic components across multiple
applications - Reuse fuses and fuseactions across the same
application
18Fusebox BenefitsExtensible
- Does not preclude Custom Tag use
- Non-encrypted framework
- But!! Changes to core introduce compatibility
issues
19Fusebox BenefitsEstablished Framework
- Focus on the business requirements
- Focus on how to make the customer happy
- Do not focus on how to keep it all together
- Do not focus on technical issues
20Fusebox BenefitsFast Learning Curve
- Intermediate developers can pick up Fusebox in a
day - By learning Fusebox alongside ColdFusion,
beginning developers can learn right from the
start
21Fusebox BenefitsThe Anti-Benefits
- Debugging myth
- Tracking down variables
- Separation of display from action
- Fewer lines per template
- Overhead
- Milliseconds penalty for great gain
- Scales to millions of hits per day
- Poorly architected code does not scale
- No application.cfm use
- ltcfmodulegt does not call application.cfm again
- Commitment
- All applications grow
- Plan ahead now
- Five files in a .zip
22Moving On Technical Fusebox
Dont forget that its free!
23Technical FuseboxAirlines The Old Way
Point-to-point routing
San Diego
Orlando
24Technical FuseboxAirlines The New Way
Minneapolis
New York
Seattle
Chicago
San Diego
Orlando
In 1960, United opened the first hub, in Chicago.
25Technical FuseboxThe Core File
(fbx_fusebox_CFxx.cfm)
- Specific to each version of ColdFusion
- ColdFusion 3.x not supported
- UNIX, Linux versions available
- Different versions mean faster execution
- Available for other languages
- PHP, JSP
- Very Fast
- ltcfscriptgting
26Technical FuseboxThe Core File
(fbx_fusebox_CFxx.cfm)
- No Custom Tags
- Fast
- V2 formURL2attributes.cfm now in-line
- Copies all form and URL scoped variables to
attributes scope - Stable and frozen
- Upgrades by the Standards Committee
27Technical FuseboxThe Core File
(fbx_fusebox_CFxx.cfm)
- Developer doesnt need to understand
- But it is well-commented and easy to follow
- Latest core file always available from
Fusebox.org - Web service underway to check for updates to core
and download latest
28Technical FuseboxThe Core File
(fbx_fusebox_CFxx.cfm)
- API (fusebox structure)
- fusebox.isCustomTag is this request coming from
cfmodule? - fusebox. isTargetCircuit is this the target
circuit for the request or is it just a nested
circuit? - fusebox. suppressLayout should this request not
contain the wrapper? - fusebox. suppressErrors yes during development,
no during production - many more
29Technical FuseboxThe Core File
(fbx_fusebox_CFxx.cfm)
30Technical FuseboxOther core files (fbx_file.cfm)
- Default web server document
- Usually index.cfm
- Handles any pre-processing
- Includes the core file - fbx_fusebox_CF50.cfm
31Technical FuseboxOther core files (fbx_file.cfm)
- fbx_circuits.cfm
- Similar to J2EEs JNDI concept
- Provides mapping to directories via circuit alias
This circuit lives down this directory chain.
32Technical FuseboxOther core files (fbx_file.cfm)
- Root-level fbx_settings.cfm
- Serves similar purpose as application.cfm
- V2 app_globals.cfm deprecated by this file
33Technical FuseboxOther core files (fbx_file.cfm)
- Children fbx_settings.cfm
- If acting as a standalone circuit, this file must
include the functionality of the root
fbx_settings. - All fbx_settings.cfm files in the directory chain
down to the target circuit get included in the
call. - Circuits tend not to nest more than 4 deep
34Technical FuseboxOther core files (fbx_file.cfm)
- fbx_switch.cfm
- Only the target circuit fbx_switch is run (not
like in V2) - Classic switch/case statement, switch on
fuseaction - Aim for less than 15 fuseactions per
fbx_switch.cfm - Try to have only simple CFML in the cases
- ltcfincludegt ltcfsetgt ltcfifgt ltcflocationgt
35Technical FuseboxOther core files (fbx_file.cfm)
- fbx_layouts.cfm
- Does not do the actual displaying only chooses
which display file to use - Allow Dreamweaver or other HTML smarties to do
their job outside the Fusebox framework - Nesting layouts allows multiple fuseactions in
different circuits to be displayed on one page
36Technical FuseboxOther core files (fbx_file.cfm)
- fbx_savecontent.cfm
- Custom Tag version of ltcfsavecontentgt for
pre-CF5.0 - V2 called cf_bodycontent by Steve Nelson
37Technical FuseboxFuse Prefixes
- dsp_
- Display template
- Display only
- Forms
- Content
- As little CFML as possible
- Often has an accompanying act_ file
- dsp_login.cfm, dsp_NewsHeadlines.cfm,
dsp_SearchResults.cfm
38Technical FuseboxFuse Prefixes
- act_
- Action template
- No display
- Contains anything not database or display
- Form error checking and processing, back-end
services, scheduled tasks, cfmail, verity, etc - V2 inserts, updates, deletes
- act_ValidateOnDomain.cfm, act_PullNewsFromMoreover
.cfm, act_VeritySearch.cfm
39Technical FuseboxFuse Prefixes
- qry_
- Query template
- No display
- All database interaction
- Update, insert, delete, select, etc
- ltcfquerygt ltcfstoredprocgt
- V2 only for selects
- Aim for reusability
- qry_ValidateUser.cfm, qry_CreateNewsItem.cfm,
qry_GetUserPreferences.cfm
40Technical FuseboxFuse Prefixes
- url_
- Optional file to contain ltcflocationgt logic
- Makes for cleaner fbx_switch.cfm
- If not used, ltcflocationgts occur in the qry_ or
act_ files - No display
- url_Login.cfm, url_DeletedNewsItem.cfm,
url_VerityIndexed.cfm
41Technical FuseboxFuse Prefixes
- app_
- Application template
- No display
- V2 Deprecated in favor of fbx_settings.cfm and
act_files. - app_server.cfm
- Server-specific like machine name, etc
- app_secure.cfm
- V2 Formerly app_locals.cfm and app_globals.cfm
42Technical FuseboxExit Fuseactions (XFAs)
- No hard-coded exit points
- Maximum reuse of code
- In structure xfa.
- Set XFAs to match exit points in fuses like
links, form actions, ltcflocationgts - Extracts fuses from the application
- Fuses act as black box unaware of the big
picture - Always in the form circuit.fuseaction
43Technical FuseboxFusedocs
- Defines all ins and outs for a fuse
- Paradigm shift for some
- Write code from the documentation
- Do not write the documentation from the code
- Just like blueprints for a house
- Accompanies every fuse
- In comments lt!--- ---gt at the top
44Technical FuseboxFusedocs, cont.
- Programming Definition Language (PDL)
- XML based
- DTD available from fusebox.org
- Dont be scared of XML
- VTML tag helpers available
- With CF Studio integrated help
- Due to XML structure, allows tools to read
Fusedocs and validate code or even write code for
you
45Technical FuseboxTest Harnesses
- Automatically created from completed Fusedocs
using XML parsing and Fusedoc reading tools - Unit test each fuse
- Similar to Extreme Programming?
- One harness for each fuse to allow simple testing
46Moving On Fusebox Methodology FLiP
47FLiPBuilding A House
- If the architect quits
- If the contractor screws up
- If all the carpenters get fired
- If you need an addition
- Home building has a long history
- Application development does not
48FLiPInitial Requirements Gathering
- No system for this do as normal
- Sales meeting to get rough ideas down
49FLiPWireframing
- First serious requirements gathering
- A client knows what they want after they see it
- Show them a web site without spending any time
creating it - Extremely fast
- Gets client buy-in early
- Resist the urge to code
- Fusiums Rebar
50FLiPPrototyping
- HTML mockups
- 100 identical to the finished application
- Resist the urge to code
51FLiPDevNotes
- Need to enable customer communication of the
design - Facilitates a client approval process
- Threaded discussion about each page
- Can I get this in cornflower blue?
52FLiPPrototype Lockdown
- Site is complete in HTML
- Example credit card processing
- Approval
- Failure message 1
- Failure message 2
- Bad credit card number
53FLiPArchitecting
- Using mind mapping software
- Identify each circuit
- Identify each fuseaction
- Identify each fuse
- Determine exit points
- Generate skeleton code
- Fuseminder.cfm
54FLiPFusedocing
- Copy prototype html page into display fuses
- Write black-box fusedocs
- Create test harness for each fuse to validate
- Act as a test routine
- Use harness.cfm
- QuerySims
- Coder should not need to know anything else about
the application
55FLiPCoding
- Distribution of effort
- Solve the Mythical Man Month?
- SecretAgents.com
- Coding is now a trivial matter
- Distribution of database required for qry_ fuses
56FLiPAssembly
- Architect gathers completed fuses
- Ensure fuse meets requirements of Fusedoc
- Drop into correct directories
- Verify exit points
- No need to open up completed fuses
57FLiPTesting
- No Fusebox-specific system for this
- Use wireframe and prototype as guide
58Moving OnFusebox Community
59Fusebox CommunityBest Practices
- Security model
- V2 app_secure.cfm
- Hal Helms cf_secure
- QuerySims
- cf_reuseForm
- Use one .cfm file for insert and edit form
- cf_returnFuseaction
60Fusebox CommunityCommunity Support
- Since the beginning, Fusebox is open to change
and improvements - Developer-created Custom Tags
- Contributed example applications
- Synthis.com - Adalon code generation
61Fusebox CommunityEmail Lists
- fusebox_at_topica.com
- Beginners welcome
- Heavily patrolled by active members
- FLiP_at_topica.com
- FLiP methodology only
- steer-fb_at_topica.com
- For Fusebox future
62Fusebox CommunityFusebox.org
- Whitepapers
- Latest core files
- Example applications
63Fusebox CommunityOther Sites
- www.halhelms.com
- QuerySim, tutorials, etc
- www.fusium.com
- Rebar wireframe editor, FEX core files, developer
tools, example applications - www.secretagents.com
- Online tutorials, fusecoders
- www.bombusbee.com
- PHP Fusebox
64Fusebox CommunityBooks And Articles
- Papovich and Peters, 2002
- Fusebox Pulse newsletter (fusium.com)
- Hal Helms writes monthly articles in CFDJ
65Fusebox CommunityFusebox Conference
- In conjunction with Macromedia DevCon, October in
Orlando - 20 speakers
- Jeremy Allaire keynoted last year