Cómo ver los vídeos de la WWDC 2015

…y no dejar que Twitter, y los sobrehumanos que por allí pululan, me machaquen con sus capacidades heroicas de ver en una semana todas las sesiones.

Terminó la WWDC 2015, y como todos los años, me he echo un firme propósito: ver todos los vídeos antes de que llegue la WWDC 2016. Si miro mi track record en este tema, no es para ser optimista: siempre he fracasado. Esto es mi voy a dejar de fumar o tengo que aprender alemán. Lo de los kilos, es evidente a simple vista que tampoco lo llevo bien del todo.

Sí, lo confieso, voy por el mundo desarrollando para iOS y a veces enseñando sobre ello y no he visto todos los vídeos de todas las WWDCs. Una vergüenza, ya lo se. Últimamente, mi síndrome del impostor está súper-desarrollado y tengo muy asumido que soy una estafa con patas, pero eso es tema para otro post. Así que esta vez va a ser diferente. Tiene que ser diferente. Me voy a organizar de manera diferente y quizás alguna de estas ideas os sirva para algo. O no.

Good Ol’ Streaming

El streaming y todas estas cosas modernas están muy bien y tal. Hasta que tienes que ver un vídeo y se ha caído tu conexión. O quieres copiar unas cuantas sesiones a tu iPad para estar entretenido en un vuelo, y necesitas tenerlas en tu Mac primero. Y en cualquier caso, porque mañana puede estar caído el servidor de Apple o pueden retirar los vídeos a voluntad. Mi estrategia es sencilla: aquellas cosas de Internet que de verdad me interesan van a mi Drobo o a cualquiera de mis HDs externos. Al coste por GB actual, ni me lo pienso. Para bajar los vídeos os recomiendo este script, que además se baja los PDFs con las presentaciones y el código fuente de los ejemplos. Todo lo necesario para explorar las sesiones. Es bastante configurable y puede bajarse los vídeos de otros años, grabar en la carpeta que le indiques, descargar en calidad SD o HD…

Para instalar el script, debes mostrarlo en formato “raw”, es decir, en texto plano (pulsando en este enlace lo tienes, de nada, soy así de majo), seleccionar todo el texto y copiar y pegarlo en un fichero de solo texto. En mi caso, uno que me creado con vi. Lo llamas como quieras, pero download-wwdc-videos.sh no es mal nombre. Te quedaría por darle permisos de ejecución con la orden: $ chmod a+x download-wwdc-videos.sh.

Para bajar los vídeos la orden que he usado es:

./download-videos.sh -f HD -o ./

que significa: “baja los vídeos de la WWDC 2015 (por defecto), en calidad HD (caballo grande, ande o no ande) y me los pones en la carpeta actual”. Previamente me había creado esa carpeta en el Drobo y había ido en iTerm con cd /Volumes/Video-Drobo/WWWDC-2015 hasta la carpeta en cuestión.

Separar la paja del grano

No todas las sesiones me interesan. Y a ti tampoco deberían. Hay que tener foco y empezar por aquellas que realmente te van a aportar más. Por ejemplo, la entrega de los Apple Design Awards es algo que no me va a hacer más feliz. Las nuevas características de Swift 2.0, sí. Así que hay sesiones que me interesan seguro, otras que ya habré visto y otras que, o seguro no quiero ver o estoy en duda. Primera criba resuelta: si dudas, es que no quieres verlo. No pasa nada, no borres el vídeo (yo no lo hago), no se va a ir de ahí. Pero si no tienes claro de entrada si te sirve para algo, es que no te sirve verlo ahora.

Videos WWDC 2015 con etiquetas

Videos WWDC 2015 con etiquetas

Para distinguirlos he usado las etiquetas del Finder, que puedes cambiar y crear en preferencias del Finder. Me he creado tres nuevas: Ya vistos, en color verde, pendientes, en color naranja (que destaque) y en gris no me interesan. Marco todas en gris y a partir de ahí selecciono con mucho cuidado las que quiero ver. Es mejor marcar sólo cinco vídeos, verlos, y tener la sensación de he cumplido esta etapa y poder volver y añadir más vídeos luego para subir nota. Mucho mejor que marcar cincuenta vídeos y cargarte con una obligación más todo un año. Además de todas las otras cosas imprescindibles que ya tienes que hacer: leer todos los feeds RSS, leer completo tu timeline de Twitter, leer las noticias diarias, etc.

Pista: no lo hagas. Sobrecarga de información inútil == ruido.

