Resumen 2011 y objetivos para 2012

Este es el primer año que hago este ejercicio. Vista atrás y adelante para salir de la voragine diaria, coger algo de perspectiva y marcarse nuevos retos. Quizás en otro post comente más a fondo mis experiencias en el primer año de freelance.

Repaso general a este 2011:

  • Ha sido el año de mi salida de zara.com y el comienzo aventurero como freelance. Y sigo, así no ha ido mal del todo.
  • Mi primer proyecto más o menos serio con iOS para adianteventures. Es un gustazo aprender de otros en nuevos proyectos.
  • Mitwiz sale de beta privada y publicamos (y seguimos publicando) una saca de nuevas mejoras.
  • Bastantes contactos con potenciales clientes. Creo que he conseguido identificar los proyectos marronazo total, ahora me falta identificar los proyectos molones :) . Ningún problema con clientes, aunque muchas tomas de contacto que no fructifican. Creo que he tenido demasiada cautela, pero sigamos así.
  • Participamos en abredatos con comoestaelpanorama.com, quedamos en 4º posición y la experiencia no ha podido ser mejor, pena no haber podido asistir a Madrid a la entrega de premios.
  • Desastre total en cuanto a deporte: ni gym ni he conseguido realizar ningún otro deporte con mínima regularidad.

Y ahora lo bueno, objetivos para el 2012:

  • Comenzar a vender mitwiz. Sin duda una prioridad, y mucho trabajo por delante.
  • Continuar mejorando mis hábitos como freelance: horarios, paseos/distracciones, automatizar tareas rutinarias, y en general aprovechar mejor mi tiempo, trabajar menos vaya.
  • Continuar descubriendo rails. Conseguir mínimo 2 nuevos proyectos en rails, 1 está al caer, me falta otro así que ya sabeis ;) .
  • Conseguir de una vez hacer TDD o algo que se le parezca. Al menos conseguir crear buenos tests y datos de prueba.
  • Cerrar con éxito mis 2 primeros proyectos de ecommerce como freelance, sin duda el reto para los próximos 6 meses.
  • Escribir más en este blog. Cada vez escribo menos y es que cada vez tengo menos tiempo.
  • Volver a participar en ¿abredatos 2012?.
  • Ser más activo en alguna de las comunidades que me interesan: rails, agilismo, opendata, ios.
  • Mejorar mi inglés, esta ya va tocando :( .
  • Volver a hacer deporte, gym y algún otro deporte con regularidad, btt seguro :) .

Creo que estoy siendo demasiado optimista pero si no lo soy ahora ¿cuando?.

Leave a comment

Mitwiz abre sus puertas

Ya todos los usuarios registrados os habéis enterado a través del mail que enviamos hace unos cuantos días. Y muchos otros a través de las redes, el boca a boca, y nuestra insistencia personal a los mas allegados (esperamos que sin llegar a la pesadez :) ) para que probéis y nos reporteis sensaciones. Y eso, que solo me faltaba a mi, desde este mi humilde blog, decir eso de:

A estas alturas no os voy a contar que es mitwiz. Para esto podeis echarle un vistazo al blog y al propio mitwiz, debería quedar bastante clara la cosa, sino es así tenemos un problema no planteado hasta el momento ¡ponte en contacto por favor!.

De nuevo, esto no ha hecho mas que empezar. El camino por recorrer sigue siendo infinito, nos mantendremos firmes, creemos en el proyecto. Nos esperan un montón de nuevas funcionalidades, otros soportes, +integración con herramientas externas, mejoras en usabilidad, contenido, aspecto … y … alguna que otra sorpresa ya mismo ¡estad atentos!.

Nosotros seguimos actualizando semana a semana mejorandolo todo, y además mientras, nos divertimos de lo lindo :) .

Leave a comment

Probando geoplugin.net desde ruby

Ayer en un rato libre y tonto, estuve trasteando con ruby y el servicio de geolocalización por ip http://www.geoplugin.net. A la petición http://www.geoplugin.net/php.gp?ip=91.61.81.221 tenemos una respuesta del tipo:

