Latest Posts

Sabato scorso si è tenuta a Milano, la settima e ultima UGIALT.net conference: ebbene si, ultima come in “non ce ne saranno più altre”.
La fine
Se avete partecipato alla conferenza avete anche sentito la spiegazione del motivo durante la keynote tenuta da Emanuele e Claudio. Se invece non avete partecipato potete leggere le slide della keynote, vedere il video della keynote, o leggere il post di Emanuele: Perchè UGIALT.net ha chiuso?
Quando siamo partiti, più di 4 anni fa (UGIALT.net è stata fondata a fine Ottobre 2007), il nostro obiettivo era quello di portare una visione “ALTernativa” della programmazione su .NET. A mio avviso ci siamo riusciti, visto che anche gli altri usergroup hanno iniziato ad introdurre nelle loro agende sessioni su argomenti più “agili” e meno “corporate”, e tra i partecipanti alle nostro conferenze hanno iniziato a venire anche sviluppatori più “mainstream”. E forse l’essere riusciti nel nostro scopo è stato anche uno dei motivi della chiusura della attività. Lo step successivo sarebbe stato organizzare eventi da 300-500 persone. Ma qui interviene un’altro fattore: dei 5 iniziali fondatori, 2 sono spariti dopo un’annetto, e in 3, ciasucuno con i propri problemi lavorativi e le sue attività extra-lavorative, già si fa fatica ad organizzare un evento da 150 persone, con la sala offerta (e ringraziamo Avanade per averci ospitato per 4 edizioni nelle loro sale), figuriamoci un evento da 400 persone con anche la necessità di cercare la location.
Abbiamo quindi reputato, con grande amarezza, di terminare questa avventura: ora tocca ad altri continuare sulla strada tracciata, e continuare ad organizzare eventi aperti, indipendenti, che guardino senza paura a quello che succede nelle altre community.
La conferenza
Tornando al resoconto della conferenza, bisogna dire che è stata l’edizione dei record: oltre 240 tra iscritti e waitlist (compresi speaker e staff), quasi 150 partecipanti (la capienza massima della location… e forse anche un po’ oltre) e, per la prima volta, abbiamo dovuto lasciare a casa 30 persone iscritte in waitlist sulle 60 registrate.
Anche record di premi: tra i buoni offerti da Umbraco a tutti i partecipanti e tutte le licenze omaggio estratte a sorte, il valore complessivo dei premi ha superato i 50.000€.
E ultimo record: siamo la prima conferenza per developers in Italia ad essere entrata nei trending topic su twitter in Italia.
Abbiamo già pubblicato quasi tutte le slide e le demo delle presentazioni su Joind.in: http://joind.in/event/uan12
Se avete partecipato vi chiedo di lasciare il vostro feedback, sia sulla conferenza che sulle singole sessioni.
Inoltre, grazie all’aiuto di DotNetMarche (nostro erede spirituale) e agli scatolotti prestatici da Lorenzo, sono disponibili anche i video di quasi tutte le presentazioni: http://vimeo.com/album/1814185
Ed in ultimo, per rivivere l'atmosfera, il foto twitter wall realizzato da PepperTweet per la UAN12
E ora?
E ora confidiamo che le altre community proseguano sulla nostra strada: sappiamo di sicuro che DotNetMarche ha in mente qualche cosa oppure, se volete seguire quello che c’è oltre a .NET, WEBdeBS è sicuramente lo usergroup da seguire (ed Emanuele è entrato a far parte del gruppo).

Per quel che mi riguarda, collaborerò un poco pure io con WEBdeBS, e poi mi dedicherò maggiormento a opensource e all’interazione con le community locali (ovvero Belghe).
del.icio.us Tags:
ugialtnet
I giorni 28 e 29 Marzo, Microsoft Bulgaria terrà il tradizionale evento "Microsoft Days".
È con molto piacere che annuncio di essere speaker per due argomenti di grande rilievo per la prossima ondata di tecnologie:
Gli abstract sono pubblicati qui:
http://www.msbgregistration.com/Presenter.aspx?PresenterId=257

A presto Sofia!!!
Alle volte le piccole cose inutili sono essenziali per per aggiungere un po’ di sale alla quotidianità.
Tra queste, a mio umilissimo parere, c’è la possibilità di modificare la skin dell’emulatore Windows Phone 7:

