mercoledì 18 dicembre 2013

Ristrutturazioni

HP licenzia 27.000 persone e da un aumento al suo CEO del 50% dello stipendio [rif].
O HP era veramente mal strutturata, o 27.000 persone tagliate sono un vero svuotamento di know-how.
E sinceramente, per rispetto verso chi ha perso il lavoro, l'aumento di stipendio se lo poteva risparmiare: la signora guadagna 1mil di dollari all'anno, le sigarette se le paga di sicuro.
I 500mila dollari di bonus li poteva reinvestire in azienda, almeno la carta igienica dei bagni era garantita....

giovedì 31 ottobre 2013

REST client con Spring: un lavoro di tutto riposo.

Ho recentemente avuto la necessità di fare un client REST con Spring.
Niente di più facile!
La classe RestTemplate ha tutto quello che serve all'impresa! Basta implementare qualche metodo e il gioco è fatto!
Ricordate, RestTemplate, e non sarà più come prima.

martedì 15 ottobre 2013

Registrare musica con pochi spiccioli (e con una qualità decente)

Da poco tempo mi sto "baloccando" con la musica e, come avviene naturalmente, sto guardando cosa offre il mercato per la registrazione.
Essendo un dilettante, con un budget molto limitato, è ovvio che la mia ricerca si sia orientata più sui software open o comunque a basso prezzo che non sui grandi nomi affermati del mercato. Insomma, ho cercato di vedere se esisteva l'equivalente in ambito musicale di OpenOffice o LibreOffice rispetto al più blasonato Microsoft Office.
Devo fare una premessa: il "ferro" e cioè i microfoni e tutto quanto possa servire a riprendere il suono (schede audio incluse) è ovvio che devono essere di buona qualità, e quindi sono gli stessi sia che sul pc sia installato ProTools che non altri software: insomma, non si può prescindere da quella spesa. Sul resto si può fare una qualche economia.
I software di cui ho approfondito la conoscenza sono alla fine tre, tutti in un modo o nell'altro a pagamento, ma senza spendere cifre esose.
Ci tengo a precisare che sono ancora un nabbo, questo articolo è un primo approfondimento sulla materia e tante cose potrebbero non essere esatte.

Audacity
Il software più semplice per la registrazione è senza dubbio Audacity, e direi che è anche quello a minor costo, visto che è gratuito. Per quello che l'ho usato direi che è perfetto, semplice da usare, buona qualità. L'unico neo che gli posso trovare è che, per questioni di licenza, non gestisce i driver ASIO. Se però si segue la procedura, si può compilare una versione che supporta ASIO. Non ho ancora provato a farlo, la voglia però c'è.

Reaper
Reaper è un software closed-source, che viene venduto con una doppia licenza, pur essendo il prodotto lo stesso. Per uso personale o se comunque non si generano entrate per più di 20.000$ all'anno il costo è di 60$, altrimenti il costo della licenza è di 225$. In entrambi i casi non mi sembra particolarmente oneroso.
Ci ho giocato un po', direi che di base ha tutto, ma una cosa mi ha lasciato sconcertato di primo acchito: manca il gain sulle tracce. Dopo un po' di ricerca, ho visto che basta aggiungere un effetto, ma il gain mi sembra qualcosa talmente di base che potevano mettercelo punto e basta.
Intelligente mi sembra invece l'idea di "armare" le tracce che dovranno essere registrate, evitando quindi possibili errori.
Per quanto riguarda gli effetti vengono supportati anche i VST, non però i LADSPA.

