Installazione di Redmine – L’appliance VMWare

Il primo dubbio che ho avuto nel testare Redmine ha riguardato l’installazione.

E’ scritto in Ruby, è cross-platform (Linux, Unix, Mac e Windows) e utilizza MySQL, PostgreSQL o SQLite.

La procedure di installazione è completamente dettagliata sul sito però l’idea di dover capire molte cose di questo ecosistema che non conosco mi faceva temere di perdere molto tempo prima di arrivare ad una configurazione di test da cui partire.

Fortunatamente sono già disponibili delle appliance pre-configurate su questi due siti:

Le appliance sono disponibili per VMWare  e per Amazon EC2.
Ho scelto quella di bitnami e ho scaricato la virtual machine per VMWare (circa 500mb) per usarla con Virtual Box.
 
A questo punto ho creato in VirtualBox una nuova macchina virtuale Ubuntu seguendo la sezione “How to start your BitNami Virtual Applicance with Virtual Box“. Se volete usare il vostro DHCP la rete va impostata come bridged.
 
Nel giro di circa 15 minuti mi son ritrovato un’installazione di Redmine perfettamente funzionante.
 
Non male come inizio.
Share

Project management con Redmine

Una delle prime domande che mi viene posta ogni volta che inizio una consulenza Agile è

Quale strumento di project management ci consigli di usare?

Ovviamente la prima risposta è che i processi Agili privilegiano le persone e l’interazione piuttosto che gli strumenti e consiglio di partire con un progetto pilota usando Excel che tutti conoscono (dal dev fino al business e al cliente finale) in mondo da non introdurre troppa carne al fuoco.

E’ importante notare che il Manifesto Agile dà enfasi a persone e interazione ma non elimina gli strumenti (ci mancherebbe) e quindi l’adozione di un software di project management è indispensabile in qualunque software house, a meno che non si stia sviluppando la gestione DVD del negozio sotto casa.

Tra i vari tool che ho visto dai clienti oppure provato direttamente mi sono imbattuto in Redmine.

redmine-logo

Le caratteristiche sono di tutto rispetto:

  • Supporto multi-progetto
  • Gestione della sicurezza basata su ruoli
  • Issue Tracking system
  • Calendario
  • Gantt (tanto amato dai PM)
  • News, documenti e gestione file
  • Feeds
  • Notifiche via email
  • Wiki per progetto
  • Forum per progetto
  • Time tracking
  • Campi custom per le issue, le time entry, i progetti e gli utenti
  • Completa integrazione con i principali SCM (SVN, CVS, Git, Mercurial, Bazaar e Darcs)
  • Creazione di segnalazione tramite email
  • Autenticazione LDAP
  • Auto registrazione degli utenti
  • Supporto multilingua (italiano compreso)
  • Supporto multidatabase (MySQL, PostgreSQL, SQLite)
Sul sito è disponibile una installazione demo che mi ha molto impressionato e mi ha spinto a provarlo.
La cosa interessante è che sono già disponibili moltissimi plugin per coprire esigenze particolari non implementate direttamente in Redmine.
Ad esempio esiste un plugin per la gestione di un processo tramite SCRUM.
Mi sà che scriverò qualche altro post al riguardo.
Share

Gestire le virtual directory con IIS Express

Uno degli aspetti principali di IIS Express è la sua flessibilità e configurabilità al pari di IIS “completo”, e ben superiori a Cassini.

Una delle necessità più frequenti è quella di configurare una virtual directory (si pensi ad esempio ad una cartella images posizionata al di fuori del web site).

Per configurare le virtual directory in IIS Express è sufficiente modificare il file applicationhost.config che si trova nella cartella Users/<username>/IISExpress/Config.

All’interno della sezione sites individuare il sito in cui si vuole gestire la virtual directory e aggiungere una nuova application.

Ad esempio:

<site name="WebSiteWithVirtualDirectory" id="1">
  <application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="c:tempwebsite1" />
  </application>
  <application path="/Images" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="d:tempImages" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation="*:1132:localhost" />
  </bindings>
</site>

configura un sito su IIS Express in questo modo:

localhost:1132 -> punta alla cartella c:tempwebsite1

localhost:1132/Images -> punta alla cartella d:tempimages

Da notare che è possibile configurare sito e virtual directory in maniera completamente autonoma, ad esempio impostando diversi application pool.

Share

RequestValidation e RequestValidationMode in ASP.NET 4.0

Dalla versione 2.0 di Asp.Net a default è impossibile inserire del testo html nelle textbox per motivi di sicurezza, in particolare per evitare la script injection.

Cercando di inserire dei tag html in una form si ottiene un’eccezione di questo tipo:

A potentially dangerous Request.Form value was detected from the client