a:14:{s:14:"geoplugin_city";s:8:"Chemnitz";s:16:"geoplugin_region";s:6:"Saxony";s:18:"geoplugin_areaCode";s:1:"0";s:17:"geoplugin_dmaCode";s:1:"0";s:21:"geoplugin_countryCode";s:2:"DE";s:21:"geoplugin_countryName";s:7:"Germany";s:23:"geoplugin_continentCode";s:2:"EU";s:18:"geoplugin_latitude";s:15:"50.833301544189";s:19:"geoplugin_longitude";s:15:"12.916700363159";s:20:"geoplugin_regionCode";s:2:"13";s:20:"geoplugin_regionName";s:6:"Saxony";s:22:"geoplugin_currencyCode";s:3:"EUR";s:24:"geoplugin_currencySymbol";s:7:"€";s:27:"geoplugin_currencyConverter";d:0.68893261679999995283907310295035131275653839111328125;}

Un objeto serializado al modo php. Depués de probar la gema json y otros medios de serialización/deserialización de objetos ruby sin éxito, me encuentro con la gema php-serialize que hace justo lo que necesito.

      require 'php_serialize'
      geo_request = Net::HTTP.get_response(URI.parse("http://www.geoplugin.net/php.gp?ip="+request.remote_ip)).body
      geo_request=PHP.unserialize(ip)
      puts geo_request['geoplugin_latitude']
      puts geo_request['geoplugin_longitude']

Seguro que existen otras formas más eficientes de hacer lo mismo, pero por el momento me ha servido.

Leave a comment

Eliminando un commit local en mercurial

Desde hace un tiempo estoy usando bitbucket.org para mis proyectos, ¡y bien contento que estoy!. Ayer gracias a un commit en falso encontré este fantástico manual hg. Eliminar un commit de mercurial es tan sencillo como:

hg strip revision_a_eliminar

Pero para ejecutar este comando necesitamos activar la extension mq de mercurial. En mi caso, osx, solo he necesitado añadir al fichero .hgrc:

[extensions]
mq=
2 Comments

Participamos en el abredatos 2011, !¿Como está el panorama?¡

Este fin de semana hemos participado en abredatos 2011 con ¡¿comoestaelpanorama?¡.

Mis compañero-cracks de aventura, Paula, Javi, Damián, con los que en su momento tuve el gustazo de trabajar/estudiar, pero con los que hacía mucho mucho tiempo que no colaboraba. Ha sido tooodo un placer volver a compartir code, proyecto y grata experiencia con ellos.

Abredatos:

Abredatos es un concurso (este año es la segunda edición), organizado por Pro Bono Público, para darle un poco de bombo al movimiento opendata en España. Intentar que la sociedad sepa que es y porqué se necesita el opendata, y que a la administración pública le llegue un poquito de ruído, y poco a poco (así es como funcionan estas cosas) estas ideas vayan calando. El concurso consiste en el desarrollo de una aplicación en nada menos que 48h!, y que consulte al menos una fuente de datos pública. Al finalizar el concurso (el domingo a las 00:00), todo proyecto debía tener un repositorio público con los fuentes, y su proyecto accesible para todo el mundo.

Nuestra participación:

Una primera toma de contacto allá por el 3 de abril, y un par de semanas después estabamos los 4 personajes comprometidos para participar (somos el equipo 62!), Javi y Paula desde Londres, Damián desde Vigo, y aquí un servidor desde Gondomar (vamos a ponerlo en el mapa).

Las siguientes fueron unas semanas de reflexiones e idas de olla sobre que podíamos hacer, que queriamos hacer, y si podíamos hacerlo (es realmente difícil con los datos disponibles hoy en día). La idea del empleo siempre estuvo presente por la importancia que tiene ahora, pero no conseguiamos encontrar nada realizable en 48h, nos faltaban muuchos datos (ya, por eso existe el concurso y para eso participamos, para que cambie el panorama).

Además de la idea del empleo surgieron otras: apps para geolocalizar información variada, y siempre por la zona de Vigo-Pontevedra (farmacias, bibliotecas, ptos wifi, buses,…), apps que ofreciera de una forma mas accesible contrataciones/licitaciones de la Xunta de Galicia, e incluso surgió la idea de un juego en el que elegir un par de congresistas, muy curioso pues finalmente el equipo 48 desarrollo un proyecto muy parecido, ¡y con un resultado fantástico!.

Técnicamente:

