OS X: crear DMG (servicio)

Como regalo de Navidad os dejo un servicio de OS X que he creado para crear un disco DMG a partir del contenido de un directorio (o si hay varios directorios seleccionados, creará un fichero por cada uno).

Para instalarlo basta con descomprimirlo y copiarlo al directorio ~/Library/Services (en Finder, abrir el menú Go (Ir) mientras se presiona la tecla de Opción (alt), y elegir Library (Biblioteca). Como veis, tengo mis sistemas en inglés, dejo el servicio con el nombre en ambos idiomas.

Descargar (español)

Descargar (inglés)

Si tenéis algún problema, dejad un comentario y procuraré resolverlo.

Anec-notas (IV)

Parece contradictorio que durante las vacaciones esté publicando más posts sobre mi trabajo que durante los meses laborales, pero qué le vamos a hacer, la vida es así.

Esta entrada la quiero dedicar al Visual Studio, así que allá vamos.

Implementar el comando “touch”

Unos de esos comando de UNIX que siempre me han gustado es el touch (para los que no lo conozcan, este comando modifica la cabecera de un fichero actualizando su fecha de modificación, creando el archivo si éste no existiere). Windows no tiene un comando equivalente a primera mano. Buscando un poco me encontré que se puede emular usando

copy /b <fichero> +,,

Donde es el nombre del fichero a “tocar” (pueden usarse comodines). Una limitación de este comando es que el fichero debe estar en el mismo directorio que el activo desde donde se ejecuta el comando. Ejecutar el comando siguiente no funcionará correctamente sino que copiará el fichero al directorio actual.

copy /b ..\config\game.ini +,,

La línea correcta en ese caso sería

copy /b ..\config\game.ini +,, ..\config\game.ini

Ahora bien, ¿a qué todo esto en Visual Studio? Imaginemos el siguiente escenario: estamos utilizando Qt y tenemos una hoja de estilos definida en un fichero QSS (Qt Stylesheet), el cual está incluido como recurso en un fichero QRC. Este fichero se recompila únicamente cuando se ha modificado, no cuando se han modificado los ficheros que incluye. Por lo que si estamos modificando continuamente el fichero de estilos tendríamos que “modificar” el fichero QRC para que se recompilase. En este caso el comando touch es un gran aliado. Para automatizar esta tarea podemos recurrir a los “Build Events”, más específicamente al “Pre-Build Event”. Está ubicado en “Project Properties > Build Events > Pre-Build Event”, donde especificamos el comando a utilizar (el ampersand “&” es un separador de comandos para poder indicar varios comandos uno a continuación de otro):

cd Resources &amp; copy /b *.qrc +,,

Los “Build Events” sólo permiten ejecutar un único comando (línea), por lo que si queremos realizar varias tareas lo mejor será definir un fichero por lotes que las ejecute. Otro detalle a tener en cuenta es que los ficheros QRC pueden tardar cierto tiempo en compilarse si contienen muchos recursos, especialmente imágenes, por lo que es conveniente que este evento sólo esté presente en una configuración de proyecto, tal como la Debug, o crearnos una especial.

Detalles de usabilidad

Acá me gustaría criticar comentar un detalle en la pantalla de creación de nuevos proyectos.

Nuevo proyecto VS

Resulta que en los campos de “Nombre” y “Nombre de la solución”, este cuadro de diálogo comprueba si el texto introducido es ““, en cuyo caso desactiva el botón “OK”. Probad vosotros y borrad una letra para que veáis cómo podéis crear el proyecto. Re-escribid esa letra y el botón “OK” se desactivará. ¿Tantos avances que se han hecho en usabilidad y no podían usar la propiedad “placeholder” en este caso?

Esto es inflación y lo demás son tonterías

Organizando fotos esta mañana encontré este par de capturas de pantalla que hice hace tiempo, instalando una actualización de Microsoft Office.

No tengo palabras para definir la impresión que me dio el pasar de necesitar 781KB… ¡a que la actualización pesara casi 300MB, y eso en un sólo click! Una inflación del 500%, nada que envidiar a muchos países.

officeupdate1

officeupdate2

Quickial

Quickial is an app for quickly search your contacts. Forget those keyboards hard to use, Quickial reduces the number of keys and replaces them with a very smart engine for searching your contacts. You can also define the default phone number to dial, and its alternatives. Well, I think the best is to take a look at it ;)

