El lamentable estado de las herramientas de desarrollo iOS

Apelando a Murphy, voy a escribir esto justo antes de la WWDC, a ver si Apple me deja por tonto cambiando todo de lo que me voy a quejar aquí. Por desgracia no lo espero. Espero que presenten «otras 1000 APIs» que realmente no necesito. Lo que necesito es que eliminen los bugs que existen en las que ya hay. Y que las herramientas funcionen. No que añadan cosas. Que arreglen bugs.

Hace tres años escribí sobre El lamentable estado de las herramientas de desarrollo Android. En aquella época, lo que existía para desarrollo Android (oficial) era el plugin ADT para Eclipse. Y, como relato en el post, no funcionaba algo que era un simple ZIP. Eclipse, Java 6, fallos en las herramientas, un Android Studio que estaba en Alpha, una documentación horrorosa, una API discutible (ver p.ej. el método isUserAGoat en UserManager), la lentitud de Gradle si probabas AS… Esto era la muerte por mil cortes, comparado con el mundo iOS, con esas APIs Cocoa tan consistentes, un Xcode tan bonito y que entonces no fallaba tanto…

Y encima Apple presentó Swift en Junio de 2014. La promesa de un nuevo lenguaje, compatible con Objective-C, con C, C++, pero funcional, con inmutabilidad, Opcionales, genéricos, … Todo se veía de color de rosa desde el mundo iOS, comparado con el cenagal que era el desarrollo Android.

Apple: Non-Pro Macs

Apple ya no hace ordenadores para desarrolladores. Y me parece muy bien, si así gana más dinero. Pero debe entonces afrontar las cosecuencias, que van a ser (porque esto ya ha lo he visto antes en otras plataformas):

  • los desarrolladores se compran otras máquinas y se montan un Hackintosh para seguir desarrollando en iOS / Mac. MacOS se convierte en «ese sistema operativo que te ves obligado a usar por el trabajo». Apple no gana dinero con las máquinas. Tienes dual-boot y cada vez usas más Windows. Peligro.
  • los desarrolladores directamente se pasan a Windows 10 / Linux con mejores portátiles (y a mejores precios, que no todos tenemos una mina de oro en el sótano de casa) y usan MacOS en una máquina virtual (cosa que prohíbe la licencia, como el Hackintosh, pero ponle puertas a ese campo…). Goto 1
  • algunos desarrolladores se cabrean tanto con el poco aprecio que sienten desde Apple que directamente abandonan la plataforma, algo que a dia de hoy se puede hacer ya que el mercado de trabajo tiene ofertas casi para todo tipo de perfiles de desarrollo.

Si los programadores se van de una plataforma, esta se muere. Lo he visto con OS/2, con Amiga, con Linux (¿este es el año de Linux en el escritorio? Y sí, ya se que se usa mucho Linux en Android, que es Linux, y en la RaspberryPi, y que llevo usando Linux desde el 93, que no me cuentes de qué va eso que yo voté porque Tux fuera la mascota de Linux y tú no).

Casi le pasa a Microsoft. El rechazo que generó con sus Internet Explorers le ha llevado a ceder casi toda la cuota de mercado a Chrome. Y no hablemos del patinazo Vista, que enmendó con Windows 7. Es por eso el titánico esfuerzo que está haciendo ahora mismo Microsoft, permitiéndote ejecutar Linux en Windows de forma nativa, o dándote la bash. Atraer programadores que son los que riegan este campo con sus aplicaciones.

2017

Es 2017. Swift va a sacar la versión 4, con nuevos cambios que te obliguen a actualizar tu código, o no compila. Con ese asistente que tiene Xcode tan bueno. Si no tenías listo el lenguaje en 2014… ¿para qué sacarlo? ¿Porque Chris Latter estaba harto y se quería ir? Pero bueno, era 2014 y podíamos entenderlo, Apple. Pasamos por Swift 1, 1.1, 1.2, y los cambios a Swift 2. Y Swift 3. Contínuamente cambiando una base de código que funciona para hacer que siga funcionando. Es decir, gastar horas para seguir en el mismo punto. No añadir nuevas funcionalidades. Que compile. Coding is fun.

Al menos el compilador de Swift es rápido. Tanto, que cuando ejecuto Gradle en Android me parece instantáneo. Gradle, quiero decir. Pero en cada WWDC nos dicen que «ahora el compilador de Swift es un 20% más rápido». Con tantos avances en velocidad mi código debería terminar de compilar… en 1984. De lo rápido que compila. Pero la realidad es la realidad, y Swift es horriblemente más lento compilando que su equivalente en Objective C. Y es una pena, porque el lenguaje es muy bonito. Apple ha hecho un Sherlock de Kotlin con Swift, lo que está bien. Si ahora hiciese un Sherlock de IntelliJ, todos contentos.

