Resumiendo 2011

Reloj. No marques las horas. Que el 2011 se acaba... Foto de Flickr. Click para ver original

Reloj. No marques las horas. Que el 2011 se acaba... Foto de Flickr. Click para ver original

El otro día, mientras buscaba siguientes acciones y repasaba tareas en mi sistema GTD (en el que uso Things e iCal entre otros) me encontré con una tarea titulada: «Escribir post resumen año». Era del año pasado. GTD, pese a lo que mucha gente piense te hace ser más productivo pero no te permite «hacerlo todo». Te centras en acabar aquello que es realmente importante. Y hay cosas que pueden quedar aparcadas. Estas cosas aparecen en las revisiones, que para eso están. Lo importante: hacer primero las cosas importantes. Las otras, a veces no son ni necesarias.

El caso es que este año sí que quiero cumplir e instaurar una costumbre. Cada año quiero, en Enero, plantearme una serie de retos, de objetivos, de propósitos, de cosas a cumplir. Revisarlas durante el año, para ver si voy cumpliendo, y luego, en Diciembre, echar la vista atrás. Para mortificarme con las cosas no conseguidas (que será lo más normal, dada la tendencia que tenemos a autoflagelarnos), pero para disfrutar igualmente con aquello que nos planteamos hacer y hemos hecho. Nos merecemos una auto-palmadita en la espalda cada vez que hacemos algo bien. Y muchas veces, cuando conseguimos algo que nos ha costado sangre, sudor y lágrimas no dedicamos ni cinco minutos a sentarnos, reflexionar y disfrutar de ese pequeño triunfo. Así que escribiré posts resumen de cada año a partir de ahora.

Nota: además, me empujó a ello que Xelecto había escrito el suyo.

Este año realicé la revisión del 2010 en Febrero del 2011, un poco tarde. Pero los propósitos de año nuevo los llevo apuntando en una libreta desde Navidades de 2009. Así que este año es la tercera vez que los preparo. Y, al menos a mí, me funcionan. Me ayudan a saber por qué me levanto cada mañana, qué quiero conseguir, qué es realmente importante. No apunto cosas como «ser feliz». Si considero que para ser feliz tengo que visitar, al menos una vez en la vida la India, entonces el objetivo será hacer un viaje. Que se descompondrá en tareas, claro: conseguir pasta, actualizar el pasaporte, buscar vuelos… Pero todo empieza con plantearte qué quieres. Que no es fácil. Si te preguntan «¿qué necesitas para sentirte mejor?» veréis que no es sencillo responder a esta pregunta.

Resumen del 2010 2011

2011 ha sido un año «montaña rusa». Comencé el año publicando dos mini aplicaciones en la App Store (que, por cierto, tengo abandonadas; ahora les toca). Y con muchas dudas. Dudas sobre si debía volver a trabajar por cuenta ajena, sobre si me había equivocado, sobre si daba la talla, sobre si podría aprender. Cocoa no me entraba en la cabeza. Problemas de salud de mi padre. Estaba amargado. Enero y Febrero. Malos tiempos.

Como estaba pensando demasiado y programando poco, me lancé a una «orgía» de impartir formación: cursos de Java de todos los colores: básicos, avanzados, de Java EE, de preparación para las certificaciones, de frameworks (Struts2, JSF). Hasta impartí un curso de programación en C (que, por cierto, disfruté como un enano). Me metí una sobredosis de trabajo, para sacudirme las tonterías de encima. Y funcionó. Incluso pude desarrollar una App para iPad (la primera). Y volví a escribir para una revista, con pequeñas colaboraciones en forma de columna (iPhone World). Lógicamente, se cumplió la Ley DFreniche del agobio en el trabajo: «las mejores ideas para programas se te ocurren justo cuando no tienes tiempo para programar» (Citation needed).

Llegó el verano. Me fui de vacaciones. Y me picó el bicho del freelancing de nuevo. No quería trabajar para nadie. Esto iba a funcionar. Era capaz de todo. ¡Voy a ponerme la capa y los leotardos, puedo volar!. Me ayudaron varias cosas a volver a tener ganas. Primero, facturar, que siempre se nota. Sentirme útil. Ser capaz de hacer la App de iPad. Y ser contactado por varias empresas que querían contratarme, en base a mi perfil en LinkedIn. Muchas de ellas, muy interesantes. Que alguien considere contratarte, tal y como están las cosas, es señal de que algo estás haciendo bien. O eso, o mientes maravillosamente 🙂

Encima en Agosto pude comenzar a programar para WebOS y aprender JavaScript. He disfrutado / sufrido con el desarrollo, pero he aprendido mucho. Y en Septiembre acudí al iOSDevUK, una experiencia fantástica. Lo mejor: conocer un trocito de Gales y estar con Fernando y Bernardo. Y luego vino la conferencia NSCoder ES en Vilanova i la Geltrú. Y empecé a grabar Café y Cocoa. Y ahora José Antonio Blanco me deja hablar con él y otros cracks como él de vez en cuando en We.Developers. Y me entrevistó Luis-Philippe. Y estoy preparando varias Apps para iOS. Y he escrito dos artículos para MacWorld. Y…

