Cómo utilizar promo-codes en iTunes

Los promo codes son códigos que Apple da a los desarrolladores (50 por versión de cada App) para que los regalemos a quien nos parezca. Se podrían gastar con la familia y los amigos, pero lo inteligente es guardarlos para los medios, bloggers y personas a las que te interese enseñar tu App sin que les cueste el dinero. Así eliminas una barrera de entrada y pueden probar tu trabajo más fácilmente.

¿Qué aspecto tiene un promo code? Es una ristra de números y letras tal que esta: KJT9MFJ3YLWN. De hecho, éste es un promo code real de la v1.1 de MyEvents, que regalé en Twitter. No te esfuerces: ya está gastado 🙂

¿Qué hacer una vez que tenemos un promo code? Vamos con el paso a paso:

  • Abrir iTunes
  • Nos vamos a iTunes Store. Nos aparecerá una pantalla como ésta:
iTunes abierto

iTunes abierto

  • En la parte derecha, si nos fijamos, hay un enlace que pone «Canjear»:
Canjear

Canjear

  • Pulsamos sobre él, se nos abrirá una ventana donde podremos meter el promo code:

  • Metemos el promo code y ¡listo!, App bajando.
  • Sincronizamos nuestro iPhone y ya la tenemos, por la patilla

Como nota añadir que, hasta hace unos días, los promo codes sólo funcionaban con la App Store de EE.UU. Ahora funcionan a nivel mundial. Apple ha tenido el detalle de esperar hasta la v1.1 de MyEvents para extender los promo codes a todas las tiendas 🙂

j j j

Kubrick era un genio: él ya sabía lo del iPad

iPad en 2001 :-)

iPad en 2001 🙂

Que Kubrick es mi director de cabecera no es ningún secreto para cualquiera que me conozca. Desde que vi, con 15 años creo recordar, por primera vez 2001 he sido seguidor suyo incondicional. Recuerdo que ponían la película en un cine de Sevilla que ya hoy no existe, el Corona Center, especializado en cine de autor y en V.O. Fui con una mezcla de curiosidad y respeto, porque todo el mundo me decía que si era una película rara, que si no se entendía, que si era antigua… Quedé aplastado en la butaca desde la primera secuencia y me capturó al instante. Y me resultó bastante obvia, por cierto. Sólo hay que tener un poquito de imaginación. Pero claro, si triunfa Gran Hermano será porque a todo el mundo no le gusta lo mismo.

Es una de esas películas que no me canso de ver, como las de Star Wars, Casablanca o el Señor de los Anillos. El caso es que hace unos días la estaba viendo de nuevo, en DVD y me quedé sobrecogido al darme cuenta de que Kubrick realmente era un genio. En la película los protagonistas usan un tablet. Con un aspecto bastante similar al de nuestros iPads de hoy día. Sorprende para una película de 1968 esa visión. Pero lo que más es impactó es el uso que le daban al tablet. Lejos de gráficos absurdos u otros usos «futuristas», Kubrick prevee que en 2001 los tablets se utilizarán para consumir contenido multimedia: para ver la tele en «diferido». Concretamente un informativo de la BBC que, obviamente, les han enviado desde el control de misión en la Tierra y que ellos ven en su tableta. Ojo, que usan la tableta mientras comen, lo cual quiere decir que, o bien el vídeo está almacenado en la propia tablet (memoria interna con esa capacidad en 1968?) o bien que hacen streaming desde HAL 9000 usando WiFi. FTW Kubrick!

Cada uno con su iPad en 2001

Cada uno con su iPad en 2001

En cualquiera de los dos casos asusta ver cómo acierta en la película con muchas cosas. Como cuando se realiza una video llamada desde la Luna (video conferencia, FaceTime de Apple, Skype, …) o cuando el Dr. Dave Bowman juega al ajedrez con HAL 9000 usando comandos de voz (VoiceOver). O las pantallas en los asientos de los aviones para entretener a los pasajeros. También hay detalles tiernos para un informático, como el ofrecer datos en formato tarjeta perforada :-). No todo lo iban a acertar.

FaceTime en 2001 :-)

FaceTime en 2001 🙂

Por supuesto, todos los derechos de las anteriores imágenes están reservados por la WB y sus respectivos propietarios. Vamos, que no me mandéis los abogados.

j j j

Cómo crear tu propia NSCoder Night

Foto de Felipe Vieria

Foto de Felipe Vieria

Si aún no sabes de qué estoy hablando, en este post ya hablé de qué eran y para qué servían las NSCoder Nights. Resumiendo mucho, son reuniones de gente interesada en desarrollar aplicaciones Cocoa. Así que los asistentes pueden ser programadores para el Mac, para el iPhone (y cualquier otro dispositivo iOS), diseñadores, empresarios buscando algún programador que les ayude, curiosos… Si te interesa, puedes también leer el post de Javier Rodríguez sobre cómo comenzar el desarrollo con iOS. MacWorld también se hace eco de las NSCoder Nights.

