#Personal – Goodbye #Apple!, one more time …

Hi!

It’s been 4 years since an iOS update forced me to get new gadgets and stop use Apple devices (see my previous story in the references section). Back on those days I used an iPod purely and exclusively to run with Nike Running. After updating the iPod Touch to iOS 6, the device stopped working. Actually, everything seemed to keep working,
but the Apps were very slow, with constant unexpected errors, and many other problems. All this, considering that the only Apps I used were Spotify and Nike Running.

After that I started using a Samsung Galaxy S5 Mini for a couple of years and the truth is that my experience was very good. I was able to use Nike Running and Spotify again, and many other Apps that are what ones you expect to use on a Smartphone. 2 years ago I also started to use a Polar watch to track my races and workouts, and it synchronized with Android in a very correct way.

Bonus: This was the moment where I also did my first steps with Xamarin and Visual Studio. Since creating Apps for Android is a very simple task with Visual Studio in a Windows environment.

 

Today we are in November 2017 and I have a DejaVu with Apple, one more time. Let me try to explain the full story:

When I arrived in Canada in March of 2017 (18 months ago), I decided it was time to change Android for iOS. So I get an iPhone 6. That was the last model that Apple had available. Like almost all Apple users, my experience was great.

It was also during those days when I changed my Polar M400 for a Garmin Forerunner 325 sport watch. An excellent watch for runners that for little more than $ 100 provides excellent performance.

I1

The Forerunner watch has a built-in GPS, so you do not need to carry your smartphone while you run, if you want to track tour running courses. Of course, every so often you need to synchronize your Garmin watch with the Garmin App, so that the records of the races and workouts are saved in your profile. I take this moment to synchronize this information with Strava and Nike Running. So far, so good, the user experience is great!

I2

And, now the sad part of the story:

Our Palo Alto friends presented the new iPhone 8 and iPhone X along with the new version of the OS, iOS 11. This was a couple of weeks ago and if you have decided to upgrade your OS on an iPhone 6, you are welcome to the jungle! (GNR reference, I’ll get there soon)

After the update the Garmin App has stopped being connected all the time to the sport watch. The only solution I found was have to restart the iPhone so it stays connected for a while. <irony> This is a very good user experience! </irony>

I3

I’ve seen in the forums that I’m not the only one who has this kind of problem, and there are also people who have reported problems with other devices connected by Bluetooth. The interesting thing about this, is that, if you have an iPhone 7 or 8 or X, then you do not have an Audio Jack, so you have to use yes or yes, wireless headphones. I have not seen reports of errors in these models, however, my Jabra Sport have also started to fail with the iPhone 6 since I upgraded to iOS 11.

Note: I must clarify that I have also had patience, since version 11.0 several minor revisions have passed, but today I have updated to version 11.1 everything is the same.

Those who know me know that I am not of the conspiranoid type, however, it seems that at this moment I only have one solution: buy a new iPhone. Or maybe, make a small change in the affirmation and buy a new Smartphone.

It is very likely that this Christmas I get some nice Android device and can live happily again without having to worry about “keep my smartphone alive.” So, a couple of years later it’s time to say one more time GOOD BYE APPLE!

Important: the word scenario related to this was 2 weeks ago when, after hours of effort, I finished my 1st marathon and found that I could not synchronize my race data with my Garmin App. If you are a person who does sports and you keep track of your activities,
I suppose you will understand the frustration I had when I had to spend 2 days rebooting the iPhone until I could synchronize this race. And yes, I also went to see Guns ‘N Roses 2 days ago and somehow some pictures were lost. RFOG wrote about this and losing pictures is also not a very good user experience at all!

Saludos @ Toronto

El Bruno

References

Advertisements

#Personal – Otra vez es momento de decir [Adiós #Apple!]

Hola!

Han pasado 4 años desde que una actualización de IOS me obligo a cambiar de hardware y a dejar de lado a Apple (ver referencias). En esos días utilizaba un iPod, pura y exclusivamente para correr con Nike Running. Después de actualizar a iOS 6, el device dejo de funcionar. En realidad, todo parecía seguir funcionando, pero las Apps eran muy lentas, con cierres inesperados constantes, y muchos otros problemas. Todo esto, teniendo en cuenta que las únicas Apps que utilizaba eran Spotify y Nike Running.