Muchos proyectos, muchas cosas terminadas en lo profesional. Y en lo personal. Me planteé este año acostumbrarme a hacer deporte, y se ha convertido en un hábito. Si paso 3 días sin correr / caminar me siento mal. Ya lo que me cuesta es no hacer nada. Me planteé perder peso, y eso lo he conseguido a medias (he recuperado parte del peso, los mantecados). Pero no me preocupa, mientras siga haciendo deporte. Me fijé como meta correr la nocturna del Guadalquivir y lo hice, aunque acabé bastante mal :-D. Y de propina, me caminé 23 Km. en el Homenaje a la 101 de Ronda, que repetiré en 2012.

Y claro, otras muchas cosas no las he conseguido. Hay defectos personales en los que tengo que trabajar. Y un proyecto se convirtió en una pesadilla horrible, de lo peor del año. Este año me gustaría leer libros no de informática, para variar. E insistir en hacer lo que sea preciso para conseguir cumplir mis sueños. Tengo suerte de tener la mujer y la familia que tengo, de ganarme la vida con una profesión que me apasiona, de tener amigos de verdad y conocer a un montón de gente interesante. Es hora de devolver, en forma de trabajo bien hecho, de esfuerzo y de responsabilidad. Y de alegría.

Feliz 2012. Puedes hacer que este año sea como tú quieras. No te resignes. Yo no lo voy a hacer.

j j j

Mi TouchPad

Llevo usando una tablet TouchPad de HP desde mediados de Agosto. Si, si, justo esa: la que HP comenzo a vender con WebOS a precio de iPad, que luego rebajó y acabo poniendo a precios de saldo, casi suplicando que se la quitaran de las manos. Esa que esta en estado de zombie: es un no-muerto que camina. Esa que el anterior CEO de HP, Leo Apotheker (un genio en esto de quebrar empresas, por lo visto) decidio cancelar de un plumazo, dejando a propios y extraños con cara de tontos.

El caso es que en Agosto me propusieron desarrollar algunas Apps para WebOS, el S.O. de la TouchPad. Y no pude negarme. La idea de aprender un nuevo lenguaje (JavaScript), con un framework de desarrollo desconocido (Enyo) sobre un S.O. del que habia escuchado maravillas (pero nunca había probado) y poder cacharrear con un nuevo chisme me hicieron aceptar sin pensar. La unica condicion que puse era poder disponer de un dispositivo real sobre el que probar, y poder quedármelo. Y así ha sido: ahora soy el orgulloso propietario de una TP de 32 GB, con la que estoy muy contento.

En tres meses he desarrollado tres aplicaciones que ya estan en la tienda de aplicaciones de HP para la TouchPad (HP App Catalog). Por motivos de acuerdos de confidencialidad no puedo decir cuales son. Busca las tres mas bonitas, y esas son las mias :-). Por si alguien no lo ha pillado, repito: en tres meses, partiendo desde conocimientos nulos en todo (S.O., lenguaje, framework, herramientas) tres aplicaciones acabadas. WebOS / Enyo es un entorno increiblemente sencillo, potente y productivo para desarrollar, cuando le coges el tranquillo. Es una autentica pena que se cargasen este S.O. Pero asi es la vida.

Y antes de seguir hablando de mis experiencias y usos de la tableta, quiero dejar este punto bien claro. WebOS esta muerto sin posibilidad de resucitar. Seguira existiendo, en una medio vida, mantenido por una fiel comunidad de aficionados. Pero no va a existir ningun «comeback» triunfal de WebOS, ni va a destronar a iOS, ni nada de nada. He visto esto mismo montones de veces en el tiempo que llevo alrededor de esta industria. Lo vi cuando Amstrad acabo comprando Spectrum, que en su epoca fueron de los pioneros en las micros. O cuando Amiga sucumbio ante Windows. O cuando OS/2 Warp desaparecio de escena. O, año tras año, cuando se anuncia, ya de broma, que sí, que de verdad este va a ser el ano de Linux en el Escritorio y se va a desbancar a Windows.

Ser mejor tecnicamente que otros no es garantia de exito. Vender mucho y con buen margen si. Eso es lo que tendrian que haber pensado antes de sacar la HP TouchPad. Pero da la impresion de que Leo queria que la tableta fracasase rapidito para quitar «esta tonteria de Palm» lo antes de la idea que tenia de la nueva HP, una empresa enfocada solo al sector profesional. Al final, Leo ha dejado de ser CEO de HP antes que WebOS muera, pero el daño ya está hecho. Ahora deshojan una margarita para ver cómo malvender Palm. Al final, WebOS creo que acabará siendo Software Libre. Como Maemo o Meego. Ambos, dos excelentes productos. Y sí, con esas cotas de popularidad.