Ardour
Probabilmente al top tra i software a basso costo si pone Ardour, di recente passato alla versione 3. Permette di registrare, editare e mixare in maniera professionale. Funziona soltanto sotto Linux o Mac, mentre non è proprio prevista una versione per Windows: per quel sistema operativo il sito invita a vedere Mixbus. La licenza è un po' "strana". I codici sorgenti possono essere scaricati gratuitamente, volendo con una donazione opzionale. Il compilato invece prevede un piccolo pagamento, che viene richiesto per il supporto più che per il prodotto. Non ho provato a compilarlo da solo, ma ritengo che non sia un'operazione immediata. Se però lo si installa ad esempio da ubuntu, poiché si sono occupati loro della compilazione, non è necessario pagare neanche un centesimo.
Ardour sfutta Jack come server audio, (lo sviluppatore che ha inventato Jack ha poi sviluppato Ardour), permettendo di acquisire suoni non solo da schede audio e files, ma da altri applicativi che usano Jack, come ad esempio la drum machine Hydrogen.
Dal punto di vista dell'utilizzo direi che è immediato, c'è tutto quello che serve e fa il suo lavoro egregiamente. C'è solo una piccola attenzione da fare, che non riguarda il programma in se, ma il sistema operativo Linux che lo ospita: bisogna essere certi che la scheda audio che si usa sia supportata.
Anche qui esiste il concetto dell'armare la traccia, che permette di concentrarsi solo sulle tracce che si stanno registrando, e magari suonare per monitoraggio altre tracce precedentemente registrate.
Ci sono un sacco di plugin a disposizione, che permettono di gestire una grande effettistica.
Insomma, direi che siamo già su un prodotto professionale.