Hoy tenemos nuestra segunda reunión en Sevilla, y ya hay otros capítulos en Madrid, Barcelona, Gijón, Valencia, Almería, Málaga, … Bueno, pero ¿qué hacer si te gusta la idea, pero en tu ciudad no hay aún una NSCoder Night? Esa fue básicamente la duda que surgió en los comentarios que comenzó David en el post sobre cómo estaba aprendiendo a programar para iOS. Tras algunos correos, quedó inaugurado NSCoder_zgz, y pronto tendrán su primera reunión. Así que se me ocurrió listar la serie de pasos que debes ejecutar para localizar tu NSCoder Night más cercana, o bien crear la tuya propia.

  1. [Twitter getTwitterHandle]; Si no tienes usuario en Twitter, lo primero es creártelo. Te servirá para estar al día de las NSCoder Nights. No todas tienen sitio web, pero todas tienen Twitter.
  2. [NSCoderNight listAll] consulta la lista de NSCoder Nights que tenemos en el capítulo de Sevilla. Procuramos mantenerlas actualizadas. Si dudas de si hay alguna cercana, pregunta, que para eso estamos.
  3. if ([NSCoderNight isNear]) exit(0); Si encuentras alguna cerca / en tu ciudad, has terminado. Sigue a su usuario en Twitter y listo.
  4. else … Bueno, si no hay ninguna cerca, la solución es fácil: la creas tú. ¿Cómo? sigue leyendo
    1. Crea un usuario en Twitter para esa NSCoder Night. El nombre debe ser: NSCoder_xxx, donde xxx será una abreviatura del nombre de tu ciudad, como sev, zgz, mlg, bcn, etc. (etc no lo uses)
    2. Copia la bio de otro NSCoder Night. Así somos más homogéneos.
    3. Copia el icono de otra NSCoder Night
    4. [Opcional] Crea un sitio web para tu NSCoder Night. En tumblr, también por ser homogéneos.
    5. Añade a tu nuevo sitio web las FAQ que magistralmente escribió Vicente Vicens.
    6. Pon un enlace en el perfil de la cuenta de Twitter al nuevo sitio web.
  5. Una vez que has terminado con la parte técnica, ahora viene lo mejor. Busca un sitio que te guste, un bar, cafetería, restaurante, tu casa, una iglesia o un gimnasio. Un sitio donde quepáis de cinco a diez personas, con sus portátiles. ¿Lo tienes?
  6. Publica la primera reunión. Ponle fecha, y hora. La mayoría empezamos sobre las 19:00, pero puede ser a cualquier hora. Aunque el apellido de las reuniones «Nights» igual te da una pista sobre el horario.
  7. Apóyate en la promoción de las otras NSCoder Nights. Siempre te haremos un RT 🙂
  8. Ve a la primera reunión. Si va alguien, fantástico. Si no, persevera. Tendrás ese tiempo para tí, para programar / leer fuera de tus tareas habituales. Sigue el ejemplo de José Vázquez en su inigualable «Hazte Indie«.
  9. Sube fotos y cuéntanos cómo te va 🙂
j j j

Usando XCode 3.2.5 con dispositivos iOS 4.2.1

Hace unos días salió la 4.2.1 de iOS para iPhone y iPod Touch. Sin pensarlo demasiado, actualicé mi iPhone 3Gs, que es la máquina que uso en el día a día, pero también la uso como máquina de desarrollo y pruebas. Pero no caí en el posible problema: tener en mi dispositivo instalado una versión de iOS no soportada por XCode.

Pero salió la 3.2.5 de XCode y me la bajé e instalé. Bueno, problema solucionado ¿no?. Veamos, esta versión soporta… ¿iOS 4.2? ¿Y qué pasa con iOS 4.2.1? Un sudor frío me recorrió la espalda. Y se confirmaron mis miedos con este tweet de @jdortiz:

Lógicamente, estoy en fase de pruebas para lanzar la v1.1 de MyEvents. Esto sólo te pasa cuando estás probando. Murphy es cruel.

Esta mañana, me remangué y me senté frente a XCode. Al abrir el proyecto, un solitario error:

Mi XCode no entiende qué es eso de iOS 4.2.1 🙁

Abrí el Organizer (para ver mis dispositivos), y nada más abrirlo me apareció la siguiente ventana:

Vamos, que XCode me estaba diciendo: «esto de iOS 4.2.1 no tengo ni idea de qué es, pero si quieres me leo unos cuantos ficheros del iOS de este iPhone y trato de ver si soy capaz de manejarlo». Evidentemente, pulsé en Collect. Una barra de progreso me indicaba que se importaban los ficheros de iOS de mi iPhone. En segundo plano, XCode «desimbolicaba», es decir, desensamblaba el código de iOS 4.2.1 y lo preparaba para poder depurar con él. Al finalizar, supe que había triunfado porque el Organizer me mostraba la versión correcta en mi dispositivo:

Ahora ya sólo me quedaba actualizar la información del proyecto (para que se compilase usando el SDK correcto) y del target (el ejecutable que genera XCode) para se enlazase con las bibliotecas de la versión correcta. Pulsamos sobre el proyecto, ? + I (obtener información) y en la pestaña Build, cambiamos Base SDK. En mi caso ponía 4.1 (missing) y le he puesto la última. Luego repetimos, pero en el Target, ? + I, build y ponemos el Base SDK a 4.2.

¡Listo! Graba (? + S) y cambia entre dispositivo y simulador un par de veces. Parece que XCode no refresca bien el cambio. Ahora, ya puedes probar con la 4.2.1 en el Simulador y en tus dispositivos.

P.D.: Jorge me avisó en este Tweet de que alguien ya había escrito algo sobre este problema, pero 1) está en Inglés y 2) no está tan mascadito. ¡Espero que os sirva!

j j j

EBE10, en semi-directo

No me gusta demasiado escribir sobre temas de actualidad. No soy periodista, y además hay cienes y cienes de blogs que cubren las noticias y que puedes consultar para mantenerte informado. Me gusta hablar de cosas que me llaman la atención y que, espero, le sirvan de algo (aunque sea de entretenimiento) al que me lea.

