Acerca de Roberto Luis Bisbé

Software Developer, Computer Engineering student

Datos locales en aplicaciones Metro (1 de 3, diccionarios)

Hemos visto en artículos anteriores que es posible acceder a datos de un servicio remoto usando WCF, pero también tendremos casos donde nuestra aplicación necesitará guardar datos de manera local, ya sean opciones de configuración o ficheros locales.

En este artículo veremos cómo guardar datos empleando una de las maneras que nos ofrece WinRT, a través de diccionarios.

Guardando los datos

En primer lugar, agregar la instrucción using Windows.Storage; al fichero, para poder acceder a los detalles de la clase.

Para guardar los datos iremos al método OnSuspending:

void OnSuspending(object sender, SuspendingEventArgs e)
{
    //TODO: Save application state and stop any background activity
}

Dentro de este método accedermos a la variable que contiene la información local de nuestra aplicación:

ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;

En esta variable podremos, entonces, asignar los valores a la misma de esta manera:

localSettings.Values["tipoEntero"] = 10;
localSettings.Values["tipoString"] = "Una cadena de texto";

Con estas líneas, los datos se guardarán cuando la aplicación salga de primer plano. Recordemos que la aplicación no recibirá ningún aviso cuando, por limitaciones de memoria u otras causas la aplicación se cierre.

Cargando los datos

Para acceder a los datos cuando se vuelva a cargar la aplicación, se puede emplear el método OnLaunched, que carga los contenidos que necesita nuestra aplicación, y posteriormente lanza la pantalla inicial:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    ...
}

La manera de acceder a los datos no podía ser más simple, una vez obtenida la variable localSettings como se ha mencionado anteriormente, se pueden acceder a los datos de la siguiente manera:

object valor = localSettings.Values["valor"];

//Importante comprobar si tenemos el valor, ya que si se intenta hacer un casting antes se provocará una excepción.
if(valor != null)
{
    //Operar con valor (casting, etc...)
}

Conclusiones

Almacenar claves y valores en Metro es una operación muy sencilla que nos permite almacenar las opciones de configuración de nuestras aplicaciones. No es la única, ya que se pueden almacenar y cargar ficheros de texto, o usar estructuras más complejas, dejando esto último para el próximo artículo.

Como extra interesante se recomienda comprender cómo funciona el ciclo de vida de una aplicación Metro, para lo cual recomiendo este artículo de Josué Yeray, donde explica con detalle los diferentes escenarios que se pueden encontrar.

Referencias

Los lenguajes de la web, resumen y materiales

El pasado viernes 13 de abril estuve en la UAM hablando de otros lenguajes de programación y marcado que podemos encontrar en la web dentro del marco de las Jornadas de desarrollo web 2012.

La web no deja de ser una inmensa torre de babel, con muchos lenguajes y mucha gente que programan desde CGIs hasta aplicaciones en Rails, y es bastante útil conocer qué tecnologías y qué lenguajes mueven la web hoy.

Dejando de un lado los pesos pesados como PHP, Java EE o .NET, que (bajo mi opinión) debería de ser obligatorio su conocimiento a gran escala en la carrera de informática, en la charla me centré en algunos menos conocidos pero a su vez muy usados: Ruby, Python, Javascript y Scala:

Javascript, el lenguaje que nos permite hacer páginas bonitas, y que no tiene nada que ver con Java, tiene además una versión de lado de servidor llamada node que permite hacer acciones como servir una web evitando el coste de generar un nuevo proceso. Soporta de una mejor manera la concurrencia y podemos usarlo para procesos con un alto grado de interacción (como un sistema de chat).

Python, la navaja suiza, un poco más a alto nivel que la BASH de unix y más a bajo nivel que un lenguaje de programación tradicional, permite hacernos nuestras utilidades para el procesamiento de información. Es un lenguaje de programación multiparadigma, que permite usar programación estructurada, funcional u orientada a objetos, dependiendo del tipo de proyecto. Permite, además, el uso de varias bibliotecas matemáticas, así que para aplicaciones científicas en base web, es nuestra herramienta.

