SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                 Dynamic Markup and 
                                                                 on­the­fly Components

                                                            binding XML content to Wicket Components

                                                                         Wouter Huijnink
                                                                     Func. Internet Integration
                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                    Structure of this talk

                                                                Introduction
                                                            

                                                                The problem by example
                                                            

                                                                Our pre­Wicket approach
                                                            

                                                                Requirements
                                                            

                                                                Approach
                                                            

                                                                Todo
                                                            


                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                Func. Internet Integration

                                                                Web Applications on Open Source java 
                                                            

                                                                component stack:
                                                                Wicket – Spring – Hibernate – CXF (XFire)
                                                                Using Wicket for 2.5 years now
                                                            

                                                                    component framework ­> OO
                                                                

                                                                    clean separation of markup and code
                                                                

                                                                    accessibility (Ajax fallback)
                                                                


                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                            Triggers

                                                                Request for proposal: generic editing page for 
                                                            

                                                                XSD­defined XML blobs
                                                                New project: application for online examination
                                                            




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                 Common Denominators

                                                                No POJO representation of domain (XML)
                                                            

                                                                dynamic page structure (content dependent)
                                                            

                                                                Wicket components picked at runtime
                                                            

                                                                Requirement: Wicket application in full control
                                                            




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                 The Problem by Example

                                                                Dynamic edit/search forms
                                                            

                                                                User interactions specified in XML
                                                            




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                       Dynamic Forms

                                                                Content repository: objects + metadata
                                                            

                                                                Metadata defined in XSD, stored as XML
                                                            

                                                                Requirement: multi profile support
                                                            

                                                                Requirement: no refactoring required when new 
                                                            

                                                                profile is added by administrator



                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Example: CZP metadata form




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                       XML defined User Interactions

                                                                customer: publisher
                                                            

                                                                educational content
                                                            

                                                                all content is strictly formalized (XML)
                                                            

                                                                Educational Standards applied where possible
                                                            

                                                                IMS Question Type Interaction (QTI) for 
                                                            

                                                                survey / exam style content

                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                           QTI defines

                                                                question
                                                            

                                                                correct answer
                                                            

                                                                interaction types (Choice, Text, Order, ...)
                                                            

                                                                response processing rules
                                                            

                                                                scoring
                                                            




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                Trivial Test Element




                                                                             Question
                                                            What is your preferred Java Web Development 
                                                                             framework?




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Trivial Test Element




                                                            Correct response (needless to say):
                                                                          Wicket




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Trivial Test Element



                                                                   Interaction Type
                                                                  Choice, with options
                                                                        Struts
                                                                       Tapestry
                                                                        Wicket



                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                               Trivial Test Element




                                                                     Response processing
                                                            An exact match is required of the candidate 
                                                                response and the correct response




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                 Trivial Test Element




                                                                               Scoring
                                                            The default score is 0, a correct response gives 
                                                                           you a score of 1




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                     QTI Representation

                                                            <assessmentItem identifier=quot;choicequot; title=quot;Web Frameworkquot;>
                                                              <responseDeclaration identifier=quot;Rquot;>
                                                                <correctResponse>
                                                                  <value>C</value>
                                                                </correctResponse>
                                                              </responseDeclaration>
                                                              <itemBody>
                                                                <p>What is your preferred Java web development framework?</p>
                                                                <choiceInteraction responseIdentifier=quot;Rquot; maxChoices=quot;1quot;>
                                                                  <simpleChoice identifier=quot;Aquot;>Struts</simpleChoice>
                                                                  <simpleChoice identifier=quot;Bquot;>Tapestry</simpleChoice>
                                                                  <simpleChoice identifier=quot;Cquot;>Wicket</simpleChoice>
                                                                </choiceInteraction>
                                                              </itemBody>
                                                            </assessmentItem>



                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                             As XHTML


                                                            <form id=quot;questionFormquot; action=quot;/questionHandlerquot; method=quot;POSTquot;> 
                                                            <p>What is your preferred Java web development framework?</p> 
                                                            <p> 
                                                              <input name=quot;fwquot; type=quot;radioquot; value=quot;Aquot;>Struts</input> <br /> 
                                                              <input name=quot;fwquot; type=quot;radioquot; value=quot;Bquot;>Tapestry</input> <br /> 
                                                              <input name=quot;fwquot; type=quot;radioquot; value=quot;Cquot;>Wicket</input> <br /> 
                                                            </p>
                                                            <p> 
                                                              <input type=quot;submitquot; value=quot;Am I right or am I right?quot; /> 
                                                            </p> 
                                                            </form>




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            In the Browser




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Multiple Interactions




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Drawing Interaction




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Graphic Gap Match




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                    Previous Approach

                                                                Intermediate format: XForms
                                                            

                                                                Mixed frameworks: Wicket + Chiba
                                                            




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Previous Approach




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                Previous Approach ­ Issues

                                                                Chiba hacks required
                                                            

                                                                XForms rather complex
                                                            

                                                                Control hell: both Chiba and Wicket process 
                                                            

                                                                user actions and data




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                              What do we want now?




                                                               To be able to create on­the­fly, dynamic, 
                                                            interactive components, using generic Wicket 
                                                                             components




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                  What do we want now?

                                                                often updated, dynamic content 
                                                            

                                                                containing standardized XML
                                                            

                                                                Object Oriented approach
                                                            

                                                                generic components
                                                            

                                                                properly integrated in Wicket
                                                            




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                        Our Approach

                                                                generate Wicket markup from content and 
                                                            

                                                                return this as the Component's markup
                                                                parse the dynamically created markup
                                                            

                                                                for each markup element add the appropriate 
                                                            

                                                                FormComponent  (CheckBox, TextField, 
                                                                DropDownChoice, ...)


                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Step 1 AutoComponentPanel

                                                                asks for its associated markup
                                                            

                                                                loops over tags, if ComponentTag: call internal, 
                                                            

                                                                overrideable method 

                                                                getMarkupComponent(ComponentTag tag, MarkupStream stream)




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Step 1 AutoComponentPanel


                                                            Default implementation: check for the usual 
                                                            suspects, e.g.

                                                            if (quot;inputquot;.equals(tag.getName()) &&
                                                                quot;submitquot;.equals(tag.getAttr..(quot;typequot;, ..))) {
                                                              return new Button(tag.getId(), ..);
                                                            }




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Step 1 AutoComponentPanel


                                                            The wicket:id of the added components are 
                                                            treated as property expressions that are bound to 
                                                            this component's model.

                                                            <input type=quot;textquot; wicket:id=quot;namequot;/> 
                                                            binds the generated TextField to the model 
                                                            object's name property.

                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Step 2 AssessmentItemPanel

                                                                model: AssessmentItem (generic POJO)
                                                            

                                                                supplies its own markup by transforming the 
                                                            

                                                                contents of its itemBody 
                                                                QTI ­> XSLT ­> XHTML with wicket tags
                                                                extends AutoComponentPanel ­> generated 
                                                            

                                                                wicket tags will automatically be bound to 
                                                                FormComponents

                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Step 2 AssessmentItemPanel


                                                            getMarkupResourceStream snippet:
                                                            Source source = new StreamSource(
                                                                    new StringReader(assessmentItem.getXml()
                                                                    ));
                                                            StringWriter result = new StringWriter();
                                                            ...
                                                            transformer.transform(source, 
                                                                    new StreamResult(result));

                                                            return new StringResourceStream(
                                                                    result.toString());


                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                           QTI revisited

                                                            <assessmentItem identifier=quot;choicequot; title=quot;Web Frameworkquot;>
                                                              <responseDeclaration identifier=quot;Rquot;>
                                                                <correctResponse>
                                                                  <value>C</value>
                                                                </correctResponse>
                                                              </responseDeclaration>
                                                              <itemBody>
                                                                <p>What is your preferred Java web development framework?</p>
                                                                <choiceInteraction responseIdentifier=quot;Rquot; maxChoices=quot;1quot;>
                                                                  <simpleChoice identifier=quot;Aquot;>Struts</simpleChoice>
                                                                  <simpleChoice identifier=quot;Bquot;>Tapestry</simpleChoice>
                                                                  <simpleChoice identifier=quot;Cquot;>Wicket</simpleChoice>
                                                                </choiceInteraction>
                                                              </itemBody>
                                                            </assessmentItem>




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                      Generated markup


                                                            <wicket:panel>
                                                              <div class=quot;qtiItemquot;>
                                                                <p>What is your preferred Java web development framework?</p>
                                                                  <div class=quot;blockInteraction choiceInteractionquot;>
                                                                    <span class=quot;promptquot;/>
                                                                    <div wicket:id=quot;iSession.responseVars.R.cResponsequot;>
                                                                      <label><input value=quot;Aquot; type=quot;radioquot;/>Struts</label>
                                                                      <label><input value=quot;Bquot; type=quot;radioquot;/>Tapestry</label>
                                                                      <label><input value=quot;Cquot; type=quot;radioquot;/>Wicket</label>
                                                                    </div>
                                                                  </div>
                                                                <div class=quot;clrquot;/>
                                                              </div>
                                                            </wicket:panel>



                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                           Binding


                                                            The wicket:id=quot;iSession.responseVars.R.cResponse” 
                                                            markup element is bound to a nested property of 
                                                            the AssessmentItem 

                                                            (which has an ItemSession, which has a 
                                                            Map<String, ResponseVariable>, and a 
                                                            ResponseVariable has a cResponse)

                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                             Result

                                                                All QTI content can be rendered, previously 
                                                            

                                                                entered responses are displayed
                                                                when the user POSTs his response, the 
                                                            

                                                                response is bound automatically to the 
                                                                AssessmentItem domain object
                                                                the Form's onSubmit() doesn't need to do 
                                                            

                                                                any processing, but just persists the 
                                                                AssessmentItem's response part.
                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                                 To Do

                                                                add support for complex QTI interactionTypes
                                                            

                                                                refactor:
                                                            

                                                                    extract code from current project
                                                                

                                                                    make truly generic
                                                                

                                                                    document properly
                                                                

                                                                create small demo app
                                                            

                                                                release
                                                            
                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                   Want to know more?

                                                                Check our sponsor desk for live examples
                                                            

                                                                Wouter Huijnink
                                                            

                                                                wouter@func.nl




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                            Shameless plug: Webical




                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                Shameless plug: Webical

                                                                Open Source web based iCalendar client
                                                            

                                                                Wicket, 
                                                            

                                                                Fully accessible
                                                            

                                                                Ajax add­ons
                                                            

                                                                plugin architecture
                                                            

                                                                http://www.webical.org/
                                                            


                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png
