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 - 30986
  • Articles - 310
  • Comments - 103297
  • Trackbacks - 601880

Bloggers (posts, last update)

Latest Posts

ASP.NET Web API Succinctly

Settimana scorsa mentre andavo a Londra per lavoro ho avuto il piacere di leggere “ASP.NET Web API Succinctly” di Emanuele DelBono, il libro fa parte della catena di libri tecnici di Syncfusion e devo dire che nella sua brevità, si legge in non più di due ore, è semplicemente esaustivo.

Emanuele parte facendo una breve introduzione alla filosofia che “regola” REST per poi addentrarsi nei tecnicismi di ASP.NET Web API e di come REST si coniughi con gli aspetti tecnologici di Web API.

La parte tecnica è il giusto mix tra semplicità e approfondimento, vista la natura delle collana di libri, tutto è affrontato con il giusto grado di complessità sufficiente a dare al lettore le basi per iniziare a muoversi con le sue gambe ma soprattutto sufficiente a dare tutte le informazioni necessarie per approfondire in piena autonomia tutti gli argomenti esposti, argomenti che vanno dal motore di routing alla gestione della security passando per l’etsendibilità della pipeline di Web API.

Insomma una lettura vivamente consigliata.

.m

posted @ 21/08/2014 10.20 by Mauro Servienti

Alertify ASP.NET MVC method helper

 

Per chi non conoscesse alertify è una libreria javascript per visualizzare sia finestre che messaggi di allerta. La potete trovare qui.

Visto però che programmo in ASP.NET MVC e visto che molti link sono dei link ajax, ho deciso di crearmi degli helper.

 

Continua qui

posted @ 08/08/2014 13.33 by Alberto

Aggiornamento a Entity Framework 6.1.1 e Sequence contains…

 

Per un progetto che aveva E.F. 6.0.1, ho avuto la brillante idea di aggiornarlo, tramite nuget, all’ultima versione del noto ORM.

E… ovviamente non ha funzionato al primo colpo… Soprattutto in add-migration mi dava l’errore “Sequence contains more than one matching element”.

 

Continua qui

posted @ 08/08/2014 11.59 by Alberto

Nuove regole per gli acquisti inapp nei giochi on line. Quali indicazioni per gestori di webstore e sviluppatori?

In questi giorni è stato emanato un importante provvedimento (si tratta di una posizione comune) in tema di acquisti inapp da parte della Commissione Europea e dei rappresentanti delle autorità garanti dei consumatori degli stati membri dell’Unione Europea. La posizione comune, che non ha valore di legge ma che può trovare immediata applicazione attraverso eventuali azioni intraprese dalle singole autorità garanti dei paesi membri dell’Unione, riguarda gli acquisti inapp nei giochi online e mira a tutelare prevalentemente i minori, soggetti più direttamente coinvolti da questa tematica. Nella stessa, in particolare, si descrivono alcune pratiche scorrette utilizzate dai gestori degli webstore nella vendita di giochi online e vengono analizzate le azioni intraprese in questo ambito da alcuni dei player più importanti del settore (Google, Apple e Interactive Software Federation of Europe). Da molto tempo, infatti, in sede comunitaria si lamenta la mancanza di trasparenza delle offerte presenti sugli store online, piattaforme che sempre più spesso offrono giochi pubblicizzandoli e presentandoli come “free”, senza che ciò corrisponda effettivamente alla realtà (nella maggior parte dei casi per fruire in modo significativo dell’applicazione è necessario effettuare un pagamento al gestore dello store online o allo sviluppatore). Termini come “free”, “gratis”, “download gratuito”, sono tutti termini che vengono utilizzati diffusamente sugli store online anche e soprattutto per prodotti che non sono pienamente utilizzabili (o addirittura praticamente inutilizzabili senza che l’utente abbia effettuato successivamente al download un pagamento). A ciò si aggiunga il fatto che molto spesso, a causa delle impostazioni di default di queste applicazione, vengono autorizzati acquisti e pagamenti senza che l’utente ne venga pienamente informato e che quindi lo stesso sia conscio dell’operazione. Già a dicembre 2013 i rappresentanti delle autorità nazionali per la concorrenza avevano presentato una prima posizione comune con la quale chiedevano a Google e Apple più trasparenza per gli acquisti inapp nei giochi online.
In particolare si chiedeva che:
● i giochi pubblicizzati come "gratuiti" non ingannassero i consumatori sui costi reali dell’applicazione;
● i giochi non contenessero inviti diretti ai minori ad acquistare contenuti;
● i consumatori venissero adeguatamente informati sulle condizioni di pagamento dei contenuti;
● i consumatori non si vedessero addebitare importi in base a un'impostazione di pagamento predefinita senza aver fornito un consenso esplicito;
● gli sviluppatori fornissero un indirizzo di posta elettronica per consentire ai consumatori di contattarli per dubbi o rimostranze.
Nella recente posizione comune del 18 luglio 2014, se da un lato si sottolinea come Google abbia effettivamente deciso di implementare nel suo store, entro settembre 2014, le richieste contenute nella precedente posizione comune (ad alcune delle quali sì è già adeguato), dall’altro si dà conto di come Apple non abbia ancora individuato e risposto con proposte concrete alle richieste della commissione e dei Garanti per la tutela dei consumatori dei paesi membri.

