Blog

Actualització del cas Proper bus Barcelona

21 d'octubre del 2013

Finalment s’ha solucionat el problema: Proper bus Barcelona torna a estar disponible

Respecte del que comentava en l’anterior publicació, m’agradaria comentar algunes novetats que hi ha hagut pel que fa al cas.

21/10/2013 10:53

Aquest matí m’ha contactat l’advocat que signava el burofax, comentant-me que des de CETRAMSA des del primer moment només pretenien avisar-me, perquè les dades que utilitzo canvien diàriament i estaven preocupats perquè poguessin ser inconsistents (per exemple, que algun usuari es queixés perquè accedia a una parada de bus que s’havia eliminat). M’ha comentat que en cap cas pretenien demandar-me ni denunciar-me, i m’ha mostrat la seva preocupació pels missatges que s’estaven escampant per fòrums i per Twitter.

M’ha comentat que volien reunir-se amb mi durant aquesta setmana per parlar del tema i perquè l’accés a les dades des de l’aplicació es fes de manera segura i que les dades sempre fossin les reals, que em contactarien quan tinguessin disponibilitat.

21/10/2013 12:32

M’han contactat des de CETRAMSA per acordar una reunió demà a les 9:00. M’han tornat a mostrar la seva disconformitat amb els comentaris d’altra gent a fòrums i tuits, ja que ells en cap moment han volgut demandar-me. Asseguren que no hi ha cap problema perquè l’aplicació funcioni, però cal que faci servir els sistemes d’obtenció de dades adients perquè les mateixes estiguin degudament actualitzades.

Aquest és l’estat de les coses a dia d’avui, aniré actualitzant aquesta publicació conforme hi hagi més novetats. Per ara, l’aplicació segueix desactivada.

Aprofito per agrair des d’aquí tots els comentaris, missatges i tuits de recolzament. Han estat moltíssims i realment em motiven a seguir endavant, ja que sembla que realment la meva feina feia una mica més feliç a la gent. Moltes gràcies.

Requeriment legal de CETRAMSA

18 d'octubre del 2013

Última actualització: Proper bus Barcelona: Sense rastre de les dades

Finalment s’ha solucionat el problema: Proper bus Barcelona torna a estar disponible

Llegiu també l’actualització anterior aquí: Actualització del cas Proper bus Barcelona

Avui he rebut un burofax amb un requeriment legal enviat per un gabinet d’advocats, informant-me que segons CETRAMSA (Centre Metropolità d’Informació i Promoció del Transport, SA), autors de l’aplicació AMBTempsbus, estic fent un ús deslleial i un aprofitament indegut de la seva aplicació, i que la meva aplicació Proper bus Barcelona vulnera els seus drets de propietat intel·lectual. M’han exigit la immediata eliminació de l’aplicació, així com la destrucció de totes les dades propietat de CETRAMSA associades a la mateixa.

Lògicament, l’aplicació ja ha estat eliminada tant de Google Play com de BlackBerry World, i he destruït la base de dades utilitzada al servidor. Ningú pot descarregar l’aplicació, i qui ja la tenia descarregada, rep un missatge d’error.

Proper bus Barcelona va néixer una tarda d’avorriment, donat que quan havia d’agafar el bus, l’aplicació de TMB se’m feia pesada. Calia obrir-la (que ja comportava uns segons), anar a l’opció iBus, introduir el codi de la parada, i esperar que carreguessin les dades (i molts cops, no carregaven!). Em vaig adonar que acabava d’aparèixer una nova aplicació (AMB Temps bus) que permetia que, només introduint-hi el codi de parada, ja tinguessis totes les dades que necessitaves, i a més, mostrava també les línies que no eren de TMB. Però era una simple web que feia això, no hi havia possibilitat de veure les properes arribades sense saber el codi de parada, ni cap mapa, ni tan sols l’opció de desar una llista de parades preferides (mesos després sí que la van afegir, però mai ha acabat d’anar del tot bé). Com que això em semblava important, vaig creure que seria una bona idea fer una aplicació més intuïtiva i amb més funcionalitats, basant-me en les dades que ja proporcionava AMB Temps bus.

