by in / TFS
No peoples think this is good

Cambiare il current sprint nelle query di TFS

Se utilizzate le query di TFS per monitorare l’andamento di uno sprint vi sarete trovati nella condizione di dover modificare l’IterationPath al cambio dello sprint corrente. Questa noiosa attività può essere evitata con qualche riga di codice e l’aiuto delle API di TFS.

Prima di tutto aggiungiamo come referenze le seguenti librerie al progetto:

Se non le trovate tra gli assembly del framework cercatele nella seguente cartella di Visual Studio: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ReferenceAssemblies\v2.0\.

Poi ci colleghiamo alla collection:

Recuperiamo le informazioni sulla struttura dei progetti presenti nella collection attraverso il servizio ICommonStructureService:

Il servizio ICommonStructureService non è l’unico modo per conoscere le iterazioni di un progetto, ma è il solo che ci permette di recuperare le date di inizio e di fine sprint indispensabili per capire qual è lo sprint corrente.

Con il metodo ListStructures otteniamo le aree e le iterazioni del progetto come struttura di nodi. Da questa struttura prendiamo il nodo principale delle iterazioni e attraverso il metodo GetNodesXml portiamo il tutto in un documento xml che possiamo poi ispezionare con LINQ:

Tra tutti i nodi prendiamo quelli che non hanno figli (ovvero gli sprint):

Per ogni nodo carichiamo le informazioni in una lista:

Per rendere più agevole l’operazione ho creato una classe Iteration contente tutte le informazioni di uno sprint:

… e una classe Iterations, come lista di Iteration, che fornisce dei metodi per recuperare lo sprint corrente e quelli passati:

Attraverso il WorkItemStore recuperiamo le query di ogni progetto e per ogni query andiamo a sostituire l’iterazione passata con la corrente:

Il metodo AllQueries è un extension method che recupera tutte le query di un progetto come mostrato da Ewald Hofman in questo articolo. Se tutto è andato secondo i piani possiamo salvare le modifiche alle query attraverso il metodo Save dell’oggetto QueryHierarchy:

Come ulteriore conferma della correttezza dell’operazione possiamo eseguire la query sullo store. Ecco come fare:

Nella sezione materiale eventi del sito di 1nn0va, sotto la cartella ALM Saturday, trovate la solution di Visual Studio completa.

/ Read Article /
by in / Eventi / Metodologie Agili / TFS
No peoples think this is good

ALM Saturday il 5 Ottobre a Pordenone

Sabato prossimo, 5 Ottobre 2013, 1nn0va, in collaborazione con il Consorzio Universitario di Pordenone organizza una giornata intera dedicata all’ALM.

Il programma della giornata è il seguente:

  • 09:30 – 10:45 – Introduzione all’Application Lifecycle Management (Gian Maria Ricci, Davide Vernole, Manuel Scapolan)
  • 10:45 – 12:00 – ALM Assessment (Davide Vernole)
  • 12:00 – 13:15 – Agile Planning and Portfolio management su Team Foundation Server (Gian Maria Ricci)
  • 13:15 – 14:30 – Pausa pranzo
  • 14:30 – 15:45 – UX e scelte tecnologiche: come la UX determina le scelte di un CTO (Mauro Servienti)
  • 15:45 – 17:00 – Team Foundation Server & SCRUM Lesson Learned (Manuel Scapolan)
  • 17:00 – 18:15 – Uso delle Team Foundation Server API (Davide Vernole, Gian Maria Ricci, Manuel Scapolan)

Potete leggere tutti i dettagli sul sito di 1nn0va, la partecipazione è gratuita. Per iscrivervi andate nell’apposita pagina di registrazione.

Vi aspettiamo numerosi!

/ Read Article /
by in / Metodologie Agili / TFS
No peoples think this is good

Daily Meeting: Che cosa ho fatto ieri?

