Welcome

This is the generic homepage (aka Aggregate Blog) for a Subtext community website. It aggregates posts from every blog installed in this server. To modify this page, edit the default.aspx page in your Subtext installation.

To learn more about the application, check out the Subtext Project Website.

Powered By:

Blog Stats

  • Blogs - 715
  • Posts - 30983
  • Articles - 310
  • Comments - 101853
  • Trackbacks - 601879

Bloggers (posts, last update)

Latest Posts

Hai una piattaforma di e-commerce? Attenzione alla nuova normativa sul Recesso!

Novità in vista per il mondo dell’e-commerce. L’Italia ha ormai recepito i contenuti della direttiva europea n. 2011/83, che sono diventati vincolanti per tutti i contratti conclusi successivamente al 13 gennaio 2014. Il recepimento è avvenuto col decreto legislativo 21/2014, entrato in vigore il 26 marzo. La normativa va a incidere sulla disciplina del codice del consumo e conseguentemente anche sugli adempimenti in capo ai titolari di siti e-commerce - ragion per cui vi invito a leggere attentamente quanto segue.

Una delle principali novità attiene alle modalità di recesso dal contratto. Si tratta di un intervento normativo che tocca nel vivo non solo il consumatore che si avvale della piattaforma e-commerce, ma in prima battuta il gestore stesso della piattaforma e-commerce, che dovrà adeguarsi alle nuove disposizioni…

Vediamo dunque cosa cambia.


Questo post è solo il primo di una serie di approfondimenti sul tema, non ha pertanto pretesa di esaustività. In successivi post cercherò di entrare nello specifico di alcuni problemi legati alla normativa e-commerce.

Qui comincerò solamente a riepilogare per comodità del gestore di piattaforme e-commerce oltre che dei consumatori, le attuali regole in materia di recesso.


1) DIRITTO DI RECESSO: DA 10 A 14 GIORNI

In primo luogo, cambia il tempo a disposizione per esercitare il diritto di recesso, non più solo 10 giorni bensì 14 giorni dalla data di sottoscrizione del contratto o dalla data in cui il consumatore acquisisce il possesso fisico dei beni.

Prima della scadenza del periodo di recesso, il consumatore deve informare il professionista della sua decisione di recedere dal contratto.


2) MODALITA’ DI ESERCIZIO DEL DIRITTO DI RECESSO

Il consumatore può recedere in due modi:

2.1. avvalendosi di un apposito modulo, il cui contenuto è dettagliato nell’allegato alla normativa:


http://www.gazzettaufficiale.it/eli/id/2014/3/11/14G00033/sg


2.2. scrivendo di proprio pugno una dichiarazione esplicita in cui manifesta la volontà di recedere dal contratto

La comunicazione del recesso deve essere inviata prima della scadenza del periodo di recesso.

Al fine di agevolare l’esercizio del diritto di recesso il professionista può predisporre sul proprio sito di e-commerce un apposito form, che riproduca il modello di cui al 2.1. o che consenta di inserire la dichiarazione di cui al 2.2., elettronicamente: in tal caso il professionista deve comunicare senza indugio al consumatore conferma di ricevimento, su un supporto durevole, del recesso esercitato.


3) EFFETTI DEL RECESSO

L’esercizio del recesso pone termine agli obblighi delle parti di dar seguito al contratto e alle rispettive obbligazioni.


4) OBBLIGHI DI INFORMATIVA SUL RECESSO


Il tempo a disposizione per esercitare il diritto di recesso nel caso di vendite a distanza (su internet, via telefono ma in genere fuori dal negozio) aumenta, come visto, da 10 a 14 giorni. Tuttavia si può arrivare anche ad un anno e 14 giorni se il venditore non ha adeguatamente informato il consumatore sull’esistenza del diritto stesso. In caso di violazione degli obblighi informativi il consumatore non deve sostenere neppure il costo diretto di restituzione dei beni


I commercianti devono informare chiaramente e preventivamente i consumatori che i costi di restituzione delle merci in caso di ripensamento sono sostenuti dai clienti, altrimenti tali costi rimarranno a loro carico. Prima della vendita, deve essere fornita una chiara stima dei costi massimi di resa di merci ingombranti (ad esempio un divano acquistato via internet o per corrispondenza), così che il consumatore possa decidere in modo informato da chi acquistare


5) OBBLIGHI DEL PROFESSIONISTA IN CASO DI RECESSO

Rimborsare tutti i pagamenti ricevuti dal consumatore (eventualmente comprese le spese di consegna) senza ritardo e in ogni caso entro 14 giorni dal recesso (attualmente 30) e dovrà coprire anche le spese di consegna originarie e quindi restano escluse le spese di restituzione del bene. Nel caso il consumatore sceglie espressamente un tipo di consegna diverso da quello meno caro, i costi supplementari non saranno rimborsati. Il rimborso, di norma, deve avvenire con lo stesso mezzo di pagamento utilizzato dal consumatore all’atto dei suoi pagamenti. Il fornitore potrà comunque non effettuare il rimborso fino al momento

della ricezione della merce

Attenzione: è nulla qualsiasi clausola che prevede limitazioni al rimborso nei confronti del consumatore delle somme versate.


6) OBBLIGHI DEL CONSUMATORE IN CASO DI RECESSO