Después de plantear rails (sabeis que siento devoción por este entorno), Damián y yo llegamos a la conclusión de que ninguno tenía la experiencia suficiente como para llevar a cabo un desarrollo tan intenso, y enfrentarnos con éxito veloz a esos problemas que siempre acabas encontrando (sabemos como funciona esto, ley murphy etc etc). Así que nos decidimos por php y en este caso codeigniter, no somos los+cool pero ha cumplido a la perfección :P . Además usamos jquery, google maps api, php-excell-reader, google web fonts, google charts, google geocode.

Las fuentes que usamos para el proyecto han sido: estadísticas de empleo de redtrabaja, estadísticas de población del ine, y la api de opcionempleo.

Para versionar usamos git, alojando el código en github, podeís consultar los fuentes aqui.

El desarrollo:

El desarrollo durante el fin de semana tuvo varias fases de optimismo/pesimismo desmedido, en este sentido ya es complicado encontrar el equilibrio en un proyecto internet, ¡cuanto mas en un proyecto internet de 48h!, y cuanto mas en un proyecto internet de 48h y cada cual en un lugar diferente.

Durante el fin de semana, como no, el parseo de datos fué lo que mas complicó todo el desarrollo. Hasta el sabado de madrugada no teníamos todavía datos reales, y las funcionalidades implementadas trabajaban contra datos de pruebas, ¡muuucha incertidumbre!. Con el primer parseo serio teníamos datos incongruentes, en España había mas de 8M de parados, la cosa está mal pero no para tanto :) . Estabamos sumando las ultimas filas de los xls con el sumatorio, lo cual duplicaba todos los datos, ¡llegamos a pensar que habíamos interpretado mal la fuente de datos!, todo se vivía de una forma muy intensa y eran las casi las 5 de la mañana después de dormir 4h escasas la madrugada del viernes. Finalmente detectamos el error y el domingo por la mañana realizamos otro parseo con éxito.

Una vez datos parseados, teníamos ccaa/provincias/municipios y datos estadísticos asociados, nos quedaba un problema por solucionar, geolocalizar cada uno de los 8113 municipios de nuestra bbdd. La opción mas sencilla era google y su servicio geocode, pero a las 600-1000 peticiones eramos baneados. Los vecinos, un par de modems 3g y en el entorno de producción nuestras soluciones, así poco a poco fuímos geolocalizando de 1000 en 1000 +-.

Las últimas horas del domingo fueron para algunos detalles, necesitamos pantalla “sobre el proyecto“, estadísticas en portada, ¿de donde quitamos los datos?, etc. Finalmente esto es lo que ha dado de sí, sabemos que tiene cosas por pulir pero amiguetes, han sido 48h.

La experiencia:

La experiencia ha sido muy enriquecedora. Volver a trabajar con mis compis, saber que puedes dar de ti en tan poco tiempo, como organizar o mejor dicho desorganizar un proyecto así en tan poco tiempo, ver a cada momento como avanzaban los demás equipos, tomar tantas decisiones y en tan poco tiempo para poder llegar a tener algo, y la repercusión final.

Como apunte y que defiendo desde hace ya tiempo, comentar que el teletrabajo funciona y muy bien (he aquí la prueba), pero a mi no me convence, por lo que la próxima vez que participe en algo así intentaré, al menos con la parte más técnica, hacerlo de forma presencial, se pasa mucho mejor :) y se transmite mas conocimiento.

Para rematar, felicitar desde este mi humilde espacio a todos los equipos que han participado, en serio, las trabas para desarrollarlos son enormes, y los proyectos son de una calidad excelente.

Leave a comment

ruby1.9 y rails3 con rvm y passenger

Comentaba que uno de los caminos por los que me gustaría seguir es rails (ya veremos si lo consigo compaginar), así que en mi servidor de proyectos necesito servir rails además php.

Quiero usar rails 3 y ruby 1.9 (de empezar, con lo último), parece que versiones demasiado nuevas para las últimas estables de la mayoría de distribuciones linux. Así que después de investigar un poco me encuentro con rvm (ruby version manager, de este ya me había hablado @tothemario, un gestor de instalaciones ruby) y passenger (un proyecto para servir rails a través de apache o nginx).

A través de este artículo conseguí instalar rvm, no sin antes resolver varias dependencias:

sudo apt-get install zlib1g zlib1g-dev zlibc build-essential

Como nota mental, recordar añadir la siguiente linea al final del fichero .bashrc