Tipicamente questo comportamento viene disabilitato in alcune aree del backoffice delle web application proprio per consentire l’inserimento di testo Html come ad esempio la descrizione estesa dei prodotti in un sito di commercio elettronico.

Per disabilitare la validazione è sufficiente impostare ValidateRequest a false all’interno della direttiva page.

Fin qui tutto normale.

Però migrando un progetto al framework 4.0 la validazione scatta nuovamente e si ottiene nuovamente lo YSOD.

Il problema si presenta in quanto la pipeline di validazione è stata modificata. Per ottenere nuovamente il comportamento del framework 2.0 è sufficiente settare il parametro requestValidationMode nel web.config:

<httpRuntime requestValidationMode=”2.0″ />

Ogni valore inferiore a 4.0 viene interpretato come 2.0.

Maggiori informazioni sul sito MSDN:

HttpRuntimeSection.RequestValidationMode Property

Share

Tip: non fare il deploy del file packages.config di NuGet

Il file packages.config contiene l’elenco di tutti i package NuGet installati nel progetto e si trova nella root del progetto stesso.

Di default il file ha come Build Action il valore “Content”.

Questo vuol dire che quando si effettua un deploy automatico di una web application (ad esempio sfruttando il publish di Visual Studio) anche il file packages.config viene copiato nell’ambiente di destinazione.

Consiglio quindi di impostare la Build Action a “None” in tutti i progetti.

Share

Scusa ma nel tuo lavoro quotidiano non usi gli strumenti migliori? Non metti i dipendenti nelle migliori condizioni?

Qualche domanda, spero retorica:

  • se sei un fotografo usi la Polaroid o una Canon/Nikon reflex di fascia alta? (per par condicio le ho messe entrambe così si evitano discussioni off topic)Utensili Beta
  • se sei un meccanico utilizzi gli attrezzi della Beta o la brugola dell’Ikea?
  • se sei un manager nel tuo ufficio hai 5 server di fianco alla scrivania? L’aria condizionata in fronte? La sedia senza schienale o senza ruote?

E così via, credo che potrei andare avanti per coprire qualunque settore lavorativo.

Ma allora qualcuno deve spiegarmi perché quando giro in aziende che sviluppano software sento e vedo sempre più spesso situazioni del genere seguente.

“Il cliente tipicamente rimane sbalordito dalle caratteristiche del mio portatile”

La brugola, lo strumento simbolo dell'IkeaSi ho un portatile con processore di ultima generazione, tutta la ram che ci può stare dentro e 2 dischi di cui uno SSD.

Non vedo perché dovrei usarne uno più lento visto che ci lavoro sopra 8 ore al giorno, compilo, ci girano i test (hai i test vero?), gira il database, magari qualche macchina virtuale.

Oggi l’hardware ha dei costi veramente irrisori rispetto al tempo che ci fa risparmiare e al minore stress che ci provoca una macchina lenta.

“Ho visto aziende con sviluppatori ammassati su tavoli scomodissimi, piccoli e con sedie rotte o in posizioni infernali (tipo col sole alle spalle o vicino alla rumorosa sala server).

Oppure in cui i dev scrivono il nome sullo schienale perché non ci sono abbastanza sedie per tutti e domani potrebbero non trovarla!”

Ricordo che chi produce software ancora per oggi è un essere umano. La produttività di uno sviluppatore è legata anche all’ambiente lavorativo che lo circonda. Quindi magari può essere utile che non sia troppo rumoroso, troppo caldo, troppo freddo, che la sedia abbia lo schienale, che il tavolo mi consenta di starci sotto senza che abbia un piede del tavolo stesso tra le gambe. Pensate che i dev chiedano troppo? O forse spesso non chiedono perchè per passione o per sovraccarico sono talmente immersi nel lavoro che non ci pensano o per reverenza e pudore non ve lo chiedono.

“Incontro sviluppatori che programmano 8 ore su monitor da 15 o 17 pollici.”

Anche questo è legato alla produttività e alla qualità di quello che facciamo. Un monitor più grande mi consente di avere sotto controllo più informazioni, di facilitare i confronti, di affaticarmi di meno. Tralascio sull’utilità di 2 monitor affiancati…

“Mi serve un software per fare l’attività X. Ne ho trovato uno eccezionale, fatto da una società molto in gamba. Però costa troppo allora uso questa alternativa open-source. Spesso si blocca, non ha documentazione e devo manutenerlo di continuo ma costa zero”

Ecco qui il tema non è la diatriba open-source/closed source ma se esiste un software che mi fa lavorare meglio, produrre di più, ridurre i costi siamo sicuri che il ROI legato al costo di acquisto non sia ben più favorevole di un’altra soluzione? Per non parlare di chi si sviluppa in casa tool che magari sul mercato sono già ampiamente collaudati e ricchi di funzionalità.