Mixbus
Basato su Ardour, ma versione 2, è Mixbus, creato dalla Harrison Consoles per montare sulle proprie console e venduto anche come prodotto separato. La licenza è closed, e costa circa 200$, ma ci sono anche promozioni possibili (io l'ho acquistato per 39$+IVA, cioè 39€)
Fondamentalmente ricalca tante cose di Ardour, automatizzando e migliorando alcuni aspetti. Per esempio ogni traccia ha un equalizzatore ed un compressore di default. Inoltre per ogni progetto vengono creati 8 "bus" di default, a cui poter inviare le tracce prima di passare dal master. I bus sono pensati per gestire gruppi di tracce, ed applicare su queste gli effetti e le regolazioni necessari (l'esempio è quello della batteria). Ogni bus ha poi una regolazione del tono, una della saturazione ed un compressore. Stesso dicasi per i 2 main.
Anche per Mixbus posso essere usati i plugin di Ardour, oppure comprarne altri (Harrison ne mette in vendita 3 o 4 pacchetti diversi)

Che dire dunque? Buon Mix!

martedì 1 ottobre 2013

NuGet: verifica delle dipendenze

Finora abbiamo visto come usare NuGet per usare, creare e pubblicare pacchetti per .Net.
Supponiamo ora di avere la necessità di controllare le dipendenze del nostro progetto, e dare l'allarme se pacchetti diversi non abbiano dipendenze comuni ma con differenti versioni.
NuGet mette a disposizione il pacchetto nuget.core, con una serie di API per operare a basso livello sulle dipendenze.
Per installarlo basta il comando

install-package nuget.core

Tra le 1.000 funzioni contenute in questo assembly (che ancora non ho scoperto a pieno) c'è appunto la gestione dei pacchetti.
In questo esempio, partendo da una directory locale, si mettono a video le dipendenze per ogni pacchetto ivi contenuto.
Se guardiamo l'output vediamo che il pacchetto MyCompany.Castle usa Castle.Core v2.5.2 Lo stesso pacchetto è usato da MyCompany.Versioning, fortunatamente con la stessa versione.
Una piccola modifica al programma ci può far individuare eventuali dipendenze con versioni diverse dello stesso pacchetto, ed aiutarci a non avere conflitti di dipendenza quando impacchettiamo i nostri software (o, come è capitato a me, avvisi a runtime di funzioni mancanti perché l'assembly più vecchio sovrascriveva il nuovo).

domenica 15 settembre 2013

NuGet: pubblicare un pacchetto

Dopo aver creato un pacchetto NuGet è arrivata l'ora di usarlo e farlo usare ai vostri colleghi (altrimenti a cosa serve?)
Ci sono fondamentalmente 2 distinti tipi di pubblicazione: su un server pubblico, se stiamo facendo un progetto open, o su un server privato se stiamo creando qualcosa per uso interno.

Pubblicare su un server pubblico

Per poter pubblicare il nostro assembly sui server NuGet, abbiamo bisogno di creare un account. Una volta creato un account verrà generata una chiave. Per registrarla una volta per tutte sul client basterà digitare il comando
nuget setApiKey Your-API-Key

per la pubblicazione vera e propria basta invece invocare il comando
NuGet Push YourPackage.nupkg

Pubblicare su un server privato

Supponiamo invece di usare NuGet come gestore interno delle dipendenze dei progetti, e di non voler rilasciare come pubblici i nostri assembly. Come possiamo fare per avere un repository NuGet tutto per noi?
Possiamo mettere su un feed. I Feed NuGet possono essere di due tipi: locali, ospitati su un disco locale o di rete, oppure remoti, ospitati su un server Web.

Local Feed

Per gestire i local feed è sufficiente copiare in una directory i files .nupkg ed aggiungere in VisualStudio la directory alle sorgenti (oppure usare il comando nuget sources da prompt dei comandi :-D )
L'opzione di usare una directory condivisa è molto comoda per piccoli gruppi di lavoro, perché non necessita di particolari infrastrutture.

Remote Feed

Se si preferisce avere un server remoto per gestire i nostri feed dobbiamo fare un po' più di lavoro (non troppo per fortuna) ed avere un server IIS a disposizione.
Per prima cosa, con VisualStudio (o SharpDevelop) bisogna creare un progetto Web.
A questo progetto web dovremo aggiungere il riferimento NuGet a NuGet.Server. Questa installazione farà tutto il lavoro per noi, creando tutto ciò di cui abbiamo bisogno per la nostra Web Application.
Le uniche cose che dobbiamo eventualmente configurare sono, nel file App.config, il path ai pacchetti (key="packagesPath") e la apiKey o altri meccanismi di sicurezza.
Fatto questo, e distribuita l'applicazione sul server di riferimento, basterà aggiungere in VisualStudio il link al nostro repository (che sarà del tipo http://mioserver/miorepository)
Per pubblicare un qualsiasi pacchetto il procedimento sarà lo stesso che non verso i server NuGet (nuget push)

domenica 8 settembre 2013

OUYA: console giochi per tutti

Volete cimentarvi nella scrittura di un gioco?
Bene, c'è una nuova console che mette a disposizione tutto quanto necessario per lo sviluppo, senza sborsare un singolo euro.
OUYA è appunto questo: una console cheap (costa solo 99$) basata su sistema operativo Android, che mette a disposizione degli sviluppatori tutto l'SDK necessario.
Per sviluppare i giochi non è necessario comprare la console, perché basta l'emulatore, anche se ovviamente il test finale sulla console penso sia un passaggio dovuto.
Questo permette di iniziare da subito a sviluppare il gioco e minimizzare i costi.
Penso che possa valere la pena provare, magari in tempi di crisi qualche soldo può arrivare :-D

domenica 1 settembre 2013

NuGet: personalizzare il file nuspec

Il file con estensione .nuspec serve a descrivere un pacchetto e viene inserito all'interno del pacchetto stesso.
Il file contiene una descrizione del pacchetto e, opzionalmente, una lista di files da includere. Se non viene specificato alcun file tutti i file e cartelle della directory vengono inclusi.
Guardando alla lista dei tag usabili, si notano i tag dependencies, references, frameworkAssemblies

dependencies

Con il tag dependencies si specificano i pacchetti da cui dipende il nostro pacchetto. Questo ci permette di includere ad esempio Log4Net come dipendenza del pacchetto che stiamo andando a creare. NuGet, quando scarica il pacchetto e lo aggiunge al progetto, scarica automaticamente le dipendenze e le aggiunge come reference al progetto. Dalla versione 2.0, NuGet permette di raggruppare le dipendenze, e di specificare il framework target per ognuna di esse. Versioni di framework diverse possono quindi avere dipendenze diverse.

references

Il tag references serve per esplicitare quali riferimenti verranno aggiunti al progetto. Il default per NuGet è aggiungere come riferimento ogni dll contenuta nella directory lib. Questo tag permette di includere solo determinati assemblies. Questo meccanismo è pensato per gli assembly design-time, che devono essere trovati da VisualStudio per poter funzionare correttamente, ma non devono essere copiati nell'output di compilazione.
Anche nel caso del tag references tutto può essere raggruppato per puntare a framework diversi.

frameworkAssemblies

si usa il tag frameworkAssemblies se si vuol specificare la dipendenza di un assembly dagli assembly del .Net Framework. Di solito non è necessario esplicitare questa dipendenza, ma ci possono essere casi in cui si debba "forzare" la dipendenza (mi viene in mente l'uso dell'assembly System.Web se si usa HttpWebRequest). Anche in questo caso si può specificare il targetFramework su cui si opera. Ovviamente questi files non vengono inclusi nel pacchetto compilato, perché si presume che siano presenti sulla macchina.

Oltre a questi tag si può gestire il tag files, per includere esplicitamente files. Il tag non è obbligatorio perché, seguendo le linee guida, tutti i files contenuti nella directory vengono inclusi. Anche in questo caso, è possibile esplicitare files diversi per framework diversi.
Da notare che i files NON sono soltanto dll già compilate, ma possono essere di qualsiasi tipo (ad esempio immagini o css per progetti web, sorgenti e quant'altro)

Una volta creato il file .nuspec, le directory e i files necessari, possiamo compilare il tutto, da prompt dei comandi, con un semplice

nuget pack myAssembly.nuspec

A questo punto non ci resta che pubblicare il pacchetto.

domenica 25 agosto 2013

NuGet: creare i pacchetti

Conoscete Maven? Beh, NuGet sembra un po' la controparte di Maven per il mondo .Net
Ovviamente, essendo legato al mondo Microsoft, viene presentato come un'estensione di VisualStudio ("NuGet is a Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects that use the .NET Framework."), ma fortunatamente per me può essere usato anche come eseguibile prompt dei comandi. Lo so, sono il solito Nerd, ma il prompt dei comandi mi permette una maggior libertà di fare (o meglio far fare) quello che voglio.
Comunque, diciamo che NuGet, come Maven, lo si può vedere da 2 distinti punti di vista: quello dell'utilizzatore di pacchetti e quello del creatore di pacchetti.
Il primo punto di vista è banale: ho bisogno di un pacchetto per il mio progetto (ad esempio Log4Net)? Lo cerco tra tutti quelli disponibili e lo aggiungo. NuGet si occupa di scaricare quanto necessario, aggiungere i riferimenti al progetto e, se specificato, fare tutte le operazioni necessarie al progetto (ad esempio aggiungere un sorgente). Quando viene rilasciata una nuova versione del pacchetto posso aggiornare facilmente il tutto.

Bene, ma come faccio a creare un pacchetto?
Dalla documentazione, ho bisogno del prompt dei comandi (quando le cose si fanno difficili, i duri cominciano a giocare...) oppure avvalermi della GUI
Il comando da lanciare è Nuget spec  . Questo crea un file, con estensione .nuspec, relativo al file asseblyName.dll. Questo file è un manifest che descrive il contenuto di un pacchetto via XML. Qui ci sono le specifiche.
Posso quindi personalizzare il file, adattandolo alle esigenze, e poi impacchettare il tutto con il comando Nuget pack Otterrò così un file impacchettato myfile.nupkg pronto per essere pubblicato.
La pubblicazione di un pacchetto, la personalizzazione del file .nuspec e la verifica delle dipendenze saranno oggetto di altri articoli (spero con frequenza maggiore di quella fin qui avuta)

sabato 24 agosto 2013

Steve Ballmer si dimette

La notizia è stata data da chiunque: a me serve solo fissarla temporalmente.
Steve Ballmer, attuale CEO di Microsoft, ha ufficializzato che si dimette. Si è dato un anno di tempo per trovare il sostituto. facciamoci un bel nodo al fazzoletto e vediamo chi sarà il suo successore.

venerdì 7 giugno 2013

venerdì 10 maggio 2013

Win8: a che punto è? il "futuro"

In questo articolo si parla di Windows 8 e di come, per gli ambienti desktop enterprise, si senta una mancanza del tasto Start.
Inoltre si dice che il futuro sia dell'ambiente mobility (ma dai, davvero? Benvenuti nel nuovo mondo!) e che ci sarà una soluzione Win8 per questo tipo di device.
Una cosa però mi ha stupito leggendo l'articolo, ed è un dato su cui si sorvola molto velocemente (paura di ammettere la sconfitta, eh?): in ambito enterprise sui desktop WinXP detiene ancora il 38.3% di share, contro un 44.2% di Win7 ed un ridicolo 3.8% di Win8
Ora, considerato che per Xp è stato lanciato nel 2001, che la sua vendita come installato è cessata il 31 Gennaio 2009 e che il bug fixing cesserà del tutto l'8 aprile 2014 io mi chiedo:

ma in Microsoft si sono accorti di aver fatto una enorme cappella con Windows 8?

Ai poster(i) l'ardua sentenza
Good night to the basket (bona notte al secchio)

mercoledì 8 maggio 2013

AngularJs nel mondo corporate

AnglarJs sembra stia prendendo sempre più piede fra i framework WebUI.
Sembra fra l'altro che Google stia spingendo molto di più su questo framework che non sul caro GWT.
Questo articolo inizia ad esplorare l'uso di AngularJs in ambito enterprise, evidenziando due aspetti fondamentali a mio avviso: il primo è che l'adozione del framework può essere fatta in modo graduale, e non "tutto o niente", aspetto molto gradito negli ambiti enterprise.
Il secondo aspetto, o meglio ammissione, è che ancora c'è da migliorare sul versante della produttività, e bisogna affidarsi ad altri tool quali Yeoman per avere in breve tempo un progetto up-and-running.
Per quanto mi riguarda, ho fatto ancora pochi esperimenti con questo framework. Al momento quello che trovo complicato è la parte di Ajax.
Un altro aspetto dove non mi trovo molto a mio agio è l'assenza di un validatore di tipi, tipica del JavaScript, che in GWT viene superata utilizzando il Java come linguaggio di sviluppo: un meccanismo del genere aumenta notevolmente la produttività, mentre AngularJs, per verificare il tutto, obbliga a scrivere "metri" di unitTest.

giovedì 2 maggio 2013

PostGreSql comincia a pensare al C++

PostGreSQL, il database open più avanzato al momento, è scritto in C.
Peter Eisentraust, uno degli amministratori del progetto, avanza l'idea di cominciare, piano piano, a migrare PostGreSQL al C++.
Questo per vari motivi, il primo e più forte dei quali è che ormai il C non sia più mantenuto e sviluppato mentre il C++ gode di buona salute.
Qui il link all'articolo originale, che la ormai cronica mancanza di tempo non mi permette di tradurre.

giovedì 7 febbraio 2013

Activiti o la BPM semplice

Era già un po' che guardavo Activiti, in cerca di un piccolo progetto su cui poterlo testare, e alla fine se ne è presentata la possibilità, quindi ho cominciato a mettere le mani in pasta.
Mi ci ero avvicinato perché jBPM di jBoss mi sembrava un po' troppo pesante, e stavo cercando qualcosa di più snello ma sempre aderente ai concetto del Business Process Management. Inoltre, recentemente Activiti è stato acquisito da Alfresco, per rimpiazzare il loro workflow manager.
Il primo impatto è stato ottimo: esiste un ottimo designer, integrato in Eclipse, che permette di creare in modo semplice i flussi. E' ben fatto, anche se ancora qualcosa non funziona perfettamente, e permette facilmente di creare i flussi e soprattutto di testarli con poco sforzo.
Ma quello che più mi ha ben impressionato è la facilità con cui il tutto si configura. Sia che si opti per distribuire il motore come applicazione web (activiti-explorer.war contiene sia il motore sia un front-end di gestione e "primo utilizzo") che lo si embeddi nel proprio stack (se si usa Spring per i propri progetti tutto va su in un istante) in un attimo l'ambiente è up-and-running. Configurare la base dati è una bazzecola, 4 linee nell'apposito file (tipo database, url, user e password) et voilà, il gioco è fatto.
Insieme ad activiti-explorer si trova activiti-rest, l'applicazione per esporre via Rest tutte le funzionalità, permettendo a qualsiasi applicazione esterna di interagire con la workflow engine. Per far lavorare in sinergia i 2 applicativi è sufficiente farli puntare alla stessa base dati, e il gioco è fatto.
Nel mio caso Rest è stato manna dal cielo, perché mi ha permesso l'interoperatività con altri applicativi.
Partendo praticamente a digiuno in materia, in 4 giorni sono riuscito a installare, configurare, creare un piccolo flusso per le mie esigenze, un client in .Net per alimentare i flussi ed uno in Java per il reporting. Niente male davvero!

mercoledì 2 gennaio 2013

Domanda "fiacca" per Windows 8

Secondo quanto riportato da pcmag, per Fujitsu la domanda di PC con sistema operativo Windows 8 sarebbe finora fiacca, tanto da far abbassare le stime di vendita.
Secondo me, oltre al fatto che ci sono pochi soldi in giro per poter cambiare pc, anche l'approccio tutto touch del desktop non giova molto per chi vuole un classico pc.
Voi che ne dite?