Ruby, un lenguaje mágico, con un elevado nivel abstracción, se ha ganado un puesto entre los grandes por la facilidad de su aprendizaje, por su sistema de gestión de paquetes llamados gemas, y por frameworks como Sinatra o Rails, que permiten el desarrollo rápido de aplicaciones (o RAD).

Scala, feo, funcional, e increiblemente potente, tiene una curva de aprendizaje considerablemente mayor que los otros lenguajes vistos, pero sin embargo, la compensa con la posibilidad de interactuar con clases de Java (ya que se ejecuta sobre la JVM) y con un rendimiento muy bueno para análisis de datos (por ello lo usan en Twitter para manejar el tráfico constante de información que tienen).

Como aparte, vimos un par de lenguajes de marcado, Haml, que permite sustituir el html por una manera más simple de definir las marcas, y Razor, que hace todo lo contrario, aprovechar el HTML que tenemos (estático) e introducir la información dinámica de manera poco invasiva.

Cerramos la charla hablando de JSON, por qué es popular, y cómo se diferencia de XML en la transmisión de datos, como se puede ver en los siguientes ejemplos usando la API de Twitter:

Aquí dejo la presentación original:

Evento: Metro en Valencia

El pasado 3 de Abril me fui a la ETSE (Escola Tècnica Superior d’Enginyeria) de la Universidad de Valencia para hablarles de Metro, de desarrollo de aplicaciones para Windows 8, y de por qué es importante dar difusión al proyecto.

Tuvimos un interesante debate sobre qué tipos de aplicaciones encajan en la filosofía Metro y cómo un juego como Cut the Rope respeta esa filosofía, pese a que no tiene nada que ver con lo que esperamos de una aplicación de estilo metro, es decir, una tipografía clara, unos colores vivos, el número justo y necesario de opciones, entre otras.

Aquí dejo la presentación realizada con los ejemplos de código.

Ejemplos

Gracias a Samuel por la invitación y enhorabuena por la organización.

Cómo organizamos eventos en UAM.net, en 10 pasos

La experiencia de coordinador del dotnetclub y presidente de la asociación me ha permitido organizar un número ya considerable de charlas técnicas y eventos, y, tras casi 3 años al frente del club, van surgiendo ciertas consideraciones que, pese a no ser reglas de oro han ido funcionando.

1. Busca un buen equipo

La más importante de todas las que verás por aquí. Esto no se consigue en solitario ni de lejos, necesitas a gente que ayude, colabore y aporte ideas a las actividades, gente motivada y que se deje motivar, independientemente del tema de la charla. Estamos aquí todos para aprender, no lo olvides nunca, y de este trabajo en equipo, se aprende mucho.

2. Escoge un tema

Aunque pueda parecer trivial, la elección de un tema depende mucho del público, pero más aún de la época en la que estés. Si eres de una asociación de nueva creación, creo que puedes dejar la charla de Sharepoint para más adelante y empezar con algo más divertido como Robotics o Kinect.

3. El horario, ese gran desconocido

Asúmelo, alguien se va a quejar, y alguien no va a poder venir a la charla por la elección de la hora, eso siempre va a pasar. El problema es que cuando estás en una facultad (como nos pasa a nosotros) con 4 cursos diferentes de 2 planes de estudios, es muy difícil encontrar horarios que convenzan a todo el mundo. Prueba horarios diferentes, pivota, y sobre todo, pide feedback del público.

4. Cuidado con las fechas

La elección de una fecha es casi tan complicada como la de el tema en cuestión, ya que depende de: exámenes, entregas de prácticas, vacaciones, puentes, ganas de los alumnos… los mejores tiempos suelen ser justo después de una temporada cargada (fin de parciales o de finales de febrero, justo a la vuelta de semana santa, etc…). Otra cosa importante es intentar espaciar los eventos, es mejor tener un evento al mes durante 3 meses que tener 3 eventos en 1 mes y luego desaparecer.

5. Burocracia, ese proceso

