Cloud web applications: the new perspective of sproutcoreDavid Saitta
This document summarizes a thesis on AppAware Analytics. It discusses developing a cloud web application using SproutCore to provide analytics on mobile app usage data collected by the AppAware project. Key points include:
1. The application aims to minimize server-side computation and bandwidth usage by handling most processing in the browser.
2. It uses a REST interface to retrieve app and event data from the server in JSON format.
3. Challenges include the large amount of event data and lack of support for caching computed charts on the client-side.
The document evaluates if web applications can compete with desktop applications, concluding it is possible for advanced interactions but performance may suffer with large data transfers.
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaMarco Breveglieri
Slide del seminario sull'uso di React con Delphi e confronto con altre tecnologie (es. ExtJS) per lo sviluppo Web, tenuto al Delphi Day 2016 a Piacenza.
I sorgenti sono disponibili qui:
https://github.com/marcobreveglieri/conferences/tree/master/2016/delphi_day_2016
NerdyDog sviluppa applicazioni web in Ruby on Rails, il framework open souce MVC (Model View Controller) basato su Ruby.
Con Ruby on Rails , oppure RoR è possibile sviluppare applicazioni in modo semplice diminuendo la percentuale di codice che solitamente va a ripetersi nelle applicazioni.
Il pattern Model View Controller infatti è una pratica di programmazione che semplifica la separazione tra presentazione dei dati, logica della app e contenuti.
Le app sviluppate in Ruby on Rails sono particolarmente indicate per progetti dinamici, flessibili che necessitano aggiornamenti continui o ampliamenti futuri come possono essere ad esempio le Start up.
http://nerdydog.it/6-sviluppo-applicazioni
Cloud web applications: the new perspective of sproutcoreDavid Saitta
This document summarizes a thesis on AppAware Analytics. It discusses developing a cloud web application using SproutCore to provide analytics on mobile app usage data collected by the AppAware project. Key points include:
1. The application aims to minimize server-side computation and bandwidth usage by handling most processing in the browser.
2. It uses a REST interface to retrieve app and event data from the server in JSON format.
3. Challenges include the large amount of event data and lack of support for caching computed charts on the client-side.
The document evaluates if web applications can compete with desktop applications, concluding it is possible for advanced interactions but performance may suffer with large data transfers.
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaMarco Breveglieri
Slide del seminario sull'uso di React con Delphi e confronto con altre tecnologie (es. ExtJS) per lo sviluppo Web, tenuto al Delphi Day 2016 a Piacenza.
I sorgenti sono disponibili qui:
https://github.com/marcobreveglieri/conferences/tree/master/2016/delphi_day_2016
NerdyDog sviluppa applicazioni web in Ruby on Rails, il framework open souce MVC (Model View Controller) basato su Ruby.
Con Ruby on Rails , oppure RoR è possibile sviluppare applicazioni in modo semplice diminuendo la percentuale di codice che solitamente va a ripetersi nelle applicazioni.
Il pattern Model View Controller infatti è una pratica di programmazione che semplifica la separazione tra presentazione dei dati, logica della app e contenuti.
Le app sviluppate in Ruby on Rails sono particolarmente indicate per progetti dinamici, flessibili che necessitano aggiornamenti continui o ampliamenti futuri come possono essere ad esempio le Start up.
http://nerdydog.it/6-sviluppo-applicazioni
Applicazioni Web ultra-performanti con Vue.js e DelphiMarco Breveglieri
Vue.js è un framework per creare interfacce utente estremamente performanti e che può essere introdotto progressivamente nelle vostre applicazioni Web, nel modo meno invasivo possibile. In questo talk scoprirete come utilizzarlo con Delphi creando una soluzione frontend e backend ad elevate prestazioni.
Sempre più di frequente sentiamo parlare di nuove librerie, framework o linguaggi. Tutte queste nuove tecnologie promettono miracoli ma il nostro tempo è una risorsa finita e non abbiamo il lusso di poter approfondire ogni novità.
Le PWA si basano su tecnologie che già usiamo tutti i giorni nello sviluppo WEB quindi, senza farci intimidire, possiamo approcciare qualcosa che effettivamente rivoluzioni il nostro lavoro e che possa farlo con il minimo sforzo da parte nostra.
Applicazioni Web ultra-performanti con Vue.js e DelphiMarco Breveglieri
Vue.js è un framework per creare interfacce utente estremamente performanti e che può essere introdotto progressivamente nelle vostre applicazioni Web, nel modo meno invasivo possibile. In questo talk scoprirete come utilizzarlo con Delphi creando una soluzione frontend e backend ad elevate prestazioni.
Sempre più di frequente sentiamo parlare di nuove librerie, framework o linguaggi. Tutte queste nuove tecnologie promettono miracoli ma il nostro tempo è una risorsa finita e non abbiamo il lusso di poter approfondire ogni novità.
Le PWA si basano su tecnologie che già usiamo tutti i giorni nello sviluppo WEB quindi, senza farci intimidire, possiamo approcciare qualcosa che effettivamente rivoluzioni il nostro lavoro e che possa farlo con il minimo sforzo da parte nostra.
Tecnologie emergenti per lo sviluppo di web applications: il caso di Ruby on Rails e AJAX
1. UNIVERSITÀ DEGLI STUDI DI MILANO
Facoltà di Scienze Matematiche, Fisiche e Naturali
Dipartimento di Tecnologie dell’informazione
Corso di laurea in Informatica
Tecnologie emergenti per lo sviluppo di Web Applications:
il caso di Ruby on Rails e AJAX
Candidato
Relatore
David Saitta
PROF. Marco Cremonini
Anno Accademico 2004/2005
2. Sviluppo di Web Applications
• Framework che implementano • UI Statiche
solo alcuni aspetti Le azioni dell’utente non modificano
la struttura della pagina corrente
• È necessario integrare con altri
• Usabilità limitata
framework, spesso non progettati
per lavorare insieme no drag-n-drop, no feedback immediato,
no componenti complessi e interattivi
• si perde tempo di sviluppo
• Request/Response
• Molti framework forniscono
Ogni azione dell’utente verso il server
funzionalità ma non un percorso (link, invio form) richiede un reload
logico e chiaro di utilizzo della pagina
3. Tecnologie Emergenti
AJAX
AJAX
on Asynchronous
Ruby on Rails JavaScript
RAILS And XML
• Struttura chiara
• basato sul pattern Model-View-Controller
• UI Interattive
• Ogni componente ha un suo posto preciso
La pagina si evolve per rispecchiare le
azioni dell’utente
• Full-stack Framework
• Singolo progetto omogeneo, tutti i
• Maggiore usabilità
componenti interagiscono pienamente tra
di loro supporto per il drag-n-drop, effetti grafici,
componenti complessi e interattivi
• Tempi di sviluppo ridotti
• No Refresh
• le modifiche vengono propagate subito
Per comunicare con il server non
• sviluppatori impegnati nel porting di
occorre il reload della pagina.
applicazioni professionali testimoniano come
(Async Request/Response)
abbiano scritto meno codice in Rails che
per i file di configurazione XML di Java
Hibernate/Struts e Tomcat
4. Ruby on Rails
• Ruby
• Linguaggio interpretato Object-Oriented stile Smalltalk
• Dinamico
Ruby on Rails
• Estendibile a runtime (reflection/metaprogramming)
• Unico linguaggio per tutti i livelli del framework HTTP, RSS, AROM,
•
SOAP
DRY: Don’t Repeat Yourself Apache, WeBrick or
Lighttpd
Requests
• Le definizioni devono essere fatte una Web Server
sola volta, in un posto specifico Invokes FastCGI,
• tree delle directory standard Forwards mod_ruby or SCGI
•
XHTML, CSS, JS,
“Convention over images, XML
Dispatcher
Responds
Configuration” Displays Handles validations
Loads
• ridurre la configurazione in favore Action CRUDs
Renders
View
delle convenzioni di comportamento Active
Controller
Record
• personalizzabile: configurare solo Responds
Delegates
ciò che non è convenzionale Action Data or
Queries
• es: nel modello classe User è associata Errors
WebServices
di default alla tabella users Redirects
Delivers
SQLite,
XML
Database
PostgreSQL,
Action MySQL, Oracle,
Mailer MSSql, ODBC
5. [M] Active Record
person = Person.new(attrs)
• Mapping
person.save # INSERT
person.name = “David”
(Don’t Repeat Yourself)
person.save # UPDATE
classi (Person) ➟ tabelle (People) person.destroy # DELETE
attributi ➟ colonne Project < ActiveRecord::Base
• •Associazioni
has_many :milestones
has_one :project_lead
belongs_to :company
Relazioni uno-a-uno, uno-a-molti, molti-a-molti
• project.has_milestones?
Complesse (tree, liste, single-table inheritance)
• project.create_project_lead
CRUD (Create, Retrieve, Update, Delete) project.company.name
• Caching
if post.save
• Validatori
# passed validation
else
post.errors.count
post.errors.on(“title”)
Standard, Custom, save/create/update post.errors.each { |e| e }
• Callbacks
end
Post < Active Record::Base
has_many :comments
Eventi generati prima e dopo save/create/update/destroy
def before_destroy
comments.destroy_all
end
end
6. [M] Active Record
Order.hbm.xml
JAVA/Hibernate <hibernate-mapping>
<class name=quot;models.Orderquot; table=quot;Ordersquot;
dynamic-update=quot;truequot; dynamic-insert=quot;falsequot;
Order.java
discriminator-value=quot;nullquot;>
public class Order
<id name=quot;idquot; column=quot;idquot; type=quot;java.lang.Longquot;
{
unsaved-value=quot;nullquot;>
private Set items;
<generator class=quot;identityquot;/>
private String name;
</id>
private Long id;
<set name=quot;itemsquot; lazy=quot;falsequot; inverse=quot;falsequot;
cascade=quot;nonequot; sort=quot;unsortedquot;>
public Long getId() { return id;}
<key column=quot;idquot;/>
public void setId(Long id){ this.id = id;}
<one-to-many class=quot;models.Itemquot;/>
</set>
public Set getItems() { return items;}
<property name=quot;namequot; type=quot;java.lang.Stringquot;
public void setItems(Set items) { this.items = items; }
update=quot;truequot; insert=quot;truequot;
public String getName() { return name; }
access=quot;propertyquot; column=quot;namequot;/>
public void setName(String name) { this.name = name; }
</class>
}
</hibernate-mapping>
order.rb
Rails class Order < ActiveRecord::Base
has_many :items
end
7. Action Controller
Action Controller
[C] Action Controller
• Actionsinsteadinstead of object, shared helper methods
ctions grouped in controller
grouped in controller
ction Action as method of object, shared helper methods
as method
• Rendering
• Assigns and codes codes
Actions
endering
def display
@customer = display
def
• @customer =
Customer.find(@params[“id”])
Le azioni sono metodi del Controller Customer.find(@params[“id”])
ssigns •and status status end
es: in Java/Struts ogni azione è una classe
che estende end
Action, un file XML descrive il mapping delle def update
action
def update
if person.save
•Path, Action,Action, Controller
•Rendering immagini)
if person.save
edirection
redirect_action “display”
Redirection
redirect_action “display”
else
else
render “customers/edit”
•HTML/XML/RAW(es: render “customers/edit”
end
rl, Url, Path, Controller end
•Redirection
••Filters seperation of concerns
FrontpageController
ilters Path, Action, Controller
• FrontpageController
Filters
before_filter :cache
Url, after_filter :compress :cache
before_filter
after_filter :compress
rocessing chain, chain, seperation of concerns WebserviceController
Processing WebserviceController
before_filter :token_auth
before_filter :token_auth
•PossibilitàAuthentication, Caching,
Before: Authentication, Caching, e l’output Auditing
di processare l’input Auditing
•
AdministrationController
•Before: Output compression
Before: Authentication, Caching AdministrationController
before_filter :ensure_login, :audit
After: Localization, before_filter :ensure_login,
•After: Localization, Compression
• After: Localization, Output compression SecretController < Administrati...
SecretController < Administrati
prepend_before_filter :encrypt
prepend_before_filter :encryp
8. AJAXAnd XML
Asynchrnous JavaScript
• È una tecnica: Web browser Server
insieme di tecnologie web Login
•
Business
XHTML/CSS XML/XSLT
logic
•
User's
User's
DOM (Document Object Model) Deliver data
partial
client app
•
model
data
XMLHttpRequest model
•
(JavaScript)
JavaScript Frequent
requests
for data
• Nuovo approccio allo sviluppo User
Client
web session
application
• sviluppo di framework complessi
• non richiede plugin Logout
• •Non è un concept astratto Exit
Yahoo Flickr page
• GMail, Google Maps, Google Groups Shared
•
data
Windows Live, Office Live model
• •WEB 2.0
termine coniato dalla O’Really nel 2004.
• da associare non tanto alle tecnologie quanto all’idea di evoluzione dell’usabilità del Web
9. Principi Base
• •Il Browser carica un’applicazione, non il contenuto
Il browser riceve dal server un engine JavaScript incaricato di
gestire le azioni dell’utente. L’engine decide se è necessario
chiedere informazioni al server (es: query DB)
• •Il server invia dati, non pagine
Ad ogni richiesta del browser, il server invia XML/HTML/JS.
• La pagina viene modificata, non ricaricata.
• L’interazione dell’utente con l’applicazione
deve essere fluida e continua
• Ogni azione dell’utente deve prevedere un feedback immediato
• Esperienza di usabilità più vicina a quella Desktop
• Maggiore interattività (componenti complessi, drag-n-drop)
• •Nuovo modo di sviluppare interfacce
L’usabilità e l’interazione con l’utente è fondamentale
• Bisogna dimenticarsi le limitazioni attuali del Web
10. AJAX on Rails
• •AJAX integrato in Ruby on Rails
The Rails Way
• •AJAX Framework Prototype.js
drag-n-drop, effetti visivi, remote call
• •Metodi helper per users”, :update=>”listUsersDiv”,
semplificare lo sviluppo
link_to_remote(“list all
:url=>{:controller=>:account, :action=>:list})
• observe_field
• periodically_call_remote
• form_remote_tag
• form_tag_with_upload_progress
• Normalmente non occorre scrivere codice JavaScript
11. Rails e AJAX
• Lo sviluppo dei Web Application sta avendo un
notevole incremento.
Avere a disposizione strumenti efficienti e chiari,
come Rails, permette di diminuire i tempi di
sviluppo e semplificare la mantenibilità del sistema
• Non bisogna solo concentrarsi sullo sviluppo dei
meccanismi lato server: l’interazione con
l’utente deve essere la parte più importante.
AJAX fornisce gli strumenti necessari per superare
le limitazioni attuali del Web