Si se te ocurre... Hazlo!!!

Mostrar una imagen o película desde applescript con Quicklook

Una de las tareas que, hoy por hoy, no podemos realizar con applescript (Y sin herramientas o aplicaciones de terceros) es mostrar una imagen o reproducir un video. Ciertamente, si bien es posible hacerlo llamado a alguna aplicación que si lo haga, si queremos que nuestro script sea portable y que funcione en cualquier equipo, esto es un problema puesto que no todo el mundo tendrá la aplicación que usemos para tales tareas y/o ganas de instalarla. Otro método que si nos permitiría reproducir el video o mostrar una imagen, sería recurrir al nuevo (Bueno, ya no tan nuevo) applescript studio basado en cocoa pero es algo más complicada la curva de aprendizaje, al menos inicialmente y requiere invertir un tiempo que no siempre tenemos así que si desechamos estas opciones vemos que hoy por hoy no es posible ¿O si?

Una de las características que más uso de OSX es el QuickLock, esa maravillosa ventanita que si tenemos un archivo seleccionado y pulsamos la barra espaciadora, nos muestra su contenido sin importar que sea video, imagen o archivos de texto (Eso sin contar con los plugins que permiten mostrar prácticamente de todo) así que ¿Porque no recurrir a ella desde nuestro script? Está claro que es la solución más rápida y factible que tenemos puesto que no es nada complicado de invocar y sabemos que está en cualquier Mac en el que se ejecute nuestro script así que, una vez más… manos a la obra 🙂

Esta vez es un script lo suficientemente pequeño y sencillo para no tener que ir explicando más profundamente de lo que lo que hacen las lineas de comentarios en el mismo script.

-- Primero definimos el handler
on abreQuicklook(elArchivo)
-- Convertimos el formato de la ruta
set laRuta to quoted form of (POSIX path of elArchivo) as string
-- Llamamos a Quicklook desde la linea de comandos
do shell script ("qlmanage -p " & laRuta)
end abreQuicklook

-- Solicitamos un archivo
set elArchivo to (choose file with prompt "Seleccione una imagen o video…")

-- Llamamos a nuestro hadler pasándole la ruta al archivo
abreQuicklook(elArchivo)

Y ya!! con esto veremos que, con muy pocas lineas, tenemos un script capaz de mostrar contenido multimedia, sin recurrir a ninguna app de terceros, la cuál es posible que no esté instalada en cualquier mac.

leer más

Solución a los iconos bloqueados en la barra de herramientas de Finder tras la actualización a Lion

Con la actualización a Lion, tenia una pequeña aplicación (llamada Go2Shell) que ha dejado de funcionar. Dicha aplicación, descargada de la Mac App Store, tenia como finalidad «Abrir la terminal» y el sitio optimo para utilizarla era arrastrándola a la barra de herramientas del Finder (La barra que hay en la parte superior de toda ventana del Finder, si está habilitada la opcion de que se muestre en el menú Visualizacion del mismo Finder) para que, en cualquier carpeta que visualizaras a través del Finder, estuviese el botoncito que, al pulsarlo, abría una terminal en la misma carpeta, haciendo bastante cómodo el proceso. Por desgracia, este botón ha comenzado a mostrar un error al pulsarlo y para mi sorpresa, al tratar de eliminarlo de la barra de herramientas del Finder, no se puede.

Apartando por un momento este inconveniente, me he puesto a buscar un pequeño applescript que había hecho hacia tiempo para esto mismo con la finalidad de sustituir el programita pero, por despiste, he añadido otro script a la barra de herramientas de Finder, consiguiendo tener 2 iconos en dicha barra que no funcionaban y que no podía quitar por lo que me he puesto a investigar un poco y, por suerte, he encontrado una soluciónpara eliminar dichos botones, que resultan bastante molestos al no servir para nada.

Estos son los pasos a seguir…

Lo primero que hay que hacer es ir a la siguiente ruta….


