• Come un abito cucito su misura, i nostri progetti software uniscono le potenzialità di tecnologie innovative alle specifiche esigenze del cliente.

    Showcase progetti
  • Analizziamo e razionalizziamo con il cliente i processi e le attività della propria azienda, per poi seguirlo nella scelta delle giuste strategie IT da adottare.

    Le nostre competenze
  • Crediamo nelle potenzialità di un percorso formativo che unisca forti basi teoriche e metodologiche ad una continua applicazione pratica di quanto si apprende.

    Dettaglio dei corsi
  • Progettiamo e sviluppiamo sistemi e progetti basati su dispositivi mobile consumer (iPhone, Windows Phone 7 Series), industriali (Windows CE) e custom (basati su microcontrollori 8/16/32 bit).

    Approfondimenti
 

Applicazioni .NET MicroFramework? il MicroGardener!

February 2, 2010 13:06 by g.ruta

Chi ha partecipato all’evento DotNetUmbria che Innovactive ha organizzato lo scorso 15 Gennaio ricorda che una delle applicazioni più complete che abbiamo presentato (.NET MicroFramework ‘onboard’) consiste in una serra domestica il cui microclima può essere impostato a distanza, controllando parametri quali la temperatura, la luminosità e l’umidità del terreno.
In questi giorni abbiamo continuato a lavorare sul nostro prototipo portandolo a rappresentare, a nostro avviso, un sistema completo di monitoraggio remoto della serra; con questo post pertanto, a vantaggio di tutti, presentiamo schematicamente e illustriamo la soluzione completa, lo stato dell’arte del nostro MicroGardener.

MicroGardenerSchema

