Categoría: Novedades

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

Anuncios

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

Build 2014

Los nuevos SDKs: Roslyn, SIMD, Windows Phone 8.1, .Net Native…

Build 2014El evento Build de estos días está trayendo una cantidad de novedades en desarrollo que no tenemos tiempo de digerir, hay incluso algunas sorpresas que tenían muy escondidas en el roadmap como la apertura open source del compilador Roslyn.
Sigue leyendo

MVP Visual C# 2014

Microsoft Most Valuable Professional
2014 va a ser un año lleno de retos, algunos de ellos ya los tenía en mi lista de propósitos y despropósitos, pero el día 1 de enero recibí el correo que me anunciaba mi nombramiento como MVP de Microsoft® en el área de Visual C#. No te esperas recibir un email así, el primer día del año, durante una de esas largas comidas familiares. Casi me atraganto con los polvorones 🙂

Sé que algunos de vosotros os alegraréis de que “vuelva” al C#, los que leéis mi blog o habéis venido a alguna de mis últimas charlas, sabréis que llevo una temporada escribiendo más sobre JavaScript que sobre C#. Aún así en mi día a día C# sigue siendo mi lenguaje favorito y es el más utilizado en todos los proyectos que desarrollamos en el MICTT. Tengo un montón de temas sobre los que quería hablar y ahora tengo un motivo más para seguir compartiendo todo lo que estamos construyendo en el MICTT con PCL, IOC, TDD y todas las demás siglas que tanto nos gustan como KISS, DRY, YAGNI y PEBKAC.

Nos vemos muy pronto en Netsaimada. ¡Gracias!
Juanma

Cambios en la publicación de Juegos para Windows Store

Si habéis publicado algún juego en la Tienda Windows sabréis que hace falta un archivo GDF para la clasificación por edades en los distintos países donde se publica la aplicación. También habréis sufrido la locura de tener que crear una dll de C++ para embeber el archivo GDF aunque vuestro juego esté hecho en C# o JavaScript.

Bien, pues hace muy poco han cambiado las reglas y el archivo GDF se sube a la tienda por separado, ya no hace falta generar la dll sino que al subir el paquete del juego a la tienda tenemos un lugar en el portal donde cargar el GDF y los certificados pertinentes:

Image

Cuidado con las instrucciones en la web en castellano pues todavía no se han traducido. En el msdn inglés ya lo tenéis: http://msdn.microsoft.com/en-us/library/windows/apps/hh465153.aspx

Las nuevas características de búsqueda en Windows 8.1

Windows 8.1 Preview presenta grandes novedades con respecto a la versión actual. Una que me ha chocado mucho es el nuevo sistema de búsqueda. Tiene cosas muy buenas y otras no tanto, pero tengamos en cuenta que todavía es una versión preliminar y puede cambiar mucho hasta el lanzamiento.

found dog

Desde el punto de vista del desarrollador, en la versión anterior era muy fácil y directo integrarse con el contrato de búsqueda; permitía a los usuarios buscar dentro de nuestra aplicación aunque ésta estuviera cerrada, haciendo que nuestra aplicación estuviera siempre presente.

Cookbook search old

A pesar de los esfuerzos de Microsoft por explicar las bondades del sistema de búsqueda, en el mundo real™ los usuarios no acababan de entender el sistema o simplemente no encontraban el botón de búsqueda dentro de la aplicación y pensaban que la aplicación no podía buscar. En las aplicaciones no había ninguna evidencia de que pudieran buscar y al final poníamos un botón dentro de la aplicación que abría el charm de búsqueda. Además, cuando empiezas a tener muchas aplicaciones que implementan el contrato de búsqueda la lista de posibilidades se vuelve demasiado larga para ser manejable.

Por este motivo y porque la funcionalidad del búsqueda dentro de cualquier aplicación sólo la utilizaba el 7% de los usuarios, el equipo de Windows decidió cambiar el sistema de búsqueda para mejorarlo y hacerlo más eficiente.

¿Dónde están las Apps?

El nuevo charm de búsqueda ya no muestra una lista de aplicaciones disponibles. En su lugar nos permite buscar dentro de todo el sistema, integrando los resultados del contenido indexado en nuestro equipo con otros datos devueltos por Bing, Xbox Music y otros.
Las aplicaciones antiguas que implementan el contrato de búsqueda de Windows 8 no perderán esa funcionalidad; podremos seleccionar la aplicación para que nos devuelva la página de resultados, pero sólo nos aparecerá esta opción cuando sea la aplicación activa y no estará seleccionada por defecto, pero esto último se puede cambiar.

cookbok search 0

Una vez seleccionada nuestra aplicación en lugar del “Search everywhere” podremos seguir usándola como antes, aunque no tendremos la posibilidad de cambiar a otra aplicación:

Cookbok search

¿Cómo haremos para que se pueda buscar dentro de nuestra aplicación desde cualquier sitio?

Está algo más escondido para nosotros, pero en realidad será mejor que antes, pues parece ser que podremos ofrecer resultados dentro de la búsqueda general. Todavía no está disponible en la preview que podemos probar ahora, si bien en esta charla del Build podemos ver cómo será.
Además, la funcionalidad “Search everywhere” permite encontrar nuestra aplicación si el usuario la tiene instalada y, como me suele ocurrir mucho, no recuerda exactamente el nombre:

search everywhere

¿Y cómo implemento ahora las búsquedas?

Podemos optar por seguir haciéndolo como antes o bien utilizar los nuevos controles y capacidades de búsqueda.

Charm de búsqueda

En el caso de que queramos seguir con la implementación antigua, lo recomendación es que pongamos un botón en la zona superior derecha que abra el charm de búsqueda, así nuestros usuarios sabrán que nuestra aplicación puede buscar. Al ejecutar el siguiente código, el charm estará enfocado en nuestra aplicación en lugar de en el “Search everywhere”, e incluso podemos poner un término de búsqueda por defecto:

Windows.ApplicationModel.Search.SearchPane.getForCurrentView().show("buscar...");

Todavía tenemos una opción mejor, hacer que el cuadro de búsqueda aparezca al empezar a escribir, tal como hacen las aplicaciones de calidad y la pantalla de inicio. El código para añadir esta funcionalidad es muy sencillo:

Windows.ApplicationModel.Search.SearchPane.getForCurrentView().showOnKeyboardInput = true;

El control SearchBox

Si queremos ajustarnos a las nuevas recomendaciones de búsqueda, el equipo de Windows nos lo ha puesto muy fácil. Tenemos un nuevo control de búsqueda que tiene eventos muy parecidos al contrato de búsqueda, pero es un control visual que podemos poner en nuestro UI, tanto para XAML como para HTML:

<div class="pagesearch" data-win-control="WinJS.UI.SearchBox"></div>

Una vez en nuestra página, podremos usar el código que utilizábamos antes en nuestro contrato de búsqueda que utilizaba la consulta:

var search = element.querySelector(".pagesearch").winControl;
search.onquerysubmitted = function (e) {
    console.log(e.detail.queryText);
};

Sólo que ahora tendremos que navegar nosotros a la página de resultados.

También podemos añadir sugerencias de búsqueda:

search.onsuggestionsrequested = function (e) {
    var query = e.detail.queryText.toLowerCase();
    var suggestionCollection = e.detail.searchSuggestionCollection;
    var suggestionList = ["Almería","Albacete", "Alicante"];
    for (var i = 0, len = suggestionList.length; i < len; i++) {
        if (suggestionList[i].substr(0, query.length).toLowerCase() === query) {
            suggestionCollection.appendQuerySuggestion(suggestionList[i]);
        }
    }
};

Activar el foco del control al usar el teclado en la aplicación:

search.winControl.focusOnKeyboardInput = true;

Y ofrecer resultados recomendados con imágenes y separadores para identificarlos del resto, lo que dará un toque de calidad a nuestra aplicación:

search.onsuggestionsrequested = function (e) {

    var queryText = e.detail.queryText,
        query = queryText.toLowerCase(),
        suggestionCollection = e.detail.searchSuggestionCollection;
    var suggestionList = [{
        name: "Almería",
        thumb: "http://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Bandera_de_Almer%C3%ADa.svg/200px-Bandera_de_Almer%C3%ADa.svg.png"
    },
        {
            name: "Albacete",
            thumb: "http://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Albacete-Bandera.svg/200px-Albacete-Bandera.svg.png"
        },
        {
            name: "Alicante",
            thumb: "http://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Flag_of_Alicante.svg/200px-Flag_of_Alicante.svg.png"
        }];

    for (var i = 0, len = suggestionList.length; i < len; i++) {
        if (suggestionList[i].name.substr(0, query.length).toLowerCase() === query) {
            if (suggestionCollection.size <2) {
                var reference = Windows.Storage.Streams.RandomAccessStreamReference.createFromUri(
                    new Windows.Foundation.Uri(suggestionList[i].thumb));
                suggestionCollection.appendResultSuggestion(suggestionList[i].name,
                    "El mejor resultado!", "id1", reference, "mejor resultado");
            }
            else {
                if (suggestionCollection.size == 2)
                    suggestionCollection.appendSearchSeparator("Más sugerencias");
                suggestionCollection.appendQuerySuggestion(suggestionList[i].name);
            }
        }
    }
};

sugerencias

Por lo que podemos ver es un control muy completo, que además cachea las últimas búsquedas para ofrecerlas también como sugerencia.

El indexador de Windows

Además del nuevo control de búsqueda, podemos añadir y consultar elementos con el indexador de Windows mediante la clase ContentIndexer. Antes de que os frotéis las manos como hice yo, leed la explicación que aparece en la documentación:

Content is separated per app package, per user, and a package can’t query another package’s data.

Podemos utilizar la potencia del indexador de Windows, pero sólo para y por nuestra aplicación, los datos que añadamos al índice son privados para nuestra aplicación y usuario.

Dicho esto,

  • La clase ContentIndexer nos permite añadir elementos al índice de Windows, de manera que podremos aprovechar la potencia del indexador de Windows dentro de nuestra aplicación. Por ahora el contenido que añadamos al índice será sólo para nuestra aplicación, el resto de las aplicaciones no pueden verlo.
  • También podemos añadir contenido indexado utilizando carpetas locales y creando ficheros appcontent-ms.
  • Con las clases del espacio de nombres Windows.Storage.Search podremos realizar búsquedas dentro del contenido indexado utilizando Advanced Query Syntax, pero sólo del contenido propio.
  • Todavía no sabemos cómo podremos hacer para aparecer dentro de las búsquedas generales de Windows Search.

Conclusiones

Tras estudiar el uso que hacían de la búsqueda los usuarios de las aplicaciones de la tienda Windows, el equipo de Windows se dio cuenta que sistema necesitaba un cambio. Este cambio ha tenido algunas consecuencias pero tenemos la promesa de que va a mejorar. Mientras tanto, ya podemos aprovechar la potencia que nos proporcionan los nuevos controles y funcionalidades del sistema de búsqueda.

Referencias

LongListSelector en Windows Phone

El primer paso de migración de nuestras aplicaciones de WP7 A WP8 es tan complicado como seleccionar Upgrade y apretar el botón de aceptar. Eso hará que la aplicación empiece a utilizar la potencia de WP8, pero todavía nos quedará algo de trabajo para refinar el cambio.
Uno bastante importante es el uso de listas, si queremos mejorar mucho nuestra aplicación tanto en rendimiento como en usabilidad es recomendable utilizar el control LongListSelector, es rápido y además permite la navegación en listas agrupadas por una cabecera:

LongListSelectorComo el control funciona exactamente igual que una ListBox e incluso que un ItemsControl nos bastará con sustituir un nombre por el otro y ya la tendremos en funcionamiento.
Podremos cambiar nuestro código:

 <ListBox ItemsSource="{Binding Items}">
     <ListBox.ItemTemplate>
         <DataTemplate>
            <!-- resto de nuestra plantilla -->
         </DataTemplate>
     </ListBox.ItemTemplate>
 </ListBox>

Por este otro y todo seguirá funcionando igual:

<phone:LongListSelector ItemsSource="{Binding Items}">
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
           <!-- misma plantilla que antes -->
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>

Además de este control, en el mismo espacio de nombres encontraremos otros controles que podremos ir sustituyendo por los que teníamos de WP7 y así podremos quitar la referencia a la librería Microsoft.Phone.Controls que sólo se usa para mantener la compatibilidad de código con las aplicaciones antiguas.

Windows Phone Toolkit para Windows Phone 8 y problemas con Nuget

Un pequeño apunte. Hoy estaba migrando una de mis apps a Windows Phone 8, en una de estas aplicaciones estaba utilizando el Windows Phone Toolkit, pero al intentar instalar la nueva versión desde Nuget me ha dado el siguiente error:


PM> Install-Package WPToolkit
Successfully installed 'WPtoolkit 4.2012.10.30'.
Successfully uninstalled 'WPtoolkit 4.2012.10.30'.
Install failed. Rolling back...
Install-Package : Could not install package 'WPtoolkit 4.2012.10.30'. You are trying to install this package into a project that targets 'WindowsPhone,Version=v8.0',
but the package does not contain any assembly references that are compatible with that framework. For more information, contact the package author.
At line:1 char:1
+ Install-Package WPToolkit
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Install-Package], InvalidOperationException
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

PM>

Me he ido a ver en la página del toolkit y ponía claramente que lo habían actualizado a WP8, así que el problema debía estar en otra parte… me faltaba actualizar el Nuget que viene con VS11, el SP1 no lo incluía. Una vez actualizado ya he podido actualizar el WPToolkit y ya funciona todo de nuevo :).

Versión de evaluación de Windows 8 para desarrolladores

Windows 8 Hi

Ahora que el Windows 8 está recién salido del horno y disponible para desarrolladores con una suscripción MSDN o TechNet, empezarán a surgir muchísimas aplicaciones en el Windows Store.

También están listas las herramientas para la versión definitiva; son las que tendremos que usar para poder publicar una aplicación en el Windows Store y son gratuitas.

Los que no dispongáis de una suscripción MSDN y no podáis esperar a comprar la actualización, podéis descargar una versión de evaluación de 90 días.

Ah, y para el desarrollo web tenemos Visual Studio 2012 Express for the Web, también gratuito.

Smooth Streaming en apps Windows 8

Hace pocos días han publicado la versión para Windows 8 del Microsoft Player Framework. En formato extensión de Visual Studio, tenemos un reproductor de vídeo con capacidades de Smooth Streaming, tal como hacía nuestro viejo amigo Silverlight, pero esta vez para aplicaciones de Windows 8, tanto en HTML/JS como XAML/C#.

Tal como indican en la documentación, desde nuestras aplicaciones tan sólo tendremos que añadir una referencia al Player Framework, al plugin de streaming adaptativo y al Smooth Streaming SDK, que tenemos que descargar de esta otra dirección.

Añadimos las referencias necesarias al reproductor en la cabecera de la página:

<!-- PlayerFramework references -->
<link href="/Microsoft.PlayerFramework.Js/css/PlayerFramework.css" rel="stylesheet">
<script src="/Microsoft.PlayerFramework.Js/js/PlayerFramework.js"></script>

<!-- PlayerFramework.Adaptive references -->
<script src="/Microsoft.PlayerFramework.Js.Adaptive/js/PlayerFramework.Adaptive.js"></script>

Y colocamos el reproductor dentro del HTML:

<div data-win-control="PlayerFramework.MediaPlayer" 
    data-win-options="{ width: 704, height: 400, isFullScreenVisible: true, src: 'http://mediadl.microsoft.com/mediadl/iisnet/smoothmedia/Experience/BigBuckBunny_720p.ism/Manifest' }">
</div>

Y ya tenemos el reproductor con SmoothStreaming preparado, sólo nos faltan las palomitas.