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 - 31013
  • Articles - 310
  • Comments - 104854
  • Trackbacks - 591141

Bloggers (posts, last update)

Latest Posts

Dati di accesso: Essere uno sviluppatore software in Red Gate (UK)


Red Gate Ingeniously Simple

Giovedi' 13 Novembre 2014


Sede:
evento online
Ora: 17:30 - 18:30
Speaker: Andrea Angella
Q/A: Jodie Pinkowski

Accedi al webcast oggi alle ore 17:30 italiane usando questo indirizzo:
https://www.livemeeting.com/cc/mvp/join?id=SJ33B7&role=attend&pw=jKxft%2F%289R

Andrea Angella e' un italiano che lavora in UK da 5 anni e presentera' tutti i vantaggi di lavorare in Red Gate dando risposta a molte delle domande che un italiano si pone prima di compiere il grande passo. Durante l'intero webcast, la responsabile delle risorse umane, Jodie Pinkowski, sara' a disposizione per rispondere direttamente alle vostre domande (Only In English).

  • Ti sei mai chiesto come possa essere l'esperienza di uno sviluppatore software in UK?
  • Sei alla ricerca di un ambiente di lavoro piu' stimolante e gratificante che possa veramente farti crescere professionalmente?
  • Sei alla ricerca di un migliore bilanciamento tra lavoro e vita privata?
  • Stai considerando la possibilita' di fare una esperienza all'estero?

Vi aspettiamo numerosi!

Iscriviti all'evento

posted @ 13/11/2014 13.17 by Andrea Angella

Microsoft news

