giovedì 30 giugno 2016

ext.net label bold fieldlabel

Nel caso che vogliamo impostare all'intestazione di un controllo Label del freamwork Ext.Net il grassetto, o meglio nella proprietà FieldLabel il grassetto, dobbiamo utilizzare  nella proprietà labelStyle il codice html di grassetto.

Qui di seguito un esempio per la visualizzazione aspx

                                                                        /ext:Label>

mercoledì 29 giugno 2016

C# concatenare una stringa in un array o list string

Tramite il metodo Join possiamo concatenare, ossia aggiungere ad un array un carattere.
Qui di seguito un esempio di codice in C#

String.Join(",", Mioarray);

martedì 28 giugno 2016

.Net rilevare da un file immagine dati gps e indirizzo in C# e VB.Net

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_net-rilevare-da-un-file-immagine-dati-gp_1441.aspx

Con le nuove tecnologie in cui sono presenti funzionalità come la geo localizzazione che permette di rilevare la posizione in cui ci si trova, è possibile sapere in quale posto è stata scattata  una foto tanto per fare unesempio.
In questo articolo, vedremo come realizzare un semplice programma, che data una foto scattata con uno SmartPhone, possiamo rilevare l’indirizzo del luogo in cui è avvenuto tale avvenimento ed informazioni sul dispositivo.
Tramite la tecnologia .Net rileveremo queste informazioni su un file Immagine, e tramite le API di google maps avremmo informazioni sulle coordinate riguardante il GPS.
Creazione del progetto per ottenere le coordinate GPS
Si crea un nuovo progetto di tipo Windows Application, selezionando il linguaggio di programmazione di proprio interesse.
Una volta aperto il progetto, inseriamo nella form 7 caselle di testo, sette controlli label, un controllo di tipo WebBrowser che avrà il compito di visualizzare la cartina ed un pulsante, il tutto come mostrato in figura 1.


Figura 1 – il programma in esecuzione

Una volta posizionati i controlli non ci resta che scrivere il codice.
Per eseguire il codice, dovremmo avere un file di tipo “jpg” nel quale sono presenti le proprietà “GPS” nel nostro caso, tramite lo smartphone Nokia Lumia 520 è stata effettuata la prova.

Stesura del codice
Passiamo in visualizzazione codice in modo che scriviamo il codice per estrapolare le informazioni dal file.
Inseriamo in alto, sopra ad ogni riga di codice, lo spazio dei nomi che ci permette di utilizzare determinate classi.
Qui di seguito si riporta i frammenti di codice per entrambi i linguaggi.


VB.Net

Imports System.Drawing.Imaging

Imports System.Net

Imports System.Text

Imports System.IO

 

C#

using System.Drawing.Imaging;

using System.Net;

using System.IO;

Gli spazi di nomi ci permettono di gestire i file, richiamare il sito web di Google e la gestione delle immagini.
Si crea una funzione, la quale date le informazioni presenti nel file jpeg, ed in particolare le proprietà relative alle coordinate GPS, quali latitudine e longitudine, rileviamo il dato di tipo float che tramite le api di Google otteniamo l’indirizzo.
Qui di seguito si riporta la funzione che ci permette di ottenere la latitudine e longitudine.



VB.Net

Private Function GpsToFloat(propItemRef As PropertyItem, propItem As PropertyItem) As Single

        Dim gradiNumeratore As UInteger = BitConverter.ToUInt32(propItem.Value, 0)

        Dim gradiDenominatore As UInteger = BitConverter.ToUInt32(propItem.Value, 4)

        Dim gradi As Single = gradiNumeratore / CSng(gradiDenominatore)

 

        Dim minutiNumeratore As UInteger = BitConverter.ToUInt32(propItem.Value, 8)

        Dim minutiDenominatore As UInteger = BitConverter.ToUInt32(propItem.Value, 12)

        Dim minuti As Single = minutiNumeratore / CSng(minutiDenominatore)

 

        Dim secondiNumeratore As UInteger = BitConverter.ToUInt32(propItem.Value, 16)

        Dim secondiDenominatore As UInteger = BitConverter.ToUInt32(propItem.Value, 20)

        Dim secondi As Single = secondiNumeratore / CSng(secondiDenominatore)

 

        Dim coordinate As Single = gradi + (minuti / 60.0F) + (secondi / 3600.0F)

        Dim gpsRef As String = System.Text.Encoding.ASCII.GetString(New Byte(0) {propItemRef.Value(0)})

        'N, S, E, W

        If gpsRef = "S" OrElse gpsRef = "W" Then

            coordinate = 0 - coordinate

        End If

        Return coordinate

    End Function

 