[[ -s "/home/user/.rvm/scripts/rvm" ]] && source "/home/user/.rvm/scripts/rvm"  # This loads RVM into a shell session.

Y ya podemos instalar la versión de ruby que necesitemos con rvm install “version” y cambiar de versión con rvm use “version”, realmente sencillo.

Rvm y las versiones de ruby instaladas se encuentran en $HOME/.rvm en caso de instalarse como usuario o en /usr/local/rvm en caso de una instalación con root.

A continuación toca la instalación de passenger:

gem install passenger
passenger-install-apache2-module

passenger-install-apache2-module nos guiará durante la instalación, nos pedirá que instalemos determinadas dependencias que no cumplimos, de todas las que propone la que nos puede dar problemas es: apt-get install libopenssl-ruby.

Como hemos instalado ruby a través de rvm, este no se entera del soporte openssl que passenger propone instalar mediante apt, así que instalamos openssl con rvm, y reinstalamos la versión de ruby necesaria:

rvm package install openssl
rvm remove 1.9.2
rvm install 1.9.2 -C --with-openssl-dir=$HOME/.rvm/usr

Tras añadir las lineas respectivas a apache2.conf, ya tenemos rails3 funcionando en apache:

LoadModule passenger_module $HOME/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.5/ext/apache2/mod_passenger.so
PassengerRoot $HOME/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.5
PassengerRuby $HOME/.rvm/wrappers/ruby-1.9.2-p180/ruby

Finalmente intenté descargarme un proyecto privado desde github via http, para probar el entorno, pero la versión de git que tenía instalada (1.5) parece que da problemas con esta autenticación, así que buscando información actualizamos a la 1.7:

Añadimos el fuente de los backports al sources.list

deb http://backports.debian.org/debian-backports lenny-backports main contrib non-free

Y actualizamos la versión de git a la 1.7

apt-get update
apt-get -t lenny-backports install git

Fuentes:

http://www.fangiotophia.com/journal/2010/8/31/random-act-of-stupidity-6-debian-rails-3-setup-guide.html
http://beginrescueend.com/packages/openssl/
http://rvm.beginrescueend.com/
http://serverfault.com/questions/157383/why-does-the-debian-lenny-git-package-not-install-git
http://www.modrails.com/documentation/Users%20guide%20Apache.html

Leave a comment

Nueva aventura profesional, freelance

Casi año y medio ha sido el tiempo que he estado viviendo en Arteixo/Coruña, y trabajando en el equipo de ecommerce de zara.com. El reto y el proyecto mas gigantesco en el que he participado hasta ahora.

Estar en el momento en el que Zara ha comenzado a vender por internet, viendo desde un almacén como a cada minuto que pasaba se incrementaban los pedidos desbancando nuestras previsiones mas optimistas, y ver como decenas de personas comenzaban a trabajar con un proyecto en el que habías invertido tanto tiempo y esfuerzo meses atrás, ha sido una experiencia muy enriquecedora, inolvidable.

Pero, hacía ya varios meses que había tomado la decisión de abandonar el equipo, grandísimo equipo por cierto (personal y profesionalmente). Y desde hace mas tiempo todavía tenía ganas de emprender una nueva aventura, esta vez como freelance. Si no llega a ser por la aparición de zara.com estoy convenido de que la aventura habría comenzado antes.

A pesar de que mucha gente seguro que no entiende una decisión de este tipo, y en otros muchos casos no se ve con buenos ojos esta figura profesional, yo siento que es el momento de probar, me apetece, el tiempo ya me dirá si es una decisión correcta o si he de tomar otro camino, pero la mayoría de los que nos dedicamos a esta profesión tenemos el privilegio poder tomar una decisión así en algún momento, y yo la voy a aprovechar.

Soy consciente de que me tendré que enfrentar a multitud de problemas no conocidos hasta ahora, que la seguridad de cobrar a fin de mes se ha terminado, que lo de trabajar de 9:30 a 7 también (aunque este punto lo tengo superado). Pero a cambio, espero una aventura llena de nuevas oportunidades para hacer cosas, de nuevas relaciones profesionales (esta vez con clientes y colaboradores), y de aprender mucho sobre tantos temas que se nos escapan cuando únicamente tenemos que centrarnos en la parte mas técnica.

