Swift and playground

Swift, closures y como nos va gustar a los programadores

El pasado lunes 2 de Junio sobre las 20:30 horas (GMT +1) Apple anunciaba en su Keynote de rigor de la WWDC 2014 un nuevo lenguaje de programación… Swift. Poco tardamos muchos en ver como empezaba a respirar este nuevo lenguaje, descargar iOS8, Yosemite y el XCode6. A las pocas horas manos a la obra, manual de referencia en iBooks, Playground en marcha y empezar a ver que nos depara Swift.

La primera impresión es buena, visto de forma sencilla se podría entender como un JavaScript simplificado en algunos aspectos con ciertos toques de Ruby, Python y similares. Algunas de primeras cosas que llaman la atención con respecto a ObjC son:

  • variables con tipo de datos implícito
  • retorno de diferentes tipos de datos en las funciones
  • inserción de variables en las cadenas (adiós stringWithFormat: no vemos hace 40 años!!)
  • control de flujo en iteraciones con continúes y breaks 
  • fuera ;
  • en algunas instrucciones fuera paréntesis, como en los ifs (aun que a mi personalmente me gusta ponerlos)
  • Switch con “máscara” que hace binds hacia variables “case (let x, 0): println(x)” 
  • funciones dentro de funciones con contexto… y un porrón de cosas más

Pero llama la atención la posibilidad de definir funciones dentro de funciones. Esto se debe a que las funciones en Swift son un tipo especial de Closure. ¿y que es esto?

Closure según lo indica Apple no es más que un bloque de código con la capacidad de recibir parámetros, devolver valores. Puede acceder a cualquier constate o variable del contexto y realiza la gestión de memoria necesaria para ello. Dicho así no suena mal, bloques como los de C o los ya conocidos en ObjC o los lambda de Ruby (no Proc… valida el número parámetros si existen).

Un ejemplo de por que me gusta lo que he visto hasta ahora:

let letters = ["A", "C", "F", "B", "D"]

sort(letters, {(s1: String, s2: String) -> Bool in

return s1 > s2

})

A la función sort se le pasa la constante del array y como segundo parámetro un bloque (closure) con los parámetros que le pasará el propio sort (la cadena s1 A y s2 C, en la primera iteración) y como retorno el Bool resultado de la expresión. Visto así pinta un poco lioso, pero los clousers tienen la capacidad de sacar del contexto los tipos de datos de entrada que reciben así como el valor de retorno, por lo que podemos simplificarlo un poco más.

sort(letters, {s1, s2  in  s1 > s2})

Mucho mejor :) pero… no se quedan ahí con la “magia”. Poseen notación simplificada para parámetros de entrada. Dandole una vuelta podemos llegar a la siguiente expresión.

sort(letters, {$0 > $1})

Bien bien bien… solo aclarar que para poder reducir tanto la expresión el contexto en el que se use debe de estar muy bien delimitado. Para terminar vamos a comprimirla un poco más y ver hasta donde podemos llegar.

sort(letters, >)

Y esta última instrucción tiene el mismo resultado que la primera. Aun es muy pronto para ponerle la pegatina de lenguaje divertido y no creo que lo llegue a cambiar por Ruby. Lo que si podremos hacer es quitarnos esas tediosas anidaciones de [] y {} dentro de ObjectiveC. Dentro de poco más sobre Swift y sus bondades, también carencias cuando las empiece a ver.

 

Cambios para el 2014

Hace nada (para ser más exactos el 31/12/2013 a las 23:50) desplegamos la nueva web de Softwhisper :). En el último trimestre del año ya habíamos cambiado la imagen corporativa después de estos tres primeros años de rodadura. Con esta nueva web no pretendemos solo mejorar la presencia y marca, además existe una parte que no se ve, nuestra nueva Intranet, donde la importante de los social y la gamificación cobran especial relevancia.

Hasta ahora en Softwhisper Nano y yo hacíamos prácticamente lo mismo, gestión de clientes, proyectos, facturación, etc… pero llegó el momento de separar responsabilidad y empezar a hacer algo de management. Por ello Nano ahora es el CEO de la empresa y yo he pasado a la parte puramente técnica como CTO.

Ahora escribiré menos en aquí para hacerlo en el blog corporativo, del que muchas veces haré reseñas aquí. ¿y que voy a seguir contado por este canal? cosas ajenas al mundo laboral, experiencias, retos personales (DeCrohn sigue un mi mente pero sin apenas tiempo para el) etc…

Espero veros por ambos blogs queridos :) Os dejo una captura de como está quedando nuestra intranet e imagen.

Desarrollo de aplicaciones móvilesSoftwhisper Mobile Development Company

Instalar iOS6.1 como Base SDK en XCode5

Con la reciente salida de iOS7 y sus pequeños (pero puñeteros) cambios con XCode5 y los valores por defecto de algunas cosas muchos hemos optado por instalar en paralelo el XCode4.6 pero no tiene mucho sentido ya que Apple pedirá en nada que todas las apps sean “iOS7 way”.