Carpeta de usuario/Library/Preferences

Hay nos encontraremos varios archivos del tipo «com.apple.xxxxx.xxxxx»

Estos archivos son los famosos property list (PLIST) en formato binario y antes de tocar ninguno de ellos, el primer paso a realizar es hacer una copia del que vamos a editar, por si se tocase algo más de lo debido y generásemos un nuevo problema.

Dado que el archivo sobre el que vamos a trabajar es «com.apple.finder.plist», lo que toca es realizar una copia del mismo a un lugar seguro.

Ahora que ya tenemos una «red de seguridad» ante posibles accidentes 😉 tendremos que editarlo y dado que está en binario, si no tenemos un editor de archivos PLIST, tocará convertirlo a formato de texto. Para este paso tendremos que abrir un terminal y ejecutar el siguiente comando….


plutil -convert xml1 com.apple.finder.plist

Una vez aplicada la conversión del formato, ya podemos abrirlo con un editor de texto como, por ejemplo, TextMate. Al hacerlo, veremos que tiene un montón de lineas aunque a nosotros solamente nos interesan dos de ellas (Dos han sido en mi caso, realmente es una por cada icono añadido por nosotros que queramos quitar y digo añadido por nosotros porque para los propios del Finder se puede hacer desde las opciones, sin falta de tanto paso)

Así pues, buscaremos un bloque parecido a este:

TB Item Identifiers

com.apple.finder.BACK
NSToolbarFlexibleSpaceItem
com.apple.finder.SWCH
com.apple.finder.ARNG
NSToolbarSpaceItem
com.apple.finder.QUIK
com.apple.finder.ACTN
NSToolbarFlexibleSpaceItem
com.apple.finder.loc
com.apple.finder.loc
com.apple.finder.INFO
NSToolbarFlexibleSpaceItem
com.apple.finder.SRCH

En este bloque, las lineas que tendremos que eliminar son las que ponen lo siguiente:


com.apple.finder.loc
com.apple.finder.loc

Una vez eliminadas ya habremos solucionado el problema y solamente nos quedaría reinciar el Finder. Para hacerlo, basta con aplicar desde una terminal el siguiente comando…


sudo killall Finder

Esta orden, nos solicitará la password y una vez aplicado veremos como el Finder se cierra y a continuación se vuelve a abrir solamente que esta vez, los molestos iconos no aparecerán en la barra de herramientas, dejando el espacio que ocupaban completamente libre para dejarlo vacío o para añadir nuevos botones (Eso si, sería bueno que, si añadimos nuevos botones, esta vez sean scripts o aplicaciones que funcionasen 😛 )

Como alternativa, también seria posible directamente eliminar dicho archivo y reinciar el Finder, ya que esto hace que se genere de nuevo y, aunque a priori pueda parecer más rápido o cómodo, hay que tener en cuenta que se perderían todos las configuraciones/personalizaciones que hubieran sido hechas sobre la barra de herramientas y por supuesto, que sería menos entretenido y menos didáctico que hacerlo a mano borrando las lineas implicadas.

leer más

Descomponer una ruta en directorios, nombre de archivo y extensión en Bash

Una tarea que puede ser bastante común a la hora de escribir scripts o aplicaciones que trabajen con el sistema de archivos es la necesidad de descomponer una ruta completa del tipo «/directorio/subdirectorio/…/…/archivo.extension» para obtener por separado el nombre de archivo, la extensión y la ruta de directorios. De hecho, fue una de las necesidades que me ha surgido estos días, escribiendo un Shell Script un tanto grande en el que necesitaba obtener el nombre de un archivo de una ruta completa así como la estructura de directorios hasta el mismo.

Dado que me suele gustar, al escribir scripts de cierto tamaño, dividirlos por bloques de código independientes, voy a publicar este como una solución aislada para solventar el problema de descomponer rutas aunque cuando lo volváis a ver en el script que aún no he terminado aparecerá como una función por la comodidad que representan y porque facilitan mucho la lectura del código en scripts de muchas lineas. Sin más preámbulos, vamos manos a la obra:

