29
1 developer, 1 framework, 12 months Boris Popov Smalltalk Solutions 2007 Toronto, ON

Seaside Experience Report

  • Upload
    anaya

  • View
    57

  • Download
    0

Embed Size (px)

DESCRIPTION

1 developer, 1 framework, 12 months. Seaside Experience Report. Boris Popov Smalltalk Solutions 2007 Toronto, ON. This is not a Seaside tutorial This is an experience report Yours might differ, but hopefully be as pleasant Tons of credit goes to Michel Bany - PowerPoint PPT Presentation

Citation preview

Page 1: Seaside Experience Report

1 developer, 1 framework, 12 months

Boris PopovSmalltalk Solutions

2007Toronto, ON

Page 2: Seaside Experience Report

This is not a Seaside tutorial This is an experience report

Yours might differ, but hopefully be as pleasant

Tons of credit goes to Michel Bany He maintains all Seaside VisualWorks ports Works for Cincom

Questions are most welcome as we go along

Page 3: Seaside Experience Report

Located in Vancouver, BC 4 developers, all Smalltalkers XP attitude, not worship

Tests, tests and some more tests Lack of code ownership Frequent, small releases On-site customer 40 hour weeks

Page 4: Seaside Experience Report

Payment Processing Platform Multiple currencies (>150) Multiple countries (>65) Multiple types

Debits EFT, BACS, ACH, ESP, Cards, Checks, RCK

Credits EFT, BACS, ACH, ESP, Cards, Checks, CHAPS

Reported Millions of transactions a month

Page 5: Seaside Experience Report

Smalltalk throughout Except a handful of C libraries, external

utilities VisualWorks 7.4.1 (7.5 already tested) Microsoft SQL Server 2005 SP2 Homegrown, minimalistic OR mapping Client APIs

Batch (WebDAV) Real time (REST)

Page 6: Seaside Experience Report

Web portal for clients Payment Initiation

Terminals (Card, Check Issue, EFT) Batch upload (All available payment types)

Reporting Payment tracking (including possible returns) Daily account statements Statistics Charts Raw data exports

Page 7: Seaside Experience Report

Smalltalk Solutions 2006 Ajax with Seaside / Intro to Seaside

Avi Bryant & Andrew Catton Smallthought Systems Inc Critically acclaimed DabbleDB Hands-on coding session using Squeak

First real exposure to Seaside Simple prototype built while flying back

Page 8: Seaside Experience Report
Page 9: Seaside Experience Report

WebDAV only option to send/receive files Somewhat awkward, especially in 2006 + Windows built-in support very flaky

Vista even worse, must have Office installed (d’oh!)

Push model is maintenance magnet Needed web front end sooner than later Fear factor

Servlets & SSP seem harder than they should be

Limited in-house resources

Page 10: Seaside Experience Report

Showed prototype to the group on arrival Obviously cheesy, but it’s vision that

counts Management expressed support Planning

No extended meetings No design sessions No CRC cards “Just make it go”

Page 11: Seaside Experience Report
Page 12: Seaside Experience Report

Go for slick as early as possible Professional look stimulates and motivates Layout affects functionality Functionality affects layout It’s a never-ending pursuit of balance

Don’t let developers do designers’ job! Find the right person

Must read ALA and know what CSS Zen Garden is

Page 13: Seaside Experience Report

Initial understanding of the domain Express what you want to get done, not

how Existing brand materials and ideas (if any) Elements and variations of the template Future directions to include extra flexibility

Agree on a working model Ask for initial set of HTML templates to work off Future updates are mostly limited to CSS files

Page 14: Seaside Experience Report
Page 15: Seaside Experience Report
Page 16: Seaside Experience Report

Two-factor authentication was strongly desired

Why RSA? Strong presence in financial services, familiarity

factor Customized pricing per token and licensing cost Easy to integrate (handful of DLLCC calls)

Why not VeriSign? Wouldn’t even talk to us…

Page 17: Seaside Experience Report

What does it look like?

How does it work? Generates one time use token every 60

seconds Seeded in-sync with the server Passed along with username and PIN for auth

Page 18: Seaside Experience Report

Components, components, components All applications start with a root

component Root component has children Child components have children It really is as simple as it sounds

Session is always there Callbacks glue it all together

Page 19: Seaside Experience Report

It’s not magic, you must get down and dirty

But it’s messages, not templates! Reuse/Refactor, not Copy/Replace

New render canvas API is all about brushes

Header>>renderContentOn: html html div id: ‘header’; with: [(html span) class: 'descriptive-label‘; with: 'Logged in as:'. (html span)

class: 'user'; with: self session user label]

Header>>renderContentOn: html html div id: ‘header’; with: [(html span) class: 'descriptive-label‘; with: 'Logged in as:'. (html span)

class: 'user'; with: self session user label]

Page 20: Seaside Experience Report

Simplicity at it’s best, you can thank the blocks(html form)

defaultAction: [self process]; with: [(html label)

tooltip: ‘Minor units, with decimals, e.g. 150.00 or 19.95’;

with: ‘Amount’. (html textInput)

class: ‘required’;value: self amount;callback: [:value | self amount: value].

(html submitButton)yui;callback: [self process];text: ‘Process’]

(html form) defaultAction: [self process]; with: [(html label)

tooltip: ‘Minor units, with decimals, e.g. 150.00 or 19.95’;

with: ‘Amount’. (html textInput)

class: ‘required’;value: self amount;callback: [:value | self amount: value].

(html submitButton)yui;callback: [self process];text: ‘Process’]

Page 21: Seaside Experience Report

Ajax & Effects courtesy of script.aculo.us Used by Ruby on Rails, Apple, Digg and

Gucci Heavily objectified by Lukas Renggli

(html div) id: ‘time’; with: [self renderTimeOn: html].(html anchor) onClick: ((html updater)

id: ‘time’;callback: [:render | self renderTimeOn:

render]); with: ‘Update Time’

(html div) id: ‘time’; with: [self renderTimeOn: html].(html anchor) onClick: ((html updater)

id: ‘time’;callback: [:render | self renderTimeOn:

render]); with: ‘Update Time’

renderTimeOn: html html text: (Timestamp now printUsing: ‘hh:mm:ss.fff’)renderTimeOn: html html text: (Timestamp now printUsing: ‘hh:mm:ss.fff’)

Page 22: Seaside Experience Report

Don’t worry, you won’t get it right the first time Seaside encourages constant improvement Smaller components = Less coupling Example

Search (defines criteria, fetches results) Report (defines presentation, pagination, etc) Column (defines value, formatting, rendering, etc)

Reuse searches, reports, columns all you want

Page 23: Seaside Experience Report
Page 24: Seaside Experience Report
Page 25: Seaside Experience Report
Page 26: Seaside Experience Report
Page 27: Seaside Experience Report

Automated build process once all tests pass Upload all resources to S3 Trim all sample and config applications Configure application for deployment

Set session timeout value Set deployment mode Set protocol to HTTPS Install secure, user-friendly error handler

Save headless image

Page 28: Seaside Experience Report

How about a quick demo then we’ll go to questions

Page 29: Seaside Experience Report