Preferencias del Finder para gestionar las etiquetas

Preferencias del Finder para gestionar las etiquetas

Ver los vídeos

En mi caso, si puedo, los veo en el iMac. Porque estos vídeos no basta con “verlos”. A mi me gusta tener abierto Xcode y los ejemplos de código, y cuando veo algo que me llama la atención pauso el vídeo, tomo notas, pruebo código, etc. Sin hacer esto, a los dos minutos de terminar el vídeo no recuerdo nada. Si no intento repetir la demo que estoy viendo, no voy a aprender nada.

Así que en mi caso, nada de verlos a 2x para marcarlos como vistos. A mi me interesa marcarlos como aprovechados, que es distinto. Lo otro es como visitar 10 ciudades en 7 días e ir de Turista. Yo prefiero ver una y vivir 10 días en ella.

Para verlos, los añado a iTunes. Pero con cuidado. Si arrastras la carpeta de los vídeos a iTunes se van a copiar dentro de la biblioteca, duplicando el número de GB. Que puede ser que sea lo que quieres. O no. Siempre puedes borrarlos. En mi caso, los vídeos se quedan en su carpeta del Drobo y sólo enlazo el contenido. Para ello, en las preferencias de iTunes debemos desmarcar la opción Avanzado > Copiar en iTunes Medio los archivos añadidos a la biblioteca que copia por defecto los ficheros dentro de nuestra biblioteca. Ahora podemos arrastrar los ficheros y no se copiarán. Pero podremos sincronizarlos con nuestros dispositivos (en mi caso, mi iPad), para verlos sin conexión. Win!

Programar y tomar notas

No te quedes sólo con los vídeos. Crea tus proyectos de prueba, escribe código usando los Playgrounds de Xcode. Usa las betas de Xcode 7. Y si encuentras errores file a radar. En mi caso, por cada vídeo que voy a ver, creo una tarea en Things, que es lo que uso para llevar un sistema más o menos GTD. En esta tarea anoto cosas que me llaman la atención, de forma que siempre puedo volver y buscar esta tarea para revisar las notas. Si las notas crecen mucho, o van a un Playground junto con código de ejemplo, o a un fichero de texto markdown que luego presento con Deckset.

End

Y esto es todo. Espero esta vez no sentirme culpable cuando compruebe que es Junio de 2016 de nuevo y no he visto más que tres vídeos. Pero una cosa es segura: tampoco voy a poder verlos en una semana. Hay muchas cosas que aprender, y una vida que vivir.

j j j

Máster de Apps Móviles en Chiclana: experiencias en la radio

Selfie Conectados en RAI

Una pequeña actualización a la información del Máster de Comunicación Plus para aprender a desarrollar Apps en Chiclana, a todo confort, con unos bañitos en la playa que ya van haciendo falta:

  • tuvimos la suerte de ser entrevistados por Javier Oliva en el programa de Canal Sur Conectados en RAI.
  • Javier Suárez Ruiz, el profesor del Máster encargado de Windows Phone (genuflexión y respeto al crack) ha escrito en su blog (que, por cierto, para los que quieran aprender Windows Phone es el sitio a donde ir) una entrada sobre el Máster y su visión del mismo.
  • he rectificado en el post que escribí sobre el Máster las horas totales del mismo. Son 240 h, ya que cada semana son 60 h de formación: 50 h de la plataforma de la semana (iOS, WP, Android) y 10 de otras cosas (prototipado, UX, etc.)
  • el Máster empieza el próximo Domingo 18. Muchas ganas de irme a Chiclana y huir del pólen y las alergias del campo.
  • durante el Máster, esperad fotos y recochineo desde la playa y piscina. He avisado.
j j j

Aprende iOS, Android, HTML5 y Windows Phone en la playa

TL;DR;

Me voy a la playa a enseñar iOS y Android. Si no vienes, puedes sentir envidia. Es normal.

El Máster

Pues sí. Este es el panorama al que se enfrentan los alumnos del I Máster en Desarrollo de Aplicaciones Móviles en Andalucía de Comunicación Plus. Retirarse del mundanal ruido junto a las playas de Chiclana, en Cádiz. En un apartahotel de 4 llaves. Y una vez allí, darle a la tecla 50 h por plataforma, en formato ultra-intensivo, empezando un Domingo y acabando un Sábado.