Dado que este código ahora es independiente, he realizado algunos cambios como que tome la entrada de datos a modo de parametros tras el nombre del script por lo que la ruta a descomponer, deberá ir tras el nombre del script en lo que seria el parámetro $1, es decir, tendriamos que pasárselo de la siguiente manera:

./script.sh /ruta/que/queramos/descomponer/archivo.extension
Por el mismo motivo, lo he dispuesto de forma que la salida del mismo sea la salida estándar mostrando el valor de cada una de las variables que intervienen en el proceso.

También he comentado las lineas relevantes ya que creo que será mejor explicar cada una de las lineas en el mismo punto donde aparece. Así pues, este es el script:

 



#!/bin/bash
# Script para descomponer una ruta completa a un archivo o directorio, obteniendo
# el nombre de archivo y extensión (si existen) y ruta hasta los mismos
for RutaCompleta in $1
do
# Comenzamos extrayendo la parte derecha desde el ultimo caracter "/", es decir, el archivo
NombreArchivo="${RutaCompleta##*/}"
# Longitud de la ruta es el total de caracteres menos el largo del nombre de archivo
LargoRuta="${#RutaCompleta} - ${#NombreArchivo}"
# Extraermos la ruta desde el caracter 0 hasta el caracter final de largo de ruta
RutaSola="${RutaCompleta:0:$LargoRuta}"
# Lo siguiente es extraer nombre de archivo
NombreSolo="${NombreArchivo%.[^.]*}"
# Extension se obtiene eliminando del nombre completo el nombre mas el punto
Extension="${NombreArchivo:${#NombreSolo} + 1}"
# Las 2 lineas anteriores fallan si no hay extension por lo que es necesario comprobar que no
# se de el caso de que haya extension pero no nombre ya que en ese caso la ext seria el nombre
if [[ -z "$NombreSolo" && -n "$Extension" ]]; then
NombreSolo=".$Extension"
Extension=""
fi
done
# Este es el resultado del script
echo
echo "Este es el resultado del script:"
echo
echo La ruta completa es:
echo $RutaCompleta
echo
echo "Ruta.........: \"$RutaSola\""
echo "Nombre.......: \"$NombreSolo\""
echo "Extension....: \"$Extension\""
echo


Si lo ejecutamos, la salida del mismo, según está, sería similar a esto
:

 


$ ./descomp.sh /dir1/subdir1/subdir2/archivo.txt

Este es el resultado del script:

La ruta completa es:
/dir1/subdir1/subdir2/archivo.txt

Ruta………: «/dir1/subdir1/subdir2/»
Nombre…….: «archivo»
Extension….: «txt»


Ahora bien, hay que tener en cuenta que si lo vamos a utilizar como una función llamada desde otro script o simplemente como un bloque de código incrustado entre las lineas, habría que hacerle algunos cambios, pero dado que lo estoy utilizando en otro script que voy a publicar aquí también, no lo explicaré aún ya que es cuestión de tiempo que me toque hacerlo.


 

 

leer más

Truco: Pseudo-Putty escondido en Mac

Truco: Pseudo-Putty escondido en Mac

El artículo de hoy trata sobre un sencillísimo truco que viene como anillo al dedo a todas esas personas que me encuentro en los foros buscando una versión de putty para Mac, la cual no es necesaria en la mayoría de los casos ya que se puede tener diferentes sesiones preconfiguradas, de prácticamente cualquier protocolo de conexión para el que tengamos una herramienta en la terminal. No obstante, siempre se puede recurrir a la versión de putty de Mac Ports , aunque a continuación verá que no es necesario recurrir a software de terceros.

Lo primero que haremos es abrir una terminal, ya sea desde Spotlight, otro lanzador de aplicaciones o simplemente desde aplicaciones –> Utilidades –> Terminal.

