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 - 31004
  • Articles - 310
  • Comments - 103544
  • Trackbacks - 591319

Bloggers (posts, last update)

Latest Posts

“Don't bring me problems,bring me solutions." Really?!?!







“The thought that disaster is impossible often leads to an unthinkable disaster.”
Gerald M. Weinberg










Modern leadership is servant, modern managers are like hosts that receive and entertain guests.
Team members have ownership and autonomy in the way, in the ‘how’, they pursue the value they are asked to create.

When team members face difficulties, they raise obstacles to management attention. And managers act on the obstacles that bubble up from the team. This follows the principle of transparency and feedback.

Are managers ready to hear about all these problems?   Continue...

posted @ 20/10/2014 23.02 by Luca Minudel

JavaScript : the right way

http://jstherightway.org/

posted @ 13/10/2014 17.48 by Alessandro Gervasoni

Webapi-like controllers in NodeJS+ExpressJS

Lavorando su un progetto ~MEAN (MongoDB + ExpressJS + AngularJS + nodeJS) mi sono chiesto: “perchè non creare un modulo di registrazione custom dei controller simile a quella delle webapi di asp.net”? da qui è nato il seguente modulo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var path = require('path');
var fs = require('fs');
var config = require('./config');
var _ = require('lodash');

var getControllersInServerFolder = function (serverFolder) {
    if (_.isEmpty(serverFolder)) {
        serverFolder = config.settings.controllersFolder;
    }

    var controllers = [];

    var fileSystemObjects = fs.readdirSync(serverFolder); //read folder content
    if (_.isArray(fileSystemObjects)) {
        _.forEach(fileSystemObjects, function (fso) {
            var fsoFullPath = path.join(serverFolder, fso);
            var fsoStat = fs.statSync(fsoFullPath);
            if (fsoStat.isFile() && fso.endsWith('controller.js')) {
                controllers.push(require(path.relative(__dirname, fsoFullPath)));
            } else if (fsoStat.isDirectory()) {
                _.union(controllers, getControllersInServerFolder(fsoFullPath));
            }
        });
    }

    return controllers;
};

exports.getControllers = getControllersInServerFolder;

Quindi nello startup del server nodejs:

1
2
3
_.forEach(require('controllers-manager')..getControllers(), function(controller) {
	server.use(controller.path, controller.router); // register route into expressjs
});

Ora i controller sono tutti quei files definiti nella cartella config.settings.controllersFolder (o sottocartelle) che terminano con ‘controller.js’ e hanno tutti la seguente struttura:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
var express = require('express');
var router = express.Router();

//apply before any actions (check authorizations...)
router.use(function(req, res, next) {
	next(); //go to next 
});

router.get('/message', function(req, res, next) {
	res.send({'Hello world'});
});

exports.path = '/api/sample';
exports.router = router;

Facile, semplice e veloce.

posted @ 12/10/2014 15.49 by Roberto Sarati

L’importanza del contesto

Penso di non essere il solo ormai così abituato ad usare Entity Framework e LINQ da dimenticarmi i principi fondamentali tra su cui si basa Entity Framework finché non ci sbatto il muso…. Come oggi Smile

Sto sviluppando la classica applicazioni di scambio dati tra sistemi legacy che fa un uso (ovviamente) importate dell’accessoacesso ai dati. Per cui cosa c’è di più comodo che un bel “reverse engineering” del database legacy per poi poterci operare con LINQ?Smile with tongue out

Tutto filava per il meglio con mia grande soddisfazione finché non si è presentato il caso di dover chiamare un applicativo esterno che era preposto a fare delle modifiche allo stesso database ma la cui logica era cablata nell’eseguibile e quindi “doveva essere usata così com’era”.

Vi riporto la parte di codice “incriminata”. Il programma reale è (ovviamente) un po’ più complesso e la logica è distribuita su più funzioni (altrimenti il problema mi sarebbe saltato subito all’occhio) ma rende l’idea del “pitfall” in cui si può cadere usando Entity Framework (o un qualsiasi altro ORM) come usiamo (o usavamo) ADO.NET.

N.d.R. “ShellandWait” è una funzione che si preoccupa di lanciare un programma con un parametro ed attenderne la chiusura e…. scusate la sintassi VB Embarrassed smile