Bueno, pues hoy voy a hacer una excepción. Ya que voy a estar tres días en el EBE 2010 voy a ir actualizando esta entrada, con las cosas que me vaya encontrando. Así quedará una única mega-entrada que puedes leer (si te interesa esto del EBE) o ignorar sin piedad, si pasas de esto. Que tu tiempo es muy importante, no lo olvides.

15/11 – 11:00h Empezando

Acabo de llegar. No había cola para acreditarme, así que ha sido un pis-pas. La bolsa de este año viene Crisis-total. Sólo propaganda y pegatinas.

Me he sentado cerca de un enchufe, he sacado mi Netbook Asus 904HD, al que anoche le instalé MeeGo v1.1 (borrando de un plumazo XP + Ubuntu Netbook Remix) y aquí ando. Sin problemas para conectarnos a la WiFi (MeeGo la ha cogido como un campeón) y escribiendo esto en Chrome.

15/11 – 12:28h Seguimos con Layars

Tras el café de rigor (2) y la torta de aceite viendo ahora la presentación de Layars. Twitter me muestra la ballenita. Nos la hemos cargado con el tag #EBE10 🙂

15/11 – Sesión de tarde

Tras una comilona con @juaconet + Gabri +  botella de Muga hemos estado en la sesión inaugural de EBE10. Buena. Leed los tweets para saber de qué iba, yo no estoy en condiciones 🙂

Ahora mismo empieza Carlos Barrabés con su ponencia. Seguiremos informando.

Cena EBE10 Viernes

Buena cena, con cervecitas y vino en la Alameda. Buenas charlas, alguna gente interesante. Nuevas oportunidades para hacer following a gente que comparte intereses. Luego algunas copas (no muchas) y a la cama

Mañana de Sábado.

Dos cafés después, viendo la conferencia de Geolocalización. Muy interesante.

Tarde de Sábado

Tras la comida, grabando con los macniacos y serantes el podcast de Macniacos. Muy bueno el episodio, como no podía ser de otra forma con estos tres cracks. Se echó de menos a Tazzito, pero lo suplió el MacBook Air 11″ nuevo de Serantes. Mucha gente en la cabina de grabación y mucho calor.

Pensativos los tres

Y se acabó

Tras el café, me vino una «pájara» importante y me fui, muy cansado del EBE, a mi casa. Y se acabó el EBE10

Mi impresión de este año

Este año el EBE ha sido impresionante. Mucha gente, y la verdad, la organización ha sido muy buena. No sufrí colas para recoger mi acreditación, pude tomarme los cafés sin sacar el machete, había sitio en el plenario siempre, etc. Vamos, que pese al incremento de personal, muy bien. Pero cada uno cuenta la fiesta como le ha ido ¿no?. Yo, este año tenía la cabeza en otro sitio y no he disfrutado plenamente del EBE, pese a que lo tenía todo preparado y me vine a Sevilla expresamente a esto. Estaba, como dice Juaconet, tristón. Además, el año pasado comencé a usar Twitter, vi a un montón de gente usando la tecnología de otra forma, me encantaron las ponencias de Yoriento, de Berto Pena, conocí en carne mortal a los Macniacos, etc. etc. Muchas cosas nuevas y buenas. Este año era un poco como una repetición. Quizás también es que me estoy terminando de metamorfosear en programador y ya prefiero las NSCoder Nights. Bueno, en cualquier caso, en 2011 repetiré. Nos vemos.

Juaconet y el cartel del EBE10. ¡Pa comérselo!

j j j

Cómo estoy aprendiendo a programar en Cocoa Touch para iOS

En el post en el que anunciaba que mi primera App para iOS, MyEvents, ya estaba disponible en el App Store, David me pedía en un comentario que escribiera algo de cómo me he ido preparando para programar en Cocoa. Este post ya me estaba rondando por mi Things desde hacía tiempo, y un par de correos pidiendo lo mismo, unido a que en las NSCoder Nights mucha gente va a preguntarlo (y es una lata repetir siempre lo mismo ;-)) me han llevado a escribir mi experiencia.

No esperes aquí un camino formativo «de academia», con unos objetivos, etc. Es mi experiencia. Y por ello mismo, está en contínuo cambio. Os agradecería que, si habéis leído otros libros, consultáis otras webs, tenéis otros ejemplos, etc. los pongáis en los comentarios de forma que todos los programadores que lean el post se beneficien de las experiencias de todos.

Antes de empezar, disclaimer al canto. Probablemente son los años, o el haber estado alejado de los teclados unos años, o el tener mis neuronas seriamente perjudicadas por el abuso de alcohol en mi juventud y cafeína en la actualidad, pero a mí Cocoa / ObjectiveC / XCode no me han resultado «un juego de niños». He tenido que esforzarme, leer mucho, probar cosas, equivocarme, frustrarme, volver a empezar, ver vídeos, etc. Lo digo, porque he leído en muchos sitios por Internet que la gente se pone a toda máquina con Cocoa Touch en dos/tres meses. Pues yo tengo que ser tonto de remate. Si tú tampoco eres capaz de saberte toda la API (incluyendo la parte privada) de iOS en dos meses, que sepas que tienes mi solidaridad.

El comienzo