C#

private   float GpsToFloat(PropertyItem propItemRef, PropertyItem propItem)

        {

            uint gradiNumeratore = BitConverter.ToUInt32(propItem.Value, 0);

            uint gradiDenominatore = BitConverter.ToUInt32(propItem.Value, 4);

            float gradi = gradiNumeratore / (float)gradiDenominatore;

 

            uint minutiNumeratore = BitConverter.ToUInt32(propItem.Value, 8);

            uint minutiDenominatore = BitConverter.ToUInt32(propItem.Value, 12);

            float minuti = minutiNumeratore / (float)minutiDenominatore;

 

            uint secondiNumeratori = BitConverter.ToUInt32(propItem.Value, 16);

            uint secondiDenominatori = BitConverter.ToUInt32(propItem.Value, 20);

            float secondi = secondiNumeratori / (float) secondiDenominatori;

 

            float coordinate = gradi + (minuti / 60f) + (secondi / 3600f);

            string gpsRef = System.Text.Encoding.ASCII.GetString(new byte[1] { propItemRef.Value[0] }); //N, S, E, W

            if (gpsRef == "S" || gpsRef == "W")

                coordinate = 0 - coordinate;

            return coordinate;

        }


Nell’evento click, inseriamo il codice che permette di rilevare le informazioni dal file, ed in particolare ottenere la proprietà GPS, la proprietà del dispositivo con il quale abbiamo scattato la foto, la proprietà del sistema operativo del dispositivo ed infine data ed ora della foto.
Queste informazioni le otteniamo tramite il metodo “GEtPropertyItem” che tramite l’id otteniamo queste informazioni dall’oggetto di tipo Image che sarà il file jpeg posizionato nel nostro computer.
Mentre le classi di tipo webrequest e webresponse, otteniamo informazioni dalle api di Google sulle coordinate, e la mappa.
Qui di seguito si riporta il codice completo dell’evento click del pulsante per entrambi i linguaggi.


VB.Net

Private Sub btnRileva_Click(sender As System.Object, e As System.EventArgs) Handles btnRileva.Click

        Dim image As Image = New Bitmap("E:\TestGPS.jpg")

 

        'Latitudine

        Dim propItemRef As PropertyItem = image.GetPropertyItem(1)

        Dim propItemLat As PropertyItem = image.GetPropertyItem(2)

        Dim datiLatitudine As System.Nullable(Of Single) = GpsToFloat(propItemRef, propItemLat)

        TxtLatitudine.Text = datiLatitudine.ToString()

        'logitudine

 

        propItemRef = image.GetPropertyItem(3)

        Dim propItemLong As PropertyItem = image.GetPropertyItem(4)

        Dim datiLogitudine As System.Nullable(Of Single) = GpsToFloat(propItemRef, propItemLong)

 

        txtLogitudine.Text = datiLogitudine.ToString()

 

        'Rilevo da google le informazioni

 

        Dim url As String = "http://maps.google.com/maps/api/geocode/xml?latlng={0},{1}&sensor=false"

        url = String.Format(url, TxtLatitudine.Text.Trim().Replace(",", "."), txtLogitudine.Text.Trim().Replace(",", "."))

        Dim request As WebRequest = WebRequest.Create(url)

        Using response As WebResponse = DirectCast(request.GetResponse(), HttpWebResponse)

            Using reader As New StreamReader(response.GetResponseStream(), Encoding.UTF8)

                Dim dsResult As New DataSet()

                dsResult.ReadXml(reader)

                txtIndirizzo.Text = dsResult.Tables("result").Rows(0)("formatted_address").ToString()

            End Using

        End Using

        Dim ascii As Encoding = Encoding.ASCII

        TxtNomeDispositovo.Text = ascii.GetString(image.GetPropertyItem(272).Value, 0, image.GetPropertyItem(272).Len - 1)

        TxtSistema.Text = ascii.GetString(image.GetPropertyItem(305).Value, 0, image.GetPropertyItem(305).Len - 1)

        Dim DataFoto As String = ascii.GetString(image.GetPropertyItem(36867).Value, 0, image.GetPropertyItem(36867).Len - 1)

        Dim Data As String() = DataFoto.Split(" "c)

 

        Dim DataDellaFoto As String = DateTime.Parse(Data(0).Replace(":", "/")).ToString("dd/MM/yyyy") + " " + Data(1)

 

 

 

        webBrowser1.Navigate("http://maps.googleapis.com/maps/api/staticmap?center=" + TxtLatitudine.Text.Trim().Replace(",", ".") + "," + txtLogitudine.Text.Trim().Replace(",", ".") + "&zoom=15&size=200x200")

 

        TxtTelecamera.Text = ascii.GetString(image.GetPropertyItem(271).Value, 0, image.GetPropertyItem(271).Len - 1)

        TxtDataFoto.Text = DataDellaFoto

    End Sub

 