Inicialment, l’aplicació era una simple llista de parades preferides i una crida al web de l’AMB Temps bus per treure’n els temps d’arribada. És més, ni tan sols tenia intenció de publicar-la a Google Play, ja que creia que amb l’aplicació de TMB o la d’AMB Temps bus, la majoria de gent ja en tindria prou, que potser era jo que era molt “tiquismiquis” i m’havia de fer la meva pròpia aplicació per estalviar-me uns segons. Però més endavant vaig pensar que s’hi podien afegir altres funcionalitats i per què no, provar de publicar-la al Google Play a veure si, ja que tenia la feina feta, a algú altre li servia.

No m’esperava ni molt menys la resposta que va tenir l’aplicació: va passar a ser la 10a aplicació de transport més descarregada a tot Espanya (lloc que ocupava avui mateix, abans de ser retirada), molt per sobre de l’AMB Temps bus i frec a frec amb l’aplicació de TMB (TMB Virtual). Amb 50.000 descàrregues i 33.000 usuaris actius, ha estat tot un èxit. Amb el temps, i partint moltes vegades dels suggeriments dels usuaris, s’hi han anat incorporant noves funcionalitats: cerca, mapa, escaneig per QR, recorregut gràfic dels autobusos, etc. Tot això ha fet que sigui una aplicació molt superior a la resta de les publicades a Google Play (tot i que per suposat, sempre hi ha coses a millorar!).

Entenc que a l’AMB (i a CETRAMSA) això no li agradi, ja que una aplicació desenvolupada per un “mindundi” en el seu temps lliure li està trepitjant usuaris a la seva aplicació oficial, que segurament deu haver costat molts diners. És cert que estic fent ús de les seves dades (tot i que d’altra banda s’haurien de considerar públiques, ja que per alguna cosa hem pagat amb els nostres diners la feina d’aquesta empresa pública), però en cap moment estic provocant cap dany a l’empresa, ja que només dono un valor afegit que la seva aplicació no dóna, i no tergiverso les dades ni me n’apropio indegudament (sempre he indicat que les dades no són de la meva propietat).

En un context com el de Barcelona, capital mundial del mòbil i gran promotora de les dades obertes, sembla mentida que aquestes coses puguin passar, i que s’obligui algú a retirar la seva aplicació, simplement pel fet d’oferir un servei addicional que la pròpia administració ja hauria d’oferir. Si les coses es fessin bé des del principi, jo mai hauria creat l’aplicació, i no seríem on som ara.

Tampoc crec que fos necessari arribar a aquests extrems d’enviar un requeriment legal. Si m’haguessin contactat, hauríem pogut arribar a un acord, o com a mínim hauríem pogut parlar dels problemes que els ocasionava i com podíem solucionar-los, i mai hauríem arribat fins aquest punt. Però pel que sembla, han optat per l’altra via.

En fi, no m’allargo més, suposo que fins aquí ha arribat l’aplicació. Des d’aquí, vull donar les gràcies a tots els usuaris que l’han descarregat, que l’utilitzaven (molts diàriament) i que han enviat suggeriments de millora (són molts i a alguns no havia pogut ni respondre encara!). Esperem que algun dia ens retrobem. Mentrestant, podeu fer servir l’AMB Temps bus.

La meva experiència amb HoloEverywhere

22 de juliol del 2013

Porto un temps utilitzant HoloEverywhere a la meva aplicació “Proper bus Barcelona”, i he pensat que estaria bé compartir la meva experiència amb aquesta biblioteca.

HoloEverywhere, en cas que no ho sàpigues ja, és una biblioteca que intenta posar-te fàcil tenir el mateix aspecte i disseny en totes les versions d’Android des de la 2.1 fins a la més actual. Això ho fa recreant el tema Holo d’Android 4.x. He de dir que, per suposat, no és senzill desenvolupar una biblioteca així. Algunes coses no es poden solucionar simplement aplicant temes als widgets antics, sinó que s’han d’implementar de zero, o bé crear subclasses d’algunes classes d’Android. Això és el que fa HoloEverywhere. Ah, i per cert, has de tenir en compte que necessita la majoria de recursos Holo, de manera que aquesta biblioteca afegeix 3,3 MB a les aplicacions ja existents.

Pensant que em faria més senzill tenir un estil Holo uniforme a totes les plataformes, vaig decidir implementar-ho a les meves aplicacions. Vaig provar-ho amb “Proper bus Barcelona”, i el resultat semblava que estava bé. Canviar una aplicació perquè utilitzi HoloEverywhere és senzill però pesat, ja que has reemplaçar totes les referències a widgets d’Android amb els seus equivalents de HoloEverywhere. Et pot comportar un bon temps si l’aplicació té una base de codi gran.