Using ctx = provider.GetDataContext() Dim ordini = From p In ctx.PortafoglioOrdini Where p.Ordine = ordine Select p If ordini IsNot Nothing Then For Each ordine In ordini Dim res = ShellandWait(programmaEsterno, ordine.Riga) Next End If Dim ordineModificato = (From p In ctx.PortafoglioOrdini Where p.Ordine = ordine Select p).FirstOrDefault() Return (ordineModificato IsNot Nothing AndAlso ordineModificato.Stato = "X") End Using

 

Diciamo (sempre per semplificare) che tra le varie cose che fa il programma esterno una di quelle è cambiare una colonna della tabella PortafoglioOrdini e io uso questa modifica per verificare che il programma abbia girato correttamente.

Ma il controllo mi tornava sempre false, benché la verifica sul database rendesse evidente che tutto funzionasse al meglio. Surprised smile

Quello che mi ero dimenticato è che il DbContext di Entity Framework implementa i pattern della Unit Of Work e Identity Map per cui una volta letti i dati non li rilegge più dal DB poiché, correttamente in quasi tutti i casi, ritiene di avere conoscenza dello stato letto e di tutte le modifiche apportate al dato che siano state persistite o meno.

Capito il problema (e per una volta senza ricorrere a Stack Overflow Winking smile ) ho risolto facilmente il problema dividendo il singolo DbContext in due differenti, uno prima e uno dopo la chiamata al programma esterno.

Technorati Tags: ,

posted @ 02/10/2014 23.32 by Nazareno

Quando faccio git push quali branch sto pushando?

Lavorando in command line in Git si potrebbe erroneamente pensare che facendo un

git push

Si effettui il push della sola branch che è in checkout, ma questo non è vero, dato che il reale comando per effettuare il push di una branch è

git push remotename branchname

Quindi se state nella branch XYZ ed avete un  unico remote chiamato origin dovete fare

git push origin XYZ

Il comportamento adottato da git se non specificate ne il remote ne la branch è determinato dalla impostazione push.default e come possiamo leggere dalla documentazione le possibilità sono.

nothing - do not push anything.

matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.

upstream - push the current branch to its upstream branch.

tracking - deprecated synonym for upstream.

current - push the current branch to a branch of the same name.

Il default è matching, per cui facendo un git push state effettuando il push di tutte le vostre branch. Questa opzione probabilmente non è il miglior default che si possa avere, per questo in Git 2.0 il default verrà modificato in “Simple”, un ulteriore nuovo possibile valore per push.default:

simple - in centralized workflow, work like upstream with an added safety to refuse to push if the upstream branch’s name is different from the local one. When pushing to a remote that is different from the remote you normally pull from, work as current. This is the safest option and is suited for beginners. This mode has become the default in Git 2.0.

Fate quindi attenzione al modo che avete selezionato per evitare sorprese.

Gian Maria.

posted @ 27/09/2014 12.09 by Gian Maria Ricci

A noi c'ha rovinato l'autsursing

E' un vecchio tormentone sempre attuale quello che Petrolini prima, e Sordi poi, hanno genialmente proposto e riproposto nel passato. "A me m'ha rovinato la guera", diceva il personaggio Gastone, fatuo e inconcludente, riferendosi negli anni 20 alla Grande Guerra che gli avrebbe impedito l'affermazione professionale e umana. A mio modo di vedere, invece, un fondamentale malinteso sul senso ultimo dell'outsourcing è alla base di molti problemi di digitalizzazione di molte aziende italiane e, manco a dirlo, della PA. Outsourcing è l'atto di "ricorrere ad altre imprese per lo svolgimento di alcune fasi del processo produttivo". In sostanza, un'azienda trova più economico e scalabile per il proprio business acquistare servizi da altre aziende specializzate invece che costruirsi al proprio interno una struttura ad hoc. Autsursing all'italiana, invece, è l'atto di "ricorrere ad altre imprese per lo svolgimento di alcune fasi del processo produttivo" delegando COMPLETAMENTE ad esse tempistica (salvo vaghe alzate di voce), documentazione e soprattutto controllo di qualità. In sostanza, un'azienda trova più comodo pagare e lavarsi le mani dell'implementazione di parte dell'infrastruttura del proprio business. Nell'IT che succede? Che l'azienda X (che può tanto essere una mini SRL, quanto una PMI o un mastodonte parastatale) si rivolge ad un vendor hw/sw il quale gli suggerisce un'azienda partner--tipicamente un aggregatore/integratore di sistemi. E fin qui nulla da dire. Il portfolio naturalmente fa la differenza e quindi l'azienda partner viene scelta sulla base della credibilità dimostrabile. E fin qui tutto bene. Aziende di consulenza nazionali o più finiscono per dividersi la torta--che siano quelle che hanno a che fare con motori, che si occupino di accenti o repliche. Il problema nasce dal fatto che queste aziende che prosperano sul autsursing hanno strutture poco agili e non possono permettersi di tenere il personale a spasso in attesa di allocazione. Ciò che finisce per contare quindi NON è la qualità del lavoro, l'innovazione fornita, il valore aggiunto e duraturo. Conta portare il "progetto a casa" così da avere l'approvazione per inserire un'altra casella nel portfolio in vista del prossimo cliente. Ciò che manca è la valutazione oggettiva soprattutto da parte del cliente finale della qualita del lavoro. E nel caso in cui il lavoro NON sia fatto a regola d'arte manca COMPLETAMENTE il senso della "punizione". Lo scorecard resta immacolato; manco fosse una roba read-only. Uno dice "ho chiamato la super azienda X che mi ha raccomandato il super vendor Y. Che altro potevo fare di meglio? Se fanno un lavoro di merda mica è colpa mia? Non è mia responsabilità". Tocca inserire su wikipedia anche la definizione diautsursing.

