martedì 4 dicembre 2012

DevCamp – Mestre 06.12.2012

Se giovedì 6 dicembre 2012 volete passare una giornata ad imparare a sviluppare applicazioni per Windows 8, Windows Phone e Windows Azure, volete testare le vostre applicazioni su dispositivi ARM e x86, con il touch e i sensori e siete dalle parti di Mestre questa è un’occasione da non lasciarvi sfuggire. Questo è il link per maggiori informazioni e, ovviamente, per le inscrizioni.

In coda all’evento ci saranno le sessioni presentate da XeDotNet, in dettaglio:

  • XAML/C# vs HTML5/Javascript: Quale strumento usare per sviluppare metro-style applications
  • WinRT - Under the hood
  • TFS Dashboard

Vi aspettiamo numerosi!

lunedì 19 novembre 2012

Introducing .NETCF 3.9–Windows Embedded Compact 2013

Come anticipato nei post precedenti inizia a prendere forma e a delinearsi i contorni della nuova versione del .NETCF in uscita con la prossima release di Windows Embedded Compact. Questa versione deriva direttamente da quella attualmente distribuita su Windows Phone 7.5. I punti saliente di questa nuova versione sono:

  • Incremento generali delle prestazioni.
  • Nuovo Garbage collector: incremento significativo delle performance del GC.
  • Runtime multicore: supporto per dispositivi multicore con supporto completo per istruzioni ARM VFP.
  • Sharing Server, condivisione del codice runtime tra varie applicazioni con conseguente incremento di prestazione dello statup delle stesse applicazioni.
  • Miglioramento della gestione della memoria.
  • Supporto completo in VS2012.
  • Supporto completo per C++.
  • Debugging di applicazioni con Hyper-V
  • Piena compatibilità con .NETCF 3.5 a livello sorgente, non compilato!

La nuova release sarà disponibile con l’uscita di Windows Embedded Compact 2013 con il relativo SDK integrato in VS2012.

L’articolo originale lo potete trovare in questo link.

giovedì 15 novembre 2012

Windows Embedded Compact v.Next uncovered

Finalmente iniziano ad arrivare notizie ufficiali sul prossimo rilascio! Prima di tutto il nome ufficiale sarà Windows Embedded Compact 2013. Il supporto per VS2012 sarà completo, dall’ambiente di sviluppo, con i relativi tools, sino al Platform Builder. Questo comporta di non avere più versioni diverse di VS installate sulla PC per lo sviluppo embedded e non.

Assieme a questo arriverà una nuova versione del CRT con il pieno supporto per l’auto-parallelizzazione del codice e l’auto-vettorizzazione, sempre se il processore dispone di registri FP. Altro punto saliente è l’introduzione di molte delle funzionalità disponibili con il nuovo standard C++11.

Per quanto riguarda il .NET CF sarà aggiornato alla versione 3.9. Punti salienti di questa versione sono il notevole miglioramento  delle prestazioni generali, nonché l'allocazione di memoria e la sua gestione con la rivisitazione completa del GC. L'occupazione di memoria del runtime è stata ridotta tramite la nuova funzione di “sharing server” che permette di riutilizzare il codice caricato del runtime tra applicazioni diverse. Altra novità rilevante del runtime è il supporto del multi-core con il conseguente incremento di velocità.  

L’articolo originale è disponibile in questo link.

Se volete avere un’idea anche della road map dei prossimi rilasci questo è il link

Che dire, dopo anni di attesa forse hanno capito che il segmento embedded e soprattutto la parte compact merita una considerazione diversa!

lunedì 12 novembre 2012

Diplay CP7–WPF Touch Screen Manager

In queste ultime settimane ho iniziato il porting di un applicativo sviluppato su .NETMF verso .NET Gadgeteer. Oltre al cambi del HW con le inevitabili modifiche, al cambio delle librerie utilizzate, ecc. mi sono imbattuto in alcune problematiche relative all’utilizzo del display CP7. In dettaglio il driver del display, fornito con il relativo modulo Gadgeteer, non si integra minimamente con gli eventi WPF ma fornisce, in modo abbastanza raw, le varie funzionalità di touch. Il codice che sto convertendo ha una parte di interfaccia U,I scritta utilizzando il FW WPF del .NETMF, abbastanza corposa e ovviamente utilizza gli eventi di touch dei singoli controlli. A questo punto le possibilità sono due, riscrivere la parte di UI, magari utilizzando la libreria Glide, o scrivere un manager che catturi gli eventi del touch del display convertendoli in eventi gestibili da WPF e dai relativi controlli. Ovviamente ho scelto la seconda strada. Dopo alcune ore, spese a decompilare con dotpeek sial il driver del display ma soprattutto la parte di tinycore del .NETMF ho trovato la soluzione. Tutto ruota attorno alla classe TouchEventArgs. Di seguito riporto lo spezzone del codice saliente del manager che ho implementato.