Porque cansa ver cómo se arrastra el compilador. Cómo haces Cmd+click en un símbolo y no lo encuentra (es una función de ámbito global y no la encuentra). O cómo el autocompletado es totalmente random. O cómo pones un punto de ruptura dentro de una clausura y no puedes depurar el valor de las variables de la clausura. Bueno, sí puedes… usando println. NSlog oriented debugging FTW!

Al menos podemos refactorizar nuestro código. Esto significa que puedes cambiar el nombre a una clase. Fin de los refactors. Y en Objective-C. En Swift nada. Zero. Nil. Y de generar código ni hablamos. Últimamente Xcode no es capaz ni de comentar líneas de código con Cmd + / o acertar y autocompletarte los nombres de las librerías en los imports.

O cómo la comunidad ha tenido que solucionar problemas básicos que Apple se niega a ver. ¿Resolución de dependencias y librerías de terceros? En Android: Gradle. Soportado. En iOS: CocoaPods, Carthage, o a mano. Todos proyectos de la comunidad. ¿Plugins? En Android: Android Studio tiene de todo. En iOS: han metido un sistema de plugins tan restringido que, la verdad, no conozco a nadie que esté usando algún plugin que merezca la pena (indicadme por Twitter los mejores, por favor). Y de paso se han cargado un proyecto como Alcatraz, que sí que ofrecía un montón de plugins, temas y plantillas de ficheros porque, ¿quién quiere algo mejor cuando mi versión inferior patentada por Apple ya viene con Xcode? Y sí, entiendo los problemas de seguridad de los plugins, y que Xcode viene firmado y todo eso. Pero digo yo que habrá alguna solución intermedia colocando los plugins en otro proceso fuera del sandbox de Xcode…

WWDC

Así que, en esta próxima Developers Conference, vamos a abrir la Keynote hablando de lo mucho que vendemos, de lo buenos que son los portátiles con la ToyBar, de lo chulos que son los auriculares Beats, de todas esas cosas que nos interesan muchísimo a los programadores, que es a los que debe ir dirigida la Keynote. Nuevos colores para las correas del reloj. Nuevas animaciones en macOS para organizar tus ventanas en 15 espacios para que nadie lo use nunca, porque todos usamos un monitor externo. Y Apple Music, que todo programador necesita música de fondo y eso. Pagando.

Pues no. Este año no renové mi Apple Membership por primera vez en 6 años. Y cada vez me cuesta más y me duele más abrir Xcode. Porque veo lo que podría ser, lo comparo con un excelente IDE (con sus problemas, pero mucho mejor para escribir código) como IntelliJ y me sangra el corazón. Quiero seguir programando en un Mac en 2027. No me eches de tu jardín, Apple.

j j j

Apple, tenemos que hablar

Estoy pasando momentos bajos en mi relación con Apple. Cuando dejé Linux y me pasé a los Macs, en 2008, todo eran vino y rosas. Descubrí un S.O., OS X, que era un UNIX bonito. Un UNIX que no tenía que preocuparme de mantener. En el que los drivers de audio siempre iban a funcionar, sin preocuparme de si eran ALSA o no. Un S.O. que además venía envuelto en unas máquinas que siempre me parecieron increíbles. Bonitas, precisas, avanzadas, potentes. Como me dijo Xeleh una vez «yo me compré un Mac para instalarle Windows porque quería tener el mejor PC portátil del mercado».

Entonces Apple sacó el iPhone 3G, y me compré uno en un viaje a Bélgica (en España aún no los vendían porque no había ninguna Apple Store por entonces). Y tras esa maravilla vino el iPad 1, el 3Gs, el iPhone 4… Apple siempre sacaba algo que me gustaba por alguna razón y que compraba, como su Time Capsule (que falló, como tantas). Y me compré un iMac (que aún tengo como máquina de escritorio principal, y como monitor para mi PC de gaming). He tenido otros modelos, desde varios PowerMac G5 hasta un Mac Mini G4 que corre MorphOS (un S.O. alternativo inspirado y compatible con el software de Amiga) o un PowerMac G3 que aún conservo.

Eran años de vino y rosas, de maravillas.

Entonces Apple sacó el Apple Watch.