Después de eso comencé a utilizar un Samsung Galaxy S5 Mini por un par de años y la verdad es que mi experiencia fue muy buena. Pude volver a utilizar Nike Running y Spotify, y además muchas otras Apps que son las que uno espera poder utilizar en un smartphone. Hace 2 años comencé a utilizar un reloj Polar para controlar mis carreras y entrenamientos, y el mismo se sincronizaba con Android de una manera muy correcta.

Bonus: Este fue el momento donde di mis primeros pasos con Xamarin, ya que crear Apps para Android es simple teniendo Visual Studio en un entorno Windows.

Hoy estamos en Noviembre del 2017 y tengo un DejaVu con Apple. Cuando llegué a Canada en Marzo del 2017, decidí que era momento de cambiar Android por iOS y comencé a utilizar un iPhone 6. Ese era el último modelo que tenía Apple disponible, y de esto hace 18 meses. Como casi todos los usuarios de Apple, mi experiencia fue grandiosa. También fue durante esos días cuando cambie mi Polar M400 por un Garmin Forerunner 325. Un excelente reloj para corredores que por poco más de $100 brinda unas prestaciones excelentes.

I1

El Forerunner tiene incorporado GPS, con lo que no es necesario llevar tu smartphone mientras corres. Eso sí, cada tanto tiempo necesitas sincronizar tu Garmin con la App de Garmin, para que los registros de las carreras y entrenamientos se guarden en tu perfil. Yo aprovecho ese momento para sincronizar además esta información con Strava y con Nike Running.

I2

Y llega el momento de los problemas. Hace un par de semanas, los amigos de Palo Alto han decidido lanzar el iPhone 8 y iPhone X junto con iOS 11, la nueva version del SO. De esto hace ya un par de semanas y parece que, si has decidido hacer un Upgrade de tu SO en un iPhone 6, pues es el momento de comenzar a tener problemas con los Devices conectados. En mi caso, de repente la App de Garmin ha dejado de estar conectada todo el tiempo al smartwatch. Tengo que reiniciar el iPhone para que quede conectada un rato.

I3

He visto en los foros que no soy el único que tiene este tipo de problemas, y además hay personas que han reportado problemas con otros Devices conectados por Bluetooth. Lo interesante de esto, es que, si tienes un iPhone 7 u 8 u X, pues no tienes Jack de Audio, con lo que tienes que usar si o si, auriculares inalámbricos. No he visto reportes de errores en estos modelos, sin embargo, mis Jabra Sport han comenzado a fallar también con el iPhone 6 desde que actualice a iOS 11.

Nota: Debo aclarar que también he tenido paciencia, desde la version 11.0 han pasado varias minor revisions, pero hoy que he actualizado a la version 11.1 sigue todo igual.

Los que me conocen saben que no soy del tipo conspiranoico, sin embargo, parece que en este momento solo tengo una solución: comprar un nuevo iPhone. O tal vez, hacer un pequeño cambio en la afirmación y comprar un nuevo Smartphone.

Es muy probable que en estas navidades me consiga algún Android de alta gama y pueda volver a vivir feliz sin tener que preocuparme por “mantener vivo mi smartphone”. Así que, un par de años después es momento de decir una vez más ¡ADIOS APPLE!

Importante: el colmo de esta situación fue hace 2 semanas cuando, después de horas de esfuerzo, terminé mi 1ra maratón y me encontré con que no podía sincronizar esa información con Garmin. Si eres una persona que hace deporte y llevas un seguimiento de tus actividades, supongo que comprenderás la frustración que tuve cuando tuve que pasar 2 días reiniciando el iPhone hasta poder sincronizar esta carrera.

Saludos @ Toronto

El Bruno

References

#Garmin – Mostrar gráficos e información de varios sensores al mismo tiempo

Hola !