posted @ 26/09/2014 9.49 by Dino Esposito

Font Awesome Animation

http://l-lin.github.io/font-awesome-animation

posted @ 25/09/2014 17.16 by Alessandro Gervasoni

scryber

libreria open source per la creazione di pdf da applicazioni .net

http://scryber.codeplex.com

posted @ 18/09/2014 9.28 by Alessandro Gervasoni

Le novità dell’aggiornamento di Visual Studio Online del 4 settembre

Il lavoro incessante del team di sviluppo di Visual Studio Online non si ferma neanche d'estate e, puntuali come sempre, allo scadere delle tre settimane ecco disponibili le novità portate a termine nel corso del 70esimo sprint.

È uno sprint che presenta parecchie interessanti novità che aiuteranno senza dubbio quelli che utilizzano VSO quotidianamente per i propri progetti di produzione.

Vediamo rapidamente di cosa si tratta, riservandoci di approfondire le funzioni più interessanti in un prossimo post.

  1. Gestione delle query sui Work Item
  • Un nuovo comando consente di inviare direttamente un email con le informazioni sul Work Item;
  • Dopo aver aperto il dettaglio di un Work Item che fa parte di una query, oltre ai pulsanti per navigare sul Work Item precedente o successivo, è ora disponibile un nuovo comando per tornare alla lista. Il comando è attivabile anche con lo shortcut da tastiera ALT+Q e replica il comportamento già garantito dal tasto back del browser. In tutte e tre modalità (comando della toolbar, shortcut e tasto back) il ritorno alla lista avviene con l'elemento corrente (quello di cui stavamo esaminando il dettaglio) che viene automaticamente selezionato;
  • La modalità full screen, che massimizzando lo spazio a disposizione per l'elemento selezionato risulta particolarmente utile ad esempio durante i meeting Scrum, è ora disponibile sia sulle query che su tutti i tipi di Work Item;
  • Nel menu contestuale attivabile sui risultati di una query è ora disponibile un nuovo comando che apre il Work Item in un tab separato. Il nuovo tab ha qualche piccolo difetto di gioventù, ad esempio dalla toolbar manca il comando per attivare la modalità full screen che è però attivabile cambiando "a mano" il querystring.
  1. Ricerca rapida nei controlli ad albero
  • Lavorando con VSO capita spesso, anzi direi sempre, di dover impostare o modificare l'area o l'iterazione a cui un particolare Work Item fa riferimento. Come sapete ciò è possibile per mezzo di un comando ad albero che si apre a tendina e ci consente di navigare nella gerarchia delle iterazioni (o delle aree) fino a selezionare quella desiderata. Fin tanto che "giochiamo" con un progetto di prova tutto funziona a meraviglia. Quando però ci cimentiamo con un progetto "reale", in cui ad esempio il numero di release e di sprint può diventare notevole, utilizzare il controllo non era propriamente agevole. Da oggi è possibile cominciare semplicemente a scrivere nel campo Iteration (o in quello Area) per veder apparire una lista sottostante che presenta gli elementi filtrati in base al testo inserito. Se il valore che vogliamo impostare è univoco e quindi sufficiente premere Invio per selezionarlo. Se ad esempio vogliamo mettere un Work Item nello sprint 70 è sufficiente scrivere 70 e premere Invio (supponendo che non ci siano due iterazioni che contengo il testo 70 nella propria descrizione) con un bel risparmio di tempo.
  1. Nuovi grafici di tendenza
  • Sono disponibili due nuovi intervalli di tempo per i grafici sui Work Item che mostrano i risultati relativi rispettivamente alle ultime 12 settimane e all'ultimo anno. Per i nuovi due intervalli i dati non sono ovviamente mostrati su base giornaliera ma sono invece raggruppati per settimana nel primo caso o per mese nel secondo.
  1. Più elementi nella Kanban board
  • Il limite di 20 elementi visualizzabili nella prima e nell'ultima colonna della Kanban board è stato sostituito con un limite di 999 che è decisamente adeguato anche per progetti più grandi e duraturi. Il valore può essere al solito impostato nella schermata di personalizzazione delle colonne.
  1. Evidenza di tutte le Test Suite a cui un Test Case appartiene
  • Man mano che il progetto cresce è molto probabile che uno stesso Test Case finisca per far parte di più Test Suite. In tal caso prima di apportarvi delle modifiche è bene verificare e ponderare gli eventuali effetti collaterali sulle diverse Test Suite. Una nuova opzione sul pannello dei filtri consente ora di visualizzare immediatamente tutte le Test Suite a cui il Test Case selezionato appartiene.
  1. Preview 2 delle API WIT
    Sulla base dei tanti feedback ricevuti dopo il rilascio della Preview 1, il team di VSO ha rilasciato una nuova preview che include:
  • Modalità più semplice di creazione e modifica dei Work Item;
  • Esecuzione più facile di comandi ad-hoc che utilizzano il Work Item Query Language;
  • Accesso alla lista delle aree e delle iterazioni;
  • Nuove API per elencare i tipi di Work Item e Link, le Categorie e i Campi;
  • Oggetti di ritorno JSON meno prolissi.

