viernes, 23 de diciembre de 2016

Tracking racing apps

I'm very sure you've read some posts about different apps to track your races. But I think the best way to decide what the best app is fo r me, is testing by myself.

I've already chosen some apps to reduce the list to 3 apps. My selection is.

  • Endomondo
  • Strava
I use these apps for running and biking. I confess I'm a long way endomondo user, but I want to re-check the status front to other apps. Moreover, I have a Sony Smartwatch 3 and I would like to take in advance this device.

The comparison is focused on two things,  data precision and kind of information that non-premium app offers to the user. I did a test race to evaluate the information that apps collect.  The race isn't too long, so the measuring errors should be minimized,  but the race is long enough to evaluate the information and to extrapolate to longer race.

Tracking Accuracy

Depend  on the profile of the user, this is the most important part because you want to record your record with highest accuracy.
To start the testing I started all applications before I started my race. Moreover I warmed up the GPS to get the best accuracy and to not disturb the measure of each application.

ApplicationDistanceAvg. PaceMax. PaceAvg. SpeedMax. Speed
Endomondo4.69 KM6:29 min/KM4:21 min/KM9.25 KM/h13.81 KM/h
Strava4.8 KM6:14 min/KM-- min/KM-- KM/h-- KM/h

Each application shows a little differences of my tracking, but differences are not big. Each application show a resume with different data, I specially focus on Endomondo, because its resume shows all data filled (Distance, Pace and Speed).

Strava is focused on pace and MyTracks is focused on speed. Obviously, I can calculate from pace to speed and vice-versa, but I appreciate that Endomondo fills all. Strava does not offer the max peace, only average. I can get the peace per KM, but I'm interesting on max pace.

Web portal

One thing that I used to do is review my track in the web portal of the application. If you are using MyTracks you have a disadvantage, because MyTracks does not have a web portal to view your track. You can export the track to GPX file and upload to another portal, or export to KML and view with Google Earth, but you have to do.

Endomondo and Strava have web portal where you can view your tracks. I'm going to analyse both portal to get some conclusions of the portals.

Mobile applications

Endomondo

 Strava

martes, 18 de agosto de 2015

Multi-threading in a common loop

Usually, we are doing a lot of loops as a programmer, it is a basic control method of the workflow. But, sometimes loops have bad performance because they do some heavy things.

public List<Output> getOutputFromKeys(final Collection<String> keys) {
    final List<Output> outputs = Lists.newArrayList();
    for (String key : keys) {
        outputs.add(getOutput(key));
    }
    return outputs;
}
 
This for-loop could be heavy depends on how long "getOutput" method takes. If the method takes lots of time, we will need improve the performance of that.
To improve the performance, we can take in advance the ExecutorService class of the Java.

public List<Output> getOutputFromKeys(final Collection<String> keys) {
    final int threads = Runtime.getRuntime().availableProcessors();
    final ExecutorService service = Executors.newFixedThreadPool(threads);





 

    class LoadOutput implements Callable<Output> {
        private String key; 
        public LoadOutput(final String key) {
            this.key = key;
        }

        @Override
        public Output call() throws Exception {
            final Output out = getOutput(key);
            if (out == null) {
                logger.warn(String.format("Output with key %s is null", key));
            }
            return out;
        }
    }

    final List<Future<Output>> futures = Lists.newArrayList();
    for (final String key : keys) {
        final LoadOutput callable = new LoadOutput(key);
        futures.add(service.submit(callable));
    }

    service.shutdown();

    return Lists.newArrayList(Collections2.transform(futures, new Function<Future<Output>, Output>() {
            @Nullable 
            @Override 
            public Output apply(Future input) {
                Output out = null;
                try {
                    out = input.get();
                } catch (Exception e) {
                    logger.error("There was an error with multithreading.", e);
                }
                return out;
            }
    }));
}

The improvement use multi-threading to improve the for-loop and use callback methods. That can help us to improve our performance.

lunes, 29 de junio de 2009

Emancipación de un geek (Parte 2)

Tras la dureza de la mudanza es cuando realmente empiezan todos los problemas para el geek. Porque, bien hemos conseguido traernos todos nuestros complementos, portátil, consola(s), gadgets varios, 3 o 4 monitores. Pero es entonces cuando empezamos a ver aparatos eléctricos extraños para nosotros, asombrosos en muchos casos.

Nada más llegar a nuestra casa, nos enfrentamos con el primero de ellos, ¡¡el frigorífico!!. Si, es un aparato que ya hemos visto, nosotros levantabamos nuestro trasero de nuestra silla y nos acercábamos en busca de nuestra tan deseada coca-cola que nos ayuda a continuar con nuestras interminables sesiones de programación o de CS.