C#

private void btnRileva_Click(object sender, EventArgs e)

        {

 

            Image image = new Bitmap(@"E:\TestGPS2.jpg");

 

            //Latitudine

            PropertyItem propItemRef = image.GetPropertyItem(1);

            PropertyItem propItemLat = image.GetPropertyItem(2);

            float? datiLatitudine = GpsToFloat(propItemRef, propItemLat);

            TxtLatitudine.Text = datiLatitudine.ToString();

            //logitudine

 

            propItemRef = image.GetPropertyItem(3);

            PropertyItem propItemLong = image.GetPropertyItem(4);

            float? datiLogitudine = GpsToFloat(propItemRef, propItemLong);

 

            txtLogitudine.Text = datiLogitudine.ToString();

 

            //Rilevo da google le informazioni

 

            string url = "http://maps.google.com/maps/api/geocode/xml?latlng={0},{1}&sensor=false";

            url = string.Format(url, TxtLatitudine.Text.Trim().Replace(",", "."), txtLogitudine.Text.Trim().Replace(",", "."));

            WebRequest request = WebRequest.Create(url);

            using (WebResponse response = (HttpWebResponse)request.GetResponse())

            {

                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))

                {

                    DataSet dsResult = new DataSet();

                    dsResult.ReadXml(reader);

                     txtIndirizzo.Text = dsResult.Tables["result"].Rows[0]["formatted_address"].ToString();

                }

            }

             Encoding ascii = Encoding.ASCII;

             TxtNomeDispositovo.Text =  ascii.GetString(image.GetPropertyItem(272).Value, 0, image.GetPropertyItem(272).Len - 1);

             TxtSistema.Text = ascii.GetString(image.GetPropertyItem(305).Value, 0, image.GetPropertyItem(305).Len - 1);

             string DataFoto = ascii.GetString(image.GetPropertyItem(36867).Value, 0, image.GetPropertyItem(36867).Len - 1);

            string[]Data = DataFoto.Split(' ');

 

            string DataDellaFoto = DateTime.Parse(Data[0].Replace(":", "/")).ToString("dd/MM/yyyy") + " " + Data[1];

 

            

 

             webBrowser1.Navigate("http://maps.googleapis.com/maps/api/staticmap?center=" + TxtLatitudine.Text.Trim().Replace(",", ".") + "," + txtLogitudine.Text.Trim().Replace(",", ".") + "&zoom=15&size=200x200");

 

             TxtTelecamera.Text = ascii.GetString(image.GetPropertyItem(271).Value, 0, image.GetPropertyItem(271).Len - 1);

             TxtDataFoto.Text = DataDellaFoto;

 

        }




Ora non ci resta che eseguire il programma per rilevare i dati dalla nostra immagine.

Conclusioni
In questo articolo abbiamo visto come realizzare un semplice programma, che può tornare utile soprattutto in ambito di investigazione, per rilevare informazioni su una determinata immagine. Con poche righe di codice, possiamo rilevare  dati dai file carpendo molte cose sulle persone ed in particolare gli spostamenti o luoghi che hanno visitato, un articolo che introduce il lettore alla realizzazione di un programma più complesso per rilevamento dei dati importanti.

lunedì 27 giugno 2016

Nanoforum 2016

iternew100

Ad ottobre a Milano si svolgerà un bellissimo evento gratuito dedicato al mondo nanotecnologie.
L'evento vuole fare il punto dello stato attuale di questo settore e confrontarsi con i migliori esperti del settore che saranno presenti in questi tre giorni speciali.
Il Nanoforum 2016 è l'evento più importante  delle nanotecnologie.

