Datos locales en apps Windows Store (C#). Lectura y escritura de ficheros

Las aplicaciones Windows Store pueden, además de almacenar ficheros con clave valor o mediante serialización como hemos visto en otros artículos, trabajar directamente con ficheros en 3 carpetas que tenemos a nuestra disposición:

  • Local: Se almacena en un directorio local al cual solamente tiene acceso nuestra app.
  • Roaming: Se almacena de manera local, aunque esos contenidos se sincronizan entre los diferentes dispositivos que tengan nuestra cuenta live id. Si tenemos un juego, y queremos mantener el estado de la partida sincronizado, podremos usar esta carpeta.
  • Temp: Se almacena de manera temporal, y se pueden borrar cuando la app esté cerrada.

En este artículo veremos cómo acceder a los ficheros almacenados en estas carpetas, y como hacer operaciones de lectura y escritura en los mismos.

Sigue leyendo

Merges un poco más inteligentes para C#

Las operaciones de merge son muy comunes en los sistemas de control de versiones distribuidos, y si hay muchos cambios a nivel de pocos ficheros (equipos trabajando en una misma funcionalidad) podemos tener muchos conflictos. Para ayudar a mejorar la productividad en estas operaciones ayer hemos anunciado la disponibilidad a todo el público de la beta de SemanticMerge.

La idea es simplificar la resolución del conflicto entendiendo el código, resolviendo de manera automática aquellos en los que sea posible y permitir al usuario, de manera sencilla, encargarse de los conflictos restantes. En este artículo veremos de un vistazo la herramienta sus características, los casos que cubrimos y cómo la hemos desarrollado.

Una interfaz sencilla

La herramienta, formada básicamente por un panel donde se muestran los conflictos y diferencias, y un visor de código, permite por una parte resolver conflictos, y por otra ver en detalle los cambios sucedidos en cada fichero respecto a la base.

Para ayudar al usuario, cada conflicto tiene, en la cabecera, un campo identificado por una letra y un color por cada cambio que lleven al conflicto, en el ejemplo, un cambio concurrente en un método.

Semantic Merge tool

La magia

Para poder mostrar estos conflictos y resolver de manera automática aquellos en los que sea posible, analizamos los ficheros que el usuario nos pasa por parámetros, o a través de la pantalla inicial, si iniciamos sin parámetros (origen, destino y base).

Una vez hemos leído los ficheros y comprobado que no haya errores de análisis, creamos, para cada uno, un árbol semántico, similar a la ventana de clases que se puede ver en Visual Studio.

Semantic tree

Ya con estos árboles, comparamos el origen y el destino con la base para obtener lo que denominamos un árbol de diferencias. Finalmente comparamos estos árboles de diferencias para obtener los posibles conflictos y las diferentes formas de solucionarlos.

Escenarios

Hemos empleado cientos de horas de análisis, y procesado millones de repositorios para obtener las operacions y los conflictos más comunes, entre los que destacan:

  • Movidos divergentes: Si estamos haciendo refactor de nuestro código y movemos a diferentes partes del mismo (desarrollador A los prefiere por orden alfabético y desarrollador B los prefiere por orden de scope) detectamos el cambio y damos al usuario la opción de elegir.
  • Movidos/borrados: En caso de que un elemento (método, clase…) se haya movido en origen y se haya borrado en destino, lo detectamos y damos al usuario la opción de conservar el movido o el borrado.
  • Movidos + cambiados: En el caso de que un desarrollador mueva un método a otra clase y otro realice cambios en el mismo, se detectará automáticamente, y no habrá conflicto :)

Hay mucho más, disponible en semanticmerge.com

Integración

De momento, tenemos tutoriales sobre cómo integrarlo en Git, PlasticSCM, TFS y Perforce, y pronto deberíamos tener para Mercurial y SVN. Si usas otro sistema de control de versiones, avísanos!

Personalización

Mediante los parámetros de entrada, podemos especificar una herramienta de diff y merge personalizada, a través de los parámetros -emt y -edt de entrada. Además se puede especificar el tipo de fichero que estamos procesando aunque no tenga la extensión adecuada mediante el parámetro -t. En estos momentos el único lenguaje de programación soportado es C#, así que en este caso el único valor válido será text/csharp.

One more thing: Diferencias semánticas