A volte prima di parlare di architettura, DDD, Agile, SCRUM che vanno tanto in voga oggi e che piacciono tanto ai PM credo che sarebbe necessario partire dall’abc che ogni imprenditore o manager di qualunque settore dovrebbe conoscere e applicare.

Come fai ad essere Agile su un Pentium?

Come al solito l’informatica è diversa dagli altri settori e come spesso capita questa diversità è in negativo.

Dai che con poco si può fare un grosso salto in avanti!

PS: qualche consiglio pubblicitario per gli acquisti:

  • monitor: almeno 24 pollici, magari 2 monitor
  • Ram: tanta, almeno 4 gb
  • se proprio non volete cambiare il PC o il notebook fate la cosa che oggi ha in assoluto il miglior rapporto prezzo/prestazioni: comprate un disco allo stato solido!
  • un sistema operativo performante e stabile (leggasi Windows 7 se si parla di mondo Microsoft)
  • il migliore IDE che ci sia in commercio (leggasi Visual Studio 2010 se si parla di nuovo di mondo Microsoft)
  • la sedia con le ruotine please!
  • magari spostare i dev dal magazzino ad un ufficio
Share

Error 330 ERR_CONTENT_DECODING_FAILED nei referrer di BlogEngine

Accedendo alla pagina dei referrers di BlogEngine può capitare che si riceva il seguente errore:

Error 330 (net::ERR_CONTENT_DECODING_FAILED)

Il problema è legato al fatto che l’estensione Recaptcha è disabilitata.

E’ sufficiente abilitare l’estensione nella sezione Estensioni e la pagina torna a funzionare correttamente.

Share

Pubblicati i video del Domain Driven Design Day

Sono stati pubblicati tutti i video delle sessioni del primo Domain Driven Design (DDD) Day.

La giornata è stata un vero successo sia per numero di partecipanti che per qualità degli interventi.

Chi non fosse riuscito a partecipare può scaricare i video al seguente link:

http://vimeo.com/album/1721725

Link diretti ai video:

DDD-Day Keynote “Intro, cos’è cambiato dal libro ad oggi, cos’è DDD oggi” (Alberto Brandolini)

Unleash your Domain with CQRS + Event Sourcing (Greg Young)

Mandare il vostro DBA nei matti in tre semplici mosse (Alberto Brandolini)

How I did it (in .NET): idiomatic Domain Driven Design – Parte 1 (Andrea Saltarello)

How I did it (in .NET): idiomatic Domain Driven Design – Parte 2 (Andrea Saltarello)

DDD in PHP (Giorgio Sironi)

Epic.NET: processi, pattern e architetture (Giacomo Tesio)

BDD: { Bring(UserStories). SharedWith(DomainExpert). Into(YourCompiledCode) } (Omid Ehsani)

DDD e Validazione (Andrea Canegrati)

Un ringraziamento doveroso alle community DotDotNet, DotNet Marche, DotNet Campania, XPUG Marche e UGI.Net che come al solito hanno investito tempo libero e passione per la riuscita dell’evento.

Ci vediamo al DDD Day 2012!

PS: inserisco la slide che ho preferito sopra tutte e che credo entrerà nella storia (by Alberto Brandolini). Java nel 2011 è come San Remo: solo i vecchi lo guardano!

Java-2011-San-Remo-solo-i-vecchi-lo-guardano

Share

Build 2011 – Microsoft presenta Windows 8

In questi giorni è in corso a Los Angeles la conferenza Microsoft BUILD (in passato nota come Professional Developer Conference).

Durante la prima giornata è stato mostrato quale sarà il successore di Windows che per ora ha il nome in codice molto fantasioso di “Windows 8”. Si tratta di un codename quindi non è detto che sarà rilasciato con questo nome.

Quali sono le novità?

Elenco in ordine sparso alcune delle novità di Windows 8, ricordando che è tutto in sviluppo e che da qui al 2012, data prevista per il rilascio, cambierà sicuramente molto.

La nuova interfaccia in stile Metro

Windows 8 basa la sua interfaccia su quello che Microsoft chiama stile Metro.

Lo stile Metro è stato creato avendo in mente i sistemi touch ma può essere utilizzato egualmente con mouse e tastiera. E’ un interfaccia che si basa su caratteri tipografici molto chiari e su icone molto “cubettose” (per alcuni è troppo squadrato) con l’esplicita intenzione di garantire una user experience basata sul massimo della semplicità e fluidità.

Lo stile metro ha fatto la prima comparsa in Windows Phone 7 e adesso è destinato a creare il family feeling dei prodotti Microsoft quali appunto mobile, desktop, console.

