Si parla dei principi del continuous integration secondo Martin Fowler. Si parte da un problema comune, che è quello di lavorare in tanti sugli stessi sorgenti e si vedono i principi che possono permetterci di lavorare nel modo più sereno possibile.
Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passiPaolo Sereno
Scopo di questa prima lezione è quello di introdurre l’uso di Qt Creator per scrivere una prima applicazione composta da una dialog window. L’applicazione non fa nulla e serve solamente per impratichirsi con le nozioni di base dell’ambiente di sviluppo Qt. La lezione è organizzata in 10 semplici passi. Ogni passo è corredato da una o più immagini (screenshot) per facilitare la comprensione.
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
Questa lezione sul toolkit Qt permette di scrivere una semplice applicazione di visualizzazione immagini, i formati sono quelli più comunemente usati: JPG, BMP, PNG etc.
Questo talk presenterà l'architettura di QPA (ex Lighthouse Project) e come questo consente agli sviluppatori di portare facilmente Qt su sistemi diversi.
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiPaolo Sereno
qtScopo di questa seconda lezione è quello di introdurre l’uso di Qt Creator per scrivere una prima applicazione composta da una main window (QMainWindow).
L’applicazione non fa nulla e serve solamente per impratichirsi con le nozioni di base dell’ambiente di sviluppo Qt.
La lezione è organizzata in pochi semplici passi; ogni passo è corredato da una o più immagini (screenshot) per facilitare la comprensione.
Carlo Milanesi, nel Linux Day dedicato al coding, presenta una rassegna dei principali linguaggi di programmazione presenti e passati. Dopo aver elencato i 30 linguaggi di programmazione più usati in assoluto, ha esposto quali di essi sono più usati per scrivere software open-source. Inoltre, per ogni linguaggio, ha esposto per quali ambiti applicativi risultano preferibili, in base alle loro caratteristiche tecniche e commerciali.
Si parla dei principi del continuous integration secondo Martin Fowler. Si parte da un problema comune, che è quello di lavorare in tanti sugli stessi sorgenti e si vedono i principi che possono permetterci di lavorare nel modo più sereno possibile.
Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passiPaolo Sereno
Scopo di questa prima lezione è quello di introdurre l’uso di Qt Creator per scrivere una prima applicazione composta da una dialog window. L’applicazione non fa nulla e serve solamente per impratichirsi con le nozioni di base dell’ambiente di sviluppo Qt. La lezione è organizzata in 10 semplici passi. Ogni passo è corredato da una o più immagini (screenshot) per facilitare la comprensione.
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
Questa lezione sul toolkit Qt permette di scrivere una semplice applicazione di visualizzazione immagini, i formati sono quelli più comunemente usati: JPG, BMP, PNG etc.
Questo talk presenterà l'architettura di QPA (ex Lighthouse Project) e come questo consente agli sviluppatori di portare facilmente Qt su sistemi diversi.
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiPaolo Sereno
qtScopo di questa seconda lezione è quello di introdurre l’uso di Qt Creator per scrivere una prima applicazione composta da una main window (QMainWindow).
L’applicazione non fa nulla e serve solamente per impratichirsi con le nozioni di base dell’ambiente di sviluppo Qt.
La lezione è organizzata in pochi semplici passi; ogni passo è corredato da una o più immagini (screenshot) per facilitare la comprensione.
Carlo Milanesi, nel Linux Day dedicato al coding, presenta una rassegna dei principali linguaggi di programmazione presenti e passati. Dopo aver elencato i 30 linguaggi di programmazione più usati in assoluto, ha esposto quali di essi sono più usati per scrivere software open-source. Inoltre, per ogni linguaggio, ha esposto per quali ambiti applicativi risultano preferibili, in base alle loro caratteristiche tecniche e commerciali.
Installazione Qt/Qt Quick per target AndroidPaolo Sereno
Questo breve tutorial rappresenta una mini guida per iniziare a programmare con Qt e Qt Quick su target Android. In particolare esso vuole essere un “memo” da usare durante i meetup e workshop sull’argomento organizzati dalla web community Qt-Italia.org.
Paolo Finardi e Fabio Fusili presentano il progetto "Linux va a scuola" del Bergamo Linux Users Group durante il Linux Day 2016.
Il progetto ha lo scopo di supportare le scuole che vogliono migrare i laboratori informatici dal software proprietario al software libero diventando parte attiva nella diffusione della cultura della condivisione.
Nella presentazione sono descritti gli obiettivi, i motivi per cui questa scelta è importante e l'evoluzione che il progetto sta avendo. Sono state, inoltre, elencate le funzionalità pratiche che contraddistinguono la soluzione che implementiamo nei laboratori delle scuole.
Emiliano Vavassori e Paolo Asperti, soci del BgLUG, presentano il progetto Linux va a scuola che il BgLUG sta portanto avanti dal 2015 per portare Linux ed il software libero nelle scuole. Diversamente dalle preceneti slides, queste espongono il progetto da un punto di vista puramente tecnico. Sono stati spiegati i requisiti tecnici e descritte le tecnologie e le logiche implementative utilizzate per fornire la soluzione descritta al mattino. Tra questi, Ansible, PXE Boot, Edubuntu, Epoptes, Git e ovviamente la distribuzione server NethServer Linux della quale ci siamo innamorati per efficienza e semplicità di utilizzo.
Immaginiamo un modo diverso di concepire la struttura di un pacchetto software che ci consenta di spaziare tra affidabilità e scalabilità. Sulla costruzione ci affidiamo alle risorse infinite di un PublicCloud, di cui monitorare i costi infrastrutturali per evitare di scendere sotto il break even point nel rapporto Costi/Ricavi. Pensare il software come una nuvola di processi staccati che colloquiano tra loro, ci da maggiore flessibilità (la singola ape è sacrificabile e sostituibile nel contesto dello sciame), mentre il concetto di Alveare come concentrazione dei dati raccolti/elaborati, ci permette di semplificare e gestire meglio il problema CONSISTENZA. Avremo così agenti semplici e rimpiazzabili in modo automatico che TRASPORTANO dati dall’acquisizione allo storage (Alveare), in cui, altri moduli manipoleranno e gestiranno il Miele. Abbiamo trasformato il problema da: gestiamo pochi oggetti complessi (VM) in gestiamo tantissimi moduli semplici (Container), come li coordiniamo??? Kubernets è una possibile risposta.
Esploriamo docker per scegliere tra un'approccio monolitico tramite le VM o un approccio modulare per una gestione più efficiente e leggera delle applicazioni in ambiente Linux.
Vagrant e Docker a confronto;scegliere ed iniziareDaniele Mondello
Pitch presentato al Linux Day 2015 a Palermo su Vagrant e docker per confrontarli, scegliere ed iniziare. Partendo dal concetto di virtualizzazione, proseguendo con l'analisi delle due soluzioni fino a dare cenni sull'installazione ed un primo utilizzo.
Presentazione "quickie" sull'integrazione fra Maven ed Eclipse offerta dal plugin m2eclipse di Sonatype tenuta al JUG Milano Meeting #29 del 3 luglio 2008: http://www.jugmilano.it/vqwiki/jsp/Wiki?Meeting3Luglio2008&highlight=m2eclipse
Le applicazioni GUI vengono definite applicazioni di tipo “event-driven”, ovvero pilotate dagli eventi; questa definizione è davvero rappresentativa, in quanto in un'applicazione GUI, tutto ciò che succede è il risultato di un evento.
Quando programmiamo con il toolkit Qt, raramente abbiamo bisogno di preoccuparci del meccanismo degli eventi, poiché i widgets Qt che usiamo emettono autonomamente dei segnali nel momento in cui occorre qualcosa di significativo. La gestione degli eventi diventa quindi importante nel momento in cui vogliamo scrivere dei nuovi custom widgets o vogliamo modificare il comportamento di widgets esistenti.
Distribuire una libreria Java per usarla come dipendenza gradlePaolo Montalto
L'utilizzo di dipendenze software è una tecnica entrata già da tempo nella pratica quotidiana di ciascun buon programmatore. I suoi vantaggi sono indubbi ma non tutti sanno come funzionano le dipendenze e come sia possibile rendere disponibile pubblicamente la propria libreria.
In questo talk cerco di spiegare per quale motivo è importante utilizzare dipendenze software, come funzionano, perché può essere utile pubblicare le proprie librerie e come è possibile farlo, mostrando un caso reale basato su Gradle.
Livin' with Docker - dallo sviluppo alla produzionegiacomos
Presentiamo un caso di studio di un progetto web nato e cresciuto con Docker al centro della scena. Vedremo le soluzioni scelte durante tutto il percorso, partendo da docker-compose in locale, per arrivare a CoreOS e systemd in produzione, passando per la fase di continuous integration/build e il deploy.
Talk DockerOps 13-02-2016, Ferrara
Una introduzione a Laravel, un framework open source di tipo MVC scritto in PHP per lo sviluppo di applicazioni web. La versione di riferimento per questa presentazione è la 5.x
Introduzione a Docker e alla Dockerizzazione.
Filosofia e progettazione Docker
Comandi principali per gesitere immagini, container, volumi e reti
Dockerfile e docker-compose
Valerio Radice @ Nextre (Maggio 2017)
TAG: docker , Dockerfile , docker-compose , italian , nextre
Qt Lezione0: uso del C++ per scrivere applicazioni QtPaolo Sereno
Per essere sicuri che la nostra competenza di C++ sia sufficiente per la programmazione delle librerie Qt, facciamo un piccolo ripasso dei concetti principali
Installazione Qt/Qt Quick per target AndroidPaolo Sereno
Questo breve tutorial rappresenta una mini guida per iniziare a programmare con Qt e Qt Quick su target Android. In particolare esso vuole essere un “memo” da usare durante i meetup e workshop sull’argomento organizzati dalla web community Qt-Italia.org.
Paolo Finardi e Fabio Fusili presentano il progetto "Linux va a scuola" del Bergamo Linux Users Group durante il Linux Day 2016.
Il progetto ha lo scopo di supportare le scuole che vogliono migrare i laboratori informatici dal software proprietario al software libero diventando parte attiva nella diffusione della cultura della condivisione.
Nella presentazione sono descritti gli obiettivi, i motivi per cui questa scelta è importante e l'evoluzione che il progetto sta avendo. Sono state, inoltre, elencate le funzionalità pratiche che contraddistinguono la soluzione che implementiamo nei laboratori delle scuole.
Emiliano Vavassori e Paolo Asperti, soci del BgLUG, presentano il progetto Linux va a scuola che il BgLUG sta portanto avanti dal 2015 per portare Linux ed il software libero nelle scuole. Diversamente dalle preceneti slides, queste espongono il progetto da un punto di vista puramente tecnico. Sono stati spiegati i requisiti tecnici e descritte le tecnologie e le logiche implementative utilizzate per fornire la soluzione descritta al mattino. Tra questi, Ansible, PXE Boot, Edubuntu, Epoptes, Git e ovviamente la distribuzione server NethServer Linux della quale ci siamo innamorati per efficienza e semplicità di utilizzo.
Immaginiamo un modo diverso di concepire la struttura di un pacchetto software che ci consenta di spaziare tra affidabilità e scalabilità. Sulla costruzione ci affidiamo alle risorse infinite di un PublicCloud, di cui monitorare i costi infrastrutturali per evitare di scendere sotto il break even point nel rapporto Costi/Ricavi. Pensare il software come una nuvola di processi staccati che colloquiano tra loro, ci da maggiore flessibilità (la singola ape è sacrificabile e sostituibile nel contesto dello sciame), mentre il concetto di Alveare come concentrazione dei dati raccolti/elaborati, ci permette di semplificare e gestire meglio il problema CONSISTENZA. Avremo così agenti semplici e rimpiazzabili in modo automatico che TRASPORTANO dati dall’acquisizione allo storage (Alveare), in cui, altri moduli manipoleranno e gestiranno il Miele. Abbiamo trasformato il problema da: gestiamo pochi oggetti complessi (VM) in gestiamo tantissimi moduli semplici (Container), come li coordiniamo??? Kubernets è una possibile risposta.
Esploriamo docker per scegliere tra un'approccio monolitico tramite le VM o un approccio modulare per una gestione più efficiente e leggera delle applicazioni in ambiente Linux.
Vagrant e Docker a confronto;scegliere ed iniziareDaniele Mondello
Pitch presentato al Linux Day 2015 a Palermo su Vagrant e docker per confrontarli, scegliere ed iniziare. Partendo dal concetto di virtualizzazione, proseguendo con l'analisi delle due soluzioni fino a dare cenni sull'installazione ed un primo utilizzo.
Presentazione "quickie" sull'integrazione fra Maven ed Eclipse offerta dal plugin m2eclipse di Sonatype tenuta al JUG Milano Meeting #29 del 3 luglio 2008: http://www.jugmilano.it/vqwiki/jsp/Wiki?Meeting3Luglio2008&highlight=m2eclipse
Le applicazioni GUI vengono definite applicazioni di tipo “event-driven”, ovvero pilotate dagli eventi; questa definizione è davvero rappresentativa, in quanto in un'applicazione GUI, tutto ciò che succede è il risultato di un evento.
Quando programmiamo con il toolkit Qt, raramente abbiamo bisogno di preoccuparci del meccanismo degli eventi, poiché i widgets Qt che usiamo emettono autonomamente dei segnali nel momento in cui occorre qualcosa di significativo. La gestione degli eventi diventa quindi importante nel momento in cui vogliamo scrivere dei nuovi custom widgets o vogliamo modificare il comportamento di widgets esistenti.
Distribuire una libreria Java per usarla come dipendenza gradlePaolo Montalto
L'utilizzo di dipendenze software è una tecnica entrata già da tempo nella pratica quotidiana di ciascun buon programmatore. I suoi vantaggi sono indubbi ma non tutti sanno come funzionano le dipendenze e come sia possibile rendere disponibile pubblicamente la propria libreria.
In questo talk cerco di spiegare per quale motivo è importante utilizzare dipendenze software, come funzionano, perché può essere utile pubblicare le proprie librerie e come è possibile farlo, mostrando un caso reale basato su Gradle.
Livin' with Docker - dallo sviluppo alla produzionegiacomos
Presentiamo un caso di studio di un progetto web nato e cresciuto con Docker al centro della scena. Vedremo le soluzioni scelte durante tutto il percorso, partendo da docker-compose in locale, per arrivare a CoreOS e systemd in produzione, passando per la fase di continuous integration/build e il deploy.
Talk DockerOps 13-02-2016, Ferrara
Una introduzione a Laravel, un framework open source di tipo MVC scritto in PHP per lo sviluppo di applicazioni web. La versione di riferimento per questa presentazione è la 5.x
Introduzione a Docker e alla Dockerizzazione.
Filosofia e progettazione Docker
Comandi principali per gesitere immagini, container, volumi e reti
Dockerfile e docker-compose
Valerio Radice @ Nextre (Maggio 2017)
TAG: docker , Dockerfile , docker-compose , italian , nextre
Qt Lezione0: uso del C++ per scrivere applicazioni QtPaolo Sereno
Per essere sicuri che la nostra competenza di C++ sia sufficiente per la programmazione delle librerie Qt, facciamo un piccolo ripasso dei concetti principali
Con la nascita di .NET Core l'utilizzo del framework .NET è sbarcato in modo ufficiale anche su altre piattaforme.
Scrivere applicazioni moderne con SDK e tool nativi su altre piattaforme è diventato la normalità.
Lo vedremo realizzando un semplice applicazione .NET Core su Linux ed analizzando varie possibilità di deploy su altre piattaforme Linux based con il minimo sforzo e senza limitazioni.
Nel corso di questo webinar apprenderemo le basi necessarie per sviluppare un'applicazione Microsoft Windows Phone: quali tool di sviluppo utilizzare, cosa ci mette a disposizione l'SDK, come è strutturato un progetto.
In questa presentazione verrà introdotto brevemente il concetto di RIA (Rich Internet Application), di Framework e fondendo i due concetti verranno presentati alcuni dei più conosciuti Framework per la realizzazione di RIA. Visualizza la presentazione.
Si parla di IcedTea, della macchina virtuale Java completamente libera e degli altri strumenti. Vengono spiegate le differenze tra l’approccio con interprete, compilatore e macchina virtuale. Si racconta di quali macchine virtuali ci sono per quali linguaggi. Vengono descritte le peculiarità di IcedTea e si prendono in esame le differenze tra HotSpot Zero Assembly con la macchina virtuale di Oracle, HotSpot. Si parla di quali linguaggi possano essere compilati per macchina virtuale Java.
I linguaggi del web - seconda edizione (3° giornata)Diego La Monica
Modulo 4 – AJAX
- Interazioni client/server
- Framework a confronto:
- jQuery
- Mootools
- YUI
- JAST
Modulo 5 – ARIA e l’accessibilità lato client
- Prendere un po' di ARIA
- Le tecnologie assistive
- Ruoli, stati e proprietà
- Strumenti per lo sviluppo accessibile
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...Codemotion
ASP.NET Core è il nuovo framework open-source e cross-platform per la creazione di applicazioni Cloud, Web, IoT e Backend per applicazioni mobili composto da elementi modulari che permettono di avere la massima flessibilità e il minimo overhead. Come sfruttare tutti questi pregi, per creare un servizio web da pubblicare nel Cloud e consumabile da un'applicazione Android ? Lo scopriremo insieme durante la sessione.
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...Marco Parenzan
Windows Azure e Team Foundation Server hanno cominciato a cambiare in una maniera incredibile il modo di gestire i progetti software e tutta l'attività professionale dello sviluppatore. Ora il passaggio ulteriore: un Visual Studio, al momento ancora agli inizi, ma molto promettenti, completamente Web che gira nel browser. Vediamo cosa possiamo farci, tra sviluppo software, scelte tecnologiche, gestione del progetto e deployment.
2. ● Browser "proprietario" (motivazioni, cenni)
● Basi di partenza per lo sviluppo
● Evoluzione di Webkit/Chromium
● Esempi di casi già realizzati
Oggi si parla di
4. ● capire perché serve un browser
proprietario
● identificare la terminologia: cosa vuol
dire "browser proprietario"
Perché realizzare un browser (1)
5. ● fornire uno strumento unico per l'accesso
ai servizi
● facilitare il test dei servizi web
● fornire funzionalità aggiuntive non
presenti nei normali browser
Perché realizzare un browser (2)
7. Lo sviluppo di un browser parte
dall'individuazione del motore di rendering
su cui costruire il client
● Trident (IE)
● Gecko (Firefox)
● Webkit (Safari, Chromium)
● Chromium
Quali sono le basi di partenza
8. ● Vantaggi
E' già installato su tutti i pc Windows
Buona aderenza agli standard nelle ultime versioni
● Svantaggi
Sui singoli pc si possono trovare versioni diverse
Poca "manutenzione"
No multiprocess nativo
Trident (IE)
9. ● Vantaggi
Opensource
Buona vitalità del progetto
Leggermente migliore sugli altri per l'impatto in memoria
Buona aderenza agli standard
● Svantaggi
Multiprocess limitato
Necessario fornire client + engine
Gecko (Firefox)
10. ● Vantaggi
Opensource
Buona vitalità del progetto
Buona aderenza agli standard
● Svantaggi
Assenza totale del multiprocess (disponibile solo con
Webkit2 che non è ancora maturo per la distribuzione)
Necessario fornire client + engine
Webkit (Safari, Chromium)
11. ● Vantaggi
Base WebKit (quindi eredita tutti i vantaggi)
Architettura multiprocess nativa
● Svantaggi
Più pesante in memoria
No API native da sfruttare
Necessario fornire client + engine
NB: il motore JS di "default" di WebKit è
JavascriptCore. Google lo ha sostituito con V8.
Chromium
13. ● all'inizio c'erano KHTML e KJS nel 1998
● Webkit nasce come fork di KHTML e KJS
da parte di Apple nel 06/2001
I due fork prendono il nome di WebCore
e JavascriptCore
Un po' di storia su Webkit (1)
14. ● esce Safari nel 06/2003
● diventa open-source nel 06/2005
● rilascio di Chrome 1.0 (stabile) nel
12/2008
Un po' di storia su Webkit (2)
18. ● Smartphone e tablet
Android, IOS, Blackberry
● Playstation, Nintendo DS
● Apple TV, Google TV
● ...ovviamente pc
Microsoft, Linux, Mac
Uso di Webkit
19. ● supporto Javascript (ECMAScript 5.1, in
corso ES6)
● CSS1 (completo), CSS2.1 (quasi
completo), CSS3 (quasi completo)
● supporto per le tecnologie basate su XML
come SVG, XPATH, XSLT
Features principali Webkit (1)
20. ● supporto plugin (NPAPI e Webkit - solo
MacOSX)
● supporto HTML5
Features principali Webkit (2)
22. La nuova architettura
prevede la separazione
nativa dei componenti
di rendering da quelli
della UI in processi
indipendenti.
Architettura di Webkit2
23. Anche in questo caso c'è
una separazione di
processo che divide
l'applicazione dalla
parte di elaborazione
Architettura di Chromium
25. ● Prima esperienza con Trident classico
● Seconda esperienza con Trident e
architettura multiprocess proprietaria
● Terza esperienza con Chromium
Esperienza personale
26. ● Form classica
● Webbrowser control (direttamente dalla
lista componenti)
● Fine
Prima esperienza
27. ● Un progetto per l'applicazione host (fa da
contenitore)
● Un progetto che contiene solo il browser
e la logica di controllo (un processo per
ogni sessione)
● Ogni window dello stesso processo
condivide la sessione
● Il freeze di una window blocca tutto il
processo browser (ma non l'host)
Seconda esperienza
28. ● Realizzazione di un wrapper
sull'architettura Chromium
● Esposizione delle API per il dialogo con il
motore interno e creazione di una classe
di delegati per la notifica degli eventi
del browser
Terza esperienza
29. Il funzionamento di Chromium si basa
pesantemente sullo scambio di messaggi
interno tra i vari componenti.
La realizzazione del wrapper si basa
sull'intercettazione dei messaggi che
servono a realizzare le funzionalità
richieste.
Realizzazione pratica (1)
30. Il wrapper si inserisce nel
livello WebContentsImpl e
Render[View|Widget]HostImpl per
intercettare i messaggi
Realizzazione pratica (2)
31. Codice per inizializzare il browser, creare
una window e navigare verso un indirizzo
Realizzazione pratica (3)
//Init del wrapper
Browser::init(homeDir, prefDir, downloadDir);
//Creazione del contesto e della window
Browser::Context *context = Context::create();
win = Browser::Window::create(context, hWnd);
//Creo la classe dei delegati per ricevere gli eventi della window
DelegateClass *dc = new DelegateClass();
win->setDelegate(dc);
//Imposto le dimensioni della finestra
win->resize(800, 600);
//Naviga verso la url indicata
win->navigateTo("http://www.google.it");
32. Alle window devono essere passati gli
eventi generati dall'utente
● Tastiera
Interazione (1)
win->keyEvent(
<pressed?true:false>,
<stato_CTRL_ALT_SHIFT>,
<virtual_key_code>,
<scancode>);
win->textEvent(
<sequenza_caratteri>,
<lunghezza_sequenza>);
34. ● Javascript
Interazione (3)
win->executeJavascript(
const wchar_t *js, size_t jsLen)
int id = win->executeJavascriptWithResultCallback(
const wchar_t *js, size_t jsLen)
void onJavascriptResult(Window *win, int id,
Script::Variant *args, size_t numArgs){}
35. ● Delegati per la navigazione
Definizione delegati
class DelegateClass : public Browser::WindowDelegate {
public:
void onTitleChanged(Window *win, const wchar_t *title){}
void onPaint(...){}
void onCursorUpdated(Window *win, const Cursor &newCursor){}
void onShowContextMenu(
Window *win, const ContextMenuEventArgs &args){}
...
36. ● Chromium è molto veloce nel ridisegno
L'aggiornamento della superficie grafica
viene effettuato solo per la parte che è
cambiata, non necessariamente per tutta la
finestra
Particolarità del repaint (1)
38. Design del wrapper (1)
Librerie generate
dal progetto
Chromium
Browser.dll
unmanaged
in C++
Host_CPlusPlus.exe
unmanaged host
in C++
39. Design del wrapper (2)
Librerie generate
dal progetto
Chromium
Browser.dll
unmanaged
in C++
BrowserManaged.dll
managed
in C++/CLR
Host_CSharp.exe
managed host
in C#
Host_CPlusPlus.exe
unmanaged host
in C++
40. L'utilizzo massivo dei delegati in
un'applicazione managed può creare seri
problemi di prestazioni.
In questo caso, gli eventi non sono chiamati
con alta frequenza ad eccezione dell'evento
per il ridisegno della finestra.
Cambio della logica dell'evento onPaint
Prestazioni con i delegate (1)
41. L'obbiettivo è eliminare la gestione del
paint nell'host managed.
● l'evento onPaint è gestito nella dll
unmanaged (gestione di un raw buffer
interno)
● la dll "invalida" le aree da aggiornare
● l'host gestisce il WM_PAINT
Prestazioni con i delegate (2)
42. Host
Prestazioni con i delegate (3)
Browser.dll
unmanaged
in C++
Raw bitmap
buffer
HWND
InvalidateRect()
UpdateWindow()
BitBlt()
WM_PAINT
43. ● La realizzazione di un browser
proprietario ha un costo relativamente
basso, il knowhow c'è già
● I vantaggi che si possono ottenere sono
di gran lunga più elevati (per gli
utilizzatori e per gli sviluppatori)
...per concludere (1)
44. ● Il progetto del browser è già presente in
rete (con il nome di Berkelium) così
come il wrapper C++/CLR anche se molto
vecchi (v8-v11)
● Non ci sono differenze di allineamento di
versioni tra Chrome e Chromium
...per concludere (2)