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 😀

  • 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

¿Cuánto cobro por mi App?

Hay muchos artículos por ahí del tipo «¿Cuánto cuesta mi App?». Yo quiero plantearlo al revés: cuánto debes cobrar por tu App como mínimo para no morir de hambre.

Supongamos que un futuro cliente contacta contigo y te cuenta su fantástica idea sobre una App. Básicamente te dicen cuatro cosas y rápidamente quieren saber cuánto tendrán que pagar. Esto es curioso, porque a nadie se le ocurre ir a un arquitecto y decirle «¿cuánto me costaría una vivienda de 4 habitaciones?». No se le ocurre, porque no hay respuesta y es evidente: «Pues depende». Depende de si es un piso o un chalet, si es adosado o pareado, depende de las calidades, ubicación, cuartos de baño… Depende de todo. Pero en lo nuestro, por lo visto, hay que nacer con el ojo de buen cubero de serie.

Y hablando de ojo de buen cubero: ten cuidado con lo que estimas y recalca que son estimaciones. Aunque te va a pasar esto seguro:

Dr. Evil and minions: "We'll ask for estimates and then treat them as deadlines"

Dr. Evil and minions: «We’ll ask for estimates and then treat them as deadlines»

Mis estimaciones

En mi caso, he simplificado el proceso bastante. Cuando me plantean una App así, me pregunto ¿cuántos meses me puede llevar acabarla?. Y pienso en meses. Nada de estimar en horas o en días. Bullshit. Como mínimo, entre analizar, escribir código, pruebas de unidad, pelear con el interfaz, probar, depurar, los iconos, subir a la tienda… Al final se va siempre un mes como mínimo. No te engañes. Lo sabes. Y una vez que tengo el número mágico en meses, multiplico por 4.500 Eur + IVA. Y así sale el precio.

¡OMG! ¡4.500 Eur.! ¡Con la crisis que hay y la de gente que no llega a mileurista y tú aquí diciendo en plan elitista que pidamos 4.500 Eur.! ¡Eso es lucro! ¡Eres una mala persona! ¡A todos nos gusta el dinero, claro, pero decir abiertamente que quieres obtener tanto lucro es avaricia, es ser malo, robar a las viejas, matar gatitos y ser muy de derechas!

Con perdón: More Bullshit

Primero: todos necesitamos dinero. Para comprar bienes y servicios, mayormente. Y claro, tener mucho no suele ser un problema. Al contrario, sí. Todas esas milongas de «los ricos también lloran» son cuentos para pobres, contados por gente que se hace rica. Desde Buda no se conoce a ningún rico que abandonase sus riquezas para ser pobre. Hay gente que hace cosas útiles con su dinero, como Bill Gates. Otros no. Pero el dinero en sí no es malo. Ni bueno. Es dinero. Pero no se va a levantar por la noche a apuñalarte. Recuerda: es un objeto inanimado y sólo te controla si tú te obsesionas con él.

Segundo: ¿piensas que 4.500 Eur. es una barbaridad de dinero? ¿Trabajando como Autónomo (Freelance) en España? Entonces, es que no conoces la barbaridad de impuestos que pagas, ni lo bien que se está dentro de una empresa. Empecemos:

  • Facturas 4.500 Eur. Eso no quiere decir que los cobres. Los cobrarás si el cliente te paga. Luego tienes un riesgo mucho mayor que con un contrato y una nómina. Aunque firmes contratos, como el cliente no te pague vas a tener problemas, y muchos. A mayor riesgo, mayor recompensa, ¿no?
  • Supongamos que el cliente te paga a tres meses. Que sepas que vas a tener que adelantar el IVA de esos 4.500. Que sí, que luego te lo pagarán. O no. Pero de momento prepárate para adelantar 945 Euritos. Dinero que cuando lo pagues no te generará intereses a tí y no podrás usar para nada, porque ya no lo tendrás.
  • Y, además, el cliente no te va a pagar 4500. Te va a retener el 21% en concepto de IRPF. Es decir, que otros 945 Eur vuelan de golpe. Y tus fantásticos 4.500 Eur se transforman en 3555.

¡Bueno, pero eso es un sueldazo de súper rico, porque a ver, 3.555 multiplicado por 12 meses…!

