Principia Programmatica

cum Ars Compilandi et Ars Interpretandi

Homebrew

Este post apareció originalmente en el blog de NSCoders Barcelona: http://bcn.nscoders.org/2011/07/13/homebrew.html

Una de las herramientas que como desarrolladores, sysadmins, o simplemente usuarios adeptos debemos conocer es la línea de comandos. MacOS X es un Unix de pura cepa, y como tal, puede ejecutar una amplia gama de herramientas pensadas para llevar a cabo toda clase de tareas.

Sin embargo, pocas de estas herramientas se encuentran disponibles de serie en nuestros sistemas. Para poder utilizarlas, debemos instalarlas manualmente, lo cual es cuando menos engorroso, y cuando más, puede significar horas y horas perdidas tratando de resolver dependencias de las herramientas que utilizamos.

Para solucionar este problema, nacieron los gestores de paquetes. Del mismo modo que en linux disponemos de rpm y dpkg (o yum y apt), en MacOS X existen también varios sistemas de gestión de paquetes. En este artículo me centraré en el que considero más avanzado y más útil de ellos, Homebrew, ya que las alternativas, mayormente Macports (inspirado en el sistema de ports de FreeBSD) y fink (inspirado a su vez en apt), han ido poco a poco quedándose atrás en cuanto a frecuencia de actualización y catálogo de software disponible. Homebrew es obra del prolífico Max Howell, autor entre otras herramientas de las versiones Android e iOS de TweetDeck, y de los clientes de last.fm.

Homebrew es un sistema que goza de las simpatías de muchos desarrolladores y, por tanto, de un ímpetu, que lo ha convertido rápidamente en una elección muy popular entre los usuarios más técnicos. No en vano es el proyecto con mayor número de forks en GitHub (hecho que, al contrario de lo que pueda parecer, no es un indicativo de fragmentación, si no de participación popular, ya que cada persona que quiere añadir un paquete, o actualizarlo, simplemente crea un fork, añade su receta, y envía una solicitud de pull al mantenedor para que lo incorpore al proyecto principal).

Una de las principales características que tiene homebrew frente a otros gestores de proyectos, es que no necesitas ser root para instalar un paquete. Homebrew normalmente instala los ejecutables en /usr/local/, nada de /opt/, /sw/ ni tonterías similares. Y por tanto, espera que ese directorio sea escribible sin permisos de root. Al respecto ha habido cierta controversia, a mi al menos al principio no me parecía del todo correcto. Pero si nos ponemos a mirar, veremos que casi cualquier aplicación que bajamos de internet, y que se instale a pelo, es decir sin instalador, la copiamos tranquilamente a /Applications/ sin pensárnoslo dos veces. Y al contrario, cuando ejecutamos un script con sudo, estamos corriendo más riesgo del que pensamos.

Para instalar homebrew, simplemente vamos a https://github.com/mxcl/homebrew y vemos que hay que ejecutar un pequeño script en ruby:

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

Si ejecutar un script obtenido a partir de una URL te pone los pelos de punta (debería), puedes echar un vistazo primero.

Una vez hecho esto, ya tenemos homebrew listo para instalar paquetes. Podemos probarlo de la siguiente manera:

1
brew install wget

Esto instruirá a brew a descargarse el código fuente de la utilidad wget, compilarlo, e instalarlo en /usr/local/. Homebrew en este sentido, es más parecido a los ports o al emerge de Gentoo. No lo he mencionado, dado que doy por sentado que todos tenemos Xcode, pero evidentemente necesitaremos las herramientas de desarrollo, no necesariamente Xcode al completo, pero si los paquetes de compiladores y demás.

Por cierto, por algún extraño motivo, en MacOS X, /usr/local/bin no está antes en el $PATH que /usr/local/, con lo cual, si instalamos alguna herramienta de las que vengan con el sistema o con Xcode, nos vamos a encontrar que la del sistema tiene prioridad sobre la versión que nosotros hemos instalado explícitamente (con lo cual, es como si no hubieramos hecho nada). En cualquier otro sistema UNIX (o linux), lo normal es que las customizaciones tomen prioridad, así que no acabo de entender muy bien esta política. Podemos solucionar esto de dos maneras, editando nuestro fichero ~/.bash_profile para modificar la variable de entorno $PATH, o bien cambiando el orden en /etc/paths (lo cual va a requerir permisos de root, al aplicarse a todo el sistema).