Cuando me planteé meterme en Cocoa Touch, yo partía con tres grandes ventajas. Por un lado, en mi juventud programé mucho en C y C++, y C siempre ha sido mi lenguaje favorito. Sobre todo, porque fue el primero con el que hice cosas. Por otra parte, tras el intensivo machaque con las certificaciones Java e impartir un montón de cursos tenía bastante claro el patrón MVC. Ambas cosas son básicas: C + MVC, así que, si no tienes claro C te recomiendo lo primero que te mires el libro clásico de Kerninghan y Ritchie «The C Programming Language» para tener claro qué es un #define, un puntero, los tipos de datos que hay, estructuras de control (if, switch), el operador ternario ?, etc. MVC lo explican fantásticamente bien en los vídeos de iTunes U de la Universidad de Stanford, «Developing Apps for iOS», capítulos 1 y 2. El cap. 2 es un ejemplo de cómo aplicar MVC.

La última ventaja, algo que me sigue sorprendiendo que sorprenda, es que hablo Inglés. Dominar el Inglés te da acceso a un montón de información escrita, vídeos, podcasts, y la posibilidad de charlar con gente si vas a la WWDC (de momento, un sueño para mi, pero ya veremos en 2011). Hay muchas formas de aprender Inglés, y distintos métodos. Escoge el que quieras, pero ponte ya. Sin excusas. Lee comics, ve las películas subtituladas en Inglés y con la pista de audio en Inglés, mira videos en Youtube, lo que sea. Pero practica. Ya. Deja de leer estas líneas, en serio: el impacto en tu vida de aprender Inglés será más importante que cualquier cosa que yo pueda contar.

Los primeros libros

Para arrancar, lo tenía muy claro: iba a leerme de cabo a rabo un par de libros, uno para principiantes y de estilo tutorial, y otro avanzado que se metiera a más bajo nivel con Cocoa Touch. Los comenté en este post. Pero como soy así de bueno, listo los cuatro que he leído para que los tengáis a mano:

Beginning iPhone 3 Development, de Dave Mark y Jeff LaMarche. El primero por el que empecé. Te explica todo paso a paso, y trata un montón de temas. En un punto tuve que parar, porque no tenía clara la base de ObjectiveC, y cosas como el KVC, las categorías o la gestión de memoria se me escapaban. Así que lo aparqué y me leí:

Learn Objective C on the Mac, de Mark Dalrymple y Scott Knaster. Este libro me gusta mucho porque es muy directo, si sabes de lo que te está hablando. No es tan tutorial como el otro, va al grano y te da una base imprescindible para programar. Debería haber empezado con este 🙂

Tras estos dos, he leído algunos capítulos de More iPhone 3 Development, también de Dave Mark y Jeff LaMarche. No lo he leído completo, sino los capítulos que iba necesitando, de forma ad-hoc.

El último con el que estoy es iPhone SDK Programming, de Maher Ali. Más avanzado, prescinde de Interface Builder y lo construye todo a mano. Ideal, para saber qué pasa «detrás del telón» de IB. Y su introducción a Objective-C es muy buena, compacta, pero un poco densa.

Vídeo y audio

Mientras estaba leyendo esos libros he ido alternando con los vídeos de la Universidad de Stanford (que están disponibles en iTunes) sobre cómo programar para el iPhone. Son gratuítos y la única pega que se les puede buscar es que están en Inglés. El enlace para la versión en HD es este. También hay una versión en SD. Me parece casi perfecto ir leyendo y viendo un vídeo de vez de cuando, de forma que una cosa se apoya en la otra. Yo no tengo iPad donde verlo, pero se me ocurre que la forma perfecta es por la noche, en el sofá, con los auriculares puestos mientras tu media naranja ve otra cosa. El problema es que es mi media naranja la que lee en el iPad. Es suyo 🙂

En audio sólo he escuchado un podcast de Cocoa: 85% cocoa. Súper recomendable, tanto por el contenido como por la estructura. Y no sólo se tratan temas de programación estrictamente: se hablan de otros detalles necesarios para el desarrollo. Un gran trabajo de José A. Lobato, culpable junto con otros de la comunidad NSCodeCenter y de las iniciativas NSCoder Night en España.

Webs

Además de los recursos de Apple (el Developer Center), uso mucho StackOverflow y ahora me estoy animando a entrar en NSCodeCenter. Con estos tres cubro prácticamente cualquier pregunta, además de blogs de programadores en Cocoa y otras cosas que me encuentro por Internet y guardo en Delicious.

Programar

Al final, a programar sólo se aprende programando. Por mucho que leas, por mucho que creas que sepas, la única forma de aprender a programar es haciendo programas. Puede parecer una perogrullada, pero no lo es. Así que ya sabes: programa. Aunque tu código sea feo, aunque no te apetezca enseñarlo (eso siempre pasa, somos muy pudorosos con nuestro código), sigue adelante. Ya aprenderás formas de hacerlo más bonito. Yo hasta que no me planteé algo propio no empecé a encontrarme con cosas que quería hacer y no sabía cómo.

Un compañero

Yo me he buscado recientemente un compi para hacer Apps a cuatro manos. De esta forma, puedo ver cómo programan otras personas, tengo que esforzarme en «hacerlo bonito», ya que van a leer mi código, y avanzo mucho más rápido. Y me motiva mucho. Otra opción son las NSCoder Nights. Y si no lo hay en tu ciudad, monta tu la tuya. No necesitas más que una cuenta en Twitter y un bar. De ambas cosas hay abundancia en España.

Así que ya sabes: happy coding!

j j j

NSCoder Nights Sevilla

Me ha tocado organizar el capítulo de Sevilla de las NSCoder Nights, y en ello estamos. El próximo Lunes 15, a las 19:00 estaremos en la ETSII Facultad de Matemáticas de Reina Mercedes. El aula aún está por confirmar, pero si después de leer esto te interesa venir, toda la información se va a ir publicando de dos formas:

– Bueno, ¡ya está bien con los anuncios!. ¿Pero qué es esto de los NSCoder Nights? ¿Algo porno? ¿Y porqué el nombre en Inglés, pedantes, que sois unos pedantes?

Las dudas se resuelven en las FAQ, que puedes consultar aquí. Por responder rápido a tus tres preguntas:

  • es una reunión periódica de programadores para tomar café / cerveza / whatever y hablar de nuestras cosas
  • no, no es nada porno, ni ilegal. Pero si alguien se trae un disco duro lleno de pelis, seguro que le encontramos utilidad
  • somos unos pedantes, pero es que estas reuniones las inventaron en EE.UU. y queremos montar algo similar en España (ya ha empezado en Valencia, pronto en Málaga, Barcelona, Gijón y Madrid) de forma que si viajas a una ciudad con NSCoder Night y te apetece, te pases. Sí, es una secta.

Pero ahora, de mi cosecha, te explico de qué va esto.

La informática es una profesión vocacional. Cierto, hay gente que no ha estudiado esto y programa (o lo intenta), o que trabaja en el sector sin ser Informático. Pero es algo vocacional. De otra manera nadie aguantaría unos estudios en los que no hay nadie del otro sexo, sólo tíos raros y feos y frikis (¡horror, que yo soy otro de esos!). Y encima, cada 10 años ¡vuelta a empezar!. ¿O alguien usa el S.O. de hace 10 años? ¿Windows 98, alguien se acuerda? Con XP (que salió en 2001) parecía que se iba a romper esta tendencia de cambiarlo todo cada 10 años, al personal empieza a gustarle lo vintage. ¡Cambiad ya a Windows 7 por lo menos y tened un S.O. moderno!

En fin, que me pierdo. Una vocación, decía. Un ritmo de aprendizaje muy alto. Y algo en lo que no trabajas, es algo que vives. Porque luego llegas a casa y te pones con los chismes. A hacer lo que sea, pero con tus ordenadores de casa. ¡Después de haber estado 10 h en el trabajo delante de una pantalla!. No tenemos arreglo. Yo digo que  hay dos tipos de informáticos: los que van 8 horas al días a su trabajo y luego quieren tener «su vida social» y los que no podemos evitarlo y seguimos en casa 🙂

Pues bien, si tienes pasión por esto, si de verdad te gusta ¿has notado lo que te frustra no poderle contar tus frikadas a nadie? Vale, que le cuento a mi mujer que la arquitectura MVC y la delegación en Cocoa son la leche, y que el KVC es brutal. Pero como que me mira como si le hablase en Chino, y me sonríe por apoyarme, pero no porque le interese. Esa es la razón de que tantos informáticos tengamos blogs: tenemos una necesidad reprimida de enseñar nuestros juguetes y nadie nos entiende. Echamos de menos esas charlas de café, en la facultad, cuando alguna eminencia de compañero te enseñaba cómo programar en Pascal orientado a objetos (era el 92-93, ¿verdad Antonio?), u otro friki extremo te hablaba de su Commodore 64 y te enseñaba a taladrar placas y a quemar circuitos para hacernos conversores analógico-digitales caseros con los que escuchar MODs a través de un radio-cassette (era el 93-94, una Sound Blaster costaba 30.000 pelas de la época, ¿verdad Migue?)

Bueno, voy a dejar las loving memories que me pongo tontorrón y se me salta una lágrima. El caso es que los informáticos precisamos de una terapia de grupo, donde poder curarnos de todo eso que queremos contar y no podemos. Queremos ver que alguien se «pone bruto» cuando le enseñamos nuestro código, o sentir envidia sana cuando llega otro que sabe 10 lenguajes más que tú. Y ver los portátiles, qué herramientas llevas instaladas, qué trucos sabes, etc.

Pues nada, que si sabes mucho Cocoa o no sabes nada. Si quieres empezar a programar tus apps para iOS o si eres diseñador gráfico y quieres ver qué se necesita para hacer tus trabajos para el iPhone. O si buscas contratar a un programador iOS. O si te apetece hablar de programación en general, te esperamos el Lunes. Tengo confirmada al menos a otra persona, así que ya tengo charla garantizada. ¡Nos vemos!

j j j

Mi primera App ya está en el App Store: MyEvents

Al fin, tras casi un año desde que me planteé en serio dedicarme a esto de las Apps para iOS, mi primera App ha sido publicada en la App Store de iTunes. Antes de nada, el momento SPAM:

MyEvents, aplicación para no olvidar tus momentos importantes

  • Puedes verla y comprarla en iTunes a través de este enlace. ¡Vamos, que sólo son 0.79 € y así ayudas a un programador a pagar sus letras del yate y la mansión!
  • Si no tienes / quieres entrar en iTunes ahora mismo, la web de Femtocoders te explica de qué va MyEvents.
  • He abierto una sección en el blog con información sobre las Apps que vaya subiendo al App Store. Porque ahora van a empezar a subir como churros 🙂

Es bonito el ver algo que has «hecho con tus manos» subido en la misma tienda donde compras tus aplicaciones. Es más bonito aún ver que buenos amigos la compran y me mandan correos con sugerencias de mejora. Pero lo mejor es ver que gente a la que no conozco, en el otro lado del mundo, compra tu App porque le gusta. Ver en las estadísticas compras de Bélgica, Francia, Alemania, Australia, EEUU, … aunque sólo sean una unidad, y aunque no genere ingresos de vértigo, es algo que te motiva mucho: esto que estoy haciendo le gusta a alguien.