Pero es en ese preciso instante, cuando abrimos nuestro frigorífico por primera vez y vemos algo insólito, ¡¡¡NO HAY COCA-COLA!!!. Está vacío!!!, ¿cómo puede ser?, ¿dónde está ese mecanismo de autollenado de comida y bebida que tan felices nos hacía?. Rápidamente y sin perder un instante de nuestro tiempo, miramos las instrucciones del frigorífico, vamos al índice y miramos la A... Autollenado... no hay referencia a autollenado.

Derrepente un escalofrío recorre nuestra espalda, sin embargo, aún no está todo perdido, nos quedan recursos que mirar. Volvemos a nuestro portátil para consultar el tema por Internet, pero... ¡¡no hay Internet!!, ¡¡todavía no nos han traído el maldito router!!. No pasa nada, haremos un derroche, cogeremos nuestro móvil 3g, y nos conectaremos a internet a través de él. Entonces es cuando vamos a google y buscamos "autollenado frigorífico". Pero nada, los resultados no nos sacan de nuestro problema. Cambiamos de sitio de búsqueda y entramos en foros, chats, irc, grupos de facebook, etc etc, dejamos nuestra duda, si alguien ha tenido el mismo problema, y es ahí cuando al cabo de un rato... sí!! siempre hay un gurú que nos puede ayudar. Empezamos a leer la contestación....

Querido amigo, a continuación te voy a explicar el algoritmo de autollenado de un frigorífico, que como has podido comprobar no viene en las instrucciones.

Vas pensando, bien!!! por fin, con lo que me ha costado, esto promete.

El algoritmo tiene dos versiones:
  • Método directo
  • Método delegado

Método directo

El método directo consiste en levantarse de la silla en la que estás ahora mismo, coger las llaves de tu casa, salir a la calle (sé que es difícil) y dirigirte a un supermercado (los diferenciarás porque sale mucha gente con bolsas, aunque más abajo te he dejado una lista de los más típicos que puedes encontrar). Una vez en el supermercado, tienes que coger un carro que nos servirá para transportar lo que necesitemos (para que me entiendas, sería el package que contiene los class), después dirigirte a la sección de bebidas (suelen estar en el último pasillo), busca tu marca de refresco y mete en el carro 2 paquetes de latas. Como seguro que necesitarás algo para acompañar tu refresco, ve con el carro al pasillo colindante, seguro que encuentras algo que te gusta.

Una vez que hayas conseguido todo lo que te gusta, debes dirigirte a las "cajas". Las cajas te recordarán a la teoría de colas que tanto has aplicado en tu día a día, debes elegir una cola y esperar tu turno. Cuando te vaya a tocar, debes colocar todo lo que tengas dentro tu carro en la cinta que está al lado de la caja, verás como se irán desplazando y una "alegre" señorita los irá pasando por un lector de código de barras". Por último te pedirá el valor de la compra, saca tu tarjeta de crédito y paga. No, no es necesario tenerla asociada en PayPal.

Recoge las bolsas, y dirigete a casa. Cuando llegues, mete lo que has comprado en el frigorífico y verás como ese aspecto ya te resulta familiar.


Método delegado

El método delegado es mucho más sencillo que el anterior. Lo bueno es que no tendrás que salir de casa, sin embargo el autollenado no se conseguirá de forma rápida, ya que habrá que esperar un tiempo a que los factores externos actúen.

Para este método necesitamos un teléfono. Busca el teléfono de mamá, llamas y le comentas el problema y verás como en pocas horas tendrás el frigorífico tal y como lo tienen tus padres.


Espero que te haya servido de ayuda. Un saludo. Ike.


Finalmente, pensamos la respuesta de Ike y tomamos la decisión de usar el método delegado, y efectivamente, Ike tenía razón, cuestión de horas y el frigorífico se llenó. Gracias Ike, eres un gurú.

Para ti mi vida,
que eres genial, increible, no cambies nunca.
Siempre estaré a tu lado, en lo bueno,
pero sobretodo en lo malo.
Te quiero, te adoro, te amo.

viernes, 15 de mayo de 2009

PyCamimg 0.1.0 is out. Finally a beta.


A long time has passed from last version of PyCamimg, but it is just here a new expected version, and for the first time is a beta version. Remember, previous versions were only alpha versions. I have less and less time to develop PyCamimg, but this my baby, and I still try to improve this software, but please test it and send me back your feedback or your new ideas, it is very important for me knows your opinion about PyCamimg or knows how PyCamimg could help you (send your feedback or your ideas to hugo.parraga.martin@gmail.com, I will be greatful).

Now, new PyCamimg has got new important features and some changes from previous version. I have tried PyCamimg are more scalable, useful, and easier to add new features in the future. For this reason, I have developed a system of plugins for PyCamimg. For instance, you can create new type of projects like a project that sends photos by mail as attachments or uploads photos by ftp. Also, you can develop new operations to execute on the photos, like red-eyes eraser. We can improve PyCamimg...

