Monday, December 15, 2008

Dopo una giornata passata allo sviluppo di una applicazione, mi sono accorto di una mia particolarità.
Spesso mi capita di fermarmi anche svariati minuti a pensare alla frase da inserire nella classica
message box che segnala all'utente un messaggio di qualche exception o di qualche scelta che l'utente deve compiere.
Credo che segnalare bene ciò che stà succedendo sia un dovere da parte del programmatore per aiutare l'utente
a prendere la decisione giusta in questi momenti. Ma a volte trovo veramente difficoltoso trovare le parole giuste...

Per velocizzare questa mia fase mentale, stavo seriamente pensando di crearmi delle frasi pre confezionate da adattare a diverse
situazioni. Voi avete adottato qualche stratagemma a riguardo ?


Technorati Tag:

Sunday, December 14, 2008

In questo fine settimana mi sono dedicato allo studio della WPF ribbon toolbar, con lo scopo chiaramente di cercare di riutilizzarla per le UI delle mie applicazioni.

Ho scritto un breve post che ne illustra alcune funzionalità, tratte dal'HandOnlab che si trova sul sito di windowsClient.net.

WPF - Ribbon Toolbar

 

Ciao a tutti e forza Cagliari ( che sfiga oggi ! )

Technorati Tag: ,
 

In questo fine settimana ho deciso di approfondire la Ribbon toolbar di Office, per poterla riutilizzare nelle mie interfaccie.

Primo passo scaricare la ribbon toolbar disponibile su codeplex a questo indirizzo : WPF Ribbon Preview

Secondo passo da compiere è sicuramente scaricare l' handsOnLab presente nel sito dedicato al mondo client di microsoft(www.windowsClient.net) nella sezione learn che illustra,oltre alla Ribbon anche le nuove features del WPF Toolkit ed in particolare del Datagrid.

Iniziamo a capire il suo funzionamento.

Prima di tutto è necessario dire che la Ribbon è governata attraverso i Ribbon Command che permettono di impostare per ogni sua sezione
delle caratteristiche comuni. 
Le RibbonCommand sono composte da :

    a) LabelTitle
    b) LabelDescription

    c) ToolTipTitle

    d) ToolTipDescription

    e) ToolTipImageSource

    f) SmallImageSource

    g) LargeImageSource

    h) ToolTipFooterTitle

    i) ToolTipFooterDescription

    l) ToolTipFooterImageSource

     

Iniziamo ad analizzare le varie sezioni della Ribbon attraverso il suo codice XAML.

Istanziamo una nuova ribbon toolbar all'interno della nostra applicazione :

<r:Ribbon >

</r:Ribbon>

Una prima sezione è sicuramente la Application Menu , ovvero il pulsante dove sono possibili compiere le principali operazioni come il salvataggio del documento, la stampa ecc..
Vediamo come configurarla attraverso il codice :

<r:Ribbon.ApplicationMenu>

<r:RibbonApplicationMenu>

Definizione dei command per la Application Menu

<r:RibbonApplicationMenu.Command>

<r:RibbonCommand

Executed="OnCloseApplication"

LabelTitle="Application Button"

LabelDescription="Close the application."

SmallImageSource="images/Coins.png"

LargeImageSource="images/Coins.png"

ToolTipTitle="Personal Finance Manager"

ToolTipDescription="Click here to open or save a checkbook register." />

</r:RibbonApplicationMenu.Command>

</r:RibbonApplicationMenu>

</r:Ribbon.ApplicationMenu>

Come detto in precedenza ogni sezione della Ribbon viene configurata attraverso i RibbonComand che ne permettono una ampia personalizzazione.

Una volta definito l'aspetto del pulsante è necessario inserire al suo interno i vari Items che andranno a comporre il menù.

Per fare questo è necessario definire un RibbonApplicationMenuItem per ogni elemento del menù, ed attraverso i suoi RibbonCommand definirne il
suo aspetto.

<r:RibbonApplicationMenuItem>

<r:RibbonApplicationMenuItem.Command>

<r:RibbonCommand

LabelTitle="_Close"

LabelDescription="Close the Application"

Executed="OnCloseApplication" />

</r:RibbonApplicationMenuItem.Command>

</r:RibbonApplicationMenuItem>


Definito il menù principale, passiamo a definire la vera RibbonToolbar. La Toolbar si divide in Tabs - Group - Controls