Porque el camino es duro, no te engañes. En este año, he leído toda clase de libros, de Cocoa y de otras cosas, he preparado mi entorno de trabajo, me he esforzado programando, pero sobre todo he tenido que luchar con dos grandes enemigos:

  • el miedo a fracasar, a que se rían de tu trabajo
  • el volver a ser un simple programador, después de años de ocupar puestos de mando intermedio (o mando total cuando tenía mi empresa)

Volver a pensar como un programador, tener ganas de abrir XCode, volver a sentir ese «vicio por programar» me ha llevado meses. Casi ocho, hasta que he conseguido volver a despertar esa parte dormida de mi cerebro. No ha sido fácil.

Pero probablemente lo peor ha sido el superar las propias autolimitaciones que nos ponemos. Esa voz, dentro de tu mente, que te dice constantemente: «no, no lo hagas, no lo intentes, vas a fallar, aquí se está más cómodo, mucha gente no lo consigue, no pasa nada…». Al final, tras lanzar el primer producto, otra voz ha aparecido echando a la primera y diciendo «a tomar por culo con los miedos, con las dudas, yo soy más duro y cabezón y al final, prevalezco».

Tened cuidado con las limitaciones que os ponéis a vosotros mismos. Cuando se vencen, se ve que no eran para tanto.

Y, por supuesto, comprad la App 🙂

j j j

Los dos tipos de negocio de desarrollo de software

a dilemma (Julia Manzerova)

Muchos informáticos están amargados. La mayoría. Tienen un mal equipamiento, no se les reconoce el montón de horas que trabajan, continuamente deben estar aprendiendo cosas y tienen que solucionar problemas con tecnologías en las que no son expertos, porque llevan sólo unos meses con ellas y las propias tecnologías muchas veces no están consolidadas.

Eso, los que trabajan en una empresa cuyo negocio es vender líneas de código, ya sea en la forma de productos o de horas/hombre en casa de un cliente. Los que trabajan en una empresa cuyo negocio principal es otro y la informática es sólo una función de soporte son los que ya conocen el infierno. El dueño de la empresa tolera a esos informáticos que tiene que aguantar por allí y que gastan tanto dinero porque necesita que los ordenadores funcionen o que su web siga operativa. Pero si pudiera prescindir de ellos, lo haría.

Si hablamos de los primeros informáticos, los que trabajan en empresas de base tecnológica, veremos que están amargados en mayor porcentaje los que están en una empresa que vende servicios y no desarrolla productos. Son empresas que venden «Proyectos», con la P mayúscula, ejecutados mediante su «Metodología» (con la M mayúscula, también), que dicen aplicar los principios del PMI y que te obligan, o no, dependiendo de la moto que vendan, a ir vestido de traje de chaqueta a programar. Es imprescindible que mis compañeros comprendan los dos modelos de negocio y las decisiones económicas que hay detrás de cada uno, ya que si no se comprenden no se entienden las decisiones técnicas y operativas que toman «esos que mandan que no tienen ni idea», y que vienen motivadas por las primeras.

Hay dos tipos de empresas: las que venden servicios y las que venden productos. Y, por supuesto, en toda fase de una empresa que empieza se suele tener una mezcla de ambas. Cuando tuve mi empresa, Elelog, pasé por ambas fases. Yo era defensor de vender servicios, que es lo fácil, lo que sabía hacer. Ahora no quiero vender servicios ni en pintura. Bueno, salvo la formación, que me apasiona demasiado y es casi un vicio. Me pagan por hacer algo que me gusta mucho. Hablemos de las empresas que venden servicios.

Vendedores de carne

camel butcher, by Paul Keller

Básicamente, las empresas que mandan a sus trabajadores informáticos a solucionar los problemas del cliente, son ETTs con ínfulas. Vistan de traje de chaqueta o no, llamen a la venta de carne «Asistencia técnica», «desarrollo in-house», «atención personalizada en casa del cliente» o «porno-chacha a domicilio» este tipo de trabajo comparte unas características comunes:

  • el empleado pierde casi todo contacto con la empresa que le manda. De vez en cuando recibe una llamada de su jefe o le ve cuando visita al cliente (si es que se acuerda de su nombre y le saluda). Una vez al mes ve el nombre de su empresa en la nómina.
  • es el cliente el que decide el día a día de su trabajo. Su jefe «de verdad» es el Cliente, no su empresa. Es el que le explica el trabajo que debe hacer.
  • lo que ocasiona esto es un desarraigo de la empresa, una no-identificación con su empresa, ya que el informático se da cuenta de que su empresa actúa como un mediador, como un vendedor de esclavos. El cabreo aumenta el día que se da cuenta de que, cada mes, su empresa gana dinero «por no hacer nada», sólo por tenerlo allí.
  • un día uno de los mejores programadores que estaban con él trabajando en un proyecto para el Cliente se va a otra empresa. No le han aplicado una mísera subida de sueldo. «¿Cómo han podido dejar escapar a este crack?», se preguntan. Y ven que el más inútil sube de programador a analista. «¡No lo entiendo, debe ser un enchufado!, ¡esta empresa se va a pique, no tienen ni idea!». Pero los contratos siguen llegando. La explicación más normal: estos son unos enchufados y seguro que tienen un chanchullo, si no no se entiende cómo se han tragado a esos dos becarios nuevos que no tienen ni idea.
  • la formación que se les da va exclusivamente dirigida a ser más «productivos» en el proyecto en el que están ahora mismo trabajando. La sensación de «gallinita ponedora» aumenta. No hay carrera profesional. No preguntes, porque no hay respuesta.