Este fue el primer producto de Apple en mucho tiempo que me dejó frío. Mi mujer, por ejemplo, lo tiene y usa a diario. Pero en mi caso, que llevaba 20 años sin usar un reloj ¿cargar uno cada noche para poco más que ver la hora? Por ironías del destino, vuelvo a llevar reloj, pero en mi caso es un feísimo, durísimo, utilísimo, Polar M400 con una semana de batería que me llevo cuando voy a trotar por el campo. Por menos de 100 Eur. hace todo lo que necesito y más: registra mis carreras con GPS y monitoriza mi actividad diaria. Y da la hora. Veo que el Apple Watch es mucho más bonito, es a fin de cuentas un móvil pequeñito con correa, pero al igual que a las difuntas Google Glass, no le veo utilidad en mi caso.

Bueno, esto no es para tanto, me dije. Pronto sacarán algo que realmente me interese. Pero tras sacar el iPhone 6+, con una pantalla grande como los otros teléfonos Android que tengo, las mejoras en los iPhones me han parecido irrelevantes. Sí, mejor cámara. Sí, tienes ahora 3D touch. Vale, más potente gráficamente. Pero que no estoy dispuesto a gastarme otros 900 Eur para tener esas mejoras. Y el colmo ha venido cuando han quitado el conector para auriculares estéreo jack de 3.5mm. Se ve que alguien en Apple tuvo un problema de niño con este conector, porque el iPhone original tenía un conector de 2.5mm y necesitaba un adaptador. Y en cuanto han podido lo han deprecado. Supongo que para vender más auriculares Beats con Bluetooth. Y entiendo perfectamente la comodidad de BT, y se que con BT4 la calidad de sonido es bastante buena. Pero si voy a pagar con mi dinero un móvil, quiero que me de opciones. Como la de usar unos auriculares con cable porque suenan mejor, porque me da placer insertar el jack de 3.5mm o porque me da la gana y pago yo. Por increíble que parezca, los consumidores a veces tenemos criterio, y sabemos qué nos gusta y qué no, especialmente cuando lo pagamos con nuestros ahorros…

Y luego se han ido amontonando Keynotes horribles de Apple, en los que presentaban más y más cosas que no me interesan. Apple Music. Lo siento, pero prefiero dedicar un presupuesto de 12 Eur. mensuales y comprarme un CD en Amazon al mes. Porque me gusta abrir el CD. Porque me encanta tener la molestia de ripearlo al nivel de calidad que yo quiera. Porque es un disco físico que puedo prestar o vender si me harto de él. Porque soy viejuno. Echo de menos sentarme a escuchar música sin hacer otra cosa que escuchar la música, como cuando era un chaval. Es increíble la de notas e intrumentos que hay ahí, si les prestas atención. Bueno, eso es si no escuchas Reggaeton, claro. Estoy hablando de música…

Y los días y semanas se convertían en meses. Y el Mac Pro no se actualizaba. Los iMacs tampoco. Al final, ni siquiera los MacBooks. Los Mac Minis ¿qué era aquello? Una pena abandonar la mejor solución para tener servidores macOS (que aunque a alguien en Apple le sorprenda, siguen siendo necesarios). Y después de abandonar los Xserve y ahora dejar de lado los Mini, no se si en apple quieren que los racks donde se alojan los servidores pongamos iMacs…

Al final, la gota que ha colmado mi vaso ha sido el nuevo MacBook NoPro con ToyBar™. Un portátil en el que se destila la obsesión anoréxica por el «más delgado y ligero» que está bien, si no se pierde la potencia. Pero cuando pones un teclado, que para Joel Spolsky es horrible (y me fío algo de la opinión de este señor), no permites, tras tantísimo tiempo sin actualizar, ampliar más de 16 GB RAM, quitas las teclas físicas de función y metes un Apple Watch estirado, en un esfuerzo por dar la impresión de que innovas, te cargas el puerto MagSafe, una de las cosas que siempre me han gustado más de los portátiles Apple y metes únicamente USB-C, pues no puedo estar contento. Que USB-C que estará muy bien en el futuro, o con adaptadores, pero que como he dicho antes si pago por un producto quiero que me sirva ahora, no en el futuro. Y actualmente ni siquiera el último iPhone es USB-C, con lo cual para conectar el último teléfono al último ordenador de Apple necesitas un adaptador… Sin contar con que pasamos de conector de 30 pines a lighning ¿y ahora viene otro distinto? Esto es innovación permanente, o ansia por vender adaptadores permanente, no lo tengo claro.

