Tuesday, April 29, 2008

Amazon Web Services

. Tuesday, April 29, 2008
0 commenti

Amazon Web Services (AWS) è un insieme di servizi web che possono essere consultati tramite delle API, permettendo di avere accesso all'infrastruttura di Amazon.
Per poter utilizzare i vari servizi è necessario registrarsi:
amazon1Al termine della registrazione ci viene fornito un codice identificativo da includere nella richiesta web.
A questo punto è possibile scaricare l'SDK.



La solution è composta da due progetti scritti in C#:
Amazon.ECS: la libreria principale,
Amazon.ECS.Samples: contiene una serie di esempi d'uso.
Una volta compilato il progetto, aprendo la solution con Visual Studio 2005 (personalmente non ho trovato nessun problema nel compilare anche con Visual Studio 2008), si può referenziare la dll prodotta nel nostro progetto.
Nel semplice esempio mostro come è possibile con poche righe di codice effettuare una ricerca:

   1: Amazon.ECS.Query.AmazonECSQuery service = 
   2:        new Amazon.ECS.Query.AmazonECSQuery( "codice identificativo", "");
   3: Amazon.ECS.Model.ItemSearchRequest itemRequest = new Amazon.ECS.Model.ItemSearchRequest();
   4: itemRequest.SearchIndex = "Books";
   5: itemRequest.Keywords = "Asp.Net 2.0";
   6: itemRequest.ResponseGroup = new System.Collections.Generic.List<string>(new string[] { "Large", "Images"});
   7: Amazon.ECS.Model.ItemSearchResponse response = service.ItemSearch(itemRequest);
   8: DataTable dtBooks = new DataTable();
   9: dtBooks.Columns.Add( new DataColumn( "Title", typeof( string)));
  10: dtBooks.Columns.Add( new DataColumn( "Author", typeof( string)));
  11: dtBooks.Columns.Add( new DataColumn( "Image", typeof( string)));
  12: dtBooks.Columns.Add( new DataColumn( "Price", typeof( string)));
  13: DataRow row;
  14: foreach (Amazon.ECS.Model.Items items in response.Items)
  15: {    
  16:   foreach( Amazon.ECS.Model.Item item in items.Item)
  17:   {
  18:     row = dtBooks.NewRow();
  19:     row["Title"] = item.ItemAttributes.Title;
  20:                     
  21:     if (item.IsSetLargeImage())
  22:     {
  23:       row["Image"] = item.LargeImage.URL;
  24:       //Per la small
  25:       //item.SmallImage.URL
  26:     }
  27:     if (item.ItemAttributes.IsSetListPrice())
  28:       row["Price"] = item.ItemAttributes.ListPrice.FormattedPrice;
  29:     if (item.ItemAttributes.IsSetAuthor())
  30:       foreach (string author in item.ItemAttributes.Author)
  31:         row["Author"] += author;
  32:     dtBooks.Rows.Add(row);
  33:   }
  34: }
  35:  
  36:GridView1.DataSource = dtBooks;
  37:GridView1.DataBind();

Nello specifico vado ad effettuare una ricerca nella categoria Books tramite una chiave di ricerca Asp.Net 2.0,  ma come si può notare il codice è estremamente semplice.
Ci sono diverse categorie consultabili per esempio: DVD, Electronics, Music, VideoGames e tantissimo altro.
Inoltre recupero solo una piccolissima parte delle innumerevoli informazioni disponibili (interagendo con la lista ResponseGroup): il titolo, l'autore, il prezzo e l'immagine dei libri che soddisfano il criterio di ricerca.
La ricerca restituisce i primi dieci elementi che costituiscono la prima pagina, ma è possibile modificare gli items di ritorno impostando la property Count con un valore da 1 a 25, oltre ad indicare la pagina di ritorno tramite la property ItemPage:


   1: itemRequest.Count = 25;


Per completezza indico anche il codice di markup del GridView:

   1: <asp:GridView
   2:  ID="GridView1" runat="server" AutoGenerateColumns="False" 
   3:  BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" 
   4:  CellPadding="4" ForeColor="Black" GridLines="Horizontal">
   5:  <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
   6:  <Columns>

   7:    <asp:BoundField DataField="Title" HeaderText="Titolo"/>
   8:    <asp:BoundField DataField="Author" HeaderText="Autore"/>
   9:    <asp:BoundField DataField="Price" HeaderText="Prezzo"/>
  10:    <asp:ImageField DataImageUrlField="Image">
  11:      <ControlStyle Width="100px" />    
  12:    </asp:ImageField>
  13:  </Columns>

  14:  <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
  15:  <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
  16:  <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
  17: </asp:GridView>