(Nota: esto lo había escrito antes de que HP anunciase que, efectivamente, va a liberar el código de WebOS y Enyo. Pero a día de hoy no se conoce ni el proceso, ni la licencia, ni nada)

El caso es que disfruto mucho con mi TouchPad. Su factor de forma es parecido al del iPad 1. De hecho, las fundas de iPad 1 son compatibles con la TouchPad. Usan el mismo display (1024 x 768, el mismo del iPad 2 por cierto). Y tiene muchas cosas chulas. Por ejemplo, al conectarla por USB aparece como una unidad mas y puedo intercambiar ficheros sin limitacion. Puedo usarla de disco USB de 32 GB, lo cual no esta mal. Creo que esto, para un usuario no avanzado es un problema. Para un geek como yo, es una puerta abierta al cacharreo.

Otra cosa que me encanta es que puedo pasar los videos de iTunes directamente ya que reproduce sin problemas H.264. Asi que puedo ver los vídeos de la WWDC o de formacion de Stanford simplemente copiándolos. Y tiene algo que odio, pero que debo reconocer que he usado en no pocas ocasiones para ver video: Flash. Puedo ver videos directamente en la pagina de YouTube o en Vimeo sin problemas. Y es una gozada cuando no quieres bajarte nada, directamente te vas al video y listo, lo ves en streaming. Comiéndote la batería, eso sí.

Cuando te compras la TouchPad viene en una caja con todo muy «apretado». Y vienen pocas cosas: la tableta, un cargador de pared (que es también cable USB para sincronizarla) y poco más. Pero aprovechando que en Septiembre estuve en el iOS Dev UK tuve la suerte de encontrarme en un Carphone Warehouse un teclado inalámbrico HP y la base de carga TouchStone. He grabado este vídeo mostrando la tableta y sus accesorios. Grabado con el iPhone 4 y poca luz, pero creo que se ve.

Como se puede ver en el vídeo, la TouchPad admite «dual boot» de WebOS y Android. Tengo instalado CyanoGen Mod 7 con un Android 2.3.7 que va francamente bien. Aunque la experiencia no es igual de pulida que en WebOS, pero está bien el poder usar más de un S.O. en la TP. Si no encuentro suficientes juegos para los niños, reinicio en Android y listo.

Si puedo y tengo tiempo, voy a seguir desarrollando mis propios proyectos para WebOS 3.0 / Enyo. Quiero profundizar en JavaScript y aprender Node.js. Igualmente, me gustaría tener una App con mi nombre en una segunda Store. Y así, irlas colonizando todas 🙂

j j j

We.Developers

Logo de We.Developers

Logo de We.Developers

Que soy gran fan y seguidor de José Antonio Blanco (y de su otra mitad, Valen) del podcast Macniacos no es ningún secreto. Desde que Juaco me comentara que escuchaba a dos pesados hablando dos horas seguidas sobre Mac y lo mucho que le servía, empecé a escucharles y me aficioné a su podcast. Cuando en el EBE 09 pude grabar su episodio en directo, junto con TaZZiTo, Serantes y Berto Pena (vaya lujo de equipo) lo pasé como un enano.

Por eso, cuando Jose me comentó que tenía ganas de empezar un podcast en paralelo con Macnicacos, pero más hardcore, más orientado a informáticos / programadores, donde poder hablar sin tapujos de frikadas de las que no puedes contarle a tus amigos no informáticos no lo dudé ni un segundo y dije que cuando y donde fuera, pero que yo quería participar. Y así ha nacido We.Developers, un podcast coral (Jose será el hilo conductor, e irán desfilando distintas personas que irán hablando de temas diversos de programación) sólo apto para programadores. Un sitio donde comentar que te gusta hacerlo todo con void * en C sin que nadie te mire raro. O en el que defiendas a COBOL y su espíritu de hacer un código que se autodocumente, escribiendo sentencias muy, muy largas. Mira, justo como se hace en Cocoa hoy en día… 😀

De momento se ha grabado el episodio piloto, pero como hay ganas seguiremos. Por culpa de esto (y de Café y Cocoa) me he comprado un micrófono Blue SnowBall, para sonar algo mejor en las grabaciones. En el podcast, en su web y en el logo se nota (mucho) la mano y el cariño que Jose le pone a sus proyectos.

Así que ya sabes: si te gusta programar, escúchalo y anímate a proponer temas. De cualquier lenguaje y plataforma. Ver el mundo desde distintos puntos de vista ayuda mucho a comprenderlo mejor.

:wq *

* he robado hoy el cierre del post a otro maestro.

j j j

La NSConf11 de Vilanova i La Geltrú

