La palabra clave yield

La semana pasada el maestro Eduard Tomás propuso la solución del reto MSDN utilizando la palabra clave yield en un método para evitar el uso de una colección adicional.

¿Qué se esconde tras esta palabra clave?

El patrón Iterator

Si has escrito código C# alguna vez, ya conocerás las interfaces IEnumerable e IEnumerable<T> que permiten recorrer fácilmente una colección con la palabra clave foreach:

IEnumerable<int> list=new int[]{1,2,3,4};
//...
foreach (var value in list)
{
    //do something
}

Como veis en el ejemplo, este interfaz lo implementan todas las colecciones desde los tipos más básicos como el Array (aunque de una forma un tanto particular).

El interfaz sólo tiene un método, GetEnumerator que devuelve un IEnumerator, que nos devolverá una clase que es la que realmente sabe iterar sobre nuestra colección de elementos. Es el típico patrón Iterator del GoF (Design Patterns: Elements of Reusable Object-Oriented Software).

Sigue leyendo

Acerca de estos anuncios

Funcionalidades de Windows 10 en Windows 8

Hace dos días anunciaron Windows 10 y a partir de ayer por la tarde puedes participar en la preview como Insider. Puedes instalarla en una máquina virtual, pero yo ya la he instalado en una partición de mi portátil para conseguir la experiencia al 100%. Ya os iré contando, aunque os advierto que la pantalla de inicio era mi feature favorita de Windows 8 y no se cuanto tardaré en volver a activarla:
Use Start Menu in Windows 10
La cuestión es que hay mucha gente que no va a instalarse Windows 10 en su máquina de uso diario hasta que no sea una versión estable, pero eso no es obstáculo para poder tener algunas cosas que nos traerá Windows 10, aquí tenéis algunas utilidades para mejorar vuestro Windows 8 / 8.1 mientras acaban el nuevo:

  • Cortapega en la consola: en la nueva consola de Windows 10 ya podemos hacer copy/paste con CTRL+C y CTRL+V sin que nos aparezcan los dichosos ^C y ^V, pero hace mucho que existen consolas mejoradas que permiten hacer eso y mucho más. Mi favorita es ConEmu, tiene pestañas, corta/pega y hasta se pueden inyectar plugins.
  • Escritorios múltiples: en Windows 10 por fin tendremos múltiples escritorios. Aunque Windows tenía soporte nativo para esta característica desde hace tiempo, creo que Windows XP ya lo traía, y tenemos una herramienta del conjunto de SysInternals que nos proporciona 4 escritorios. Desktops v2.0, aunque en Windows 8.1 el botón de inicio sólo funciona en la pantalla 1, :( grrr.

Pues ahí lo tenéis, mientras tanto yo instalo Visual Studio 14 CTP 3 en Windows 10 a ver qué tal anda…

visual studio 14 in Windows 10

Inhabilitar la transición de entrada para algunos controles del Grid XAML

Las animaciones de entrada, salida, añadir elemento, seleccionar, ordenar, etc., que trae el SDK de la Tienda Windows aportan un toque de calidad a nuestras apps. Las páginas que creamos desde Visual Studio incorporan algunas transiciones por defecto, aunque en algunas ocasiones nos interesará inhabilitarlas.

Eliminar las transiciones de entrada de un Grid es sencillo, sólo tendremos que borrar la colección de transiciones que ya nos habrá añadido el SDK en la página y, por si acaso, asegurarnos que no queda ninguna:

Sigue leyendo

Migrando el tres en raya: Azure SDK 2.4, SignalR 2.1.1, Windows 8.1

El año pasado escribí una serie de tres artículos donde explicaba cómo crear un juego de tres en raya para jugar online en tiempo real, desde el navegador y también desde una app Windows 8. Como la tecnología avanza muy rápido, al cabo de un mes de escribir el artículo el código ya no compilaba con los últimos SDK. Así que, ahora que estoy de vacaciones me he dedicado a procrastinar y a actualizar alguno de mis proyectos personales para no tener que hacer lo que me había propuesto :). Aquí os dejo los pasos a realizar para migrar, aunque podéis descargar directamente el nuevo paquete aquí.

Como primer paso, conviene tener Visual Studio 2013.3 instalado y actualizar el SDK de Windows Azure al último disponible (2.4 por ahora).
Sigue leyendo

Kinect For Windows v2 ahora trae caras

facerecog

El nuevo SDK de Kinect trae unas cuantas cosas muy interesantes, como un editor de gestos (un gran ejemplo de para qué sirve el machine learning) y vuelve el reconocimiento de caras, una por cada usuario :).