Otra de las cosas que incorporamos es una herramienta de diff, que dados dos ficheros nos permite obtener las diferencias entre ellos.

difftool-included

Cómo se hizo

Aunque la idea ha estado en fase de análisis y diseño varios años, el desarrollo principal del proyecto se ha llevado a cabo en los úitimos 6 meses, en el que una buena parte del equipo de Códice ha estado implicada. Hemos estado divididos en dos grupos, uno encargado de las operaciones de merge y del backend de la herramienta, y otro grupo, que hemos estado cubriendo el diseño y la usabilidad de la herramienta.

Además, llevamos varias semanas usando la herramienta como herramienta de merge por defecto de manera interna, y las primeras betas privadas que distribuimos han tenido una acogida muy buena por parte de los voluntarios.

Bajo el capó

El lenguaje usado para todo el desarrollo de la app es C#, de ahí nuestro interés con que sea el primer lenguaje de programación soportado (llevamos semanas probando la herramienta a nivel interno).

La interfaz está desarrollada en WPF con algunos toques de Windows Forms, y para la ventana sin marco usamos la integración con Windows a través de Windows.Shell.

Las herramientas utilizadas han sido PlasticSCM como control de versiones, Visual Studio 2010 – 2012 como entorno de desarrollo y Blend 4 como herramienta de diseño de interfaces,

Pasos adicionales

Estamos en fase beta, con lo cual hay muchas cosas que pulir, además seguimos trabajando en mejorar la herramienta, la usabilidad, el diseño, la velocidad, así como el soporte para lenguajes adicionales y escenarios más complejos. Para ello hemos habilitado un portal en uservoice para recibir feedback de nuestros usuarios.

Desarrollo para Firefox OS: Primer contacto

See this post in english here

El pasado 20 de marzo tuve la oportunidad de asistir a los Firefox OS App Days de Valladolid, donde, tras unas cuantas sesiones de introducción, tuvimos un hackatón donde pudimos tener un primer contacto con la plataforma.

La plataforma

Firefox OS es, dicho de una manera sencilla, un núcleo de Android y un navegador, con lo cual todo el sistema, incluida la pantalla de inicio, están hechos en HTML5, CSS y Javascript. La diferencia fundamental con un navegador que se ejecute en Android o iOS, es que tenemos acceso mediante las API de Firefox OS a todas las funciones del teléfono, contactos, calendario, etc.

Desarrollo: Lenguajes, herramientas y simulador

El desarrollo es como el de cualquier aplicación web, es decir, HTML + CSS + Javascript, de manera que podemos extenderlo usando LESS, SASS, jQuery, Sencha… Para empezar no necesitamos más que un editor de texto y Firefox para depurar, ya que el motor de renderizado del teléfono es exactamente igual que el de la versión para escritorio.

Sin embargo, hay cosas que no se puedan probar en un navegador convencional, y para ello contamos con un simulador, que se instala como un complemento de Firefox y nos permite probar nuestras aplicaciones.

Building Blocks

Mozilla ha preparado, de manera adicional, algunas plantillas CSS para los elementos comunes (listas, botones, cabeceras, mensajes de diálogo) de manera que nuestra aplicación tenga un aspecto nativo y se integre con el estilo del sistema. Es importante destacar que tendremos que copiar manualmente los ficheros CSS, ya que de momento no contamos con ninguna plantilla vacía. 

Mi primer proyecto

Tras la sesión de introducción pasamos al hackathon, poco menos de dos horas para desarrollar una pequeña aplicación y empezar a trabajar. Mi primer proyecto consiste en una pequeña lista de tareas:

  • Los estilos están tomados del repositorio de Github de Gaia, que es como se llama la Interfaz de Usuario de Firefox OS.
  • Las animaciones y el cambio de página se hacen con una combinación de transformaciones CSS y Javascript, ayuda de los chicos de Mozilla y Telefónica I+D que estaban en el evento.
  • Para gestión de la lista he empleado knockout.js para gestionar la lista de tareas y el proceso de agregar una nueva.

El resultado es lo que se aprecia en las capturas de pantalla:

newTask mainWindow

Siguientes pasos