Dependiendo de la universidad (y del estado de la asociación), para poder realizar una actividad necesitas autorización de junta de centro, delegación de alumnos, o similar. La solicitud de dicha autorización suele ir acompañada de una descripción (breve) de la charla que se va a impartir, información sobre el ponente y la persona responsable, así como la fecha y la hora. Esto puede tardar, así que hazlo lo antes posible.

6. Promoción, promoción, promoción

Una vez has pasado el “escollo” burocrático, es hora de empezar a promocionar la charla por tu cuenta, para conseguir que la gente se entere de la misma:

  • Si conoces alguien que sepa diseño gráfico, mételo en tu equipo!, e intenta conseguir que te haga un cartel para el evento.
  • Imprime los carteles y pégalos donde te dejen donde puedas.
  • Si tu facultad tiene lista de correo interna, úsala.
  • Crea/usa las cuentas de twitter, facebook, tuenti, la web de tu club, todo lo que tengas al alcance. Piensa que esta promoción es gratis.
  • Si conoces a profesores, intenta conseguir que se impliquen en la charla, que hablen de ella a los alumnos o incluso que vengan.
  • Promociona la charla por clases y laboratorios.

Poco a poco comenzarás a ver que el tiempo que le dediques a la promoción será menor conforme avanza el curso, porque los interesados seguirán viniendo a las charlas, aunque es importante que, al menos para los primeros eventos, la gente se entere.

7. El ponente

Lo normal cuando se empieza en un dotnetclub, es no saber nada de nada. Por suerte, la infraestructura nacional permite ponerse en contacto con alumnos de otras universidades, que vengan a contar sus experiencias, o con profesionales miembros del programa MVP, a los que puedes recurrir si necesitas que alguien que sabe mucho te cuente algo de un tema. Son gente muy cercana que están al alcance de un tweet.

Poco a poco y ganando algo de experiencia podrás empezar a dar charlas con el equipo interno, y entonces será mucho más divertido, pero es importante saber que podemos recurrir a compañeros de otras universidades o profesionales.

No está de más decir que es necesario mimar cuidar al ponente (botellín de agua mínimo) aunque sea compañero de la facultad, ten en cuenta que viene gratis ;) .

8. La hora de empezar

He de reconocer que en esta soy aún muy malo, pero siempre es importante presentar al ponente (tú eres una cara más o menos conocida, y puede que para el ponente sea su primera vez en tu facultad), presentarte y presentar a la asociación, ya que quieres que haya cierta continuidad tras el evento, que la gente se quede con vuestros nombres, y donde os puede localizar.

9. Durante la charla

En la charla el importante es el que la da, pero también es importante que el público se entere, se ve bien al final? se oye correctamente? la gente se está aburriendo?. También es importante anotar cuanta gente viene, de cara a estadísticas. Si tienes twitter, intenta comentar los puntos más importantes de la charla, ya que ayudará a que los que no han podido venir puedan tener algo de información del evento..

10. Reflexiones finales y estadísticas

Al finalizar la charla no olvides volver a agradecer la asistencia y tener en cuenta los comentarios que puedan surgir de los asistentes, si tienes previsto otra charla más adelante, es el mejor momento para promocionarla.

Además, puedes imprimir encuestas (que puedes hacer con cualquier editor de texto) para saber qué impacto ha tenido la charla de verdad, y contar con la opinión de la gente sobre la misma, tanto en aspectos técnicos como organizativos.

Conclusiones

Organizar eventos (aunque solamente sean de 1h) no es sencillo, pero es gratamente reconfortante cuando le sirve al menos a 1 sola persona (que puedes ser tú, por la experiencia de organizarlo). Si tienes más trucos o temas a tener en cuenta déjame un comentario.

Dedicado a Nacho, Moya y Carlos, por dejarse liar al principio de los tiempos, y a Álvaro, Jorge, Javi, Cris, Marina… por unirse a la fiesta ;)

Hablando de Metro con los chicos del Mad.nug

Ayer pude asistir a la reunión mensual del grupo de usuarios de .net, esta vez como ponente, para hablar sobre 3 puntos: qué es metro, cómo nos afecta y cómo podemos aprovecharlo.

