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 - 31007
  • Articles - 310
  • Comments - 104128
  • Trackbacks - 590886

Bloggers (posts, last update)

Latest Posts

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

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

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