Y ya se, ya. Que yo soy un caso especial. Que me gustan las cosas viejunas, los ordenadores que cargan juegos de cinta y ripear CDs. Que el ToyBar™ es una maravilla y que me quejo por vicio, y que los más de 500 Eur. que ha subido de precio el MacBook Pro teniendo (para mi gusto) menos prestaciones son perfectamente justificables por esto y por lo otro. Que no podían meter más de 16GB RAM porque entonces no duraba tanto la batería. Pero sí la pantallita de las teclas de función, que debe ser muy ecológico eso de consumir energía para que se vea tecla de ESC. Y que todo el mundo conoce mis necesidades y preferencias a la hora de comprar un portátil mejor que yo. Pero mientras el dinero salga de mi cartera, Apple, tenemos un problema. No me voy a comprar estos nuevos jueguetes con la marca Pro que has sacado. Y no voy a pagar un precio premium por MacBooks Pro con hardware de hace dos años. Así que seguiré estirando este MacBook no retina de 13″, y mi iMac de finales de 2009. Porque funcionan bien, y me parecen máquinas excelentes, y me sigue gustando tu sistema operativo, a pesar de que insistas en iCloud, que como usuario me interesa cero.

Pero tenemos que hablar, Apple, porque por primera vez desde 2008 hay en mi casa un ordenador que es muchísimo más potente que los que tú me ofreces. Es una torre. Lo uso para jugar. De momento. Y corre Windows 10. Y cada día lo enciendo más. Para jugar. De momento.

j j j

Cómo instalar Xcode 6 GM (o cualquier versión final de Xcode) sin sobreescribir la anterior

De nuevo es esa época del año. Vuelta al cole. Fin del verano. Nuevo Xcode.

Me encanta el olor a nuevo Xcode por la mañana

Y siempre, el mismo temor: ¿qué pasa al instalar? ¿Voy a sobreescribir mi Xcode actual?

Un poco de teoría

Una App en OS X no es más que una carpeta (un bundle) que contiene los ficheros ejecutables y recursos que la App necesita. Podemos verlo más claro desde el Finder pulsando con el botón derecho del ratón y escogiendo Mostrar contenido del paquete. Desde la terminal es aún más evidente. Si hacemos:

$ cd /Applications/ 
$ ls -d Xcode*

drwxr-xr-x@ 3 dfreniche admin 102B 10 sep 09:47 Xcode.app/ 
drwxr-xr-x  3 root wheel 102B 16 abr 10:30 Xcode5.app/ 
drwxr-xr-x@ 3 dfreniche admin 102B 2 jul 02:52 Xcode6-Beta3.app/ 
drwxr-xr-x@ 3 dfreniche admin 102B 1 ago 23:17 Xcode6-Beta5.app/ 
drwxr-xr-x@ 3 dfreniche admin 102B 16 ago 00:35 Xcode6-Beta6.app/ 
drwxr-xr-x@ 3 dfreniche admin 102B 28 ago 09:01 Xcode6-Beta7.app/

veremos todas las versiones de Xcode que tenemos instaladas. No son más que directorios UNIX normales

La práctica

Durante la fase de Betas la imagen de disco con Xcode que descargamos contiene una carpeta con un nombre como Xcode6-Beta5. Este nombre es distinto de Xcode, con lo que no hay conflicto.

Cuando llega la GM y la versión definitiva, Apple distribuye un DMG con una App que ya se llama Xcode. Es Xcode 6, pero tiene el mismo nombre de carpeta que el Xcode 5 que ya tienes instalado en tu disco duro. Si lo copias, vas a perder Xcode 5.

Xcode5 antes de copiar Xcode6 GM

]Xcode5 antes de copiar Xcode6 GM

Solución sencilla: antes de copiar nada a la carpeta Applications, renombra Xcode (como si fuera un fichero o carpeta normal, probablemente tengas que introducir tu clave de administrador) y ponle de nombre Xcode 5 (o el que prefieras, yo tengo por ahí una llamada Ye olde Xcode 4.3)

Instalando Xcode 6 tras renombrar Xcode 5

]Instalando Xcode 6 tras renombrar Xcode 5

Fácil, ¿no?

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

La Conferencia NSSPain

Empezando el taller de Core Data

Empezando el taller de Core Data

