Principia Programmatica

cvm Ars Compilandi & Ars Interpretandi

Mis Apps: Desktop Notifications

Inicio una nueva serie que espero que interese a familiares, amigos, coworkers y conocidos varios que recientemente se han pasado al Mac. Empezar en una nueva plataforma es siempre algo complicado, especialmente cuando no tienes referentes sobre qué aplicaciones usar para hacer tus tareas habituales, y que en otras plataformas ya puedes tener por la mano siguiendo un flujo que tal vez sea posible realizar con alguna aplicación, pero por desconocimiento de la misma, te obligan a adaptarlo a la primera aplicación que has podido encontrar.

En resumen, lo que sigue es un listado de las aplicaciones que a mi, personalmente, me gusta usar (o me veo obligado a usar), sin perjucio que haya otras que sean mejores para determinadas tareas. En la medida en que conozca alternativas a las mismas, también las pondré, aunque no las haya usado, si me consta que hay usuarios que las conocen y las encuentran útiles. De hecho, agradeceré comentarios indicando alternativas, ya que así el post será el doble de útil a gente que esté buscando software.

Desktop Notifications Empezaré con una pequeña utilidad para los adictos a la red social por excelencia (al menos, entre la audiencia que tengo en mente para este post): Desktop Notifications. Esta aplicación es un MenuItem que nos permite, en cualquier momento, actualizar nuestro estado, postear enlaces o acceder a las últimas notificaciones que hemos recibido, sin necesidad de usar ningún navegador.

Parece mentira, pero esta aplicación permite ahorrar mucho tiempo al cabo del dia, si somos activos en esta red social. No tener que abrir un navegador, identificarnos, etc. hace que cualquier actualización que queramos hacer pierda prácticamente la fricción que podría desanimarnos de hacerlo en cualquier otro caso. Además, esta aplicación monitoriza nuestro feed de noticias y hace aparecer un pop-up con las últimas actualizaciones de nuestros amigos, con lo cual no hemos de estar pendientes de ir refrescando dicha aplicación en una pestaña de un navegador.

Curso de programación de iPhone en Stanford

En Stanford han decidido ofrecer uno de sus cursos de programación a través de iTunes U, una iniciativa de Apple y diversas universidades americanas para ofrecer sus cursos (o, al menos, las clases) gratuitamente a través de internet.

En concreto, el curso es CS193P - iPhone Application Programming. De momento, está disponible ya para descarga la primera clase (con RickRoll incluido) y están disponibles también en la web las presentaciones. Lo que no he sido capaz de encontrar es una dirección públicamene accesible para el Podcast, únicamente es posible subscribirse mediante iTunes.

Por lo que he visto de momento, no es necesario ningún libro en concreto si no que se basan exclusivamente en la documentación de Apple y diversos websites (como stepwise o cocoabuilder) de acceso libre. En cuanto a los requerimientos, lo mínimo es un Mac Intel, el iPhone o iPod Touch son opcionales. Y eso si, tener conocimientos previos de C o C++.

Mi biblioteca en Delicious Library

Hela aqui:

Mi biblioteca

No están todos los que son, pero si son todos los que están. Cuantos libros tenemos en común?

Read the rest of this entry

Safari para Windows ya muestra texto

Es decir, el nightly build de WebKit para Windows ya muestra el texto sin problemas.

Estaba curioseando por el changelog deWebKit y he visto unos cuantos commits relacionados con las fuentes. Así que he probado el último nightly, a ver que tal, y la sorpresa ha sido grata: parece que están solventados la mayoría de los problemas de renderizado de texto:)

Así que os recomiendo que si queréis probar la experiencia Safari, os bajéis el útimo nightly. Os lo recomiendo también a los usuarios de Mac, ya que ahora incorpora el nuevo inspector. Podéis encontrar más información sobre este nuevo inspector en http://trac.webkit.org/projects/webkit/wiki/Web Inspector

Update Sin embargo, persisten algunos bugs bastante incómodos, como el que me ha impedido editar correctamente esta entrada en el blog.

Como paliar la inestabilidad de Safari 3 para Windows