Y desde esa parte mas técnica, he sumado codeigniter a la lista de frameworks con los que estoy trabajando, a pesar de que hay cosas que todavía no me convencen del todo, cakephp me convence mucho menos (lo sé, me queda symphmy, zend y algún otro). Creo que haré un parentesis con j2ee, ya veremos cuanto dura. He terminado con @tothemario (que ha sido mi profesor de rails, ¡gracias!) el primer proyecto con rails, ¡me gusta mucho rails!, espero poder continuar por este camino. Y en breve espero comenzar a desarrollar con iOS de la mano de adianteventures con los que estoy seguro que me lo pasaré muy bien colaborando en proyectos muy “chulos” :) .

Como no, llegados a este punto tengo que hacer una mención especial a mitwiz, porque mitwiz sigue vivo, congelado los últimos meses debido a todos estos cambios y tantísimo trabajo, pero vivo. Y espero que ocupe un lugar privilegiado en esta nueva etapa de mi vida profesional. Ilusión y ganas desde luego no faltarán, aunque se necesitan otros factores para continuar un proyecto de este tipo y en nuestras circunstancias.

En fin, que mucho camino por andar, muchísimo mas por aprender, muchas aventuras por disfrutar y espero que las menos por sufrir. Estareis informados ;) .

Leave a comment

Ha comenzado nuestra aventura con mitwiz.com

Hace algo mas de un año que @carlos y @yo comenzamos la aventura mitwiz. Nuestra principal motivación desde entonces cara este proyecto ha sido la convicción de que se podía ofrecer algo diferente para localizar eventos que nos interesan (mejor, peor o simplemente diferente a las alternativas actuales, eso lo diréis vosotros). Y nuestro principal y primer objetivo el de llegar a lanzar una beta privada como la que desde hace un par de semanas podeis probar.

Este primer objetivo, a priori, puede no parecer muy ambicioso, pero lanzar este proyecto sin ningún tipo de financiación mas que la nuestra (imprescindible para la publicación) y compaginándolo con nuestro trabajo diario no ha sido tarea sencilla, y sabemos que nos queda lo más difícil. Muchas distracciones y muy poco tiempo tanto para desarrollar como para pensar sobre qué, y como debe ser mitwiz. Y lo mas difícil, siempre lo mas difícil, intentar pasar a un segundo plano nuestras ideas accesorias, que aunque buenas, no son el alma de mitwiz.

Simplemente llegar al lanzamiento de esta beta privada para nosotros es un éxito (esperamos que solo el primero de muchos), que no hemos conseguido sino con ilusión, muchísimo esfuerzo, trabajo constante y confianza en nuestras ideas, factores que siempre han estado por encima de esos momentos de debilidad que existen a la hora de emprender cualquier tipo de proyecto.

Pero ¿que es mitwiz? os estareis preguntando. La mejor forma de saberlo es probándolo, también podeis echar un vistazo al primer post en el blog (http://mitwiz.blogspot.com). Pero como linea resumen, puedo deciros que queremos que mitwiz sea un sitio en el que podáis encontrar eventos que están cerca de vosotros, en el que podáis crear eventos públicos o privados, e invitar a vuestros amigos a eventos existentes o creados por vosotros, siempre de la forma más sencilla posible, y sin mas distracciones que los eventos.

Por supuesto, si quereis conocer el corazón de mitwiz podeis pedirnos invitaciones. Todos los comentarios/sugerencias/reportes de errores, que podeís enviar a http://mitwiz.uservoice.com, serán de una gran ayuda, imprescindibles para que esto llegue a funcionar.

Por nuestra parte seguimos trabajando, tanto para resolver vuestras peticiones como en nuestras nuevas ideas, que esperamos que algún día, hagan de mitwiz vuestro sitio de referencia en la web a la hora de encontrar que hacer, en cualquier momento, y en cualquier lugar :) .

4 Comments

Aprendiendo a desarrollar con tests

El proyecto en el que trabajo actualmente es mi primera experiencia mas o menos seria con el desarrollo orientado a tests. Al principio los escribía después de implementar la funcionalidad requerida, pero por recomendación de un compañero pasé a escribirlos antes (TDD). Escribes el test que falla porque todavía no tienes implementada la funcionalidad que lo hace pasar, implementas la funcionalidad para que pase el test, y le das las vueltas que necesites a tu código (para hacerlo mas legible o eficiente) si el test pasa tu código es válido.