Si echáis cuentas, 50 h seguidas de Domingo a Sábado queman a cualquiera. Por eso nos han prometido actividades “extraescolares” con las que recuperar cuerpo y mente en tiempo récord. Algo he oído de masajes, paseos en bici de montaña por la playa, clases de Pádel o salir al mar a hacer Paddle Surf. Y claro, además tenemos las piscinas y la playa de Chiclana. Mal no vamos a estar.

Pero volviendo al contenido del Máster, me parece muy interesante que se traten cuatro plataformas distintas (luego se puede escoger la que te guste más, o de la que te ofrezca trabajo). Además de aprender mucho, puedes comparar y ver lo que tienen de mejor unas sobre otras. Por ejemplo, en Windows Phone tienen bindings (en iOS no tenemos Cocoa Bindings, sólo en OS X). O puedes ver que la forma de internacionalizar proyectos de Android probablemente sea la más limpia (en mi opinión). O por qué Eclipse necesita ya la jubilación (después de ver Visual Studio y Xcode). Y además, habrá unas horas dedicadas a Márketing Online o a pensar en la Experiencia de Usuario. Esto último lo dará el gran Jorge Galindo de 47 Degrees con el que organicé en Febrero pasado el curso gratuito para parados y estudiantes de iOS.

Yo me voy a encargar de las partes de iOS y Android. Vamos, de las que se algo, porque de las otras dos flojito, flojito. Creo que 50 h dan para mucho y podremos ver de todo: herramientas, código, patrones de diseño, frameworks, … y apps. Muchas apps. Cosas aplicables directamente (o eso espero).

Hay muchas cosas buenas en este Máster, pero el alejarte del trabajo para enfocarte en aprender, la intensidad de la formación (un poco a la Big Nerd Ranch, pero en Cádiz, que lo mejora todo) y el apoyo del Director del Máster, Pablo Gª Trespalacios (que sabe de lo que habla porque para eso ha sido alumno mío) me parecen lo mejor. Y los alumnos, claro, que no saben dónde se meten :-)

El vil metal

Como he leído por ahí es muy caro. Bueno, para empezar puedes buscarte el alojamiento y ahorrarte algo, o escoger semanas sueltas. Si vamos a lo más “caro”, son 5000 Eur., que es un dinero. Pero eso incluye:

  • un mes alojado en un complejo de apartamentos con pensión completa
  • todas las pausas de cafés
  • las actividades extra académicas
  • y 200 h, al menos, de formación. Si valoras en 1000 Eur todo lo anterior, cada hora de formación te sale a 20 Eur.

UPDATE 12 Mayo No son 200 h. Son 240 h, ya que cada semana tiene otras horas dedicadas a prototipado, UX, márketing… sólo había incluido mis 50 h e ignorado al resto :-D

  • y hay una financiación muy interesante (los dos primeros años no pagas nada).

Si te interesa esto, tienes toda la información en la web de Comunicación Plus.

Yo ya estoy buscando las chanclas de la playa para echar en la mochila junto con el portátil. Lo dicho: puedes sentir envidia :-)

j j j

Curso gratuito iOS en Cádiz AKA ayudando a la comunidad

Ser awesómico es la marca de la casa de David Bonilla. Montar movidas guapas la de Jorge Galindo. La mía, probablemente, es ponerse palote con cualquier trozo de código.

El caso es que, por culpa de David y su #weareatwar se están haciendo cosas y hay gente predispuesta a hacer cosas que antes no se nos hubieran ocurrido. Está dinamizando a la comunidad TI española que quiere escuchar. Esas son las razones que han llevado a Jorge a dejarse liar (aunque para liar a Jorge tampoco es que tengas que esforzarte mucho) y pegarse el curro de cargar con todas las tareas necesarias para que yo pueda llegar a Cádiz e impartir este curso. Lo explica muy bien en su blog.

Yo quería contar aquí el porqué de esta iniciativa. Cómo es que un camarada mercenario como yo deje el vil metal de lado y decida pasar un fin de semana en Cádiz hablando de desarrollo iOS.

La primera razón es que tampoco es tan malo como parece. Cuando tu trabajo te gusta tanto como a mi, estar hablando de desarrollo y programando es casi lo mismo que haces para divertirte. Así que tampoco es tan dura la cosa. Cierto es que a mucha gente la perspectiva de impartir 20h de curso entre Viernes, Sábado y Domingo frente a un grupo de 15 personas le aterraría. Bueno, a mi me aterra la contabilidad. Todos tenemos limitaciones (yo, muchas).