Ya estoy de vuelta tras pasar una semana (casi) en Logroño. Se ha terminado la NSSpain 2013. Y ya tengo ganas de la NSSpain de 2014. Por hacer breve esto: si te dedicas al desarrollo iOS con algún grado de dedicación y te has perdido este evento, ya puedes ir a darte cabezazos con un muro. La gente que ha venido, la calidad de las ponencias y, sobre todo, la intensidad técnica de las mismas ha sido para verlo y no creerlo. Estas cosas no se pueden dejar pasar.

Las charlas y los ponentes

Las charlas han sido increíbles. Nada de «relleno». Nada de hablar de «mobile márketing» ni de otras historias. Código. Ideas. Patrones. Hemos tenido tres niveles: sesiones duras, muy duras de seguir y luego la de Peter Steimberg (@steipete). Esta sesión por sí sola se situó en una dimensión aparte. Cuando sea mayor quiero ser como Peter, el problema es que me falta cerebro para ello. Pero claro, es que el resto de los ponentes eran todos así. Gente que maneja git desde una consola zsh lanzando comandos como si no existiera mañana. Para los que todo es evidente. Todo lo que a mi cuesta años aprender, ellos ya lo saben. Da gusto estar con gente así. Porque, siendo auténticos sabios, son las personas más humildes, accesibles, sencillas y divertidas que puedas encontrarte. Por ejemplo, he podido desayunar con Marin (@mneor) y comentarle un issue que había respondido sobre en Github sobre Kiwi y Xcode 5, ¡cinco días antes!. Es decir, estaba hablando con el tío de verdad que reparte el bacalao en Kiwi. De película.

Eso, o encontrarte con dos personajes como @orta y Favio, Core Team de Cocoa Pods. Y que te digan que están contentos porque usas su proyecto. ¡Pero si lo que yo quiero es echarme al suelo y besar por donde pisáis!. Esta gente no se da cuenta del impacto que tienen a diario en las vidas de muchos desarrolladores. Y van por el mundo como personas normales, cuando no lo son. La comunidad les debe mucho. Mucho.

Para Marin Usalj todo está OK :-)

Para Marin Usalj todo está OK 🙂

Misma historia con el equipo al completo de Objc.io. Es decir, en apenas dos semanas he visto a Dave Werner (de iOS Dev Weekly) en el iOSDevUK (ya conocía a Dave de otros años) y ahora a los de Objc.io. ¿Qué es lo siguiente? ¿Tomar café con Tim Cook? (Por cierto: Tim, cuando quieras; y no te preocupes: corre de mi cuenta)

Victor Baro ha resumido los talleres mucho mejor que yo en un post dentro del Blog de Louesfera. Lo mismo con el post de Fernando Rodríguez en Applesfera. Bien contado, incluso algún cotilleo de más 😀

Mis talleres

Han sido una basura. Cuando comparas lo que tú puedes ofrecer con lo que cualquiera de éstos trae, te da hasta vergüenza estar por allí. Inicialmente me ofrecí para echar una mano con la NSSpain, porque creo que en España necesitamos este tipo de eventos para poder tener un lugar donde reunir al gremio de desarrolladores Cocoa. Un sitio donde compartir experiencias, donde aprender de los que vienen de fuera. Donde picarnos, y que nos sintamos estimulados por la alucinancia del Cocoa-Fu de estos mónstruos. Por todo esto me propuse apoyar en todo lo posible a los organizadores, porque necesitamos que esto salga bien y crezca. Y no pensaba que fueran a reunir a gente de Champions junto con uno de Regional preferente.

Pero es duro ir a la cena de ponentes y darte cuenta de que eres el tonto de la reunión. Es duro, pero me gusta. Sólo puedes crecer estando con gente muy inteligente, que además sabe mucho más que tú de todo. Y estoy dispuesto a dar batalla. Habrá que esforzarse más. Programando, aprendiendo, enseñando, con todo.

Por cierto, llegué tarde a mi primer taller. De nuevo, os pido disculpas a los que me esperasteis con enorme paciencia. Aunque no fue del todo culpa mía, en la Mili decían que si no quieres llegar tarde te vas el día antes. Así que la culpa me la endosáis a mí, que para eso os tuve esperando.

Por si alguien está interesado, he puesto en slideshare la presentación de los talleres, tanto de Core Data básico como algunas ideas de uso intermedio.

Y algo de código de ejemplo, en este repo de Bitbucket.

Logroño