file:///../intern/Standaarden/Logo/groene%20onderbalk.png




                                                                  Q & A (wouter@func.nl)

                                                                Why didn't you ... ?
                                                            

                                                                Wouldn't it have been much nicer if you ... ?
                                                            

                                                                I can't believe you actually ... !
                                                            

                                                                I want to work with you guys! Can I sign up right 
                                                            

                                                                here, right now?



                             November 30th, 2007

file:///../intern/Standaarden/Logo/groene%20onderbalk.png

Mais conteúdo relacionado

Semelhante a Dynamic XML Components in Wicket

HowTo Build an OSGI EJB3 Server
HowTo Build an OSGI EJB3 ServerHowTo Build an OSGI EJB3 Server
HowTo Build an OSGI EJB3 Serverekkehard gentz
 
Day 1 Data Stage Administrator And Director 11.0
Day 1 Data Stage Administrator And Director 11.0Day 1 Data Stage Administrator And Director 11.0
Day 1 Data Stage Administrator And Director 11.0kshanmug2
 
Web 20- 2: Architecture Patterns And Models For The New Internet
Web 20- 2: Architecture Patterns And Models For The New InternetWeb 20- 2: Architecture Patterns And Models For The New Internet
Web 20- 2: Architecture Patterns And Models For The New Internettvawler
 
