Una sinfonía en C#

Un pequeño aporte a la comunidad de habla hispana.

Links útiles para desarrollar en Windows 10

Les comparto un conjunto de links a recursos para desarrollar en Windows 10

image

Las herramientas

Desde acá se pueden descargar las herramientas de desarrollo incluídas las versiones gratuítas

Qué hay de nuevo?

En éste link encontramos qué podemos hacer con Windows 10, Universal app, Juegos.

Empezar a desarrollar

Éste link tiene recursos para empezar, qué usar, qué se puede hacer y más.

Diseñar Universal App

Si queremos aprender sobre lineamientos para que nuestra aplicación se vea bien en todas las plataformas éste es el link.

Cómo hago para?

Un listado de artículos y referencias para aprender a usar la API de Universal Apps.

Y cómo publico las aplicaciones?

Una vez que tengamos nuestra app lista para público podemos aprender a publicar desde este link.

Y los IT pro?

También hay recursos para la gente de IT en éste link.

Videos, Channel 9

El recurso principal si nos interesan los webcast y video tutoriales sobre todo lo relacionado con Windows muy recomendable.

Nos leemos.

Novedades de C#6: inicializar propiedaes

Esta versión de C# tiene muchas nuevas características muy interesantes, acá va la primera.

Ejemplo

Ahora podemos asignar un valor a una propiedad sin necesidad de declarar el backing field, o sea, en lugar de hacer esto:

private string name = "pedro";
public string Name
{
    get
    {
        return name;
    }
    set
    {
        name = value;
    }
}

Ahora podemos hacer esto

public string Name { get; set; } = "pedro";

Nos leemos.

Cómo instalar Live Writer en Windows 10

Hace tiempo que no posteo por varios motivos: vacaciones, cambios de proyectos y el más reciente: pasé a Windows 10 y no podía instalar Windows Live Writer, acá un resumen para hacerlo:

wlsetup-all.exe /AppSelect:Writer /q /log:C:\temp\Writer.Log /noMU /noHomepage /noSearch

Y en unos instantes lo instala, listo.

Les dejo el link a la nota original donde encontré la solución.

Nos leemos.

Testing continuo con Qunit, Phantom y Grunt

Voy a mostrar un lindo ejemplo de la combinación de tres herramientas:

  • QUnit
  • PhantomJs
  • GruntJs

La idea es utilizarlas en conjuto para poder hacer testing continuo, es decir, que mientras uno va programando (con TDD) los test se ejecuten automáticamente.

Las herramientas

Vamos a usar QUnit para el unit testing de Javascript, y PhantomJs para ejecutar los test sin necesidad del navegador, luego vamos a agregar GruntJs para que todo esto se haga automáticamente.

Si bien tal vez no sea la mejor forma de hacer esto, es un buen ejercicio de integración. Manos a la obra.

Qunit

Antes que nada vamos a crear un par de carpetas y agregar QUnit al proyecto, para esto creamos una página html con el siguiente contenido según se indica en el sitio de QUnit

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title></title>
	<link rel="stylesheet" href="../js/vendor/qunit/qunit/qunit.css"/>
	<script type="text/javascript" src="../js/vendor/qunit/qunit/qunit.js"></script>
</head>
<body>
	<div id="qunit"></div>
</body>
</html>

Vemos que funciona de maravillas

image

Con eso es suficiente, ahora vamos a escribir algunos tests para probar.

module("calculadora");

var calculadora = new Calculadora();

test("suma", function(assert){
	var resultado = calculadora.sumar(4,3);
	equal(resultado, 7);
});

Simple, creamos el objeto Calculadora y agregarmos al html de test la referencia al test que acabamos de crear y al archivo que contiene la calculadora.

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title></title>
	<link rel="stylesheet" href="../js/vendor/qunit/qunit/qunit.css"/>
	<script type="text/javascript" src="../js/vendor/qunit/qunit/qunit.js"></script>
	<script type="text/javascript" src="../js/calculadora.js"></script>
	<script type="text/javascript" src="fixture.js"></script>
</head>
<body>
	<div id="qunit"></div>
</body>
</html>

El archivo calculadora.js sería algo así:

Calculadora = (function () {

	var Calculadora = function () {};

	Calculadora.prototype.sumar = function (a, b) {
		return a + b;
	};

	return Calculadora;
}());

Si recargamos la página de prueba vemos que el test pasa

image

Ok, pero esto no es TDD, si quisiéramos hacerlo, escribiríamos el test primero, luego el método “sumar” y recargaríamos a mano cada vez la página de prueba, vamos a ver cómo hacemos para no tener que utilizar un navegador.

PhantomJs

PhantomJs es un navegador sin UI, es decir, no vamos a ver qué se muestra en pantalla, pero no importa, porque nos alcanza con que nos muestre un resultado por consola, para poder usarlo con QUnit, tenemos que utilizar un adaptador, que no es más que un Javascript que le dice a Phantom que cargue la página de test y muestre el resultado en la consola, algo así sería

image 

Para esto tenemos que instalar el paquete phantom de node y el paquete qunit-phantom-runner

npm install phantomjs
npm install qunit-phantomjs-runner

Y ejecutar

node node_modules\phantomjs\bin\phantomjs node_modules\qunit-phantomjs-runner\runner.js test\index.htm

Básicamente llamamos a Phantom le pasamos la ubicación del runner y después el nombre de nuestro archivo bajo test.

Bien, esto funciona, como imaginarán si un test falla nos lo indica, perfecto. Hasta ahora es lo mismo de antes pero sin llamar al navegador, faltaría hacer que se ejecuta cada vez que se modifica un archivo.

Ahora Gruntjs

Para esto vamos a usar la tarea watch de grunt y un pequeño gruntfile.js que diga que cuando cambie algunos de los archivos de testing se ejecute el comando anterior, algo así:

module.exports = function(grunt){
	grunt.initConfig({
		watch:{
			files:['test/*.js'],
			tasks: []
		},
		
	});
	
	grunt.loadNpmTasks("grunt-contrib-watch");	
};

Con esto configuramos la tarea watch, ahora falta invocar a Phantom, podemos hacerlo de varias maneras, en este caso voy a utilizar la tarea shell de grunt para hacerlo, y quedaría así:

module.exports = function (grunt) {
	grunt.initConfig({
		watch : {
			files : ['test/*.js'],
			tasks : ['shell:phantom']
		},
		shell : {
			phantom : {
				command : 'node node_modules/phantomjs/bin/phantomjs node_modules/qunit-phantomjs-runner/runner.js test/index.html'
			}
		}

	});

	grunt.loadNpmTasks('grunt-contrib-watch');
	grunt.loadNpmTasks('grunt-shell');
	grunt.registerTask('default', ['watch']);
};

Y eso sería todo, configuramos la tarea watch para que mire el directorio donde están los test (tal vez deberíamos agregar el directorio del código) y le decimos que ejecute la tarea shell que ejecuta el comando que invoca a Phantom.

Por último decimos que la tarea por defecto es watch y listo, ejecutamos

grunt

image

Y listo, mágico, cada vez que hacemos un cambio en algún archivo de test (o lo que queramos, claro) se ejecuta Phantom con el adaptador para QUnit y corre los test.

Dejo el link con el código funcionando en github.

Nos leemos.