Pero esto es algo que me lleva dando vueltas en la cabeza desde el año pasado. La idea de que somos pocos informáticos, de que es una carrera / estudios que se cursan poco. De que los que estamos cada vez somos más viejos. Que hay pocos chavales. Y chavalas, ni te cuento. Y no es bueno. Pensando en la ley de Oferta y Demanda, cuantos menos seamos, más pasta y trabajo para los que quedemos. Pero la realidad es que la demanda crece muy muy por encima de la oferta, y esto va a seguir así en el futuro. No sólo son los móviles. Son los wearables. Son los edificios conectados. El Internet de las cosas. Los coches. Todo. Todo necesita un ordenador conectado y Apps para eso. Las TVs. Las nuevas consolas. Y no hay manos para todo este trabajo.

Y cuando nos vienen los agobios uno se dedica a vampirizar la comunidad. Copiamos código de Stack Overflow. Usamos librerías de Github. Preguntamos en nuestras reuniones (como la NSCoder Night de Sevilla). Nos pasamos trabajo unos a otros. Escuchamos podcasts. Nos seguimos en Twitter. Nos vemos en las conferencias. La comunidad nos motiva y nos enseña. La necesitamos para ser mejores programadores.

Esta es la segunda razón por la que he querido poner este granito de arena: ampliar la pequeña comunidad iOS / Cocoa en Andalucía. Y, de paso, ayudar en lo que pueda a una de las zonas de España con más paro, en lo poco que pueda. Ojo, que no soy Teresa de Calcuta. Pero muchas veces no hacen falta grandes gentos: con ser un poco mejor cada día y dar la mitad para tí y la mitad para los demás, basta.

Así que ya sabes. Si estás parado y sabes programar, o eres estudiante (que, por definición, está parados a no ser que seas tonto como yo y trabajes mientras estudias, forma perfecta de no acabar la carrera) intentaremos meterte en una de las 15 plazas del curso de desarrollo iOS que vamos a impartir en Cádiz. Todos los detalles aquí.

Espero dar un curso awesómico, que sea una movida tan guapa que todos nos pongamos palotes.

j j j

Voy a aprender Git

Git. Ese sistema de control de versiones para superdotados. Es un hijo de Linus (el creador de Linux). Por ello, la sencillez no es una de sus características. Si alguna vez has configurado y compilado un kernel de Linux, sabrás que a este señor no le gusta ningún programa sin al menos cincuenta opciones en la línea de comandos: veinticinco empezando por -y otras veinticinco por --. Y diez más que no están documentadas. Para usar Git se asume que ya tienes de antemano una serie de habilidades (manejo de la Terminal, uso de ssh, resistencia innata al desaliento ante una documentación fea como un demonio, coeficiente intelectual de 300, …)

Así que uso habitualmente Mercurial (siempre que puedo, antes que Git) por varias razones:

  • me resultó muy sencillo aprender a usar Mercurial gracias al excelente tutorial de Joel Spolsky
  • el 80% de las cosas que haces habitualmente es muy sencillo de hacer con HG
  • no necesitas configurar nada: te lo bajas, lo instalas, vas a una carpeta, escribes hg init y listo
  • tanto BitBucket como SourceTree lo soportan. Luego es perfecto para mi.
  • si funciona, no lo toques

Pero claro, no se Git. Y me siento estúpido.

Hay varias cosas que considero “la maratón mental del informático”. Lo que distingue a los buenos de los que tienen que seguir esforzándose. Cosas difíciles, que te obligan a aprender y a exprimirte el cerebro. Por supuesto, no he hecho ninguna de ellas, autocolocándome en uno de los dos anteriores grupos. Estos retos son:

  • dominar el uso de expresiones regulares (sin mirar en StackOverflow)
  • escribir una pequeña aplicación o demo completamente en ensamblador
  • hacer una aplicación web en un lenguaje funcional, como Clojure
  • hacer un juego usando OpenGL
  • entender qué demonios hace git con las ramas y git flow

Pues bien, una de ellas voy a tacharla de la lista, pero ya. El uso de Git está muy extendido, y soluciones que uso habitualmente como Cocoa Pods lo utilizan de forma extensa. Tengo que aprender a usarlo, quiera o no. Además, en varios proyectos se necesita Git y aunque con SourceTree puedo ir tirando, quiero comprender qué se cuece tras la interfaz bonita y ser capaz de manejar este DCVS yo solito.

