[EVENTO] Windows Phone 7.5 Roadshow. Termino el show

Hola a todos!

Durante todo este mes de Noviembre se ha celebrado el Windows Phone 7.5 Roadshow en varias ciudades de España (Valladolid, Sevilla, Madrid, Barcelona, Bilbao, Santander, Palma de Mallorca y La Laguna). Personalmente he tenido el placer de participar en Madrid, Santander y La Laguna.

El Evento

Este último evento en la Universidad de La Laguna ha puesto el broche de oro a un Roadshow fantástico.

DSC_0030

Desde las 9 de la mañana, cerca de 100 personas estuvieron en la facultad de física y matemáticas acompañándonos a José Fortes, Alberto Díaz, Rafael Serna y a mí. Tengo que destacar la actitud abierta de la gente que allí estaba y sobretodo las ganas que se le veían de conocer la plataforma móvil de Microsoft. Sin lugar a dudas uno de los eventos más participativos de la gira, con preguntas y debates, pero sobre todo, con mucho “buen rollo” y ganas de aprender.

DSC_0054

Por mi parte pude impartir la keynote de introducción, ¿Por qué Windows Phone?, encargarme de las demos de Expression Blend y realizar una charla sobre Buenas prácticas y pruebas unitarias.

Como broche final, pusimos a todos los asistentes en pie y comenzamos con el concurso “Preguntón Mobile”, donde 5 ganadores se pudieron hacer con 5 Windows Phone (2 LG Quantum y 3 HTC Surround), también sorteamos 3 ejemplares de mi libro sobre Windows Phone 7.5.

Tenemos que agradecer a Intelequia Software Solutions su ayuda para poder celebrar el evento y a Atecre S.A. el patrocinio de la cena que, como no podía ser de otra forma, incluyó 3 Solomillos al Mango:

WP_000054

Lo no tan bueno

Pero no todo fue bueno en este evento. Debo recalcar que lo que escribo a continuación es tan solo mi opinión.

Y es que, después de conseguir llevar el evento a Tenerife, con el apoyo de Microsoft, Nokia, Plain Concepts, Intelequia y Atecresa, nos encontramos con una barrera donde menos nos lo esperábamos: La propia universidad de La Laguna. Porque si, este evento nos ha costado dinero, no solo no cobramos un céntimo, invertimos tiempo en prepararlo y planificarlo, nos desplazamos a Tenerife y ofrecimos un evento para universitarios, desarrolladores profesionales y emprendedores, si no que además la universidad NO QUISO colaborar con nosotros, poniendo como excusa que no era un evento de interés universitario y COBRANDO 300 euros por abrir la puerta de la sala a las 8 de la mañana y cerrarla a las 6 de la tarde. Esto sin incluir cafetería ni nada, solo el abrir y cerrar. Perdonadme, pero sinceramente me parece vergonzoso. Mientras que otras universidades punteras como la Universidad de Salamanca o la Universidad de Deusto de Bilbao se prestan a permitirte usar sus instalaciones porque comprenden lo importante de este tipo de eventos, en la Universidad de La Laguna se cierran en banda y, a nosotros que no ganamos nada con esto, nos cobran. Gracias a Intelequia que corrió con los gastos pudimos llevar adelante el evento, pero desde aquí va mi tirón de orejas para la Universidad de La Laguna y todos los responsables de esta decisión, desacertada y dañina para la comunidad de desarrolladores Tinerfeños.

Espero que en próximas ocasiones recapaciten, o podamos encontrar otros lugares donde realizar estas actividades sin tener que rendir cuentas a gente que se interesa más por cobrar 300 míseros euros que por dar oportunidades de aprender nuevas plataformas a sus estudiantes y a sus vecinos profesionales.

Conclusión

En conclusión, la gente salió muy contenta, como todo, no somos perfectos y seguro que hay mucho que se puede mejorar (aquí es un buen lugar para decirnos que piensas que debemos hacer mejor). Yo como ponente salí del evento particularmente contento, la interacción fue increíble, las preguntas y los debates me encantan y hubo mucho de ellos en el evento. Un gran agradecimiento desde estas líneas a todos los asistentes y un aviso: Volveremos!! Ya estamos en nuestra guarida secreta planeando el próximo evento:

Un saludo a todos y Happy Coding!

[Windows Phone 7.5] Nokia Lumia 800

Hola a todos.

Desde hace unas semanas tengo en mis manos el nuevo miembro de la familia Windows Phone, el Nokia Lumia 800. Aquí os dejo mis primeras impresiones. No pretende ser un análisis a fondo ni nada por el estilo, simplemente las cosas que mas me han sorprendido y algunos detalles del teléfono.

image

Lo primero que sorprende del Lumia 800 al cogerlo, incluso antes de encenderlo, es la sensación de robustez y el acabado final de su carcasa, la ausencia, casi total, de diferentes partes y es que este smartphone está creado a partir de un solo bloque de policarbonato, ni metal ni plástico, lo mejor de ambos. El policarbonato reúne la resistencia del metal y la ligereza del plástico en un solo material suave al tacto. A esta suavidad también contribuye en gran medida las curvas con las que ha sido diseñado, dando una sensación muy buena en la mano. Además la gama de colores (Azul, Magenta y Negro) le dan un toque de color al catálogo de Windows Phone. Mi Lumia 800 es negro, con un acabado mate, también he podido probar uno azul con el mismo tipo de acabado y es sorprendente lo bonito que es.

Cyan side rightCyan front

 

Quizás para mi gusto el punto flaco en este aspecto externo es la tapa superior para el conector micro usb, parece resistente pero por la experiencia con otros dispositivos estas tapas tienden a romperse, por ahora después de dos semanas sigue perfecta como el primer día y ajusta en su sitio sin mayor dificultad.

Una vez que encendemos el smartphone, lo primero que nos sorprende es la calidad de su pantalla de 3.7”, con tecnología AMOLED Clear Black. Hay que tener uno en la mano para poder comprender lo que os voy a contar: es imposible saber donde empieza la pantalla y acaba la carcasa. El negro que tiene es tan perfecto que no es posible distinguirlo y, además, provoca un efecto salvaje: el resto de colores se ven tan vivos que parece que los textos e imágenes son pegatinas. Te propongo un juego, en la siguiente foto: ¿Cual es el borde de la pantalla? Y ya te digo que no, no es el bisel redondeado donde se une con la carcasa de una sola pieza 🙂

image

 

En cuanto a potencia, el Nokia Lumia 800 va muy bien servido: Procesador de un solo núcleo de 1.4Ghz, el más rápido en todo el catálogo Windows Phone y 512Mb de RAM. Todo aderezado con 16Gb de almacenamiento no extraíble. Si con Windows Phone 7.5 en los terminales de primera generación como los HTC Trophy o Samsung Omnia 7 ya vimos como el rendimiento del sistema aumentaba notablemente, con el Lumia 800 el rendimiento es todavía mayor, los scrolls son fluidos y rápidos el cambio entre aplicaciones instantáneo y todo el sistema da una sensación de fluidez que hacen de su uso una experiencia agradable, sin llegar a recargarnos y entorpecernos con animaciones tediosas.

Otro punto a destacar del nuevo Nokia Lumia 800 es su cámara, de 8 megapixels, lo cual se está convirtiendo en un standard en la industria de smartphones y no es demasiado sorprendente. Lo que es sorprendente de esta cámara es su lente Carl Zeiss con gran angular. Cuenta con Flash LED dual y una amplitud de enfoque mínima de 10cm. Yo no soy un gran fotógrafo, pero me ha impresionado las fotos que puedes tomar con la cámara, incluso apuntando directamente al sol del amanecer:

WP_000025

 

Después de dos semanas con él, creo que este smartphone es un digno hijo de Nokia: robusto, sencillo y sorprendente en sus cuidados detalles. A los que erais fans de la compañía Finlandesa en su época dorada (Nokia 6600, N90, N80, Communicator 9500…) No os va a decepcionar en absoluto. A los que busquen un nuevo terminal que ofrezca el mejor software y el mejor hardware, les encantará este nuevo Nokia Lumia 800.

A partir del 24 de Noviembre estará disponible en España, con un precio libre de 499 euros, lo cual no está nada mal para un teléfono con las prestaciones del Lumia 800. También se distribuirá con Vodafone, Orange y Yoigo, no se sabe nada (al menos yo no se nada) de Movistar (Tampoco os recomiendo esta última, después de ser la UNICA compañía del mundo que no ha entregado las actualizaciones de Windows Phone a tiempo).

Si estás en Tenerife y quieres verlo en persona y aprender de paso algo más sobre Windows Phone 7.5, este sábado estaré allí con mi ya inseparable Lumia 800 en el Windows Phone 7.5 Roadshow. Puedes registrarte aquí

Un saludo a todos y Happy Coding!

[Windows Phone 7.5] Localización de aplicaciones

Hola a todos!

Tras algo más de un año de vida de la plataforma Windows Phone, empezamos a poder ver que estrategias funcionan mejor a la hora de monetizar nuestras aplicaciones. En concreto existen dos parámetros importantes, que destacan sobre los demás a la hora de realizar esta monetización: las actualizaciones constantes y la localización de aplicaciones.

En este artículo vamos a centrarnos en el segundo, la localización de aplicaciones. En estos momentos los potenciales usuarios de nuestra aplicación en castellano es muy limitado. Sin embargo, el número de usuarios en otros idiomas como Inglés, Francés, Alemán o incluso Chino es mucho más alto.

La mayor ventaja de un marketplace como el de Windows Phone es el disponer de un canal de distribución internacional y amplio de nuestras aplicaciones. Pero si estas se encuentran solo en castellano, estamos eliminando esta ventaja. Además, en Windows Phone, es realmente sencillo internacionalizar nuestras aplicaciones. Vamos a ver como llevarlo a cabo.

Para empezar hemos creado una nueva aplicación muy simple: al iniciarse muestra un texto en pantalla:

<StackPanel>
    <TextBlock TextWrapping="Wrap"
                FontSize="{StaticResource PhoneFontSizeLarge}">
        <TextBlock.Text>
            Este es un ejemplo de texto no localizado, 
            el usuario que no sepa castellano no podrá
            disfrutar de nuestra aplicación al 100% y es
            muy probable que la descarte y use cualquier 
            otra en su idioma nativo.
        </TextBlock.Text>
    </TextBlock>
</StackPanel>

Que nos ofrece el siguiente resultado al ejecutarla:

image

Hemos escrito el texto directamente en XAML, por lo que nos encontramos con dos desventajas: en primer lugar, si ese texto exacto se necesita en varias partes de nuestra aplicación, deberemos escribirlo varias veces. Si necesitamos cambiar o corregir algo, tendremos que ir por todos los sitios donde se use haciéndolo. La segunda desventaja es que traducir el texto dentro del control directamente es más complicado y nos implica controlar por código el idioma y el texto a usar. En general, aunque no queramos tener múltiples idiomas, se considera una mala práctica usar texto directamente dentro de los controles de UI.

¿Como remediamos esto? En primer lugar vamos a añadir una nueva carpeta a nuestra solución llamada “Languages” y dentro de ella vamos a crear un archivo de recursos (resx) llamado Language.resx y otro llamado language.es-ES.resx:

image

Una vez hecho esto, vamos a abrir cada uno de los archivos y a establecer su Access Modifier a Public :

image

Dentro de cada archivo de recursos podemos crear una colección de Clave/Valor. En este caso, Name sería la clave para acceder al recurso y Value, obviamente, el valor del recurso. en la última columna Comment, podemos indicar un comentario para nosotros.

El truco a la hora de internacionalizar nuestra aplicación es crear un archivo de recursos neutral (Language.resx) que será usado siempre que no se encuentre un archivo de recursos para un idioma concreto. Para definir el resto de idiomas, creamos archivos de recursos que se llamen igual que el neutral, añadiendo el código ISO del idioma al final (por ejemplo Language.es-ES.resx para el castellano). En este ejemplo hemos decidido no usar castellano como idioma neutral, nuestro idioma neutral será ingles, por lo que no necesitamos crear un archivo de recursos Language.en-US.resx y los textos escritos en Language.resx estarán en inglés:

image

Es muy importante que el Nombre de cada recurso de texto sea igual en todos los archivos de recursos, en tiempo de ejecución pediremos un recurso por nombre y el sistema nos devolverá el valor dependiendo del idioma del sistema.

Ahora necesitamos una forma de acceder a estos recursos desde nuestro XAML para poder presentar el texto al usuario, para ello, necesitamos crear una clase que haga de wrapper y exponga nuestros recursos:

public class LanguageProvider
{
    public LanguageProvider()
    {
    }

    private Language actualLanguage;

    public Language ActualLanguage 
    { 
        get 
        {
            if (actualLanguage == null)
                actualLanguage = new Language();
            return actualLanguage; 
        }
    }
}

Simplemente tenemos un constructor público y una propiedad ActualLanguage que nos devuelve una instancia de Language desde la cual poder acceder al recurso deseado.

Ahora, vamos a referenciar nuestros archivos de recursos en los namespace de App.xaml:

xmlns:lang="clr-namespace:WP75Localization.Languages"

Y a crear un nuevo recurso, también en App.xaml:

<Application.Resources>
    <lang:LanguageProvider x:Key="Language"></lang:LanguageProvider>
</Application.Resources>

De esta forma, desde nuestra página, podremos usar una expresión de enlace a datos para acceder a una clave de nuestros archivos de recursos:

<StackPanel>
    <TextBlock TextWrapping="Wrap"
                FontSize="{StaticResource PhoneFontSizeLarge}"
                Text="{Binding ActualLanguage.Localized_hello, Source={StaticResource Language}}">
    </TextBlock>
</StackPanel>

Si nos fijamos en el atributo Text, veremos que simplemente hacemos un Binding al nombre de la clave que deseamos mostrar desde los recursos y a continuación le indicamos que la fuente será el resource que hemos creado en App.xaml.

Pero, si ejecutamos la aplicación, ya sea en un dispositivo en castellano o en el emulador en castellano, veremos que el texto aparece en inglés ¿Por qué?

Esto se debe a que debemos indicar en nuestra aplicación que idiomas soportamos. Para ello debemos editar el archivo de proyecto de la aplicación, haciendo click derecho sobre el nombre de proyecto y escogiendo la opción “Unload Project”:

image

A continuación volvemos a hacer click derecho y escogemos la opción “Edit [NombreProyecto.csproj]” lo que nos mostrará el XML de definición de nuestro proyecto. En este XML al principio, sobre la línea 19-20 encontraremos un nodo llamado SupportedCultures. Es aquí donde debemos indicar todos los idiomas adicionales que soportamos. En nuestro ejemplo, el archivo de recursos por defecto está en ingles y hemos añadido otro para soportar español, por lo que debemos incluir español como una cultura soportada:

<SupportedCultures>
  es-ES
</SupportedCultures>

Ahora solo tenemos que guardar los cambios, cerrar la edición y volver a hacer click derecho sobre el proyecto, esta vez escogiendo la opción “Reload Project” que volverá a cargar nuestro proyecto. Si ahora ejecutamos la aplicación sobre el emulador configurado en castellano o en un dispositivo en castellano, veremos que nuestro texto aparece con el idioma correcto:

image

Al indicar las culturas soportadas y crear archivos de recursos con esas culturas, automáticamente obtendremos el texto a mostrar en el idioma correcto, por lo que es muy sencillo traducir nuestras aplicaciones y un “must have” si queremos triunfar en el marketplace.

Idiomas no soportados

Aunque tenemos soporte para los principales idiomas del mundo, en España encontramos una situación peculiar. No tenemos una sola lengua, existen regiones con su propio idioma muy utilizado como son Cataluña con el Catalán, País Vasco con el Euskera o Galicia con el Galego. Estos idiomas NO ESTAN soportados en el sistema, por lo que este proceso de internacionalización automático que hemos visto, no nos sirve, el usuario nunca podrá configurar el Euskera como idioma de su dispositivo por lo que, aunque lo incluyamos entre los idiomas soportados y añadamos un archivo de recursos con los textos en Euskera, nunca se mostrarán.

Pero no todo está perdido. Esta falta de idiomas no es un desprecio de Microsoft hacia los mismos. El proceso de añadir idiomas a una plataforma es complejo y debe estar perfectamente realizado, lo cual lleva tiempo. Es muy probable que en próximas versiones del sistema operativo veamos aparecer estos idiomas y podamos usarlos. Mientras tanto, nos toca esperar a la aparición oficial.

¿Y si no queremos esperar?

Bueno, si no queremos esperar Guiño, podemos usar un pequeño workaround para que al menos nuestra aplicación esté traducida a idiomas no soportados. para ello vamos a modificar la pantalla principal para que nos permita indicar que deseamos usar un idioma elegido por el usuario, no el del sistema. Vamos a realizar el ejemplo con Catalán. Lo primero que necesitamos hacer es modificar nuestra clase LanguageProvider para que podamos indicarle que deseamos usar un idioma forzado. También implementaremos el interface INotifyPropertyChanged para forzar el redibujado de la interface de usuario cuando forcemos el idioma:

public class LanguageProvider : INotifyPropertyChanged
{
    public LanguageProvider()
    {
    }

    private bool useCustomLanguage;
    public bool UseCustomLanguage 
    {
        get { return useCustomLanguage; }
        set
        {
            useCustomLanguage = value;
            RaiseChange("ActualLanguage");
        }
    }


    private Language actualLanguage;

    public Language ActualLanguage 
    { 
        get 
        {
            if (actualLanguage == null)
                actualLanguage = new Language();

            if (UseCustomLanguage)
            {
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ca-ES");
                actualLanguage = new Language();
            }

            return actualLanguage; 
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void RaiseChange(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

A continuación, modificaremos la UI para permitir establecer este valor:

<StackPanel>
    <TextBlock TextWrapping="Wrap"
                FontSize="{StaticResource PhoneFontSizeLarge}"
                Text="{Binding ActualLanguage.Localized_hello, Source={StaticResource Language}}">
    </TextBlock>
    <CheckBox Content="Forzar idioma"
                IsChecked="{Binding UseCustomLanguage, Mode=TwoWay, Source={StaticResource Language}}"></CheckBox>
</StackPanel>

Ahora solo necesitamos añadir el idioma catalán a la lista de idiomas soportados en el archivo de proyecto como hicimos antes con el Castellano:

<SupportedCultures>
  es-ES;ca-ES
</SupportedCultures>

Y por último tenemos que crear un archivo de recursos para los textos en catalán, al igual que ya hicimos para los textos en castellano e inglés:

image

Con todo este trabajo realizado, si ejecutamos la aplicación en el emulador o dispositivo en castellano obtendremos este resultado:

image

Y si marcamos el check “Forzar Idioma” obtendremos este resultado:

image

Ya tenemos nuestra aplicación localizada al Catalán, y nuestros usuarios pueden beneficiarse de usarla en su idioma nativo.

¿Que pasa con la certificación?

En las reglas de certificación de idiomas de Microsoft nos dicen que debemos establecer un idioma neutral, el que se usará si el resto de idiomas que soportamos no coinciden con el usado por el sistema (Ver aquí, punto 4.4 Language Validation) por lo que nada nos impide añadir idiomas a nuestra aplicación aunque no estén directamente soportados por el sistema.

Y hasta aquí el artículo de hoy. Os dejo el código fuente del ejemplo a continuación.

Un saludo y Happy Coding!

[EVENTO] Barcelona Developers Conference 2011: Windows Phone 7.5, Un Vistazo desde las trincheras.

Hola a todos!

Este jueves 17 he tenido el placer y la gran oportunidad de ofrecer una pequeña charla de 45 minutos en la Barcelona Developers Conference (BcnDevCon) sobre Windows Phone 7.5:

Creo que los asistentes pudieron, en el corto tiempo que teníamos, conocer las principales novedades de Windows Phone 7.5 y ver lo sencillo que es desarrollar para este sistema. Algunos incluso me comentaron lo bien que lo está haciendo Microsoft en cuanto a diferenciarse del resto de competidores y esto, viniendo de gente que trabaja activamente con android e iOs es siempre bienvenido.

También quería felicitar a la organización del BcnDevCon, creo que sin duda ha sido un gran éxito!!

Por último os dejo las ppts del evento y el código de las demos. Espero que lo disfrutéis y que nos veamos de nuevo pronto por Barcelona:

Un saludo y Happy Coding!

Community Day 2011 & Windows Phone Hack–a- Thon

Hola a todos!

Este fin de semana he tenido la suerte de estar en el Community Day, un evento de Microsoft donde miembros de la comunidad hemos podido compartir conocimientos, ideas e impresiones sobre las distintas tecnologías con las que trabajamos, conocernos en persona muchos que solo nos conocíamos por twitter y además aprender cosas nuevas gracias a las charlas organizadas sobre CQRS (Cesar de la Torre) MongoDb y Azure (Unai Zorrilla e Ibon Landa):

WP_000011

WP_000014

Todo esto el viernes. El sábado y el domingo estuve en el Hack –a- Thon de Windows Phone donde estuvieron MSPs venidos de toda la geografía Ibérica:

WP_000027

Tuve la suerte de poder dar una pequeña charla, de unos 45 minutos sobre MVVM y Unit Testing en Windows Phone 7.5. El domingo se presentaron 27 aplicaciones realizadas durante el Hack –a- Thon, con muy buen nivel por cierto, y se sortearon 4 Nokia Lumia 800 para las mejores 4.

Para terminar, solo para dar un poco de envidia, esta foto de las vistas desde el hotel:

WP_000025

Un saludo a todos y Happy Coding!

[Windows Phone 7.5] Windows Phone RoadShow 2011 – Tenerife

CÓMO DESARROLLAR Y PUBLICAR LAS MEJORES APLICACIONES Y JUEGOS DE WINDOWS PHONE

Hola a todos!

Desde hace unas semanas Rafael Serna y yo estamos peleando por llevar el Windows Phone RoadShow 2011 a Tenerife. Por fin, gracias a Intelequia, Microsoft Ibérica, SDM Programas y Plain Concepts se ha hecho realidad.

El día 26 de Noviembre estaremos Rafael Serna, Alberto Díaz y yo, en la Universidad de La Laguna para acercaros las últimas novedades de Windows Phone 7.5 “Mango”

Aquí podéis registraros y ver la agenda del evento:https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032499102&Culture=es-ES

Os esperamos el 26 para un día lleno de novedades! Happy Coding!

[EVENTO SECONDNUG] Movilízate con Windows Phone 7.5

Hola a todos!

Mañana día 8 de noviembre a las 19:30 de la tarde tengo la suerte de compartir unas horas con la gente de SecondNug para hablar sobre las principales novedades de Windows Phone 7.5, la última versión de del nuevo sistema operativo de Microsoft para smartphones.

Puedes registrarte pinchando sobre la imagen del evento.

Un saludo y Happy Coding!

[Artículo PCWorld] Windows Phone 7.5 Mango: ¿Una simple actualización?

Hola a todos!

En el número de noviembre (291) de PCWorld España han públicado un artículo que he escrito sobre Windows Phone. Esta vez dejamos un poco de lado el lado del desarrollo para, durante 4 páginas hacer un repaso a las nuevas características de cara al usuario de la última versión de Windows Phone.

image

 

Espero que os guste, Happy Coding!