1r problema: El primer problema va ser amb algunes de les classes equivalents. A l’aplicació tenia algunes referències a la classe BaseAdapter, obtingudes de ListView.getAdapter(). Van passar a donar-me ClassCastException, ja que la classe que retorna HoloEverywhere no és una subclasse de BaseAdapter, i cal canviar els BaseAdapter a ListAdapterWrapper.

2n problema: El segon problema va ser amb un Spinner que impedia que la vista es refresqués. Va resultar ser un bug de HoloEverywhere, i vaig trobar-hi una solució a StackOverflow.

3r problema: El tercer problema va ser que tenia una Activity que utilitzava un tema “dialog”, i donava error en versions d’Android anteriors a la 4.0. La vaig reescriure utilitzant un DialogFragment, i tot va anar bé…

4t problema: Fins que em vaig adonar que el diàleg no mostrava el títol en versions d’Android anteriors a la 4.0. Vaig revisar el codi de HoloEverywhere i vaig aconseguir implementar una manera d’evitar-ho.

En aquest moment, havent solucionat tots aquests bugs, tot funcionava correctament, i vaig decidir publicar la nova versió de l’aplicació, utilitzant HoloEverywhere 1.5.0. L’aplicació no tenia problemes, fins que vaig llançar-ne una nova versió amb HoloEverywhere 1.5.1 en lloc de 1.5.0. Així que…

5è problema: Vaig començar a rebre queixes d’usuaris que tenien telèfons Sony Xperia (Sony Xperia U amb Android 2.3.7, per exemple), dient-me que les llistes de l’aplicació havien desaparegut.

Vaig rellançar l’aplicació tornant a la 1.5.0, i tot va tornar a funcionar bé…

6è problema: Fins que altres usuaris, amb diversos models de telèfon diferents, van començar a queixar-se que l’aplicació es penjava aleatòriament amb una pantalla blanca. No veig cap altra raó que en pugui ser la causa, a part de HoloEverywhere, així que vaig decidir provar d’actualitzar a l’última versió estable, la 1.6.8, i demanar-li a una usuària que la provés. Tot i que no va poder reproduir el problema de la pantalla blanca, les ListViews que tenien scroll desapareixien, com passava amb la 1.5.1.

Finalment: Després de tots aquests problemes, he eliminat HoloEverywhere del meu projecte. Sí, els botons i els textos de l’aplicació no es veuran igual en totes les versions d’Android, però m’he desfet de diversos bugs molestos, i encara millor… ara la meva aplicació ocupa 3,3 MB menys!

En conclusió, tots sabem que totes les biblioteques tenen bugs, és normal, no hi ha cap desenvolupador que no faci errors. Però quan has d’utilitzar una biblioteca per a un projecte (que no és res fora del normal en un projecte Android), i et topes amb un parell de bugs coneguts, i a sobre n’has d’informar quatre més tu mateix, alguns d’ells de funcionalitats comunes com ara diàlegs o menús contextuals, jo no la recomanaria per a l’ús en producció.

Potser algun dia HoloEverywhere tindrà menys errors i serà més senzilla d’integrar. Això espero, ja que simplificaria molt les coses a molts desenvolupadors a l’hora de dissenyar les seves aplicacions. Però ara per ara, no puc recomanar-te que l’usis.

Evita usar onConfigurationChanged

14 d'abril del 2013

Si et desenvolupador d’Android, segurament en algun moment hagis estat temptat d’implementar tu mateix els canvis de configuració en canviar l’orientació de la pantalla. És a dir, afegir el següent atribut a les teves activitats a l’AndroidManifest.xml:

<activity android:name=".LaMevaActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize" />

I llavors sobrecarregant el mètode onConfigurationChanged a la teva activitat:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    //el teu codi per gestionar el canvi d'orientació, si cal
}

Bé… Senzillament, NO ho facis. Evita utilitzar aquesta solució, i fes-la servir només com a últim recurs. Com explica la guia de desenvolupadors d’Android:

This technique should be considered a last resort when you must avoid restarts due to a configuration change and is not recommended for most applications.

Com que molt sovint aquest mètode és la solució proposada a molts dels problemes de la recreació de les activitats, i com que ho simplifica tot perquè no t’has d’encarregar de la recreació de l’activitat quan canvia l’orientació, vaig acabar fent-lo servir per a totes les activitats de les meves aplicacions. I llavors, van aparèixer els bugs.