La opción de leer un libro me aterrorizaba: demasiado esfuerzo tras tanto esfuerzo con otras cosas. Así que la mejor solución va a ser asistir al curso Entendiendo Git que Alfonso Alba imparte en Las Rozas. Creo que aún estás a tiempo de conseguir un descuento por compra anticipada. Voy con muchas esperanzas puestas en el curso, para tener una base que me permita manejar en el día a día este DCVS sin problemas, y explorar por mi cuenta. Vamos, que espero entrar chapurreando un par de palabras en Git y salir hablando, con acento y poco vocabulario, Git. Pero entendiéndolo al menos.

Escribiré qué he aprendido en el curso cuando lo termine. Pero conociendo a Alfonso de las NSCoder Night de Madrid creo que la duda no está en la calidad del curso, sino en si mi mente será capaz de pasar por la maratón. Espero que si.

j j j

Un día en “Teacher’s Hell”

Credit: http://www.flickr.com/photos/barkbud/4257136773/

Credit: http://www.flickr.com/photos/barkbud/4257136773/

He impartido muchos cursos a lo largo de mi vida profesional. Muchos. Muchas horas de formación. Es algo que me gusta mucho y me llena. Puedo explotar mi faceta de abuelo cebolleta y contar todas las batallitas que me apetezcan a un público cautivo que no puede huir a ninguna otra parte. Y encima me pagan por ello. Así qué todos contentos (menos los alumnos que tienen que aguantarme, claro)

Debido a esta experiencia acumulada, suelo preparar con mucho esmero cada curso. Reviso mi bolsa para comprobar que llevo el cargador del portátil, los cables de conexión al proyector, si llevo algún bolígrafo o libreta, el mando a distancia para pasearme mientras pongo alguna presentación en Keynote. Y voy preparado para todo. Bueno, para casi todo. Hace poco viví un completo Teacher’s Hell, una de las peores situaciones que he vivido. Hasta perder el avión de ida en el viaje a Panamá para el curso de Android que impartí en Julio me parece menos grave. Por la acumulación de problemas.

Llegué al aula con tiempo. Al menos, 40 minutos antes de empezar el curso. Empezamos a las 16:00 y acabamos a las 21:00, y son las 15:20. Así tengo tiempo de encender el equipo, probar el proyector, conectarme a la red, beber un café… Entro en el aula y todos los alumnos ya están allí, sentados. El proyector encendido. En tono de sorna digo “bueno, parece que hay ganas de empezar, ¿no?. ¡Eso es bueno, venís con ganas!”. Mirada sería del responsable. “Diego, empezábamos a las 15:00″.

De pronto, una sensación de caer en el vacío. El mundo se me viene encima. Una vez me presenté para un curso en la dirección equivocada y tuve que recorrer media Córdoba a la carrera. Pero llegar tarde, nunca, si puedo evitarlo. En mi calendario, apuntado el inicio a las 16:00. En la presentación del curso, igual. En mi mente, las 16:00. Reviso el correo, y efectivamente no aparece ninguna hora. Hablamos de “por la tarde”. Probablemente asumí mal el horario, pero me extraña.

Me rehago. Saco el ordenador con una sonrisa nerviosa mientras me disculpo, lo enciendo y lo conecto al proyector. No se ve. Miro el cable de conexión al proyector: hay un bifurcador extraño, uno de esos cables en Y que permiten ver el proyector y la imagen en un monitor a la vez. Desconecto y conecto el proyector directamente al portátil. Se ve en la pantalla. Uf.

Tengo que dejarles los ejemplos a los alumnos, y además ellos deben conectarse a una B.D. MySQL que llevo en mi MacBook Pro. Es un curso de Hibernate. No MySQL == No curso. Pregunto por la WiFi. No hay WiFi. Bueno, sin problema, pienso: “me conecto con un cable Ethernet y listo”. No, no tan rápido, la dirección de sistemas no te deja conectarte a la red, y además no vas a obtener IP con tu portátil. Bien. El entorno de desarrollo que traigo montado y la base de datos MySQL al infierno.

