Delirios de un Informático

Cómo traducir nombres de directorios en Mac

Mac tiene una lista de directorios de sistema que se traducen automáticamente, como ~/Pictures, que se traduce a Imágenes en Finder. La lista de directorios y sus traducciones se encuentra en el siguiente archivo:

/System/Library/CoreServices/SystemFolderLocalizations/es.lproj/SystemFolderLocalizations.strings

Este archivo puede editarse para añadir nuevos elementos, pero está en formato binario, por lo que para editarlo hay que convertirlo previamente:

plutil -convert xml1 SystemFolderLocalizations.strings
vim SystemFolderLocalizations.strings
plutil -convert binary1 SystemFolderLocalizations.strings

Una vez añadidas las traducciones (o modificadas las traducciones existentes) es necesario que dentro de cada directorio traducido exista el archivo vacío .localized, para que Finder entienda que ese directorio tiene traducción. Hecho esto, hay que matar Finder (killall Finder) para que los cambios se apliquen.

Cómo instalar SQL::Translator en Mac OS X

Casi todas mis entradas que hablan sobre desarrollo asumen un funcionamiento sobre Linux, como esta sobre SQL::Translator. Al desarrollar ahora en Mac OS X he tenido que recurrir a este software, cuya instalación en Mac OS X es sencilla pero no tan rápida como tirar del repositorio de turno. Los comandos para realizar la instalación son:

sudo cpan
install SQL::Translator

La primera vez que se ejecuta CPAN tardará, ya que se configura pidiendo unos datos básicos y actualiza. Luego, una vez dentro del intérprete de Perl, el comando de instalación del módulo hará que se descargue e instale todo automáticamente, pero tardará un buen rato debido a las dependencias.

Solución al error “Operation not permitted” en Mac OS X

Tengo un disco duro formateado en HFS+ que me permite compartir archivos entre Linux y Mac OS X, ya que es el único sistema de ficheros que no me da dolores de cabeza en ninguno de los sistemas operativos. Tras unos meses de uso me topé con un directorio que no podría modificar desde Mac OS X de ningún modo, ni siendo administrador. Con estos casos, siempre recurro a la línea de comandos, pero ni aún así podía cambiar nada y obteniendo siempre el mensaje Operation not permitted al usar chown o chmod.

Tras intentar arreglar el problema sin éxito con chflags nouchg y chflags noschg tocó investigar un poco hasta dar con la respuesta: los flags de Mac OS X, que se pueden obtener con ls -lO:

tyrell:Shared david$ ls -lO
total 0
drwxr-xr-x   7 david  staff  -                        238 23 feb 09:19 Backup
drwxrwxrwx  13 david  staff  uappnd,opaque,compressed 442 13 mar 14:39 Common
drwx------@ 13 david  1000   -                        442 29 ene 09:20 Dropbox

El problema en mi caso es el flag opaque, que puede eliminarse del siguiente modo (al igual que el resto de atributos):

sudo chflags -R nouappnd,noopaque,nocompressed Common

Con estos comandos por fin pude modificar los archivos y eliminar los archivos de la papelera que siempre me indicaba que estaban bloqueados.

Cómo conectar PHP a SQL Server en Mac OS X

Siguiendo con mi serie de anotaciones sobre el desarrollo con PHP en Mac OS X, hoy toca hablar de algo que es más sencillo de lo que parece a primera vista: conectar PHP con SQL Server (virtualizado en una máquina Windows Server 2003 en mi caso) utilizando iODBC en Mac OS X Lion.

Con la versión de PHP que trae Lion de serie viene incluído el soporte para iODBC (una implementación de código abierto de ODBC y alternativa a unixODBC), al que le basta un controlador compatible para acceder a cualquier servidor de bases de datos. En este caso se recurre a FreeTDS, la implementeación de código abierto del controlador para SQL Server.

Como para muchas otras aplicaciones que se necesitan compilar en Mac OS X, he recurrido a Homebrew, que tras instalarlo sólo hay que ejecutar lo siguiente:

brew install freetds

La configuración también resulta sencilla: el archivo /usr/local/etc/freetds.conf debe contener lo siguiente al final:

[sqlserver]
	host = ip_o_host_del_servidor
	port = 1433
	tds version = 7.1

Luego, hay que crear el archivo /etc/odbcinst.ini con el siguiente contenido:

[FreeTDS]
Description = FreeTDS
Driver = /usr/local/lib/libtdsodbc.so
Setup = /usr/local/lib/libtdsodbc.so
UsageCount = 1

Por último, debe definirse el DSN creando el archivo /etc/odbc.ini:

[ejemplo]
Driver = FreeTDS
Database = ejemplo
Description = Base de datos de ejemplo
ServerName = sqlserver

Tras estos pasos, PHP debería poder conectarse al servidor SQL Server sin ningún problema. Pueden usarse las funciones ODBC de PHP para realizar la conexión:

$db = odbc_connect('ejemplo', 'usuario', 'contraseña');
$result = odbc_exec($db, "SELECT campo1, campo2 FROM tabla");
while($row = odbc_fetch_object($result)) var_dump($row);
odbc_close($db);

Si existe cualquier problema con la conexión, puede instalarse unixODBC con Homebrew (brew install unixodbc) y testear la conexión y obtener mensajes de error con el siguiente comando:

tsql -S ip_o_host_del_servidor -U sa

Por último es importante no añadir espacios o tabulaciones en los archivos .ini o iODBC no podrá obtener correctamente los valores causando un error en la conexión.

Komodo Edit, un excelente editor de código

Hace años que probé un pequeño IDE llamado Komodo que prometía pero estaba bastante verde. Pero con la versión 6 ha evolucionado muchísimo y tiene una versión simplificada llamada Komodo Edit, un editor Open Source pensado para desarrollo web (XHTML, XML, CSS, JavaScript…) con lenguajes dinámicos (PHP, Perl, Python, Ruby…). La lista de características es pequeña comparada con Komodo IDE pero como editor sin más es una maravilla. Es ideal para todos pequeños scripts o proyectos que no requieren de todas las complejas herramientas que proporcionan Eclipse o NetBeans. Es además muy personalizable (hasta en esquemas de colores) y multiplataforma (Linux, Mac y Windows).

Uso Vim desde hace años para programar todos los pequeños scripts que realizo en Bash, Perl o Python pero es una tortura configurarlo para hacer ciertas cosas, y la implementación de otras caracteríticas nunca me ha gustado. Por eso Komodo ha ganado muchos puntos y prácticamente es lo único que uso.