Ya, ya, y también dos huevos duros. 12 meses y dos pagas extra, claro. Despierta. Eres autónomo, ¿recuerdas?. Tienes derecho a pagar impuestos y permanecer en silencio. Dentro de tres meses, igual no puedes facturar nada. Esto sería un sueldazo si puedes facturar todos los meses (lo cual no es normal). Si no, ahora llenas la despensa para las vacas flacas.

  • Y no hemos dejado de descontar. Eres autónomo ¿no?. Pongamos el caso barato, en el que no tienes una sociedad (que es el que estoy haciendo). Hay que pagar las cuotas de la Seguridad Social. Más impuestos. Lo mínimo que puedes pagar: 260 Eur. Tus ingresos mensuales bajan a 3.295 Eur., cortesía de uno de los autónomos más caros de Europa.
  • Claro, programas con un ordenador. Un ordenador que no te facilita tu empresa. Te lo compras tú. Y cuesta un dinero. Y tendrás más de uno, por aquello de que hay que cumplir plazos y si se rompe es tu problema. Consideremos que cada mes lo amortizas con un valor de 60 Eur. Y hay que pagar electricidad, que trabajando en casa se está muy bien, pero hay que encender luces, poner calefacción (o aire acondicionado en verano), etc. ¿Otros 60 Eur. al mes?
  • Odio llevar los papeles. Así que contrato una gestoría. Otros 60 Eur. que se van al mes.
  • ¿Utilizas algún servicio para crear estas Apps? Por ejemplo, hay que pagar 80 Eur al año a Apple para publicar Apps. Otros 80 al año por Dropbox, para tener una copia de seguridad en la nube, que para eso soy un profesional. Y Evernote, o Vimeo… ¿Contamos con 20 Eur / mes en servicios de Internet? Por cierto, apunta la conexión a Internet en sí, que se me olvidaba.
  • Software. Que muchas veces hay que comprar. En mi caso, uso Pixelmator en lugar de Photoshop para ahorrar algo. Pero los 50 Eur / mes en software puede no ser una exageración. Es más, es muy poco. Compra una licencia de Unity, de Xojo, App Code o Adobe CS y verás qué divertido.
  • ¿Tienes una habitación dedicada a oficina en casa? Esa habitación te ha costado dinero tenerla, y ahora no la usas para otra cosa. La usas para esto. Luego la pagas. Y tiene muebles, cables, routers, SAIs, enchufes, etc. Y todo cuesta dinero.
  • Así que, tras todos estos gastos, piensas ¿bueno, y si me quedo sin trabajo (parado) o me tengo que jubilar? Un empleado por cuenta ajena tiene las espaldas algo más cubiertas (cada vez menos). Aquí depende de la previsión de cada uno, pero al menos 500 Eur deberían ir a una hucha para estas cosas.

Como puedes ver después de todo, no se pedía tanto dinero con los 4.500. Y no te engañes a ti mismo: si pides 800 Eur. por hacer una App y no estás dado de alta como autónomo estás perdiendo dinero.

¡Es que acabo de empezar!

¡… Y claro, tú vienes con los 4.500, empujando, en plan bravucón, diciéndome lo que debo cobrar, etc.!

Querido lector. Hay tres posibilidades:

  1. Perteneces al batallón de los tristes. Este batallón está integrado por los que dicen querer algo, pero no hacen nada por conseguirlo. Por los que siempre están llorando. Por los que envidian el avance del resto. Por los que siguen haciendo webs con WordPress. Con eso no os vais a ganar la vida decentemente. Mirad otras opciones mejor pagadas. Hay que cambiar, eso sí. Es más cómodo llorar.

  2. Estás empezando y quieres hacerte un nombre, y por eso tiras los precios. Correcto. Pero se está empezando hasta la tercera App. No se está en esta etapa 10 años.

  3. No te habías planteado que estabas haciendo el tonto. En este grupo he estado yo hasta hace no mucho. Y en el grupo 2, claro. Repite frente al espejo 10 veces, todos los días, en voz alta: «debo cobrar 4.500 Eur. por App y no soy una mala persona». Hace milagros

Por cierto, y antes de que os abalancéis sobre los comentarios a ponerme a caer de un burro (always welcome, BTW), probad alguna calculadora del coste de una App, a ver qué os sale.

¡ Que lo facturéis bien !

j j j

Accediendo a todos los iconos de la barra de menús del Mac