Investigando un poquillo entradas por Stackoverflow (como te quiero… ) y haciendo el mix habitual entre varias soluciones seguí una solución propuesta para Cocoa.

  1. Hacerse con una copia del DMG del XCode 4.6.3. Desde el portal de developers en otras versiones lo podéis conseguir.
  2. Abrimos el paquete del Xcode.app y navegamos hasta Contents > Developer > Platforms >iPhoneOS.platform > Developer > SDK
  3. Copiamos la carpeta iPhoneOS6.1.sdk
  4. Pegamos esta carpeta en la misma ruta pero del Xcode.app del 5
  5. Arrancamos y ya podemos escoger como Base SDK en los proyectos para iOS la 6.1

Ayuda a hacer un poco más sencilla la transición. Espero que os sirva :)

Mis podcast del día a día

Podcast para emprendedoresHace una buena temporada que me he vuelto un consumidor de podcast en toda regla y la verdad es que estoy muy contento de haberlo hecho. Durante este tiempo he estado saltando entre varios podcasters hasta encontrar aquellos que además de aportar algo de mi interés tuviesen continuidad en el tema.

Tengo 3 géneros básicamente, desarrollo y TI, empresas (sobre todo temas de startups) y música para los ratos más ociosos. Os dejo la lista de mi top.

Desarrollo:

Giant Robots Smashing into other Giant Robots: Podcast creado por la gente de Thoughtbot, gran empresa de desarrollo americana. Reparten la temática entre desarrollo con alguna entrevistas muy interesantes a fundadores de empresas. Conectar!

Ruby Rogues: Rubyist.where(:rouge => true).limit(6).all.talk(:about => Topics.where(:awesome => true) más claro agua… Sus podcast del club del libro son lo mejor que hay. Conecta!

Invisible 99%: Este podcast no exactamente sobre desarrollo, trata temas de diseño y construcción desde una perspectiva muy buena, la importancia de lo que no se ve. Escúchalo.

Empresa:

Founder Stories (TechCrunch): Consejos para emprendedores de la mano de antiguos emprendedores en formato entrevista. Algunas son muy buenas. Pruébalo

500 Startups Founders Podcasts: Entrevistas semanales a los miembros que entran o están en esta “aceleradora” americana. Los relatos suelen contar las historias de como llegaron hasta ahí. Suscríbete.

Generales/Otros:

Dentro de mi biblioteca también escucho mucho los siguientes:

Se aceptan sugerencias par ampliar mi colección =)

Gran vídeo sobre el éxito [via @LuzuVlogs]

Hoy por la mañana me lo enseñaba mi mujer en el perfil de una amigo de Facebook y me ha encantando la forma de narrar el éxito por @LuzuVlogs. Creo que buena parte de los que llevamos tiempo montando una empresa, desarrollando productos e intentando ser un poco mejores en lo nuestro cada día nos sentimos identificados, son 5 minutejos, merece la pena tenerlo a mano.

DeCrohn

DeCrohn: una apuesta personal por lo recibido en 15 años

Para todos los que me conocen saben que como miles de personas en los países desarrollados tengo la enfermedad de Crohn desde mis tempranos 17 años. No voy a entrar en detalle sobre sus efectos, problemas etc… no es el objetivo de hoy, hace ya tiempo escribí un post sobre como llevarlo en el día a día de un emprendedor que narra alguno de los puntos.

Desde hace algo más de un año le llevo dando vueltas a la idea de crear un comunidad vertical (red social parece que solo es con millones de usuarios) en la que todos podamos compartir, aconsejar, apoyar y expresar nuestros sentimientos y estados de ánimo. El Crohn tiene sus ciclos en los que estás como una rosa, fuerza, vitalidad, ganas de comerte el mundo y otros (cada vez menos) en los que da la lata, baja el ánimo y la parte psicológica juega un papel importante. DeCrohn será este nexo de unión entre todos.

En estos años tuve la oportunidad de participar en la tesis de una estudiante de psicología en pacientes de EII, pero más concretamente en los del Crohn. En el estudio cada 15 días teníamos que llevar un cuestionario bastante denso con preguntas sobre lo cotidiano de la vida, sentimientos y estado de ánimo. El objetivo de estudio era la vinculación de un estado de ánimo “deteriorado” y la actividad de la enfermedad. Parte de DeCrohn pretende hacer ese estudio mediante el análisis de los usuarios y su actividad en la comunidad, hoy en día con las capacidades y tecnologías existentes se puede hacer un buen trabajo en este sentido, y sacar provecho a esa información. Con ello no pretendo que se convierta en una plataforma cuyo objetivo primario sea el de obtener esta, ni que sus funcionalidades se enfoquen a ello; está enfocado a personas, lo que pueda extraer de ahí y como, será el gran reto ; )

Continue reading…