Esto es poco más que un hola mundo, para que la aplicación fuese funcional necesitaría guardar los datos, y se podría extender enlazando las tareas con acciones del calendario. Hay muchas cosas que se pueden hacer, y parece una plataforma interesante.

Enlaces

Desarrollando para Windows Phone 8, muchos errores y algún acierto

Este fin de semana he tenido la ocasión de desarrollar una pequeña aplicación de tareas para Windows Phone 8 para el concurso de desarrollo IAppYou. Como todo desarrollo, no ha estado libre de errores, así como de algún acierto que me gustaría repetir en el futuro, así que más que hablar de características o de cómo pasar información entre dos páginas, me pareció interesante compartir los aciertos, pero sobre todo, los errores.

Sigue leyendo

Presentamos GitSync: Ahora PlasticSCM habla Git

index

En Códice Software desarrollamos Plastic SCM, un sistema de control de versiones enfocado a un entorno corporativo, que comparte filosofía con sistemas como Git o Mercurial, al ser un sistema pensado para su uso de manera distribuida.

A diferencia de estos, contamos con una serie de características dirigidas a entornos corporativos, por ello, nos adaptamos a sus infraestructuras integrándonos con mecanismos de autenticación existentes como LDAP o Active Directory, así como los diferentes sistemas de bases de datos disponibles, desde soluciones embebidas como Firebird o SQL CE, hasta soluciones basadas en Oracle. Además tenemos nuestra propia capa de seguridad a nivel de repositorio, rama o servidor, de tal manera que se pueden aplicar permisos específicos a diferentes roles de usuarios (por ejemplo, la rama de integración solamente la pueden tocar los chicos de Dev-Ops).

Además contamos con una interfaz muy limpia, elegante y completa, así como integración con entornos como Visual Studio, Eclipse o InteliJ IDEA.

Siempre intentamos ir un paso más allá, y es por eso que presentamos GitSync, un sistema por el cual se puede sincronizar un servidor de Plastic SCM con un servidor remoto de git. Esto nos permite compartir con otros desarrolladores que usen git para trabajar, subir nuestro código a sistemas como Github o Bitbucket, y aprovechar servicios que son compatibles con Git, como es el caso de Heroku, AppHarbor o, recientemente, Windows Azure.

Esta sincronización es bidireccional, y continua, no se trata de un importador/exportador (aunque eso, también lo hacemos). Sincronizamos todo el repositorio: ramas, changesets y etiquetas

En estos momentos estamos en fase de beta privada, a la que se puede acceder en este enlace. Valoramos mucho el feedback de nuestros usuarios, y por ello regalamos un iPhone 5 a aquellos que nos ayuden a mejorar nuestra herramienta. Quieres el tuyo?

Evento: Desarrollo para Windows Phone 8

Hoy tengo el privilegio de poder asistir comp ponente al VallaHackatón, un evento de desarrollo acelerado de aplicaciones móviles, para hablar durante una hora de desarrollo para Windows Phone 8.

Veremos temas como:

  • Herramientas disponibles
  • Plantillas por defecto.
  • Integración con el teléfono.
  • Representación de datos.
  • Navegación entre páginas.

Todo esto mientras desarrollamos la que posiblemente sea la app más útil para Windows Phone, un gestor de tareas!

El código fuente y las slides estarán disponibles más tarde en este mismo artículo.

El VallaHackatón está organizado por los alumnos del Ciclo Formativo de Guía, Información y Asistencia Turística en colaboración con los alumnos de Desarrollo de Aplicaciones Multiplataforma, y junto a instituciones como la Junta de Castilla y León a través del programa de Datos Abiertos, la escuela universitaria de informática de Valladolid, el Centro de Innovación en Movilidad, empresas como Servilia o Códice Software, y grupos de trabajo como Urbapps.

Más información en: http://vallahackathon.es/

Logro desbloqueado: Microsoft Active Professional 2013

Microsoft ha concedido por quinto año consecutivo el diploma MAP, Microsoft Active Professional 2013, que se le otorga sólo al top 5% de la comunidad de Profesionales de IT que por su constante esfuerzo, participación y capacitación en tecnologías Microsoft se destaca por sobre el resto de los profesionales realzando día a día el valor de esta comunidad.

Este año tengo la suerte de formar parte de los galardonados (y a las pruebas me remito):

Diploma MAP 2013

Diploma MAP 2013