Este pasado fin de semana tuve el placer de asistir a la primera Conferencia que ha organizado a nivel nacional la Asociación NSCoders España. Asociación a la que pertenezco y, la verdad, y no es por ser nosotros los organizadores, pero nos ha salido casi redondo. Y encima no sólo iba a escuchar. Cometieron el error de dejarme hablar. Y claro, me dediqué a desvariar un rato y, entre chiste y chiste, contaba cómo hacer un cliente RSS para iPhone.

Aún no se si realmente alguien aprendió algo de mi charla. Yo me lo pasé muy bien, aunque no las tenía todas conmigo. El Viernes anterior había estado toda la mañana programando con JavaScript y el framework Enyo para la HP TouchPad. Y por la tarde había estado viendo detalles intrincados de Java en un curso de preparación para el OCP Java SE 6 que estoy impartiendo. Y Cocoa ya no me cabía en mis maltrechas neuronas. Al final parece que Cocoa fluyó (con ayuda de muchos cafés) y me pude escapar sin demasiados tomatazos. Y aquí es donde empezó realmente lo bueno.

Este año he ido a otra conferencia, el iOSDevUK en Gales, que me encantó. Pero comparando ambas, en la NSConf11 he escrito código. No sólo he escuchado, aprendido y charlado de código. He trabajado el código. Como en el increíble taller de TDD que impartió Pedro Santos, tras su charla sobre Behaviour Driven Development. Aquí tuve el privilegio de picar código mientras hacíamos pair programming aplicando el proceso paso a paso de TDD. O la charla sobre Chipmunk de Óscar Cardona, que nos dejó a todos atontados y pensando «esto no puede ser así de simple, o hay más código o este tío explica muy bien esto». O el taller de Core Plot, donde vimos cómo hacer gráficas complejas con esta librería, gracias a la demo de Víctor Jalencas. Y tantas y tantas ponencias interesantes. La única pena: las que me perdí mientras yo hablaba, y las que tuve que elegir, perdiendo la que se presentaba en paralelo.

Lo mejor, la gente que he conocido. Gente con muchas ganas de aprender, compartir y enseñar. Gente encantadora y que, como los miembros de la NSCoder_bcn que han organizado el evento, se han matado para que todo estuviera perfecto, como al final ha sido. Creo que nadie pensaba que en una primera conferencia íbamos a tener tanto público. Esto puede llegar a ser una WWDC hispana. Trabajaremos por ello. Gracias a José Juan, nuestro presidente, o a Guillem o Leandro, o Xabi, o… por la paliza enorme que se han dado.

He podido conocer en persona (yo no «desvirtualizo» a las personas: las conozco) a José Lobato, ídolo de masas Geeks y gran bebedor de cerveza :-D. El tío en persona es para comérselo, y gran parte de la «culpa» de que todo esto se originara es la semilla plantada desde 85% Cocoa con las NSCoder Nights. Otro que me ha impresionado y he podido escuchar con respeto reverencial es Iván Leider. Él es un Maestro Jedi del desarrollo. Yo, ni Padawan…

Y demostrando que el mundo geek también es un pañuelo, conocí a Daniel García, el programador de la App de Minube para la TouchPad. Creo que allí estábamos los dos únicos programadores Enyo de toda España :-). Bueno, alguno más habrá, pero no creo que más de 10…

Y claro, me he hinchado a comer, he visto algo de Vilanova i La Geltrú (principalmente de noche) y no he parado de hablar. La experiencia no merece la pena: es imprescindible si desarrollas en Cocoa. Yo el año que viene, repito. Espero que alguien recapacite y no me dejen hablar.

Os dejo con un Vídeo de Vilanova Digital en la que «el presi» de la Asociación explica (en Catalán, pero se entiende perfectamente) qué es la NSConf11

Y el que quiera el código del RSS Reader que utilicé de ejemplo, lo tiene en: https://github.com/dfreniche/SimpleRSSReader

j j j

Conferencia NSCoders Apple Conference 2011, ¡ya casi está aquí!

NSCoders Apple Conference 2001

NSCoders Apple Conference 2001

¿Cómo? ¿Que aún no te has apuntado a la NSCoders Apple Conference 2011? ¡Pues ya estás tardando! Podrás ver allí a lo más granado de las distintas NSCoder Nights de toda España. Yo voy a impartir una de las sesiones. Así que ya sabes: no hay excusa para no invitarme a un café, o a un MacBook Air, lo que te venga mejor.

Por si esto de la NSCoder te deja frío y no sabes de qué te hablo, te recuerdo que las NSCoder Nights son reuniones de programadores, diseñadores, gente interesada en el desarrollo en plataforma Apple, que se juntan en un bar a charlar, tomar unas copas, e incluso programar. En Sevilla tenemos una muy animada, a la que te invito a venir, si te pasas por la ciudad. Incluso puedes montar la tuya propia.

El caso es que la idea ha cuajado, y han surgido como setas las NSCoders. Y claro, todos queremos más. Realmente nos da envidia la WWDC, pero es que es una pasta ir a San Francisco :-D. Y aquí va a ir gente de auténtico nivel. Yo voy de relleno.

