Ben Gidley presented on how Tapestry was used to build the SeeSaw video on demand website. The initial site was built on Struts but later converted to Tapestry to better support reusable components with state and behavior. A prototype was first built to prove out Tapestry. The team was then trained on Tapestry and the site was gradually converted page by page. Customizations were also made, such as for caching, JavaScript combining, and Flash integration. In the end, Tapestry enabled reusability across the site and good performance under load.
Comparing JVM Web Frameworks - Jfokus 2012Matt Raible
Comparing JVM Web Frameworks Presentation from Jfokus Conference in Stockholm, Sweden. Compares many different JVM-based web frameworks, ranks them based on 20 different criteria and compares the Pros, Cons and other stats of the top 5.
Read more about this presentation at:
http://raibledesigns.com/rd/entry/comparing_web_frameworks_and_html5
Comparing JVM Web Frameworks - Jfokus 2012Matt Raible
Comparing JVM Web Frameworks Presentation from Jfokus Conference in Stockholm, Sweden. Compares many different JVM-based web frameworks, ranks them based on 20 different criteria and compares the Pros, Cons and other stats of the top 5.
Read more about this presentation at:
http://raibledesigns.com/rd/entry/comparing_web_frameworks_and_html5
Thirty years ago, we were developing in Oracle Forms on top of an Oracle database, and whilst the Oracle database and PL/SQL remain today, over the last three decades we have needed to adopt many new UI technologies; ADF, APEX, MAF and JET and with the current JavaScript dominance more organisations have now moved outside of Oracle to React and Angular.
The volatility of the front-end shouldn’t mean having to replace the entire application. We need an approach that enables new UI advances to co-exist with previous technology generations whilst offering a seamless user experience, one that fully leverages the stable database layer. We can migrate in smaller, well-planned stages that don’t have the complexities of ‘micro frontends’, have a great developer experience and leave the lower layers of the technology stack undisturbed.
In this session we will look at some examples of products that we are currently building that consider the modernisation process for now and for the future. We will focus on UI technologies such as Oracle JET, React and SolidJS, whilst considering concepts such as Headless UI, UI Component Libraries, and Integration layers that decouple UI development from the database layer.
Learn How to Use Atomic Design to Make Your Site Manageable and AdaptableAcquia
<p>Future-proof your website, speed its delivery and promote consistency by building with Atomic Design principles. Modern websites assume more business responsibility and importance than ever before. As a result, they’ve grown into immensely complex organisms. With their greater size, you now need formal systems to make large websites manageable again - which is why today’s top digital organizations are turning to Atomic design.</p>
<p>Atomic design is a methodology of creating and maintaining design systems that rely on components to produce fully functioning and scalable pages. By building and reusing atoms, you can accelerate your team’s workflow, keep code consistent, avoid redundant work and streamline future site updates. Join FFW’s UK Technical Director and Acquia’s UX Manager to learn high level concepts and anecdotal deep-dives to see how Atomic Design can make your organization more efficient.</p>
<p>You’ll come away with:</p>
<ul>
<li>An introduction and overview of Atomic Design</li>
<li>The tangible benefits of Atomic Design: from content reusability to built in consistency</li>
<li>How we use Atomic Design and how you can use Atomic Design too</li></ul>
My Stackato presentation given to the CopenhagenJS user group. Basic examples were implemented in Node.
More information available at: https://logiclab.jira.com/wiki/display/OPEN/Stackato
This is my presentation of ActiveStates stackato given to the Copenhagen Perl Mongers
More information available at: https://logiclab.jira.com/wiki/display/OPEN/Stackato
Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.WO Community
This session will go over why I chose WO and WOnder as my application foundation, and how I applied the best practices from some of the best in our business to build my product. How I setup my applications and frameworks to maximize reuse and flexibility. And I will review other processes that allows me to run my business as a one plus (?) person shop.
Pavimentando el camino con Jakarta EE 9 y Apache TomEE César Hernández
Jakarta EE 9 introduce la migración del paquete javax a jakarta en la plataforma, impactando en el ecosistema y, por lo tanto, en los usuarios finales. Esta sesión cubre antecedentes, recomendaciones y estrategias basadas en código para ayudarlo a navegar por la migración de sus aplicaciones Java Enterprise usando Apache TomEE.
'Full Stack Kotlin' Workshop at KotlinConfGarth Gilmour
Slides from my workshop on 'Building a Full Stack Web App in Kotlin'. Note these are only talking points, the full set of materials is available at:
https://gitlab.com/instil-training/kotlinconf-workshop-2018
Pavimentando el Camino con Jakarta EE 9 y Apache TomEE 9.0.0César Hernández
Jakarta EE 9 introduce la migración del paquete javax a jakarta en la plataforma, lo que impacta en el ecosistema y, por lo tanto, en los usuarios finales. Esta sesión cubre antecedentes, recomendaciones y estrategias basadas en código para ayudarlo a navegar por la migración de sus aplicaciones Java Enterprise usando Apache TomEE.
Paving the way with Jakarta EE and apache TomEE at cloudconferencedayCésar Hernández
Jakarta EE 9 introduces the migration of the javax to jakarta package in the platform, impacting the ecosystem and, therefore, the end-users. This session covers background, recommendations and code driven strategies to help you navigate the migration of your Java Enterprise applications using Apache TomEE.
Presentation from OpenStack Summit Tokyo
Also check the video from
https://www.openstack.org/summit/tokyo-2015/videos/presentation/ntts-journey-with-openstack
My session slides from SharePoint Saturday UK IT Pro track. See my blog for more details and the demonstration videos. http://www.myfatblog.co.uk/index.php/2013/11/sharepoint-saturday-uk-wrap-up/
This slide is translated version. Originally it was written in Korean. (http://www.slideshare.net/saltynut/how-do-we-drive-tech-changes )
It describes how do we drive technical changes onto our organizations had used old-fashioned java combinations(Java 1.6+Spring 3.x+MyBatis) and monolithic architecture.
Key point is what we need to do to drive changes, and I'll discuss what we did during Phase1 and what we are doing at Phase 2 for architecture, frontend, backend, methodologies/process.
Phase1
- Architecture : Frontend / Backend Separation
- Frontend : Angular.js, Grunt, Bower
- Backend : Java 1.7/Spring4, ORM
- Methodology/Process : Scrum, Git
Phase2
- Architecture : Micro-Service Architecture(MSA)
- Frontend : Content Router, E2E Test
- Backend : Polyglot, Multi-Framework
- Methodology/Process : Scrum+JIRA, Git Branch Policy, Pair Programming, Code Workshop
5 things cucumber is bad at by Richard LawrenceSkills Matter
This talk will look at 5 things Cucumber’s bad at, why that’s a good thing, and what it tells us about Cucumber’s sweet spot in a team’s toolkit.
Many times, when people complain about something Cucumber’s not good at, they’re unwittingly describing something Cucumber shouldn't be good at. They’re revealing that they don’t quite understand BDD and Cucumber’s role in it.
Cucumber is the world's most misunderstood collaboration tool and people need to hear this over and over again.
Patterns for slick database applicationsSkills Matter
Slick is Typesafe's open source database access library for Scala. It features a collection-style API, compact syntax, type-safe, compositional queries and explicit execution control. Community feedback helped us to identify common problems developers are facing when writing Slick applications. This talk suggests particular solutions to these problems. We will be looking at reducing boiler-plate, re-using code between queries, efficiently modeling object references and more.
Thirty years ago, we were developing in Oracle Forms on top of an Oracle database, and whilst the Oracle database and PL/SQL remain today, over the last three decades we have needed to adopt many new UI technologies; ADF, APEX, MAF and JET and with the current JavaScript dominance more organisations have now moved outside of Oracle to React and Angular.
The volatility of the front-end shouldn’t mean having to replace the entire application. We need an approach that enables new UI advances to co-exist with previous technology generations whilst offering a seamless user experience, one that fully leverages the stable database layer. We can migrate in smaller, well-planned stages that don’t have the complexities of ‘micro frontends’, have a great developer experience and leave the lower layers of the technology stack undisturbed.
In this session we will look at some examples of products that we are currently building that consider the modernisation process for now and for the future. We will focus on UI technologies such as Oracle JET, React and SolidJS, whilst considering concepts such as Headless UI, UI Component Libraries, and Integration layers that decouple UI development from the database layer.
Learn How to Use Atomic Design to Make Your Site Manageable and AdaptableAcquia
<p>Future-proof your website, speed its delivery and promote consistency by building with Atomic Design principles. Modern websites assume more business responsibility and importance than ever before. As a result, they’ve grown into immensely complex organisms. With their greater size, you now need formal systems to make large websites manageable again - which is why today’s top digital organizations are turning to Atomic design.</p>
<p>Atomic design is a methodology of creating and maintaining design systems that rely on components to produce fully functioning and scalable pages. By building and reusing atoms, you can accelerate your team’s workflow, keep code consistent, avoid redundant work and streamline future site updates. Join FFW’s UK Technical Director and Acquia’s UX Manager to learn high level concepts and anecdotal deep-dives to see how Atomic Design can make your organization more efficient.</p>
<p>You’ll come away with:</p>
<ul>
<li>An introduction and overview of Atomic Design</li>
<li>The tangible benefits of Atomic Design: from content reusability to built in consistency</li>
<li>How we use Atomic Design and how you can use Atomic Design too</li></ul>
My Stackato presentation given to the CopenhagenJS user group. Basic examples were implemented in Node.
More information available at: https://logiclab.jira.com/wiki/display/OPEN/Stackato
This is my presentation of ActiveStates stackato given to the Copenhagen Perl Mongers
More information available at: https://logiclab.jira.com/wiki/display/OPEN/Stackato
Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.WO Community
This session will go over why I chose WO and WOnder as my application foundation, and how I applied the best practices from some of the best in our business to build my product. How I setup my applications and frameworks to maximize reuse and flexibility. And I will review other processes that allows me to run my business as a one plus (?) person shop.
Pavimentando el camino con Jakarta EE 9 y Apache TomEE César Hernández
Jakarta EE 9 introduce la migración del paquete javax a jakarta en la plataforma, impactando en el ecosistema y, por lo tanto, en los usuarios finales. Esta sesión cubre antecedentes, recomendaciones y estrategias basadas en código para ayudarlo a navegar por la migración de sus aplicaciones Java Enterprise usando Apache TomEE.
'Full Stack Kotlin' Workshop at KotlinConfGarth Gilmour
Slides from my workshop on 'Building a Full Stack Web App in Kotlin'. Note these are only talking points, the full set of materials is available at:
https://gitlab.com/instil-training/kotlinconf-workshop-2018
Pavimentando el Camino con Jakarta EE 9 y Apache TomEE 9.0.0César Hernández
Jakarta EE 9 introduce la migración del paquete javax a jakarta en la plataforma, lo que impacta en el ecosistema y, por lo tanto, en los usuarios finales. Esta sesión cubre antecedentes, recomendaciones y estrategias basadas en código para ayudarlo a navegar por la migración de sus aplicaciones Java Enterprise usando Apache TomEE.
Paving the way with Jakarta EE and apache TomEE at cloudconferencedayCésar Hernández
Jakarta EE 9 introduces the migration of the javax to jakarta package in the platform, impacting the ecosystem and, therefore, the end-users. This session covers background, recommendations and code driven strategies to help you navigate the migration of your Java Enterprise applications using Apache TomEE.
Presentation from OpenStack Summit Tokyo
Also check the video from
https://www.openstack.org/summit/tokyo-2015/videos/presentation/ntts-journey-with-openstack
My session slides from SharePoint Saturday UK IT Pro track. See my blog for more details and the demonstration videos. http://www.myfatblog.co.uk/index.php/2013/11/sharepoint-saturday-uk-wrap-up/
This slide is translated version. Originally it was written in Korean. (http://www.slideshare.net/saltynut/how-do-we-drive-tech-changes )
It describes how do we drive technical changes onto our organizations had used old-fashioned java combinations(Java 1.6+Spring 3.x+MyBatis) and monolithic architecture.
Key point is what we need to do to drive changes, and I'll discuss what we did during Phase1 and what we are doing at Phase 2 for architecture, frontend, backend, methodologies/process.
Phase1
- Architecture : Frontend / Backend Separation
- Frontend : Angular.js, Grunt, Bower
- Backend : Java 1.7/Spring4, ORM
- Methodology/Process : Scrum, Git
Phase2
- Architecture : Micro-Service Architecture(MSA)
- Frontend : Content Router, E2E Test
- Backend : Polyglot, Multi-Framework
- Methodology/Process : Scrum+JIRA, Git Branch Policy, Pair Programming, Code Workshop
5 things cucumber is bad at by Richard LawrenceSkills Matter
This talk will look at 5 things Cucumber’s bad at, why that’s a good thing, and what it tells us about Cucumber’s sweet spot in a team’s toolkit.
Many times, when people complain about something Cucumber’s not good at, they’re unwittingly describing something Cucumber shouldn't be good at. They’re revealing that they don’t quite understand BDD and Cucumber’s role in it.
Cucumber is the world's most misunderstood collaboration tool and people need to hear this over and over again.
Patterns for slick database applicationsSkills Matter
Slick is Typesafe's open source database access library for Scala. It features a collection-style API, compact syntax, type-safe, compositional queries and explicit execution control. Community feedback helped us to identify common problems developers are facing when writing Slick applications. This talk suggests particular solutions to these problems. We will be looking at reducing boiler-plate, re-using code between queries, efficiently modeling object references and more.
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmSkills Matter
Metascala is a tiny metacircular Java Virtual Machine (JVM) written in the Scala programming language. Metascala is barely 3000 lines of Scala, and is complete enough that it is able to interpret itself metacircularly. Being written in Scala and compiled to Java bytecode, the Metascala JVM requires a host JVM in order to run.
The goal of Metascala is to create a platform to experiment with the JVM: a 3000 line JVM written in Scala is probably much more approachable than the 1,000,000 lines of C/C++ which make up HotSpot, the standard implementation, and more amenable to implementing fun features like continuations, isolates or value classes. The 3000 lines of code gives you:
The bytecode interpreter, together with all the run-time data structures
A stack-machine to SSA register-machine bytecode translator
A custom heap, complete with a stop-the-world, copying garbage collector
Implementations of parts of the JVM's native interface
Although it is far from a complete implementation, Metascala already provides the ability to run untrusted bytecode securely (albeit slowly), since every operation which could potentially cause harm (including memory allocations and CPU usage) is virtualized and can be controlled. Ongoing work includes tightening of the security guarantees, improving compatibility and increasing performance.
ENJOYIN
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Skills Matter
Code Quotations: Code-as-Data for F#
This tutorial will cover F# Code Quotations in-depth. You'll learn what Code Quotations are, how to use them, and where to apply them in your applications. We'll work through several real-world examples to highlight the important features -- and potential pitfalls -- of Code Quotations.
Cukeup nyc ian dees on elixir, erlang, and cucumberlSkills Matter
Elixir, Erlang, and Cucumberl
Elixir is a new Ruby-inspired programming language that uses the powerful concurrent machinery of Erlang behind the scenes. Cucumberl is a port of Cucumber to Erlang. Let's see what happens when we put them together.
In this talk, we'll discuss:
How Erlang's concurrency makes it easier to write robust programs
Elixir's approachable syntax
How to test Erlang and Elixir programs using Cucumberl
Attendees will walk away with a solid introduction to the principles of Erlang, and an appreciation of the way Elixir brings the joy of Ruby to the solidity of the Erlang runtime.
Cukeup nyc peter bell on getting started with cucumber.jsSkills Matter
Cukeup NYC. Peter Bell on Getting started with cucumber.js
Ever wished you could use cucumber in your javascript apps? In this talk we'll look at the current state of play of cucumber js, when you should and shouldn't use it, and how to get started writing your step definitions in javascript.
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Skills Matter
In this engaging experience report, we will present 3 different views – Developer, Tester, Business Analyst – of implementing Acceptance Test Driven Development in a complex, data-driven domain. Hear how we used ATDD for building a ubiquitous language across the entire team, promoting faster feedback, and cultivating a culture where product owners were deeply invested in the quality of both every deliverable and the system as a whole.
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Skills Matter
In this tutorial, Phil and Rachel will introduce you to the Try F# samples giving you exposure to, and an understanding of, how F# tackles some real-world scenarios. We'll help you explore, generate, and just play around with code samples, as well as talk you through some of the key principles of F#. By the end of this session, you'll have gone from zero to data science in only a few hours!
Progressive f# tutorials nyc don syme on keynote f# in the open source worldSkills Matter
F# is a powerful open-source language which Microsoft, other companies and the F# community all contribute to. In this talk, Don will discuss how the “F# space” has recently opened up significantly in interesting ways. F# now includes contributions that range from Cloud IDE platforms, Cloud Compute frameworks, Data interoperability components, Cross-platform execution, Try F#, MonoDevelop, and even Emacs editor integration with surprising tooling support, as well as the Visual F# tools from Microsoft and the broader NuGet package ecosystem. Don will also talk about some of the latest contributions from Microsoft Research, including new type provider components for F#, and describe how his team work with the Visual F# team and other teams around Microsoft. There will also be demos of some fun new stuff that’s been going on with F# at MSR and the community.
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Skills Matter
Would you like to learn how to make your software testing practices more effective? And how to use your testing strategy to better capture and reflect customer requirements? Gojko Adzic takes a critical look at the effectiveness of current software testing practices and proposes strategies to make it much more effective.
Dmitry mozorov on code quotations code as-data for f#Skills Matter
Code Quotations: Code-as-Data for F#
This tutorial will cover F# Code Quotations in-depth. You'll learn what Code Quotations are, how to use them, and where to apply them in your applications. We'll work through several real-world examples to highlight the important features -- and potential pitfalls -- of Code Quotations.
Simon Peyton Jones: Managing parallelismSkills Matter
If you want to program a parallel computer, it obviously makes sense to start with a computational paradigm in which parallelism is the default (ie functional programming), rather than one in which computation is based on sequential flow of control (the imperative paradigm). And yet, and yet ... functional programmers have been singing this tune since the 1980s, but do not yet rule the world. In this talk I’ll say why I think parallelism is too complex a beast to be slain at one blow, and how we are going to be driven, willy-nilly, towards a world in which side effects are much more tightly controlled than now. I’ll sketch a whole range of ways of writing parallel program in a functional paradigm (implicit parallelism, transactional memory, data parallelism, DSLs for GPUs, distributed processes, etc, etc), illustrating with examples from the rapidly moving Haskell community, and identifying some of the challenges we need to tackle.
1. Tapestry In Action
(for real)
Ben Gidley
Senior Technical Architect - ioko
2. Introductions….
• Presenter: Ben Gidley – Senior Technical Architect at
ioko
• ioko: A systems integrator specialising in the media
market. Responsible for Sky Player, 4OD, ITV Player and
bits of iPlayer
• SeeSaw: A Video on Demand (VOD) website build by
ioko. This has gone under a number of names including
‘Project Kangaroo’
3. Topics
• Some background about SeeSaw
• How and why we picked tapestry
• How we converted the site
• Some of our key customisations
• How we though it all worked out
5. A bit of history
Project Kangaroo started July 2007 as joint venture
between BBC, ITV and C4
The initial brief was to take the 4OD platform and share it
This didn’t last long! A new site built on the core ideas
from 4OD was required
Kangaroo started building the site on Struts 1, Spring and
Hibernate – the same technology stack as 4OD
7. The 1 st Framework Choice
• We considered Tapestry 5 at at the start of Kangaroo
but ruled it out as it was in early beta
• We considered Tapestry 4 and ruled it out as Tapestry
5 was coming and we didn’t want to have to convert.
• The plan at that time said we would launch by Jan 2008
(six months) so we picked Struts 1 as ioko had lots of
staff skilled in it
• We did design the site around a 3 tier model to let us
switch UI framework later
• We did expect we would want to take advantage of
better UI frameworks over time
9. Our Pain Point
• The Kangaroo project carried on into 2008 and the
timelines kept moving back (mainly due to business issues)
• Towards the end of the year the site was complete but
couldn’t be launched for at least 6 months due to being
investigated as a monopoly
• At this point we pitched changing the framework of the
UI to better support new features going forward
• We had been struggling to add more and more complex
AJAX behaviours to our struts/tiles based site
10. The big problem with
struts and tiles
The big problem for us was components with STATE and
BEHAVIOUR
We had lot of reusable modules (implemented as tiles) that
the CMS allowed to be moved around the site
This becomes very hard in struts as it doesn’t provide
infrastructure to support this (e.g. URL management,
state management)
13. The Solution
Tapestry has a coding model that allows
components with state and behaviour - both
client and server side
Components in web-sites are really powerful –
they let us build complex and re-usable
functionality
We did look at other frameworks such as JSF and
Wicket, but settled on Tapestry as we liked the
syntax and were convinced the performance
was good enough
14. Page
Class
TML
T5 Model
Each Page can contain N components
Class
Component
TML
Each Component can contain N components
16. The conversion challenge
Once we had decided to switch we had a huge challenge
• We had a large site (larger than the current
SeeSaw.com) that was tested and worked
• We didn’t want to start from scratch
• We still had to keep delivering new ‘business
functionality’
• We had a team of developers who mostly knew Struts
and Spring
17. The first POC
Our first step was to build a POC
• We needed a beta registration application and decided
to build it in T5
• This was a simple 3 dynamic page application that
gathered user details
• We used this to prove we could build a re-usable
component and get all the libraries we use integrated
• This application later was used in production
18. Converting the team
We had to teach our whole team tapestry we
kicked this off with a training course run by
Howard Lewis-Ship which got people up to
speed with the basics
We then started converting the application and
allowed people to learn ‘on the job’.
People on the team learnt the framework at
different speeds. We got those who got it
quicker to help those who took longer
There is definitely an ‘unlearning’ exercise for
those who are used to struts
19. Converting the site
The website code was originally structured as below
Spring
Hibernate
Struts and Business Business
SOLR
Tiles Facade Implementation
Quova
20. Converting the site
We changed our application to run Tapestry and Struts side
by side
Spring
Struts and Hibernate
Tiles Business Business
SOLR
Facade Implementation
T5 Pages
Quova
Tapestry IOC
21. Tapestry-ioc vs Spring
• We have got both Tapestry-ioc and Spring in the system
- why???
• They are both IOC containers, the both can wire beans
into pages
• Tapestry-ioc has a really neat XML less syntax and
supports combining modules in a way spring just doesn’t
• Spring has loads of helper libraries and is much most
commonly used
• So we use both
22. Converting the site
It is not difficult to run struts and tapestry in the same
application
Once we had this running we could
• Convert the site pages one at a time
• Use tapestry-spring to write our tapestry pages against
our existing spring beans
• Write new code in tapestry and tapestry-ioc
23. Extending the framework
Tapestry has a lot of feature out of the box but there were
a number of things we wanted it didn’t do so we started
to extend the framework.
The tapestry-ioc contribution and override methodology
makes extending the framework possible. It isn’t always
easy as it can be hard to find out what you need to
change!
24. Cache Control
Our site implements the Yahoo Performance Guidelines - so
we want to set cache headers on all pages.
We want to control this via an easy mechanism
We decided to implement this with Annotations in a library
To use it you just add
@CacheControl(cacheType =
CacheType.FAR_FUTURE) to your page
Or
cacheControlSupport.setCacheType
(CacheType.NONE);
To your AJAX event
25. Cache Control
To implement this in tapestry we
• Added a PageRenderRequestFilter to look up the
annotation
• Put the annotation value into a PerThread service
(CacheControlSupport)
• After render in MarkupRendererFilter read the
annotation and write the headers
The code for this is open source and at
tapestry.ioko.com
The hardest part of writing this was to find out where
to plug in the logic!
26. Caching
Our site heavily depends on caching to operate
under peak loads. We have multiple layers of
caching
EH Cache
Whole Page and Partial Page Materialised
AJAX Cache Cache Views
Zeus Tapestry Business Oracle
Hibernate
Objects
The partial page cache is a great example of a
custom tapestry component
27. Caching
The partial page cache listens to tapestry as it
renders areas of the page and stores the
generated HTML between requests keyed on a
configurable variable (so it can be user specific)
On subsequent calls it then short cuts the
rendering and returns the HTML string and
replays key API calls (e.g. to RenderSupport) to
allow the page to render
This can save substantially on the work required
to deliver a ‘personalised’ page.
28. Combination of JavaScript
and CSS
Tapestry supplies the @IncludeJavascript annotation to
allow javascripts to be included in a component
In 5.1 it assembles that javascript into a single ‘combined’
file per page.
This is a really nice mechanism for development but in
production has a number of issues
29. Combination of JavaScript
and CSS
In theory combining JS is a good idea
Prototype.js Tapestry.js Component1.js Component2.js
However if you have pages that differ by one or two
components you end up downloading several copies of
Prototype.js and Tapestry.js
Prototype.js Tapestry.js Component1.js Component3.js
30. Combination of JavaScript
and CSS
We decided to (reluctantly) abandon using
@IncludeJavascript.
Instead we have a Dispatcher that builds a single
Global.js and Global.css from all our component
javascript files.
This approach means users get all our javascript/css
in a single hit, but on second page render they
don’t need any more
We further improve the experience by compressing
the javascript/css (on the fly in development,
statically in production) with YUI Compressor
31. Combination of JavaScript
and CSS
This combination is really worth it – this site is quite
JavaScript heavy
- Compressing the JavaScript knocks 7 seconds off
the page render time
- Combining the JavaScript knocks 3 seconds off the
page render time
The downside is we now have to declare our
Javascript/CSS.
There is work in progress to fix this issue in
Tapestry 5.2 – though the solution is still being
debated.
32. Flash Integration
Our site uses a lot of flash and we wanted to be able to
feed it data via AJAX after page load
This is really easy in Tapestry – you create an event handler
on the component/page, call it direct from flash and
return JSON
There is a small component that ‘helps’ with this open
sourced at tapestry.ioko.com
The component includes the swfobject library to make it
easy to embed flash into your page
33. Performance
Tapestry claims to have excellent performance however
there was a shortage of evidence for this claim.
Our experience is that it performs well under load and
doesn’t have any resource leaks
To back this up I published a series of articles on my
blog of an ‘abstract’ load test - http://
blog.gidley.co.uk/2009/05/tapestry-load-testing-
round-up.html
Our load testing for SeeSaw (which was much more
through but confidential) shows a similar
performance profile.
34. The Good Points
• Components - allows re-use across the site
• Templates are HTML makes it very easy for our web
developers to work with them
• Default components are easy to use
• Excellent Exception Reporting - it tells you what went
wrong and where!
35.
36. The Bad Points
• Learning Curve
• Documentation – A common theme is although there is
reference documentation it is often hard to find what you
are after. A lot of people say they would like a good book
on it. That said the (shameless plug) Tapestry training
materials do fill the gap nicely.
• Choice of prototype - our web devs would much prefer
to use JQuery and we are stuck with prototype
• IF constructs in TML are not very smart so we often end
up using blocks to workaround
37. Was it worth it?
• Overall I think it was (but I would say that!)
• The site has ended up looking nice, performing well
and the components are paying back dividends
• The team once they learnt tapestry are able to work it.
We do have issues still teaching new people tapestry
• Our big challenges are now around making more use
of the framework to deliver all the new and exciting
features for SeeSaw
38. The end results
To help make it a bit more real lets look at SeeSaw.com
and see if we can spot ‘Tapestry In Action’!
39. Further Resources
• Training via Skillsmatter
• Tapestry Load Tests http://blog.gidley.co.uk/2009/05/
tapestry-load-testing-round-up.html
• The Tapestry site http://tapestry.apache.org/
• ioko Tapestry Commons – http://tapestry.ioko.com/
• The tapestry mailing list archive http://
tapestry.markmail.org/
• Yahoo Performance Rules - http://developer.yahoo.com/
performance/
41. Acknowledgements
• Thanks to the Tapestry 5 developers
• Thanks to Skillsmatter for hosting this talk
• Some images and examples produced by Howard
Lewis-Ship for his CodeMesh talk
• Some code examples are from ioko-tapestry-commons
- tapestry.ioko.com
• Thanks to all at SeeSaw.com for allowing us to talk
about how this was built