È comunque possibile configurare quale versione delle API si intende utilizzare per mantenere compatibilità con integrazioni già realizzate.

  1. Supporto per Hubot
  • Le Team Room di Visual Studio Online possono ora essere collegate alla chat open source Hubot. L'integrazione consente di migliorare la produttività semplificando ad esempio la creazione di Work Item, la pianificazione di una Build o la visualizzazione del proprio lavoro recente direttamente dalla Team Room.

Happy coding!

posted @ 11/09/2014 11.39 by Giorgio Di Nardo

E-commerce, Mobile Remote Payment e tutela della privacy

Proseguo in questo post l’approfondimento sulle tematiche connesse al mondo e-commerce avviato con il mio precedente approfondimento sulle nuove regole in materia di recesso.

Il tema che si vuole sviscerare in questa sede è slegato dal già richiamato d.lgs. 21/2014, ma riguarda un recente e importante provvedimento del Garante Privacy in materia di mobile remote payment che di fatto tocca nel vivo l’interesse dei gestori di piattaforme e-commerce.

Con mobile payment si intendono tutti quei servizi che consentono di gestire acquisti e pagamenti di beni (sia digitali che fisici) attraverso un terminale mobile. Con mobile remote payment andiamo a caratterizzare in particolare quelle operazioni di pagamento di un bene o di un servizio tra esercente e cliente, attivate da quest’ultimo a distanza attraverso il telefono cellulare. Con mobile proximity payment invece si caratterizzano quelle operazioni di pagamento eseguite dal cliente avvicinando il proprio dispositivo mobile, dotato di tecnologia NFC (Near Field Communication, ossia una tecnologia che fornisce connettività wireless bidirezionale a corto raggio) ad un apposito lettore POS (point of sale), posto presso il punto vendita dell'esercente da cui si acquista il bene.

Il Garante Privacy, all’esito di una procedura di consultazione pubblica avviata nel dicembre 2013 e in recepimento della normativa europea, ha emanato in data 22 maggio 2014 un provvedimento generale in materia di trattamento dei dati personali nell’ambito dei servizi di mobile remote payment.

L’obiettivo del Garante è quello di garantire in un mercato del pagamento sempre più dinamico, un trattamento sicuro delle informazioni che riguardano gli utenti  e prevenire i rischi di un loro uso improprio. Nell’ambito del mobile remote payment, il pagamento dei contenuti digitali avviene attraverso il telefono mobile e che il cliente può fruirne sia direttamente sul proprio smartphone, sia su altri tipi di terminali (ad es. tablet  e PC).