Las definiciones de los paquetes en homebrew siguen la metáfora de una cervecera. Cada paquete es una receta o fórmula para elaborar un… bueno, en castellano no tenemos una buena traducción para brew, en el sentido cervecero. Brebaje suena parecido pero es algo completamente distinto. Podríamos abusar del lenguaje y usar la palabra caldo, que los vinateros usan, pero lo dejaremos como brew. To brew en inglés es también un verbo, que es lo que representa el comando que usamos.

En fin, después de esta digresión, paso a enumerar los comandos más habituales de que disponemos para gestionar los paquetes. Lo mejor es que echemos un vistazo al manual de brew y los veamos cuando tengamos dudas:

1
brew search paquete

Este comando buscará un match en los nombres de los paquetes y nos listará los que coincidan (si el nombre de paquete está cerrado entre barras, se interpretará como una expresión regular). Una vez creemos haber encontrado el que nos puede interesar, lo podemos comprobar con

1
brew home paquete

Esto nos abrirá el navegador por defecto que tengamos en el sistema, en la página web del producto en cuestión. Estamos en el s. XXI y usamos Macs, así que no hay excusa para andarnos con cosas que recuerden a gnu info. Cualquier producto debería tener un website canónico.

1
brew install paquete

Este comando instalará el paquete, bajándose el código fuente si no está cacheado, y compilándolo. Del mismo modo,

1
brew remove paquete

lo eliminará del sistema. Si necesitamos saber qué fórmulas tenemos instaladas, pediremos un listado:

1
brew list

Si a este comando le añadimos además el nombre de una fórmula, lo que veremos son los ficheros instalados por esa fórmula.

Cuando queramos actualizar los paquetes, primero ejecutaremos

1
brew update

que actualizará brew y sus fórmulas, y luego podemos hacer algo como

1
brew install $(brew outdated)

para que nos instale las fórmulas nuevas de las que tengamos instaladas. Normalmente, al actualizar una fórmula nos instala la versión nueva pero no retira las antiguas, que siguen instaladas (aunque fuera del $PATH). Para limpiar estas versiones antiguas, el comando que necesitamos es

1
brew cleanup

Bueno, hasta aquí esta breve introducción. Hay unos cuantos comandos más, pero son menos frecuentemente utilizados, así que dad un vistazo a man brew para dar con ellos.

Nuevo VMWare Fusion 4

VMWare anunció anteayer la disponibilidad de VMWare Fusion 4. Lo que trae de nuevo es su optimización para OS X Lion, mejor rendimiento en gráficos 3D, snapshots Time Machine-friendly, y ah! que pueden albergar máquinas virtuales con OS X Lion – lo cual no dependía de ellos, si no de la licencia de Lion mismo.

A diferencia de las versiones previas, no hay upgrade competitivo desde versiones previas o Parallels. A todo el mundo le va a costar $50 (precio de salida, luego subirá).

Yo he usado tanto Fusion como Parallels y, a mi entender, Parallels lastra más el rendimiento del resto del Mac. Si solo vas a estar en la máquina virtual, no importa tanto, pero si tratas por ejemplo de desarrollar una web app en el Mac y la testeas con un Windows virtualizado, la labor de desarrollo te será más fácil si albergas la VM con Fusion que con Parallels.

Reboot

Este blog está siendo reiniciado hoy. Un día casi como otro cualquiera.

En concreto, he abandonado Mephisto, que como sistema de blogging estaba en una vía muerta, y me he pasado a Octopress. Octopress tiene características que facilitan escribir un blog sobre programación, es git-friendly, y genera contenido estático, con lo cual el consumo de recursos en Joyent, donde este blog está hospedado, ya no debe preocuparme.

En breve, más contenidos.

Mis Apps: Google Quick Search Box

Hace tiempo, salió un lanzador de aplicaciones revolucionario para la época, QuickSilver. Un lanzador de aplicaciones es una utilidad que nos permite iniciar otras aplicaciones fácilmente, sin necesidad de ir navegando por /Applicaciones ni sobrecargar el Dock con iconos de aplicaciones que usamos esporádicamente.

QuickSilver estuvo en una perpetua beta, y tenía tantas funcionalidades y plugins que resultaba difícil sacarle todo el partido. Durante mucho tiempo no hubo releases nuevas, y a pesar de estar disponible el código fuente, el propio desarrollador advertía que era un poco ofuscado. Con lo cual, los usuarios de QuickSilver estaban en un estado más o menos precario, en especial al actualizar a Snow Leopard.

Pues bien, el desarrollador de QuickSilver pasó a trabajar para Google. Y el proyecto en el que trabaja es el heredero de QuickSilver, Quick Search Box. Quick Search Box es una evolución de QuickSilver, mucho más sencilla y más estable pero igualmente potente.

screenshot de QSB