Il consumatore è tenuto a provvedere senza indebito ritardo (e in ogni caso entro 14 giorni dalla data in cui ha comunicato la sua decisione di recesso) alla restituzione dei beni. Il costo diretto della restituzione è a carico del consumatore, salvo diversi accordi col professionista o salvo che il professionista non abbia dato adeguata informazione di ciò al consumatore.

Il consumatore è responsabile della diminuzione del valore dei beni derivante da una manipolazione dei beni diversa da quella necessaria per stabilire la natura, le caratteristiche e il funzionamento dei beni.


7) BENI PER I QUALI E’ ESCLUSO IL DIRITTO DI RECESSO


La nuova normativa contempla vecchie eccezioni e nuove eccezioni, oltre a una serie di eccezioni che sono state eliminate (beni che per loro natura non possono essere restituiti. Tra le nuove eccezioni introdotte, si segnala in particolare la fornitura di contenuto digitale mediante un supporto non materiale “se l’esecuzione è iniziata con l’accordo espresso del consumatore e con la sua accettazione del fatto che in tal caso avrebbe perso il diritto di recesso”.

Questo, senza pretesa di esaustività, un primo quadro generale. Per approfondimenti più specifici, rimando ai prossimi post.

Tenete d’occhio il blog!

EDOARDO COLZANI

posted @ 24/07/2014 8.30 by Staff Lex101

string.js

stringjs.com
Interessante libreria javascript che estende i metodi associati ad una variabile stringa tra i tanti :

- count(substring) : Returns the count of the number of occurrences of the substring.

- isAlpha() : Return true if the string contains only letters.

- padLeft(len, [char]) : Left pads the string.

- toCSV(options) : Converts an array or object to a CSV line.

posted @ 16/07/2014 8.56 by Alessandro Gervasoni

FatturaPA

Dal 6 giugno 2014 è obbligatoria la Fatturazione elettronica verso la PA , per capirci meglio link.

posted @ 11/07/2014 9.17 by Alessandro Gervasoni

Workshop “Microsoft .NET - Architecting Applications for the Enterprise (2nd Edition)”

Se vi interessano le architetture software e argomenti come DDD e CQRS, non potete perdervi questo :)

Workshop "Microsoft .NET - Architecting Applications for the Enterprise (2nd Edition)" ad Ancona - giovedì' 17 luglio
In occasione dell'uscita della seconda edizione dell'omonimo libro, avremo il piacere di ospitare uno degli autori, Andrea Saltarello.
Insieme a Mauro Servienti ci illustreranno gli argomenti alla base di questo lavoro, la cui prima edizione è diventata uno dei testi di riferimento per quanto riguarda le architetture software nel mondo del .NET Framework.

Se date uno sguardo all'agenda, potete vedere che si parlerà molto di DDD / CQRS / Event Sourcing, temi che valgono anche al di fuori di .NET, perciò siete i benvenuti qualsiasi tecnologia amiate usare!

Per agenda ed iscrizione (gratuita): https://naae2-marche.eventbrite.com

posted @ 03/07/2014 14.28 by Stefano Ottaviani

Privacy e App: le cinque regole auree che lo sviluppatore software non deve mai dimenticare.

Scrivo questo mio primo post nella consapevolezza di esser partito con il piede sbagliato: ho già mentito.

Ho mentito parlando di 5 regole auree che non possono essere trascurate, pur sapendo che le regole  fondamentali da conoscere non sono certo solo 5, ma molte di più e in continua evoluzione.

D’altro canto mi autoassolvo pensando che, da un lato, la normativa italiana e europea sono talmente ampie che non si può certo scrivere tutto in un solo post e che, dall’altro, comunque cercherò di integrare in futuro, con altri post, l’elenco degli aspetti legali fondamentali da tenere in considerazione nello sviluppo di un’App (quale che sia il sistema operativo a cui è destinata).

Ma veniamo alle cinque regole auree che lo sviluppatore di un’App deve tenere in considerazione:

1) Il consenso all’installazione della App deve essere distinto da quello richiesto per il trattamento dei dati.

L’App deve essere progettata per richiedere all’utente il suo consenso all’installazione del software; questo consenso deve necessariamente essere distinto da quello al trattamento dei dati. Il primo è un consenso all’inserimento e alla lettura di informazioni presenti sul device, il secondo riguarda l’autorizzazione al trattamento di dati personali di tipo differente. Questo secondo tipo di consenso può essere richiesto anche durante l’installazione del software.

2) Quando viene richiesto il consenso è opportuno prevedere una specifica opzione per il rifiuto.

Quando l’App richiede il consenso al trattamento dei dati all’utente o all’installazione del software, è necessario che sullo schermo appaia un’opzione per il rifiuto (rappresentata eventualmente dal tasto “cancella”, “interrompi”, etc.)

3) Per ogni trattamento di dati deve essere richiesto uno specifico consenso.

Se l’App che stiamo sviluppando processa, ad esempio, i dati della rubrica dell’utente per  fornire un servizio di messaggistica e dati di geolocalizzazione dell’utente per scopi di marketing, sarà necessario che l’App richieda, e che l’utente fornisca, due distinti consensi al trattamento dei dati.

4) Il trasferimento di dati personali in paesi esteri è soggetto a particolari limitazioni.