Risultato finale:
amazon2

Read More »»

Sunday, April 27, 2008

Silverlight Spy

. Sunday, April 27, 2008
0 commenti

Silverlight Spy è tool che permette di esplorare codice XAML indicando semplicemente l'url della pagina web che si desidera analizzare (supporta Silverlight 2.0 beta 1, ma nella sezione download è possibile scaricare la versione per Silverlight 1.0).
Il tool fornisce non solo tutta una serie di informazioni sui controlli che compongono la pagina (statistiche, risorse ecc), ma è anche  possibile modificare le singole proprietà dei controlli.

SilverlightSpy1 SilverlightSpy2

Read More »»

Wednesday, April 23, 2008

Live Mesh

. Wednesday, April 23, 2008
0 commenti

LiveMesh Microsoft ha annunciato un nuovo servizio Live Mesh, disponibile per adesso solo su invito e per utenti americani. Si tratta di una piattaforma Software+Service che consente di effettuare sincronizzazioni tra vari dispositivi PC, Mobile ed anche Mac (attualmente però la versione supporta solo computer con sistema operativo Vista e XP) tramite un Desktop Online. Una volta allineati, i dati,  se condivisi, potranno essere utilizzati da altri utenti che possiamo indicare sempre attraverso Live Mesh.
Ogni utente potrà eseguire una serie di modifiche ai documenti o ai folder e un "servizio  di messaggistica" ci terrà informati delle attività svolte.
Infine ma non certo meno importate tramite delle API sarà possibile espandere la piattaforma con ulteriori servizi.
Sul sito, inoltre, per chi è interessato è possibile avere maggiori informazioni sulla piattaforma tramite il seguente video, mentre per gli sviluppatori è disponibile il seguente tour.
Fonte: Windows Live Dev

Read More »»

Sunday, April 20, 2008

Hello World in Windows Media Center

. Sunday, April 20, 2008
0 commenti

Windows Media Center è un sistema ottimizzato per l'intrattenimento domestico (musica, DVD, TV ecc).
Attraverso una sorta di WPF (Windows Presentation Foundation) è possibile gestire l'interfaccia di Windows Media Center.
In questo post cercherò di spiegare quali sono i passi necessari alla scrittura della classica applicazione "Hello World".
Prima di iniziare è necessario disporre di Visual Studio 2008 (di cui faccio uso in questo esempio) o Visual Studio 2005 Professional installato su Windows Vista Home Premium o Windows Vista Ultimate ed infine scaricare l'SDK.
Con la versione 5.3 vengono installati tre template per VS 2008:
MediaCenter1Windows Media Center Application: per creare un progetto composto da quattro pulsanti che invocano delle dialog box in Media Center,
Windows Media Center Application - Background,
Windows Media Center Application - Fundamental:
per creare un progetto composto dal codice minimo per poter iniziare.

Per definire l'interfaccia del nostro progetto ci affidiamo ad un file basato su XML: Windows Media Center Markup Language (MCML).
Se vogliamo è molto simile a WPF, è composto da una serie di tag ognuno dei quali rappresenta una classe e degli attributi per le proprietà.
Gli elementi che vengono messi a disposizione non sono tantissimi ma sono più che sufficienti per generare delle interfacce in puro stile Media Center.
Ritornando al nostro esempio, il file MCML:

   1: <Mcml xmlns="http://schemas.microsoft.com/2006/mcml"
   2:       xmlns:cor="assembly://MSCorLib/System">
   3:   <UI Name="HelloWorld">  
   4:     <Content>
   5:       <Panel Layout="Center">
   6:         <Children>
   7:           <Text Name="txtHello" Color="Black" Font="Calibri, 24" Content="Hello World"/>
   8:         </Children>
   9:       </Panel>
  10:     </Content>
  11:   </UI>
  12: </Mcml>

Per visionare il risultato al di fuori di Windows Media Center, nell'SDK troviamo un utile strumento: MCML Preview Tool(Windows Media Center).
MediaCenter2Attraverso il tool possiamo caricare il file senza dover effettuare l'operazione di installazione in Windows Media Center, osservando il risultato con pochissimo sforzo.






Prima di passare ad eseguire l'installazione, bisogna sottolineare che la nostra pagina MCML deve essere caricata:

   1: PageSession pageLoad = new PageSession();
   2: pageLoad.GoToPage("resx://Application1/Application1.Resources/HelloWorld");