Bueno, aunque todo se tuerce, puedo montarlo todo durante el curso, mientras hablo de la teoría con mi keynote del Mac. El ordenador del profesor es un Dell con Windows XP. A fin de cuentas, me han dejado usuario y contraseña. Los introduzco y me sale el típico “tu contraseña ha caducado, y como veo que no tienes mucha prisa ahora mismo voy a molestarte un poco más obligándote a cambiarla“. Evito la tentación creciente de gritar y golpear algo. Me concentro e introduzco una contraseña segura, para evitar chorradas con el criterio de generación de contraseñas: “la contraseña es corta, debe tener mayúsculas, minúsculas y el Emoji de un caganet“. El ordenador me dice que no puedo cambiar la contraseña, que no tengo permisos para ello, pero que o la cambio o no puedo iniciar sesión. Llamo a soporte. Comento el problema, y lo solucionan de forma remota. Inicio sesión y se lanza un logon script de esos que tardan en una red corporativa medio año mientras un intérprete de comandos realiza tareas misteriosas. Tras lo que me parece una eternidad, llego al escritorio de XP.

Bueno, vamos a descargarlo todo: MySQL, etc. La velocidad de descarga se mide en Kbs, no en Mbs. Y son pocos. Estoy en el CiberDespacio. La descarga comienza a alargarse ante mis ojos, cansados y tristes. Los nervios aumentan. Se me acaba la teoría. No tengo BD. Tengo he pasar a los alumnos los ejemplos, esos que ya están en la carpeta pública de mi Mac, esa a la que no pueden acceder. Empiezo a pensar en preguntar por un cable serie Null-Módem para pasar las cosas, pero me muerdo la lengua. No hay red, y me acuerdo de la cita de Tanenbaum: “Never underestimate the bandwidth of a station wagon full of tapes hurtling down the highway”. Tiro de USB.

Disco Kaput

Vamos con el pendrive. Saco mi flamante pendrive de 4GB. “Lo copio todo aquí, se lo paso a un alumno, lo pone en la red y listo”. Parece que hay un servidor de ficheros, así que probablemente lo use. Introduzco el pendrive en el Mac. Aparece un error en pantalla. Algo de que copie los datos, que está mal el pendrive. No me lo creo. Parece que lo voy a tener que formatear. Ya formalmente cabreado, abro la Utilidad de Discos. Voy a darle formato FAT, que luego hay que usarlo en un XP y no quiero más problemas a estas alturas. No puedo. Me dice que el sector cero está defectuoso y que tire el pendrive. A estas alturas, empiezo a mirar alrededor buscando la cámara oculta. He llegado a la hora que no era, estoy sin WiFi, sin posibilidad de conectarme a la red, sin pendrive… Pregunto a los alumnos. Ninguno tiene uno encima. Quiero morir.

Utilidad de discos no puede formatear el disco

Hablo con el responsable del curso, que amablemente me ofrece uno. Lo uso para copiarlo todo en el pendrive y se lo paso a los alumnos. Mientras copian, mi mente procesa a toda velocidad. Vale, tienen los ejemplos, pueden ver la teoría en pantalla, pero me falta la B.D. Puedo instalarla en el ordenador del profesor, pero creo que lleva 20 Kb descargados o algo así. ¡Al menos podría pitar como pitaban los módems antiguos!.

De pronto, me viene la inspiración. Desde informática me han dicho que no puedo conectarme y que no obtendría una IP en mi equipo. Eso es lo que me han dicho. Pero no lo he comprobado. Busco el cable Ethernet conectado al ordenador del profesor y lo conecto a mi MacBook Pro. ¡Voilà!. Tengo acceso a la red local y a Internet. Todo cambia, al fin, para bien. Continuamos con el curso y se acaban los incidentes.

Cosas que he aprendido de esta experiencia:

  • por bien que creas que llevas preparadas las cosas, piensa mal, hasta que te parezca que es de manera absurda. Todo puede torcerse, todo. Y varias veces.
  • las presentaciones las debo llevar en dos pendrives. Si muere uno, tengo el otro.
  • las presentaciones debería copiarlas en formato PDF. Si se muere mi MBP siempre puedo usar cualquier otro ordenador que muestre un PDF.
  • siempre copiarlo todo en Dropbox. Aunque recientemente, en otro curso, me falló Dropbox al ir a bajar una presentación :-D
  • antes de impartir una charla o un curso en un sitio nuevo, confirmar el equipamiento de que dispongo. Me ahorro sustos luego.
  • confirmar las horas y fechas (algo que siempre hago, pero en este caso se ve que no…)
  • no cabrearse es mejor. Solucionas los problemas y te sientes bien por duplicado: porque has solventado el marrón y porque te has controlado a ti mismo.

Por cierto, recuperamos todo el tiempo perdido, de forma que los alumnos no perdieron nada. Eso nunca: lo primero son mis alumnos.

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

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