A este panorama desolador se enfrentan todos los días excelentes programadores al ir a su puesto de trabajo. Se quejan tomando café, y no acaban de entender el porqué de las decisiones de sus jefes. Y están frustrados, porque suponen que hay una respuesta lógica, pero se les escapa. Piensan que si aprenden nuevos lenguajes de programación, o nuevos trucos para gestionar la base de datos Oracle, o formas de que ese servidor Tomcat no se quede sin memoria, serán mejor valorados dentro de su empresa. Y temporalmente puede que así sea, pero el esquema anterior se repite inexorablemente.

Click para ver el autor

Pues bien, la culpa es del modelo de negocio de venta de servicios, y el culpable último es el Cliente.

El Cliente, por ejemplo un Ayuntamiento, una gran empresa o una administración autonómica, tiene que arreglar una serie de problemas: su portal web debe mantenerse, hay que añadirle capacidades de firma digital, quiere mejorar sus servidores, lo que sea. Tiene una estructura de presupuestos fija y algún lumbreras ha decidido que a un programador se le paga, como mucho, a 50 €/h, a un analista a 60 €/h, y así.

Y ésta es la raíz de todos los males: no se puede pagar lo mismo a todos los programadores porque los programadores no son intercambiables. A ver si nos enteramos de que, en los trabajos mecánicos, en los que no hace falta creatividad, trabajos que se han convertido en commodities, los trabajadores son intercambiables. Respeto profundamente a las personas que recogen las bolsas de basura por las noches, es un trabajo muy duro y necesario. Pero si quito a uno cualquiera y pongo a un robot capaz de lanzar bolsas a un camión no se va a notar. Sin embargo, dos abogados no son intercambiables. Está claro que uno especializado en código penal es lo que quieres cuando te van a mandar a la cárcel por alguna trastada. No es intercambiable con uno especializado en divorcios. Lo mismo pasa con los médicos: todos sabemos que un buen médico es 100 veces más efectivo curando que otros de sus compañeros y le llamamos por su nombre: «me está tratando el Dr. Fulano». Igual sucede con arquitectos, o cocineros. No es lo mismo que te cocine Ferrán Adriá que Pepito el de los Palotes.

Pues con los informáticos, no hay manera, parece que somos intercambiables. Pero un buen programador, el que de verdad es bueno, ese al que sus compañeros admiran, probablemente será diez veces más productivo (y por tanto rentable) que el resto. Pero ¿va a valorarlo el cliente? No. El Cliente seguirá ofreciendo por sus horas 50 €, ni un céntimo más. Y así se crea la espiral marrón del trabajo informático subcontratado:

  • el Cliente establece de antemano el precio máximo que está dispuesto a pagar por cada hora de trabajo. Lanza así una señal de que todo el mundo trabaja más o menos igual, cuando sabemos que en este tipo de trabajo eso es falso.
  • la empresa vendedora de carne contrata a algún becario, ilusionado y con ganas de aprender. Incluyendo todos los costes laborales le cuesta 12 €/h. Buen negocio.
  • a menos que el personal enviado se coma las mesas, el Cliente siempre los acepta. Ya que no es capaz de determinar la validez del trabajo de los que tiene a su cargo, no es capaz de premiar/castigar a los que le llegan. Mientras el proyecto avance, no hay quejas.
  • pasan los años. El programador bueno lee libros, aprende nuevas técnicas, prueba cosas, sigue ilusionado. El malo va a trabajar sus 8 horas y punto. Ambos cobran lo mismo. El programador bueno piensa «este esfuerzo tendrá su recompensa, a fin de cuentas yo programo bastante bien y ayudo a mis compañeros»
  • los sueldos suben. Ahora a la empresa el programador bueno le cuesta 30 €/h. Pero siguen vendiendo sus horas por 50 €. Ya no hay el mismo nivel de beneficios. Se le ofrece una de dos salidas: o asciendes (por ejemplo a Analista) o te buscas otro sitio. El perverso «up-or-out».
  • el programador, que era feliz programando, pasa a una espiral de marrón superior, la del analista. Luego vendrá el Jefe de Proyecto, Consultor, o cualquier otro título que su empresa Dilbertiana tenga preparado.
  • se sustituye al programador bueno con un becario malo. El cliente no lo nota. Los márgenes son los adecuados. Todos felices, salvo el recién ascendido, que sólo quería un mejor sueldo y el reconocimiento de sus jefes. Y seguir programando.

¿Te suena? Este ciclo es el que hace que se vaya gente muy buena y a los jefes parezca que les de igual. ¿Para qué complicarse con ese, si pongo otro y al final no se nota? ¿Te sientes identificado con la empresa en la prestas tus servicios y no con la que te paga la nómina? Normal, porque tu empresa realmente no te aporta nada. No te enseñan nada. Sólo te pagan. ¿No cambian los ordenadores más que cada 10 años? Ya sabes la razón.

Es el mantener el margen de beneficio lo que ocasiona todas las otras aberraciones. Ojo, que no estoy en contra de que las empresas ganen dinero. Es su obligación, para no cerrar y poder crear puestos de trabajo. Pero en este modelo se crean muchas perversiones a posteriori porque todo gira alrededor de mantener un margen por culpa de un tope impuesto por el cliente, no por la calidad del servicio.

Y este tipo de negocios es sencillo de montar: sólo hace falta un buen equipo de vendedores de motos con traje de chaqueta y listo. Lo se, porque yo lo he hecho.

Creadores de productos

