Radical: novità


Grandi novità per Radical che grazie al preziosissimo supporto di Micheal ha cambiato casa spostandosi da CodePlex a GitHub: https://github.com/RadicalFx/radical/

Il motivo è complessivamente semplice, è molto più facile gestire la collaborazione, abbiamo migrato i sorgenti, la documentazione esistente e tutti gli issue presenti (aperti).

Ne abbiamo approfittato anche per creare un gruppo su Google che può essere un ottimo modo per continuare il corposo lavoro che abbiamo iniziato con gli web cast: https://groups.google.com/forum/#!forum/radical-mvvm-framework/

.m

author: Mauro Servienti | posted @ martedì 15 aprile 2014 11.43 | Feedback (0)

C# vNext: “out parameter inference”


Attualmente sono veramente rognosi da usare, ma potrebbero diventare:

public class Foo
{
    public static void MyMethod( out Int32 x )
    {
        x = 12;
    }
}

Foo.MyMethod( out var bar );
bar...

Forse potremo dichiarare inline al metodo i tipi in out, sfruttando type inference e avendoli a disposizione nello scope, forse…

.m

Non tutte le feature che vediamo saranno sicuramente implementate, questi post sono basati sui draft pubblicamente disponibili al momento della scrittura

author: Mauro Servienti | posted @ mercoledì 9 aprile 2014 11.30 | Feedback (0)

C# vNext: “declaration expression”


Anche questa è una figata:

public class Foo
{
    public DateTime BornDate{ get; set; }
    public Int32 Age => DateTime.Now.Year - this.BornDate.Year;
}

Lasciamo perdere l’implementazione stupida, ma notiamo piuttosto che Age è una proprietà a tutti gli effetti, è una proprietà in solo get, il cui body invece di essere inutilmente verboso si limita ad una lambda.

Cosa è che la distingue da uno dei tanti tipi di delegato?

  1. il tipo di ritorno;
  2. il dettaglio, poco visibile al primo sguardo, che non ci sono parametri in ingresso alla lambda;

.m

Non tutte le feature che vediamo saranno sicuramente implementate, questi post sono basati sui draft pubblicamente disponibili al momento della scrittura

author: Mauro Servienti | posted @ giovedì 3 aprile 2014 11.23 | Feedback (0)

C# vNext: “ctor type inference”


Finalmente :-)

class Sample<T>
{
    public Sample( T data )
    {
    }
}

var instance = new Sample( "this type is infered" );

Non saremo più obbligati a dichiarare i tipi generici sui costruttori, rendendo di fatto utili le Tuple :-P

.m

Non tutte le feature che vediamo saranno sicuramente implementate, questi post sono basati sui draft pubblicamente disponibili al momento della scrittura

author: Mauro Servienti | posted @ lunedì 31 marzo 2014 13.16 | Feedback (0)

C# vNext: “null operator”


Questa invece mi piace un sacco, nonostante purtroppo non sia un’implementazione delle Monad in C#:

public class Foo
{
    public void Evaluate( Person person )
    {
        var number = person?.Addresses?.FirstOrDefault()?.StreetNumber;
    }
}

Se diciamo che, dato che StreetNumber è Int32, il tipo di “number” è Nullable<Int32> il resto direi che è abbastanza ovvio. Ci evita una valanga di noiose e rumorose “if”.

.m

Non tutte le feature che vediamo saranno sicuramente implementate, questi post sono basati sui draft pubblicamente disponibili al momento della scrittura

author: Mauro Servienti | posted @ giovedì 27 marzo 2014 11.10 | Feedback (2)

C# vNext: “params on IEnumerable”


Questa non mi piace, nel senso che non mi piace la keyword params in generale, sono più le volte che alla lunga mi ha dato problemi piuttosto che vantaggi, comunque:

public ckass Foo
{
    public void Evaluate( params IEnumerable<Whatever> data )
    {

    }
}

.m

Non tutte le feature che vediamo saranno sicuramente implementate, questi post sono basati sui draft pubblicamente disponibili al momento della scrittura

author: Mauro Servienti | posted @ lunedì 24 marzo 2014 10.03 | Feedback (2)

C# vNext: “expression bodied functions”


Questa è una figata:

public class Foo
{
    public Int32 Evaluate( SomeInput data ) => …;
}