I dati personali raccolti dalla nostra App possono essere liberamente trasferiti solo negli stati membri dell’EU. Il trasferimento di dati personali in paesi extra EU è consentito solo se i paesi di destinazione garantiscono un adeguato livello di sicurezza dei dati trasferiti. In questi casi è opportuno effettuare una valutazione caso per caso (anche alla luce di eventuali pronunce del Garante).

5) E’ sempre opportuno stabilire un limite temporale alla conservazione dei dati personali raccolti dalla App.

I dati raccolti dalla App e dai suoi servizi devono essere conservati per un periodo stabilito e cancellati al suo scadere. Discorso analogo deve valere per gli account creati dagli utenti e rimasti inattivi per un lungo periodo: anche in questo caso è opportuno prevedere un meccanismo di cancellazione dell’account e dei relativi dati personali.

ANDREA PALUMBO

posted @ 01/07/2014 8.50 by Staff Lex101

Errore Web Service

Nel trasformare un web service fatto con il framework 2 nell'equivalente service WCF fatto con il framework 4, mi sono trovato davati ad un errore abbastanza strano:

Errore nella deserializzazione del corpo del messaggio di risposta per l'operazione …..

Dopo un paio d'ore passate a glooglare e confrontare un altro progetto molto simile che funzionava mi sono imbattuto in un articolo molto scarno:

http://forums.asp.net/t/1234318.aspx?Error+in+deserializing+body+of+reply+message+

che però mi ha indirizzato verso la soluzione giusta. In effetti il problema era proprio il parametro readerQuota dell'app.config.

 

posted @ 27/06/2014 12.17 by Alessandro Cavalieri

Planning ÷ reacting: finding the balance





Life is what happens to you while you're busy making other plans - John Lennon, Beautiful Boy









The are things that can be planned and others that cannot be. The conundrum is, which is which?


What happens when someone

This is why it is important to find out in every moment the balance between the two, to know


Someone says that Agile is the art of finding the balance between anticipation (as e.g. panning) and adaptation (as e.g. reacting).  

An interesting final reflection: what values, principle and practices help to find a good balance, and how ?

 


posted @ 25/06/2014 20.42 by Luca Minudel

Nasce il servizio di Pronto Soccorso legale di UGIdotNET!

Come annunciato durante la terza giornata dei Community Days 2014, ai soci UGIdotNET è riservato, da parte dei nostri legali, un servizio di pronto soccorso legale totalmente gratuito per le questioni di semplice e immediata risoluzione. Questo servizio non può, comprensibilmente, coprire anche questioni complesse o che necessitino di un approfondimento, per le quali i professionisti che offriranno questo servizio saranno comunque disponibili a fornire una consulenza privata totalmente indipendente dalla Associazione.

Per usufruire del servizio sarà sufficiente contattarci all’indirizzo soccorsolegale@ugidotnet.org e, all’occorrenza, fissare un incontro mediante Skype oppure, una volta al mese, presso la sede di UGIdotNET: al momento del contatto, occorrerà specificare lo user name con il quale siete registrati sul sito UGIdotNET al fine di verificare la vostra appartenenza alla Associazione. Vi aspettiamo!

sos

posted @ 22/06/2014 12.40 by Staff Lex101

Nasce ‘Lex101’, il blog di diritto delle nuove tecnologie ospitato da UGIdotNET!

Dopo il successo della terza giornata dei Community Days 2014 a Peschiera Borromeo, ci siamo resi conto della necessità di instaurare un dialogo costante, nonché un confronto di esperienze, tra tecnici del software e professionisti di altri settori (legal, business, marketing, ecc…).

Di qui l’idea di dar vita a questo blog, inteso quale strumento per una costante informazione e aggiornamento sugli adempimenti normativi, i profili di responsabilità e ancora altri aspetti giuridici connessi al mondo dell’informatica che chi lavora nel mondo IT non può e non deve ignorare.

Una ulteriore concreta è il servizio di pronto soccorso legale, del quale potete leggere i dettagli nel relativo post su questo blog.

Buona lettura!

Andrea Palumbo e Edoardo Colzani

posted @ 22/06/2014 12.30 by Staff Lex101

Resource Management delle Windows Runtime Apps

Anche se nel sito MSDN non è difficile trovare documentazione dettagliata sui diversi aspetti della gestione delle risorse di una Windows Store App o Windows Phone Store App, ma nello studio di tale materia non ho trovato una visione d'insieme che facilitasse la comprensione di come i vari aspetti siano legati tra di loro nella realizzazione della mia applicazione. Per tale motivo ho pensato che un post riassuntivo potesse essere utile, rimandando di volta in volta ai singoli articoli MSDN per l'approfondimento delle singole parti.

Ogni volta che eseguiamo la build della nostra applicazione, il Resource Management System crea un file PRI (Package Resource Index) che viene incluso nell'app e che consente di stabilire a runtime quali risorse debbano essere utilizzate in un dato momento.

Informazioni più dettagliate, che vi consiglio di leggere dopo aver completato la lettura di questo post, le potete trovare qui: Resource Management System.

Il file PRI contiene tutte le Named Resource collezionate al momento della build. Il file PRI altro non è che un dizionario di named resources e di referenze ai file di risorse contenute nello app package.