Può capitare durante il daily meeting di non ricordare tutto quello che si è fatto il giorno prima. Possiamo creare una query in TFS che ci aiuti:

yesterday

La query visualizzerà tutti i task del Team Project assegnati a noi che abbiamo modificato ieri (ovviamente non vale per il secondo lunedì dello sprint :-)).

Condizione necessaria perché tutto funzioni? Ricordarsi di aggiornare i task la sera prima di andare a casa…

/ Read Article /
by in / In evidenza / Metodologie Agili
1 people think this is good
Scrum? E’ come fare il bucato!

Scrum? E’ come fare il bucato!

In questi giorni l’argomento caldo in azienda è l’adozione della metodologia scrum per l’organizzazione e la pianificazione dei progetti software. Come spiegare però tale metodologia senza l’utilizzo di “tecnicismi”? Attraverso una semplice metafora…

/ Read Article /
Domain Driven Design e CQRS

Domain Driven Design e CQRS

Scrivere applicazioni che funzionano spesso non è un fattore sufficiente a garantirne il successo. Dobbiamo innanzitutto capire e soddisfare i requisiti del cliente, mantenere un elevato grado di manutenibilità e ovviamente avere usabilità e performance. In tutto questo il Domain Driven Design ci fornisce una serie di principi che ci aiutano a non fallire nella progettazione e nello sviluppo di un software e il CQRS è il modo migliore di applicare questi principi.

Queste slide sono tratte dall’evento live, se siete interessati è disponibile anche la registrazione.

/ Read Article /
by in / Database / Eventi / In evidenza
No peoples think this is good
Il database relazionale va in pensione, avanza il movimento NOSQL

Il database relazionale va in pensione, avanza il movimento NOSQL

Negli ultimi anni le applicazioni sono diventate sempre più “affamate” di dati. Dati in grandi quantità, di diverse tipologie e ad una frequenza sempre più elevata. Questo fenomeno, qualificato con il nome di BigData, ha costretto Amazon e Google a ridefinire il trattamento delle informazioni e a proporre architetture alternative in grado di garantire un efficace scale-out.
La condivisione delle soluzioni da loro trovate ha portato poi alla realizzazione di una serie di database che non utilizzano il modello relazionale per il trattamento dei dati applicativi.
Nacque quindi il movimento NOSQL:

Queste slide sono tratte dall’evento live, se siete interessati è disponibile anche la registrazione.

/ Read Article /
by in / ASP.NET / JavaScript
No peoples think this is good
Knockout.js: MVVM in JavaScript

Knockout.js: MVVM in JavaScript

Volete velocizzare la vostra applicazione web scrivendo meno codice possibile?
Provate Knockout.js, un’API JavaScript che facilita lo sviluppo di interfacce utente introducendo lato client il pattern MVVM. Vediamo come:

Knockout.js si integra perfettamente con ASP.NET MVC3 grazie all’utilizzo di AJAX, JSON e del ModelBinder.

Scarica il progetto con il codice di esempio >> Download

 

/ Read Article /
by in / ASP.NET
No peoples think this is good

7 modi di fare rendering in ASP.NET MVC3

Il pattern MVC ci dice che il controller deve preparare i dati del modello e scegliere la vista da visualizzare e che la vista ha il solo compito di formattare i dati. Nella realtà però le informazioni da visualizzare hanno diversa granularità e contesto e non sempre la linearità del metodo classico risolve tutti i casi. Vediamo allora quali possibilità ci vengono offerte dal framework ASP.NET MVC per quanto riguarda il rendering dei dati sulla vista:

1. Strongly Typed Views

Cominciamo dal modo classico.

Il controller prepara il model (3-9) e lo passa direttamente alla vista (12).

mvc-strongly-typed-views

Nella vista definisco il tipo di modello (in razor con @model) e l’IntelliSense fa il resto.

Quando usare viste tipizzate?

Sempre e il più possibile, magari valutando l’abbinamento con il pattern ViewModel.