Una de las cosas que siempre me ha gustado más del Mac es que la barra de menús no está pegada a la ventana. Siempre en su sitio, sabes dónde tienes que mirar para encontrar una opción. Como en el Amiga OS, por cierto. Estoy tan acostumbrado, que las ventanas de Windows con los menús pegados ahora se me hacen raras. Cuestión de costumbre supongo.

Junto con los menús me he habituado a acceder a muchas Apps a través de sus iconos en la barra de menú. Como una especie de accesos rápidos, me resulta sencillo hacer click en alguno de esos iconos para consultar algo, por ejemplo de Dropbox, o BitTorrent Sync, o Evernote. Y tiendo a tener muchos iconos ahí arriba.

Lo cual no da demasiados problemas. Siempre que esté en el iMac de 27″, claro. Dado que la barra de menús comparte este espacio con los iconos, si el programa que tengo en primer plano (y cuyos menús se están mostrando) tiene muchos apartados, estos acaban tapando a los iconos. Se ocultan, para dejar paso a las opciones de la App. Lo cual tiene lógica. Y claro, en el iMac esto no me pasa nunca. Pero en el MBP 13″ no retina, con su resolución anémica esto sucede constantemente. Y si estoy conectado a un proyector (que suelen venir directamente de 1997, con una fantástica resolución de 1024×768) es para directamente pegarse un tiro.

En un curso hay veces que comparto la conexión con el iPhone y quiero cerrar Dropbox, para que no sincronice usando la 3G y se coma el plan de datos del móvil. Y es casi imposible llegar al icono de Dropbox: todos lo tapan, pruebo cambiando con Cmd+Tab de programa, hasta encontrar el que tenga menos opciones de menú y así no tape los iconos… un rollo. Hasta que descubrí AccessMenuBarApps.

Access Menu Bar App

Access Menu Bar App

AccessMenuBarApps es una pequeña utilidad que, una vez lanzada, puedes activar con una combinación de teclas (en mi caso con Mayúsculas izquierda + Esc) y que «limpia» de opciones de menú la barra superior. Es un gustazo, cuando estás conectado al proyector, poder llegar así a todos tus iconos, de un teclazo. Se ha convertido en una herramienta básica de mi día a día. Y encima es gratis. Se merece una donación ¿no?.

j j j

WIP Jam 2014

Como comenté en el último post «Ponente en la WIPJam 2014«, este año he ido al Mobile World Congress de Barcelona, pero con una gran diferencia: este año, además de a ver móviles y tabletas iba a dar una charla y a estar en una mini conferencia de desarrollo (la WIPJam).

Como el año pasado, me quedé en casa de Rafa. Y he pasado la semana con Luis Ascorbe, Pedro Muñoz y el resto de cracks del capítulo Cocoa de Barcelona (lo siento, sois muchos 😉 ) y de otras partes de España que estaban allí para el MWC.

Del MWC en sí he visto poco. Cada vez me interesa menos: mucho móvil, mucha tableta, ves cosas muy chulas pero tienen poco impacto en mi día a día. En cambio, en la WIPJam he podido aprender sobre desarrollo con Google Glass, trucos de Android e iOS, … Creo que prefiero las conferencias de desarrollo, y cuanto más hardcore mejor.

Es esto, la WIPJam debe mejorar. Creo que a todos nos gustó que fueran más días, pero hacía falta más contenido, y si hay que vender los productos de los espónsors, siempre se puede hacer de forma que de rebote aprendas cosas. Es decir, eché en falta más talleres de remangarse y hacer cosas. He enviado mis sugerencias al personal de la WIPJam (que, por cierto, son tan buena gente que parecen de Cádiz) y espero que a) me dejen aplicar algún cambio el año que viene y b) me dejen entrar el año que viene, pese a las críticas 😀

El caso es que estuve de Lunes a Miércoles en la WIPJam (en Plaza de España, no en la Nou Fira, que es donde está el MWC de verdad) y el Jueves me eché un paseo por el MWC. Que duelen los pies un montón: es muy grande y las moquetas del suelo muy duras, o algo pasa. Y vi cosas chulas, como el Galaxy Note 3 de Samsung, o los Nokia X, o los teléfonos Firefox OS. Pero poco más.

Lo mejor: las cervezas, las charlas con @Pepito, las cenas, el humor de Carles, las Google Glass, los iBeacons…

Material del taller de Core Data de la WIPJam

En la charla de Core Data

En la charla de Core Data

Lo más importante para mi fue el poder impartir la charla sobre Core Data del Lunes y luego poder programar con un grupito una pequeña App usando mogenerator y Magical Record. Como prometí poner todo el material online, aquí está:

j j j

Ponente en la WipJam en el MWC 14

Estoy muy contento de ir este año al Mobile World Congress como ponente de una charla en la WipJam. Concretamente va a ser de Core Data (como la charla y taller que impartí el año pasado en la conferencia NSSpain). No soy yo el máximo experto en Core Data del mundo, ni siquiera de mi barrio, pero poder acudir a un evento internacional y compartir conocimiento con otros programadores me motiva bastante. Y algún proyecto con Core Data he desarrollado.

Encima, para mejorar la cosa estaré parando en la casa de Rafa Aguilar (responsable de [Objective-C.es], 3 además de programador iOS en Wallapop y crack absoluto). Y dormirá con nosotros (juntos, pero no revueltos) Luis Ascorbe, el 50% de NSSpain. Y Pedro Muñoz andará por allí con su proyecto de iBeacons… Y todos los demás amigos de Barcelona… Vamos, que no se puede pedir más.

Bueno, sí. Puedo pedir terminar de una vez la App iOS que estoy ultimando y así poderme ir tranquilo a BCN. Y acabar las transparencias a tiempo, y no en el tren, que me veo como siempre…

j j j

Mi rutina diaria de trabajo

Trabajar por tu cuenta es el sueño de muchos. Tiene muchas cosas buenas, como poder decidir el horario que mejor se ajusta a tu vida y tus necesidades, y la posibilidad de cambiarlo para adaptarte a éstas. O (algo muy importante para mi), poder escoger las herramientas con las que te sientes más productivo, o que te gustan más. Así, no tengo que usar un PC polvoriento con XP, o un teléfono del Pleistoceno (eso sí, corporativo). Puedo invertir mi dinero en el equipamiento que, dentro de mis posibilidades, más feliz me haga.

Pero también tiene sus cosas no tan buenas. Toda la responsabilidad es tuya. Si te equivocas en algo, o la pifias, no hay excusas. No hay equipo del proyecto en el que envolverse. Ni un jefe que te cubra las espaldas (sí, por increíble que parezca, yo creo en los jefes que dan la cara por sus equipos; incluso cuando me ha tocado ser jefe me he llevado yo las tortas antes que mi gente, pero eso es otra historia). Cuando trabajas por cuenta ajena no hay que pensar tanto: tienes que ejecutar el trabajo que te mandan. Y tienes la seguridad de un sueldo a final de mes. Por cierto, si sientes que tu trabajo no es seguro, que ganas poco y tienes muchas responsabilidades, igual deberías plantearte montarte algo por tu cuenta…

Bueno, al grano, que me pierdo. Una de las cosas en las que hay poco que pensar si eres trabajador por cuenta ajena es el horario: normalmente tienes que tragar con el que te propone tu empresa. Pero si trabajas por tu cuenta y en casa, esto del horario no es tan sencillo. Para empezar la familia tiende a pensar que, como estás en casa, puedes hacer a la vez las labores domésticas. Es decir, que como estás en casa, no estás trabajando. Y si tienes niños, la cosa se pone peor: hay que levantarlos, vestirlos, ponerles el desayuno, llevarlos al colegio, etc. Y claro, quieres hacer algo de deporte, lo justo para mantener la barriga dentro de unos límites razonables. Y hay que mantener la casa. Y trabajar.

Así que lo primero es dejarte llevar y mimetizarte con un horario de 9 a 5, 8 h como el resto de los mortales. Hasta que ves que no empiezas a las 9, sino a las 9:30. Y que te cansas, porque 5 h seguidas pensando, aunque hagas descansos, es mucho tiempo. Y que te interrumpen con llamadas al principio de la jornada, cuando estás más fresco. Y que al final del día no tienes ganas de hacer deporte, no tienes energía para nada y no te sientes bien, porque no has cumplido con todo lo que esperabas. Y no eres feliz.

