il web 2.0

Post on 26-May-2015

448 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Il web 2.0 Giacomo Veneri

Summary

IntroduzioneI concetti del Web 3I rischi del Web 2 (i 4 gironi)Programming by Pattern (parlare lo stesso

linguaggio)Aspect Object Programming

MVC applicato a Java e .NETSOA/Ajax frameworks

Web

1 HTML, HTTP, XML

RDB,

PSTN

Web

2.0 AJAX, RIA

WS o Servizi Integrati

Social Network

Web

3.0 IA,

Il Web Semantico

GeoSpatial

(il 3D??)

Web 2.0 > Web 3.0 Verso il 3.0

Web 3.0 Cosa è?

Web 3.0

Autenticazio

ne Integrata

Web 2.0

Social Net

AJAX e affini

?

Tag C

louding

Saliency Map

Foveate Animal

shape from: IntensitiesCM

100 200 300 400 500 600 700 800

50

100

150

200

250

300

350

400

Esperimento 1

V1 Area

Isteresi della Scelta

Fenomeno

Isteresi

Passare da tristi ad allegri non è come passare da allegri a tristi

allegria

tristezza

Statistica Inferenziale

La statistica

Il modello di regressione

t-test

ANOVA

Il futuro del Web 3.0

In pillole

Il web Semantico e Intelligente

Natural LanguageOntologie OWLPattern Recognition

Inferenza Bayesian

Human Computer InteractionSmartPhone e STBInserimento Username e Pwd => SSON

Uno studio del 2008 dimostro’ che uno dei più grossi impedimenti dei siti basati su AJAX er la’bailitazione javascript nei browser

L’albero Tecnologico

Teorema di Bayes

Statistica inferenziale

Pattern Recognition

Neural network

SVM

Text Mining

Natural LanguageGenetic Algorithm

Web SemanticoWeb Advertising

I 4 Gironi del Web 2.0

Internet un Business Infernale

Internet un Business infernale

Design Pattern

Java & .NET

Pattern

SingletonFlyweightThread pool patternObject PoolChain of ResponsabilityAdapterBridgeProxyFacadeObserverListenerMementoMVC

Singleton («staticone»)

Descrizione

Consiste nel creare una istanza di classe unica per tutto il contesto dell’applicazione senza doverla passare tra i metodi

Ad esempio l’helper che accede ai database

C#

static Singleton instance=null;

Singleton() { }

public static Singleton Instance {

get { if (instance==null) { instance = new

Singleton(); } return instance; }

}

Ricordiamoci che

Il Web è MultiThread!Un Thread è

concorrente con un altro Thread

Un Application Server gestisce l’applicazione con un Pattern detto Container

Il ThreadLocal

// C#ThreadLocal<string> ThreadName = new ThreadLocal<string>(() => { return "Thread" + Thread.CurrentThread.ManagedThreadId; });

// Javaprivate static int nextSerialNum = 0;

private static ThreadLocal serialNum = new ThreadLocal() { protected synchronized Object initialValue() { return new Integer(nextSerialNum++); } };

Flyweight

Flyweight è un Design pattern che permette di separare la parte variabile di una classe dalla parte che può essere riutilizzata, in modo tale da poter avere quest'ultima condivisa fra istanze differenti della parte variabile.

Modo Pulito: ad esempio per contenere delle informazioni comuni a diverse classi senza doverle istanziare tutte le volte. (Ex. La gestione di un Pool di configurazioni statiche per la classe)

Modo Sporco: per contenere informazioni ridondanti utili per l’efficienza. (Ex. Il figlio che si riferisce al padre e viceversa)

Thread Pool patternObject Pool

Thread pool pattern: avere una lista di thread in cache che giriamo senza dovere necessariamente ricrearlo tutte le volte

Object pool pattern: avere una lista di oggetti in cache che modifichiamo senza dover sempre ricrearli migliorando l’efficienza

L’efficienza non è come sembra!

kCal consumate da una persona per alzare un peso di 1Kg di 1Metro è l’80% di quello di una macchina a gasolio

Il garbage collector gioca brutti scherzi

Lazy initialization

La Lazy initialization ("inizializzazione pigra") è la tattica di instanziare un oggetto solo nel momento in cui deve essere usato per la prima volta.

