Principia Programmatica

cvm Ars Compilandi & Ars Interpretandi

Nuevo RubyCocoa 0.11.0

Update El dia 4 de Junio Laurent anuncia la aparición de la release 0.11.1, básicamente corrigiendo algunos bugs pero también introduciendo nuevas capacidades, como algunos atajos a la hora de puentear Ruby y Obj-C, y algún nuevo ejemplo

Laurent Sansonetti, el Release Manager de RubyCocoa, anunció hace un par de dias la liberación de RubyCocoa 0.11.0 y del nuevo website donde aprender como usarlo.

Las características de la nueva versión son:

  • Documentación en formato RDoc de los frameworks Cocoa soportados.
  • Mejor integración con las partes en C (en contraposición a Objective-C) de Cocoa.
  • Bindings para ActiveRecord. IMHO, esto es uno de los cambios más jugosos para los desarrolladores en RubyCocoa. Esto significa que podremos usar como si fuera CoreData cualquiera de los backends de ActiveRecord.
  • Se añade soporte para sobreescribir métodos de clase, y para aliasear métodos en Obj-C desde Ruby.
  • Nueva API RBBundle, para usar RubyCocoa en un bundle.
  • Nueva APi para manejar listas de propiedades, cual si fuera YAML.
  • Mejor interface entre tipos básicos en Obj-C y en Ruby.
  • Soporte para APIs C y Obj-C usando cadenas de formateo. No estoy muy seguro de qué significa esto.... creo que permite interpolar variables en cadenas, y entonces usar el resultado en una llamada a código nativo.
  • Mejor soporte a punteros gracias a la API ObjcPtr.
  • Nueva herramienta rb_nibtool, que permite sincronizar ficheros nib (es decir, que contienen los objetos de una GUI) con código fuente en Ruby, tal como se hacía hasta ahora solo con Obj-C. Ya se pueden declarar IBActions usando #ib_action
  • Nueva herramienta standalonify, para desplegar una aplicación en Ruby con todas sus dependencias en un ejecutable normal y corriente que se puede portar a otro sistema sin RubyCocoa.
  • Plantillas para Xcode que permiten hacer tests unitarios
  • Soporte preliminar pra 64bit.
  • Nuevos ejemplos. Va a haber que estudiarlos...

Yo, por mi parte, miraré de retomar los tutoriales de RubyCocoa cuando tenga un poco más de tiempo libre. Me quedé atascado en un punto mientras preparaba la nueva entrega, y luego ya no he podido volver a dedicar tiempo suficiente. Tal vez pueda echar un vistazo al nuevo código de ejemplo y comentarlo, pero como poco, contad que dentro de un mes ni puedo ni planteármelo... lo siento.

Mientras tanto, os dejo con una interesante colección de videos... :-)

CP, Capítulo 2: Generador de números aleatorios

Bueno, pongámonos a ello. Tal como dije en el post anterior, hacer este ejempo con Objective-C es algo que no tiene más interés que empezar a ver las herramientas, así que lo reimplementaremos usando Ruby.

Siguiendo el texto, lo primero que hay que hacer es iniciar Xcode y crear un nuevo proyecto. Como hemos instalado RubyCocoa, dispondremos de un nuevo tipo de proyecto, Cocoa-Ruby Application:

New Cocoa-Ruby Application

Read the rest of this entry

Instalación de RubyCocoa

Como el primer ejercicio del libro -en el capítulo 2- consiste simplemente en seguir las instrucciones y construir una sencillita aplicación, voy a empezar haciendo ese mismo ejercicio con Ruby. Para ello, es necesario tener instalado el bridge RubyCocoa, así que lo primero de todo es instalárselo.

Yo utilizo el ruby que viene con los MacPorts (antiguamente llamados DarwinPorts), así que el binario que puede descargarse desde el site de RubyCocoa no me sirve, ya que es para el ruby que viene instalado por defecto con Mac OS X Tiger. Si ese fuera tu caso, simplemente descárgate ese binario, pero ten en cuenta que la versión de ruby instalada por Apple tiene un bug.

Instalar el bridge desde Mac Ports es tan sencillo como:

sudo port install rb-cocoa

El sistema de ports descargará e instalará entonces la versión más reciente del bridge. Si apareciese un mensaje como:

Error: Target com.apple.activate returned: Image error: /Developer/Documentation/RubyCocoa/build.en.html already exists and does not belong to a registered port. Unable to activate port rb-cocoa.

significa que ya teníamos el paquete instalado para el ruby de Apple y al tratar de instalarlo se encuentra que algunos ficheros ya existen (los ejecutables y librerías se instalan en sitios diferentes, pero la documentación y las plantillas para Xcode van en el mismo sitio y, por tanto, hay conflicto). En ese caso, simplemente tendríamos que usar el siguiente comando para activar el port:

sudo port -f activate rb-cocoa

Para comprobar que funciona, invocaremos el intérprete interactivo:

$ irb
irb(main):001:0> require 'osx/cocoa'
=> true

Ejercicios de Cocoa Programming

Desde que me compré el Mac, que trato de aprender a programar en este entorno. Tengo un par de libros a este efecto, pero por algún motivo, no consigo retener los conocimientos necesarios para programar de manera efectiva en el Mac - es decir, constantemente tengo que estar consultando los libros para ver como hacer cada paso. Tal vez sea por que el hecho de usar Interface Builder, con la miríada de opciones que tiene, o que el hecho de no usar un recolector automático de memoria me intimida (mis punteros están ya un poco oxidados). Sea lo que fuere, estoy seguro de que si lo practico regularmente -como una Kata- al final me saldré con la mia.

Es por eso que empiezo esta sección. Voy a seguir los ejercicios del libro de Aaron Hillegass, Cocoa(R) Programming for Mac(R) OS X, en público, comentándolos y expandiéndolos, a ver si el estar expuesto al escarnio público me motiva para hacerlo regularmente. Mi intención es, si tengo tiempo y habilidad suficiente, reescribir además los ejercicios en algún otro lenguaje que no sea Objective-C -pero que, naturalmente, tenga bindings para Cocoa-, como Ruby o C#, y así, ya de paso, me preparo para la release de Leopard, donde los lenguajes alternativos a Objective-C cobran más protagonismo.

Ya de paso, si le sirve a algún lector, mejor que mejor. Seguramente, tener el libro será necesario para seguir los ejemplos efectivamente, pero trataré de que sean autocontenidos. Veamos que tal se me da.

Pages

Categories

Tags