Semantic Search for Enterprise 2.0
Semantic Search for Enterprise 2.0Semantic Search for Enterprise 2.0
Semantic Search for Enterprise 2.0Alexandre Passant
 
Search Engines and Flash: Secrets, Tricks, and Black Magic
Search Engines and Flash: Secrets, Tricks, and Black MagicSearch Engines and Flash: Secrets, Tricks, and Black Magic
Search Engines and Flash: Secrets, Tricks, and Black Magicguestb1f3a
 
Glassfish Overview Fontys 20090520
Glassfish Overview Fontys 20090520Glassfish Overview Fontys 20090520
Glassfish Overview Fontys 20090520Eugene Bogaart
 
Using Semantics to Improve Corporate Online Communities
Using Semantics to Improve Corporate Online CommunitiesUsing Semantics to Improve Corporate Online Communities
Using Semantics to Improve Corporate Online CommunitiesAlexandre Passant
 
Glassfish Overview for Sogeti 20090225
Glassfish Overview for Sogeti 20090225Glassfish Overview for Sogeti 20090225
Glassfish Overview for Sogeti 20090225Eugene Bogaart
 
Day 2 Data Stage Manager 11.0
Day 2 Data Stage Manager 11.0Day 2 Data Stage Manager 11.0
Day 2 Data Stage Manager 11.0kshanmug2
 