Una vez abierta la terminal, tendremos que situarnos en el menú de la aplicación (Barra superior) –> Terminal –> Preferencias (O bien pulsar las teclas «comando + ,») para seleccionar la pestaña AJUSTES.

Preferencias del terminal en OSX

Preferencias del terminal en OSX

Ahora vamos a añadir una nueva configuración a las ya existentes en el terminal. Para ello solamente habrá que pulsar el botón «+» (El que está marcado en la anterior captura) y asignarle un nombre.

IMPORTANTE: Cuidado con esto, al menos en mi caso, cuando creo una nueva configuración para la terminal, se asigna de forma automática la marca «Por omisión». Esto significa que será la configuración que se abrirá por defecto cuando iniciemos la aplicación terminal. Para cambiarlo, solamente tendremos que situarnos en la que queramos que sea la configuración por defecto al abrirse y pulsar el botón a la derecha del «+», el que trae escrito «Por omisión» y veremos como le añade ese mismo texto a la opción seleccionada.

Si no cambiamos de pestaña (Texto) tras ponerle nombre a la nueva configuración creada, en las opciones de la derecha podremos cambiar el color de las letras, del cursor… etc. Para cambiar el color del fondo, tendremos que avanzar una pestaña más y situarnos en «VENTANA» donde además del color de fondo podremos ponerle un nombre (El que aparece en la parte de arriba de la ventana), establecer el tamaño inicial de la misma y algunas otras cosillas.

Para continuar configurando lo importante de este artículo tendremos que situarnos en la pestaña «SHELL» donde podremos ver en primer lugar un campo check sin marcar bajo el que está la opción «Ejecutar comando».

Pestaña Shell en las preferencias del terminal

Pestaña Shell en las preferencias del terminal

Esa opción es la que nos permitirá iniciar de forma automatizada una sesión de cualquier tipo siempre y cuando esté instalado el comando adecuado para ello y teniendo en cuenta que OSX contiene ssh, ftp, rlogin, telnet, samba.. etc etc, las posibilidades son enormes.

No obstante, para seguir con el ejemplo, veamos como se configuraría alguna de las sesiones.

Lo primero seria, por supuesto, marcar la casilla de «Ejecutar comando» para poder escribir, en el campo de texto, el comando en cuestión que sería, por ejemplo:

Para una sesión normal y corriente de ssh:

ssh nombre_usuario@maquina -p puerto   (El puerto estándar se puede obviar)
ssh fulanito@Servidorejemplo.com -p 2222
En caso de que el servidor en cuestión no admita el nombre de usuario de la anterior forma, se puede escribir así también:

ssh ServidorEjemplo.com -l fulanito -p 2222

Por supuesto, el comando ssh admite muchísimos más parámetros pero sería estirar demasiado el artículo de hoy y para eso ya existen muchos manuales en la red, el comando man y documentación bastante. Respecto al resto de comandos como telnet, ftp o cualquier otro, el método sería el mismo, habría que añadir los parámetros correspondientes al comando para que inicie la terminal en cuestión arrancando una sesión preestablecida.

Ahora bien, para iniciar cualquiera de las configuraciones o sesiones preconfiguradas que hemos añadido, tendremos 2 opciones:

La primera es, desde esa misma ventana de preferencias, una vez esté terminada la configuracion del terminal en cuestión, solamente tendremos que arrastrarla desde su respectivo icono de la parte izquierda de la ventana (El que tiene la imagen en minuatura de la consola y el nombre de la misma) hasta donde queramos ubicar el archivo lanzador de la misma. Por supuesto, si se hace doble clic sobre ese archivo, la sesión se inicia.

Creando un botón para la sesión preconfigurada

Creando un botón para la sesión preconfigurada

La otra forma que hay es más tradicional y es, abrir una terminal y moverse por el menú de la aplicación (Barra superior) –> Shell –> Nueva Ventana –> Sesión (Aquí aparecerá el nombre que se le ha puesto en la ventana de configuración).