Y como funciona QSB? pues lo primero, es invocarlo. Cuando QSB está funcionando, normalmente no aparece su icono en el Dock (es una opción, pero la más habitual). Lo que tenemos que hacer es pulsar ⌘+⌘ (o bien ⌃-espacio) y aparece una caja de texto en el centro de la pantalla.

A partir de aquí, las posibilidades se multiplican. QSB está esperando que le introduzcamos un texto, y a medida que vamos tecleando irá ofreciendo posibilidades mostrándonos objetos del sistema o acciones que podamos hacer con ese texto.

Por ejemplo, si queremos hacer un cálculo rápido y no queremos esperar a que se lance la calculadora, podemos invocar QSB e introducir una fórmula sencillita: 20*0.76. QSB nos ofrecerá un menú de opciones, con el resultado de la operación como primera opción, y a continuación otras opciones. La primera opción, si la seleccionamos, nos abrirá la calculadora. Otras opciones que nos pueden salir - según como hayamos configurado QSB- son buscar ese texto en Google, utilizarlo directamente como URL, o bien, si existe algún fichero en el sistema cuyo nombre coincida con lo introducido, abrir ese fichero. Algunas acciones, como la última que he mencionado, pueden tener diferentes variaciones: cuando QSB determina que nos estamos refiriendo al nombre de un fichero, si pulsamos TAB en lugar de Return para confirmar la selección, navegaremos a un submenú donde nos aparecen varias opciones más: abrir el fichero, abrir el directorio que contiene ese fichero en el Finder, moverlo a la papelera, obtener información…

QSB utiliza Spotlight para encontrar ficheros, documentos, correo, etc. que pueda estar relacionado con el texto introducido. Luego, las opciones posibles dependerán del tipo de objeto seleccionado: enviar por correo, mostrar texto en letras grandes, y así un sinfín de opciones, que podemos tunear a nuestro gusto.

Quick Search Box tiene documentación extensiva y código fuente disponible en la página del proyecto en Google Code.

Whereami

He creado una pequeña utilidad de línea de comandos para Snow Leopard. Se llama whereami y, sorprendentemente, sirve para determinar tu posición, usando Core Location para ello.

Esta utilidad es open source y puedes hacerte con el código en http://github.com/victor/whereami

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.

Ya Tienen Dos Años

Nuestras pequeñajas ya no son tan pequeñajas. Hay que ver.

En Defensa De Los Derechos Fundamentales en Internet

Manifiesto “En defensa de los derechos fundamentales en internet”

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…

  1. Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
  2. La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial – un organismo dependiente del ministerio de Cultura -, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
  3. La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
  4. La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
  5. Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
  6. Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
  7. Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
  8. Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
  9. Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
  10. En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.

Este manifiesto, elaborado de forma conjunta por varios autores, es de todos y de ninguno. Si quieres sumarte a él, difúndelo por Internet.

Burnout

No, no me refiero al título de un video juego. Es un estado psicológico que no tiene una traducción mejor, aunque a veces se utiliza el término “síndrome de estar quemado”. Estuve leyendo un artículo sobre el burnout en A List Apart y desde entonces le he dado muchas vueltas al asunto.

El caso es que empiezo a reconocer muchos de los síntomas asociados al burnout, no tanto emocionales como fisiológicos. Afortunadamente, en el plano laboral estoy muy bien, así que no tengo problemas en ese aspecto. Pero en el caso de la carrera que estudio en mi abundante tiempo libre, estoy empezando a ver que la inversión que hago en recursos no solo ya no es rentable, si no que además está empezado a afectar a otros aspectos que en principio, debían ser compartimentos estancos, pero que están demostrando ser algo porosos. Y en concreto me refiero a la dificultad de conciliarlos con la vida familiar. El día, por mucho que lo estire, va a seguir teniendo 24 horas. Y si lo alargo por un lado, tarde o temprano lo tengo que acortar por otro, me ponga como me ponga.

Es por eso que he iniciado un período de reflexión, para calibrar si realmente es una inversión rentable de recursos. El argumento de “todo lo que he invertido ya” no es suficiente, por hacer una analogía es como seguir echando dinero en una hipoteca por un piso que no vale el precio por el que se tasó, y según como, sale más a cuenta dejarlo correr y ponerse a buscar otro. La analogía falla en que nadie me quitará lo que ya tengo, y que puedo seguir cuando quiera (al menos en la UOC es así). Creo que por lo pronto me voy a tomar un respiro, y centrarme más en la familia y mis hobbies (que no nos engañemos, pueden ser proyectos de programación igualmente, pero no tengo deadlines y no me obligan a trasnochar)

Pues así están las cosas…