AJUBY Open Source Application Builder
AJUBY Open Source Application BuilderAJUBY Open Source Application Builder
AJUBY Open Source Application Builderajuby
 
How Wiley Uses Word to Invite Authors, Engage Editors, Improve Production, an...
How Wiley Uses Word to Invite Authors, Engage Editors, Improve Production, an...How Wiley Uses Word to Invite Authors, Engage Editors, Improve Production, an...
How Wiley Uses Word to Invite Authors, Engage Editors, Improve Production, an...toc
 
Service Oriented Integration with ServiceMix
Service Oriented Integration with ServiceMixService Oriented Integration with ServiceMix
Service Oriented Integration with ServiceMixghessler
 
Optaros Surf Code Camp Lab 2
Optaros Surf Code Camp Lab 2Optaros Surf Code Camp Lab 2
Optaros Surf Code Camp Lab 2Jeff Potts
 
Progressive EEnhancement [EECI 2011]
Progressive EEnhancement [EECI 2011]Progressive EEnhancement [EECI 2011]
Progressive EEnhancement [EECI 2011]Aaron Gustafson
 
Prototyping Adobe AIR Applications with Fireworks CS4
Prototyping Adobe AIR Applications with Fireworks CS4Prototyping Adobe AIR Applications with Fireworks CS4
Prototyping Adobe AIR Applications with Fireworks CS4Juan Sanchez
 
2009 Q2 WSO2 Technical Update
2009 Q2 WSO2 Technical Update2009 Q2 WSO2 Technical Update
2009 Q2 WSO2 Technical UpdateWSO2
 

Semelhante a Dynamic XML Components in Wicket (20)

HowTo Build an OSGI EJB3 Server
HowTo Build an OSGI EJB3 ServerHowTo Build an OSGI EJB3 Server
HowTo Build an OSGI EJB3 Server
 
Day 1 Data Stage Administrator And Director 11.0
Day 1 Data Stage Administrator And Director 11.0Day 1 Data Stage Administrator And Director 11.0
Day 1 Data Stage Administrator And Director 11.0
 
Web 20- 2: Architecture Patterns And Models For The New Internet
Web 20- 2: Architecture Patterns And Models For The New InternetWeb 20- 2: Architecture Patterns And Models For The New Internet
Web 20- 2: Architecture Patterns And Models For The New Internet
 
Semantic Search for Enterprise 2.0
Semantic Search for Enterprise 2.0Semantic Search for Enterprise 2.0
Semantic Search for Enterprise 2.0
 