La giornata di oggi è stata particolarmente ricca di news per noi sviluppatori:

  1. E’ disponibile l’update 4 di Visual Studio 2013 (non ancora segnalato in VS2013 ma scaricabile qui Download Visual Studio 2013 Update 4 (2013.4) RTM)
    La lista delle novità e delle correzioni è disponibile alla seguente pagina: http://www.visualstudio.com/news/vs2013-update4-rtm-vs
  2. E’ stata rilasciata una nuova edizione di VS ovvero la Visual Studio 2013 Community, che include gli ultimi updates, e che supporta sviluppo web, cloud, mobile, Kinect, Unity… permettendo inoltre di installare estensioni. Un cambio di rotta rispetto all’ultima tornata di VS express frammentato in più versioni e con estensioni bloccate.
    Interessante notare la seguente frase presente su sito microsoft:
    ”For all other usage scenarios: In non-enterprise organizations, up to 5 users can use Visual Studio Community. In enterprise organizations (meaning those with >250 PCs or > $1MM in annual revenue), no use is permitted beyond the open source, academic research, and classroom learning environment scenarios described above”
    Questo significa che in piccole aziende è possibile utilizzare VS Community senza oneri anche per fini commerciali (correggetemi se sbaglio).
  3. Disponibile Visual Studio 2015 preview (http://www.visualstudio.com/news/vs2015-preview-vs#Net) con EF7, Rosylin, .net4.6, asp.net 5 e chi più ne ha più ne metta
  4. L’apertura sempre più consistente da parte di Microsoft verso il mondo opensource e sistemi “non-windows”:
    1. sono stati rilasciati parti importanti di .net framework su github (http://blogs.msdn.com/b/dotnet/archive/2014/11/12/net-core-is-open-source.aspx)
    2. si è (forse) presa consapevolezza di ciò che molti avrebbero voluto da .NET, ovvero la multipiattaforma (forse dovuto anche al successo di Xamarin [che tra parentesi, tra le altre cose, prevede di aggiungere il supporto a VS anche nella versione free]). ScottGu ha infatti annunciato la volontà di rilasciare una versione ufficiale e supportata di .net core per linux e osx (http://weblogs.asp.net/scottgu/announcing-open-source-of-net-core-framework-net-core-distribution-for-linux-osx-and-free-visual-studio-community-edition)

Che dire… senza parole.

posted @ 13/11/2014 2.22 by Roberto Sarati

SharePoint Hosted App - Ribbon Custom Action Icons

Dovendo realizzare una ribbon custom action su uno SharePoint online ho dovuto affrontare il problema di come caricare l'icona da mostrare sul bottone.

Chiaramente si può caricare sulla hosted app e far puntare il ribbon alla nostra immagine esterna, ma era una soluzione che non mi piaceva molto.

Ho trovato così un articolo che mostrava una soluzione più interessante, che sfruttava sostanzialmente la tecnica del Data Uri

Technorati Tags:

posted @ 07/11/2014 11.40 by Daniele Proietti

Libro Su Windows 8.1

Windows 8.1 è l’ultimo sistema operativo rilasciato da Microsoft. Vista la sua nuova veste grafica e le modifiche fatte al core può risultare di difficile utilizzo per l’utente medio

MANUALE WINDOWS 8.1per imparare a usare Windows 8 e sfruttarne tutte le potenzialità in ambito lavorativo e in ambito IT.

Windows 8.1. Reti, sicurezza, tecniche avanzate

di Adriano Arrigo (Autore), Marco Maltraversi (Autore)

LIBRO WINDOWS 8.1

Buona lettura.

posted @ 04/11/2014 12.03 by Marco Maltraversi

Svg Rendering Engine



Ieri avevo il problema di riuscire a salvare sul server, come png, un grafico prodotto da una libreria javascript (morris.js) in formato svg. Per risolvere questo problema ho utilizzato questa libreria https://svg.codeplex.com

posted @ 04/11/2014 8.45 by Alessandro Gervasoni

PostgreSQL sull'uso della funzione row_number()

Qualche giorno fa era nata la necessità di dovere modificare una funzione in PostgreSQL  rendendo parametrizzatile il tipo di ordinamento (ASC o DESC) finale del set di dati restituito in output.

La soluzione più semplice, ma probabilmente, meno efficiente era quello di rendere dinamico tutto lo script ed eseguirlo con il comando EXECUTE, parametrizzando l'ordinamento ed eseguendo il tutto all'interno della funzione stessa.

Per esempio:

CREATE OR REPLACE FUNCTION funct_1(IN p_1, IN p_order_type text)
  RETURNS TABLE( [. . .] ) AS
$BODY$
RETURN QUERY EXECUTE '
SELECT [ . . .]
FROM my_table
WHERE [. . . ]
ORDER BY col_1 ' ||  p_order_type || '
LIMIT 1
';
$BODY$
  LANGUAGE sql STABLE
  COST 100
  ROWS 1;

Ma questa è una delle condizioni dove le funzioni "window":
http://www.postgresql.org/docs/9.1/static/functions-window.html
possono venirci in aiuto.
In particolare quella che fa al caso nostro è: row_number() che si fa carico di numerare (partendo da 1) ogni riga del nostro set di dati, in base ad un ordinamento pre-impostato.

 
CREATE OR REPLACE FUNCTION funct_1(IN p_1, IN p_order_asc bool)
  RETURNS TABLE( [. . .] ) AS
$BODY$

SELECT [ . . .]
FROM my_table
WHERE [. . . ]
ORDER BY 
CASE
 WHEN p_order_asc THEN
  ( row_number() over (ORDER BY col_1 asc ) )   --L'ordinamento ASC viene garantito
--
dalla funzione row_number()
--applicato alla colonna " 'col_1' ASC "
 ELSE
  ( row_number() over (ORDER BY col_1 desc ) )   --L'ordinamento DESC stessa impostazione di quello ASC.
END
LIMIT 1
;
$BODY$
  LANGUAGE sql STABLE
  COST 100
  ROWS 1;


Faccio notare l'ordinamento:

ORDER BY 
CASE
 WHEN p_order_asc THEN
  ( row_number() over (ORDER BY col_1 asc )
 ELSE
  ( row_number() over (ORDER BY col_1 desc ) )
END

 

Il piano di esecuzione, senza l'utilizzo e con l'utilizzo della funzione 'row_number()'.
La differenza è minima, e lavorando su una migliore indicizzazione dei campi interessati, probabilmente si può ulteriormente migliorare.
Va considerato che il piano di esecuzione senza l'utilizzo della funzione  'row_number()' (il primo) è al netto del costo della funzione 'EXECUTE'.

 

Limit  (cost=445.73..445.73 rows=1 width=42)
  ->  Sort  (cost=445.73..446.16 rows=172 width=42)
        Sort Key: "timestamp", state_id
        ->  Index Scan using [...]  (cost=0.57..444.87 rows=172 width=42)
              Index Cond: (ad_id = 123)

Limit  (cost=455.55..455.56 rows=1 width=42)
  ->  Sort  (cost=455.55..455.98 rows=172 width=42)
        Sort Key: (row_number() OVER (?))
        ->  WindowAgg  (cost=451.25..454.69 rows=172 width=42)
              ->  Sort  (cost=451.25..451.68 rows=172 width=42)
                    Sort Key: "timestamp", state_id
                    ->  Index Scan using [...]  (cost=0.57..444.87 rows=172 width=42)
                          Index Cond: (ad_id = 123)
 

 

posted @ 02/11/2014 11.30 by pietro partescano

What is Markdown?

Markdown is a plain text formatting syntax designed so that it can be converted to html using a tool by the same name.

http://whatismarkdown.com

per window potete usare il seguente tool:

http://markdownpad.com

posted @ 29/10/2014 8.44 by Alessandro Gervasoni

Webcast: Vuoi essere uno sviluppatore software in Red Gate (UK)?


Red Gate Ingeniously Simple


Giovedi' 13 Novembre 2014


Sede:
evento online
Ora: 17:30 - 18:30
Speaker: Andrea Angella
Q/A: Jodie Pinkowski

Red Gate Software produce "ingeniously simple tools" per professionisti e sviluppatori Microsoft in tutto il mondo. L'azienda e' principalmente specializzata in MS SQL Server, Cloud, .NET e Oracle con l'obiettivo di diventare leader nel Database Lifecycle Management (DLM), la componente database dell' Application Lifecycle Management (ALM). Sviluppatori e DBA saranno in grado di trattare database come ogni altra parte dell'applicazione adottando processi di sviluppo moderni, come continuous integration e continuous delivery, per rilasciare spesso e in modo sicuro.

Stats board mounted (on velcro) and holders for pens and stickies are back up. We also grabbed a couple of pedestals for supplies. The sharp-eyed among you may spot the empty Rum bottle. We're now up to 4!

Per raggiungere questo obiettivo ambizioso, Red Gate e' anche alla ricerca di sviluppatori software italiani.

  • Ti sei mai chiesto come possa essere l'esperienza di uno sviluppatore software in UK?
  • Sei alla ricerca di un ambiente di lavoro piu' stimolante e gratificante che possa veramente farti crescere professionalmente?
  • Sei alla ricerca di un migliore bilanciamento tra lavoro e vita privata?
  • Stai considerando la possibilita' di fare una esperienza all'estero?

Andrea Angella e' un italiano che lavora in UK da 5 anni e presentera' tutti i vantaggi di lavorare in Red Gate dando risposta a molte delle domande che un italiano si pone prima di compiere il grande passo. Durante l'intero webcast, la responsabile delle risorse umane, Jodie Pinkowski, sara' a disposizione per rispondere direttamente alle vostre domande (Only In English).

Vi aspettiamo numerosi!

Iscriviti all'evento

posted @ 28/10/2014 16.49 by Andrea Angella

jsPDF

A HTML5 client-side solution for generating PDFs
http://parall.ax/products/jspdf

posted @ 27/10/2014 23.59 by Alessandro Gervasoni

“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

Latest Images

From Immagini
From Immagini
From Immagini
From Immagini
From Foto
From Foto
From Foto
From Immagini
From Immagini
From Immagini
From image
From post
From post
From Immagini
From Messaggi
From Sidebar