No había estado en la ciudad y he podido visitar muchos de sus bares parques y rincones. Parece que vives en un bosque, al lado del Ebro. Viniendo de Sevilla, es normal que me encanten las ciudades con río. Pero es que es realmente bonito pasear y ver tanto verde junto. Y se come y se bebe bastante bien. Lo de beber, siendo la capital de La Rioja, es casi una obligación (de hecho, ya hay quien llamaba a la conferencia la NSWine). Me dejé una mañana para pasear y hacer fotos. Las he puesto en este album de Flickr.

Resumiendo

Que voy a repetir, eso está claro. El año que viene, si puedo, como asistente normal y así voy más relajado. O no, ya veremos. Pero si voy a contar algo, va a ser complicadete. O no, ya veremos, que siempre hay mucha gente empezando a desarrollar.

El caso es que quiero dar las gracias a Luis Ascorbe y Borja Reinares por el palizón que se han metido al organizar este follón. Os debemos mucho. Y necesitamos la NSSpain.

j j j

Charla sobre «El estado de la nación móvil»

Hablando del estado de la nación móvil

Este pasado Miércoles 12, estuve en Sevilla impartiendo una charla sobre cómo está ahora mismo el mundo móvil, de la mano de Avante. Fueron cuatro horas (con un pequeño descanso) en el que apenas tuve tiempo de hablar de iOS y Android, y algunas cuestiones generales. Me lo pasé muy bien, relatando mis batallitas. Supongo que los asistentes (que me tenían que aguantar), no tanto.

Es increíble lo mucho que cambia esta parte del sector informático en meses. En Julio estuve en Zafra realizando este taller, pero con más profundidad, para ayudar a una empresa a elegir su estrategia móvil para desarrollo. Como eran programas in house y ya sabían Java finalmente vimos que lo mejor era la ruta Android. Pero desde entonces Samsung ha sido condenada por copiona, ha salido el Kindle Fire HD, el Nexus 7, se han anunciado los nuevos Lumias… Esto va a velocidad de vértigo y son tantas las plataformas y hay tanto ruido que es normal que el que no esté al tanto quiera alguna indicación.

Al fondo, inasequible al desaliento
La pena es que no pudimos hacer casi ni un hola mundo con Xcode. Quería hacer algo también con Android, pero fue imposible. O haber enseñado alguna aplicación webOS, o Windows Phone. Pero cuatro horas se van volando, cuando hablas de algo que te apasiona 😀

P.D.: Avante ha convocado un máster de desarrollo iOS, Android y Windows Phone. Tienes la oportunidad de aguantarme enseñando a programar en  iOS y Android si te apuntas 😉

P.P.D.: ya a finales de 2010 estuve hablando en un encuentro e-Tic de Avante sobre iOS. Hay vídeo para recordarlo.

j j j

El iPhone de mil pulgadas

Magic Ball. Author: http://www.flickr.com/photos/28931095@N03/2699978095/

Se acerca el lanzamiento de un nuevo iPhone. Lo puedo sentir, en los rumores que los recaudadores de adsense de esa cámara de eco que llamamos Blogosfera propagan copiándose unos a otros, sin demasiado pudor, muchas veces tirando de copy y paste. Eso sí, al final del post copiado ponen, en un tipo de letra diminuto, un enlace donde usando la lupa magnificadora podemos leer «fuente».

Es en estos días previos a los lanzamientos donde se crean nuevos rumores, o se reciclan los viejos. Total, si seguimos probando igual alguna vez acertamos y Apple saca el iPhone de 4″. Que ahora es «inevitable«. Como lo era reproducir Flash o tener almacenamiento externo y batería intercambiable cuando salió el iPhone y el iPad. Echadle un vistazo al Nexus 7 de Google y es curioso no escuchar a nadie al borde del suicidio porque la tableta cumpla religiosamente con los cánones de San Steve. Puyas aparte, y dependiendo del precio que tenga cuando se ponga a la venta en España es un dispositivo que me gustaría tener. ICS en una tableta Android es bastante chulo.

El caso es que hay dos rumores opuestos pululando por ahí. Ambos de «fuentes confiables», como pueden ser mi pescadero o mi cuñada. Ambos opuestos

Por un lado parece que el iPhone tiene la pantalla demasiado pequeña algo de lo que los millones de clientes de Apple (pobres Fanboys!) aún no se han dado cuenta y necesita desesperadamente tener 4, 4.2 o incluso 5 pulgadas. Por otro, el iPad es insoportablemente grande y pesado, con sus desproporcionadas 9.7″. Hay que reducirlo por imperativo legal a 7″.