El post de hoy es uno de los rápidos. Durante estos últimos días, mi principal objetivo era completar todo lo necesario para poder comenzar a vivir en Toronto, y aprovechando huecos de ocio, me puse a conocer el Garmin ConnectIQ SDK.

Como se puede ver en el siguiente video, hoy he llegado a un punto donde he creado una app

  • Que puede leer información de diferentes sensores: posición y ritmo cardíaco
  • En base a una muestra SDK la app puede dibujar un gráfico con los datos del sensor de latidos de corazón
  • La app crea un diseño de forma dinámica con colores diferentes (y bastante feos) para cada línea de texto, cuando el dispositivo está utilizando datos de sensores

2016 02 25 Garmin display multiple sensors

Sobre la app, un par de detalles a tener en cuenta

  • La app debe configurarse para utilizar sensores y obtener información, en las propiedades de aplicación

image

  • La clase App inicializará los eventos para la captura de datos de los sensores y el posicionamiento global. En cada evento de captura de datos, se invocará la clase View para mostrar estos datos
  • La clase de vista tiene algún código para dinámicamente trabajar en el diseño para crear textos y gráficos para la View

image

  • El gráfico utilizado para los datos de frecuencia cardíaca es un archivo de Graph.mc de los ejemplos del SDK

Y eso es todo! la aplicación es lo suficientemente inteligente y sencilla como para mostrar información en tiempo real de sensores y posiciones de una manera muy sencilla!

GitHub Source Code: https://github.com/elbruno/Blog/tree/master/Garmin

Saludos @ Toronto

-El Bruno

References

#Garmin – Display charts and several sensors information at once

Hi !

Today’s post is a quick one for Friday. My main goal in the past days was to complete all the necesarry stuff I’ll need to live in Toronto, and in the meantime I’ll continue to play around with the ConnectIQ Garmin SDK.

As you can see in the next video, I get to a point where

  • The app can read information from different sensors: position and heart rate
  • Based on a SDK sample the app can draw a chart for the HR data
  • The app creates a dinamyc layout with different (and ugly!) colors when the device is using sensors data or not

2016 02 25 Garmin display multiple sensors

So, the important stuff for this demo is

  • The app must be configured to use Sensors and Position information, in the app properties

image

  • The App class will initialize the sensors and positions. On each “get data” event, it will invoke the View class to display this data
  • The View class has some code to dinamically work in the layout to create texts and charts for the View

image

  • The chart used for the Heart Rate data is a Graph.mc file from the SDK samples

And that’s it ! the app is kind of smart enought to display real time information of positions and sensors in a very simple way!

GitHub Source Code: https://github.com/elbruno/Blog/tree/master/Garmin

Greetings @ Toronto

-El Bruno

References

#Garmin – Working with resources and cultures in a #ConnectIQ app

Hi !

When we create an app for a Garmin device, working with a resources is a #MustHave. We need to take take of simple stuff like change the culture of an app, In the following video, the main label of the app will change every time I change the culture of the smartwatch.

2016 02 24 Garmin Resource Languages

About Resources and Cultures

The ConnectIQ apps have a standard resource structure where we can define strings, store images and also define UI layouts or menus for our apps. We can find all of this elements in the main root folder of our project.

image

The root content folder for this is “resources”. For each different culture, we can add our owns folders and add only the different elements we need for each culture. In example, the main resource has this content in the “resources\strings\strings.xml” file

<strings>
<string id=”AppName”>App04</string>
<string id=”prompt”>Hello Martina</string>
<string id=”menu_label_1″>Item 1</string>
<string id=”menu_label_2″>Item 2</string>
</strings>

The same content for the Spanish culture will be located in “resources-spa\strings\strings.xml” and includes this content

<strings>
<string id=”AppName”>App04</string>
    <string id=”prompt”>Hola Martina</string>
    <string id=”menu_label_1″>Item 1</string>
<string id=”menu_label_2″>Item 2</string>
</strings>

There is also another important element in the app: the layouts (clearly explained in the programmers guide). I created a custom layout stored in a file named “resources\layouts\layoutcustom.xml”, which includes the following content