Utilizzato da Hibernate, JPA

static Singleton instance=null;

Singleton() { }

public static Singleton Instance {

get { if (instance==null) { instance = new

Singleton(); } return instance; }

}

Il GC

Di solito è basato su 3 contenitori di memoria (tri-colour marking) di volta in volta che un oggetto diventa «anziano» viene spostato in un aria di memoria che viene ripulità più raramente

Mai forzarlo!System.gc()

L'impatto sulle prestazioni causate dal GC è apparentemente casuale e difficile da prevedere.

Un Object Pool farà invecchiare i vostri oggetti!!!

Listener vs Observer

E’ un ascoltatore in grado di registrare eventi.

Il Listener è passivo

L'Observer ("osservatore") definisce una dipendenza uno a molti fra oggetti diversi, in maniera tale che se un oggetto cambia il suo stato, tutti gli oggetti dipendenti vengono notificati del cambiamento avvenuto e possono aggiornarsi.

L’Observer è Attivo

Il Visitor

Il Visitor ("visitatore") permette di separare un algoritmo dalla struttura di oggetti composti a cui è applicato, in modo da poter aggiungere nuovi comportamenti senza dover modificare la struttura stessa. (wikipedia)

Immaginiamo di avere un (Database) Helper che recupera una lunga lista di oggetti e li vuole paginare sfruttano i costrutti SQL specifici per la versione del DB.

Utiliziamo un Visitor od un Observer?

Aspect Oriented Programming

Due cenni

AOP L’aspetto

AOP

La programmazione orientata agli aspetti è un paradigma di programmazione basato sulla creazione di entità software - denominate aspetti - che sovrintendono alle interazioni fra oggetti finalizzate ad eseguire un compito comune. Il vantaggio rispetto alla tradizionale Programmazione orientata agli oggetti consiste nel non dover implementare separatamente in ciascun oggetto il codice necessario ad eseguire questo compito comune.

LoggingSecurity

AspectJ

Se ne definisce l’aspetto e poi si definisce il punto di entrata.

pointcut set() : execution(* set*(*) ) && this(Point) && within(com.company.*);

aspect Logger {

void Bank.transfer(Account fromAcc, Account toAcc, int amount, User user, Logger logger) {

logger.info("transferring money...");}

}