La cosa interessante è che le named resource possono avere più valori, a secondo delle qualified variant. A runtime il Resource Manager applicherà un algoritmo di risoluzione che identificherà tra i resource file associati ad una named resource quello da usare in quel momento, attraverso il confronto delle diverse qualified variant disponibili nel file PRI rispetto al ResourceContext di esecuzione dell'app.

Se, ad esempio, abbiamo una Named Resource chiamata MyImage a cui corrispondono due file jpeg, uno con la qualified variant scale-100 e l'altro con qualified variant scale-140, il file utilizzato a runtime dipenderà dalla scale del ResourceContext di esecuzione.

Di seguito l'elenco delle diverse Qualified Variant disponibili:

  • language (può essere abbreviato a "lang" quando viene usato nel nome di file della risorsa, o addirittura omesso se utilizzato nel nome di una cartella)
  • scale
  • contrast
  • homeregion
  • targetsize
  • layoutdir
  • config
  • altform
  • DXFeatureLevel (può essere abbreviato con "DXFL")

Maggiori Informazioni le potete trovare qui: How to name resources using qualifiers (XAML).

Ok, dunque possiamo associare a una Named Resource diversi file risorsa, univocamente identificati da una qualsiasi combinazione delle qualified variant disponibili.

Ma dove dobbiamo mettere tali file nel nostro progetto di Visual Studio, e come dobbiamo chiamarli affinché durante la build questi file vengano riconosciuti come file risorse e vengano inseriti nel file PRI con tutte le loro giuste qualified variant?

La cosa più semplice è quella di mettere tutti i file risorsa nella cartella del progetto, o in una qualsiasi cartella contenuta in essa (ad esempio /Assets/Images) e inserire le qualified variant direttamente nel nome del file:

Oppure utilizzare delle cartelle che per nome hanno le qualified variant o ancora meglio un miscuglio di entrambe le tecniche:

E' utile notare che è sempre possibile inserire la suddetta struttura dentro una qualsiasi cartella contenuta nella cartella del progetto, o addirittura inserire altre cartelle all'interno della struttura stessa:

Per cui, ad esempio, il file /assets/Localized Images/it/contrast-high/MyImage.scale-100.jpg è del tutto equivalente al file MyImage.lang-it.contrast-high.scale-100.jpg .

L'ordine in cui compaiono le qualified variant è del tutto irrilevante, ad esempio MyImage.lang-it.contrast-high.scale-100.jpg è del tutto equivalente al file MyImage.scale-100.lang-it.contrast-high.jpg o ad ogni altra permutazione.

Ora che abbiamo illustrato la Gestione delle risorse in una Windows Runtime app, spostiamo la nostra attenzione sui file di tipo .resw e sull'uso di XAML x:Uid.

Nonostante la differenza di nome dell'estensione, il formato dei file di tipo .resw è del tutto identico a quello dei più tradizionali .resx, con la notevole eccezione del fatto che i file .resw possono contenere solo stringe e file path.

Visual Studio offre un comodo editor per la creazione e modifica di file di questo tipo:

Tali valori possono essere usati direttamente da codice XAML:

<TextBlock x:Uid="MyTextBlok" Text="This text will be shown at design time" />

A runtime la proprietà Text del TextBox con x:Uid pari a "MyTextBox" assumerà il valore corrispondente al valore dell'elemento contenuto nella risorsa che ha per nome l'unione del valore di Uid, del punto (.) e del nome della proprietà:

E' importate qui ricordare che nel codice XAML è comunque necessario assegnare un valore alla proprietà (nel nostro esempio "This text will be shown at design time") affinché sia possibile vederlo a design time.

Ovviamente è anche possibile leggere tali valori da codice, tipicamente in un ViewModel, bindato a qualche elemento XAML della UI.

Anche in questo caso, per maggiori Informazioni date un'occhiata qui: How to load string resources (XAML).

That's all folks! Happy coding. J

 

posted @ 21/06/2014 12.23 by Nicolò Carandini

I misteri dell’indicizzazione di Google

In tante persone parlano di SEO, ovvero come ottimizzare il proprio sito affinché i motori di ricerca (Google) possano portare più traffico. Gli algoritmi che stanno dietro Google immagino siano veramente sofisticati e talvolta accade qualche cosa che cambia drasticamente il numero di visite al tuo sito. Di base penso che sia difficile, a data odierna, forzare Google a dare visibilità al tuo sito.

Dall’avvento dei vari Panda e Penguin etc due anni e mezzo fa, il mio blog inglese, come altri, ha avuto lentamente un calo di visite, fino ad arrivare a circa la metà delle visite che avevo due anni e mezzo fa. Difficile capire la ragione e visto che non è il mio business non ho avuto ne voglia ne interesse a cercare di capire il perchè. Sono il tipo di persona che una volta ogni due mesi si ricorda di dare uno sguardo ad Analytics per capire come va il sito e nulla più :)

Oggi vedo questo.

image

Come potete notare, da una settimana all’altra è avvenuto un incremento sostanziale delle visite, tutte da Google Organic, quindi dalle ricerche di Google. Ora io non ricordo di avere cambiato nulla sul mio blog, a parte forse aggiornare wordpress all’ultima versione. Sarei veramente curioso di capire cosa è cambiato per avere un cosi drastico e continuo incremento di traffico. :)

Gian Maria.

posted @ 17/06/2014 9.24 by Gian Maria Ricci

How to Prevent Visual Studio 2013 from Closing IIS Express after Stopping Debugging