Tramite il metodo PageSession.GoToPage è possibile navigare in una specifica pagina. Il parametro passato è un URI ad un file di risorse, in cui troviamo tutto il necessario per il file MCML (suoni, immagini ecc).
Nel caso specifico il file di risorse che viene generato alla creazione del progetto contiene il riferimento al file MCML:

   1: <data name="HelloWorld" type="System.Resources.ResXFileRef, 
   2:                               System.Windows.Forms">
   3: <value>markup\HelloWorld.mcml;System.Byte[], mscorlib, Version=2.0.0.0,
   4:        Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   5: </data>


A questo punto possiamo dare uno sguardo ai passi per l'installazione in Windows Media Center.

Come prima cosa la dll prodotta deve essere registrata nella GAC, e per far ciò l'assembly deve essere Strong Name.
In Proprietes del progetto esiste una tab Signing in cui possiamo indicare la chiave pubblica consentendo al nostro assembly di essere unico fra tutti.
MediaCenter3 










Dopo aver aggiunto una nuova chiave, possiamo salvare il tutto e compilare (Build > Build Solution).

Per completare la registrazione dell'assembly usiamo lo strumento gacutil.exe presente al seguente path:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin
Tramite il Command Prompt di VS 2008 lanciamo la seguente istruzione:
gacutil.exe /i path assembly
Non ci rimane che conoscere il token di chiave pubblica (tasto destro sul file), che possiamo ricavare andando a cercare l'assembly appena registrato nella GAC:
C:\Windows\assembly

La chiave recuperata deve essere indicata nel file di registrazione Registration.xml:


   1: <application title="Application1" id="{22651bad-1a66-44b2-adb6-7d2c89877d50}">
   2:   <entrypoint id="{9120d789-9fe7-498d-b7d3-bbf5722aa64a}"
   3:                 addin="Application1.MyAddIn, Application1,Culture=Neutral,Version=1.0.0.0,
   4:                 PublicKeyToken=qui token"
   5:                 title="Application1"
   6:                 description="Application1 Description"
   7:                 ImageUrl=".\Images\Application.png">
   8:       <category category="More Programs"/>
   9:   </entrypoint>
  10: </application>


Nel file XML andiamo ad indicare una serie di parametri come per esempio il titolo della nostra applicazione, una descrizione, un'immagine e cosa molto importante l'entry point in Media Center, per esempio il menù Catalogo Programmi.
L'ultimo passo consiste nel dare in pasto il file appena descritto al tool RegisterMCEApp.exe presente al seguente path:
C:\Windows\ehome
L'istruzione per la registrazione:
RegisterMCEApp.exe path del file XML
mentre se si vuole disattivare:
RegisterMCEApp.exe /u path del file XML
Finalmente possiamo osservare il risultato finale:

MediaCenter4 MediaCenter5

Per concludere segnalo un interessante articolo di Cristian Civera, che potete leggere qui.

Read More »»

Friday, April 18, 2008

Kaxaml con supporto Silverlight

. Friday, April 18, 2008
0 commenti

KaxamlSilverlight

Tempo fa ho parlato di Kaxaml, un editor per codice XAML. Adesso è stata annunciata una versione beta che supporta Silverlight che potete scaricare qui.

Read More »»

Wednesday, April 16, 2008

Timeline .Net

. Wednesday, April 16, 2008
0 commenti

Timeline .Net è uno user control per Asp.Net 2.0 realizzato da Rob Chartier.
Possiamo inserire i vari eventi usando sia direttamente le API del controllo, sia come sorgente dati i feed RSS.
Prima di iniziare a giocare con questo controllo è necessario scaricare la TimelineNet.dll e aggiungere il referimento al nostro progetto Asp.Net 2.0.
Aggiungiamo il controllo nella toolbox di Visual Studio 2008, in modo che possiamo trascinarlo sulla nostra pagina aspx.
A questo punto non ci rimane che indicare tramite la property DataSourceType il tipo di fonte dati, nel caso specifico rss e settare DataUrl con l'url del feed:

   1: <cc1:timeline ScriptSourceLocation="Local" 
   2:         LocalTimelineJSFolder="js/timeline/"
   3:         Height="300"
   4:         DataSourceType="rss"
   5:         DataUrl="http://feeds.feedburner.com/SignIn"         
   6:         Width="100%" runat="server"></cc1:timeline>



Per recuperare i dati bisogna infine aggiungere un handler http nel web.config:
   1: <system.web>
   2:   <httpHandlers>
   3:     <add verb="GET" path="*.ashx" type="TimelineNet.TimelineAjaxHandler, TimelineNet" />
   4:   </httpHandlers>
   5: </system.web>

Questa sarebbe la prassi da seguire ma purtroppo al lancio della pagina mi son trovato di fronte il seguente errore javascript:

