ETC

ALM Day a Milano, tutto bello ma..... nov 07

Traffico milanese a parte, bell'evento ieri a Milano per l'ALM Day.
Molti gli spunti interessanti: Visual Studio 2010 che promette veramente un salto di qualità nella produzione del software, Software Factories per aumentare la velocità,  MTLM che ripensando all’ultimo progetto presso un cliente avrebbe fatto risparmiare mesi di ping pong bug con l’atro fornitore, persino  qualcuno che citando il monte cucco mi ha fatto sentire a casa = ) …

Dicevamo tutto bello ma….. sono l’unico sfigato che ha trovato la chiavetta USB che doveva contenere le presentazioni completamente vuota??!!?

Silverlight 3 RTW is out today! lug 10

Uscita la versione definitiva di Silverlight 3 :
Installer
Expression Blend 3 with Sketchflow
Silverlight 3 Software Development Kit (SDK)
Silverlight 3 Tools for Visual Studio 2008 SP 1
Dovrò aspettare la fine della prossima settimana che si preannuncia infernale, e del meritato relax in Norvegia per poter fare i primi esperimenti....

Un WebService per la Xbox360 lug 06

Per tutti i possessori di una Xbox360 come me, vi segnalo questo servizio gentilmente offerto da Duncan Mackenzie disponibile sia come Web Service:
http://duncanmackenzie.net/services/XboxInfo.asmx
che come Url per un approccio REST:
http://duncanmackenzie.net/services/GetXboxInfo.aspx?GamerTag={GamerTag}
Personalmente non sono riuscito a far funzionare il webservice quindi ho usato il secondo Url per costruire una semplice interfaccia per la GamerTag:

Recuperiamo i dati dal servizio in maniera asincrona sfruttando la classe WebClient:

   1:  public void RequestXmlGamerTag(string gamerTag) 
   2:  {
   3:      string url = string.Format("http://duncanmackenzie.net/services/GetXboxInfo.aspx?GamerTag={0}", gamerTag); 
   4:      WebClient webClient = new WebClient(); 
   5:      webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted); 
   6:      webClient.DownloadStringAsync(new Uri(url)); 
   7:  }

Alla fine del download, se tutto è andato a buon fine e non ci sono errori, parserizziamo la stringa ritornata e usiamo l’oggetto creato come DataContext per l’interfaccia:

   1:  void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
   2:  {
   3:      if (e.Error == null) 
   4:      {
   5:          XboxInfo info = loadGamerTag(e.Result); 
   6:          this.DataContext = info; 
   7:      }
   8:      else
   9:      {
  10:          //Visualizzo messaggio d'errore...
  11:      }
  12:  }

parserizziamo l’xml di risposta usando un pò di LINQ:

   1:  private XboxInfo loadGamerTag(string xmlGamerTag) 
   2:  {
   3:      XDocument xDoc = XDocument.Parse(xmlGamerTag); 
   4:      XboxInfo gamer = (from XboxInfo in xDoc.Descendants("XboxInfo") 
   5:      select new XboxInfo {
   6:      PresenceInfo = new PresenceInfo() 
   7:      {
   8:          Valid = (bool)XboxInfo.Element("PresenceInfo").Element("Valid"), 
   9:          LastSeen = (DateTime)XboxInfo.Element("PresenceInfo").Element("LastSeen"), 
  10:          Info = (string)XboxInfo.Element("PresenceInfo").Element("Info"), 
  11:          Info2 = (string)XboxInfo.Element("PresenceInfo").Element("Info2"), 
  12:          Online = (bool)XboxInfo.Element("PresenceInfo").Element("Online"), 
  13:          StatusText = (string)XboxInfo.Element("PresenceInfo").Element("StatusText"), 
  14:          Title = (string)XboxInfo.Element("PresenceInfo").Element("Title")},
  15:          Gamertag = (string)XboxInfo.Element("Gamertag"), 
  16:          ProfileUrl = (string)XboxInfo.Element("ProfileUrl"), 
  17:          TileUrl = (string)XboxInfo.Element("TileUrl"), 
  18:          Country = (string)XboxInfo.Element("Country"), 
  19:          Reputation = (double)XboxInfo.Element("Reputation"), 
  20:          Bio = (string)XboxInfo.Element("Bio"), 
  21:          Location = (string)XboxInfo.Element("Location"), 
  22:          ReputationImageUrl = (string)XboxInfo.Element("ReputationImageUrl"), 
  23:          GamerScore = (int)XboxInfo.Element("GamerScore"), 
  24:          Zone = (string)XboxInfo.Element("Zone"), 
  25:          
  26:          RecentGames = (
  27:          from XboxUserGameInfo in XboxInfo.Element("RecentGames").Descendants("XboxUserGameInfo") 
  28:              select new XboxUserGameInfo 
  29:              {
  30:                  Game = new XboxGameInfo() 
  31:                  {
  32:                      Name = (string)XboxUserGameInfo.Element("Game").Element("Name"), 
  33:                      Image32Url = (string)XboxUserGameInfo.Element("Game").Element("Image32Url"), 
  34:                      Image64Url = (string)XboxUserGameInfo.Element("Game").Element("Image64Url"), 
  35:                      TotalAchievements = (int)XboxUserGameInfo.Element("Game").Element("TotalAchievements"), 
  36:                      TotalGamerScore = (int)XboxUserGameInfo.Element("Game").Element("TotalGamerScore") 
  37:                  },
  38:              Achievements = (int)XboxUserGameInfo.Element("Achievements"), 
  39:              GamerScore = (int)XboxUserGameInfo.Element("GamerScore"), 
  40:              DetailsURL = (string)XboxUserGameInfo.Element("DetailsURL"), 
  41:              LastPlayed = (DateTime)XboxUserGameInfo.Element("LastPlayed") 
  42:          }).ToList<XboxUserGameInfo>() 
  43:          }).First();
  44:   
  45:      return gamer; 
  46:  }