per evitare la chiusura di IIS Express quando stoppate il Debugging ricordate di togliere il flag qui sopra indicato

posted @ 16/06/2014 10.51 by Alessandro Gervasoni

Back To the Future: Windows Batch Scripting & ASP.NET vNext

Nell'ultimo TechEd è stata presentata l'anteprima della prossima versione di ASP.NET. La cosa davvero spettacolare è che, sin da subito, il codice è disponibile pubblicamente su GitHub (https://github.com/aspnet).

Per ogni informazione rimando all'ottimo articolo di Jon Galloway (http://weblogs.asp.net/jongalloway/a-30-minute-look-at-asp-net-vnext).

Studiando la materia mi sono imbattuto in un paio di file batch (.cmd) e sono dovuto tornare a scartabellare gli "antichi testi" per poterne comprendere il contenuto.

Per chi magari non si è mai imbattuto negli esoterismi del Windows Batch Scripting, qui di seguito spiego e interpreto il codice di un importante comando: KVM (K-Runtime Version Manager).

Come primissima cosa, una curiosità: Il motivo per cui la lettera "k" è onnipresente deriva dal fatto che inizialmente ASP.NET vNext si chiamava Project-K, da cui si ha:

  • Il Runtime, chiamato K-Runtime o KRE, di cui si possono avere contemporaneamente varie versioni, una per ogni istanza di applicazione.
  • Il Version Manager, chiamato KVM, che serve alla gestione dei diversi KRE disponibili. E' uno script PowerShell che viene lanciato da riga di comando tramite l'omonimo comando KVM.cmd.
  • Il Package Manager, chiamato KPM, che serve alla gestione dei NuGet Package. Chiama il Loader con appositi parametri tramite l'omonimo comando KPM.cmd.
  • Il Loader, chiamato KLR, è in grado di assolvere a molti compiti, tra i quali:
    • Installare/ripristinare i package.
    • Fare il bootstrap per l'esecuzione dell'applicazione.
    • Fare la Build dell'applicazione (cosa non strettamente necessaria per eseguire l'applicazione, che è una delle novità di ASP.NET vNext)

Per una maggiore comprensione delle varie componenti e di come queste interagiscono fra loro, vi invito a leggere la descrizione dettagliata della struttura e dell'architettura del K-Runtime, scritta da David Fowler: https://github.com/aspnet/Home/wiki/KRuntime-structure.

E' chiaro che molti di questi passaggi, ora che è uscita la CTP di Visual Studio 14, vengono automaticamente eseguiti tramite Visual Studio, ad esempio quando viene chiesta l'esecuzione dell'applicazione tramite il classico F5. Ciò non di meno, visto che siamo agli esordi di una nuova versione che per molti aspetti è radicalmente diversa da quella attuale, è importante capire cosa gira dietro le quinte. Anche perché uno degli obiettivi di ASP.NET vNext è quello di offrire una completa esperienza di sviluppo anche a riga di comando senza la necessità di usare Visual Studio (che rimane comunque lo strumento principe di sviluppo).

Fatte quindi le dovute premesse, passiamo dunque a parlare di Windows Batch Scripting, analizzando il contenuto di uno dei comandi che abbiamo a disposizione: KVM.cmd. La sua comprensione ci renderà poi facile analizzare autonomamente gli altri comandi.

KVM.cmd

E' il comando che lancia lo script PowerShell del Version Manager. Per chi eventualmente si domanda a che serve un comando che lancia uno script PowerShell, rispondo subito che il comando è indispensabile sia perché ingloba una serie di parametri di avvio necessari al corretto funzionamento di PowerShell (vedi ad esempio l'execution policy che per essere unrestricted deve necessariamente essere presente come parametro di avvio), sia perché alla fine dell'esecuzione dello script il comando si incarica di avviare un ulteriore comando, se presente, chiamato run-once.cmd.

Vediamolo nel dettaglio:

Nella riga 3 viene lanciato PowerShell con alcuni parametri di startup:

  • -NoProfile per evitare il caricamento del profilo utente.
  • -NoLogo per evitare la visualizzazione del banner di copyright di PowerShell.
  • -ExecutionPolicy unrestricted per abilitare lo script ad eseguire alcune funzioni che altrimenti sarebbero non autorizzate.
  • -Command che dichiara tre comandi da eseguire entro PowerShell, separati da punto e virgola:
    • [System.Threading.Thread]CurrentThread.CurrentCulture = ' '
    • [System.Threading.Thread]CurrentThread.CurrentUICulture = ' '
    • & '%~dp0kvm.ps1' %*

Per quanto riguarda i primi due comandi PowerShell, altro non fanno che impostare la CurrentCulture e la CurrentUICulture.

Per quanto invece riguarda il terzo comando, che a una prima lettura mi ha lasciato un po' perplesso e mi ha obbligato a ripassare i "sacri testi" di Windows Batch Scripting e PowerShell, abbiamo due elementi:

  1. & '%~dp0kvm.ps1'
  2. %*