Come potete osservare nello schema sopra riportato la serra è dotata di sensori per rilevare costantemente il grado di umidità del terreno, la temperatura in prossimità delle piante e la luminosità ambientale. Tali dati vengono trasmessi wireless ad un modulo Tahoe (una scheda di sviluppo, tra le prime sul mercato che ci ha consentito di programmare e sperimentare con il MicroFramework) grazie ad una coppia di moduli XBee. Molto ci sarebbe da dire su questi dispositivi, ma allo scopo del nostro post basta dire che utilizziamo la ‘API Mode’ per configurare il modulo posto presso la serra come dispositivo che autonomamente trasmette i dati letti dai sensori e occasionalmente riceve un comando di attivazione/disattivazione di un attuatore, mentre il modulo posto presso la scheda di sviluppo Tahoe è in grado, grazie alla libreria Micro Framework Toolkit (http://mftoolkit.codeplex.com/) di interpretare lo stack XBee per le due situazioni di ricezione dei dati dei sensori e di invio dei comandi di attuazione.
Il dispositivo che abbiamo presentato nell’ambito del citato evento si fermava appunto al modulo Tahoe, che è dotato di un display LCD e di una serie di tasti per l’interazione con l’utente; il programma MicroFramework realizzato consente di leggere i valori che giungono dai sensori, visualizzarne graficamente l’andamento nel tempo e agire con i comandi sui singoli attuatori (una lampada per la luminosità, una lampada ad infrarossi per la temperatura e la pompa per l’irrigazione del terreno) oppure selezionando una modalità automatica, nella quale il software provvede al mantenimento dei parametri entro i range impostati per il microclima voluto, azionando in totale autonomia gli attuatori.
Un sistema come quello fin qui presentato, ovviamente, si limita a remotizzare il controllo della serra su distanze compatibili con la portata dei moduli XBee e può essere pensato comunque per l’applicazione domestica (o di vivaio) comunque locale. Come rendere il tutto veramente delocalizzato? Utilizzando il web, ovviamente!
Ecco in quale direzione abbiamo esteso il sistema: utilizzando come server web un modulo aggiuntivo ethernet per il Tahoe (prodotto, come il Tahoe, da Device Solutions; oggi nel loro catalogo si trova il modulo Tahoe-II, che già implementa funzionalità ethernet) abbiamo implementato una API REST che espone quanto ci serve per interagire con la serra in termini di lettura dati e impartizione dei comandi; un servizio WCF si occupa di interrogare periodicamente (polling) il server web per tenersi in memoria i dati dei sensori aggiornati; a questo punto sul web abbiamo pensato la possibilità per l’utente di poter controllare la serra con un semplice browser e, per rendere il tutto un po’ più accattivante, un client Silverlight.
I vantaggi di questa architettura sono molteplici in termini di scalabilità e di prestazioni: infatti pensando al servizio in rete locale con il modulo Tahoe l’attività di polling non viene effettuata su web; poi il tutto può essere implementato per più serre, ovvero per molti sistemi serra + XBee + Modulo MicroFramework; in fase di configurazione del servizio WCF impostiamo quali serre gestire (essenzialmente quali indirizzi interrogare con chiamate REST) e, all’atto di chiamata del servizio da parte di un client, il servizio fornirà all’utente la lista delle serre controllate per operare una scelta.
Completa il tutto un sottosistema che renderà felici gli scettici da una parte (se non vedo non credo!) e coloro che comunque vogliono gustarsi anche ‘a vista’ le loro piante o fiori: abbiamo munito la serra di webcam e instradato il segnale proveniente da essa tramite Microsoft Expression Encoder, esponendolo in streaming su server apposito; il client silverlight è stato munito dell’apposito controllo per la fruizione del flusso video in streaming e…
…eccovi il risultato finale!

MicroGardenerClient

Per vedere il sistema funzionante (con la sola avvertenza che attualmente la pompa per l’irrigazione è sostituita da una semplice lampadina per motivi di sicurezza) e provare ‘live’ a controllare la nostra piccola serra collegatevi alla dashboard di test, quindi selezionate ‘Innovactive Garden’ e cliccate su ‘Connect’…
…solo per utenti con il ‘pollice verde’!


Currently rated 5.0 by 2 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Uno sguardo a MVC#

August 26, 2009 16:50 by g.ruta

MVC# è un ambiente che facilita l’implementazione, in ambiente .NET, di una architettura a tre livelli secondo il pattern MVP (Model-View-Presenter).
Gli autori nel presentare il loro lavoro (qui il sito ufficiale) ci introducono alle più o meno sottili differenze tra MVC (Model-View-Controller) e MVP, poi spiegano come quest’ultimo risolva parte della complessità del precedente e sia più adatto agli ambienti di programmazione odierni, giustificando così la loro scelta di implementare MVP, infine dichiarano che per il loro prodotto useranno la dicitura ‘controller’ anziché ‘presenter’ (da qui il nome MVC# e, a mio avviso, una certa confusione tra pattern e nomenclatura, ma tant’è!).

I concetti alla base del pattern sono pochi: ogni applicazione si compone di una serie di task (ovvero una serie di azioni che portano a termine un compito o risolvono un problema), ogni task comporta il coinvolgimento dell’utente e comunque il passaggio attraverso più interaction points, ognuno dei quali

    • riceve ed elabora i datti immessi dall’utente
    • inoltra le opportune richieste agli oggetti business
    • interroga e/o modifica lo stato del task
    • invia un feedback all’utente

Nell’ottica della semplificazione si associa ogni interaction point ad una vista (view) realizzata poi con una sola classe, alle spalle della quale ci sarà la corrispondente classe controller a realizzare lo strato applicativo e a dialogare con gli oggetti business (domain); prendo a prestito lo schema presente nel sito di MVC# per visualizzare graficamente il tutto:

MVP

Ora veniamo nello specifico al valore aggiunto di MVC#, che si propone appunto di semplificare l’uso di MVP da parte degli sviluppatori.
Per quanto detto sopra l’applicazione è organizzata in task: ebbene anzitutto ogni task della applicazione deve essere ‘avviato’, poi deve essere possibile navigare all’interno del task (ovvero effettuare transizioni attraverso i suoi interaction points), e da un punto di vista di User Interface deve essere possibile usare diverse piattaforme (web o Windows). Per il primo punto MVC# fornisce la classe TaskManager che espone un metodo

public ITask StartTask(Type taskType)

che crea un’istanza del task del tipo passato come parametro, una della classe TaskInfo che popola con le caratteristiche del particolare tipo di task richiesto e un’istanza della classe Navigator che associa al task per poi invocare il metodo OnStart() del task; la classe Navigator a sua volta fornisce il metodo Navigate(…) che consente il passaggio da un interaction point ad un altro appoggiandosi sulla classe ViewManager che ovviamente ha diverse implementazioni a seconda della piattaforma usata per realizzare la UI (MVC# si applica a UI realizzate con Winforms, asp.net Webforms, SIlverlight e .NET Compact Framework): il comportamento generale è sintetizzato in una interfaccia IViewsManager.
Ogni vista, poi, deve essere creata la prima volta che viene ‘navigata’ e pertanto la Classe ViewManager è in grado di avere, a partire dal tipo della vista, una classe ViewInfo (indipendente dalla piattaforma per la quale la vista è realizzata) popolata e una ViewInfoCollection alla quale aggiungere le viste nuove alla loro prima creazione; ad ogni creazione di una vista, poi, si ha anche l’associazione della stessa al suo controller: secondo quanto previsto da MVP infatti deve essere possibile accedere al controller dalla vista e viceversa.
Resta ancora un legame previsto da MVP, tra il controller e il task, perché deve essere possibile dal controller accedere al task per modificarne lo stato e per poter effettuare navigazioni tra i suo interaction points. Questo si realizza ancora per il tramite della classe Navigator responsabile di tenere i controller per i suo task e che espone il metodo GetController.

In poche parole in effetti l’ambiente risparmia la scrittura di tanto codice e permette di implementare il pattern MVP egregiamente. Noi lo abbiamo sperimentato con una UI Silverlight 2 e in effetti abiamo raggiunto una buona produttività in tempi brevi.


Currently rated 4.0 by 1 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5