Iniciar sesión preconfigurada

Iniciar sesión preconfigurada

Por supuesto, partiendo de estas dos formas, existen ya múltiples variedades como lanzador de aplicaciones, servicios, asociación de atajos de teclado…etc etc pero eso, es otro artículo 😉

leer más

Servidor Virtualizado con conexión NAT (VirtualBox y Windows)

————– Actualización ————–

Aunque el método usado en este artículo sigue siendo válido, con las nuevas versiones de VirtualBox ya es posible hacerlo todo desde el menu gráfico, cosa que se agradece bastante.

———————————————–

Últimamente, es bastante común montar servidores en máquinas virtuales y ese fue el caso que me ha llevado a crear este pequeño script que, en esta ocasión, es para sistemas Windows y con el conocido sistema de máquinas virtuales VIRTUALBOX.

En este mismo sistema, al igual que en muchos otros, existen varias opciones para la configuración de las tarjetas de red aunque para este caso en concreto nos centraremos en la opción por defecto y la tarjeta que, al menos antes, siempre se habilitaba por defecto, al menos en mi caso, que siempre es conexión mediante NAT y con la tarjeta PC NET.

Antes de nada diré que si ya está familiarizado con el NAT puede saltarse las siguientes lineas ya que, por si hay alguien a quien solamente «le suene» un poco o que directamente desconozca que es o como funciona, trataré de hacer una pequeña explicación.

Lo primero, como siempre es tener la maquina virtual funcionando (Evidentemente ;-)) y una vez tengamos la conexión mediante NAT, deberíamos poder conectarnos a Internet desde el sistema virtualizado sin ningún problema ni paso adicional que configurar la conexión en dicho sistema como si fuera una instalación física más, es decir, añadiendo una IP, máscara, puerta de enlace y DNS en el caso de que nos vayamos a conectar con una dirección estática o simplemente activando DHCP si tenemos algún dispositivo que nos permita una configuración de IPs dinámica. Sea cual sea el modo de conexión, nos es indiferente a la hora de montar el servidor virtualizado siempre y cuando la IP de nuestra máquina física, es decir, la que alberga la virtual tenga una IP fija o algún sistema que nos permita llamarla siempre de la misma forma aún siendo dinámica (Por ejemplo, algún sistema similar a DynDNS, NoIP de cara a internet o simplemente un router que de la posibilidad de asociar una dirección MAC a una direcc concreta de forma que aunque este configurado todo por DHCP siempre de la misma a la misma máquina ).

Se preguntará ¿¿Porque es necesario esto sobre todo cuando ya me conecto a internet?? pues bien, porque ahora mismo la máquina virtual conecta con «hacia fuera», por decirlo de alguna manera, pero no admite las peticiones que se le hagan desde la red como podrían ser las que se hacen a cualquier servidor así que es necesario realizar NAT (Network Address Translation) de forma que para acceder a este servidor virtualizado tendremos habilitar la correspondiente configuración en la maquina física que lo alberga para que al apuntar a esta (MAquina física)  nos redirija a la máquina virtual. Como explicarme nunca fue mi fuerte, vamos con los ejemplos:

Tenemos los siguiente:

Máquina VIRTUAL:
– IP: 10.0.2.15
– Servidor WEB (Puerto 80)
– Servidor SSH (Puerto 22)

Máquina FISICA (Sobre la que corre la Virtual)
– IP: 192.168.1.10

Pues en este caso de supuestos, para poder ver las WEB del servidor virtualizado tendríamos que hacerlo poniendo la IP de la máquina FISICA, es decir, esta es la dirección que tendríamos que escribir en el navegador (A falta de configurar un dominio aunque fuese local, por supuesto):
http://192.168.1.10
Y para acceder a las sesiones SSH:
ssh 192.168.1.10
Esto es debido a que, con las instrucciones que veremos a continuación habilitaremos que, el propio VIRTUALBOX, realice una redirección de los datos enviados a los puertos que digamos hacia la tarjeta de red y puerto de la máquina virtual y ahora que ya tenemos claras las nociones básicas, procedemos con lo importante.

 