Attraverso tale metodo di pagamento vengono trattate numerose informazioni riferibili all'utente che riguardano, in particolare,  i dati relativi alla numerazione telefonica, i dati anagrafici, i dati legati alla tipologia del servizio o del prodotto digitale richiesto ed al relativo importo.

Ad essi si aggiungono i dati  inerenti alla sottoscrizione ed alla revoca del servizio, quelli relativi agli addebiti degli acquisti nella fattura o sulla carta prepagata e, eventualmente, quelli di posta elettronica richiesti per una maggiore fruibilità del contenuto digitale, nonché l'indirizzo IP dell'utente.

Ai suddetti dati se ne possono peraltro aggiungere altri, anche di natura sensibile (cfr art. 4 comma 1, lett. d) del Codice), legati alla fruizione del contenuto o del servizio digitale.

Stante la varietà e molteplicità dei dati suscettibili di trattamento nel quadro delle operazioni sopra descritte possono, quindi, facilmente emergere profili di rischio per i diritti e le libertà fondamentali, nonché per la dignità dei soggetti interessati.

Le direttive del Garante sono rivolte ai tre principali soggetti che offrono servizi di mobile payment: operatori di comunicazione elettronica, che forniscono ai clienti un servizio di pagamento elettronico tramite cellulare, o con l’uso di una carta prepagata oppure mediante un abbonamento telefonico; gli aggregatori (hub), che mettono a disposizione degli operatori tlc e internet e gestiscono la piattaforma tecnologica per l’offerta di prodotti e servizi digitali; i venditori (merchant), che offrono contenuti digitali e vendono servizi editoriali, prodotti multimediali, giochi,  servizi destinati ad un pubblico adulto.

Vediamo dunque quali sono le principali prescrizioni poste dal garante.

Anzitutto, viene posto un dovere di Informativa: gli utenti dovranno essere informati sulle modalità di trattamento effettuato sui loro dati sin dalla sottoscrizione o adesione al servizio di pagamento da remoto.

Poi viene regolato il Consenso, stabilendo che Le società non dovranno richiedere il consenso degli utenti per il trattamento dei dati relativi alla fornitura del servizio di remote mobile payment. Il consenso è invece obbligatorio per la comunicazione dei dati personali a terzi oppure in caso di loro utilizzo per attività di marketing e profilazione. Con riguardo alla Conservazione dei dati, si prescrive che I dati degli utenti trattati dagli operatori, dagli aggregatori e venditori, potranno essere conservati al massimo per 6 mesi. L'indirizzo Ip dell'utente dovrà invece essere cancellato dal venditore una volta terminata la procedura di acquisto del contenuto digitale. Dal punto di vista delle Misure di sicurezza Operatori, aggregatori e venditori saranno tenuti ad adottare precise misure per garantire la confidenzialità dei dati, quali: sistemi di autenticazione forte per l'acceso ai dati da parte del personale addetto, e procedure di tracciamento degli accessi e delle operazioni effettuate; criteri di codificazione dei prodotti e servizi; forme di mascheramento dei dati mediante sistemi crittografici.Da ultimo, sempre al fine di rafforzare la tutela della privacy, dovranno essere adottate misure al fine di impedire l'integrazione delle diverse tipologie di dati a disposizione dell'operatore telefonico (dal consumo telefonico ai dati sull'uso della tv interattiva) e di evitare la profilazione "incrociata" dell'utenza basata su abitudini, gusti e preferenze, a meno che non venga espresso uno specifico consenso informato da parte dell'utente. I venditori, inoltre, per garantire maggiore riservatezza alle transazioni dei clienti, potranno trasmettere all'operatore telefonico solo le categorie merceologiche di riferimento dei prodotti digitali offerti senza indicazioni sullo specifico contenuto del prodotto o servizio acquistato, a meno che non sia necessario per la fornitura di servizi in abbonamento. Dovranno essere previsti anche accorgimenti tecnici per disattivare servizi destinati ad un "pubblico adulto" e per inibirne l'accesso a minorenni.

EDOARDO COLZANI

posted @ 01/09/2014 8.30 by Staff Lex101

JSON.Merge