Questa e altre cose più serie nel post di Doug Rathbone: 8 Must-Have Tools for Windows Phone 7 Development
10 years have passed, bringing successes
[1], and bringing new challenges for the next 10 years
[2][3][4][5].
Also now, Agile is mainstream.
And this can be
the major change after these 10 years.
Indeed this is something that cannot be changed, controlled or forced into a predefined plan.
Instead is something to welcome and to adapt to, searching for the best possible outcomes.
This change, Agile been mainstream, also
has the potential to be a disruptive event, because it can change the game and could fade away most of the original Agile ideas.
For what I understand, when a minority turn mainstream, to survive and to evolve needs to
preserve the most valuable traits of its identity and at the same time needs to be open to changes and contaminations, be curios,
exploit diversity [6] and
build bridges. A prerequisite for this is to
deepen and strength the understanding of the key valuable factors of Agile, its identity behind rituals and conventions, and to spread the key knowledge and key practices, make them
resilient to the ongoing
Mash-up and crossover that is happening with lot of contributions from different sources, fields, people, background. And be open to let all the others non essentials/key things go.
How?
For example I would like to read more books/articles and see more discussions and teams deepening
- more about Agile values and principles, enough to become able to recognize in everyday real situation whether an action/decision/practice in that specific context adhere to Agile values and principles and whether not and what are the practical consequences
- the internals of Scrum and XP practices, know and understand exactly what effects each practice is expected to produce in combination with the others, enough to understand how a modification to a practice could affect the overall productivity quality and chances of success (e.g. becoming able to adapt/modify Scrum effectively as Jeff Sutherland and Ken Schwaber would do and not the way they wouldn't do), and enough to recognize when a team is already achieving all the outcomes expected from a practice and so the team does not need to enforce that practice explicitly anymore (e.g. as Kent Beck describes in Software G forces)
- social complexity and self-organisation enough to be able to distinguish between simple complicated and complex problems, make sense of complex contexts, have the tools to identify and explore the unknowns, deal with inherent uncertainty, inspect and adapt to react properly to unpredictable events, to make proper use of available levers to direct and influence the emergence of behaviors toward positive directions to the advantage of the organization the team and to the project success, to amplify the emergence of beneficial behaviors and to reduce or revert the non beneficial ones
And you, how would you do this?
[1]
http://www.ambysoft.com/surveys/success2011.html
[2]
http://10yearsagile.org/
[3]
http://drdobbs.com/architecture-and-design/229301128
[4]
http://scrum.jeffsutherland.com/2011/11/agile-manifesto-10-year-reunion-full.html
[5]
http://msdn.microsoft.com/en-us/library/hh350860.aspx
[6]
http://blogs.ugidotnet.org/luKa/archive/0001/01/01/abide-model-an-exercise-diversitydissent.aspx
Terzo ed ultimo articolo (qualcuno dirà finalmente
) della serie dedicata ai WCF Data Services. Articolo completo su DomusDotNet. Critiche, consigli e suggerimenti sono sempre ben accetti.
Dove vogliamo andare?
Quest'anno in azienda tra gli obbiettivi che ci siamo dati per il 2012 c'è la necessità di migliorare il processo di sviluppo software.
Due aspetti su cui vogliamo concentrarci sono la visibilità delle informazioni e la gestione del cambiamento perché sono quelli che ci danno maggiori difficoltà.
Dove siamo?
Facciamo un passo indietro; quale metodologia e quali strumenti utilizziamo?
La metodologia è incrementale adattativa, basata sul nostro modello di business, prende spunto per la parte di project management da Scrum e per la parte di sviluppo dalle pratiche di Xp (Continuous Integration, Testing …).
Lo strumento principe è ovviamente Tfs (Source Control, Work Item Tracking, Build) a cui si agganciano altri strumenti creati ad hoc.
Tfs è veramente eccezionale sul tracking ma, purtroppo è dentro un pc, NON lo vedo e NON lo tocco, perciò ci serviva qualcosa su cui “sbattere la faccia”.
Scrum è una ottima metodologia ma, ci siamo resi conto di non riuscire a mantenere Sprint con time box fisso e Sprint Backlog rigidi.
Quindi pur essendo Scrum poco prescrittivo abbiamo avuto il timore di snaturare la metodologia.
Cosa è Kanban?
Kanban letteralmente significa Cartellino e arriva dal mondo Lean Development.
Si basa su 3 concetti base:
- Rendere il lavoro visibile
- Limitare il work in process
- Aiutare il flusso a scorrere
Solitamente viene utilizzata una Kanban Board cioè una lavagna suddivisa in colonne che rappresentano gli stati.
Il lavoro viene diviso in parti e scritto sulle card, e queste sono appese sulla board.
Agli stati vengono assegnati dei limiti che vincolano il lavoro contemporaneo.
L’obbiettivo è ottimizzare il processo per rendere il lead time (il tempo di attraversamento) quanto più piccolo e prevedibile possibile.

Come vogliamo adottarlo?
L’idea è di partire con una sperimentazione su alcuni team e di estendere poi il modello a tutti i team dell’azienda.
Non volevamo stravolgere il modo di lavorare quindi tutti gli strumenti e i processi nella prima fase resteranno invariati. Per fare una esempio chiarificatore i work item saranno ancora presenti in tfs, semplicemente saranno visibili anche sulla Kanban bord.
Ogni team avrà la sua board.
I post-it saranno di più colori e ogni colore rappresenterà una iterazione. Accade infatti che nel nostro modello di business, un team lavori per più clienti contemporaneamente o anche su più iterazioni contemporanee magari legate a branches differenti.
La board ci consentirà visualmente di monitorare l’avanzamento, le code e i colli di bottiglia, limitando i continui cambi di contesto sulle attività parallele.
Ricordo una bella sessione di Brandolini che mostrava come il costo di una funzionalità crescesse quanto più questa rimaneva bloccata e al tempo stesso impediva di fare crescere il Roi derivato.
Sulla card abbiamo deciso di riportare il numero di work item, una descrizione sintetica della richiesta, dei pallini neri che visivamente ci indicano che quella richiesta è stata soggetta a dei bug, e un peso indicativo in ore.
Durante l’incontro che abbiamo fatto insieme al team, che è partito per primo, abbiamo definito quali erano i limiti per ogni stato partendo dalla formula (numero dei componenti del team * 2 -1) e fatto piccoli adattamenti al modello della bord generale che avevamo preparato.
Per trarre conclusioni è presto ma, sicuramente sono emerse due evidenze:
Una pratica all’apparenza semplice (carta su una lavagna) in poco tempo fa emergere problemi invisibili prima e attira la non facile attenzione del management.
Tag di Technorati:
Kanban,
Lean,
Metodologie
Utilizzando WCF in modo abbastanza spinto mi è capitato di dover sfruttare della memoria allocata in RAM cercando di annullare l'overhead del caricamento in RAM dei dati.
In questo caso mi è venuta in aiuto la classe ServiceBehaviour, in particolar modo decorando il mio servizio con l'attributo
[ServiceBehaviour(InstanceContextMode=InstanceContextMode.Single)] ho ottenuto il risultato desiderato, implementando il pattern Singleton.
Si devono fare alcune considerazioni su "InstanceContextMode.Single" , in primis per poterlo utilizzare in modo sensato è necessario un binding di tipo ws in quanto è necessario una comunicazione dual way tra service e chiamante, in particolar modo il nostro service necessita di riconoscere il chiamante, quindi scordiamoci (ma scordiamocelo anche in generale) di usare un binding di tipo basic.
Sono disponibili altri valori per l'enumeratore InstanceContextMode in particolare:
- InstanceContextMode.Single
- InstanceContextMode.PerSession
- InstanceContextMode.Per call
Se proprio volete usare un binding di tipo basic l'unico tipo di InstanceContextMode che ha senso è il PerCall.
E' facile intuire come nel caso del valore PerSession venga istanziata una classe del nostro servizio per ogni sessione
mentre nel caso del valore PerCall venga istanziata una classe del nostro servizio ad ogni chiamata.
(In realtà non è proprio così ma in soldoni succede questo...)
Quando impostate il valore dell' InstanceContextMode su Single fate molta attenzione poichè se non impostate il valore del parametro ConcurrencyMode su Multiple verrà processato un messaggio alla volta.
Alla prossima..
$("#idForm").find(':input').each(function() {
switch(this.type) {
case 'password':
case 'select-multiple':
case 'select-one':
case 'text':
case 'textarea':
$(this).val('');
break;
case 'checkbox':
case 'radio':
this.checked = false;
}
});
AutoMapper è una libreria indispensabile in tutti quei casi in cui è necessario mappare un oggetto su un altro. Esempio tipico è quando abbiamo un oggetto che rappresenta un’entità del database e lo vogliamo utilizzare per impostare le proprietà di un nostro oggetto di business. Questa attività, estremamente noiosa e ripetitiva, grazie ad AutoMapper si realizza con una semplice riga di codice.
AutoMapper è un progetto open source disponibile su GitHub. Può anche essere scaricato direttamente tramite NuGet. Su CodeProject, inoltre, si può trovare un articolo che mostra come muovere i primi passi con la libreria.
Sono trascorsi 10 anni da quando Bill Gates spedì a tutta Microsoft una famosa email nella quale affermava la necessità di un cambio di approccio nel confronto della sicurezza applicativa.
Da allora sono successe tante cose e senza dubbio sono stati raggiunti traguardi importanti non solo riguardanti i prodotti Microsoft ma anche nelle librerie, nei tool e soprattutto nella metodologia che aiuta noi sviluppatori a rendere il nostro codice più sicuro.
Ho avuto il grande privilegio ed onore di scrivere l'articolo commemorativo per la Technet Security Newsletter che è presente pubblicato a questo link: http://technet.microsoft.com/en-us/security/hh778965.aspx
Poiché quei link puntano alle newsletter del mese corrente, riporto qui di seguito lo screenshot della pagina:

Grazie Microsoft per la bella opportunità.
Un piacevole side-effect che ho riscontrato nell’uso di Fiddler con l’emulatore del Windows Phone è che “magicamente” hanno cominciato a funzionare anche le richieste ai servizi web che prima si rifiutavano di andare. Ho perso un bel po’ di tempo facendo varie prove, convinto che fossi io a sbagliare qualcosa, invece è prorpio l’emulatore che non ne voleva sentir parlare, visto che facendo gli stessi test con il telefono tutto filava liscio.
Devo ammettere che non ho capito bene da cosa dipenda, ma per il momento mi va bene così (ho altro più urgente di cui occuparmi).
Quindi, se vi dovesse capitare di aver difficoltà nell’esecuzione di comandi HTTP per accedere ai servizi web dall’emulatore WP7, scaricatevi Fiddler e impostatelo seguendo le indicazioni del precedente post.
Come si suol dire, due piccioni con una fava!
ll gioco in questione di cui ho parlato in questo post da un paio di giorni è stato sostituito dalla versione completa e totalmente gratuita, con banner pubblicitari ove disponibile.
Se volete passare un po’ di tempo tra puzzle e scarafaggi questo è il nuovo link da cui scaricarlo, votate votate votate!

Uhmm… dunque:
- Il “fu” Information Card rende estremamente difficile riuscire a sottrarre le credenziali di accesso tramite social engineering (che ad oggi credo sia di gran lunga il metodo più semplice ed utilizzato dai malintenzionati) e solleva definitivamente l’utente dalla gestione di una “pass …phrase”, ovvero creazione esclusiva per ogni differente accesso (si, lo so che “non proprio tutti” lo fanno…), immagazzinamento (a meno che non siate in grado di memorizzare in testa un Dictionary<string, string> contenente decide di elementi), rinnovo alla scadenza legale ogni 3/6 mesi (si, si, lo so, lo so…).
- Single Sign On, inteso come “on every partner application”, solleva l’utente dalla difficoltà di creare e gestire una coppia di credenziali esclusiva per ogni sito web (ma non solo) in modo da doversene ricordare una sola. Certo, comunque una soluzione più “furba” di n decine di password scritte sul fogliettino sotto la tastiera, ma è un po’ come se faceste creare un’unica chiave per accedere a casa vostra, l’auto, la moto, la cassetta della posta, il box, la cassetta di sicurezza, il lucchetto del vostro scrigno coi tesori di quando avevate 5 anni, ecc. ecc. Se vi fregano quella bella e comoda chiave, mmmmmmh!
Ovviamente IMHO la strada ideale sarebbe stata Information Card Managed/Unmanaged eventualmente utilizzato per il Federated Login, ma vabbè, ormai….
Capita spesso di dover estrapolare dati aggregati del tipo:
SELECT Prodotti.Codice, SUM(Quantita) as QuantitaVenduta
FROM RigheOrdini
JOIN Prodotti ON RigheOrdini.IDProdotto = Prodotti.ID
Group By Prodotti.Codice
Order by Prodotti.Codice
e di dover aggiungere altre informazioni nella Select. La soluzione è:
SELECT Prodotti.Codice, Prodotti.Nome, Vendite.QuantitaVenduta
FROM Prodotti
JOIN (SELECT IDProdotto, SUM(Quantita) as QuantitaVenduta
FROM RigheOrdini
Group By IDProdotto) as Vendite
ON Prodotti.ID = Vendite.IDProdotto
Order by Prodotti.Codice
Altra questione interessante è che è generalmente più performante:
SELECT Clienti.Nome, Clienti.Cognome, Clienti.Regione
FROM Clienti
WHERE EXISTS (SELECT * FROM BaseCamp WHERE BaseCamp.Regione = Clienti.Regione)
ORDER BY Clienti.Cognome, Clienti.Nome
invece che:
SELECT DISTINCT Clienti.Nome, Clienti.Cognome, Clienti.Regione
FROM Clienti
INNER JOIN BaseCamp on BaseCamp.Regione = Clienti.Regione
ORDER BY Clienti.Cognome, Clienti.Nome
Technorati tags:
Sql Server
Ho completato il porting della mia libreria per il Text-To-Speech sulla piattaforma .NET Micro Framework. Come sempre, l’ho pubblicata su MSDN Code Gallery, dove è possibile trovare anche gli esempi del suo semplicissimo utilizzo.
La libreria è anche disponibile su NuGet. E’ sufficiente effettuare una ricerca per TranslatorService.Speech. All’interno di questo package si trovano sia la nuova versione per il .NET Micro Framework, sia quella per il “Full”. In base al tipo di progetto, Visual Studio referenzierà la libreria corretta.
Per usare fiddler con l’emulatore bisogna fare così:
1. Da “Tools | Fiddler Options” settare l’opzione evidenziata e confermare cliccando su OK:

2. Nella QuickExec box sotto la lista delle sessioni, digitare “prefs set fiddler.network.proxy.registrationhostname <Host> dove<Host> e il nome del vostro desktop:

3. Riavviare Fiddler.
4. Avviare (o riavviare) l’emulatore Windows Phone 7
Per verificare il funzionamento, aprire Internet Explorer nell’emulatore e controllare che il traffico venga visualizzato in Fiddler.
Maggiori info qui.
That’s all folks!
Generalmente il binding two-way di una textbox aggiorna la proprietà a cui è bindata quando il controllo perde il focus.
Poiché però i pulsanti posizionati nel menu non spostano il focus della pagina, vediamo cosa accade in pratica:


Il motivo è semplice: poiché la TextBox che contiene il cognome non ha perso il focus, il binding non ha aggiornato la proprietà sorgente (Binding source) del ViewModel, quindi il controllo della validità dei dati immessi ritorna l’errore. Peggio ancora, poiché di fatto il valore della proprietà bindata suddetta è ancora quello vecchio, nel nostro caso abbiamo un errore perché la nostra logica di business richiede un valore non vuoto e siamo partiti da zero, ma in caso di una maschera di editing dei dati, dove magari vogliamo correggere il valore contenuto nella textbox, di fatto senza accorgerci di nulla il programma utilizzerà il VECCHIO valore e non darà errore perché tale valore non è vuoto.
Se avessimo utilizzato un bottone nella pagina e non un ApplicationBarIconButton, il focus si sarebbe spostato sul bottone stesso e il binding avrebbe completato l’aggiornamento della sorgente senza problema alcuno.
Dunque risulta assolutamente necessario, nello scenario descritto, forzare il binding in modo da aggiornare la sorgente al contenuto delle TextBox e dell’eventuali PasswordBox.
Per farlo si può utilizzare il seguente codice, da inserire nel codice associato all'evento prodotto dal pulsante:
C#:
// Force two-way binding of the editing field
object focusObj = FocusManager.GetFocusedElement();
if (focusObj != null && (focusObj is TextBox || focusObj is PasswordBox))
{
BindingExpression binding;
if (focusObj is TextBox)
{
binding = (focusObj as TextBox).GetBindingExpression(TextBox.TextProperty);
}
else
{
binding = (focusObj as PasswordBox).GetBindingExpression(PasswordBox.PasswordProperty);
}
binding.UpdateSource();
}
That’s all folks!
Alcune indiscrezioni dicono che il nuovo ipad 3 sarà commercializzato a partire da marzo 2012.
Tra le novità il processore, il nuovo design e la connettività.
Ormai ne viene sfornato 1 all’anno… voi cosa ne pensate?
Fonte video e info : http://myonlinecasinoblog.com/
Vi aspettiamo al nostro corso seo del 25 novembre ultimi posti liberi…
Visual Studio Achievements è l’ultima intuizione di Microsoft per incoraggiare i programmatori a sviluppare in C# o Visual Basic. L’estensione è gratuita per Visual Studio, l’ambiente di sviluppo distribuito da Microsoft: applica il concetto della cd. “gamification” alla programmazione. In pratica, la trasforma in un gioco a premi.
Mentre si scrive il sorgente per un’applicazione in C# o Visual Basic, Visual Studio Achievements analizza il codice e attribuisce al programmatore un badge sulla base delle funzioni utilizzate. L’avvenuta acquisizione dei badge può essere mostrata su Microsoft Developer Network (MSDN) e sui social network — ad esempio, su Facebook.
Prescindendo dall’aspetto ludico, Visual Studio Achievements può essere un riferimento attendibile per certificare le proprie capacità in merito alla programmazione in C# e Visual Basic. Mozilla, infatti, utilizza lo stesso meccanismo per l’attribuzione di quelle competenze che non abbiano un sistema di certificazione tradizionale.
Diego