Lasciamo perdere la non-implementazione , ma notiamo piuttosto che Evaluate è un metodo a tutti gli effetti, il cui body invece di essere inutilmente verboso si limita ad una lambda, in realtà è una espressione, non viene generato un expression tree, usa solo una sintassi simile a quella delle lambda.

.m

Non tutte le feature che vediamo saranno sicuramente implementate, questi post sono basati sui draft pubblicamente disponibili al momento della scrittura

author: Mauro Servienti | posted @ giovedì 20 marzo 2014 10.25 | Feedback (0)

Global Windows Azure Bootcamp 2014, Io ci sono, e voi?


Accorrete gente, accorrete!

“29 marzo 2014, Pordenone.

1nn0va e il Consorzio Universitario di Pordenone organizzano per il prossimo 29 marzo 2014 il Global Windows Azure Bootcamp 2014, evento che si terrà al Consorzio Universitario, in via Prasecco, 3/a, Pordenone.

Si tratta di una sessione sulla piattaforma di cloud computing di Microsoft, che segue il format creato dagli MVP mondiali su Windows Azure.

Particolarità è che l'evento sarà in contemporanea in oltre 100 location nel mondo, e quella di Pordenone del Consorzio Universitario è al momento l'unica location italiana.

Le sessioni quindi si caratterizzeranno come un giorno di approfondimento tecnico per aiutare migliaia di persone con lo sviluppo di applicazioni di cloud computing per Windows Azure.

Il taglio è principalmente da sviluppatore, ma non disdegnamo anche i professionisti dell'IT: infatti oltre a parlare di sviluppo di applicazioni per Windows Azure, parleremo anche di Office 365, Windows e Visual Studio On Line.

Per partecipare, è necessaria la registrazione gratuita qui.”

Ovviamente siete tutti benvenuti, io farò sparlerò, con Roberto, di tanta fuffa per dev :-)

.m

P.S. Roberto è quello serio del duo :-P

author: Mauro Servienti | posted @ venerdì 14 marzo 2014 9.39 | Feedback (0)

Node come semplice web server per file statici


Ultimamente mi sto dedicando molto allo sviluppo client con JavaScript e HTML, mi diverto, odio JavaScript, amo JavaScript e comunque mi diverto :-)

Una delle cose interessanti dello stack client side è che è totalmente indipendente da Windows come sistema operativo, quindi perché non sfruttare il dettaglio che il mio Mac, quando non uso la macchina virtuale, sta acceso almeno 12 ore a batteria, come ambiente di sviluppo per la parte client?

Un web server…

…purtroppo vi serve perché se da una pagina caricata dal browser con lo schema “file://” fate una richiesta http con lo stesso schema la richiesta viene bloccata, nella stragrande maggioranza dei casi, perché viene interpretata come una richiesta CORS che non è supportata su quello schema.

Perché quindi non sfruttare Node.js come web server da poter lanciare al volo in una qualsiasi directory, a prescindere dal sistema operativo?

var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs")
    port = process.argv[2] || 8888;

http.createServer(function(request, response) {

  var uri = url.parse(request.url).pathname
    , filename = path.join(process.cwd(), uri);
  
  path.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, {"Content-Type": "text/plain"});
      response.write("404 Not Found\n" + filename);
      response.end();
      return;
    }

    if (fs.statSync(filename).isDirectory()) filename += '/index.html';

    fs.readFile(filename, "binary", function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "\n");
        response.end();
        return;
      }

      response.writeHead(200);
      response.write(file, "binary");
      response.end();
    });
  });
}).listen(parseInt(port, 10));

console.log("Static file server running at\n  => http://localhost:" + port + "/\nCTRL + C to shutdown");

Salvando lo script ad esempio come server.js da un prompt/terminale potete fare lanciare Node.js digitando “node server.js” e ottenendo:

imagecapture

(Node.js in esecuzione in PowerShell su Windows a sinistra e in un terminale su OSX a destra)

.m

author: Mauro Servienti | posted @ giovedì 13 marzo 2014 10.13 | Feedback (2)

C# vNext: “getter auto-property”


Sulla falsariga della inizializzazione delle proprietà automatica sarà possibile inizializzare le proprietà automatiche in solo “get”:

public class Foo
{
    public String Bar { get; } = "hi, there!";
}

.m

Non tutte le feature che vediamo saranno sicuramente implementate, questi post sono basati sui draft pubblicamente disponibili al momento della scrittura

author: Mauro Servienti | posted @ mercoledì 12 marzo 2014 11.46 | Feedback (0)