Empecé a hacer pruebas y, en mi caso, he llegado a varias conclusiones:

  • no son necesarias 8h de trabajo al día para rendir como 8h. 8h de oficina incluyen las charlas con nos compañeros, las paradas en la máquina del café, los correos con chistes de los amigotes, las interrupciones constantes, las reuniones… Cuando sólo estad tú, este panorama cambia de manera radical.
  • en la oficina el horario es contínuo, que no la concentración ni la creatividad. Por eso vienen las visitas a las máquinas de café. Hacer bloques monolíticos de esfuerzo mental seguido no funciona. Hay que parar de vez en cuando.
  • el móvil, pese a lo que muchos piensan, es perfectamente capaz de informarte de las llamadas perdidas. Por eso, no te obsesiones en tenerlo siempre preparado para descolgar. Cuando hay que trabajar, lo mejor es quitarle el sonido y ponerlo boca abajo. Ya luego devolverás las llamadas cuando te venga bien a ti.
  • tú eres tu peor enemigo. Tú te distraes. Tú tienes que motivarte. Tú te organizas. De nuevo, el peso de la responsabilidad total. Hay que metalizarse.

La rutina

Evidentemente no puedo seguirla todas las semanas. Las semanas que tengo curso, todo se rige por el horario del curso. Pero las que estoy en casa intento seguir este horario:

  • me levanto temprano. A las 5:30 o las 6:00. Y me siento en el salón, con el portátil, que he dejado allí la noche anterior. He apuntado las tareas que quiero hacer, y a esa hora sólo programo. Ni correo, ni planificar, ni nada. Programar hasta las 07:30, que es cuando se empieza a despertar la casa.
  • de 07:30 a 9:00, dedico el tiempo a estar con mi familia. Mi mujer se va a su trabajo y así tengo tiempo de hablar algo con ella justo antes de salir. Voy a comprar el pan. Despierto a los niños (si no están levantados ya) y preparamos el desayuno. Se visten, los peino, preparo su bocadillo (o lo que toque) de media mañana. Les llevo al colegio. A las 9:05 suelo estar en casa. Me preparo algo para mantenerme hidratado (un té, manzanilla, lo que sea) y subo a mi oficina.
  • aquí empiezo el segundo bloque de trabajo. Leo el correo (a las 9:30, luego a las 12:30 y por la tarde a las 16:30). He configurado unas alarmas en un calendario llamado Hábitos. En este segundo bloque hay menos programación y más de otras cosas: preparar presupuestos, responder al correo, a los mensajes de LinkedIn, resolver alguna tarea que requiera de Internet (como mirar el banco, etc.). A las 13:00 paro (en días alternos) y, si puedo, me voy a correr media hora. Luego me ducho y voy a por los niños al colegio. Si no voy a correr, simplemente hago una pausa y sigo hasta las dos menos diez.
  • como en casa de mi suegra. Así los abuelos están con los niños y todos comemos comida de verdad. A las 15:00 estamos de vuelta en casa. Ventajas de vivir en un pueblo pequeño: los desplazamientos son instantáneos.
  • me acuesto la siesta. Me he levantado temprano y ya he trabajado, como mínimo, 4h y media. Es una siesta de verdad, de 40 min al menos. Cuando me levanto, me siento muy bien: he descansado y me he dado un pequeño lujo. Me preparo un café y encaro el último bloque de trabajo del día.
  • que suele ser de 16:30 a 18:30. A esa hora corto, y me pongo con otras cosas. Mi blog, jugar con el ordenador, hacer los deberes con los niños, recoger la casa, reparar algo… Lo que toque.
  • me acuesto temprano (antes de las 23:00). La clave para empezar bien el siguiente día es dejar el ordenador y las tareas preparadas ahora.

Como puedes ver, esta rutina no es la mejor para todo el mundo. Es la que mejor me funciona a mi, en este momento de mi vida. Probablemente cuando mis hijos tengan 15 años cambiaré cosas, porque no tendré que peinarles y eso. Pero ahora mismo, es la que, al final del día, me deja mejor sabor de boca y una sensación más clara de aprovechar el día.

j j j

La comunidad de desarrollo Mac en España

He recibido un par de correos preguntándome sobre esto mismo en los últimos días. Además, es algo que me gusta comentar en los cursos que imparto sobre iOS (y en los de Android, solo que en esos hablo lógicamente de la comunidad Androide). Así que voy a resumir y reunir aquí lo que necesitas para acceder a la misteriosa y privilegiada comunidad de desarrollo iOS/Mac en España.

Sin miedos

Primero, lo más importante: si te interesa el desarrollo con tu Mac, en Cocoa, usando Xcode y Objective C ya eres miembro de esta comunidad. No ha sido tan difícil entrar, ¿no?. Como en cualquier comunidad, sólo hace falta que tengas interés, o curiosidad, o conocimientos, y que quieras compartirlos. No hay que hacer pactos con el Anticristo, ni con los bancos, ni firmar contratos con la sangre de un gallo. Cosa asquerosa, por cierto.