Tan pronto como he empezado a probar Safari para windows, he observado algunos problemas con el mismo, a saber:

  • El icono de favoritos hace que la aplicación haga un crash (de ahora en adelante, me referiré a los crashes con el verbo petar)
  • Lo mismo sucede al tabular de unos campos de formulario a otros
  • Al tratar de acceder a una página con contenido flash (como por ejemplo, que se yo, SpotSpotting), no se puede acceder a ella
  • Al seleccionar la opción de menu para ver los plugins instalados, un mensaje de error nos informa que Safari no está bien instalado. Lo mismo sucede al escoger la opción de ver la licencia.
  • El icono de Bonjour (si lo habilitamos en las preferencias) nos muestra la lista de sitios publicados en nuestra LAN, pero al tratar de acceder a alguno de ellos, no sucede nada.
  • El texto marcado con negritas o cursivas, no se muestra.

Pues bien, he estado trasteando un poco y he descubierto como paliar algunos de estos problemas.

Read the rest of this entry

WWDC 2007 y Safari crashes.

A la espera de que pongan online el video de la Keynote de Steve Jobs, estoy tratando de evitar enterarme de las novedades. Cosa harto difícil todo hay que decirlo: ya tengo instalado en el portátil del trabajo el nuevo Safari para Windows.

Y ya tengo una opinión al respecto: se nota que es una Beta. Falla más que una escopeta de feria, y además reproduciblemente: solo tengo que apretar el botón de favoritos y... kaboom. O tabular entre campos de un formulario y... bye bye.

Me pregunto si tendrá algo que ver con usar un Windows en español (algunos recursos, como la info sobre plugins, solo existen en inglés) o con tener el directorio home en un lugar distinto al directorio por defecto que pone windows. Si alguno de mis lectores es tan amable de compartir sus impresiones...

En fin, ya lo averiguaremos. De momento, el navegador por defecto seguirá siendo IE7... es broma, es broma! Firefox, naturalmente!!

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... :-)

Beta de Leopard en la WWDC

Según se desprende del último mailing de la Apple Developer Connection, los asistentes a la WWDC el mes que viene, podrán llevarse a casa la beta de Mac OS X 10.5 (aka Leopard)

The Leopard beta. Available first at WWDC.

At the Apple Worldwide Developers Conference, we're planning to show you a feature-complete version of Mac OS X Leopard, and you can take home a beta copy. Be the first to get your hands on the Leopard beta and get a huge head start on development. Register now for WWDC 2007—it's your ticket to the future of Mac OS X.

Modificación del entorno de aplicaciones gráficas

Cuando queremos cambiar las variables de entorno de un proceso que se ejecuta en la shell, tenemos claro que fichero(s) modificar y como hacerlo. Pero... sabes como hay que hacer para modificar el entorno de aplicaciones que no se lanzan desde la línea de comandos?

Editor de listas de propiedades

Pues es bastante sencillo. Solo hay que crear (si no existe) un fichero llamado environment.plist en un subdirectorio de tu directorio inicial llamado .MacOSX (ojo al punto). Es decir, ~/.MacOSX/environment.plist. Esto lo podemos hacer con el editor de listas de propiedades, o bien desde la línea de comandos:

defaults write ~/.MacOSX/environment FOO -string bar

La opción -string no es estrictamente necesaria, pero si vamos a pasar valores susceptibles de ser interpretados de otro modo, es mejor ponerla. Si quisiéramos eliminar una de las variables, simplemente sería:

defaults delete ~/.MacOSX/environment FOO

Una vez modificado este fichero, la próxima vez que iniciemos sesión, estas variables tendrán asignado el valor que hayamos especificado. Una de las maneras que podemos comprobarlo es usando el comando set desde la propia línea de comandos, dentro de Terminal.app (dentro de xterm, o con una sesión SSH no funcionaría).

Instalación de CocoaSharp

Siguiendo con la serie de artículos que he iniciado sobre Cocoa, voy a documentar el proceso de instalación de Cocoa#.

Antes que nada, si se da el caso de que habíamos instalado el paquete de Mono (la implementación de .NET para Unixes) con anterioridad, sería interesante desinstalarlo, para evitar conflictos:

sudo /Library/Receipts/MonoFramework\
-1.1.15_1.macos10.novell.ppc.pkg/Contents/Resources/uninstallMono.sh

La localización exacta del script de desinstalación variará en función de la versión instalada. haciendo un locate uninstallMono veremos qué versiones hay y donde encontrarlas (en mi caso, por ejemplo, había hasta 3 versiones diferentes del script)

Lo siguiente es descargarnos el paquete de Mono de su site. La página de descargas está en http://www.mono-project.com/Downloads, y naturalmente deberemos descargarnos la versión para Mac OS X.