Il primo elemento è evidentemente il nome dello script che PowerShell deve eseguire, visto che finisce per ps1. E' utile notare che, affinché PowerShell possa eseguire effettivamente uno script, devono essere soddisfatte le seguenti condizioni:

  • La Execution Policy consenta l'esecuzione di script (e in questo caso lo è poiché PowerShell viene per l'appunto lanciato in modalità unrestricted).
  • Lo script venga dichiarato comprensivo del percorso completo (drive:\dirPath\Filename.extension).
  • Se il percorso contiene degli spazi deve essere virgolettato e anteceduto dal Call Operator (&) affinché PowerShell interpreti l'elemento non come semplice stringa ma come percorso completo dello script da eseguire

Posto che all'interno di un comando %0 rappresenta il nome del comando stesso mentre %1 … %9 rappresentano gli argomenti passati al comando, la sequenza %~ seguita da una serie di opzioni (in questo caso pd) e terminata dal numero del parametro (in questo caso proprio il parametro 0) consente di estrapolare il path relativo al comando stesso.

Il secondo elemento è invece semplicemente il passaggio allo script PowerShell di tutti gli argomenti passati da riga di comando al lancio del comando kvm.cmd, in quanto %* è solo il modo abbreviato di scrivere %1 %2 %3 … %9

Vediamolo meglio in un caso esemplificativo, ipotizzando che la cartella che contiene il comando KVM.cmd e lo script kvm.ps1 sia "C:\Users\Nick\.kre\bin" e che tale path sia presente nella variabile di ambiente %PATH% e che venga eseguito (da una qualsiasi directory) il comando kvm list.

Allora & '%~dp0kvm.ps1' %* sarà pari a: 'C:\Users\Nick\.kre\bin\kvm.ps1' list

Al completamento dello script PowerShell (che durante la sua esecuzione potrebbe aver costruito un comando run-once.cmd), alle righe 5-7 tale comando, se esiste, viene eseguito e poi cancellato.

That's all folks, happy coding!

posted @ 16/06/2014 0.59 by Nicolò Carandini

CRUNCH

A JavaScript library for big number arithmetic.

http://crunch.secureroom.net

posted @ 11/06/2014 17.24 by Alessandro Gervasoni

Un pattern non è per sempre (o ovunque)

Questa mia convinzione è valida in molte situazioni ed per molti progetti, dove spesso nel team esiste la convinzione che: le tecnologie usate in un software debbano per forza essere omogenee ed utilizzate dappertutto. Un palese esempio di questa sindrome si ha quando le obiezioni all’uso di Nhibernate o Entity Framework sono: “cosa succede poi se una query non riusciamo a farla in LINQ o con HQL?”, oppure “non conviene perché poi sappiamo che per i report o per le operazioni massive un ORM non è adatto”.

Il problema alla base di queste obiezioni è principalmente questo: se si decide di usare un ORM, non significa che questo debba diventare l’unico modo di accedere al database. Sebbene sia chiaro che è preferibile limitare il numero di scelte tecnologiche adottate nei nostri progetti, per evitare codice immanutenibile, è possibile che si utilizzi un ORM per tutte le parti di business logic, ma per i report e per le operazioni massive si potrà utilizzare il un buon vecchio dataset e delle stored procedures. In questo caso sto limitando a due possibili scelte (ORM o Dataset) con delle chiare regole che mi fanno capire quando è meglio usare uno o usare l’altro.

In sostanza vorrei evitare l’antipattern: Usiamo lo stesso pattern ovunque

 WP_000900_thumb3

Immagine: © Alberto Brandolini Smile

Questo è ancora più vero quando si parla di architetture nuove/complesse/strane/di_cui_non_si_ha_esperienza, come CQRS. La sindrome più ovvia è: non conosco bene CQRS ed Event Sourcing, però so che in alcuni punti del mio software queste tecnologie potrebbero portare grandissimi vantaggi, per cui inizio ad applicarlo nelle parti facili di progetto, cosi quando arrivo a quelle difficili, dove CQRS/ES mi da vantaggio ho già un po’ di confidenza.

Questo spesso porta più danni che benefici, perché state utilizzando:

  • una architettura di cui non siete padroni
  • in una parte in cui non è necessaria

La conclusione è: spendete un sacco di tempo e perdete produttività perché ad esempio state lavorando su una parte decisamente CRUD, con poche logiche di dominio, ma usando un Event Store e separazione tra logica e lettura. Il risultato? Più dolori che vantaggi, perché state adottando un pattern complesso per risolvere un problema semplice.

Andando ad informarsi in rete, ad esempio con i post di Greg o Udi, emerge che probabilmente solo il 20% dei progetti beneficia realmente di CQRS; in questo caso io ho una chiave di lettura leggermente differente: CQRS va probabilmente usato solamente nel 10%/20% del proprio progetto, difficilmente potremmo applicarlo ovunque. In questo caso bisogna vincere la resistenza data dalla falsa convinzione che un pattern va adottato ovunque, ma sposare la realtà e capire che nelle proprie applicazioni, aree differenti potranno convivere con pattern differenti. In DDD è poi chiave il concetto di BOUNDED CONTEXT, per cui, dato che ogni BOUNDED CONTEXT comunica all’esterno con messaggi senza esporre logiche interne, è chiaramente possibile limitare l’uso di un pattern in un determinato BOUNDED CONTEXT.

In questo scenario è fondamentale l’individuazione dei BOUNDED CONTEXT, perché se si sbaglia a tracciare la linea tra contesti il conto potrebbe essere salato, però questo indipendentemente dai pattern utilizzati.

Gian Maria.