<layout id=”CustomLayout”>
<label x=”center” y=”5″ text=”@Strings.prompt” color=”Gfx.COLOR_WHITE” justification=”Gfx.TEXT_JUSTIFY_CENTER” />
<bitmap id=”id_martina” x=”center” y=”30″ filename=”../drawables/martina.png” />
</layout>

There are several elements which can be used in a layout file, like texts, images, shapes, etc. Again the programmers guide explains all the necessary information for this.

Resource Compiler

Finally we have the resource compiler. Every time we built our app, the resource compiler creates a set of classes which will allow us to work with this elements. If we have any issue or bad defined file, we’ll get some guidance in the Console log for Connect IQ.

image

Once we have a successful build in our app, we can access to this elements via code using the Rez module. This is an autogenerated module with a structure similar to this one

module Rez
{
    module Drawables
    {
        var bitmap_id = 123;
    }
    module Strings
    {
       var hello_id = 456;
    }
    module Fonts
    {
       var font_id = 789;
    }
}

In our sample, in order to access and use the Custom Layout, the way to do this is

image

In the same way we can access strings, fonts, bitmaps, etc.

In the next post more stuff and maybe some Azure connected sample.

GitHub Source Code: https://github.com/elbruno/Blog/tree/master/Garmin

Greetings @ Toronto

-El Bruno

References

#GARMIN – Read and display sensors data in a #ConnectIq app

Hi !

In today’s sample I’ll show how to create a WatchFace app which displays the current time and also the heart rate of the smart watch user. Most of the details will be added in the references section where you can find plenty of information on how the MonkeyC language works, or the different types of apps supported for Garmin watches.

The final output of the app in the simulator will be like this:

2016 02 22 Garmin HrData

So, once we created an app in Eclipse, next step is to configure some project properties. I selected the app type as “Watch App” so I can access to the sensors information. Other project types does not allow access to sensors information.

image

I also selected the target platform with my current smartwatch,m and finally I grant permissions to the app to access sensors information.

You can also update all this information in the [manifest.xml] file.

image

In the Developer Guide there is specific section for the build and package of applications where the manifest.xml file details are exposed. Once we have our app configured to access the sensors information, we can create some code to display this information.

In the following sample, there are some important topics

  • When the app is initialized, I allow the access to the Heart Rate sensor data
  • The the HR data is updated, there is a callback function to onSensor() method
  • In the onSensor() method I store the data in a local variable, display this information in the console log, and also I force an app User Interface layout update
  • In the Layout update method, I display the current time and also the current Heart rate sensor information

image

So, right now we have the basic code to create and app and display HR sensor data. If we run the app in the simulator, we’ll realize that the sensors data is NULL. We can emulate the data from the emulator with the options “Simulation // FIT Data // Simulate Data”

image

And now you can start to get some dummy HR data to your app.

From this post on, I’ll also start to also share the code in my GitHub repo: https://github.com/elbruno/Blog/tree/master/Garmin

Greetings @ Toronto

– El Bruno

References

#Garmin – #Eclipse and #ConnectIQ as a good starting point to create #SmartWatch apps

Hello!

After yesterday’s Hello world, today I’l write a post on a more friendly way to create Garmin apps. The Garmin Development team, has chosen MonkeyC as Development language and Eclipse as IDE for development, and the truth that fit the development environment is fairly simple.

Setup Development Environment

First we must download a version of Eclipse Luna. Choose the option for Java Developers, in the first step of the installer.

image

Once we have installed Eclipse, we must add the extension to work with Garmin Apps projects. So we access to the menu “Help / / Install new Software”

image

We must add the software from

http://developer.garmin.com/downloads/connect-iq/eclipse/:

Once added the URL we should add the tools of Connect IQ

image

We accept the EULA, restart Eclipse and now is time to configure the location of the Connect IQ SDK in Eclipse. In the “Windows / / Preferences” menu select the option Connect IQ and the same configure the location of the SDK,

image

Important: You must select the location Root of the SDK, not the directory BIN, for exampleC:\Garmin\connectiq-sdk-win-1.2.4”

My First App, Hello World !

