Your SlideShare is downloading. ×
Seaside - Web Development As You Like It
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

Seaside - Web Development As You Like It

4,555
views

Published on

Seaside does different to what is considered as best practices for Web development. It breaks with common best practices for Web development, such as to share as little state as possible, use clean …

Seaside does different to what is considered as best practices for Web development. It breaks with common best practices for Web development, such as to share as little state as possible, use clean and carefully chosen URLs, and use templates to separate model and presentation.

Published in: Technology

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,555
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
97
Comments
0
Likes
3
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. Web development, as you it
  • 2. Lukas Renggli Academics PhD Student, University of Bern Industry Independent Software Consultant Communities Core-developer of Seaside Author of Magritte and Pier
  • 3. Agenda Natural Flow Reusable Components Secure by Default Web 2.0 Applications
  • 4. 1 Natural Flow
  • 5. Demo
  • 6. <form action=quot;second.htmlquot;> <input type=quot;textquot; name=quot;value1quot;> <input type=quot;submitquot; value=quot;OKquot;> </form>
  • 7. <form action=quot;second.htmlquot;> <input type=quot;textquot; name=quot;value1quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <form action=quot;result.htmlquot;> <input type=quot;textquot; name=quot;value2quot;> <input type=quot;submitquot; value=quot;OKquot;> </form>
  • 8. <form action=quot;second.htmlquot;> <input type=quot;textquot; name=quot;value1quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <form action=quot;result.htmlquot;> <input type=quot;textquot; name=quot;value2quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <p> <% value1 + value2 %> </p>
  • 9. <form action=quot;second.htmlquot;> <input type=quot;textquot; name=quot;value1quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <form action=quot;result.htmlquot;> <input type=quot;textquot; name=quot;value2quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <p> <% value1 + value2 %> </p>
  • 10. <form action=quot;second.htmlquot;> <input type=quot;textquot; name=quot;value1quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <form action=quot;result.htmlquot;> <input type=quot;textquot; name=quot;value2quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <p> <% value1 + value2 %> </p>
  • 11. <form action=quot;second.htmlquot;> <input type=quot;textquot; name=quot;value1quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <form action=quot;result.htmlquot;> <input type=quot;textquot; name=quot;value2quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <p> <% value1 + value2 %> </p>
  • 12. <form action=quot;second.htmlquot;> <input type=quot;textquot; name=quot;value1quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <form action=quot;result.htmlquot;> <input type=quot;hiddenquot; name=quot;value1quot; value=quot;<% value1 %>quot;> <input type=quot;textquot; name=quot;value2quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <p> <% value1 + value2 %> </p>
  • 13. <form action=quot;second.htmlquot;> <input type=quot;textquot; name=quot;value1quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <form action=quot;result.htmlquot;> <input type=quot;hiddenquot; name=quot;value1quot; value=quot;<% value1 %>quot;> <input type=quot;textquot; name=quot;value2quot;> <input type=quot;submitquot; value=quot;OKquot;> </form> <p> <% value1 + value2 %> </p>
  • 14. Web Browser
  • 15. Web Browser
  • 16. /first parsing processing formatting Web Browser
  • 17. /first parsing processing formatting value1 Web Browser
  • 18. /first /second parsing parsing processing processing formatting formatting value1 value1 Web Browser
  • 19. /first /second parsing parsing processing processing value1, value2 formatting formatting value1 value1 Web Browser
  • 20. /first /second /result parsing parsing parsing processing processing processing value1, value2 formatting formatting formatting value1 value1 result Web Browser
  • 21. Who cares about HTTP anyway?
  • 22. is different
  • 23. Concentrate on your application ...
  • 24. ... no manual request parsing
  • 25. ... no XML configuration files
  • 26. 3 user interactions
  • 27. 3 lines of code
  • 28. value1 := self request: ‘First Number’.
  • 29. value1 := self request: ‘First Number’. value2 := self request: ‘Second Number’.
  • 30. value1 := self request: ‘First Number’. value2 := self request: ‘Second Number’. self inform: value1 + value2.
  • 31. Demo
  • 32. Reusable Components
  • 33. We don’t think in pages ...
  • 34. ..., but in stateful components
  • 35. Demo
  • 36. Demo
  • 37. Components are c! l !
  • 38. Reuseable
  • 39. Model View Controller Model, View, Controller
  • 40. Persistent
  • 41. Valid Source: stock.xchng, Al Nakib
  • 42. CSS Designer
  • 43. XHTML Developer & Seaside
  • 44. DRY Don't Repeat Yourself
  • 45. Domain Specific Language
  • 46. html div id: ‘title’; with: ‘Title’ <div id=”title”>Title</div>
  • 47. html div id: ‘list’; with: [ html span class: ‘item’; with: ‘Item 1’. html span class: ‘item’; with: ‘Item 2’ ] <div id=”list”> <span class=”item”>Item 1</span> <span class=”item”>Item 2</span> </div>
  • 48. Demo
  • 49. 3 Secure by Default
  • 50. Cross Site Scripting Source: stock.xchng, Afonso Lima
  • 51. Output is encoded by default
  • 52. html text: '<script>alert(''xss'')</script>' &lt;script&gt;alert('xss');&lt;/script&gt;
  • 53. Replay Attacks Source: stock.xchng, Afonso Lima
  • 54. Session _s=Ru8ZKgqjy0uDX3kf 96-bit
  • 55. Page _k=K5EQyqKE 48-bit
  • 56. Parameter Tampering Source: stock.xchng, Afonso Lima
  • 57. Names are generated automatically
  • 58. Names are bound to functions
  • 59. No manual request parsing
  • 60. Don’t call Seaside, Seaside will call you Source: stock.xchng, Pawel Zawistowski
  • 61. html anchor ! callback: [ self inform: ‘Hello World’ ]; ! with: ‘Show Message’ <a href=”/seaside/example1 quot; ?_s=Ru8ZKgqjy0uDX3kf quot; &_k=K5EQyqKE ! &32”>Show Message</a>
  • 62. Web 2.0
  • 63. Source: Flickr, Benjamin Jackson
  • 64. AJAX Source: Flickr, Benjamin Jackson
  • 65. Tight, but optional integration
  • 66. Feature complete and up-to-date
  • 67. Say it in Smalltalk
  • 68. Source: Flickr, psrman's
  • 69. Comet Source: Flickr, psrman's
  • 70. Demo scriptaculous.seasidehosting.st
  • 71. 5 Applications
  • 72. In productive use since 2002
  • 73. Demo
  • 74. Seaside
  • 75. MIT License
  • 76. www.seaside.st www.lukas-renggli.ch

×