No le des más vueltas y reserva ya. ¡Es gratis!. Vente en barco, en avión o en burro, pero vente con tu Mac.

Keep coding!

j j j

Ejemplo de menú para una aplicación Enyo/WebOS

Si no te quieres leer todo este rollo, puedes ir a GitHub y bajarte el código fuente.

Este año he tenido la gran suerte de que se me presenten muchos proyectos, a cual más interesante y excitante. Desde una oportunidad para trabajar como Genius en una Apple Store hasta la posibilidad de integrarme en una compañía fantástica de desarrollo móvil, como es Mobivery. Oportunidades realmente estimulantes, que me hacen pensar que estoy vendiendo la moto de forma inconsciente, porque tampoco soy tan bueno programando. Aunque sí que me merezco los sueldos más altos que se puedan pagar 🙂

No me he arrepentido de no aceptar estas ofertas porque volví de las vacaciones con mi «vocación emprendedora» más fuerte que nunca. Con ganas de hacer cosas, y sobre todo, de programar. Y parece que el Karma me ha recompensado, ya que se me planteó la posibilidad de desarrollar para la plataforma WebOS, y concretamente para la tableta de HP/Palm TouchPad. Tenía muchas ganas de conocer otra plataforma de desarrollo móvil, y, aunque ya me había hecho el «Hello World» con QT para Maemo y no acabo de encontrar ganas para explorar Android, no me lo pensé y acepté. Con una condición: quería un dispositivo para hacer las pruebas. ¡Me encantan los chismes!

He dedicado Agosto a aprender sobre el desarrollo de WebOS, a la vez que iba desarrollando la App para el cliente. No tenía ni idea, nunca había visto nada de WebOS (aparte del S.O. a nivel de usuario, y a través de vídeos). Empecé viendo vídeos sobre el desarrollo con Mojo, hasta que me di cuenta de que para la nueva versión del S.O. WebOS (la que viene con la TouchPad) es necesario desarrollar con el framework Enyo. Me instalé el SDK y el emulador, y me lancé a probar ejemplos. Me registré como desarrollador en Palm. Era divertido. Salvo cuando no lo era. Apenas hay ejemplos de Enyo por ahí para mirar, casi ningún tutorial, y en StackOverflow muy pocas preguntas / respuestas. Me quedaban los propios foros de Palm.

A esto hay que sumarle que yo no tengo ni idea de JavaScript. Cuando digo ni idea me refiero a que podía usar una biblioteca de funciones, pero sin conocer el lenguaje. Esto tiene fácil arreglo y me he lanzado a aprender JavaScript.

Y entonces llegó el bombazo: HP abandona la producción de dispositivos con WebOS, vende de forma apresurada las TouchPads para quitarse de en medio el Stock, y dice que quiere vender su parte del negocio de venta de PCs. Muy divertido. Incluso he bromeado en Twitter, viendo mis últimas adquisiciones y su posterior destino (Nokia N900, HP TouchPad) sobre mi capacidad gafe para hundir una empresa. Aunque pocas bromas: el proyecto que estaba haciendo entró en soporte vital, y estuve unos días esperando a ver qué pasaba. Finalmente se ha decidido concluir las Apps y subirlas a la tienda española, que se abrirá espero en Septiembre / Octubre. un alivio, porque realmente me gusta el desarrollo con Enyo, me parece un cambio tan radical desde Cocoa que me permite mantenerme fresco programando todo el día: un rato Cocoa y luego Enyo / Javascript.

Pero hay muy pocos ejemplos sobre Enyo. Así que, tras sufrir unos días con una parte de la App, he decidido crear un pequeño ejemplo de una App con un menú fijo a la izquierda, y con vistas que van cambiando según se pulsan las opciones de menú. Nada espectacular, pero hasta dar con la tecla de cómo combinar los Enyo.Pane con los Enyo.SlidingPanel me ha llevado un rato. Así que, si quieres probar la app, te instalas el SDK (lo necesitas para tener la librería Enyo), te bajas el código fuente del ejemplo de GitHub, y lo pruebas con un navegador WebKit (Chrome o Safari). También puedes usar el código como esqueleto para tus nuevos proyectos con Enyo, si es que te animas.

Os dejo unas capturas de la App, para que la veáis en acción:

Primera opción de menú

Primera opción de menú

Segunda opción de menú

Segunda opción de menú

Lo más complicado: el menú y los sliding Panels

Lo más complicado: el menú y los sliding Panels

j j j

Aprendiendo a aprender Informática (y JavaScript)