Estuvimos revisando conceptos tan maravillosos como el de baldosas vivas (live tiles) los encantos (charms) o las notificaciones tostada (toast notifications) que confirman lo que ya sabíamos, que nos encanta poner nombres intraducibles a las cosas, para que haya que decirlo en el idioma de turno (no hablemos de la siesta, que daría para otro post).

El evento tuvo un público excepcional, abanderado por el gran @davidsb, evangelista de cualquier cosa que se programe y/o se compile. Vimos las características que hacen únicas las apps Metro, cómo programar un cliente simple de Twitter con ellas (cariñosamente: Tweetstalker) y cómo aprovechar las características especiales que nos proporciona Metro para dar ese toque de distinción a nuestras apps.

Ejemplos

En este enlace podrás descargar el ejemplo completo visto en la charla.

Slides

Además, dejo las transparencias empleadas (disponibles vía slideshare)

Enlaces

Finalmente, algunos enlaces sobre temas que comentamos en la charla.

Me queda pendiente un artículo “Cómo sobrevivir tus primeros 3 días con windows 8 y no morir en el intento” :)

Eventos esta semana: Windows 8 por partida doble!

Esta semana (mañana sin ir más lejos) estaré dando un par de charlas de desarrollo con Windows 8 en dos localizaciones muy singulares.

Primera Ronda: 12:00 en la E.U.I.

La primera, a las 12h en la Escuela Universitaria de Informática de la UPM (cómo llegar) donde la pasada semana se organizó el CodeMotion. En esta charla, organizada por el DotNetClub de la facultad, daremos una introducción a Windows 8, veremos los diferentes lenguajes, las herramientas y algunos ejemplos de aplicaciones qué podemos hacer en él.

Segunda Ronda: 19:00 en Microsoft Ibérica

La segunda charla, a las 19h, en las oficinas de Microsoft Ibérica (cómo llegar) en La Finca en el marco del grupo de usuarios .net de Madrid Mad.Nug hablaremos, tras dar una introducción al sistema, de en qué nos afecta la llegada de WinRT como desarrolladores, y cómo sacarle provecho a las mejoras introducidas tanto a nivel de interfaz, interacción con el usuario y a nivel de código interno. Dejo el enlace de inscripción al evento (recomendable para agilizar el proceso en recepción) así como cómo llegar.

Más información y registro: Mad.Nug

CodeMotion, la torre de babel de los lenguajes de programación

El pasado sábado 24 de marzo, tuve la oportunidad de asistir a CodeMotion, un evento por y para desarrolladores que lleva 5 años triunfando en Italia y que engloba prácticamente todas las plataformas conocidas (.NET, Java, Ruby, Python, Obj-C, Javascript…) y otras tantas que escapan a mi comprensión.

Desde las 9 AM hasta pasadas las 7 PM estuvimos absorbiendo conocimientos más de 1000 asistentes, en charlas que fueron, como en todo evento de gran escala, de todo tipo, muy buenas, buenas, regulares y malas.

Además de ello, contamos con la presencia de patrocinadores la mar de interesantes, entre los que estaban Microsoft, Tuenti, Amazon, Atlassian o Telefónica I+D, entre las más conocidas.

Entre las charlas y los temas que pude ver, estuvo (cómo no) Windows 8 con Javascript, paralelismo con .NET, usabilidad a la hora de crear APIs REST, servicios web usando Groovy, un lenguaje de la máquina virtual de Java muy parecido a lenguajes como Ruby o Python, y el cierre con la charla (awesómica) de David Bonilla, sobre cómo podemos convertir productos en plataformas, y cómo (como plataforma) establecer una relación con nuestros “desarrolladores”.

Ha sido una experiencia muy enriquecedora, ya que de vez en cuando es bueno salir de nuestra zona de confort, y aprender lenguajes nuevos, o nuevas maneras de comunicar ;). Me quedo con el objetivo global del evento: juntarnos a todos, independientemente del lenguaje que hablemos, en una torre de babel del mundo de la informática.

Espero que el el próximo año se repita, y poder asistir una vez más.

Navegación entre páginas con Metro en C#