Il desktop lascia quindi il posto ad un nuovo Start menù in cui sono visualizzate tutte le app come appunto “mattonelle” (tile). La seconda caratteristica è che queste tile possono essere animate e quindi mostrare informazioni in tempo reale.

Le App Metro sono visualizzate a schermo intero e si ridimensionano automaticamente in base al dispositivo su cui sono in esecuzione e possono funzionare su sistemi x86/x64 e per la prima volta su processori ARM.

Da un punto di vista dello sviluppatore le App possono essere scritte sfruttando quanto già si conosce quindi XAML/C#/VB oppure in HTML5/JavaScript/CSS3.

Windows 8 Metro Start Menu Windows 8 Start Menu Desktop Applications

Internet Explorer 10

Nell’ottica Metro è stato presentato anche Internet Explorer 10 che si avvantaggia appunto del nuovo layout ed è soprattutto studiato per i touch screen, il che vuol dire che in maniera nativa e fluida è possibile trascinare, zoomare, cliccare sull’app IE 10.

Ovviamente IE 10 porta con sé alcune delle principali caratteristiche già in produzione oggi su IE 9 quali l’accelerazione hardware, il supporto HTML 5, la compilazione dei javascript.

Internet Explorer 10

Son curioso di vedere quali saranno le risposte di Chrome e Firefox.

Il nuovo task manager e Windows Explorer

Il task manager è stato completamente rinnovato da un punto di vista grafico ma soprattutto fornisce molte più informazioni.Windows 8 Task ManagerWindows 8 Task Manager Performance

I ribbon introdotti in Office 2007 e poi aggiunti a parti di Windows quali ad esempio Paint continuano a diffondersi raggiungendo anche Windows Explorer.

Da notare che è stato anche ripristinato il comodo pulsante per “tornare su” di una cartella.

Windows 8 Explorer Ribbon

Il nuovo “gestore di copia/sposta”

Quando si esegue una copia di un file da una cartella a un’altra, viene visualizzata una nuova finestra che mostra il progresso dell’operazione.

Le particolarità sono:

  • se si lanciano in contemporanea più copie viene utilizzata una sola finestra
  • il dettaglio mostra graficamente l’andamento della copia nel tempo
  • ma soprattutto è possibile sospendere temporaneamente una copia

Windows 8 Finestra copia muovi

Mount di una ISO

Windows 8 ISO Mount

 

Finalmente non sarà più necessario utilizzare to

ols di terze parti per montare una ISO (io utilizzo l’ottimo Virtual Clone Drive nel frattempo).

Quando si clicca con il tasto destro su una ISO (o si fa doppio click in quanto è l’operazione di default per

Hyper-V sul clienti file con questa estensione) viene automaticamente montata l’immagine e creato un disco virtuale. Per rilasciare l’immagine è sufficiente selezionare Eject sul disco virtuale esattamente come fosse un CD/DVD.

L’hypervisor Hyper-V farà la sua comparsa anche su Windows 8 rendendo probabilmente inutili lo stesso Virtual PC o, anche in questo caso software di terze parti (Virtual Box e VMware WorkstationPlayer in primis) e facilitando in questo modo lo sviluppo o il testing di applicazioni.

Il nuovo Windows Store

Il concetto di App store non è ovviamente nuovo. La novità è che Microsoft ha portato lo store anche sul Windows.

Dal punto di vista dell’utente è possibile cercare sullo store le applicazioni ed installarle o provarle semplicemente con un click (o un tap). Come ormai siamo abituati nel settore mobile le applicazioni saranno anche in versione trial. La piattaforma garantirà la qualità e la sicurezza delle applicazioni (ad esempio che siano esenti da virus) oltre ad una user experience uguale anche tra applicazioni diverse.

Gli sviluppatori potranno pubblicare le applicazioni sullo store sfruttando Visual Studio e sarà possibile controllare l’andamento dei download e delle vendite o scegliere in quali mercati rendere disponibile l’app.

Cosa c’è di “scontato”

Oltre alle novità però ci sono alcuni punti fermi quali ad esempio:

  • la compatibilità con tutto ciò che c’è oggi sia in termini hardware che software. Lo slogan è “tutto quello che gira con Windows 7 girerà su Windows 8”. Nota bene: le applicazioni attuali (che per differenziarle dalle App vengono chiamate applicazioni desktop) potranno funzionare se il PC è x86/x64
  • il desktop, le applicazioni esistenti oggi, Windows Explorer, il pannello di controllo: tutto è rimasto come prima quindi il passaggio al nuovo sistema non dovrebbe essere traumatico.

Poiché considero Windows 7 il miglior sistema operativo che Microsoft abbia prodotto ho voluto già installare la Developer Preview della nuova versione per iniziare a capire se è riuscita fare un passo avanti e provare concretamente le novità. Nei prossimi post cercherò di raccontare qualche impressione d’uso.

Share