No os esperéis que el SDK os reconozca a vosotros y os distinga de los demás, eso, por lo menos por ahora, lo tendréis que desarrollar (o adaptar) vosotros, o comprar alguna de esas librerías que funcionan tan bien. Trae 94 puntos de identificación para hasta 5 usuarios simultáneos. Lo que tendréis, en la versión simple, es la posición de ojos, nariz y boca del usuario.
Sigue leyendo

Tareas de fondo en aplicaciones universales

Hace unos días @johnnyjosep me preguntó cómo podía hacer en una aplicación universal para descargar nuevo contenido cada cierto tiempo sin tener la aplicación abierta.

Sí, os debo la serie de artículos sobre el caché de HTTP, aunque si os fijáis bien en este hay un pequeño ejemplo de uso de la cabecera If-Modified-Since.

La forma más eficiente de notificar a la aplicación que algo remoto ha cambiado, es utilizar un sistema de notificaciones push, estilo Azure Notification Hubs, pero como esa opción tiene un coste, también tenemos otra posibilidad más económica (para nosotros): crear una Background Task con un temporizador, que compruebe desde el cliente si el archivo ha cambiado.

Sigue leyendo

Caché HTTP de cliente en C# (1 de 4): aplicaciones de escritorio

Hoy en día es muy habitual utilizar contenido web en nuestras aplicaciones y eso penaliza el rendimiento. Para mejorarlo vamos a tener que almacenar en caché dicho contenido. Hacerlo bien no es difícil, pero es necesario conocer cómo funcionan los mecanismos de caché en la web y buscar dentro de la documentación de .Net cómo podemos aprovechar estos.

Upload / Download
Upload / Download por johntrainor, en Flickr

Como no soy el primero en tener la necesidad, existen algunas entradas en StackOverflow sobre el tema. Parece que la solución propuesta funciona bien, pero todas los que he visto se olvidan de algunos puntos importantes, como por ejemplo pedir al servidor si hay una versión actualizada del archivo, añadir técnicas de scavenging para que el contenido descargado caduque, etc. Además se olvidan de que el sistema operativo ya sabe cachear y es un poco raro que tengamos que volver a programar el caché que tan bien hacen los navegadores.

Te recomiendo leer el artículo hasta el final, pero si tienes mucha prisa puedes descargar el código de ejemplo en GitHub.

Sigue leyendo

Indice secuencial con Table Storage en Azure

Azure Table Storage es un sistema NoSQL de almacenamiento de tipo clave/valor. Es un sistema pensado para grandes volúmenes de datos distribuidos en alta disponibilidad y algunas cosas que son triviales hoy en día en un motor SQL estándar, en un NoSQL es muy posible que ni siquiera estén contempladas. Esto nos obliga a pensar en otras técnicas o incluso otras formas de almacenar los datos y sus relaciones.
Numbers

Hace unos días necesité un contador secuencial para almacenar en tablas del Table Storage. Ya se que muchos me diréis que no es lo más adecuado para el Storage, pero la secuencia es para mostrar por pantalla y resulta que los humanos llevamos muy mal el retener números de más de seis cifras.
Sigue leyendo

Roslyn en el Gusenet

El pasado sábado 26 de abril estuve en Torrevieja en el mayor evento de comunidad que se hace en España: Gusenet, con un nivel y número enorme de ponentes y no ponentes.
Tengo que agradecer a Pedro por convencerme la invitación a participar y a él, a Eladio y a Oscar por el currazo que se han pegado organizando y acompañando a tanta gente de un lado a otro.
Había un montón de charlas y todos los que ya han escrito sobre el Gusenet han comentado las que más les han gustado. El resumen es que todas eran muy buenas así que yo os voy a contar las que me perdí y me gustaría haber visto: llegué tarde a la charla de Luis Ruiz Pavón que al final fue sobre Clean Code y también a la de Isa y Toni sobre optimización de JavaScript, aunque vi algún teaser-tocino antes, espero poder ver esa charla algún día.

Isa, Toni y algunos más :) (Foto de @g_perales)


Sigue leyendo

Editar y continuar cuando modificamos el ViewBag en MVC

Hace años que podemos editar y continuar en Visual Studio cuando desarrollamos en ASP.Net con el IISExpress y cada día mejoran esta funcionalidad. En Visual Studio 2013 nos simplificaron la tarea habilitando la opción por defecto:
Edit and continue en Web
Aunque nada es perfecto y hay algunas ocasiones en las que editar y continuar no nos va a funcionar: si es async, si hay un lambda, etc. Uno de esos casos lo encontraremos al modificar el objeto ViewBag, pues es un objeto marcado como dynamic y por ahora no se puede modificar y continuar con este tipo de objetos mientras estamos en ejecución:
Edit and continue with viewbag
En este caso, aunque no nos servirá para todos los escenarios, podemos cambiar el objeto desde la Immediate Window e incluso añadir propiedades si es necesario:
Immediate Window dynamic properties