domenica 29 agosto 2010

Windows Phone 7 e i linguaggi VB.Net e F#

Vi consiglio la lettura del post (tradotto dal post WindowsPhone7VBnetAndFsharp) di Mario De Ghetto:

Windows Phone 7 e i linguaggi VB.Net e F# « VB & .NET – Mario De Ghetto

Si tratta di alcune riflessioni sulla mancanza degli strumenti di sviluppo per Windows Phone7 per sviluppatori VB.NET e F#.

 

Technorati Tag: ,,

venerdì 27 agosto 2010

6 giorni alla chiusura del sondaggio su ALMReloaded!!

Oramai siamo alla stretta finale! 6 giorni ancora per esprimere la vostra preferenza sulle sessioni di ALMReloaded, il primo evento di DomusDotNet.

Dite la vostra scegliendo le sessioni al link che compare nella pagina:

http://www.domusdotnet.org/eventi/alm-reloaded.aspx

Poi non dite che non vi avevo avvertito EMOTICON SMILE

mercoledì 25 agosto 2010

Visual Studio LightSwitch Training Kit

E’ stato rilasciato il training kit per Visual Studio LightSwitch.

All’interno del training kit, come di consueto, potete trovare documenti e codice sorgente per cominciare a sviluppare applicazioni data-centric con Visual Studio LightSwitch incorporando anche controlli utente personalizzati.

Il training kit è scaricabile da questo link.

Technorati Tag: ,

VB.NET: Recuperare in maniera automatica il nome della proprietà in cui si ci trova

La semplice classe che vi propongo permette di ricavare, sfruttando lo stacktrace, il nome della proprietà in cui ci si trova dinamicamente.

La classe è una classe utility che presenta un metodo statico il cui risultato è il nome della property in cui ci si trova (sia che siamo nel Get che nel Set) oppure Nothing se non siamo in una property:

  1. Public NotInheritable Class PropertyHelper
  2.     Private Sub New()
  3.  
  4.     End Sub
  5.  
  6.     Private Const SetPropertyPrefix = "set_"
  7.     Private Const GetPropertyPrefix = "get_"
  8.  
  9.     Public Shared Function GetCurrentPropertyName() As String
  10.         Dim retval As String = Nothing
  11.         Dim method = (From sf In New StackTrace().GetFrames
  12.                     Where sf.GetMethod().DeclaringType <> GetType(PropertyHelper)
  13.                     Select sf.GetMethod()).FirstOrDefault()
  14.         If method IsNot Nothing Then
  15.             If method.Name.StartsWith(SetPropertyPrefix) Then
  16.                 retval = method.Name.Replace(SetPropertyPrefix, "")
  17.             End If
  18.             If method.Name.StartsWith(GetPropertyPrefix) Then
  19.                 retval = method.Name.Replace(GetPropertyPrefix, "")
  20.             End If
  21.         End If
  22.         Return retval
  23.     End Function
  24. End Class

La classe può essere utilizzata, ad esempio, nelle proprietà di quelle classi che implementano l’interfaccia INotifyPropertyChanged per non “cablare” la stringa con il nome delle proprietà all’interno del codice:

  1. Imports System.ComponentModel
  2.  
  3. Public Class Utente
  4.     Implements INotifyPropertyChanged
  5.  
  6.     Private _Nome As String
  7.     Public Property Nome() As String
  8.         Get
  9.             Return _Nome
  10.         End Get
  11.         Set(ByVal value As String)
  12.             If value <> _Nome Then
  13.                 _Nome = value
  14.                 OnPropertyChanged(PropertyHelper.GetCurrentPropertyName())
  15.             End If
  16.         End Set
  17.     End Property
  18.  
  19.     Protected Sub OnPropertyChanged(ByVal propertyName As String)
  20.         RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
  21.     End Sub
  22.  
  23.     Public Event PropertyChanged(ByVal sender As Object,
  24.                                  ByVal e As System.ComponentModel.PropertyChangedEventArgs) _
  25.                              Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
  26. End Class

 

martedì 24 agosto 2010