Download

  filtered-568h@2x settings-568h@2x 

Copiar no es la única salida…

Este post trata sobre Microsoft y ese eterno karma que tienen de “copiadores”. No lo negaré, han copiado, pero de la misma forma que otros también lo han hecho: Apple copió a Xerox su GUI (mejor dicho, la compró, pero que a la hora de la pequeña es lo mismo), Microsoft copió la interfaz del Mac, Apple ha esperado a que algunas cosas hayan madurado para copiar (o comprar) la mejor opción, Android ha copiado a iOS (antes de que digan nada, basta ver cómo era al principio), iOS ha copiado a Android (la contraparte ;)), etc. Mucha gente ve la copia y pocos la innovación. Detrás de cada copia puede haber innovación: mejorar la copia, integrarla mucho más en el sistema, simplificarla, partir de ella para crear algo nuevo.

Pero quiero referirme ahora a qué pasa cuando alguien decide presentar un nuevo paradigma. No de si es bueno o no, eso lo dice el tiempo en cuanto a interfaces de usuario se refiere, el simple hecho de decir “tengo algo distinto que mostrarte”, no es “mi versión de”, es “lo mío”.

No hablaré mucho más en este post, porque lo que me gustaría comentar está casi todo dicho en este link. Un review más completo está lo pueden encontrar de manos de Engadget.

Por último, dejarles una idea que ya veía venir hace unos meses, que sigo sin verla clara en este producto, pero que creo que los tiros irán por ahí dentro de no mucho tiempo: la centralización de la vida digital en dispositivos móviles, que pueden convertirse en el ordenador principal gracias a docks, extensiones, etc. Ubuntu for Android, primeras impresiones.

El tamaño importa sólo si se ve bien

Es en momentos como éste cuando yo pienso que el que propuso la idea, el que la diseñó, el que la codificó yel que diseñó los gráficos no se pusieron de acuerdo en ningún momento y se transmitieron todo a base de post-its. Y para rematar, el que validó esos casos de uso derramó su café sobre la lista de tareas y no vio que faltaba algo.

¿De qué hablo? De la opción “Large icons” de la barra de herramientas. Una imagen dice más que mil palabras.

Por favor, no cuesta mucho diseñar dos iconos, o renderizar dos en caso de hacerlos en vectorial, pero ¿por qué tiene que verse así un producto final que cuesta no precisamente 2 euros?

La opción como tal puede que tenga sentido (de hecho, conozco mucha gente que debería usarla, así sea para que el icono grite “¡estoy acá, estoy acá!”), pero si se hacen las cosas hay que tratar de hacerlas bien: esto es un vulgar escalado que queda mal, daña la estética de todo el producto. Es como comprar un Audi A5 y ver que las alfombras del coche están protegidas con papel de periódico. Simplemente ¡no!

En interfaces de usuario el buen gusto es muy importante, y muchos me dirán que eso cae dentro de lo opinable: sí y no. Sí porque a mí el arte moderno no me gusta tanto como el clásico y otros pueden opinar contrario. Pero por otro lado el buen gusto implica un mínimo de cosas, y el cuidar los detalles es una de ellas. Especialmente cuando el detalle es grande, como esos iconos poco definidos y, “opinión”, espantosos.

MaxiPlan

Overview: MaxiPlan is a planning and simulation software for maxillofacial surgery, developed at CEIT.

Goals of this project: development of a maxillofacial surgery simulation software capable of predicting a patient’s appearance after surgery.

Simulation: we have derived a new mass-spring model (MSM) equivalent to a linear finite element (FE) model for cubic elements. In addition, we propose the scaled displacement method as a new method to perform the simulation more realistically. The average error of eight soft tissue landmarks measured between 0.37 and 2.01mm except from a landmark that had an error of 4.44mm; values close to those obtained with the linear FE method. On the other hand, the scaled displacement method allows avoiding punctual stress concentration and bending effects making a much more realistic simulation in the region of the bone cut.

Visualization: in this work we study the specific requirements of a maxillofacial surgery simulation tool for facial appearance prediction. The different stages of the application lead to present medical information in different ways. We propose to adapt visualization techniques to give a more suitable answer to these needs: a hybrid volumetric and polygonal visualization for the planning stage, as well as a scheme for surgery definition in 2D. Finally, we propose the use of mesh visualization for the simulated model, which previously requires the 3D reconstruction of the surface in order to be visualized.