Qué es Mono exactamente, y para qué lo queremos?

Pues Mono es una implementación libre de las herramientas de desarrollo - el SDK- para .NET, asi como el runtime para ejecutarlo, y está disponible en una variedad de plataformas (incluso Windows). En el caso de OS X se instala como un framework, como el de Java. Además, también viene con Cocoa#, para poder acceder al framework de Cocoa desde aplicaciones escritas con .NET.

El instalador de Mono no tiene ningún misterio: siguiente, siguiente, siguiente...

Una vez instalado el instalador, para comprobar que esté disponible podemos hacer:

$ mcs --version
Mono C# compiler version 1.2.3.1

Mono no instala ningún soporte específico para Xcode. Existe un plugin por ahí para ello, pero puesto que no aporta Intellisense, podemos usar cualquier editor de texto (mi favorito es TextMate) para editar el código, o incluso aquellos de vosotros que uséis Parallels, Visual Studio.

Aplicaciones invisibles en Mac OS X

Cuando yo empezaba en esto de la informática, algunos juegos tenían una tecla de pánico (o tecla boss) que ocultaba lo que estabas haciendo y te mostraba una pantalla ficticia de una aplicación de productividad (estamos hablando de cuando no había conmutación de tareas, en DOS). Hoy en día es fácil cambiar de una aplicación a otra con Cmd-Tab (o alt-tab en windows/linux), pero los iconos nos pueden traicionar todavía.

Existe alguna manera en OS X de ocultar los iconos de una aplicación mientras se está ejecutando, como por ejemplo Quinn o algún cliente P2P?

Pues resulta que si. Para hacerlo, debemos ir al Finder y buscar la aplicación. Le haremos click con el botón derecho y seleccionaremos 'Mostrar contenido del paquete'. Esto nos abrirá el directorio, normalmente oculto, donde está contenida la aplicación y sus ficheros auxiliares. Uno de ellos, Info.plist, es el que buscamos. Lo abriremos con la aplicación por defecto, que es el editor de propiedades, y buscaremos si existe una propiedad llamada LSUIElement. Si no existe, la podemos crear y darle un nuevo valor de tipo string y que sea "1" (sin las comillas).

Hecho esto, podemos guardar el fichero y la próxima vez que ejecutemos esa aplicación, no se mostrará en el dock ni cuando hagamos Cmd-Tab, o sea que hay que ir con un poco de cuidado. Si cambiamos de aplicación en primer plano y queremos volver a la aplicación oculta, puede que no nos quede otro remedio que volver a lanzarla de nuevo.

Precaución: Hay que tener en cuenta que hacer esto implica también que no podremos forzar la salida de la aplicación si fuera necesario, ni con el icono del dock (ya que no está) ni con la combinación de teclas (Option-Command-Esc): no nos quedará otro remedio que ir a la Terminal y matarla desde allí.

Si queremos devolver la aplicación a su modo normal, basta con volver a abrir el fichero Info.plist y eliminar esa propiedad.

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.

Super Ratón

Recientemente, me ha dado por comprobar a menudo los precios de los Mac Mini e iMac G5, a la espera de detectar una bajada de precios y posiblemente comprarme uno. Ayer, cuando lo hice, recibí la grata sorpresa de ver que Apple ha sacado el Mighty Mouse (Super Ratón para los amigos) que rompe una de las razones por la que los usuarios de PC argumentan que el Mac es un sistema poco útil o avanzado. Apple se desmarca así de la imagen de que su sistema no es apto para power-users y no solo presenta un ratón con dos botones, si no que, ya puestos, le añade botones laterales (terciarios por así decirlo) y una innovadora bola de scroll.

OS X Tiger ya está preparado para sacarle todo el provecho, mientras que en Windows y Linux funcionará como cualquier otro ratón. Me dan ganas de probarlo con Windows o Linux en el PC mientras espero a tener mi nuevo Mac, por que aunque no sea muy util en PC-landia se que si que lo será en OS X. De todos modos, creo que Apple seguirá haciendo su sistema como es ahora, muy usable con simplemente un botón, dejando el botón secundario como atajo.

Ah! Y no olviden vitaminarse y supermineralisarse!

Mighty Mouse es una marca comercial de Viacom Consumer Products Inc., utilizada con la licencia correspondiente

Pages

Categories

Tags