From 0.3.0 to 0.1.0

  • It exists two types of project. First is local project to treat and save photos on your local system. And second to treat and upload your photos to facebook.
  • Can create, save and load projets to process them whenever you want.
  • In execute dialog there are custom project options. In some cases there is an option for multiple type of projects, but it is not required.
  • Select of target folder is only for local project, it is not in main form.
  • Plugins must be in plugins folder, it is in root folder of PyCamimg.
  • Each project is in a tab in main form. So PyCamimg is a multi-tab application.
  • Of course, some bugs are fixed.

PyCamimg is still an open source application and it continues to have GPL license. Here you can obtain a copy of license.

If you want to execute PyCamimg under python interpreter, you will need below libraries:

In the following links you can download PyCamimg

NamePlatformLink
PyCamimg-0.1.0WindowsDownload
Megaupload
PyCamimg-0.1.0AnyDownload
Megaupload
PyCamimg-0.1.0 (SVN)Anysvn co https://blindpump.dyndns.org/svn/pycamimg/tags/pycamimg0.1.0

lunes, 27 de abril de 2009

Emancipación de un geek

¿Cómo es la emancipación de un geek? ¿Difiere mucho de la de cualquier persona?. La emancipación siempre es dura para cualquier persona, aunque ilusionante. Consigues salir del nido, de la cálida protección familiar, y empiezas a explorar por ti mismo los "oscuros senderos".

Todo empieza con la mudanza. Aquí es donde están las primeras diferencias entre el geek y el resto de las personas. Mientras que la mayoría de la gente, tarda en recolectar toda la ropa a llevar y todos los utensilios básicos para la vida, tales como los utensilios de cocina (habrá que alimentarse de algo además de pizza, las películas nos engañan), los del baño (sí nosotros también nos aseamos.. xD), etc. El geek, recolecta todo en 30 minutos, un par de camisetas, un par de pantalones, un cepillo de dientes, ...
Sin embargo, ¿qué pasa con todos los aparatos electrónicos? ¿es capaz de dejar alguno para volver más tarde?. Pues la verdad es que un verdadero geek no puede dejar ninguno de sus "cacharros" o gadgets, son su historia, su evolución geek. Es el momento en el que cajas y cajas llenas de gadgets surgen de la nada, olvidadas debajo de la cama o al fondo del armario...

De ellas sacas tu primera gameboy con tu Tetris todavía colocado y te echas una partidida (o dos) para ver si te superas tu histórico record. Aparecen tus maquinitas de marcianos con las que jugabas con 4 y 5 añitos (esos matamarcianos... jeje). Y llegas a un momento cumbre en la vida de todo geek experimentado... ves tu Street Fighter y tu SuperNintendo, y rememoras todos los buenos momentos que te has pasado con ese juego, lo buena que era tu infancia y te das cuenta de todo el tiempo que ha pasado desde entonces.

Recuerdas cada etapa geek que pasaste, tu primer pc (ese MS-DOS), tu primer móvil (todavía me acuerdo de ese ladrillaco... ¡¡toma si tiene para hacer melodías!!). Y entonces es cuando recuerdas a todos tus amigos geek que te han acompañado, los que han pasado y los que todavía están. Es entonces cuando decides llevarte todo, lo metes todo en cajas como oro en paño y te lo llevas, juntos con tus fotos, y tus DVDs porta vasos.

Cuando llegas a tu nueva casa (si tu casa, ya tienes que decir la casa de mis padres), empiezas a descargar todos los "trastos" que has llevado. Por supuesto, no lo llevas todo en un día, te tomas al menos 2 días. Pero el momento en el que ves que todo empieza es la que tu portátil está en la nueva casa, es el momento en el que terminas la mudanza y te estableces. Como buen geek tu máquina va donde vas tú.

Cuando has colocado todo y enciendes por primera vez tu portátil, te das cuenta de algo fundamental... ¿dónde está mi ADSL? Entonces, como un loco, miras las redes disponibles de tus vecinos esperando a que haya un alma bondadosa que se apiade de nuestro descuido, que se dé cuenta que estamos empezando y nos deje acceso a su WIFI. Pero ves que la gente evoluciona y ves todas las redes protejidas (maldices a todos los amigos informáticos que se ofrecen para configurar la ADSL de sus amigos, es cuando tiras de experiencia.... pillas tu wifislax y dándole.... eureka!!! Uno que está con WEP y en unos minutitos tienes acceso a la red. Sabes que no lo debes hacer, pero las urgencias son las urgencias, y esta es de las graves.

A la mañana siguiente, lo primero que haces es contratar tu nueva ADSL, antes que comprobar tus contratos de agua, gas o luz... ni lo miras sólo piensas en el sufrimiento que tuviste el pasado día. Al colgar, suspiras y te dices... en 15 días tengo mi router, ¡¡menos mal!!

Continuará...


Papá, Mamá, Aitor y Adrián os quiero!!!!