Salvo que estemos desarrollando una aplicación tremendamente sencilla, siempre tendremos la necesidad de cambiar entre diferentes ventanas de la misma. En este artículo hablaremos de navegación entre diferentes páginas de una misma aplicación Metro.

Introducción

Las aplicaciones en Windows 8 se caracterizan por tener una única pantalla mostrándose cada vez, siguiendo el estilo Metro, esto no implica que nuestras aplicaciones tengan que tener solamente una página, sino que tendremos que contar con un flujo de navegación, como muestra la siguiente imagen:

Flujo de navegación en una aplicación Metro

Flujo de navegación en una aplicación Metro

La primera idea de cómo ocurre la navegación la vemos en el proceso principal que carga la misma (situado en App.xaml.cs) y que contiene el método OnLaunched, que establece la página principal. Se genera una primera instancia del marco principal (Frame), y mediante este marco se navega a una nueva página, que es del tipo BasicPage1, que es la que se solicita en este caso como página principal.

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    // Create a Frame to act navigation context and navigate to the first page
    var rootFrame = new Frame();
    rootFrame.Navigate(typeof(BasicPage1));

    // Place the frame in the current window and ensure that it is active
    Window.Current.Content = rootFrame;
    Window.Current.Activate();
}

Para realizar la navegación entre varias ventanas de una aplicación se podrá reusar parte de este código, como muestra la siguiente línea, que se puede introducir dentro del cuerpo de cualquier función como resultado de la acción de un botón, por ejemplo.

    this.Frame.Navigate(typeof(Page2));

Al ejecutarse esta función, se selecciona la página actual, seguidamente se recupera el Frame correspondiente (que hemos visto cómo se creaba anteriormente) a partir del cual se navega a otra página, en este caso definida como Page2.xaml.

Entrada y salida en las páginas

Al igual que con Windows Phone (como comentábamos en este artículo), al navegar hacia o desde una página se ejecutan los comandos:

  • OnNavigatedTo (al convertirse en la página en primer plano)
  • OnNavigatedFrom (al abandonar el primer plano)

Este método nos puede ser de utilidad para realizar carga de datos, o para guardar el contexto actual al abandonar la misma.

Parámetros

Otra de las características de la navegación entre las diferentes páginas de Windows 8, es que permite el paso de parámetros de una manera bastante más sofisticada que la que comentábamos anteriormente con Windows Phone 7, y es que permite pasar, como parámetros, cualquier clase de objeto, como se muestra en los siguientes ejemplos:

Página origen, se pasa como parámetro una cadena de texto:

    this.Frame.Navigate(typeof(OtraPagina),"Estamos pasando un texto");

Página destino, se recupera el parámetro enviado y se hace un casting a string para operarlo como cadena.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string name = e.Parameter as string;
}

Conclusiones

La navegación entre páginas en una aplicación Metro nos proporciona una capa más de abstracción para el desarrollo de Software, de la misma manera que se nos proporcionaba con Windows Phone. Podemos además agregar opciones de navegación como Back, Home y similares, que se proporcionan con las plantillas incluidas en Visual Studio 11 Express for Windows Phone.

Más información

En MSDN:

Peticiones web con SSL desde C#

Cryptographically secure pseudorandom number g...

Una de las acciones que pueden resultar más comunes es hacer una petición de cualquier tipo a una web, ya sea por un servicio web o para obtener directamente el volcado de una página. Para ello se emplean las clases WebRequest y WebResponse

Lo interesante es que ambas clases poseen soporte para SSL de manera nativa, así que si, por ejemplo quisieramos hacer una petición al servidor www.servicio.com, podríamos formar nuestra petición de esta manera:

string url = "https://www.servicio.com/";
/*Nótese la s al final de http*/
WebRequest request = WebRequest.Create(url);
WebResponse ws = request.GetResponse();

Una vez se reciba la respuesta, podremos tratar el resultado de la manera más específica para nuestro problema. El hecho de que especifiquemos que queremos usar una conexión HTTPS hace que automáticamente se pase a ejecutar usando encriptación SSL.

El problema puede surgir cuando accedamos a un servicio que tenga un certificado no válido (por ejemplo, estemos usando un servidor de pruebas con un certificado autogenerado). Si ejecutamos este proceso para un servidor de estas características obtendremos una excepción parecida a esta:

El certificado remoto no es válido según el procedimiento de validación.

Esto ocurre al no encontrar una entidad de confianza que valide la información de nuestro servidor, aunque podemos evitar dicho error declarándolo explícitamente antes de la petición.

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);


public static bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)        
{
    return true;     
}

Al ejecutar el código, veremos como ya no tenemos dicho problema.

Sinatra, un framework web para Ruby

sinatra logo

Ruby es un lenguaje de programación que se ha hecho tremendamente conocido (de hecho es el lenguaje más usado en los repositorios de GitHub en estos momentos), Es un lenguaje dinámico y orientado a objetos que es sencillo de aprender. Además, posee diversos frameworks que lo convierte en un lenguaje potente para desarrollar aplicaciones web.

Uno de estos frameworks toma el nombre del célebre artista Frank Sinatra. Se usa en la actualidad por empresas como la BBC o la propia GitHub. Es tremendamente potente y bastante más sencillo que Ruby On Rails, más conocido y complejo. En este artículo veremos una brevísima introducción a qué es trabajar con Sinatra.

Instalación

Lo primero que necesitamos es una instalación de Ruby, para lo cual tenemos varios enlaces en su página oficial dependiendo de nuestro sistema operativo. Una vez instalado ruby podremos agregar nuevos paquetes usando RubyGems, y deberemos ejecutar el siguiente comando desde nuestra consola:

$ gem install sinatra

Descifrando el Hola Mundo

El hola mundo que nos ofrece el framework es muy sencillo, y es lo que podemos encontrar en la página principal. Acudimos a una carpeta cualquiera de nuestro sistema, y creamos un fichero llamado hi.rb:

require 'sinatra'

get '/hi' do
  "Hello World!"
end

Para ejecutar esta aplicación solamente tendremos que escribir el siguiente comando en nuestra terminal:


$ ruby -rubygems hi.rb
== Sinatra has taken the stage ...
>> Listening on 0.0.0.0:4567

A continuación se cargará el servidor de desarrollo de ruby, y solamente tendremos que acudir a localhost:4567 y ver nuestra página en funcionamiento.

El primer valor que se muestra es el comando HTTP al que responde (si recordamos este artículo los diferentes comandos HTTP son get, post, put, delete… ) con lo cual podemos hacer que nuestra aplicación responda a una petición en concreto, lo cual nos puede ser de gran utilidad si estamos desarrollando cualquier tipo de servicio web.

Además de mostrar código, podemos hacer uso de los diferentes motores de visualización que soporta. Uno de ellos se conoce como erb (acrónimo de embebed ruby), y permite tener en una página HTML código ruby.

Para ello editamos nuestra aplicación y agregamos el siguiente código:

...

get '/hello/:id' do
  @name = params[:id]
  erb :hello
end

Además necesitamos crear una carpeta llamada views (que contendrá las vistas de nuestra aplicación) y agregar el fichero, que tendrá extensión erb.



</pre>
<h2>Hello</h2>
<pre>


Esto no es del todo cómodo ya que nos obliga a repetir el código de marcado para cada vista que queramos tener en nuestra aplicación, sin embargo lo que podemos hacer es tener una plantilla que inserte cierto código antes y después de la vista, para lo cual usamos un fichero llamado layout.erb que contendrá la estructura básica del sitio, y actualizaremos el código para mostrar esta diferencia.


    
    

 


El código anterior contiene una etiqueta, yield, que especifica donde se ha de cargar el código específico de nuestra vista. El fichero de la vista actualizado contendría la siguiente información:

</pre>
<h2>Hello</h2>
<pre>

Con esto seríamos capaces de crear un portal básico que responda a ciertos parámetros de entrada.

Pasos adicionales

Tenemos mucho más que poder agregar a nuestra app: Modelos de datos con DataMapper, autorización con Warden, posibilidad de devolver los resultados en formato json (y usarlo entonces como un servicio web)… Las posibilidades son infinitas, pero todo comienza con get “/hi”….

Más información