Yo no llevo mucho tiempo siguiendo el mundo Apple. Apenas unos 5 años. Pero creo que todos estaremos de acuerdo en que Apple no se distingue por dar muchas opciones. ¿Quieres un iPhone? Lo tienes en blanco o en negro. Y punto. Es famosa la cita de Tim Cook, cuando aún no era CEO de Apple:

We can put all of our products on the table you’re sitting at. Those products together sell $40 billion per year. No other company can make that claim except perhaps an oil company.
We are the most focused company that I know of, or have read of, or have any knowledge of.
We say no to good ideas every day; we say no to great ideas; to keep the number of things we focus on small in number.

Todos los iPhones e iPads hasta ahora han tenido los mismos tamaños de pantalla. Pero parece que ahora no va a ser así, dicen los «expertos». Entonces, ¿cómo quedaría la línea de productos de Apple? Actualmente se venden el iPhone 3Gs, el 4 y el 4s. ¿Van a eliminar el 3Gs y el 4 y dejar el 4s y el nuevo «iPhone diseñado para el guante de béisbol»? Si esto es así, ¿el modelo de entrada va a ser el 4s? Si dejan el 4 y el 4s, con una bajada de precios del 4s y con la única mejora previsible de la pantalla «gorda» y quizás nueva GPU y CPU, ¿hay argumentos para comprarse el nuevo?

Y con el iPad, qué dejan: ¿iPad3 AKA New iPad, iPad2 y el iPad mini? ¿Los tres? El iPad mini este tendría la resolución del iPad 2 para no molestar a los desarrolladores? Parecería lo lógico. Lo que no queda claro es si comprar un iPad de 7″ o un iPhone de 5″, ya que estarían casi en el mismo rango de tamaños. Y tendríamos 3,5″ y 4.2″ (iPhones) y 7″ y 9,7″ (iPads). Demasiadas opciones. Goto cita Tim Cook.

De todo esto, sólo le doy pábulo a dos cosas:

  • Por un lado, es evidente que Apple va a sacar el iPhone 5, new iPhone o como lo llamen. iOS 6 anda ya por la Beta 4 y entiendo que quieran lanzar el S.O. con un hardware que le haga justicia. He visto modelos de un iPhone más delgado. Misma pantalla. Eso me lo creo. No creo que cambien el tamaño de la pantalla, porque para seguir siendo «retina» tendrían que aumentar el número de pixeles por pulgada. Eso cambiaría la resolución, que ya no sería 960×480 y «mataría» a miles de desarrolladores y diseñadores. Además de algún gatito.
  • Un iPad de 7″, con una resolución igual a la del iPad 2 (1024×768) y a buen precio (unos 299$) plantaría cara al Nexus 7 y daría mucha guerra en el segmento de abajo. Sin afectar a las ventas del New iPad. Si quieres retina y potencia, ráscate el bolsillo.
Bueno, en un mes o así veremos. Igual me tengo que comer mis palabras. O no. Esta vez, como se equivoquen de nuevo, me parece que me voy a dedicar a crear un portal que se llame: rumoresappletelodije.com, a ver si cuando se hable de las cosas, se hace con algo de criterio.

Casi a la vez, Migue en Enteratec deja su versión: «Reflexión sobre la nueva presentación de Apple y su nuevo iPhone. Nadie tiene ni puta idea.«. Más claro…

j j j

Enero 2012: Apocalipsis Maya para mis dos ordenadores Apple

Tren descarrilado. Foto de la IMLS DCC

Este Enero mis capacidades gafe han llegado a cotas insospechadas. Si no lees habitualmente este blog, igual no sabes que me pasé completamente a Mac, porque pienso que los Macs no son caros. Y que en mi escritorio trabajo habitualmente con dos equipos, mi iMac de 27″ Core i7 y mi viejo Mac Book Pro. También sabrás que anteriormente se me ha roto hardware de Apple, y que Apple me lo arregló gratis, aunque ya no estuviera en garantía.

El caso es que desde Noviembre vengo quejándome del horroroso rendimiento de Lion en el iMac. Con un Core i7 quadcore 2.8 Ghz y 12GB espero que todo vuele. Ni SSD ni gaitas. Lo tienes todo en memoria y punto. Máquina hay de sobra. Pero no era así. Y el HD hacía un ruído horroroso. No se por qué me empeñé en que el fallo era software, y probé a desactivar, reactivar y toquetear casi todos los ajustes del sistema. Instalé y quité aplicaciones para ver si encontraba a la App culpable. Incluso desactivé las copias de seguridad con Time Machine, para que no me enlentecieran el equipo. Pero nada. Lion era desesperante. Y el HD cada vez sonaba más y más. Aunque me avisaban desde Twitter que a ver si no era un problema hard, yo ni caso. Al final, instalando el programa Tech Tool Pro 6, para defragmentar el disco del iMac, me avisó de que el estado SMART del disco avisaba de fallo inminente. El estado SMART es un sistema que en teoría te avisa de un fallo futuro en el hardware del disco duro, de forma que antes de que el disco muera puedas hacer algo.