Esta es la vida del informático. Da igual los años que tengas: la sensación es que nunca tienes ni idea de nada. Avanza tan rápida la industria que, por mucho que hagas, siempre te quedas atrás. Y hay que tomar decisiones. Los tiempos aquellos de poder ser un «informático renacentista» que sabía de hardware, de software, de todo un poco, pasaron. Yo hace tiempo que desistí de aprender ciertas cosas (como BB.DD.) y me centré en otras. Si no enfocas sobre un tema, no hay manera.

Por eso te recomiendo que sigas mi «método» sobre cómo aprender, en general, mientras avanzas en tu carrera profesional como informático:

  • asúmelo: siempre va a haber muchas más cosas que NO sepas, que las que sabes. Aunque ahora aprendas Ruby, mañana necesitarás Java. O JavaScript. O C++, Clojure, o lo que sea. Nunca lo vas a saber todo. Y no pasa nada.
  • hablar estas cosas y admitir las propias carencias frente a nuestros compañeros nos quita un gran peso. Porque la mente es mala, y constantemente te dice «mira que no saber CSS, seguro que todos estos ya hacen transformaciones CSS3 mientras duermen, y tú aquí, sin tener ni zorra idea de nada, mira que eres torpe…«. Nos machacamos sin piedad, y resulta que cuando preguntas no todo el mundo está tan avanzado. Es más, si tienes esta inquietud, probablemente tú ya sepas algo: «sólo se que no se nada«. Uno de los motivos por los que voy a las NSCoder Night es por hacer esta «terapia de grupo».
  • no te dejes llevar por el agobio, o el estrés. Sí, vale, que tienes que entregar el proyecto para ayer: entonces usa Google (o mejor, stackoverflow). Pero márcate unos objetivos cada año, y aprende o profundiza en algún aspecto que te sirva y te interese: un lenguaje de programación, dominar un IDE, ver qué sistema de control de versiones te gusta más, patrones de diseño, UML, etc. Si tienes esos objetivos marcados y los cumples, cada año sabrás más que el anterior. No son importantes los años de experiencia, sino lo que experimentas durante esos años.
  • lee libros. Internet es fantástico para búsquedas de dudas, y hay muchos tutoriales. Pero muchos de ellos no se pueden comparar al material que encuentras en un libro: bien pensado, estructurado, con ejemplos. Además, leer un libro supone un esfuerzo y desarrollar una concentración que nos viene bien como programadores: cada vez somos menos capaces de concentrarnos durante un par de horas, por culpa de las interrupciones. Leer te obliga a trabajar esos conocimientos, y así a aprender.
  • una vez leas libros, busca vídeos del tema. En iTunes (y en Internet en general) hay vídeos de casi todo. Es bastante ameno ver cómo se hace algo, en lugar de tener que leerlo. Pero hazlo siempre después de leer el libro.
Estos son los pasos que suelo dar, y me han servido tanto para las certificaciones Java, como para aprender Cocoa Touch. Y este verano me ha surgido la oportunidad de poder empezar a desarrollar Apps para otra plataforma móvil, WebOS y el HP TouchPad. El problema es que (ver punto primero) no tengo ni idea de JavaScript. Solución: tirar de Amazon.co.uk (que a partir de una cantidad no cobra gastos de envío) y pedirme estos dos libros sobre JavaScript:
Libros JavaScript

Libros JavaScript

Tienen el visto bueno de los Tuiteros expertos en JavaScript (José Blanco y Luis Medel), así que deben ser la pera.
Con ellos voy a seguir explorando el Framework Enyo y WebOS, a la espera de que me llegue una unidad de pruebas HP TouchPad para depurar las Apps. Cuando llegue, pondré por aquí mis impresiones.
j j j

Mi primera aplicación para iPad

He terminado y entregado mi primera App para iPad. Ha sido un encargo, muy especial, para crear un cartel interactivo dentro de un museo. Así que no la busques en la App Store, porque no va a aparecer. La App está dedicada a narrar los sucesos que llevaron hasta la primera Constitución democrática de España, «La Pepa», proclamada en 1812. Es visualmente muy sencilla (debía ser «minimalista») y muy fácil de usar: se desplazan los sucesos con un «swipe» o bien se avanza por un «cover flow» en la parte inferior.

Mi App para iPad en funcionamiento

Mi App para iPad en funcionamiento

Con esta App he aprendido muchas cosas:

  • cómo desarrollar pensando en la resolución del iPad
  • cómo hacer pruebas con el iPad de mi mujer cuando ella no lo está usando
  • cómo usar a fondo UIScrollView
  • cómo encontrar trozos de código en Internet que me resuelvan problemas 🙂
  • cómo distribuir una App de forma sencilla para que el cliente la pruebe sin tener que ir yo a instalarla en sus dispositivos (gracias @xelecto por enseñarme BetaBuilder)
  • a hacer un MVC del que me sienta contento
  • a comenzar un proyecto pensando en cómo voy a reutilizar el código
  • que el iPad no tiene motor de vibración 😛
  • que desarrollar para un estudio de diseñadores te abre los ojos sobre muchos aspectos de diseño, pero también a ratos te hace odiar a la raza humana.