Now we can now create our first project for a Garmin app. Let’s start with “File / / New Project” and then select “Connect IQ / / Connect IQ Project”

image

After you define a name for the App, comes to define the type of app. There are 4 options

  • Watch Faces – These replace the main watch face and are the home screen of the watch.
  • Data Fields – Data fields run within Garmin activities. They allow developers to compute values based off of the current activity, such as running, biking, etc.
  • Widgets – Widgets are full screen pages that can be embedded into the main page loop. They are loaded when brought on-screen and shut down when the user switches to the next widget. Widgets will timeout and automatically shutdown after a device specific period of inactivity.
  • Wearable Apps – Started from the action list, wearable apps can be used to implement use cases like third party activities, games, and other user-initiated actions. Apps push a page onto the UI and exit when the user backs out of the last page of the page stack. While running, the app has full control of the UI.

For this sample I will create a WatchFace app for my Garmin Forerunner 235

image

There is a couple more extra options to choose, like the WatchFace type and the supported languages. And now we have a minimmun set of code to be build and run Eclipse for Garmin Connect IQ App

image

In the meny “Run // Run Configurations” we add some options to build, and run the app in the emulator.

image

So, after we create this new build configuration we can run the app. In the next image, you can see the emulator running the app, displaying my name and also the time in a simple way (line 42)

image

So that’s it as starting sample. More in the next posts !!!

Greetings @ Toronto

-El Bruno

References

#Garmin – #ConnectIQ y #Eclipse, una forma facil de comenzar

Hola !

Después del hola mundo de ayer, hoy vamos a ver algo más amigable para crear apps. El equipo de Garmin, ha elegido Eclipse como IDE para el desarrollo, y la verdad que montar el entorno de desarrollo es bastante simple.

Setup Development Environment

En primer lugar debemos descargar úna versión de Eclipse Luna. Elegimos la opción para Java Developers, en el primer paso del instalador.

image

Una vez que tenemos instalado Eclipse, debemos agregar la extensión para poder trabajar con proyectos para Garmin Apps. Lanzamos el menu “ Help // Install new Software “

image

Debemos agregar el software desde

http://developer.garmin.com/downloads/connect-iq/eclipse/:

Una vez agregada la URL debemos agregar las tools de Connect IQ

image

Aceptamos el EULA, reiniciamos Eclipse y ahora es momento de configurar en Eclipse la ubicación del Connect IQ SDK. En el menu “Windows // Preferences” seleccionamos la opción Connect IQ y en la misma configuramos la ubicación del SDK,

image

Importante: Hay que seleccionar la ubicación Root del SDK, no el directorio BIN, por ejemplo “C:\Garmin\connectiq-sdk-win-1.2.4”

My First App, Hello World !

Ahora ya podemos crear nuestro primer proyecto. Para esto seleccionamos “File // New Project” Y luego seleccionamos “Connect IQ // Connect IQ Project”

image

Después de definir un nombre para la App, llega el momento de definir el tipo de app. Hay 4 opciones

  • Watch Faces – These replace the main watch face and are the home screen of the watch.
  • Data Fields – Data fields run within Garmin activities. They allow developers to compute values based off of the current activity, such as running, biking, etc.
  • Widgets – Widgets are full screen pages that can be embedded into the main page loop. They are loaded when brought on-screen and shut down when the user switches to the next widget. Widgets will timeout and automatically shutdown after a device specific period of inactivity.
  • Wearable Apps – Started from the action list, wearable apps can be used to implement use cases like third party activities, games, and other user-initiated actions. Apps push a page onto the UI and exit when the user backs out of the last page of the page stack. While running, the app has full control of the UI.

En este caso, crearé una WatchFace y para mi Garmin Forerunner 235

image

Seleccionamos otras opciones más, como el tipo de WatchFace y los idiomas soportados. Ahora ya tenemos nuestro proyecto / con el mínimo de código para ser ejecutado en Eclipse.

image

Desde el menú “Run // Run Configurations” debemos configurar las opciones para la compilación y despliegue en el simulador o en el reloj.

image

Creamos una nueva configuración y ya podemos ejecutar la app. En la siguiente imagen podemos ver como he agregado una nueva línea en la app para que muestre mi nombre antes de mostrar la hora.