aspect DisplayUpdate {

void Point.acceptVisitor(Visitor v) { v.visit(this); }

// other crosscutting code... }

La soluzione

ApplicationVisitor <<interface>+ enrichSQL(DatabaseHelper)

PostgreSQLVisitor MSSQLVisitor DatabaseHelper

+getXXX

Proxy vs Facade

Facade Proxy

Bridge vs Adapter

Bridge

Astrazione della classe

Il driver JDBC

Adapter

E’ un Wrapper

Chain of Responsability

Il pattern permette di separare gli oggetti che invocano richieste dagli oggetti che le gestiscono dando ad ognuno la possibilità di gestire queste richieste. Viene utilizzato il termine catena perché di fatto il la richiesta viene inviata e "segue la catena" di oggetti, passando da uno all'altro, finché non trova quello che la gestisce. (WikiPedia)

MVC («il» pattern architetturale del WEB)

Model-View-Controller (abbreviato spesso in MVC), che consiste nel separare i componenti software che implementano il modello delle funzionalità di business (model), dai componenti che implementano la logica di presentazione (view) e da quelli di controllo che tali funzionalità utilizzano (controller).

Model View Controller

Meno male!

MVC Cosa è?

In sintesi

Java J2EE 1

View: JSPModel: ObjectController: Servlet

MVC

In sintesi

Java J2EE 5

View: JSF/JSPModel: ObjectController:

Handler/WorkFlow

MVC

In sintesi

.NET

View: ASPXModel:

Object/DataSourceController:

Controller ASCX

MVC

Un po’ più complesso Una vista migliore!

Richfaces / Ajax4JSF

Agiscono solo sulla viewSi deve solo configurare una servlet in web.xml Non funzionano bene su Tomcat ma solo su

Glassfishhttp://docs.jboss.org/richfaces

sostituite il veccio command button jsf con

<a4j:commandButton value="do" reRender="table" action="#{myHandler.myAction}" id="button"/>

non fate altro non è necessario, assicuratevi solo che il componente da riaggiornare abbia l'id corretto (in questo caso "table").

Web.xml

<!-- Plugging the "Blue Sky" skin into the project --><context-param>   <param-name>org.richfaces.SKIN</param-name>   <param-value>blueSky</param-value></context-param>

<!-- Making the RichFaces skin spread to standard HTML controls --><context-param>      <param-name>org.richfaces.CONTROL_SKINNING</param-name>      <param-value>enable</param-value></context-param> <!-- Defining and mapping the RichFaces filter --><filter>    <display-name>RichFaces Filter</display-name>    <filter-name>richfaces</filter-name>    <filter-class>org.ajax4jsf.Filter</filter-class> </filter>   <filter-mapping>    <filter-name>richfaces</filter-name>    <servlet-name>Faces Servlet</servlet-name>   <dispatcher>REQUEST</dispatcher>   <dispatcher>FORWARD</dispatcher>   <dispatcher>INCLUDE</dispatcher></filter-mapping>

Asp.NET AJAX

Script Manager: è il controllo responsabile della gestione delle risorse script usate dai componenti client, per l’aggiornamento parziale delle pagine, per la localizzazione e altre funzionalità eventualmente introdotte da nostre customizzazioni. Da questo dipendono altri controlli per i quali la sua presenza è indispensabile. In particolare l’Update Panel, l’Update Progress e il Timer non ne possono prescindere.

Update Panel: permette di aggiornare una parte di una pagina web invece dell’intera pagina.

Update Progress: fornisce un’indicazione sullo stato di aggiornamento di una parte di pagina gestita tramite un controllo Update Panel.

Timer: garantisce l’avvio di un’operazione di post-back a intervalli di tempo predefiniti. Unitamente al controllo Update Panel può limitare l’operazione di aggiornamento alla sola parte contenuta nell’update panel.

<asp:UpdatePanel ID="MyUpdate" runat="server"><ContentTemplate>

  <asp:TextBox ID="txtRicerca" runat="server" />

  <asp:Label ID="lblRisultato" runat="server" Font-Bold="True" />

  <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">    Invia  </asp:LinkButton>

  <asp:UpdateProgress ID="UpdateProgress1" runat="server">    <ProgressTemplate>      Attendere, richiesta in corso ...    </ProgressTemplate>  </asp:UpdateProgress>

</ContentTemplate></asp:UpdatePanel>

Analisi

Vantaggi

Separazione della View dal suo controllo

Maggiore efficienza

Svantaggi

Un piccolo cambio è un grande cambio

Utilizzo di risorse

Perché AJAX?

L’HTTP è asincrono!!!Attacca e stacca la connessione.

Other AJAX framework

Frameworks

jQuery, jQuery UI, prototype, script.aculo.us, MooTools DojoGoogle Libraries API (carica jQuery)

Caricamento

Google Libraries API - Developer's Guide <script

src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

JQuery

Javascript

In Javascript la base è accedere ad un elemento del DOM

Code Sippet

$("a"); tutti i link nel documento

$("#id"); seleziona un singolo elemento con id «id»

$("input[type=‘hidden']");

$("#id").each(function () { var id = this.id; }); ciclare

Manipolare il contenuto

Javascript

La funzione bind permette di gestire gli eventi

Tramite unbind si possono rimuovere le associazioni

Code snippet

$("p").text(); testo del paragrafo

$("p").html(); "testo del <strong>paragrafo</strong>«

$("a").bind("click",function (event) {

alert($(this).attr("href”));

});

AJAX

AJAX

La chiamata ajax è molto compatta

Code Snippet

$.ajax({    url : "servente.html",    success : function (data,state) {     $("#risultato").html(data);    $("#stato").text(stato);    },    error : function (req,state,error) {    alert("catch event"+stato);    }});

Unit Testing

Non solo test funzionali

Unit Testing

Nella Programmazione informatica, lo unit testing è una procedura usata per verificare singole parti di un codice sorgente.

Eseguire il test (offline) della persistenza, della business logic, della sicurezza….dell’interfaccia

JavaJunitEclipse

.NETNunit

Visual Studio 2010

Visual Studio 2010

Unit Test

Il Web 2.0

giacomo.veneri@etinnova.itg.veneri@unisi.it

Giacomo Veneri

top related