E il gioco è fatto!!! Ora non resta che costruire un’interfaccia grafica accattivante per la nostra gamerTag!!
Ah, per chi volesse una sfida a TopSpin3 o a qualche altro gioco aggiungetemi pure, il mio gamertag è Sullivan80!

jQuery e la validazione ASP.NET giu 30

Complice finalmente un progettino WEB che mi ha fatto dimenticare per un paio di settimane l'amatissimo   mapper di Biztalk e una stima dei tempi per realizzarlo decisamente larga, ho cominciato a fare qualche esperimento con jQuery   + ASP.NET..

Che dire.. la potenza di Jquery è veramente impressionante, Il numero di righe javascript si riduce, e la sintassi, per quanto all'inizio un pò ostica da scrivere, poi rende il codice molto più leggibile.

La web application che sto sviluppando ha il seguente vincolo funzionale: Ci sono n campi di ricerca/filtro obbligatori
che però potrebbero esser lasciati vuoti in funzione di un altro campo.
Per intenderci, avendo una situazione simile:



Se il campo "Nr. Sessione" viene valorizzato gli altri campi obbligatori come data e ora d'esecuzione possono anche
essere lasciati vuoti.

Avendo  molti campi da disattivare tutti con i rispettivi validator control, il codice javascipt da scrivere
non sarebbe stato poco e quindi la mia soluzione è stata questa:

"Decorare" ogni campo che deve essere disabiliato e i corrispettivi Validators con degli attributi alternative="true"
per i campi di testo e alternativeVal="true" per i validatori:


Aggiungere la seguente funzione per intercettare il cambiamento del campo che guida il comportamento degli altri:



e aggiungere un'altra funzione che si occupi di disabilitare i controlli e i validatori in funzione del contenuto del campo guida:



La funzione ValidatorEnable fa parte della libreria javascipt di a ASP.NET, i suoi due argomenti sono lo <span> renderizzato sull'html da ASP.NET per ogni validator e un booleno che indica se accendere o spegnere la validazione.

Tutto questo funziona alla grande e senza troppo codice da scrivere. L'unica cosa che non mi piace molto è stato l'introdurre degli attributi fasulli ai controlli ASP.NET per ottenere una semplice selezione con jQuery di tutti gli elementi. Qualcuno ha idee alternative (e sicuramente migliori ) su come farlo?

ReMIX giu 15

ImmagineRemix

 

Io ci sarò… Se qualcun’altro della community è presente mi farebbe piacere incontrarlo!

Da qualche parte si dovrà pur cominciare… giu 14

Salve a tutti! Dopo tanti mesi passati a leggere il muro di Ugi in modalità “ spettatore” ho deciso anche io di cominciare a scrivere qualcosa… Cominciamo dalle presentazioni: mi chiamo Francesco, 29 anni, una laurea in ingegneria informatica e un lavoro da consulente in ambito .NET nella zona di Reggio Emilia.

Lavoro con  le tecnologie Microsoft da circa 4 anni, dove release del framework e nuove tecnologie escono molto più velocemente di quanto sia umanamente possibile imparare… Eppure la passione mi spinge a tentare di rimanere sempre aggiornato, studiando, leggendo libri, seguendo eventi e conferenze, quello che è possibile fare  per “abbracciare il cambiamento” , rimanere sulla cresta dell’onda del nostro lavoro..

Nel ringraziare tutta la community per quanto ho appreso finora, prometto solennemente che vi annoierò il meno possibile con i miei post = )