Hello Gumbo
Hello GumboHello Gumbo
Hello Gumbo
 
Search Engines and Flash: Secrets, Tricks, and Black Magic
Search Engines and Flash: Secrets, Tricks, and Black MagicSearch Engines and Flash: Secrets, Tricks, and Black Magic
Search Engines and Flash: Secrets, Tricks, and Black Magic
 
Glassfish Overview Fontys 20090520
Glassfish Overview Fontys 20090520Glassfish Overview Fontys 20090520
Glassfish Overview Fontys 20090520
 
Using Semantics to Improve Corporate Online Communities
Using Semantics to Improve Corporate Online CommunitiesUsing Semantics to Improve Corporate Online Communities
Using Semantics to Improve Corporate Online Communities
 
SCSS Styleguide
SCSS StyleguideSCSS Styleguide
SCSS Styleguide
 
Glassfish Overview for Sogeti 20090225
Glassfish Overview for Sogeti 20090225Glassfish Overview for Sogeti 20090225
Glassfish Overview for Sogeti 20090225
 
OSGi Presentation
OSGi PresentationOSGi Presentation
OSGi Presentation
 
Day 2 Data Stage Manager 11.0
Day 2 Data Stage Manager 11.0Day 2 Data Stage Manager 11.0
Day 2 Data Stage Manager 11.0
 
AJUBY Open Source Application Builder
AJUBY Open Source Application BuilderAJUBY Open Source Application Builder
AJUBY Open Source Application Builder
 
How Wiley Uses Word to Invite Authors, Engage Editors, Improve Production, an...
How Wiley Uses Word to Invite Authors, Engage Editors, Improve Production, an...How Wiley Uses Word to Invite Authors, Engage Editors, Improve Production, an...
How Wiley Uses Word to Invite Authors, Engage Editors, Improve Production, an...
 
Service Oriented Integration with ServiceMix
Service Oriented Integration with ServiceMixService Oriented Integration with ServiceMix
Service Oriented Integration with ServiceMix
 
Javascript
JavascriptJavascript
Javascript
 
Optaros Surf Code Camp Lab 2
Optaros Surf Code Camp Lab 2Optaros Surf Code Camp Lab 2
Optaros Surf Code Camp Lab 2
 
Progressive EEnhancement [EECI 2011]
Progressive EEnhancement [EECI 2011]Progressive EEnhancement [EECI 2011]
Progressive EEnhancement [EECI 2011]
 
Prototyping Adobe AIR Applications with Fireworks CS4
Prototyping Adobe AIR Applications with Fireworks CS4Prototyping Adobe AIR Applications with Fireworks CS4
Prototyping Adobe AIR Applications with Fireworks CS4
 
2009 Q2 WSO2 Technical Update
2009 Q2 WSO2 Technical Update2009 Q2 WSO2 Technical Update
2009 Q2 WSO2 Technical Update
 

Último

SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 

Último (20)

SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 