.Entre las muchas cosas que incorpora VirtualBox, hay un comando llamado VBOXMANAGE.EXE desde el que se puede hacer de todo y que es, precisamente, el que utilizaremos para que nuestra máquina virtual admita conexiones desde el exterior, es decir, para que nuestro servidor funcione como lo que es. Como decia, entre las multiples funciones de VBOXMANAGE está la de configurar que las peticiones a ciertos puertos de la máquina FISICA pasen a nuestra máquina virtual.

 

A continuación muestro el comando y explico sus parámetros para esta tarea pero quizás este un poco más claro en el ejemplo que hay debajo. El comando a ejecutar es:

 

VBoxManage setextradata MAQUINA "VBoxInternal/Devices/pcnet/0/LUN#0/Config/PROCESO/"PUERTO O PROTOCOLO"" PUERTO

 

Es muy importante fijarse en que, para pasarle la orden de que escuche las peticiones en un puerto de la máquina fisica, indicamos, no solo el puerto de la máquina virtual sino que también la tarjeta de red que recibirá los datos.
VBoxInternal/Devices/pcnet/0/LUN#0/Conf...

 

Para estar seguros del nombre de la máquina sin tener que abrir el virtualbox, podremos hacer un listado de todas las máquinas virtuales que tenemos gracias, como no, al polivalente comando VBoxManage de la siguiente manera:

 

VBoxManage list vms

 

El proceso para abrir el servidor a las conexiones externas, por ejemplo las peticiones a un servidor web consiste en aplicar 3 veces el comando anterior para indicar, además de la tarjeta de red, como ya indicamos:

 

  1. Nombre de servicio y puerto de la máquina fisica
  2. Nombre del servicio y puerto de la máquina virtual
  3. Nombre del servicio y PROTOCOLO usado (Normalmente TCP)

 

De esta misma manera no estaremos obligados a usar el mismo puerto en ambas máquinas. Esto quiere decir que si, casualmente la máquina física que contiene la virtual, tuviese además un pequeño servidor WEB en el puerto 80, podríamos establecer con el anterior comando que dicha máquina reenvíe solo las peticiones, por ejemplo del puerto 8080, al 80 (Puerto estándar) de la máquina virtual. En definitiva, no hay restricción alguna respecto a los puertos salvo la de que no esté en uso.

 

Como pequeña nota, solo queda añadir que si tenemos algun sistema de FIREWALL configurado ya sea en la maquina física como en la Virtual, tendríamos que hacer los pasos pertinentes para que no bloquease el tráfico por lo puertos que haya pensado utilizar.

 

Pues bien, esa fue la teoría y ahora, el como aplicarla ya es tarea suya. Puede simplemente experimentar por su cuenta con el comando basándose esta breve explicación y, como siempre, también tiene la opción cómoda de descargarse el SCRIPT que he creado para automatizar todo el proceso. He de decir que, al menos en mi caso, es lo que estoy usando siempre gracias a la comodidad y rapidez del mismo.

 

Este Script no tiene que editarlo para cambiar puertos, protocolo o el nombres de servicio ya que se lo preguntará durante la ejecución del mismo. Eso si, funciona teniendo en cuenta que VirtualBox estará instalado en la unidad C: y el directorio por defecto, es decir:

C:\Archivos de programa\Oracle\VirtualBox

Si ese no fuera su caso, entonces si tendría que editarlo para modificar las primeras lineas, pues son las únicas que hacen referencia a dicha carpeta. Por supuesto, tambien es totalmente libre de editarlo para ver como está hecho 😉

Enlace de descarga del SCRIPT:  SCRIPT VIRTUALBOX a SERVER

Un saludo.

leer más