Your SlideShare is downloading. ×
0
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Lipstick on a Pig - European Plone Symposium 2009
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Lipstick on a Pig - European Plone Symposium 2009

940

Published on

A talk I gave at the European Plone Symposium 2009 in Sorrento …

A talk I gave at the European Plone Symposium 2009 in Sorrento

So you have a big legacy portal application which you want to change the look of, but are contractually not allowed to touch? Here is a case study on how we used the power and flexibility of python and wsgi and the wonder of lxml to dynamically re-skin a proprietary .NET portal without even touching it. We take a giant lump of messy invalid HTML markup and dynamically strip it back, add semantic markup and CSS and present the user with a nice svelte valid site.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
940
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
20
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Lipstick on a Pig Dynamically re-skinning a legacy .NET portal with python Matt Hamilton [email_address]
  • 2. Introduction
    • Dynamically re-skinning a .NET portal site
    • 3. Can't name the client
    • 4. Portal for teachers in the UK
    • 5. Aggregating content across legacy portal, Plone and Moodle
  • 6. Who Am I
    • Technical Director of Netsight
      • Web development firm in UK
    • 10 years experience with Zope/Plone
    • 7. More of an integrator than core developer
      • I get involved in all those sticky projects of merging Plone in with other systems in an enterprise
  • 8. Where Were We?
  • 9. Existing Portal (1.0)
    • Five years old by November 2009
    • 10. User registrations: 46,681
    • 11. Course enrolments: 33,664
    • 12. Resource Bank views: 247,911
  • 13. Existing Portal (1.0)
  • 14. Problems with Current Portal
    • Look-and-feel
      • Not very compelling
    • Usability
      • Challenging in places
    • A poor content management system
      • Can't really edit general content, so use a separate FTP server and Dreamweaver
    • Vendor lock-in
      • Even small changes, very expensive
  • 15. The Future - Portal 2.0
    • Usability, Design and Content Review April 2008
    • 16. Strategic Review August 2008
    • 17. Feasibility Studies Jan 2009
    • 18. Pilot Demonstrator (“Portal V1.5”) March 2009
  • 19. Design Review
  • 20. Architecture Review
    • Portal 1.0 - Monolithic, tightly coupled, poor separation of skin
  • 21. Architecture Review
    • Portal 2.0 - Extensible, loosely coupled, good separation of skin
  • 22. How Do We Get There? Remember: We Can't Touch the Existing System!
  • 23. The Cunning Plan Skin 1.0 Portal 1.0 Existing Portal Module of functionality e.g. portfolio Browser
  • 24. Total Skin Graft! Portal 1.5 New skin via xpath and xslt transformation. Web server needs to handle SSL. Together they give us nice URLs. web server transformation proxy Skin 2.0 Browser Skin 1.0
  • 25. Deliverance
    • Several Different Projects
    Nate just talked about Deliverence, so I won't go on about it
  • 27. WSGI
    • WSGI allows you to write small modules chained together in a 'pipeline'
    • 28. Many small filters combined together as you need
    • 29. Lots of existing components out there
    • 30. Very easy to write new ones
  • 31. WSGI Power - The Pipeline [pipeline:portal] pipeline = theme.portal ploneinterceptor xslt linkrewrite htmlcleaner source.portal [filter:theme.portal] use = egg:dv.xdvserver#xdv theme_uri = file://%(here)s/theme/theme.html rules = %(here)s/rules/content.xml [filter:ploneinterceptor] use = egg:ns.ploneinterceptor#ploneinterceptor [filter:xslt] use = egg:dv.xdvserver#xslt xslt_file = %(here)s/rules/transform.xsl [filter:linkrewrite] use = egg:ns.linkrewrite#linkrewrite [filter:htmlcleaner] use = egg:ns.htmlcleaner#htmlcleaner [app:source.portal] use = egg:Paste#proxy address = http://www.theexistingsite.org.uk/
  • 32. Link Rewriting
    • Old URL:
      • http://www.theclient.org.uk/WebPortal.aspx?page=1&module=DB920A53-01EA-4886-8878-F2CDF5FA8CFD&mode=101&IsNonNewsDB920A53_01EA_4886_8878_F2CDF5FA8CFD=True&newsIdDB920A53_01EA_4886_8878_F2CDF5FA8CFD=11208#10
      • 33. 205 characters!
    • New URL:
      • http://www.theclient.org.uk/news/11208#10
      • 34. 41 characters!
  • 35. HTML Cleanup
    • LXML rules!
      • from lxml.html.clean import Cleaner cleaner = Cleaner(...) # Pretty print the HTML dom = document_fromstring(body) body = etree.tostring(dom, pretty_print=True) # Clean the HTML body = cleaner.clean_html(body)
  • 36. Result
    • Old
      • 70kb of HTML
      • 37. 120 Validation errors, 61 warnings
    • New
      • 40Kb of HTML
      • 38. 27 Errors, 1 warning (mainly xhtml/html conflicts)
      • 39. No significant performance impact
  • 40. Putting all together
  • 41. End Result New Style Portal content
  • 42. Complications
    • Navigation
      • One page, two content sources, how is the navigation built?
    • Search
      • Search needs to go across multiple systems
      • 43. Will soon be looking at Solr, Xapian, Google Mini
    • .NET viewstate postback
      • Massive hidden state variable, form wraps entire site!
  • 44. Questions? [email_address]

×