Timeline1Analizzando nello specifico il codice js che viene prodotto dalla dll ed incapsulato nella pagina ho notato che i valori dei parametri trackHeight e trackGap presentano come separatore delle decine il carattere virgola anzichè il punto.
Sicuramente il problema si presenta su un sistema in cui la lingua  è diversa da quella inglese(nella fattispecie it-IT).
Essendo a disposizione il codice sorgente sul sito codeplex ho sbirciato nella classe Band, intervenedo sull'override del metodo ToString dove appunto viene generato/formattato il codice js.
Per evitare tale situazione su di una macchina con impostata la lingua  italiana ho effettuato il ToString dei due valori decimal sopra citati passando esplicitamente un oggetto CultureInfo settato su inglese:

   1: using System.Globalization;
   2: ....
   3: CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
   4: ....
   5: if(TrackHeight > 0) sb.Append(string.Format(",trackHeight: {0}\n", TrackHeight.ToString( culture)));
   6: if(TrackGap > 0) sb.Append(string.Format(",trackGap: {0}\n", TrackGap.ToString( culture)));

Risultato:

timeline2Inoltre come accenato in precedenza possiamo usare le API del controllo per inserire in modo estremamente semplice un evento:

   1: using TimelineNet.Library;
   2: ....
   3: timeline.DataSourceType = TimelineNet.DataSourceTypes.named;
   4: TimelineData datiTimeline = new TimelineData();
   5: datiTimeline.Add(new Event(DateTime.Now, DateTime.Now, false, "Timeline test",
   6:                  string.Empty, "Evento personalizzato", string.Empty));
   7: timeline.TimelineData = datiTimeline;

Risultato finale:
timeline3

Read More »»

Tuesday, April 15, 2008

Windows Vista SP1 in Italiano

. Tuesday, April 15, 2008
0 commenti

Finalmente è disponibile il package con il SP1 di Windows Vista in italiano.
I vari link per il download:

Windows Vista SP1 per sistemi x86, package eseguibile
Windows Vista SP1 per sistemi x86, ISO CD
Windows Vista SP1 per sistemi x64, package eseguibile
Windows Vista SP1 per sistemi x86 e x64, ISO DVD

Fonte: Blog di TechNet

Read More »»

Friday, April 11, 2008

Grafici in Silverlight con Visifire

. Friday, April 11, 2008
1 commenti

Sulla possibilità di inserire grafici in pagine Asp.Net ho già trattato qui (in cui si fa uso delle Google Chart API) e qui (in cui invece si fa uso di una library open source: Open Flash Chart).
Un'altra possibilità molto interessante consiste nell'utilizzare componenti Silverlight di Visifire (attualmente in versione beta).
Dopo aver effettuato il download degli assemblies, cambiamo l'estensione del file Visifire.xap in Visifire.zip. Quest'ultimo contiene le seguenti dll:

  • Visifire.Charts.dll
  • Visifire.Commons.dll
  • VisifireCharts.dll
  • AppManifest.xaml
Non ci resta che referenziare le dll nella nostra applicazione Silverlight e iniziare a scrivere qualche linea di codice.
Un esempio molto semplice di grafico a linee:
   1: private void CreateChart()
   2: {
   3:   int[] values = new int[]{ 3, 9, 17, 2, -1, 0, 21 };
   4:   Visifire.Charts.Chart chart = new Visifire.Charts.Chart();
   5:   chart.Height = 500;
   6:   chart.Width = 500;
   7:  
   8:   //DataPoint indica il singolo valore da tracciare sul grafico
   9:   Visifire.Charts.DataPoint dataPoint;
  10:   //Set di valori
  11:   Visifire.Charts.DataSeries dataSeries = new Visifire.Charts.DataSeries();
  12:   //Tipologia di grafico
  13:   dataSeries.RenderAs = "line";
  14:   for( int i=0; i<values.Length; i++)
  15:   {
  16:     dataPoint = new Visifire.Charts.DataPoint();
  17:     dataPoint.YValue = values[i];
  18:     dataSeries.Children.Add(dataPoint);
  19:   }
  20:  
  21:   chart.Children.Add(dataSeries);
  22:   //Aggiungo al canvas l'oggetto grafico
  23:   box.Children.Add(chart);
  24: }



Il risultato finale:

VisifireLe tipologie attualmente supportate:
Column
Area
Doughnut
Line
StackedColumn
Pie
Bar
Bubble






Un altro aspetto decisamente da sottolineare, è la possibilità di generare online il grafico( codice XML e HTML) grazie ad un designer, senza scrivere una linea di codice.

Read More »»