Le Tabs vengono utilizzate per inserire delle funzionalità comuni ( come era per le voci File,Modifica,Visualizza dei vecchi menù)
I Groups vengono usati all'interno delle tabs per suddividere controlli che sono similiari nelle loro funzioni
Controls sono i veri e propri pulsanti che vengono visualizzati.

I Controls possono essere di diverso tipo :

  • RibbonButton
  • RibbonCheckBox
  • RibbonToggleButton
  • RibbonDropDownButton
  • RibbonSplitButton
  • RibbonComboBox
  • RibbonTextBox
  • RibbonLabel
  • RibbonSeparator
  • RibbonToolTip

I quali permettono di costruire delle Toolbar con il Look&Feel stile Office 2007 di alta qualità.

Come esempio andiamo ad inserire un RibbonButton all'interno della nostra ToolBar.

Per prima cosa è necessario creare un Tab

<r:RibbonTab Label="Banking">

</r:RibbonTab>


All'interno del Tab inseriamo il nostro Group

<r:RibbonTab Label="Banking">

<r:RibbonTab.Groups>

<r:RibbonGroup>

</r:RibbonGroup>

</r:RibbonTab.Groups>

I ribbon Group, possono essere formattati attraverso delle proprietà che ne consentono di definire come i controlli verranno
visualizzati al suo interno. Questo può essere effettuato attraverso la definizione dei GroupSizeDefinitions.

A questo punto inseriamo il nostro RibbonButton :

<r:RibbonButton Name="RibbonButton1" >
                                <r:RibbonButton.Command>
                                    <r:RibbonCommand
                                        LargeImageSource="/img/softwareD_32x32.png"
                                        LabelTitle="Help"
                                        >
            </r:RibbonCommand>
         </r:RibbonButton.Command>
</r:RibbonButton>


Così faccendo possiamo andare a costruirci la nostra Ribbon Toolbar che ci consente di dare un aspetto molto professionali alle nostre applicazioni.

Per  maggiori informazioni rimando al sito di windowsclient.net dove, come detto in precedenza, è possibile scaricare un piccolo Hands-On Lab e il suo
sorgente dove vengono descritte tutti i passaggi su come configurare il WPF Toolkit e la RibbonToolbar.

What’s Coming in WPF: Datagrid, Ribbon, and VSM

Monday, December 8, 2008

Amo la mia terra e non la cambierei con nulla al mondo...ma per certe cose è veramente una condanna.

Tante volte leggendo i post di eventi, manifestazioni, ecc.. mi accorgo che per noi che abitiamo in un'isola è spesso molto difficile partecipare.
A parte i costi ( che comunque esistono...) molto spesso a frenare la voglia di fare è il fatto che devi sempre prevedere almeno un paio di giorni di trasferta e causa impegni lavorativi non è sempre possibile.

A questo punto l'idea... perchè non creare un gruppo di persone appasionate di queste tecnologie che abitino in Sardegna in modo da potersi confrontare, scambiare idee e cercare di migliorare la nostra situazione ?

Io ho buttato una pietrolina in un mare sperando che da questo possa nascere qualcosa.

Rimango in attesa di feedback...

 

Avendomi commissionato una serie di articoli su Silverlight, ma non tutti pubblicati per una serie di ragioni ( economiche più che altro ) ne approfitto per pubblicarli sul mio blog.

Il primo è un semplice articolo su come installare e configurare il toolkit di silverlight per ottenere un primo semplice esempio di chart.

Silverlight Toolkit

Friday, June 27, 2008

Visto che ci sono degli hobbisti della fotografia, ho deciso di creare un gruppo tutto nostro...
Se volete postare alcuni vostri capolavori ( e non ) siete i benvenuti...

Nome gruppo : flickr.net

io ho iniziato con alcune foto della mia meravigliosa terra...

Buon post....

Saturday, May 10, 2008

Per un progetto di cui mi sono occupato in azienda ho avuto la necessità di interfacciare la mia applicazione con un dispositivo elettronico, il quale comunica con l'esterno tramite un server FTP.

Com'è noto il protocollo comuica con la porta 21 e la prima operazione da compiere è l'autenticazione.


Private tpTcpClient As TcpClient
 ftpTcpClient = New TcpClient(strftpLogin, 21)

A questo punto dobbiamo inviare dei comandi con i quali comunichiamo le nostre credenziali di accesso :