Pensemos ahora en otro modelo de negocio. Tengo una idea muy buena: una serie de aplicaciones para iOS que me van a hacer rico. Tengo dinero y voy a montar unas oficinas. Y pienso: «como tengo claro que un programador crack produce 10 veces más que uno malo, si tengo a un crack y hace un programa que me da 100.000 €/mes, me da igual pagarle lo que me pida. Y ponerle la mesa, la silla, el ordenador que quiera. Y una playstation 3 en los lavabos. Y comidas gratis. Y bebidas gratis. Y lo que haga falta, porque voy a invertir en gente y me van a hacer rico». Y hay gente que no sólo piensa ésto, sino que lo hace de verdad.

La creación de productos es muy distinta a prestar servicios. Aquí los requisitos están claros, o se van descubriendo mediante prototipos y charlas con posibles clientes. Pero el responsable de que algo no esté suficientemente claro eres tú, nadie más. Los plazos los pones tú. Tú decides cuánto invertir en programadores y medios técnicos. Si tu producto realmente se va a vender, disponer de los mejores no supone tanto comparado con los beneficios que vas a obtener. Una vez lances tu producto y empieces a vender, alcanzarás el punto de equilibrio cuando lo que te has gastado durante esos meses (o años) puliendo el programa lo recuperes en ventas. A partir de ahí, virtualmente todo es beneficio, ya que la distribución hoy en día del software se hace por Internet y sólo te cobran si vendes. Eso, si usas una plataforma de terceros. Si creas tu propia web, mientras duermes estarás ganando dinero. La gente que esté despierta en la otra cara del planeta puede estar comprando tu producto.

Crear un producto es más duro que vender servicios. Debes tener la idea, buscar el problema que va a resolver tu software, en lugar de esperar a que te expongan el problema. Debes arriesgarte e invertir. Debes automotivarte, mantenerte fresco y creativo mientras el producto se va creando y no se gana dinero, ni hay clientes. Los plazos te los marcas tú. En resumen, toda la responsabilidad es tuya. Por eso la recompensa es mayor, o el batacazo. Porque, claro, siempre puede ir todo mal y no vender nada pero… ¿eso nos va a pasar? ¡No, y si nos pasa, lo seguiremos intentando!

A ver si adivinas cual de los dos modelos me gusta más :-). Y no olvides dejar tus opiniones en los comentarios.

j j j

Ojo con tus copias de seguridad de Time Machine

Fallo al intentar reparar el disco de Time Machine

Fallo al intentar reparar el disco de Time Machine

Hace no mucho comentaba mi Plan de Backups y cómo estaba protegido (en teoría) frente a las distintas adversidades que se me pueden presentar. Lógicamente, Murphy se ha dado una vuelta por estos lares para darme una cura de humildad, y de paso poder escribir así este post.

La historia empieza cuando recuerdo un correo que me hace falta y no soy capaz de localizarlo en Mail.app. Venga a buscar y nada. Pero claro, el iMac es nuevo y el MBP se ha reinstalado. Así que me doy cuenta de que, al configurar de nuevo las cuentas de correo (que son IMAP) se han bajado las carpetas que están en el servidor, pero lógicamente no tengo las carpetas locales. Y el correo que busco está en una carpeta local.

«No pasa nada», pienso. «Ahora monto mi copia de seguridad de Time Machine, me voy donde Mail.app guarda las carpetas locales, las restauro en el iMac y listo».  Bien, el plan es bueno, salvo cuando le das doble click al archivo .sparsebundle que guarda la copia de seguridad y tras un rato, ves que no se monta. No sale una ventana que indique el error, nada. «No le habré dado bien». Le vuelvo a dar. Nada.

Un poco mosqueado, abro la utilidad de discos y busco el volúmen en cuestión.

Utilidad de discos abierta mostrando mi copia de seguridad

Utilidad de discos abierta mostrando mi copia de seguridad

Lo intento montar y me salen las siguientes ventanas:

Intentando montar la copia de seguridad. ¡Arráncalo, Carlos por Dios!

Intentando montar la copia de seguridad. ¡Arráncalo, Carlos por Dios!

y finalmente:

No hay suerte. Murphy me odia.

No hay suerte. Murphy me odia.

Un sudor frío me corre por la espalda. Un escalofrío me pone la carne de gallina. Escucho voces en las sombras. Murphy me odia, es oficial. Cabreado, pero no resignado, pulso el botón de «Verificar disco». Me da tropecientos errores. Pulso reparar disco. Repara algunos, pero me indica que hay otros con los que no puede. Vuelvo a intentar montar. Nada. Reparo. Monto. Nada. Reparo. Monto. Nad. Así varias veces. Hasta que, finalmente, aunque me indica que hay errores, veo que está montado en /Volumes/Time Machine Backups.

Abro una terminal y me abalanzo sobre el directorio. Desde allí, y gracias al todopoderoso cp -r, copio las carpetas que buscaba al escritorio. ¡Buff!. Me he librado de ésta.

Conclusiones:

  1. aunque tengas un buen sistema de copias de seguridad (por ej. usar Time Machine en una cabina con varios discos en RAID, como un Drobo) Murphy puede pasar a visitarte.
  2. no basta con hacer copias de seguridad. Hay que comprobarlas. Si te haces un disco de arranque con Carbon Copy Cloner, prueba a arrancar desde él, para que el día que te haga falta estés seguro de que va a funcionar.
  3. Si usas Time Machine, monta de vez en cuando el volumen de copias de seguridad (el fichero .sparsebundle) y comprueba que no hay errores. Si lo pillas a tiempo probablemente el desastre será menor.
  4. hay que ser como el que iba en un barco y no se fiaba de la mitad de la tripulación: eran un padre y un hijo.

Esta vez he recuperado los datos. Pero ¿y la próxima?. ¿Experiencias personales? ¡Déjalas en los comentarios!

j j j