Cambiando de evento

Cambiando de evento

Increíblemente he cumplido «casi» perfectamente en tiempo, pese a estar con mil cosas a la vez. Y me he vendido muy barato, debo decirlo, porque el proyecto me atraía mucho.

Tengo ahora una buena base para plantearme una App que cuente cuentos, o explique cosas (al estilo de aquellos estupendos libros de «Cómo funcionan las cosas»).

Así que ya sabes: si tienes una App interesante para desarrollar, dinero en el bolsillo y las ideas claras, siempre puedes contactar conmigo para contratarme como desarrollador Freelance. O directamente puedes donarme el dinero y ya yo voy haciendo algo «magical» 😀

Batalla de Trafalgar

Batalla de Trafalgar

j j j

Instalar el plugin de Mercurial en Eclipse

Los sistemas de control de versiones son adictivos. No puedes probarlos, porque luego no puedes vivir sin ellos. Aunque sea un pequeño ejemplo el que vas a programar, te sientes perdido sin tu repositorio y empiezas a pensar «¿y si se me ocurre cambiar esto o lo otro, y luego me arrepiento?». Ese tipo de «problemas» se solucionan casi en el acto con un VCS. Y si es distribuido (Git o Mercurial), mejor que mejor.

Antes de seguir, quiero dejar claro que no entro en las guerras religiosas entre los DCVS Git o Mercurial. Yo uso Mercurial porque Joel Spolsky lo explica de forma increíblemente sencilla. Aunque ahora que Git viene integrado con XCode4, probablemente es una buena alternativa… bueno, no :-). En fin, usa el que te de la gana, pero usa uno.

Para casi todos mis proyectos uso Mercurial. No lo uso para los ejemplos que escribo para mis cursos. Y estaba pensando «¿porqué no usarlo?». Por pereza mental, y por hacer siempre las cosas de la misma forma. Mi padre dice que «si un burro tira de una noria para un lado y le das la vuelta, ya no sabe tirar de ella». Y es que nos acostumbramos a hacer siempre lo mismo, de la misma forma, y nos estancamos. De vez en cuando hay que revisarlo todo con una mirada fresca y en lugar de pensar «¿hay una manera de optimizar esto que estoy haciendo?» debemos plantearnos «¿en serio tengo que seguir haciendo esto?».

El caso es que un sistema de control de versiones es casi perfecto para dar clases. Puedes tener una primera versión, sencilla, y luego ir promoviendo a las distintas versiones más avanzadas, que pueden ser changesets o bien nuevas ramas. Los cambios que hagas durante la clase para demostrar algo siempre puedes revertirlos sin problemas. Para eso está el DCVS. Y distribuir el código es más sencillo: compartes tu repo, y los alumnos se clonan los repositorios y punto. No hay que andar con historias de copiar los Workspaces de Eclipse y que luego falle (los WS de Eclipse dependen del sistema en el que los uses, hay que cambiar luego los Build Paths, etc.). Como se puede ver, todo son ventajas. La pregunta es porqué no lo he usado hasta ahora…

Instalar Mercurial

Evidentemente, antes de nada lo primero es instalar Mercurial, ya sea para Linux, Windows o Mac, o para donde vayas a usar el DCVS. Si no, el plugin de Eclipse no podrá usar Mercurial porque no lo encontrará en tu sistema. Te lo bajas de su sitio web oficial.

Instalando hgEclipse

HgEclipse es un plugin para Eclipse que añade soporte Mercurial a tus proyectos. Una vez instalado, en el menú contextual del proyecto encontrarás en la opción Team > Share la parte de Mercurial. Para instalarlo, iremos a Help > Install New Software e introduciremos el repositorio http://cbes.javaforge.com/update. En mi caso (instalándolo en Mac) no necesito los binarios de Mercurial para Windows, así que no los marco para instalar.

Instalando hgEclipse: repositorios

Instalando hgEclipse: repositorios

Cuando pulsemos Next, pasaremos a descargar e instalar el plugin. Al final no hay más remedio que reiniciar Eclipse. Así que hazlo 🙂

hgEclipse instalándose

hgEclipse instalándose

Usando HgEclipse

Una vez con todo instalado, lo primero es crear el repositorio Mercurial en nuestro proyecto. Eso lo prepara todo para poder gestionar las versiones de tu codigo fuente. Equivale a un «hg init». Para ello, pulsaremos con el botón derecho del ratón en el nombre de nuestro proyecto y seleccionaremos Team > Share Project. Si todo está correctamente instalado nos aparecerá una ventana como la siguiente:

Share > Project

Share > Project

Como queremos crear un repo Mercurial, basta con pulsar siguiente. Nos mostrará dónde va a crear el repositorio (que es una carpeta llamada .hg, dentro de nuestra carpeta de proyecto). Aparecerán unos nuevos iconos en las carpetas y ficheros de nuestro proyecto y la palabra [new] indicando que el repo es nuevo, pero aún no se ha realizado el primer commit.