Ma cosa è plausibile ritenere che possa cambiare?

Posto che gli atti come le posizioni comuni non sono provvedimenti dettagliati o a carattere tecnico, ma
piuttosto documenti di indirizzo politico, è comunque possibile individuare alcune interessanti indicazioni che verranno, plausibilmente, rese a breve obbligatorie in ambito comunitario nei confronti di tutti gli
operatori del settore (sviluppatori e gestori degli webstore).

In generale, i gestori degli webstore (non solo Apple e Google, ma anche gli altri operatori), dovranno adeguarsi alle seguenti indicazioni:
- non potranno utilizzare il termine “free” o un suo equivalente (ad es. “gratis”, “free download”, etc.) se non per le applicazioni completamente gratuite. Lo stesso termine verrà tollerato solo se utilizzato in relazione a giochi non completamente gratuiti, ma in cui siano comunque chiaramente indicati quegli elementi sono gratuiti e quali a pagamento. Questo tipo di applicazioni, per poter utilizzare il termine “free” dovranno consentire all’utente di usufruire di sezioni di gioco standalone che non necessitino di pagamenti per essere utilizzate. Potrebbe sicuramente utilizzare il termine “free”, un gioco in cui si possono acquistare elementi decorativi (come “skin” dei personaggi) ma in cui l’esperienza di gioco è integralmente accessibile a titolo gratuito;

- dovranno elaborare e adottare delle guidelines conformi alla normativa europea in materia di tutela dei consumatori e alle posizioni comuni già emanate sul tema.

Per gli sviluppatori:

- dovranno considerarsi illecite tutte le app, e in particolare tutti i giochi online, nei quali dei minori vengano invitati ad effettuare acquisti di contenuti. In questo tipo di giochi non sarà più consentito l’utilizzo di espressioni come “buy now!”, “Upgrade now!”, o simili;

- la richiesta del consenso all’acquisto di contenuti inapp dovrà essere posta ben in vista e non potrà pertanto essere inserita esclusivamente nei “Termini e condizioni di servizio” o essere raggiungibile attraverso link ad altre pagine;

- le applicazioni dovranno prevedere la richiesta di un consenso esplicito per gli acquisti inapp come impostazione di default. Ciò significa che affinché il consenso sia considerato valido, l’utente dovrà porre in essere un’azione specifica per manifestarlo, che però non potrà concretizzarsi in un semplice click, ma in un’attività più elaborata (ad esempio l’inserimento della password, di una risposta ad una domanda sui suoi dati, etc.);

- le impostazioni relative ai pagamenti per acquisti inapp dovranno essere mostrate all’utente in modo neutrale (senza che sia data prevalenza ad un’opzione o ad un’altra);

- ai consumatori dovrà essere data la possibilità, attraverso una specifica opzione, di stabilire un numero massimo di acquisti inapp effettuabili senza una specifica autorizzazione al pagamento;

- gli sviluppatori (e parallelamente i gestori degli store online) dovranno istituire una specifica casella email attraverso la quale i consumatori potranno inviare domande o reclami. L’indirizzo in questione dovrà essere facile da reperire e mostrato all’utente più volte, per esempio nel momento in cui effettuerà il download dell’applicazione, quando farà acquisti inapp, etc. L’indirizzo email così creato non potrà pertanto essere inserito esclusivamente nei “Termini e nelle condizioni di servizio” o essere raggiungibile solo attraverso link ad altre pagine.

E’ possibile, prevedere infine che vengano adottate posizioni comuni o provvedimenti simili che estendano, con le dovute distinzioni, le indicazioni soprariportate anche ad altri tipi di applicazioni (e non solo ai giochi online), Sul breve periodo, intanto, potrebbero arrivare nuove guidelines dagli operatori degli webstore.

Link alla posizione comune del 18.07.2014 : http://ec.europa.eu/consumers/enforcement/cross%ADborder_enforcement_cooperation/docs/20140718_in%ADapp_cpc_common%ADposition_en.pdf

posted @ 04/08/2014 8.30 by Staff Lex101

moder.IE

Strumenti di sviluppo
per il Web moderno


https://www.modern.ie/it-it/tools

posted @ 29/07/2014 8.57 by Alessandro Gervasoni

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

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