2. Codice in-line

Posso scrivere codice C# direttamente nelle viste per organizzare il markup in base al modello.

Quando usare codice in-line?

Portare la logica nelle viste va contro la separation of concerns tipica di MVC e renderà il codice non testabile. Se il codice da scrivere va oltre un semplice foreach è consigliato metterlo sul controller, oppure gestirlo con un Html Helper o in una RenderAction.

3. Html Helper Methods

Scrivere codice html alle volte può risultare ripetitivo, ecco perché il framework ci mette a disposizione degli Extension Methods che nascondono la scrittura dei più comuni tag html.

L’output è il seguente:

Quando usare gli Html Helper Methods?

Devo confessare che a me scrivere codice html piace, non userei quindi gli helper per banalità quali label o textbox perché peggiorano la leggibilità del codice. Trovo molto utili invece quelli che derivano da HtmlHelper<TModel> ovvero gli helper fortemente tipizzati. Ad esempio:

4. Html.Partial() e Html.RenderPartial()

Vi ricordate gli User Control del paradigma WebForm? Esistono anche in MVC e si chiamano PartialView. Le viste parziali sono praticamente delle viste senza master page, per richiamarle possiamo usare due helper: Html.Partial() e Html.RenderPartial(). La differenza? Partial ritorna una stringa, mentre RenderPartial scrive direttamente nella Response.

Quando usare le Partial View?

Le partial view vengono utilizzate per condividere del codice tra più viste, ad esempio un menu di navigazione, il footer oppure l’header. Possono contenere codice in-line, chiamate ad altri helper, ma non hanno logica di business. Per questi motivi i dati vengono passati attraverso il Model oppure tramite ViewData/ViewBag dell’action chiamante. Se vogliamo utilizzarle per i classici cross-cutting concern dobbiamo inserire la logica in un base controller, in un filtro oppure nel ViewData di ogni chiamante.

5. Html.Action() e Html.RenderAction()

Vogliamo avere una partial view con della logica applicativa? Possiamo richiamare all’interno della vista una action di un controller attraverso l’helper RenderAction. Ogni volta che chiamiamo questo metodo viene generata una richiesta che attraversa tutta la pipeline di MVC e renderizza il codice della vista direttamente nella Response. Utilizzi tipici di questa tecnica sono i widget. Ad esempio:

Quando utilizzare Html.RenderAction()?

La scelta tra mettere tutto in una action e fare un’altra richiesta dipende dalla volontà di mantenere separata la logica tra le chiamate. Se parliamo in termini di riutilizzo del codice o di cross-cutting concern è opportuno intraprendere prima altre strade come un base controller oppure un global filter.

6. Custom Html Helper Methods

Oltre agli helper contenuti nel framework possiamo definirne di personalizzati semplicemente sfruttando la tecnica degli Extension Methods, un esempio:

Quando utilizzare un helper personalizzato?

Potenzialmente qualsiasi metodo che ritorna una stringa può essere trasformato in un helper. E’ buona regola comunque pensare ad un helper come ad un pattern ovvero alla soluzione di un problema ricorrente.

7. Razor Template

Cito testualmente dal post di Scott Guthrie: “One other useful (and extremely powerful) feature we are enabling with Razor is the ability to pass “inline template” parameters to helper methods. These “inline templates” can contain both HTML and code, and can be invoked on-demand by helper methods”. Ecco un esempio e qui sotto un altro:

Quando e perché utilizzare un razor template?

Non l’ho ancora capito…

Resources:

  • MvcMusicStore di Jon Galloway
  • Inside Razor – Part 3 – Templates (Andrew Nurse)
/ Read Article /
by in / ASP.NET
No peoples think this is good

Utilizzare Memcached con ASP.NET

Vediamo come in 5 minuti possiamo configurare Memcached per la nostra applicazione ASP.NET.

Passo 1 – Installazione di Membase Server