Puedes disfrutar de esta comunidad a distancia, usando tu ordenador e Internet, pero yo siempre recomiendo el contacto cara a cara, personal. El periodo más productivo de mi vida como programador fue cuando estudiaba la carrera de Informática. Y así lo recuerdo por el grupo de personas con las que me reunía a programar y a hablar sobre programación. Probablemente es más la sensación de que «cualquier tiempo pasado fue mejor» que algo objetivo (probablemente, no, seguro, mi código era una abominación), pero hablar con gente que sabe mucho más que tú es algo que estimula mucho, motiva y te fuerza a mejorar para no sentir que haces el ridículo entre ellos.

Aunque eso nunca pasa: nadie, nunca, se va a reír del que no sabe. Lo que hará es ayudarle. Así que destierra ese miedo de tu mente, esa pesadilla que alguna vez has tenido: nadie se va a levantar, en medio del bar señalándote y gritando «mirad al pardillo este, que no sabe nada de nada». Si alguien actuara así es causa objetiva para que te tatúen tonto en la frente, y de no ser parte de esta comunidad.

Blogs

Pongo aquí una lista de los mejores blogs de programación Cocoa en Español que conozco y leo. Debe haber más: apórtalos en los comentarios. Siempre son bienvenidos. Van sin un orden concreto, salvo Objective-C.es, el blog de Rafa, claro ejemplo de superación personal y, como se que al final acabará en Apple, le voy haciendo ya la pelota para que pase mi CV cuando llegue el momento.

Reuniones periódicas

Aquí tenemos las reuniones que se tienen en distintas ciudades de España, con distintas periodicidades. Si no tienes ninguna cerca siempre puedes animarte y fundar la tuya propia. Sólo necesitas a una segunda persona interesada en lo mismo.

Todas estas reuniones tienen su propio Twitter. Busca y ponte en contacto con ellos.

«La» Conferencia

La conferencia de la comunidad Cocoa Española, el sitio al que hay que ir es la NSSPain. Es una conferencia internacional (luego es en Inglés), pero es la que más cerca vas a encontrar con mejor contenido. Yo me he hecho fijo en el primer año.

Twitter

Hay montones de gente interesante a la que seguir. Te recomiendo que sigas por twitter a los blogueros anteriores y que mires a quiénes siguen. Es la forma más rápida.

Preguntas y respuestas

El portal NSCoderCenter es lo que buscas

Pull request

Si quieres que incluya un apartado, o quieres completar todo esto con más información, usa los comentarios más abajo. Gracias.

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

Notación Húngara: contrapost

¿A quién no le gusta una buena polémica?

Polémica Tuitera