Per l'iscrizione, o consultare l'agenda o altre informazioni visitate il seguente sito http://www.nanoforum.it/

venerdì 17 giugno 2016

download free ebook Getting started with Power BI

image













Come riportato dal seguente sito https://blogs.msdn.microsoft.com/education/2016/06/17/getting-started-with-power-bia-free-e-book-from-microsoft-press/ è possibile scaricare un ebook gratuito di circa 200 pagine in inglese, che introduce al Microsoft Power BI.
L'ebook di Microsoft Press si può scaricare in formato Pdf o per sistemi mobili.

Per maggiori informazioni o download visitate il sito indicato.

domenica 12 giugno 2016

servizio di newsletter gratuita per il vostro sito



Oggi vi segnalo un servizio gratuito in italiano per aggiungere ai vostri siti una newsletter.
Il sito http://www.mailant.it/home.aspx offre un servizio gratuito di newsletter utile per i gestori dei siti, in questo modo potete raggiungere i vostri navigatori, inviando email sulle novità o servizi o prodotti che offrite.

Il sito è in lingua italiana e gestito da italiani, un servizio di qualità e molto interessante.

Vi invito a valutarlo perché è un ottimo strumento per i vostri siti.

venerdì 10 giugno 2016

Evento gratuito Data Driven



Il 21 giugno 2016, nella mattina si svolgerà un evento gratuito per scoprire le nuove funzionalità e potenzialità offerte dall'imminente rilascio del database Microsoft Sql server 2016.
Dal seguente sito https://www.microsoftevents.com/profile/form/index.cfm?PKformID=0x261783f813  è possibile iscriversi all'evento Data Driven, nel quale saranno illustrate le novità di questo database.
Nel sito è presente anche il luogo e l'agenda.

giovedì 9 giugno 2016

Download Sql Server 2016 Express

Da qualche giorno è possibile scaricare la nuova versione di Sql Server 2016 developer, ossia la versione per i programmatori.
Dal seguente sito https://www.microsoft.com/it-IT/download/details.aspx?id=52679 la pagina in italiano per scaricare il database di Microsoft.

domenica 5 giugno 2016

Evento gratuito autodesk

Alt_banner

Un evento particolare quello organizzato da Autodesk Italia a Milano, nel quale verranno illustrate alcuni software atti all'utilizzo del mondo automobilistico.
Per maggiori informazioni ed iscrizioni visitate il seguente sito http://gems.autodesk.com/events/autodesk-automotive-launch-tour-milano/event-summary-b8c0b069ce8b4226a7017be4578a2d88.aspx

sabato 4 giugno 2016

Evento gratuito NI Automotive Forum 2016



Torna l'evento più importante in ambito di tecnologia legata alle automobili.

L'evento gratuito NI Automotive Forum 2016, fornisce ai partecipanti la possibilità di scoprire come utilizzare i prodotti di National Instruments per il mondo delle automobili.

Per partecipare iscriversi al seguente sito http://italy.ni.com/automotive-forum nel quale è possibile consultare l'agenda ed il luogo di tale iniziativa.

venerdì 3 giugno 2016

Asp.Net applicazione gratuita di commercio elettronico

Per tutti gli sviluppatori Asp.Net in cerca di soluzioni gratuite ed open source in ambito di commercio elettronico, possono trovare interessante la soluzione "Nopcommerce" scaricabile dal seguente sito http://www.nopcommerce.com/
Un portale nel quale creare applicazioni per la vendita di servizi e prodotti.

giovedì 2 giugno 2016

C# xelement add xmlns attribute

Nel caso che vogliamo aggiungere un particolare attributo (xmlns) ad un nodo tramite C#, utilizzando la classe xnamespace possiamo aggiungerlo come attributo.
Qui di seguito si riporta un esempio di codice

 XNamespace xNamceSpace = "urn:testo";

XElement elemento = new XElement(xNamceSpace + "Nodo",
                        Valore);

mercoledì 1 giugno 2016

C# linq select increment 1

Se in ambito linq, vogliamo avere un campo auto incrementale di una variabile all'interno di una select, possiamo incrementare la variabile di uno tramite il simbolo +.

Qui di seguito un frammento di codice che illustra come implementare all'interno della select.
  int conta = 0;
 var risultato = from Dati in Records  select new { Dati, Contatore = (++conta).ToString()};