Cuesta iniciarse en esta forma de desarrollo, cuesta escribir buenos tests, cuesta mantenerlos, pero como se suele decir es una inversión con retorno y me estoy convenciendo de que estos son imprescindibles para profesionalizar en gran parte nuestro trabajo. Es mas, ahora me acuerdo de algunos proyectos en los que trabajé anteriormente y lo bien que nos habrían venido en el testeo de algunos procesos complejos, la de tiempo que habría ahorrado y sobre todo la tranquilidad que habría aportado al equipo.

De todas formas, aun tenemos algunas lagunas, por lo menos yo no tengo nada claro como se debe mantener un juego de datos coherente con el que hacer pasar los tests, sin que esto lleve mas tiempo que beneficio, por el momento tenemos 2 aproximaciones:
- Almacenar con dbunit un juego de datos (xml, cvs, etc) con unos identificadores reservados (por ej de 1 a 500), e importarlos a BD cada vez que pasemos los tests.
- Usar una BD independiente contra la que ejecutar los tests.
Usaremos la segunda opción aunque insisto, no tengo una postura clara sobre el tema y no termina de convencerme.

Hay quien dice que lo mejor es tener los X registros que necesitamos en xml para cada test de forma independiente, solo esos X registros ni uno mas ni uno menos. Me gusta la idea de tener muy controlados los registros que pruebas y que todo el equipo los conozca, del identificador 1 al 20 entidad en Y estado, del 20 al 40 en Z estado etc etc.

Al final escribir y mantener tests y sus datos de prueba no es gratis, lleva tiempo y creo que no solo cuando empiezas, pero debes convecerte de que es la forma de garantizar un software de calidad, de desarrollar con tranquilidad sabiendo que si haces algo que afecte a otra parte del sistema te vas a enterar antes que tu cliente. No creo que se escriban tests para hacer el desarrollo mas rápido sino para hacerlo mejor.

Recomiendo especialmente un par de podcasts de javahispano sobre el tema:

http://www.javahispano.org/contenidos.item.action?id=1985256&menuId=JH_PODCASTS

http://www.javahispano.org/contenidos.item.action?id=6813316&menuId=JH_PODCASTS

Y habrá que seguir leyendo y buscar mas opiniones de gente con experiencia.

1 Comment

6 meses después

Hace algo mas de 6 meses que cambié mi trabajo anterior, teletrabajo, bien remunerado y con un stress aceptable en una mediana empresa, dedicada al desarrollo de un producto de software para realizar reservas de viajes (negocio complejo donde los haya), a formar parte del equipo de uno de los proyectos de ecommerce del año, de una de las empresas mas importantes del sector textil.

Esto trajo consigo mi primer cambio de residencia, de Gondomar a Arteixo, mi primera experiencia viviendo solo, la primera buscando alquiler, y así un largo etc.

Hasta ahora y a pesar de haber tenido momento buenos y malos (algún día me reiré de ellos), siempre he tenido la sensación de haber hecho lo correcto, de no haber dejado pasar la oportunidad de participar en un proyecto tan importante, y sobre todo la convicción de que es mejor arrepentirse de haber tomado una decisión así que de lo contrario.

El subproyecto que me han asignado (que se encargará de la parte logística del macroproyecto) toca un sinfín de tecnologías y herramientas del mundo j2ee, muchas de ellas nuevas para mi, por lo menos a este nivel: spring; hibernate; ejb3; junit; jms (mq); websphere; jetty; maven; sonar; bamboo, rad. En definitiva mucho j2ee, mucho ibm y prácticas ágiles.

Por lo demás estamos entrando en la fase final de http://twitter.com/mitwiz espero que muy pronto podais comenzar a probarlo, que tengamos un feedback real y sepamos si estamos en buena linea o no, si os gusta o creeis que es “otro mas” una perdida de tiempo por nuestra parte :$.

PD: A finales del año pasado los grandes “gurús” vaticinaban que este sería el año del ecommerce y de android: Yo tb creo que esté será el año de ecommece (http://twitter.com/#search?q=%23ecommerce), pero este y el siguiente, y el siguiente… ¿De android? veremos como avanzan y sobre todo con que nos sorprende apple y su nuevo iphone.

1 Comment