Dynamic XML Components in Wicket

  • 1. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Dynamic Markup and  on­the­fly Components binding XML content to Wicket Components Wouter Huijnink Func. Internet Integration November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 2. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Structure of this talk Introduction  The problem by example  Our pre­Wicket approach  Requirements  Approach  Todo  November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 3. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Func. Internet Integration Web Applications on Open Source java   component stack: Wicket – Spring – Hibernate – CXF (XFire) Using Wicket for 2.5 years now  component framework ­> OO  clean separation of markup and code  accessibility (Ajax fallback)  November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 4. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Triggers Request for proposal: generic editing page for   XSD­defined XML blobs New project: application for online examination  November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 5. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Common Denominators No POJO representation of domain (XML)  dynamic page structure (content dependent)  Wicket components picked at runtime  Requirement: Wicket application in full control  November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 6. file:///../intern/Standaarden/Logo/groene%20onderbalk.png The Problem by Example Dynamic edit/search forms  User interactions specified in XML  November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 7. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Dynamic Forms Content repository: objects + metadata  Metadata defined in XSD, stored as XML  Requirement: multi profile support  Requirement: no refactoring required when new   profile is added by administrator November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 8. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Example: CZP metadata form November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 9. file:///../intern/Standaarden/Logo/groene%20onderbalk.png XML defined User Interactions customer: publisher  educational content  all content is strictly formalized (XML)  Educational Standards applied where possible  IMS Question Type Interaction (QTI) for   survey / exam style content November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 10. file:///../intern/Standaarden/Logo/groene%20onderbalk.png QTI defines question  correct answer  interaction types (Choice, Text, Order, ...)  response processing rules  scoring  November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 11. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Trivial Test Element Question What is your preferred Java Web Development  framework? November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 12. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Trivial Test Element Correct response (needless to say): Wicket November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 13. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Trivial Test Element Interaction Type Choice, with options Struts Tapestry Wicket November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 14. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Trivial Test Element Response processing An exact match is required of the candidate  response and the correct response November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 15. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Trivial Test Element Scoring The default score is 0, a correct response gives  you a score of 1 November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 16. file:///../intern/Standaarden/Logo/groene%20onderbalk.png QTI Representation <assessmentItem identifier=quot;choicequot; title=quot;Web Frameworkquot;>   <responseDeclaration identifier=quot;Rquot;>     <correctResponse>       <value>C</value>     </correctResponse>   </responseDeclaration>   <itemBody>     <p>What is your preferred Java web development framework?</p>     <choiceInteraction responseIdentifier=quot;Rquot; maxChoices=quot;1quot;>       <simpleChoice identifier=quot;Aquot;>Struts</simpleChoice>       <simpleChoice identifier=quot;Bquot;>Tapestry</simpleChoice>       <simpleChoice identifier=quot;Cquot;>Wicket</simpleChoice>     </choiceInteraction>   </itemBody> </assessmentItem> November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 17. file:///../intern/Standaarden/Logo/groene%20onderbalk.png As XHTML <form id=quot;questionFormquot; action=quot;/questionHandlerquot; method=quot;POSTquot;>  <p>What is your preferred Java web development framework?</p>  <p>    <input name=quot;fwquot; type=quot;radioquot; value=quot;Aquot;>Struts</input> <br />    <input name=quot;fwquot; type=quot;radioquot; value=quot;Bquot;>Tapestry</input> <br />    <input name=quot;fwquot; type=quot;radioquot; value=quot;Cquot;>Wicket</input> <br />  </p> <p>    <input type=quot;submitquot; value=quot;Am I right or am I right?quot; />  </p>  </form> November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 18. file:///../intern/Standaarden/Logo/groene%20onderbalk.png In the Browser November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 19. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Multiple Interactions November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 20. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Drawing Interaction November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 21. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Graphic Gap Match November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 22. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Previous Approach Intermediate format: XForms  Mixed frameworks: Wicket + Chiba  November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 23. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Previous Approach November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 24. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Previous Approach ­ Issues Chiba hacks required  XForms rather complex  Control hell: both Chiba and Wicket process   user actions and data November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 25. file:///../intern/Standaarden/Logo/groene%20onderbalk.png What do we want now? To be able to create on­the­fly, dynamic,  interactive components, using generic Wicket  components November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 26. file:///../intern/Standaarden/Logo/groene%20onderbalk.png What do we want now? often updated, dynamic content   containing standardized XML  Object Oriented approach  generic components  properly integrated in Wicket  November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 27. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Our Approach generate Wicket markup from content and   return this as the Component's markup parse the dynamically created markup  for each markup element add the appropriate   FormComponent  (CheckBox, TextField,  DropDownChoice, ...) November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 28. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Step 1 AutoComponentPanel asks for its associated markup  loops over tags, if ComponentTag: call internal,   overrideable method  getMarkupComponent(ComponentTag tag, MarkupStream stream) November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 29. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Step 1 AutoComponentPanel Default implementation: check for the usual  suspects, e.g. if (quot;inputquot;.equals(tag.getName()) &&     quot;submitquot;.equals(tag.getAttr..(quot;typequot;, ..))) {   return new Button(tag.getId(), ..); } November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 30. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Step 1 AutoComponentPanel The wicket:id of the added components are  treated as property expressions that are bound to  this component's model. <input type=quot;textquot; wicket:id=quot;namequot;/>  binds the generated TextField to the model  object's name property. November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 31. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Step 2 AssessmentItemPanel model: AssessmentItem (generic POJO)  supplies its own markup by transforming the   contents of its itemBody  QTI ­> XSLT ­> XHTML with wicket tags extends AutoComponentPanel ­> generated   wicket tags will automatically be bound to  FormComponents November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 32. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Step 2 AssessmentItemPanel getMarkupResourceStream snippet: Source source = new StreamSource(         new StringReader(assessmentItem.getXml()         )); StringWriter result = new StringWriter(); ... transformer.transform(source,          new StreamResult(result)); return new StringResourceStream(         result.toString()); November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 33. file:///../intern/Standaarden/Logo/groene%20onderbalk.png QTI revisited <assessmentItem identifier=quot;choicequot; title=quot;Web Frameworkquot;>   <responseDeclaration identifier=quot;Rquot;>     <correctResponse>       <value>C</value>     </correctResponse>   </responseDeclaration>   <itemBody>     <p>What is your preferred Java web development framework?</p>     <choiceInteraction responseIdentifier=quot;Rquot; maxChoices=quot;1quot;>       <simpleChoice identifier=quot;Aquot;>Struts</simpleChoice>       <simpleChoice identifier=quot;Bquot;>Tapestry</simpleChoice>       <simpleChoice identifier=quot;Cquot;>Wicket</simpleChoice>     </choiceInteraction>   </itemBody> </assessmentItem> November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 34. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Generated markup <wicket:panel>   <div class=quot;qtiItemquot;>     <p>What is your preferred Java web development framework?</p>       <div class=quot;blockInteraction choiceInteractionquot;>         <span class=quot;promptquot;/>         <div wicket:id=quot;iSession.responseVars.R.cResponsequot;>           <label><input value=quot;Aquot; type=quot;radioquot;/>Struts</label>           <label><input value=quot;Bquot; type=quot;radioquot;/>Tapestry</label>           <label><input value=quot;Cquot; type=quot;radioquot;/>Wicket</label>         </div>       </div>     <div class=quot;clrquot;/>   </div> </wicket:panel> November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 35. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Binding The wicket:id=quot;iSession.responseVars.R.cResponse”  markup element is bound to a nested property of  the AssessmentItem  (which has an ItemSession, which has a  Map<String, ResponseVariable>, and a  ResponseVariable has a cResponse) November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 36. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Result All QTI content can be rendered, previously   entered responses are displayed when the user POSTs his response, the   response is bound automatically to the  AssessmentItem domain object the Form's onSubmit() doesn't need to do   any processing, but just persists the  AssessmentItem's response part. November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 37. file:///../intern/Standaarden/Logo/groene%20onderbalk.png To Do add support for complex QTI interactionTypes  refactor:  extract code from current project  make truly generic  document properly  create small demo app  release  November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 38. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Want to know more? Check our sponsor desk for live examples  Wouter Huijnink  wouter@func.nl November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 39. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Shameless plug: Webical November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 40. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Shameless plug: Webical Open Source web based iCalendar client  Wicket,   Fully accessible  Ajax add­ons  plugin architecture  http://www.webical.org/  November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png
  • 41. file:///../intern/Standaarden/Logo/groene%20onderbalk.png Q & A (wouter@func.nl) Why didn't you ... ?  Wouldn't it have been much nicer if you ... ?  I can't believe you actually ... !  I want to work with you guys! Can I sign up right   here, right now? November 30th, 2007 file:///../intern/Standaarden/Logo/groene%20onderbalk.png