private void OnDisplayScreenPressed(Display_CP7 sender, Display_CP7.TouchStatus touchStatus)
{
    try
    {
        if (_isTouchValid || SkipAllEvent)
            return;
 
        if (touchStatus.numTouches > 0)
        {
            _isTouchValid = true;
 
            int len = 0;
            for (int i = 0; i < touchStatus.touchPos.Length; i++)
                len += touchStatus.touchPos[i].bActive ? 1 : 0;
 
            _touchInputs = new TouchInput[len];
 
            for (int i = 0, idx = 0; i < touchStatus.touchPos.Length; i++)
            {
                if (!touchStatus.touchPos[i].bActive)
                    continue;
 
                _touchInputs[idx++] = new TouchInput()
                                            {
                                                X = touchStatus.touchPos[i].xPos,
                                                Y = touchStatus.touchPos[i].yPos
                                            };
 
                if (touchStatus.touchPos[i].bActive)
                {
                    _touchX = touchStatus.touchPos[i].xPos;
                    _touchY = touchStatus.touchPos[i].yPos;
                }
            }
 
            var control = _display.WPFWindow.ChildElementFromPoint((int)_touchX, (int)_touchY);
 
            if (control != null && control.IsVisible && control.IsEnabled)
            {
                var arg = new Microsoft.SPOT.Input.TouchEventArgs(null, DateTime.Now, _touchInputs);
 
                arg.RoutedEvent = TouchEvents.TouchDownEvent;
                control.RaiseEvent(arg);
            }
        }
        else
        {
            _isTouchValid = false;
        }
    }
    catch (Exception ex)
    {
        Debug.Print(ex.ToString());
    }
}

Il metodo riporta la gestione dell'evento di pressed del display. Nel metodo sono verificati i punti di touch, viene ricercato il controllo su cui è stato toccato il display e viene così costruito l’oggetto TouchEventArgs. Il tutto poi viene sparato come evento al controllo precedentemente ricercato tramite la RaiseEvent.




private void OnDisplayScreenReleased(Display_CP7 sender)
{
    try
    {
        if (!_isTouchValid || SkipAllEvent)
            return;
 
        _isTouchValid = false;
 
        var control = _display.WPFWindow.ChildElementFromPoint((int)_touchX, (int)_touchY);
 
        if (control != null && control.IsVisible && control.IsEnabled)
        {
            var arg = new Microsoft.SPOT.Input.TouchEventArgs(null, DateTime.Now, _touchInputs);
            arg.RoutedEvent = TouchEvents.TouchUpEvent;
            control.RaiseEvent(arg);
        }
    }
    catch (Exception ex)
    {
        Debug.Print(ex.ToString());
    }
}


La stessa cosa viene fatto anche nell’evento di release del display, ovviamente sempre ricercado il controllo su cui si rilascia il tocco dal display.


In questo link potete trovare l’intero esempio basato su una FEZ Hydra e relativo display CP7. Alla fine, con qualche ora di lavoro, sono riuscito a convertire l’intero progetto salvando interamente la parte UI WPF.


Nota: per l’utilizzo del codice si deve aver installato l’ultima versione del SDK di GHI (Release condidate 4.2 Oct. 26, 2012) , questo per problemi di risoluzione a runtime della classe TouchEventArgs !

lunedì 5 novembre 2012

FEZ Cobra II Preview

GHI ha pubblicato una preview sulla sua nuova scheda FEZ Cobra II nelle due versioni, con o senza WiFi a bordo. La disponibilità della scheda è all’incirca gennaio 2013. Da notare il cambio del core su cui si basa la scheda stessa passando dal collaudato modulo EMX al nuovo modulo G120. La scheda oltre ad offrire SD, USB Host, USB Client e power connect è dotata di 6 socket Gadgeteer.e di una griglia di I/O sul lato posteriore.

domenica 14 ottobre 2012

Codice e slide della sessione: “Building the Internet of Things”

Ecco disponibili al download, il codice e le slide del XeDotNet community meeting che ho tenuto il 12 Ottobre 2012 dal titolo Building the Internet of Things

“In questa sessione vedremmo i concetti fondamentali di "Internet of Things" e come questa stia rapidamente cambiando il nostro mondo. La sessione si fonda sulla realizzazione di un esempio pratico utilizzando micro dispositivi basati su .NET Gadgeteer e Microsoft StreamInsight. Vedremmo in dettaglio come StreamInsight sia la proposta di Microsoft per l'analisi in tempo reale di flussi di dati senza la necessità di scriverli su disco.”

Volevo porgere un ringraziamento a tutte le numerose persone presenti al meeting ed allo staff di XeDotNet per il supporto tecnico, morale ed organizzativo della sessione e per l’opportunità che mi è stata data.

giovedì 11 ottobre 2012

XeDotNet - Building the Internet of Things

Venerdì 12.10.2012 terrò un meeting con XeDotNet su Internet of Things, In questa sessione vedremmo i concetti fondamentali di "Internet of Things" e come questa stia rapidamente cambiando il nostro mondo. La sessione si fonda sulla realizzazione di un esempio pratico utilizzando micro dispositivi basati su .NET Gadgeteer e Microsoft StreamInsight. Vedremmo in dettaglio come StreamInsight sia la proposta di Microsoft per l'analisi in tempo reale di flussi di dati senza la necessità di scriverli su disco.

L’incontro si terrà presso:

Novotel Castellana
Via Alfredo Ceccherini 21 - Venezia Mestre

Se siete interessati non potete mancare, per iscrizioni: clicca qui