image

Como ejemplo para el primer día, creo que me vale. Mañana más !!!

Saludos @ Toronto

-El Bruno

References

#Garmin – How to setup the #Dev Enviromnent and a quick #HelloWorld to try the Emulator!

Hello!

In today’s post I will show how to configure the development environment to code and build an app for Garmin ConnectIQ SDK.

The first thing we need is to have a Java development kit version installed on our computer. In the references section, I have put the link to the JDK 8.

Now you can download and use the Garmin ConnectIQ SDK. To use it, we must just download the ZIP, unzip it and add the bin path to our local PATH.

01

Now we can use the 3 main tools included in the SDK:

  • connectIQ, launches the local emulator app
  • monkeyc, is the compiler to built an app from source code and resource files
  • monkeydo, it will run an app in the emulator

Using one of the examples in the SDK, I updated the “ConfirmationDialog” sample, so that it displays a different dialog. I’ve update the files

  • \manifest.xml
  • resources\strings.xml
  • sources\ConfirmationDialogApp.mc
  • sources\ConfirmationDialogView.mc

now I can compile and built the app. The command that I should throw to compile the app is as follows:

monkeyc -o ConfirmationDialog.prg -m manifest.xml

The output of the build process will generate an app in a file called “ConfirmationDialog.prg“. The next step is to launch the emulator and run the app compiled on it.

The commands for these actions are the following

set path=%PATH”;”c:\Program Files (x86)\Garmin\connectiq-sdk-win-1.2.4\bin\”
monkeyc -o ConfirmationDialog.prg.prg -m manifest.xml
connectiq
monkeydo ConfirmationDialog.prg.prg

Executed once we can already see the app, in simulation mode

02

And that’s it, we already have compiled, built and run an app in the Simulator. In next posts, I will see what I discover about the internal structure of the apps, and what else I learn.

Greetings @ Toronto

-El Bruno

References

#Garmin – Configurar el entorno de desarrollo y #HelloWorld con el emulador!

Hola !

En el post de hoy mostraré como configurar el entorno de desarrollo para crear una app para Garmin con ConnectIQ SDK.

Lo primero que necesitamos es tener una versión de Java development kit instalada en nuestro ordenador. En la sección de referencias he puesto el link a la versión JDK 8.

Ahora ya podemos descargar y utilizar el SDK de Garmin. Para utilizarlo, solo debemos decargar el ZIP, descomprimir el mismo y agregar la ruta bin a nuestro PATH local.

01

Ahora ya podremos utilizar las 3 herramientas básicas que se incluyen en el SDK:

  • connectIQ, lanza el emulador local de apps
  • monkeyc, es el compilador para generar las apps
  • monkeydo, ejecuta una app compilada en el emulador

Utilizando uno de los ejemplos del SDK, he modificado el ejemplo “ConfirmationDialog”, para que muestre un diálogo diferente. Después de modificar los archivos

  • \manifest.xml
  • resources\strings.xml
  • sources\ConfirmationDialogApp.mc
  • sources\ConfirmationDialogView.mc

ya puedo compilar la app. El comando que debo lanzar para compilar la app es el siguiente:

monkeyc -o ConfirmationDialog.prg -m manifest.xml

El output del proceso de compilación generará una app en un archivo llamado “ConfirmationDialog.prg”. El siguiente paso es lanzar el emulador y ejecutar la app compilada en el mismo.

Los comandos para estas acciones son los siguientes

set path=%PATH”;”c:\Program Files (x86)\Garmin\connectiq-sdk-win-1.2.4\bin\”
monkeyc -o ConfirmationDialog.prg.prg -m manifest.xml
connectiq
monkeydo ConfirmationDialog.prg.prg

Una vez ejecutados ya podemos ver la app, en el modo simulación

02

Y listo, ya tenemos una app compilada y ejecutada en nuestro simulador de apps para Garmin. En próximos posts veré que descubro de la estructura interna de las apps, y lo que vaya aprendiendo.

Saludos @ Toronto

-El Bruno

References