Un’interessante novità introdotta con la versione 6.0 release 4 di Json.NET è la possibilità di eseguire il Merge (utilizzando 4 possibili “variazioni”) di oggetti JObject e Jarray. Un rapido esempio, tramite Web Api:

[HttpPost]        
public void JsonStringPost([FromBody]string value)
{
    JObject jCar = JObject.Parse(value);
    JObject jOptional = JObject.Parse(@"{Optionals :['Air Conditioned','Smoker'] }");

    jCar.Merge(jOptional, new JsonMergeSettings() { MergeArrayHandling = MergeArrayHandling.Union });

    string jsonFormat = jCar.ToString();
    Car mergedCar =  jCar.ToObject<Car>(); 
}

Dove l’Action “JsonStringPost” accetta una stringa tipo:

"{ 'Brand': 'Ferrari','Model': 'f450 Modena','Optionals': [] }"

Utilizzando, ad esempio il Composer di strumenti come Fiddler2 possiamo invocare il servizio:

image

Per ottenere una nuova istanza di Car con tutti gli Optionals:

image

Se il nostro servizio accetta direttamente un’istanza di oggetto invece di una stringa in formato JSON, il nostro codice cambia leggermente, come di seguito:

[HttpPost]
public void JsonObjectPost([FromBody] Car carByPost)
{
    JObject jCar = JObject.FromObject(carByPost);

    JObject jOptional = JObject.Parse(@"{Optionals :['Air Conditioned','Smoker'] }");
    jCar.Merge(jOptional, new JsonMergeSettings() { MergeArrayHandling = MergeArrayHandling.Union });

    string jsonFormat = jCar.ToString();
    Car mergedCar = jCar.ToObject();
}

Dove utilizziamo il metodo FromObject della classe JObject invece di Parse. Utilizzando Fiddler, passando come Body del messaggio la stringa (senza i doppi apici ad inizio e fine stringa)

{ 'Brand': 'Ferrari','Model': 'f450 Modena','Optionals': [] }

Otteniamo (ovviamente) lo stesso risultato dell’invocazione precedente. E’ possibile modificare il comportamento di “Merge” utilizzando l’enumerazione MergeArrayHandling. La classe Car (C#) è descritta nell’esempio, è la seguente:

public class Car
{
    public string Brand { get; set; }
    public string Model { get; set; }
    public string[] Optionals { get; set; }
}

La lista completa delle features aggiunte nel rilascio della versione 6.0 release 4 è disponibile qui.

posted @ 29/08/2014 12.30 by Pietro Libro

Associare il proprio Microsoft Account con l’account aziendale per condividere i benefici dell’abbonamento MSDN su Visual Studio Online

In un precedente post avevo parlato del funzionamento del piano Basic gratuito di Visual Studio Online e della possibilità di superare il numero di 5 utenti a patto che gli eccedenti siano in possesso di un abbonamento MSDN.

Con l'attuale possibilità di utilizzare Visual Studio Online sia con il proprio Microsoft Account che con l'account aziendale, per qualcuno si potrebbe porre il problema di riuscire a condividere i benefici dell'abbonamento su entrambi gli account, potendo quindi partecipare sia a progetti aziendali che extra-aziendali senza essere in entrambi i casi contati come utenti Basic.

Fortunatamente il problema è facilmente risolvibile associando i due account dalla propria sottoscrizione MSDN.

Apriamo quindi il nostro browser preferito e navighiamo su http://msdn.microsoft.com accedendo se necessario con il nostro Microsoft Account. Selezioniamo quindi in alto a destra il link Abbonamenti MSDN.

Nella sezione Visual Studio Online selezioniamo il link Collegamento all'account aziendale.

Nel dialog box Link to your Organizational Account impostiamo il nostro Account aziendale e clicchiamo sul pulsante Collega.

I due account risultano ora collegati (collegamento che è sempre possibile modificare o rimuovere utilizzando i link opportuni) ed è quindi possibile utilizzare i privilegi della propria sottoscrizione MSDN su entrambi.

Happy coding!

posted @ 27/08/2014 23.01 by Giorgio Di Nardo

wu.js

wu.js is a JavaScript library providing higher order functions

http://fitzgen.github.io/wu.js

posted @ 27/08/2014 8.35 by Alessandro Gervasoni

Fast, Secure HTML5 Document Viewing



link

posted @ 26/08/2014 8.39 by Alessandro Gervasoni

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

Latest Images

From Immagini
From Immagini
From Immagini
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