Primer punt: L’ActionBarSherlock té un comportament estrany quan gestiones tu mateix els canvis d’orientació. En el meu cas, tot semblava funcionar, però en els dispositius amb Android <4.0, després de girar la pantalla, les pestanyes de la barra de navegació quedaven totalment congelades i no reaccionaven a cap clic. Com indica Jake Wharton en un dels informes d’errors:

FYI this may never be fully fixed. Avoid handling configuration changes at all costs.

Segon punt: Els AlertDialogs també tenen problemes similars, fins i tot a les últimes versions d’Android. En tenia alguns que, després de diversos canvis d’orientació, també es convertien en “inclicables”. No sé per què, però estic força segur que la causa deu ser la mateixa per la qual l’ActionBarSherlock també es torna “inclicable”.

Així… Què hauries de fer? Bé… simplement, utilitzar la manera normal de gestionar canvis de configuració a les activitats d’Android. És a dir, tenir en compte que la teva activitat pot ser recreada i desant i restaurant-ne l’estat utilitzant els mètodes onSaveInstanceState() i onRestoreInstanceState(), o utilitzant el mètode setRetainInstance() dels fragments. Assegura’t de llegir la guia oficial d’Android per gestionar els canvis de configuració.

Actualització d'un servidor Virtual Up de CDmon d'Ubuntu Natty a Precise

11 d'abril del 2013

Com ja vaig comentar a l’última publicació al blog, vaig canviar a CDmon fa uns quants mesos, i segueixo estant content del canvi.

Tot i això, tenia una preocupació: la versió d’Ubuntu instal·lada al meu servidor s’estava tornant obsoleta, ja que era Ubuntu 11.04 (Natty Narwhal). En veure que ja no tenia suport, i no rebia solucions a noves vulnerabilitats, vaig preguntar a l’equip tècnic de CDmon si tenien previst actualitzar els sistemes operatius instal·lables (que inclouen altres sistemes antiquats, com Fedora 15 o CentOS 5.7). Em van respondre dient que podia fer jo mateix l’actualització, sempre i quan anés amb compte de no tocar el kernel.

Suposo que els serveis Virtual Up de CDmon fan ús de la paravirtualització Xen, perquè el kernel requerit és de l’època d’Ubuntu 10.04 (Lucid Lynx)! Tot i que els paquets de Linux instal·lats són els de la versió Natty, el kernel que s’executa és el 2.6.32-5, com podeu veure:

root@tethealla:~# uname -a
Linux tethealla 2.6.32-5-xen-amd64 #1 SMP Tue Mar 8 00:01:30 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

O sigui… si el kernel que s’utilitza no és el que està instal·lat… per què preocupar-se? Hora de fer còpia de seguretat, i actualitzar a l’última versió! Vaig instal·lar el paquet del gestor d’actualitzacions:

apt-get install update-manager-core

I llavors vaig executar l’actualitzador:

do-release-upgrade

Ara ja estava actualitzat a Oneiric. Per suposat, em va preguntar què volia fer amb els fitxers de configuració que havia canviat, com és normal.

Després de reiniciar, cosa que no va comportar cap problema, vaig haver d’executar-lo de nou per actualitzar a Precise. O sigui que, repetició de la jugada:

do-release-upgrade

Després de reiniciar, l’ús de la CPU va pujar al 100% per culpa de rsyslog. Pel que sembla, hi ha un bug conegut al rsyslogd que provoca que es mengi tota la CPU en alguns kernels (potser això és culpa de tenir un kernel antic…!) O sigui, que vaig haver de desactivar el registre del kernel perquè tornés a la normalitat, tal com s’explica a les respostes del bug:

sed -i -e 's/^$ModLoad imklog/#$ModLoad imklog/g' /etc/rsyslog.conf

Després d’un altre reinici, tots els problemes estaven solucionats i el servidor funcionant perfectament! Tot i això, segueixo trobant això irònic:

root@tethealla:~# lsb_release -idrc
Distributor ID: Ubuntu
Description: Ubuntu 12.04.2 LTS
Release: 12.04
Codename: precise
root@tethealla:~# uname -a
Linux tethealla 2.6.32-5-xen-amd64 #1 SMP Tue Mar 8 00:01:30 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

Però bé, ja està! Sistema correctament actualitzat a una LTS sense cap problema greu. Ara ja no em caldrà preocupar-me fins al 2017!

« Entrades més noves | Entrades 6-10 de 22 | Entrades més antigues »