LightSwitch e Visual Studio

Tanto per confermare che LIghtSwitch non è Access nel 2010, se installate la Beta 1 (http://codetailor.blogspot.com/2010/08/lightswitch-beta1-disponibile-per-il.html) e avete installato già Visual Studio 2010, vedrete che le applicazioni LIghtSwitch diventano dei template all’interno dei templeta installati:

image

Technorati Tag: ,

LightSwitch Beta1 disponibile per il download

E' disponibile, per tutti, la versione Beta1 di LightSwitch.

Il pacchetto di installazione, in formato web downloader, è scaricabile dal seguente link.

Maggiori info sono disponiibili al seguente link.

 

Technorati Tag: ,,

Alcuni tips per il debug a cura di Scott Guthrie

Vorrei segnalarvi il post di Scott Guthrie inchino :

http://weblogs.asp.net/scottgu/archive/2010/08/18/debugging-tips-with-visual-studio-2010.aspx

in cui vengono riportati alcuni tips sull’utilizzo dei breakpoint nel debug di Visual Studio.

Nella mia esperienza quotidiana, la maggior parte dei programmatori usa poco o niente il debug di Visual Studio(alcuni neanche ne conoscono l’esistenza) che, a mio modo di vedere, è  da paura!! Figuriamoco, poi, utilizzare i breakpoint o, addirittura dei breakpoint condizionali!

Il post è assolutamente completo e da leggere!

lunedì 23 agosto 2010

Gestiamo il cestino di Windows con VB.NET

In questo post vorrei proporvi una classe che, grazie all’utilizzo di P/Invoke, permette di gestire il cestino di Windows.

La classe è una classe statica (un Helper) che dispone di due metodi:

  • Empty() : permette di svuotare il cestino (con la possibilità di scegliere alcune opzioni quali la richiesta di conferma, il sonoro e la finestra di progress della cancellazione);
  • GetSize() : permette di ricavare il numero di elementi presenti nel cestino e la loro dimensione.

La classe è la seguente:

Imports System.Runtime.InteropServices

Public Class RecycleBinHelper
Private Const S_OK = 0
Private Const S_Empty = -2147418113

<DllImport("shell32.dll")>
Private Shared Function SHEmptyRecycleBin(ByVal hWnd As IntPtr, ByVal pszRootPath As String, ByVal dwFlags As UInt32) As Integer

End Function

<DllImport("shell32.dll")>
Private Shared Function SHQueryRecycleBin(ByVal pszRootPath As String, ByRef pSHQueryRBInfo As SHQUERYRBINFO) As Integer

End Function

Public Shared Function GetSize(ByRef numItems As Integer, ByRef totalSize As Int64) As Boolean
Dim retval = False
Dim shrb = New SHQUERYRBINFO()
shrb.cbSize
= Marshal.SizeOf(GetType(SHQUERYRBINFO))
If SHQueryRecycleBin(String.Empty, shrb) = S_OK Then
totalSize
= shrb.i64Size
numItems
= CInt(shrb.i64NumItems)
retval
= True
End If
Return retval
End Function

Public Shared Function Empty(Optional ByVal flags As RecycleBinOptions = 0) As Boolean
Dim retval = True
Dim hresult = SHEmptyRecycleBin(IntPtr.Zero, String.Empty, CUInt(flags))
If hresult <> S_OK And hresult <> S_Empty Then
retval
= False
End If
Return retval
End Function

<StructLayout(LayoutKind.Sequential, Pack:=4)>
Private Structure SHQUERYRBINFO
Public cbSize As Int32
Public i64Size As Long
Public i64NumItems As Long
End Structure
End Class

<Flags()>
Public Enum RecycleBinOptions
NoConfirmation
= 1
NoProgressUI
= 2
NoSound
= 4
End Enum





Per eseguire le operazioni sul cestino vengono utilizzate le due API SHEmptyRecycleBin (info) e SHQueryRecycleBin (info) presenti nella dll shell32.dll.



Un esempio di utilizzo della classe è il seguente:



Sub Main()
Dim size As Int64
Dim numItems As Int32
If RecycleBinHelper.GetSize(numItems, size) Then
Console.WriteLine(
String.Format("Sono presenti {0} elementi per un totale di {1} bytes",
numItems, size))
End If

If RecycleBinHelper.Empty(RecycleBinOptions.NoConfirmation) Then
Console.WriteLine(
"Cestino svuotato!!!")
End If

Console.ReadLine()
End Sub





domenica 22 agosto 2010

Code Contracts, generazione della documentazione e VB.NET

works-on-my-machine-starburst_3

Durante queste vacanze estive (vacanze???) mi sono messo a scrivere uno speciale per DomusDotNet che uscirà a breve e che riguarda i Code Contracts (http://research.microsoft.com/en-us/projects/contracts/).

I Code Contracts, come leggerete nello speciale su DomusDotNet (e non ve lo anticipo ora perchè, altrimenti che l’ho scritto a fare), permettono di rendere il nostro codice più robusto ed hanno il vantaggio che finiscono nella documentazione delle classi (con dei commenti XML generati automaticamente).

Tutto questo è molto bello se non che mi sono accorto che ciò che viene descritto nel manuale non funziona esattamente con VB.NET (sto lavorando con la versione 1.4.30707.2, del 7 Luglio 2010).

In particolare, abilitando la generazione dei dati per l’help (il file XML che si trova all’interno della cartella di compilazione), al termine della compilazione si dovrebbero trovare due file XML: uno quello classico (con estensione .old) e l’altro quello che contiene le informazioni dei Code Contracts.

Questo non accade con VB.NET. Il file è uno solo e non ha le info dei Code Contracts.

A questo punto mi sono venuti in aiuto (e li ringrazio) Francesco Logozzo e Mike Barnett due dei facenti parte del progetto Code Contracts di casa Microsoft.

Ho contattato Francesco via email spiegandogli il problema e, in breve tempo, hanno trovato l’inghippo e “fixato” il tutto (che uscirà nella prossima versione).

Il problema è dovuto al fatto che il componente che genera la documentazione utilizza, al suo internoi, il valore DocFileItem che è differente tra C# e VB (vedere http://social.msdn.microsoft.com/forums/en-us/msbuild/thread/5BA92371-E249-47DA-A411-18675C6AFBF5).

L’attuale versione del generatore di documentazione, fa il suo lavoro in VB ma non mette i file all’interno della cartella del compilato (ad esempio bin\debug) bensì lascia i due file nella cartella dei file temporanei della compilazione (ad esempio obj\x86\debug).

Sapendo questo, possiamo aggiungere (almeno fino a che non esce la nuova versione “fixata”) uno script di pot-build che semplicemente copia i file nella cartella bin\debug (ovviamente ragionando sulla configurazione corrente).

Per fare questo prepariamoci un file PostBuildDoc.bat molto semplice:

  1. if exist %1.xml xcopy /C /Y %1.xml %2
  2. if exist %1.xml.old xcopy /C /Y %1.xml.old %2

che mettiamo all’interno della cartella dove risiede la nostra soluzione. Lo script altro non fà che copiare il file (privo di estensione) indicato nel primo argomento nella cartella indicata dal secondo argomento.

A questo punto ci basta aggiungere lo script di post-build utilizzando l’apposito tasto nel tab Compile delle proprietà di progetto:
 image

La pressione del tasto “Build Events..” apre la maschera di inserimento degli script di pre e post build:

imageAll’interno del text box riservato al post-build event scriviamo:

  1. call "$(SolutionDir)PostBuildDoc.bat" "$(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)\$(TargetName)" "$(ProjectDir)$(OutDir)"


mercoledì 18 agosto 2010

Rilascata la versione Beta1 di LIghtSwitch per gli abbonati MSDN

E’ stato annunciato il rilascio della versione Beta1 di LightSwitch limitatamente agli abbonati MSDN.

Maggiori info all’indirizzo:

http://blogs.msdn.com/b/lightswitch/archive/2010/08/18/lightswitch-beta-1-available-to-msdn-subscribers.aspx

Per tutti gli altri la release sarà lunedì 23.

Technorati Tags: ,

giovedì 12 agosto 2010

Some detail behind the CodePlex move to TFS 2010

Questo post apparso sul blog di Brian Harry è decisamente interessante:

Some detail behind the CodePlex move to TFS 2010 - bharry's WebLog - Site Home - MSDN Blogs

Mostra come è cambiata l’architettura hardware del TFS che sta dietro a Codeplex nel passare da TFS2008 a TFS2010. Veramente notevole!!!

lunedì 9 agosto 2010

ALMReloaded definita data e sede

E’ stata definita la data e la sede per l’evento ALMReloaded organizzato da DomusDotNet.

L’evento si terrà il giorno 17 Settembre 2010 presso la sede Microsoft di Roma in Viale Avignone 10.

Map picture

La pagina ufficiale dell’evento è la seguente:

http://www.domusdotnet.org/eventi/alm-reloaded.aspx

all’interno della quale trovate il link per poter esprimere la vostra opinione sulle sessioni dell’evento.

Vota Antonio, Vota Antonio,Vota Antonio,Vota Antonio!!!!!


giovedì 5 agosto 2010

Recuperare l’id del processo padre

Prendendo spunto da un post apparso sul newsgroup dedicato a Visual Basic (http://social.msdn.microsoft.com/Forums/it-IT/visualbasicit/threads), vorrei proporvi un metodo di estensione per la classe Process che, utilizzando P/Invoke, recupera l’identificativo del processo padre di un processo (se esiste), cioè l’identificativo del processo che ha aperto il processo.

Il modulo che definisce il metodo di estensione è il seguente:

  1. Imports System.Runtime.InteropServices
  2. Imports System.Runtime.CompilerServices
  3.  
  4. Public Module ProcessExtension
  5.     <DllImport("kernel32.dll", SetLastError:=True)>
  6.     Private Function CreateToolhelp32Snapshot(ByVal dwFlags As SnapshotFlags, ByVal th32ProcessID As UInteger) As IntPtr
  7.     End Function
  8.  
  9.     <DllImport("kernel32.dll")> _
  10.     Private Function Process32First(ByVal hSnapshot As IntPtr, ByRef lppe As PROCESSENTRY32) As Boolean
  11.     End Function
  12.  
  13.     <DllImport("kernel32.dll")> _
  14.     Private Function Process32Next(ByVal hSnapshot As IntPtr, ByRef lppe As PROCESSENTRY32) As Boolean
  15.     End Function
  16.  
  17.  
  18.     <Flags()> _
  19.     Private Enum SnapshotFlags As Integer
  20.         HeapList = &H1
  21.         Process = &H2
  22.         Thread = &H4
  23.         [Module] = &H8
  24.         Module32 = &H10
  25.         Inherit = &H80000000
  26.         All = &H1F
  27.     End Enum
  28.  
  29.     <StructLayout(LayoutKind.Sequential)> _
  30.     Private Structure PROCESSENTRY32
  31.         Public dwSize As UInteger
  32.         Public cntUsage As UInteger
  33.         Public th32ProcessID As UInteger
  34.         Public th32DefaultHeapID As IntPtr
  35.         Public th32ModuleID As UInteger
  36.         Public cntThreads As UInteger
  37.         Public th32ParentProcessID As UInteger
  38.         Public pcPriClassBase As Integer
  39.         Public dwFlags As UInteger
  40.         <VBFixedString(260), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> Public szExeFile As String
  41.     End Structure
  42.  
  43.     <Extension()>
  44.     Public Function GetParentProcessID(ByVal process As Process) As UInteger?
  45.         If process Is Nothing Then Throw New NullReferenceException()
  46.         Dim retval As UInteger? = Nothing
  47.         Dim snapShot = CreateToolhelp32Snapshot(SnapshotFlags.Process, 0)
  48.         If snapShot <> IntPtr.Zero Then
  49.             Dim procEntry As New PROCESSENTRY32
  50.             procEntry.dwSize = CUInt(Marshal.SizeOf(GetType(PROCESSENTRY32)))
  51.             Dim okFlag = Process32First(snapShot, procEntry)
  52.             While (okFlag)
  53.                 If process.Id = procEntry.th32ProcessID Then
  54.                     retval = procEntry.th32ParentProcessID
  55.                     Exit While
  56.                 Else
  57.                     okFlag = Process32Next(snapShot, procEntry)
  58.                 End If
  59.             End While
  60.         End If
  61.         Return retval
  62.     End Function
  63. End Module

Grazie al metodo di estensione possiamo semplicemente scrivere

  1. .
  2. Dim parentId = Process.GetCurrentProcess.GetParentProcessID()
  3. .
  4. .


 

martedì 3 agosto 2010

Annunciato Visual Studio LightSwitch!

Oggi, in occasione del VSLIve!, è stato annunciato Visual Studio LightSwitch. Si tratta di un prodotto della famiglia Visual Studio specifico per la realizzazione rapida di applicazioni di business.

La beta1 del prodotto sarà disponibile a partire dal 23 di Agosto.

Per maggiori informazioni il sito ufficiale del prodotto è:

http://msdn.microsoft.com/it-it/lightswitch/default(en-us).aspx

o sul blog di Jason Zanders:

http://blogs.msdn.com/b/jasonz/archive/2010/08/03/introducing-microsoft-visual-studio-lightswitch.aspx

Technorati Tags:

Quando il treno passa, passa!

Leggendo l’articolo che riporto:

Ecco gli italiani dai piedi leggeri - Il Sole 24 ORE

mi è salita una rabbia che spaccherei tutto ciò che mi capita a tiro.

La vita dovrebbe essere vissuta e non si dovrebbe vivere di rimpianti, ma quando mi guardo intorno e vedo lo schifo che c’è qui da noi, la corruzione, la burocrazia inutile, il clientelismo e amenità del genere, mi viene in mente che sono stato uno stupido a non approfittare, quando potevo, della possibilità di andarmene all’estero.

Quando hai paura e ti fai sovrastare da lei, finisce che resti nell’immobilità ed il treno che passa non ti vede salire!

Ecco quindi che ti ritrovi a 40 anni a pensare cosa sarebbe stato vivere in uno stato (qualsiasi esso sia) in cui vale la meritocrazia anzichè le amicizie.

Poi, magari mi sarei ritrovato a fare il cameriere perchè non ho “merito” per fare il lavoro che faccio , ma sarebbe stato meglio che vivere di file, balzelli, ruberie e tutto ciò che accade qui!

Io non so come si sta all’estero, ma se tanta gente ci va, probabilmente, proprio male male non si vivrà!!

E qui va sempre peggio!!!!

lunedì 2 agosto 2010

Primo evento DomusDotNet: ALMReloaded

DomusDotNet ha annunciato l’organizzazione del suo primo evento. Si tratta di un pomeriggio dedicato all’Application Lifecycle Management.

L’evento si terrà nella seconda metà del mese di settembre (con data e location da definirsi a giorni) nella città di Roma, durerà un pomeriggio e avrà la peculiarità che l’agenda dello stesso sarà scelta dai frequentatori del portale community tramite un sondaggio raggiungibile all’indirizzo:

http://www.surveymonkey.com/s.aspx?sm=ZqzqRvbGeTMoIpMQQz1VseCnqgWh9oh7F49PvbwWc5Q%3d

La vostra opinione è utilissima per realizzare un evento interessante e utile, perciò, aiutateci compilando il questionario.

domenica 1 agosto 2010

10 copie di Windows 7 vendute ogni secondo

I dati della chiusura dell’anno fiscale di Microsoft (4* quarto di anno) mostrano che, mediamente, si vendono 10 copie di Windows 7 ogni secondo:

10 copies of Windows 7 sold every second, 175 Million Licenses Sold! | MicrosoftFeed

Grande successo, forse oltre ogni aspettativa, per il SO successore di Vista.

Technorati Tags: