ENG [#IOT] Different behaviors for an App based on the app architecture (9 on N) #RaspberryPi2 #Windows10

Hello!

New post for Windows 10 and Raspberry Pi 2 series

  1. Hardware and software (1 on N)
  2. Boot from SD card in the device (2 of N)
  3. Hello World mode! (3 of N)
  4. Visual Studio deployment process and Web Management app (4 on N)
  5. Hello Blinky !!! (5 on N)
  6. Some admin tasks, like change password and change name (6 on N)
  7. List of connected devices in the Raspberry Pi 2 (7 on N)
  8. Deploy an app using the deploy package (8 on N)
  9. Different behaviors for an App based on the app architecture

If you’re an old school developer when you find a change one of the oldest APIs, for sure you’ll suffer a heart attack. That’s what happened with the classical System.Environment. The following image shows the difference that we have between a classic WPF app with .net 4.5 and a Universal App for Windows 10.

Clipboard07

Now a Universal App will execute in a controlled environment (Sandbox), whether on a laptop, a smartphone or a device. This implies that the app capabilities are tied to this Sandbox. For example, what formerly used to get from the Environment, now perhaps we must look for it in the Package of the application. The architecture of the processor is an example, and the following code shows an example to validate if the app is running on an ARM processor.

Clipboard10

While the idea behind Universal Apps is to have the maximum code unified for all platforms, should take into account the capabilities of each platform. For example, in ARM we don’t have the possibility to use MessageDialogs so if we want to show a message we have to do a bit of defensive programming .

Clipboard12

This allows us to display a message in the mode dialog on a laptop or tablet

Clipboard14

And for the case of ARM, the message in a TextBlock as part of the app.

Clipboard01

The sample code on github

https://github.com/elbruno/W10Rpi2/tree/master/SystemInfoV02

Saludos @ Madrid

/El Bruno

References

Environment.Is64BitProcess, https://msdn.microsoft.com/en-us/library/system.environment.is64bitprocess(VS.100).aspx

MessageDialog, https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.popups.messagedialog.aspx

[#IOT] Diferentes comportamientos en base arquitectura de la app (9 de N) #RaspberryPi2 y #Windows10

Hola !

Nuevo post para la serie de Windows 10 y Raspberry Pi 2

  1. Hardware y software (1 de N)
  2. Montando la SD en el device (2 de N)
  3. Ahora si el Hello World ! (3 de N)
  4. Sobre el proceso de despliegue desde VS y Web Management app (4 de N)
  5. Hello Blinky !!! (5 de N)
  6. Acciones de administrador, cambiar password, cambiar nombre, etc (6 de N)
  7. Accediendo a los devices conectados (7 de N)
  8. Desplegando una app desde un paquete (8 de N)
  9. Diferentes comportamientos en base arquitectura de la app

Si eres un developer de vieja escuela, cuando te cambian una de las APIs más antiguas te puede dar un infarto. Eso es lo que ha pasado con la clásica System.Environment. La siguiente imagen muestra la diferencia que tenemos entre una app clásica WPF con .Net 4.5 y una Universal App para Windows 10.

Clipboard07

Ahora bien, una Universal App se ejecuta en un entorno controlado (sandbox), ya sea en un laptop, un smartphone o un device. Esto implica que las capacidades de la app están atadas a este Sandbox. Por ejemplo, lo que antes solíamos obtener desde el Environment, ahora tal vez debemos buscarlo en el Package de la Aplicación. La arquitectura del procesador es un ejemplo, y el siguiente código muestra un ejemplo para validar si la app se está ejecutando en un procesador ARM.

Clipboard10

Si bien la idea detrás de las Universal Apps es tener el máximo código unificado para todas las plataformas, hay que tener en cuenta las capacidades de cada plataforma. Por ejemplo, en ARM no tenemos la posibilidad de mostrar MessageDialogs así que si queremos mostrar información tenemos que hacer un poco de programación defensiva.

Clipboard12

Esto nos permite mostrar un mensaje en modo diálogo en una laptop o tablet

Clipboard14

Y para el caso de ARM, el mensaje en un TextBlock como parte de la app.

Clipboard01

El código de ejemplo en github

https://github.com/elbruno/W10Rpi2/tree/master/SystemInfoV02

Saludos @ Madrid

/El Bruno

References

Environment.Is64BitProcess, https://msdn.microsoft.com/en-us/library/system.environment.is64bitprocess(VS.100).aspx

MessageDialog, https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.popups.messagedialog.aspx

ENG [#IOT] #Windows10 democratizing the world of the developers and the devices

Hello!

Today I am testing my Portuguese capabilities here in Lisbon, and on the topics was Windows 10. I do not remember well how, but the conversation was drifting towards to the set of capabilities included by Windows 10 as a development platform. One of the premises that I share with them, in the developers point of view, is that now the development for different platforms it’s much more ‘democratic’. When I started to explain that we can now create a single app which can run on a laptop, a tablet, a smartphone, or a Raspberry Pi 2; they looked at me thinking that my flight from Madrid was too early in the morning and maybe this affected myself too much.

So, in order to clarify this I change the topic to go directly to pure Internet of Things. With Windows 10, now is an “open door” for plenty of developers. For example, if you look at the last Stack Overflow Developer Survey (link), JavaScript is the language most used, followed by SQL, Java, and C#. In the world of the makers, quintessential languages tend to be C and C++. These appear in the 6th and 7th position in the list. Now, if we consider that with the new tools of Windows 10 IoT, we can create apps for a device (Raspberry Pi 2) using C++, C#, Node.js or Python; what we have here is a fairly open platform.

pp

Once again I get to the point I like to share everytime: the language is not important, you must focus to know and learn about the platform. Nowadays Windows 10 is still maturing as a platform. Not all the core APIs are implemented and there are some substantial differences to take in care between an laptop app and a device app. But the core, the IDE, the main environment is the same

It is also remarkable to now you just need to invest €30 and you know C#, then you can take your first steps in the MAKER world. And, something that no one usually comment, this is really fun!

Greetings @ Lisbon

/El Bruno

[#IOT] #Windows10 democratizando el mundo de los developers y los devices

Hola!

Hoy estaba practicando mi portugues aqui en Lisboa, cuando salió el tema de Windows 10. No recuerdo bien cómo, pero la conversación fue derivando hacia las capacidades que nos brinda Windows 10 como plataforma de desarrollo. Una de las premisas que yo les comenté desde punto de vista de developers es que ahora es todo mucho más “democrático”. Cuando comencé a explicar que ahora podemos crear una única app que luego se ejecuta en un laptop, en una tablet, en un smartphone o en un Raspberry Pi 2; me miraron pensando que había tomado en el vuelo desde Madrid.

Esto está muy bien, pero si nos vamos a un aspecto de IoT puro, lo major que tenemos aquí es que realmente se ha abierto la puerta a un mundo de developers.  Por ejemplo, si analizamos la última Stack Overflow Developer Survey (link), vemos que JavaScript es el language más utilizado, seguido de SQL, Java y C#. En el mundo de los makers, los lenguages por excelencia suelen ser C y C++. Estos aparecen en la posición 6ta y 7ma. Ahora bien, si tenemos en cuenta que con las nuevas herramientas de Windows 10 IoT, podemos crear apps para un device (Raspberry Pi 2), en C++, C#, Node.js o Python; lo que tenemos aquí, es una plataforma bastante abierta.

pp

Una vez más el language no es lo importante, sino la plataforma sobre la que se ejecuta. Es cierto, que Windows 10 todavía está madurando como plataforma, no todas las APIs están implementadas y hay algunas diferencias sustanciales a tener en cuenta entre una app para un laptop y una app para un device. Dicho esto, tambien es admirable que ahora con solo invertir €30 y conozcas C#, ya puedas dar tus primeros pasos en el mundo MAKER. Y, algo que nadie suele comentar, esto es REALMENTE DIVERTIDO !!!

Saludos @ Lisboa

/El Bruno

References:

Stack Overflow Developer Survey (link)

[#IOT] #RaspberryPi2 and #Windows10, Deploy an app using the deploy package (8 on N)

Hello!

New post for Windows 10 and Raspberry Pi 2 series

  1. Hardware and software (1 on N)
  2. Boot from SD card in the device (2 of N)
  3. Hello World mode! (3 of N)
  4. Visual Studio deployment process and Web Management app (4 on N)
  5. Hello Blinky !!! (5 on N)
  6. Some admin tasks, like change password and change name (6 on N)
  7. List of connected devices in the Raspberry Pi 2 (7 on N)
  8. Deploy an app using the deploy package (8 on N)

In the 3rd post, I wrote about how we could launch an app on the device directly from Visual Studio in DEBUG mode. To deploy an app, there are other options like using PowerShell or the web administration console.

Once created our project, we have to go to the option “Store / / Create App packages…” to create the deploy packages for the app. When the creation process is complete you will see the following.

Clipboard01

Once we have the *.appx and *.cer file, we can now access our device web administration console. In it we will see that in the option [Apps] can view a list of installed apps and upload a new one.

Clipboard05

From the directory where we have created the deploy package, select the file appx, certificate and select the DEPLOY option

Clipboard07

Once the deployment process, we should see the application in the combo of applications. From this combo you can perform the following actions

-launch the app

-remove the app from the list

-configure the app to be the default app

Clipboard09

Important: All the apps that you’ve using in debug mode with Visual Studio to also appear here.The app name is not usually very friendly since it is a GUID with the Identity.name defined in the project manifest. Be careful deleting this ones.

Greetings @ Madrid

/El Bruno

[#IOT] #RaspberryPi2 y #Windows10, Instalando una app desde un paquete (8 de N)

Hola !

Nuevo post para la serie de Windows 10 y Raspberry Pi 2

  1. Hardware y software (1 de N)
  2. Montando la SD en el device (2 de N)
  3. Ahora si el Hello World ! (3 de N)
  4. Sobre el proceso de despliegue desde VS y Web Management app (4 de N)
  5. Hello Blinky !!! (5 de N)
  6. Acciones de administrador, cambiar password, cambiar nombre, etc (6 de N)
  7. Accediendo a los devices conectados (7 de N)
  8. Desplegando una app desde un paquete (8 de N)

En el 3er post vimos cómo podíamos lanzar una app en el device directamente desde Visual Studio. Para instalar una app hay otras opciones como la utilización de PowerShell o de la consola de administración web.

Una vez creado nuestro proyecto, tenemos que ir a la opción “Store // Create App packages …” para crear los paquetes de distribución. Cuando el proceso de creación finaliza podremos ver lo siguiente.

Clipboard01

Una vez que tenemos los archivos *.appx y *.cer, ya podemos acceder a la consola de administración web de nuestro device. En la misma veremos que en la opción [] podemos ver un listado de las apps instaladas y subir una nueva.

Clipboard05

Desde el directorio donde hemos creado el deploy package, seleccionamos el archivo appx, el certificado y seleccionamos la opción DEPLOY

Clipboard07

Una vez finalizado el proceso de despliegue, debemos ver la aplicación en el combo de aplicaciones. Desde este combo podemos realizar las siguientes acciones

– lanzar la app

– eliminarla de la lista

– configurarla como app por defecto

Clipboard09

Importante: todas las apps que has lanzado en modo debug desde Visual Studio al device, también aparecen aquí. El nombre de las mismas no suele ser muy amigable ya que es un GUID con el Identity.Name que está definido en el manifiesto del proyecto.

Saludos @ Madrid

/El Bruno

ENG [#IOT] #RaspberryPi2 and #Windows10, List of connected devices to the Raspberry Pi 2 (7 on N)

Hello!

New post for Windows 10 and Raspberry Pi 2 series

  1. Hardware and software (1 on N)
  2. Boot from SD card in the device (2 of N)
  3. Hello World mode! (3 of N)
  4. Visual Studio deployment process and Web Management app (4 on N)
  5. Hello Blinky !!! (5 on N)
  6. Some admin tasks, like change password and change name (6 on N)
  7. List of connected devices in the Raspberry Pi 2 (7 on N)
  8. Deploy an app using the deploy package (8 on N)

Today we will use a little class DeviceInformation which was quite improved in Windows 8.1 to list all the devices connected to our Raspbery PI.

The example is quite simple, just an async call to DeviceInformation.FindAllAsync(), a some LINQ to eliminate duplicates

Clipboard02

The output we have is something similar to this one

  1. Generic SU32G SD Card
    1. {-\\?\STORAGE#Volume#{06b09fe3-ebbb-11e4-8d8e-806e6f6e6963}#0000000004800000#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b id}
  2. MINWINPC
    1. {-\\?\ACPI#A_-_ARM_Family_7_Model_C07_Revision___5#1#{dbe4373d-3c81-40cb-ace4-e0e5d05f0c9f id}
  3. Generic USB Hub
    1. -Id \\?\USB#VID_0424 & PID_EC00 #5 & 3753427a & 0 & 1 #{a5dcbf10-6530-11d2-901f-00c04fb951ed}
  4. Generic Non-PnP Monitor
    1. -Id \\?\DISPLAY#Default_Monitor#1 & 8713bca & 0 & UID0 #{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  5. Microsoft GS Wavetable Synth
    1. {-Id \\?\SWD#MMDEVAPI#MicrosoftGSWavetableSynth#{6dc23320-ab33-4ce4-80d4-bbb3ebbf2814}
  6. Microsoft USB Optical Mouse
    1. -Id \\?\USB#VID_045E & PID_0737 #5 & 3753427a & 0 & 5 #{a5dcbf10-6530-11d2-901f-00c04fb951ed}

In addition to the name property, it is important to take take a look at the ID property, which shows the full path to access the device. For example, in the list, the 6th item is the mouse, and we can infer the values of Vendor Id and Product Id very easily

  • ID:VID_045E&PID_0737\\?\USB# #5 & 3753427a & 0 & 5 #{a5dcbf10-6530-11d2-901f-00c04fb951ed}
  • Vendor Id = 045E
  • Product Id = us

Which are always useful when working with connected devices.

Just as a curiosity, this is part of the output of the same app run in local mode on my laptop. This Universal apps is liking me ;)

Clipboard04

As always the code on GitHub that can be downloaded from here.

Saludos @ Home

/El Bruno

MSDN Device Information, https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.devices.enumeration.deviceinformation.aspx