Esta semana en Twitter Sendoa Portuondo planteó una conversación bastante interesante sobre si era conveniente (o estaba de moda) usar prefijos en las variables de nuestros programas Objective-C. Mi respuesta fue que, a veces los usaba. Especialmente uso los prefijos para los IBOutlets, de forma que puedo completar el código rápidamente (o encontrar un Outlet sin tener que hacer un viaje al@interface correspondiente.

Fernando Rodríguez (Cocoa Mental, Big Nerd Ranch, super Bad-Ass Master of the Universe) argumentaba totalmente en contra y ha escrito un artículo en Cocoa Mental al respecto. Normalmente estoy de acuerdo con las cosas que publica Fernando, más que nada porque voy al blog a leer para aprender y puedo aportar poco. Pero en este tema concreto (el uso o no de prefijos para identificar qué es una variable), no estoy de acuerdo.

Sus argumentos, que he visto esgrimidos en muchos sitios, se basan en la horrenda interpretación que se hizo de la Notación Húngara propuesta por Charles Simonyi. Nadie lo explica mejor que Joel Spolsky en el artículo Doing it wrong, pero por si no tenéis ganas de leerlo (mal!, dejad en este momento todo esto y leed el blog de Joel de cabo a rabo), voy a intentar explicarlo.

Notación Húngara

Si lees el paper original de Simonyi, encontrarás que la idea que presenta es: «pongamos el qué es de una variable en el prefijo, de forma que sepamos de qué estamos hablando al usarlo luego». Probablemente por no ser el Inglés su lengua materna Simonyi usó la palabra type. Pero no se refiere al tipo que el compilador asigna a una variable, sino a su forma, características, esencia, chi o como lo llames. Su Kind. En un párrafo hablando de cómo prefijar cantidades (índices, filas, etc.) podemos leer:

Quantities are named by their type possibly followed by a qualifier. A convenient (and legal) punctuation is recommended to separate the type and qualifier part of a name. (In C, we use a capital initial for the qualifier as in rowFirst: row is the type; First is the qualifier.)

Si os fijáis atentamente, para dar nombre aquí a una variable que representa una fila, la llama *row_First, y no longFirst o intFirst. Es decir, usa _qué_ es esa variable y no el _tipo_ de nuestro lenguaje elegido para representar a ese elemento. Los grandes detractores de la notación húngara han visto código escritos por otros que no la han entendido y que les obligaban a hacer tonterías como:

int *ptrFirstNumber;        // ¡ya sabemos que el tipo es un puntero a int!
char *strName;              // con leer la declaración, basta...
NSString stringAddress;     // esto es de nota

Apple Will Never Do That

Por cierto y como nota inocente. Dado que esto lo extendió Microsoft y dado que Apple nunca se equivoca, Cocoa es elegante, etc. etc. en Cocoa no encontraremos nunca esta horrible notación, ¿no?. Bueno, no esta, sino notación húngara a la inversa (HungarianNotation^-1): usando sufijos en los tipos. Por ejemplo estas cositas:

AboutViewController *vc;    // ¡ejem! Ya sabemos que vc es de tipo "Pantalla About". 

¿Pero realmente es necesario poner «ViewController» al final de un tipo que extiende de UIViewController? Ya puesto así, que se llame AboutViewControllerUIResponderNSObject, y vemos todas las clases de las que hereda, ¿no?. ¡Error!.

Aquí Apple está marcando en el nombre de la clase qué es, y no su tipo. Para Apple, un ViewController es una pantalla en un programa iOS. Fijáos que el sufijo no es UIViewController, que sería el tipo. Además, sólo leyendo AboutViewController no sabes si es un UIViewController, un UITableViewController, … lo que sí entiendes es que es una pantalla.

Hungarian Notation at its best!

Un ejemplo, que me duermo

Quiero cerrar con un pequeño ejemplo. Supongamos que tenemos una clase que nos devuelve Usuarios (de un servicio web o una BD). Es la clase Users. Esta clase dispone de dos métodos:

+ (NSDictionary *)allUsers;
+ (NSDictionary *)allUsersOrderedByName;

Los nombres de los métodos son autoexplicativos. Usamos un diccionario en el que buscaremos usando una clave (en este caso, el nº de usuario).

Si en mi código, más adelante, quiero guardar estos dos diccionarios (uno está ordenado por los valores de sus claves, que ya que estamos es la forma de ordenar un diccionario, el otro no) podría usar Hungarian Notation Dark Side Style, la criticada por Fernando:

NSDictionary *dictionaryAllUsers = [Users allUsers];
NSDictionary *dictionaryAllUsersOrdered = [Users allUsersOrderedByName];

Aquí, el ver que son un NSDictionary no me aporta nada. Es una tontería redundante poner estos prefijos. Mucho mejor usando Hungarian Notation Luke Style:

NSDictionary *listUsers;
NSDictionary *orderedListUsers;

Aquí usamos qué es para nosotros estas variables, qué representan en el flujo del programa. Son listas de usuarios. Que utilizaremos para mostrar en pantalla, buscar o lo que sea. Me da igual su tipo. Pueden ser NSDictionary, NSArray, un tipo propio, un B-Tree… Lo que me interesa es comprender de un vistazo que a) son listas y b) una de ellas viene ordenada.

Conclusión

Así que, sí, estoy de acuerdo con Fernando en que poner el tipo del compilador al identificador de una variable es una chorrada. Pero eso no es Notación Húngara. Es la mala interpretación que se hizo de ella. La Notación Húngara tal y como se definió es valiosa.

Vale, pero al final, ¿tú lo usas?

Pues creo que sí. Pero no de una manera consciente. Este tipo de discusiones, que algunos obsesionados por «hacer que funcione» verán como una pérdida de tiempo son las que nos permiten aprender y entender por qué hacemos las cosas como las hacemos. Es lo que nos hace Informáticos. Que no Ingenieros. Los Ingenieros no entenderían esto :-D. Pero esta polémica la dejo para otro post.

j j j