Sviluppo web dall'antichità all'avanguardia e ritorno

655 views

Published on

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

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

  • Be the first to like this

No Downloads
Views
Total views
655
On SlideShare
0
From Embeds
0
Number of Embeds
124
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sviluppo web dall'antichità all'avanguardia e ritorno

  1. 1. Sviluppo webdallantichità allavanguardia e ritorno Michele Beltrame Perl.It
  2. 2. 1993
  3. 3. Era una notte buia e tempestosa
  4. 4. CGI(NCSA, CERN, ...)
  5. 5. C
  6. 6. C++
  7. 7. Hmmm
  8. 8. Allocazione memoriaTipi staticiLimitate librerie text-processing
  9. 9. Web =>text processing
  10. 10. string.h
  11. 11. Hmmm
  12. 12. Perl
  13. 13. # Regular expressionif ( $cc =~ /^d{4}-d{2}-d{2}$/ ) # data (migliorabile)}# split, join, ...
  14. 14. Codice:mix tra HTML e Perl/C/altro
  15. 15. print <body>;print <p> . $contenuto . </p>;
  16. 16. Quasi accettabile......finché i siti li facevano i programmatori
  17. 17. Web designerSiti più belli... ...a volte
  18. 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. 19. :-(
  20. 20. Poco manutenibile in ogni caso
  21. 21. Separare codice HTML da linguaggio scripting
  22. 22. Sistemi di templating[% peanut %][% FOREACH product IN lproducts %][% product.name %][% END %]
  23. 23. HTML dentro linguaggio scripting
  24. 24. MALE
  25. 25. linguaggio scripting dentro HTML
  26. 26. MALE
  27. 27. MALEPHP
  28. 28. originariamente scritto in Perl
  29. 29. da un tizio per gestire la propria home page
  30. 30. Non si può mai sapere come la gente userà ciò che lasci in giro sul web
  31. 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. 32. Ma
  33. 33. Estrema semplicità di deployment Il codice funziona ovunque Funziona ovunque nello stesso modo! Tutti i provider supportano PHP
  34. 34. PHPha reso il sito web dinamico la norma
  35. 35. non è poco
  36. 36. e ora anche PHP usa dei sistemi di templating :-)
  37. 37. Java
  38. 38. Il solo linguaggio per applicazioni web mission-critical
  39. 39. ?
  40. 40. "vietiamo lereditarietà multipla"
  41. 41. MI è utile nello 0,0042% dei casiraccomandare una best practice ma non vietare di ignorarla
  42. 42. il codice non sarà manutenibile! -----brutte cose succederanno al vostro sofware!
  43. 43. moriranno dei cuccioli di gatto!!!
  44. 44. è giusto vi sia un sentiero consigliato ma nulla dovrebbe volontariamente essere reso impossibilie
  45. 45. Python
  46. 46. Attenti agli spazi!Ma è un gran linguaggio
  47. 47. 1995
  48. 48. Netscape LiveScript JavaScript
  49. 49. Grande ideaPessimo nome
  50. 50. ECMAScript?
  51. 51. # Linguaggio ancora poco potente# ma un cambiamento interesantevisibility: hidden;display: none;
  52. 52. tic tac... trascorre il Medioevo del web programming ... tic tac
  53. 53. 2004
  54. 54. Web 2.0
  55. 55. Qualunque cosa voglia dire
  56. 56. AJAX
  57. 57. XMLHttpRequest
  58. 58. Possiamo comunicare col server senza ricaricare la pagina
  59. 59. Yay!
  60. 60. Talmente semplice e stupidoche nessuno ci aveva mai pensato
  61. 61. autocompletamentoform dinamichevalidazione on-the-fly
  62. 62. la scalabilità diventa un argomento anche per applicazioni "normali"
  63. 63. Ruby
  64. 64. RubyRuby on Rails
  65. 65. Prime release di RailsLentoScarso supporto UnicodeLeakBug variIdeale per applicazioni medio-grandi
  66. 66. Ma
  67. 67. MVC per tutti
  68. 68. Esisteva già ma...Rails lha fatto conoscere
  69. 69. Modern Web Programming
  70. 70. Il framework che vanta più tentativi di imitazione
  71. 71. Molti dei quali riuscitimeglio delloriginale
  72. 72. Django (Python)Catalyst (Perl)uninfinità in vari linguaggi
  73. 73. Dispatcher avanzati
  74. 74. http://mysite.ext/it/products/view/231http://mysite.ext/en/products/buy/342
  75. 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. 76. mod_rewrite =>Web-server agnostic
  77. 77. Proliferazione di web server piccoli ed efficienti lighttpd nginx ...
  78. 78. ORM(Object-Relational Mapper)una storia di amore e di odio
  79. 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. 80. ~2007
  81. 81. REST
  82. 82. HTTP
  83. 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. 84. GET /entries/42POST /entries/42PUT /entriesDELETE /entries/42
  85. 85. <form method="put"> supportato solo in XHTML 2.0
  86. 86. XHTML 2.0???
  87. 87. si usa AJAX
  88. 88. AJAJin realtà
  89. 89. JSON
  90. 90. la più grande invenzione del web moderno (2005)
  91. 91. serializzazione XML prolissa poco leggibile
  92. 92. standard per serializzare i datie trasmetterli tra client e server
  93. 93. facilmente leggibile dagli umani!
  94. 94. HTML 5
  95. 95. Contenitore per vari "standard" (molti dei quali client-side) ma cè qualcosa di bello
  96. 96. XHTML
  97. 97. <br /> => <br>
  98. 98. class="miaclasse" => class=miaclasse
  99. 99. JavaScript//<![CDATA[//]]><!---->
  100. 100. WebSocket
  101. 101. Connessione full-duplex persistente client <=> server
  102. 102. Niente più hack: AJAX polling Flash (sik)
  103. 103. Riduzione overhead per invio di dati => Incremento di velocità di vari ordini di grandezza
  104. 104. NodeJS
  105. 105. async =>prestazioni molto alterispetto a thread/fork
  106. 106. arriva anche negli altri linguaggi
  107. 107. Perl
  108. 108. Mojolicious
  109. 109. framework leggero
  110. 110. Sebastian Riedel
  111. 111. un tizio un po permalosoun geniale designer di API
  112. 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. 113. Deployment:Preforking server FastCGI CGI Plack/PSGI
  114. 114. Dispatcher + IO
  115. 115. Routes
  116. 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. 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. 118. Ai perlisti piace funzionale...# Closure (callback)$r->route(/animali/cane/abbaia)->to(cb => sub { my $self = shift; $self->render(text => Bau);});
  119. 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. 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. 121. Routes sintetiche(Mojolicious::Lite)
  122. 122. Do-What-I-Meanma un po meno assoggettabili al proprio volere
  123. 123. get /animali => sub { ... }post /animali => sub { ... }delete /animali => sub { ... }
  124. 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. 125. Utili per supportare URL più significativee per inviare risposte diverse in base alla richiesta
  126. 126. Risposta in base allheader HTTP
  127. 127. Accept: application/jsonAccept: text/plain
  128. 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. 129. JSON
  130. 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. 131. WebSocket
  132. 132. # Un semplice pongwebsocket /ping => sub { my $self = shift; # ... async ... $self->on(message => sub { my ($self, $message) = @_; $self->send_message("hai detto: $message"); });};
  133. 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. 134. Molto altro
  135. 135. Interessante?
  136. 136. Divertente?
  137. 137. Mojolicioushttp://mojolicious.org
  138. 138. Cerca anche... Dancer Catalyst
  139. 139. The Perl Foundation Google Code-Incontest per studenti universatarisviluppo software open sourcepunti, magliette, soldi, viaggi
  140. 140. non in Italiaproblemi burocratici :-/per ora
  141. 141. Grazie!
  142. 142. www.perl.it

×