posted @ 11/06/2014 9.03 by Gian Maria Ricci

Agile Diversity, theme of XP2014 Rome


Transcript of the lightning talk at XP2014 about:
Agile Diversity, theme of XP2014 - 15th International Conference on Agile Software Development May 26-30, 2014, Rome, Italy


Who are you?
Who am I?
What defines yourself, your identity?

 Each one of us is unique, is a distinct individual, and is different.
Without diversity there is no identity, without diversity we would be just an army of clones.

 For the only fact that we exist, we have the right to our identity, we have the right to diversity.
This is true from a personal point of view, and it's
also true in the workplace.

The company I work for, ThoughtWorks, for example actively encourage a divers
e range of people in all parts of the company, in terms of such things as gender, religion, race, sexual orientation, and the like.

Everybody has the right to love the person they love, without distinction of gender, religion or race.
You have that right. I have it too.


In Italy we know it very well, without diversity and dissent there is fascism.
That’s why it is important both critical thinking and independent judgment, otherwise we become victims of an ideology.
When someone tells you “Do TDD because I know better than you”, this is ideology. I prefer to have the right to ask why, to try and experiment, to make my own decisions.



 Diversity also means pluralism, the idea that there are several principle and value systems that may be in conflict with each other and still are useful and fundamentally correct.
Without pluralism we get trapped into tribal fights, as for example Scrum vs Kanban, Lean vs Agile, or TDD vs BDD.
With pluralism instead you can be a Lean and Agile polyglot, you can find contextual fitness for purpose instead of being limited to a 1-size-fits-all solution.


So make yourself, your dears, and those around you who you care about, a gift: recognize and accept diversity, give yourself the possibility to choose among a large rainbow of many different colors and options, and the right to change idea when you feel like it.

You’ll be a better Lean & Agile professional, a better community member, and a better person too.

Embrace change. Embrace diversity.

posted @ 29/05/2014 19.24 by Luca Minudel

I miti della scalabilità, un esempio: Single picker vs multiple picker (per batch)

Ai Community Days di quest’anno abbiamo sproloquiato di scalabilità, una delle cose su cui ho cercato di insistere è che per poter parlare di scalabilità è necessario in primis essere in grado di misurare e definire quali sono i requisiti che devono essere rispettati.

Questo per un semplicissimo motivo: la scalabilità infinita è un mito, fine, è il requisito che ci deve far scegliere come scalare e non la semplice necessità di scalare.

Facciamo un esempio banale e un po’ astratto per capire:

Abbiamo un bel sito web di e-commerce, piccolo piccolo che fa un gran bene il suo sporco lavoro, basato sul più semplice degli stack, un’applicazione ASP.Net MVC e un database SQL Server con cui dialoghiamo grazie a EntityFramework.

Niente di trascendentale, funziona e fa quello che deve fare con nostra gran soddisfazione. Ad un certo punto cominciamo a ricevere qualche segnalazione dagli utenti che ogni tanto le pagine vanno in time-out e che in generale il sito è lentino.

Andiamo a guardare i log di IIS e del nostro gestore di statistiche preferito e ci rendiamo conto che le visite sono sensibilmente aumentate a tal punto da rendere un problema l’infrastruttura hardware su cui giriamo.

Abbiamo due opzioni:

  • pensare che siamo diventati di punto in bianco Amazon e quindi dire dobbiamo investire un sacco di soldi e rifare tutto, cambiando completamente approccio con tutti i vantaggi ma anche i problemi potenziali che ci portiamo a casa, oltre al dettaglio dei costi;
  • Comperare un SSD da 1TB e dare una nuova vita alla macchina che ospita il tutto;

Sempre iper-semplificando il “dev” sceglierebbe l’opzione 1 il “manager” l’opzione 2 (non polemizzate grazie, è così, e io nella vita faccio il “dev”), vi ricordo che ho scritto iper-semplificando, sto stigmatizzando due posizioni tipiche.

Non è detto che la scelta del “dev” sia quella sbagliata, se non altro tecnicamente, ma nell’esempietto di cui sopra la scelta non tiene conto del requisito che è banalmente aumentare la responsività di un’applicazione il cui problema è noto e non è di andare sulla luna e un investimento di 500€ circa è semplicemente la soluzione, fine.

Il processo di evasione di un ordine

Un esempio molto più interessante, e lascio alla vostra immaginazione calarlo in un contesto informatico basato su code e messaggi, è quello della gestione/evasione ordini in un sistema in cui la logistica è fondamentale. C’è uno spartiacque interessante che è generalmente definito non dalla quantità di ordini che si devono evadere in un’unità temporale (come sarebbe lecito pensare a prima vista) ma dalla numerosità di oggetti ordinabili e di conseguenza dalla dimensione fisica (o dalla logistica se volete vederla da un altro punto di vista) del magazzino.

Single picker per batch

Sotto una certa dimensione ha molto senso che ogni ordine sia evaso da un singolo operatore, in una sola volta, ergo:

  1. arriva l’ordine;
  2. l’operatore recupera dal magazzino tutti gli oggetti ordinati;
  3. l’ordine viene evaso;

Semplice, efficace ed efficiente.

Cambio di requisiti: aumentare la capacità di evasione