ResponseStream = ftpTcpClient.GetStream
strCommand =
"USER " + strName + vbCrLf
bteSendBytes = Encoding.ASCII.GetBytes(strCommand)
ResponseStream.Write(bteSendBytes, 0, bteSendBytes.Length)

Per permettere al server FTP di darci una risposta al comando dobbiamo attedere una frazione di secondo prima dell'invio della password

 

Threading.Thread.Sleep(500)


Ripetiamo le operazioni per la Password

 

strCommand = "PASS " + strPWD + vbCrLf
Array.Clear(bteSendBytes, 0, bteSendBytes.Length)
bteSendBytes = Encoding.ASCII.GetBytes(strCommand)
ResponseStream.Write(bteSendBytes, 0, bteSendBytes.Length)


A questo punto se tutto è andato a buon fine dovremmo essere connessi al dispositivo che rimane in attesa di un nostro comando.

Il protocollo FTP ha due metodi comunicazione attivo e passivo.

La differenza fondamentale è che nel caso di comunicazione passiva è il server a comunicare al client attraverso il comando PASV la porta di comunicazione nel quale verrà instaruata la comunicazione, mentre nel caso di ftp attivo è il client ad indicare al server attraverso il comando PORT la porta di comunicazione che rimane in ascolto in attesa di una connessione da parte del server FTP.

Tipicamente le porte di comunicazione devono essere  > 1023.

Il disposito lavora con un FTP di tipo attivo quindi sarà nostro compito indircargli a quale porta attendiamo la comunicazione :


 

Dim ipLocale As String = Dns.GetHostEntry(Dns.GetHostName).AddressList(0).ToString()
Dim Listener As New TcpListener(IPAddress.Parse(ipLocale), myPortOpen)
Listener.Start()


Inviamo i comandi per richiedere il file desiderato :

 

FTPCommands(ftpStream, "TYPE I", returnMessage)
FTPCommands(ftpStream,
"PORT 192,168,0,3,7,35", returnMessage)
FTPCommands(ftpStream,
"RETR " + strFilePath, returnMessage)

A questo punto non ci resta che attendere che il server faccia la sua richiesta di comunicazione alla porta indicata

If  Listener.Pending Then

dataClient = Listener.AcceptTcpClient()
DownloadStream = dataClient.GetStream
ReDim
bytDwFile(1024)Do
lngFileLength = DownloadStream.Read(bytDwFile, 0, 1024)
DwFile.Write(bytDwFile, 0, lngFileLength)
Loop While
lngFileLength > 0


Listener.Stop()

A questo punto abbiamo concluso le operazioni di download non ci resta che salvare il file sul nostro pc.

Sunday, February 17, 2008

L'altro giorno riflettevo sulla convenienza di dedicarsi anima e corpo solo ad una singola tecnologia.

Il mondo .NET è un mondo straordinario ricco di tante possibilità che permette di poter integrare all'interno di un'unica
soluzione tanti mondi ( webApplication, desktopApplication, ecc.. ) , ma spesso nella vita lavorativa ci si trova di fronte a non poter fare delle scelte libere ma spesso condizionate dal tipo di reltà già esistente.

Per esempio se il vostro committente ha a disposizione un server Linux e chiede a voi di realizzargli una applicazione che si integri con una già esistente realizzata con php e mysql, come vi comportereste ?

Prendete il lavoro e lo realizzate con la tecnologia esistente o cercate di tirare verso la vostra tecnologia preferita ?

Per quanto mi riguarda ho sempre dedicato un pò del mio tempo allo studio di diverse tecnologie per non restare tagliato fuori da mondi diversi ( che poi tanto diversi non sono... ), ma chiaramente dedicando un buon 70% al mondo .NET e cercando nel limite del possibile di portare sempre più lavori verso questo tipo di tecnologie.

Ciao Daniele

Thursday, February 14, 2008

Ciao a tutti,

dopo una lunga frequentazione come lurker dei blogs di Ugi ho deciso di diventare parte attiva di questa community.

Come buona norma di chi arriva è necessario presentarsi :

mi chiamo Daniele Mulas, nato a Cagliari e residente in Quartu Sant Elena ( CA ), laureato presso il Politecnico di Torino in Ingegneria Informatica ma sopratutto appassionato di informatica a 360 gradi.

Hobbies principali, calcio ( forza Cagliari sempre.. ),  calcio a5, fotografia ( a livelli amatoriali ) .

Bene dopo le presentazioni, si inizia a postare...

a presto

Daniele