Hybrid visualization pipeline used in this project.

Application workflow overview: segmentation, visualization and planning. Last stage involves reconstruction and simulation.

Screenshot of MaxiPlan.

Generated publications

  • Buchart, C., San Vicente, G., Amundarain, A. & Borro, D. “Hybrid visualization for maxillofacial surgery planning and simulation”. Proceedings of the Information Visualization Conference (IV’09). Barcelona, Spain. Jul. 14-17, 2009. [DOI], [PDF], [Presentation slides], [Presentation notes].
  • San Vicente, G., Buchart, C., Borro, D. & Celigüeta, J.T. “Maxillofacial surgery simulation using a mass-spring model derived from continuum and the scaled displacement method”. International Journal of Computer Assisted Radiology and Surgery. Vol. 4, Issue 1, pp. 89-98. 2009. [DOI].
  • San Vicente, G., Buchart, C., Borro, D., and Celigüeta, J.T., “Maxillofacial Surgery Simulation using a Mass-Spring Model Derived from Continuum and the Scaled Displacement Method”. Poster Proceedings of the 12th Annual Conference of the International Society for Computer Aided Surgery (ISCAS’08). Barcelona, Spain. Jun. 25-28, 2008. [DOI].
  • Buchart, C., Borro, D. & Amundarain, A. “GPU Local Triangulation: an interpolating surface reconstruction algorithm”. Computer Graphics Forum, Vol. 27, Issue 3, pp. 807-814. 2008. [DOI], [PDF].
  • Buchart, C., Borro, D. & Amundarain, A., “A GPU interpolating reconstruction from unorganized points”. The 34th International Conference in Computer Graphics and Interaction Techniques (ACM SIGGRAPH’07). San Diego, USA. Jul. 31-Aug. 4, 2007. [DOI], [Full abstract].

WallCamera LS

WallCamera LS (formerly WallCamera LockScreen) is an utility to help you to take pictures that are going to be used as wallpapers in your iPhone / iPod Touch. It gives you a live preview of how your lock screen will look like, so you can take a great picture. The camera interface mimics the lock screen so you can use it as a guide.

Download

  

Niníes de la retrocompatibilidad

Hace un par de días estuve leyendo un artículo en el que John Carmack comentaba cómo Direct3D es ahora una mejor API que OpenGL. Venga, que el comentario no viene de un desentendido del tema.

Pero lo que hace que yo hoy me siente a escribir este post son las siguientes palabras que dijo Carmack en la entrevista

Microsoft had the courage to continue making significant incompatible changes to improve the API, while OpenGL has been held back by compatibility concerns

A ver, ¿no les trae a la cabeza otra API famosa de Microsoft? digo, ¿una tal WinAPI? Una de las grandes “maravillas” de esta API es la retrocompatibilidad. Cualquier cosa programada para Windows 95 que soporte limpiamente la Win32 podrá ejecutarse en Windows 7, incluso cuando los sistemas, incluso sus núcleos mismos, han cambiado.

Muchas veces he discutido con amigos y colegas este tema: ¿por qué soportar semejante rémora y no mejor hacer un borrón y cuenta nueva a algo serio, escalable, limpio? La respuesta viene casi siempre en los mismos términos: cuota de mercado. Microsoft no puede permitirse que todo el software hecho hasta el sol de hoy deje de funcionar; simplemente deben tratar de que cada actualización sea lo más suave posible y que los usuarios no se planteen nuevos entornos (¿o vamos a recordar el caso Vista?)

Hay una empresa con experiencia en este tipo de transiciones: Apple. Cuando pasaron del Mac OS 9 al Mac OS X, todo, absolutamente todo el sistema era nuevo: un núcleo híbrido entre UNIX y Mach, nuevo entorno gráfico, APIs totalmente nuevas, etc. Y eso que Mac OS no contaba en ese entonces ni con una fracción de la cuota de mercado que tienen ahora (y que sigue siendo ridícula si se compara con la de Windows). Tuvieron que mantener un soporte de segundo plano para las aplicaciones viejas (el llamado Classic), luego vino el soporte de dos APIs en paralelo: Cocoa (como la nueva y buena), y Carbon (como la API antigua), y por último Rosetta (para dar compatibilidad a los antiguos procesadores PowerPC). Les ha costado 7 versiones del sistema y casi 10 años lograr deshacerse de todo eso. Y repito, no tenían casi cuota de mercado. Imagínense lo que tendría que hacer Microsoft. No quiero ni imaginármelo.