Invece di installare Memcached come prodotto “stand-alone” ho deciso di utilizzare Membase Server un “key-value database management system” che tra l’altro permette di gestire Memcached attraverso una comoda console web. Per installare Membase Server dobbiamo scaricare il pacchetto di installazione specifico per il nostro sistema operativo, nel mio caso Windows.

membase-install

Passo 2 – Configurazione del server

Una volta completata l’installazione ci viene proposto un wizard per la configurazione del server.

membase-web-console

Nel primo step definiamo la destinazione su disco dello storage e quanta RAM dedicare alla cache.

membase-step1

OK, ma Memcached non era un database in memoria, perché allora ci chiede spazio su disco?
Sì memcached salva i dati in memoria, ma il server di Membase permette anche di scegliere come database una versione nativa che aggiunge a memcached caratteristiche di persistenza e replica.

Il secondo step consiste appunto nella scelta del tipo di storage (in Membase viene definito Bucket) e noi scegliamo Memcached.

membase-step2

Gli ultimi due step consentono di configurare le notifiche sugli aggiornamenti del software e le credenziali di accesso alla console.

Passo 3 – Se siamo in DHCP

Se siamo in DHCP e vogliamo utilizzare Membase in locale dobbiamo andare nella cartella Server/bin sotto l’installazione di Membase e lanciare da prompt (come amministratore) i seguenti comandi:

> service_stop.bat
> service_unregister.bat
> service_register.bat ns_1@127.0.0.1
> service_start.bat

A questo punto dovremmo avere Membase configurato in locale.

Passo 4 – Scaricare le librerie client

Per poter utilizzare Memcached dalla nostra applicazione dobbiamo ora installare le librerie client Enyim Memcached versione 2.11 e Membase versione 2.14, invece di scaricarle da internet possiamo utilizzare il Package Manager di NuGet.

 

memcached-client

Passo 5 – Configurare l’applicazione web

Nel web.config dobbiamo aggiungere la seguente configurazione:

Passo 6 – Hello Memcached

A questo punto non ci resta che instanziare il client e salvare il nostro primo valore in Memcached.

Attenzione! La creazione del client è molto dispendiosa, è opportuno quindi instanziarlo una volta sola magari alla partenza dell’applicazione.

Dalla console di Membase possiamo monitorare l’attività del server e scegliere se necessario di aggiungere a caldo altri server al cluster.

membase-monitor

 

A questo punto siamo liberi di utilizzare Memcached per velocizzare la nostra applicazione ASP.NET ed alleggerire il carico sul nostro caro e vecchio database relazionale!

 

Fonte: Getting Started with Membase and C#

/ Read Article /
by in / Database
No peoples think this is good

NoSQL & ASP.NET just married!

Il vecchio schema a tre livelli non esiste più. Il database relazionale non riesce più a soddisfare le richieste di applicazioni sempre più esigenti in termini di performance e ricchezza del dato.
Ad oggi le applicazioni enterprise utilizzano tre classi di database, al database relazionale per l’OLTP si è aggiunto il data warehouse per operazioni di analisi del dato e reportistica.
A mettere in discussione la supremazia del database relazionale nel campo dei dati “appena sfornati” ci ha pensato il movimento NoSQL, che propone un modo diverso di memorizzare e consumare i dati applicativi.

nosql
fonte: http://geekandpoke.typepad.com/geekandpoke/2011/01/nosql.html

Perché NoSQL: un caso pratico

Le interrogazioni che prevedono dati presi da più tabelle sono le operazioni nelle quali il relazionale viene messo a dura prova, indici, viste e denormalizzazioni varie sono rimedi poco efficaci se la nostra applicazione effettua un numero elevato di richieste. In questo caso viene spontaneo pensare ad un sistema di cache e in questo campo il migliore è memcached.

Nel prossimo post vedremo come configurare memcached per velocizzare sensibilmente le nostre applicazioni ASP.NET.

continua…

/ Read Article /