Repositorio tras el init

Repositorio tras el init

¡Vamos a añadir ficheros a nuestro repositorio! Botón derecho en el proyecto > Share Project, pero ahora aparece un menú con un montón de opciones. Seleccionamos Add. Esto añade los ficheros del proyecto al repositorio. Yo suelo añadir únicamente el código fuente, pero no los ajustes del proyecto, ni las carpetas propias de Eclipse, como muestro a continuación:

Añadamos ficheros al repo!

Añadamos ficheros al repo!

Ahora que hemos añadido, los iconos de los ficheros fuente cambian y tienen un «+» azul al lado. Están ya controlados por el repositorio, pero no hemos subido este cambio, que en este caso es subir la primera versión. Para ello, Team > Share Project > Commit y añadimos un mensaje de commit. HgEclipse nos muestra los ficheros que va a subir, y los que no tiene «controlados», por si queremos añadirlos.

Commit

Commit

Al pulsar OK, ¡listo!. Ya tenemos control de versiones funcionando. Ahora, si modificamos un fichero se nos mostrará como cambiado y podremos hacer un commit con esos cambios. O podremos compartir el código fuente del proyecto por la red con la opción Serve. Cualquiera en la red podrá hacer un Pull del repo y bajarse este código fuente. Mucho más rápido que compartir el proyecto en una carpeta SMB y encima evitas problemas con las configuraciones de Eclipse (yo lo uso en Mac y mis alumnos, normalmente, en Windows)

Las opciones del menú de Share Project son muy amplias. Os animo a irlas probando y a aprender Mercurial entre todos. El que tenga un truco especial de cómo usa Mercurial, ya sabe, que use los comentarios.

hg commit -m "post acabado"
hg tag -m "v1.0"
j j j

Una mañana de trabajo cualquiera

Me paro un momento y miro en lo que estaba trabajando, y los programas que tengo abiertos ahora mismo, y no puedo evitar pensar que soy lo más alejado del minimalismo. Al menos en lo que se refiere al ordenador. Era minimalista cuando no tenía dinero más que para mi querido Amstrad CPC 464 con el monitor fósforo verde, con su unidad de casetes. El único periférico que tenía era un Joystick. Y a usarlo. Pero veía en las películas a gente en países lejanos y extraños, en salas llenas de ordenadores.

Como el programador de Parque Jurásico (que, por supuesto, además de ser el malo, cobarde y torpe, estaba mal pagado y era gordo y feo). Por cierto, si veis de nuevo JP os llamarán la atención dos cosas: una, que están programando fumando, algo impensable en cualquier entorno de hoy en día. La otra, que el sistema de «bug tracking» que usan es una libreta donde van anotando los errores 🙂

Volviendo al tema que me traía aquí, en esta mañana he comenzado programando en C, en el IDE Eclipse corriendo sobre Windows 7. Ese Windows 7 está instalado en mi MBP. Por si fuera poco frikismo, he usado el escritorio remoto de Windows para programar esos ejemplos en una ventana del iMac de 27″, que para eso tengo una pantalla grande. Mientras programaba iba actualizando la presentación de Keynote que acompaña al curso, en el iMac. Sonaba la música desde iTunes, donde estaba restaurando mi iPhone 3Gs con una copia de seguridad de ayer: mis niños han borrado algunas fotos en un descuido.

He terminado con C y me he pasado a WordPress. Arrancando una máquina virtual VMWare de Bitnami, que ya tiene un entorno WP completo sobre Linux, me he dedicado a crear un nuevo sitio para migrar una vieja web que hice hace ya la tira en Typo3. Es decir, instala plugins, widgets, temas, escribe posts, importa información, etc.

Ahora toca pensar en el próximo curso de Java EE que tengo que impartir a finales de mes. Java, Servlets, EJBs, JBoss, Eclipse de nuevo (aunque ahora en su «sabor» Java). Tendré que ojear un libro, que tengo en formato CHM (formato típico de Windows en otra época). Y luego, un poco de Objective C para comenzar un proyecto iPad que me han encargado. Tengo cosas que leer de UML…

Es por este desbarajuste de trabajo que tengo, con tantas tecnologías, frameworks, lenguajes, herramientas y entornos distintos por lo que amo a mis dos Macs. Necesito ser anti-minimalista, ya que si lo fuera no podría hacer la mitad de las cosas que hago. Esta es la razón de haber ampliado mi iMac a 12 GB de RAM. Aún así, procuro no instalar nada si ya tengo una aplicación que hace más o menos lo mismo, que si no acabas con un montón de aplicaciones similares que no acabas de dominar en profundidad.

Bueno, sigo, que quiero ir terminando. Que no hace mucho me comentaron que a lo mejor tengo que aprender CLIPS… 🙂

j j j