¡Pero lo están haciendo con los juegos! Bueno, en parte. Las versiones de DirectX tienen soporte para algunas versiones más antiguas, pero básicamente por empaquetar las antiguas APIs junto a las nuevas. Además, los juegos no son lo mismo que grandes sistemas empresariales. Un juego se termina (se “pasa”), y se busca otro; a lo sumo se juega de nuevo en un día nostálgico o para rememorar aquellas épicas luchas a 320×200 píxeles. Pero no, un sistema empresarial puede permanecer años instalado. O bueno, que se lo digan al BBVA, donde al menos en el 2006 vi perfectamente cómo el sistema de gestión debía ser ejecutado dentro de una máquina virtual ejecutando Windows 3.1. También podemos recordar lo que le ha costado a las empresas actualizar sus “estables” Windows XP.

No, no es un tema fácil. Pero si Microsoft lo hubiera hecho en su momento (yo creo que XP hubiera sido el momento perfecto, dado que fue cuando el núcleo del NT se hizo realmente popular), ahora estarían navegando en aguas muy diferentes. Apple ve ahora los resultados de sus esfuerzos y el sacrificio de los desarrolladores: un sistema moderno con APIs modernas (aunque históricamente sean mucho más viejas), fácilmente actualizables, flexibles.

Estoy convencido de que Microsoft no hará un “deprecation” oficial de sus APIs. No, sinceramente no lo creo. Más bien creo que seguirán una estrategia basada en la evolución tecnológica: el software viejo muere, se deja de usar, la gente se olvida de él. De esta forma, llegará el día (quizás como regalo por el 70 cumpleaños de Bill Gates) en el que puedan anunciar que Windows ha decidido dar un paso adelante en la su modernización y comenzará a dejar de soporte a las APIs antiguas hasta las incluídas en el Windows 98 ;).

Mailplane

Si alguien me preguntase cuál es el mejor servicio de correo hoy en día, contestaría casi sin dudar: “Gmail”. ¿Razones? Puf, muchas: espacio, simplicidad de interfaz, organización por conversaciones, velocidad, fiabilidad (salvando algunas caídas esporádicas)…

Como usuario de Mac OS X que soy, hay ciertas cosas a las que me he acostumbrado, como el drag & drop para casi todo, que con la versión web de Gmail no puedo usar. Además, cosas como compartir fotos desde el iPhoto se vuelven más complicadas (en ese caso por tener que exportar las fotos y luego subirlas a mano a Gmail).

Todos esos problemas son resueltos, claro está, por un buen gestor de correo, comenzando por el propio Mail.app del Mac OS X. Lo que me deja un mal sabor de boca es el hecho de tener que sincronizar siempre la cuenta de correo (léase por POP o por IMAP) y que la integración no es total (quedan flotando borradores, los ToDo en el caso de Mail.app y las conversaciones no son gestionadas tan bien como por el propio Gmail). Además, si uno no tiene el ordenador a mano (o peor, si uno tiene varios) el usar el correo se vuelve tan cambiante como dormir cada noche en una casa distinta: las cosas no están a mano, hay que llevarlo todo consigo (sincronizar), etc.

Un amigo me recomendó hace no mucho una solución intermedia: Mailplane. Mailplane encapsula la web de Gmail tras una aplicación. ¿Resultado? Se tiene la misma interfaz de siempre, los famosos problemas de sincronización de cuentas no existen, se está a la última de las actualizaciones de Gmail, incluso se puede usar su chat! Y… maravillas de toda la vida están al alcance de la mano: los accesos de teclado (CMD+N, CMD+SHIFT+D, …), integración con la agenda de contactos, drag & drop para adjuntar ficheros o para crear mensajes nuevos, gestión de descargas, avisos por Growl, integración con iPhoto. ¿Su precio? $25 ($17 si eres estudiante). Una inversión que vale la pena sin duda alguna.

Además, he de decir que el equipo trabajo detrás de Mailplane da un soporte muy bueno. Los bugs y sugerencia que he enviado me han sido contestados bastante rápido, y con una atención personalizada; se ve que quieren que este producto mejore y despegue. Yo pongo mi granito de arena con este pequeño post (acá dejo también un review de MacWorld que casualmente salió ayer).