Se adesso prendiamo il nostro magazzino e lo raddoppiamo di dimensioni succede una cosa interessante: l’operatore fa un sacco di strada perché ovviamente gli oggetti in un ordine sono totalmente imprevedibili e di conseguenza lo stoccaggio in magazzino è spesso non adeguato all’ordine che si sta evadendo, quello che succede è che sulla carta il raddoppio dello spazio di stoccaggio che doveva aumentare la capacità di evasione degli ordini ha l’effetto invece di diminuirla perché ogni operatore investe un sacco di tempo in più in percorsi all’interno del magazzino.

Il processo di cui sopra resta semplice ed efficace (perché l’ordine viene comunque evaso) ma diventa decisamente inefficiente. In questo scenario aumentare il numero di operatori (il disco SSD dell’esempietto) non è un’opzione perché il costo non è sostenibile.

Siccome in un processo del genere l’efficienza è quasi tutto, diventa necessario cambiare approccio. Radicalmente.

Multiple picker per batch

Il cambio di approccio comporta però un cambio radicale di architettura che in questo caso è sostenuta dal requisito e dal “problema” incontrato, il cambio è talmente importante che comporta rifare tutto:

  1. Ad ogni operatore viene assegnata una zona operativa all’interno del magazzino, e potrà recuperare oggetti solo da quella zona che è quella che gli fa fare meno strada;
  2. Arriva l’ordine;
  3. c’è una fase di triage che “spacca” l’ordine in sotto-ordini base alla posizione degli oggetti in magazzino;
  4. i sotto-ordini vengono assegnati agli operatori;
  5. ogni operatore elabora la sua porzione di ordine portando gli oggetti in una zona di assemblaggio;
  6. una seconda passata, a questo punto fatta in una zona meno ampia, permette di ricomporre i sotto-ordini;
  7. l’ordine viene evaso;

Siamo passati da 3 passaggi a 7 ma l’efficienza complessiva è mostruosamente migliorata.

Dilemmi

La domanda a questo punto è: la seconda soluzione è migliore?

In termini assoluti assolutamente no, lo è in funzione dei requisiti. Oltre una certa soglia di dimensione del magazzino e un certo numero di ordini da evadere la seconda soluzione è migliore della prima, sotto quelle soglie la prima è migliore.

Conclusioni

Ogni soluzione ad un problema è una soluzione al problema specifico, anche un pattern architetturale (quindi una generalizzazione) è una soluzione ad un set finito di problemi non a tutti i problemi di quella tipologia, è quindi lecito aspettarsi che al cambiare dei requisiti la soluzione scelta in precedenza sia da cambiare ma non per questo la soluzione precedente è necessariamente sbagliata magari lo è stata la raccolta dei requisiti, o molto più semplicemente lo scenario è cambiato, mettiamoci l’anima in pace.

Come la scalabilità infinita è un mito anche la soluzione perfetta lo è, fatevene una ragione.

.m

posted @ 28/05/2014 11.38 by Mauro Servienti

Giovedi 29 Maggio #DevCamp ad Ancona

Vi ricordo che giovedi 29 Maggio, presso l’Università Politecnica Delle Marche si terrà il DevCamp, una giornata dedicata a Windows 8.x, Windows phone 8.x, Azure e Kinect.

Come per le precedenti edizioni la giornata ha un inizio con sessioni teoriche per passare poi nel pomeriggio al lab, dove potrete sperimentare, con il supporto di esperti,  le novità viste nel mattino.

Correte ad iscrivervi nella pagina dell’evento: Dev Camp Windows8, Windows Phone, Microsoft Azure e Kinect – ANCONA.

Gian Maria.

posted @ 26/05/2014 8.20 by Gian Maria Ricci

[OT] Sei modi per imparare le lingue online

http://www.wired.it/internet/web/2014/05/22/sei-modi-per-imparare-le-lingue-online/

posted @ 22/05/2014 18.23 by Alessandro Gervasoni

SEOOPEN CAMPUS 19 luglio 2014 CAGLIARI: WEB MARKETING E SEO

gpogleplus-cagliari

Finalmente a Cagliari, il 19 luglio 2014 presso la bellissima sede dell’OPEN CAMPUS DI TISCALI, si terrà il corso  SEO OPEN CAMPUS, in cui i temi principali saranno il posizionamento nei motori di ricerca, le strategie di visibilità online con un occhio al turismo, strategie di Social Media Marketing e tecniche di Web Marketing .

Il corso è aperto a tutti: studenti, PMI, aziende, agenzie di Web Marketing, grafici, strutture ricettive e turistiche, professionisti.

PER TUTTI GLI STUDENTI CHE SI ISCRIVERANNO A QUESTO LINK http://www.thelayout.it/corsoseo/promostudenti/ potranno usufruire di uno sconto del 50% del biglietto, inoltre potranno richiedere a fine corso l’attestato di frequenza firmato dai docenti da presentare al Cdl del proprio corso universitario per il riconoscimento dei CFU formativi.

Per iscrizioni e informazioni http://www.thelayout.it/corsoseo

posted @ 22/05/2014 17.01 by Marco Maltraversi

Latest Images

From Immagini
From Foto
From Foto
From Foto
From Immagini
From Immagini
From Immagini
From PrivateImage
From image
From post
From post
From Immagini
From Messaggi
From BlogImagesLayout
From Screenshots
From Messaggi strani
From Sidebar
From Sidebar
From Immagini per UGI
From Screenshots