Sviluppo web dall'antichità all'avanguardia e ritorno

  • 397 views
Uploaded on

Intervento di Michele Beltrame all'Open Source Day 2011 - Udine, 26 Novembre 2011

Intervento di Michele Beltrame all'Open Source Day 2011 - Udine, 26 Novembre 2011

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
397
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
1
Comments
0
Likes
0

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. Sviluppo webdallantichità allavanguardia e ritorno Michele Beltrame Perl.It
  • 2. 1993
  • 3. Era una notte buia e tempestosa
  • 4. CGI(NCSA, CERN, ...)
  • 5. C
  • 6. C++
  • 7. Hmmm
  • 8. Allocazione memoriaTipi staticiLimitate librerie text-processing
  • 9. Web =>text processing
  • 10. string.h
  • 11. Hmmm
  • 12. Perl
  • 13. # Regular expressionif ( $cc =~ /^d{4}-d{2}-d{2}$/ ) # data (migliorabile)}# split, join, ...
  • 14. Codice:mix tra HTML e Perl/C/altro
  • 15. print <body>;print <p> . $contenuto . </p>;
  • 16. Quasi accettabile......finché i siti li facevano i programmatori
  • 17. Web designerSiti più belli... ...a volte
  • 18. Difficoltà di integrazioneprint <ul>;for my $article (@$articles) { print <li>; if ( $article->{id} == $selected_article ) { # Niente CSS fino al 1996 print <font color="#0000FF"> . $article->{title} . </font>; } else { print $article->{title}; } print </li>;}print </ul>;
  • 19. :-(
  • 20. Poco manutenibile in ogni caso
  • 21. Separare codice HTML da linguaggio scripting
  • 22. Sistemi di templating[% peanut %][% FOREACH product IN lproducts %][% product.name %][% END %]
  • 23. HTML dentro linguaggio scripting
  • 24. MALE
  • 25. linguaggio scripting dentro HTML
  • 26. MALE
  • 27. MALEPHP
  • 28. originariamente scritto in Perl
  • 29. da un tizio per gestire la propria home page
  • 30. Non si può mai sapere come la gente userà ciò che lasci in giro sul web
  • 31. PHP, (some of) the bad Namespace caotico Librerie (mysql, mysqli, gd) incluse nel core Unicode-agnostic Poco espressivo (per un linguaggio dinamico) API bizzarra: mysql_escape_string? mysql_real_escape_string?!?! Ha cresciuto una serie di sviluppatori...che non pensano che quelli sopra siano problemi...poco attenti alla sicurezza
  • 32. Ma
  • 33. Estrema semplicità di deployment Il codice funziona ovunque Funziona ovunque nello stesso modo! Tutti i provider supportano PHP
  • 34. PHPha reso il sito web dinamico la norma
  • 35. non è poco
  • 36. e ora anche PHP usa dei sistemi di templating :-)
  • 37. Java
  • 38. Il solo linguaggio per applicazioni web mission-critical
  • 39. ?
  • 40. "vietiamo lereditarietà multipla"
  • 41. MI è utile nello 0,0042% dei casiraccomandare una best practice ma non vietare di ignorarla
  • 42. il codice non sarà manutenibile! -----brutte cose succederanno al vostro sofware!
  • 43. moriranno dei cuccioli di gatto!!!
  • 44. è giusto vi sia un sentiero consigliato ma nulla dovrebbe volontariamente essere reso impossibilie
  • 45. Python
  • 46. Attenti agli spazi!Ma è un gran linguaggio
  • 47. 1995
  • 48. Netscape LiveScript JavaScript
  • 49. Grande ideaPessimo nome
  • 50. ECMAScript?
  • 51. # Linguaggio ancora poco potente# ma un cambiamento interesantevisibility: hidden;display: none;
  • 52. tic tac... trascorre il Medioevo del web programming ... tic tac
  • 53. 2004
  • 54. Web 2.0
  • 55. Qualunque cosa voglia dire
  • 56. AJAX
  • 57. XMLHttpRequest
  • 58. Possiamo comunicare col server senza ricaricare la pagina
  • 59. Yay!
  • 60. Talmente semplice e stupidoche nessuno ci aveva mai pensato
  • 61. autocompletamentoform dinamichevalidazione on-the-fly
  • 62. la scalabilità diventa un argomento anche per applicazioni "normali"
  • 63. Ruby
  • 64. RubyRuby on Rails
  • 65. Prime release di RailsLentoScarso supporto UnicodeLeakBug variIdeale per applicazioni medio-grandi
  • 66. Ma
  • 67. MVC per tutti
  • 68. Esisteva già ma...Rails lha fatto conoscere
  • 69. Modern Web Programming
  • 70. Il framework che vanta più tentativi di imitazione
  • 71. Molti dei quali riuscitimeglio delloriginale
  • 72. Django (Python)Catalyst (Perl)uninfinità in vari linguaggi
  • 73. Dispatcher avanzati
  • 74. http://mysite.ext/it/products/view/231http://mysite.ext/en/products/buy/342
  • 75. it/products/buy/342# Linguasub lang : Chained(/) PathPart() CaptureArgs(1) { my ( $self, $c, $lang ) = @_; # ...}# Prodottisub products : Chained(lang) PathPart(products) CaptureArgs(0) { my ( $self, $c ) = @_; # ...}# Endpoint 1sub view : Chained(products) PathPart(view) Args(1) { my ( $self, $c, $id ) = @_; # ...}# Endpoint 2sub buy : Chained(products) PathPart(buy) Args(1) { my ( $self, $c, $id ) = @_; # ...}
  • 76. mod_rewrite =>Web-server agnostic
  • 77. Proliferazione di web server piccoli ed efficienti lighttpd nginx ...
  • 78. ORM(Object-Relational Mapper)una storia di amore e di odio
  • 79. my $rs = $c->model(Dbs::Animali)->search({ me.anni => { <= => 4 }, razza.nome => beagle,}, { join => razza, order_by => me.nome, rows => 42,});select me.*from animali mejoin razze razza on razza.id = me.idrazzawhere me.anni <= 4 and razza.nome = beagleorder by me.nomelimit 42
  • 80. ~2007
  • 81. REST
  • 82. HTTP
  • 83. GET /entries/edit?id=42GET /entries/edit/42GET /entries/edit?id=42&task=updatePOST /entries/edit/42GET /entries/edit/newGET /entries/delete/42
  • 84. GET /entries/42POST /entries/42PUT /entriesDELETE /entries/42
  • 85. <form method="put"> supportato solo in XHTML 2.0
  • 86. XHTML 2.0???
  • 87. si usa AJAX
  • 88. AJAJin realtà
  • 89. JSON
  • 90. la più grande invenzione del web moderno (2005)
  • 91. serializzazione XML prolissa poco leggibile
  • 92. standard per serializzare i datie trasmetterli tra client e server
  • 93. facilmente leggibile dagli umani!
  • 94. HTML 5
  • 95. Contenitore per vari "standard" (molti dei quali client-side) ma cè qualcosa di bello
  • 96. XHTML
  • 97. <br /> => <br>
  • 98. class="miaclasse" => class=miaclasse
  • 99. JavaScript//<![CDATA[//]]><!---->
  • 100. WebSocket
  • 101. Connessione full-duplex persistente client <=> server
  • 102. Niente più hack: AJAX polling Flash (sik)
  • 103. Riduzione overhead per invio di dati => Incremento di velocità di vari ordini di grandezza
  • 104. NodeJS
  • 105. async =>prestazioni molto alterispetto a thread/fork
  • 106. arriva anche negli altri linguaggi
  • 107. Perl
  • 108. Mojolicious
  • 109. framework leggero
  • 110. Sebastian Riedel
  • 111. un tizio un po permalosoun geniale designer di API
  • 112. use Mojolicious::Lite;get / => { text => Tu sia dannato, Barone Rosso! };app->start;Da shell... $ morbo hello.pl Server available at http://127.0.0.1:3000.
  • 113. Deployment:Preforking server FastCGI CGI Plack/PSGI
  • 114. Dispatcher + IO
  • 115. Routes
  • 116. # Regex (overkill)qr|/animali/list/(d+)| -> $self->render(text => $1);# Route/animali/list/:id -> $self->render(text => $id);# Routes & MVC$r->route(/contatti) ->to(controller => pagine, action => cont);
  • 117. # Nested routes (riutilizzo codice)# /animali -> undef# /animali/list -> {controller => records, action => list}# /animali/view -> {controller => records, action => view}my $foo = $r->route(/animali)->to(controller => records);$foo->route(/list)->to(action => list);$foo->route(/view)->to(action => view);
  • 118. Ai perlisti piace funzionale...# Closure (callback)$r->route(/animali/cane/abbaia)->to(cb => sub { my $self = shift; $self->render(text => Bau);});
  • 119. # Placeholder restrittivi$r->route(/animali/:specie) ->to(controller => animali, action => info);$r->route(/animali/:specie, specie => [cane, gatto]) ->to(controller => animali, action => info);$r->route(/animali/:specie, specie => qr/^leo/) ->to(controller => animali, action => info);
  • 120. # HTTP method (REST)$r->route(/animali)->via(GET, POST) ->to(controller => animali, action => info);$r->route(/animali)->via(DELETE) ->to(controller => animali, action => delete);
  • 121. Routes sintetiche(Mojolicious::Lite)
  • 122. Do-What-I-Meanma un po meno assoggettabili al proprio volere
  • 123. get /animali => sub { ... }post /animali => sub { ... }delete /animali => sub { ... }
  • 124. # Formati# /animali -> {controller => animali}# /animali.html -> {controller => animali, action => info, format => html}# /animali.txt -> {controller => animali, action => info, format => text}$r->route(/animali)->to(controller => animali, action => info);# $format = ...
  • 125. Utili per supportare URL più significativee per inviare risposte diverse in base alla richiesta
  • 126. Risposta in base allheader HTTP
  • 127. Accept: application/jsonAccept: text/plain
  • 128. get /list/:offset => sub { my $self = shift; my $numbers = [42 .. $self->param(offset)]; $self->respond_to( json => {json => $numbers}, txt => {text => join(,, @$numbers)} ); };
  • 129. JSON
  • 130. post /update => sub { my $self = shift; my $chartdata = $self->req->json; # Codice che faccia qualcosa return $self->render_json({ status => ok, updated => @updated, not_updated => @not_updated, });}
  • 131. WebSocket
  • 132. # Un semplice pongwebsocket /ping => sub { my $self = shift; # ... async ... $self->on(message => sub { my ($self, $message) = @_; $self->send_message("hai detto: $message"); });};
  • 133. Tutta la potenza di CPANORM: DBIx::Class, Rose::DB::Object, Fey::ORM, ...Templating: TT, Text::Xslate, HTML::Zoom, ...Interfacciamento a databaseFTP, POP3, SSH, SMTP, IRC, ...Import/export Excel, CSV, PDF, ...ritocco immagini, generazione barcode, ...[molto molto, altro]
  • 134. Molto altro
  • 135. Interessante?
  • 136. Divertente?
  • 137. Mojolicioushttp://mojolicious.org
  • 138. Cerca anche... Dancer Catalyst
  • 139. The Perl Foundation Google Code-Incontest per studenti universatarisviluppo software open sourcepunti, magliette, soldi, viaggi
  • 140. non in Italiaproblemi burocratici :-/per ora
  • 141. Grazie!
  • 142. www.perl.it