En mi caso, lo primero que hice fue copiar el HD entero en una imagen de disco (un DMG) desde la utilidad de discos. Luego llamé a Apple, a ver qué podíamos hacer. Lo primero que me dicen es que mi iMac no tiene Apple Care. Les digo que no, que yo compré el Apple Care y que el comercial me indicó que se auto activaba.  Pues no. Busqué la caja del Apple Care y lo activamos correctamente con otra llamada a Apple. Una vez comprobado que el HD daba error SMART me ofrecieron cambiarlo sin coste alguno. Incluso podía elegir a dónde llevar la máquina. Así que preferí hacerlo en Golden Mac, que para eso son el APR de Sevilla y es allí donde imparto algún curso de iOS que otro. Llevé la máquina, estuvo allí una semana y ha vuelto como nueva. He reinstalado Lion, aplicado actualizaciones y recuperado el sistema desde el DMG que creé y he continuado desde ese punto. Esta parte, tras el disgusto, ha sido fácil.

Y además tenía mi querido MBP para seguir trabajando, ¿no?. Pues no. Un Sábado estoy trabajando con el y de pronto pega un «pantallazo» y se pone en modo CGA. Los viejunos me entenderán. Pero se recupera solo, y sigue funcionando sin normalidad. Le echo la culpa al driver de vídeo de Lion, total, la culpa siempre va a ser de Lion, ¿no? Cierro el MBP y lo dejo en reposo, como siempre. El Domingo, me levanto con ganas de hacer cosas y abro el equipo. Pero la pantalla está en negro. No se ve nada. Intento todas las combinaciones de teclas y al final lo apago con un «botonazo». Arranco y no se ve nada. Además, antes de apagarlo le quité el sonido y no suena el Mac al encender. Luego no se si está arrancando bien o no. Tras varios apagados en modo Chuck Norris, decido conectarlo a un monitor externo. No Luck. No se ve nada. Pienso que es la placa base, que se ha ido al garete. Pero veo que desde una máquina windows puedo hacer ping a la IP del portátil. Luego está vivo. No suena porque le quité el sonido. Y no se ve porque la gráfica nVidia ha muerto. Busco por Internet y tras un rato me encuentro con esta página, en la que Apple reconoce un fallo en las nVidia de los MBP que coinciden con el mío. Y tienen un programa de cobertura: si el equipo tienen menos de 4 años, aunque no esté en garantía, si se le va la gráfica te cambian la placa base gratis.

De nuevo, llamada a Apple. Y paseo a Golden Mac. Recojo el iMac y dejo mi MBP. Y tras dos semanas, aquí están en mi mesa de nuevo los dos, trabajando codo con codo. He superado la «crisis hardware» mayor que he sufrido en mi vida (en casa).

Moralejas. Varias. Las cosas de Apple se rompen, como las de todos. Pero con una llamada y pulsar una tecla te atiende una persona que te informa si sí, si no, o le que cuesta. Y se hacen cargo de sus fallos. Los reconocen y los pagan. Y hay puntos de servicio por toda España. No quiero imaginarme lo que hubiera pasado con dos equipos Acer o Dell. Envío a portes debidos, mala atención, etc. Así que con Apple se paga un poco más, que en mi opinión está muy justificado por la calidad de los materiales y el soporte postventa, que es el mejor.

Y otra moraleja. Pensaba que tenía muchos ordenadores en casa. Y es verdad. Pero en una semana «murieron» en combate dos de golpe. Tuve que tirar durante una semana de mi viejo Dell 17″ (un PC transportable, más que portátil), pero que me ha sacado del apuro. Una experiencia insufrible volver a XP después de OS X, si al menos fuese Win 7… El caso es que cierta redundancia en hardware, si te dedicas a esto, nunca está mal. Lección aprendida.

Espero que ahora las cosas se calmen un poco, deje de romper cosas y pueda centrarme en crear algo interesante. Tus historias de miedo, a continuación en los comentarios. Siempre es bueno ventilar esos problemas 😀

j j j