Artículos de la fecha Septiembre 2008 ↓
Escrito por The Evangelist el 17 de Septiembre de 2008 y etiquetado como: OSX, Shell, Trucos
Este es un sencillo truco muy útil ya que nos proporciona un icono (stack) en el Dock con lo último que hemos abierto, que pueden ser aplicaciones, documentos, volúmenes, etc, con lo cual están a mano y de una forma muy visual. Si pulsamos el botón derecho encima del icono sale un menú donde podemos elegir que muestra el icono. Podemos tener tantos iconos como queramos aunque como se puede elegir con el botón derecho (control+click) quizás no merezca la pena. Para crear el icono (stack) desde terminal o iTerm ejecutar:
defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = { "list-type" = 1; }; "tile-type" = "recents-tile"; }'
Para que surta efecto debemos reiniciar el Dock
killall Dock
Con esto aparecerá un icono (de la última aplicación abierta) que si lo pulsamos aparecerán los iconos de la últimas aplicaciones abiertas.
Si no queremos tener este icono (stack) lo único que tenemos que hacer es arrastrar el icono fuera del Dock como con cualquier otro icono.


Escrito por The Evangelist el 25 de Septiembre de 2008 y etiquetado como: OSX, Trucos
A veces cuando intentamos borrar de la papelera archivos y/o carpetas nos encontramos que no nos deja, lo cual puede ser debido a varios motivos entre ellos, que el fichero, carpeta o aplicación esté abierto para ello primero deberemos cerrar el fichero/aplicación o simplemente permisos o a veces ni se sabe. Pero cuando queremos realmente borrar el fichero o carpeta o aplicación podemos usar el comando chflags para cambiar los permisos de lo que hay en la papelera y borrarlos (funciona casi el 99,99% de las veces):
chflags –R nouchg ~/.Trash/*
Esto lo que hace es borrar una marca (flag) a los ficheros con lo cual nos permite poder borrarlos. La opción -R es para que sea recursivo.
NOTA: en caso de que tengamos muchas cosas en la papelera el “*” puede darnos error, con lo que podemos usar esta otra alternativa:
find ~/.Trash/ -exec chflags –R nouchg {} \;
Para más información sobre el comando chflags podemos desde el terminar “man chflags” o ir a esta web de apple: http://devworld.apple.com/DOCUMENTATION/Darwin/Reference/ManPages/man1/chflags.1.html o buscar en google chflags.
Escrito por The Evangelist el 23 de Septiembre de 2008 y etiquetado como: Aplicaciones, Libros, OSX
Books es una aplicación para catalogar libros en OSX y es la que uso para mantener los libros que tengo y los que quiero comprar, así tengo todo bien apuntado para que no se me olvide ningún buen libro. Books es una estupenda aplicación con bastantes cosas útiles como el auto rellenado de información básica a partir de Amazon, Wikipedia y algún que otro sitio más y que permite exporta a diferentes formatos uno de ellos a web que es el que uso para mantener la sección de libros (aunque tengo hackeado el java para que exporte como yo quiero).
La aplicación es simple y sencilla pero potente, por defecto viene con gran cantidad de campos aunque se pueden agregar propios para ampliar, si cabe, las posibilidades de almacenar información. Permite 2 tipos de listas, al más puro estilo iTunes, estáticas, donde añadimos manualmente qué libros pertenecen a dicha lista o estática donde se añaden libros a partir de un criterio, yo tengo listas inteligentes por etiquetas y luego 2 estáticas, una con los libros que tengo y otra con lo que quiero tener.
También tiene vistas (otra vez al estilo iTunes) una en modo lista (donde podemos elegir que campos ver y ordenar) y otra en modo portada (donde podemos ver las portadas de los libros).
La opción de auto rellenado es asombrosa con dar un dato te busca el libro y te rellena los campos, incluso la portada (aunque no siempre la encuentra pero podemos añadirla a mano). Yo suelo usar el ISBN (que por cierto la aplicación soporta tanto el normal 10 dígitos como el nuevo 13 dígitos) para buscar libros ya que es un valor inequívoco.
Última versión: 3.2.2 (4 de Octubre 2008)
Página oficial: http://books.aetherial.net/wordpress/


Escrito por The Evangelist el 29 de Septiembre de 2008 y etiquetado como: Cisco, Firefox
Cisco ha sacado unos buscadores que se integran en el firefox (también soportadas en Explorer) con lo cual podemos buscar cosas de Cisco directamente desde el buscado de firefox. La única pega es que para poder utilizar este servicio es necesario tener una cuenta en la web de Cisco.
Para añadir los motores de búsquedas de Cisco debemos seguir estos pasos:
- Primero añadir el buscador que nos interese o todos, haciendo click es estos enlaces:
- Segundo abrir el gestor de motores de búsquedas y colocar los motores en el orden que queramos o borrar alguno que no nos interese.
Para ello en la parte derecha del Firefox hacer clic en la fechita hacia abajo que mostrará los motores de búsqueda y al final algo similar a “Administrar motores de búsqueda…” donde saldrá una ventana donde podemos ordenar, eliminar y añadir otros motores de búsqueda.
También podemos acceder a las páginas directamente o simplemente está bien tener a mano estos enlaces:
Escrito por The Evangelist el 30 de Septiembre de 2008 y etiquetado como: Bash, Shell
Bash tiene un modesto control de cadenas aunque en muchos scripts puede ser mucho más que interesante y en ocasiones muy útil. En algunos casos se usa opciones internas de Bash y en otras se apoya en el comando externo expr.
- Longitud de cadena
nos indica la longitud de una cadena, para ello podemos usar estas formas:
- ${#cadena}
- expr length $cadena
- expr “$cadena” : ‘.*’
Aquí tenemos un ejemplo:
cadena=abcABC123ABCabc
echo ${#cadena} # 15
echo $(expr length $cadena) # 15
echo $(expr "$cadena" : '.*') # 15
- Posición o indice
nos indica la posición del inicio de una subcadena o carácter, para ello podemos usar estas formas:
- expr match “$cadena” ‘$subcadena’
- expr “$cadena” : ‘$subcadena’
- expr index $cadena $subcadena
En las dos primeras $subcadena es una expresión regular y nos muestra el primera posición de dicha expresión. En la tercera la posición mostrada es del primer carácter de $subcadena que aparezca en $cadena.
Aquí tenemos un ejemplo:
stringZ=abcABC123ABCabc
echo `expr match "$stringZ" 'abc[A-Z]*.2'` # 8
echo `expr "$stringZ" : 'abc[A-Z]*.2'` # 8
echo `expr index "$stringZ" C12` # 6 = posición de C
echo `expr index "$stringZ" 1c` # 3 = 'c' en 3ra posición antes que '1' = 7.
- Extraer subcadena
nos permite extraer una subcadena de otra cadena, para ello podemos usar estas formas:
- ${cadena:posicion:longitud}
extrae los caracteres indicados por longitud de cadena a partir de la posición posicion. Se puede omitir :longitud y entonces extraerá todos los caracteres hasta el final de cadena. También se puede poner una longitud negativa (se debe poner entre paréntesis o un espacio antes del menos) para que se empiece por el final en vez de empezar por el principio.
Un ejemplo:
cadena=abcABC123ABCabc
# 0123456789.....
# Se empieza desde 0.
echo ${cadena:0} # abcABC123ABCabc
echo ${cadena:7} # 23ABCabc
echo ${cadena:7:3} # 23A = 3 caracteres desde posición 7
echo ${cadena:(-4)} # Cabc
echo ${cadena: -4} # Cabc (atención al espacio antes del menos)
- expr substr $cadena $posicion $longitud
Lo mismo que la anterior pero usando expr con la diferencia de que en vez de empezar por 0 se empieza por 1.
- expr match “$cadena” ‘\($subcadena\)’
extrae $subcadena que es una expresión regular del principio de $cadena. Con un ejemplo se ve mejor:
cadena=abcABC123ABCabc
# =======
echo $(expr match "$cadena" '\(.[b-c]*[A-Z]..[0-9]\)') # abcABC1
echo $(expr "$cadena" : '\(.[b-c]*[A-Z]..[0-9]\)') # abcABC1
echo $(expr "$cadena" : '\(.......\)') # abcABC1
- expr “$cadena” : ‘\($subcadena\)’
otra forma de expresar lo mismo que la anterior.
- expr match “$cadena” ‘.*\($subcadena\)’
extrae $subcadena que es una expresión regular del final de $cadena. Con un ejemplo se ve mejor:
stringZ=abcABC123ABCabc
# ======
echo $(expr match "$stringZ" '.*\([A-C][A-C][A-C][a-c]*\)') # ABCabc
echo $(expr "$stringZ" : '.*\(......\)') # ABCabc
- expr “$cadena” : ‘.*\($subcadena\)’
otra forma de expresar lo mismo que la anterior.
- Borrar subcadena
diferentes formas de borrar subcadenas de una cadena:
- ${cadena#subcadena}
borra la coincidencia más corta de subcadena desde el principio de cadena (ver ejemplo en el siguiente)
- ${cadena##subcadena}
borra la coincidencia más larga de subcadena desde el principio de cadena.
un ejemplo:
cadena=abcABC123ABCabc
# |----| mas corta
# |----------| mas larga
echo ${cadena#a*C} # 123ABCabc
# Extrae la coincidencia mas corta entre 'a' y 'C'.
echo ${cadena##a*C} # abc
# Extrae la coincidencia mas larga entre 'a' y 'C'.
- ${cadena%subcadena}
borra la coincidencia más corta de subcadena desde el final de cadena (ver ejemplo en el siguiente)
- ${cadena%%subcadena}
borra la coincidencia más larga de subcadena desde el final de cadena.
un ejemplo:
cadena=abcABC123ABCabc
# || mas corta
# |------------| mas larga
echo ${cadena%b*c} # abcABC123ABCa
# Extrae la coincidencia mas corta entre 'b' y 'c', desde el final de cadena.
echo ${cadena%%b*c} # a
# Extrae la coincidencia mas larga entre 'b' y 'c', desde el final de cadena.
- Reemplazar subcadena
diferentes formas de reemplazar subcadenas de una cadena:
- ${cadena/buscar/reemplzar}
Reemplaza la primera coincidencia de buscar con reemplzar (ver ejemplo en la siguiente)
- ${cadena//buscar/reemplzar}
Reemplaza todas las coincidencias de buscar con reemplzar.
un ejemplo:
cadena=abcABC123ABCabc
echo ${cadena/abc/xyz} # xyzABC123ABCabc
# Reemplaza la primera coincidencia de 'abc' con 'xyz'.
echo ${cadena//abc/xyz} # xyzABC123ABCxyz
# Reemplaza todas las coincidencias de 'abc' con 'xyz'.
- ${cadena/#buscar/reemplzar}
Si buscar coincide con el principio de cadena, entonces sustituye buscar por reemplazar.
If $substring matches front end of $string, substitute $replacement for $substring
- ${cadena/%buscar/reemplzar}
Si buscar coincide con el final de cadena, entonces sustituye buscar por reemplazar.
cadena=abcABC123ABCabc
echo ${cadena/#abc/XYZ} # XYZABC123ABCabc
echo ${cadena/%abc/XYZ} # abcABC123ABCXYZ
Escrito por The Evangelist el 28 de Septiembre de 2008 y etiquetado como: Juegos, Retro, Spectrum
Spirits una fantástica vídeo aventura creada en 1987 por Topo Soft desarrollado para Spectrum, MSX y Amstrad. El objetivo del juego es liberar a la princesa para ello hay que obtener una serie de objetos. La pantalla está dividida en 2, en la parte superior es donde jugamos y la parte inferior es donde se nos muestra en que localización está el objeto a conseguir.
El remake realizado por M.A. Software disponible para Linux y Windows el cual he tenido el placer de portarlo a OSX con lo cual los poseedores de un Mac Intel podrán jugar con este fabuloso remake.
Este remake tiene una serie de trucos o trampas que en la versión OSX se activan pulsando a la vez las teclas: I M D, con lo cual saldrá un espacio para teclear las palabras claves siguientes:
- morelives obtiene más vidas
- gototarget va a la localización donde está el objetivo
- gotofinish va al final del juego
Procurar jugar sin los trucos antes e intentar terminarlo, también podéis echar un ojo a los mapas (ver enlaces más abajo) que siempre ayuda.
Enlaces de interés:
- La página de WikiPedia (enlace)
- La página de World Of Spectrum (enlace), donde podemos descargar el juego original y demás información.
- La página de ComputerZone (enlace)
- La página del remake (enlace)
- Mapa del juego (enlace)
- Otro mapa del juego (enlace)
- Descarga del juego (OSX) (Linux) (Windows)



Escrito por The Evangelist el 24 de Septiembre de 2008 y etiquetado como: Cisco, IOS
Cisco IOS permite crear alias de comandos que se usan repetidamente y son largos de teclear a pesar de las típicas abreviaciones. Para ello podemos usar el comando alias para crear comandos simples e incluso pasar parámetros a estos alias.
Para crear un alias debemos primero ir a la configuración con configure terminal. La sintáxis es la siguiente:
alias mode command-alias original-command
no alias [command-alias]
Por ejemplo si queremos usar ifconfig para listas las interfaces, podemos usar este alias:
alias exec ifconfig show ip interface
Con lo cual estando en modo privilegiado podemos usar:
ifconfig
ifconfig fa0/1
Más información en la web de cisco: alias.
Escrito por The Evangelist el 22 de Septiembre de 2008 y etiquetado como: Juniper, JunOS
Nuevo artículo de Jeff Doyle que sigue su sección de acercar el JunOS explicando como funciona. El artículo original se puede encontrar aquí.
Los artículos que he hecho acerca de JunOS hasta ahora todos tienen que ver con un tema único: Reducir el riesgo operativo. Las características que me gusta de JunOS son las características que ayudan a evitar que la cague en la configuración. Como he dicho en los últimos artículos y, sin duda, diré muchas veces de nuevo, la principal causa de interrupciones de red no son fallos de hardware o software, si no que la gente haciendo cambios en la configuración.
Una práctica general, es asegurarse de que cada configuración en cada router en su red sigue una política estándar de configuración lo que reducirá los errores. Lo qué esa política es puede variar de una red a otra, pero una política coherente y ejecutiva dentro de la red significa que todo el mundo que configure un router conoce las reglas para la creación de la configuración. Todo el mundo que resuelva problemas de la red sabe qué información espera encontrar en cualquier configuración.
En el anterior artículo que escribí acerca de cómo crear un script que ejecuta comprobaciones de una configuración candidata de JunOS cuando el comando commit se ejecuta, e impide que la configuración se convierta en activa si el script encuentra algo fuera de especificación. Es una gran herramienta para asegurar que cada configuración está en el cumplimiento de las normas que defina para su red.
Otra fuente potencial de variación y los errores ocurre cuando una relativamente larga serie de declaraciones de configuración deben ser creadas para una sola función. La creación de una única instancia de MPLS VPN, por ejemplo, o un único grupo de BGP peer, puede implicar un buen número de sentencias. Aquí es donde las macros de JunOS pueden ayudar.
Una macro es un script, pero hace algo más que una comprobación de errores. Se puede coger de una entrada relativamente simple y escribir una configuración completa.
He aquí un ejemplo que he utilizado innumerables veces. Quiero crear una instancia VPLS llamada vpls-100. Aunque la configuración de la instancia es compleja, la mayoría de las declaraciones se repiten constantemente por cada instancia de VPLS, sólo hay unas pocas variables para esta instancia específica.
En lugar de escribir toda la configuración manualmente, llamo una macro personalizada denominada vpls-inst, y especifico las variables que se utilizarán para este caso: La VPN ID (100), la interfaz local en la que la instancia VPLS se va a ejecutar (ge -0/0/0.10), El Site ID (2), y la política de exportación a aplicar (ASD-2A):
vpls-100 {
apply-macro vpls-inst {
id 100;
interface ge-0/0/0.10;
site 2;
via ASD-2A;
}
}
Cuando la configuración se ha aplicado, la macro utiliza las pocas variables especificado junto con muchas otras variables que son estándar para todos las instancias VPLS, especificadas en la macro en sí, para crear la instancia VPLS completa , la configuración de la interfaz, y la entrada de la política de enrutamiento (routing policy) para la instancia:
routing-instances {
vpls-100 {
/* # Generated by vpls-inst.xsl # */
instance-type vpls;
interface ge-0/0/0.10;
route-distinguisher 192.168.0.92:100;
vrf-export [ CUST_VIA_ASD-2A CUST-vpls-100 ];
vrf-target import target:100:100;
protocols {
vpls {
site-range 24;
mac-table-size 2000;
site cressida {
site-identifier 2;
}
}
}
}
}
interfaces {
ge-0/0/0 {
unit 10 {
description vpls-100;
encapsulation vlan-vpls;
vlan-id 10;
input-vlan-map {
swap;
vlan-id 100;
}
output-vlan-map swap;
}
}
}
policy-options {
policy-statement CUST-vpls-100 {
then {
community add CUST-vpls-100;
accept;
}
}
community CUST-vpls-100 members target:100:100;
}
Si se busca a través de la configuración resultante encontrará las variables especificadas en la sintaxis de entrada personalizada. También encontrará un buen número de declaraciones que incluyen variables que la macro pone de su propia cuenta.
La macro es un poco demasiado larga para mostrar en este artículo, y no son fáciles de escribir. Pero el punto es que un ingenieros puede escribir la macro - o un conjunto de macros - una vez, y todos los operadores pueden usarla constantemente. El resultado es coherente, libre de errores de configuraciones que cumplen con las normas que desea aplicar para sus configuraciones.
Escrito por The Evangelist el 21 de Septiembre de 2008 y etiquetado como: Aventuras, Juegos, OSX, Retro
SCUMMVM es un aplicación que nos permite jugar a esas viejas glorias de los 90 llamadas Aventuras Gráficas que tanto éxito tuvieron con empresas de renombre como Sierra o Lucas Arts. SCUMMVM es una especie de máquina virtual (de ahí lo de VM = Virtual Machine) que toma los fichero originales del juego y los procesa para poder jugar.
EL proyecto originalmente se centró en los juegos de Lucas que estaban realizados con un motor (engine) llamado SCUMM que fué originalmente desarrollado para el Juego “Maniac Mansion”, aunque ahora hay otros juegos soportados qu eno tienen nada que ver ni con el motor SCUMM ni con Lucas.
La lista de juegos compatibles es amplia y la podemos consultar en este enlace (lista de juegos compatibles). En esta lista ningún juego está soportado al 100% aunque la mayoría rondan el 90 o 95 %, vamos que son jugables de principio a fin.
Otro punto interesante de SCUMMVM es que está portado a una cantidad increíble de plataformas algunas de ellas sorprendentes como para móviles con S.O. Symbian (lo he probado en un E65 y realmente es alucinante) PSP, WII, iPhone (espero poder probar un días de estos ésta versión) y un largo etc.
Este proyecto ha tenido tanto éxito que algunas empresas desarrolladoras de juegos han liberado sus juegos de forma gratuita para que todo podamos disfrutar de juegos como “Beneath a Steel Sky“, “Flight of the Amazon Queen“, “Lure of the Temptress” (versión en español), “Drascula: The Vampire Strikes Back” (versión en español), “Broken Sword” 1 y 2 (hay versiones en español), ver sección de “extras” en descargas.
Página oficial: http://www.scummvm.org/
Algunas capturas de juegos (listado completo de capturas aquí):




Escrito por The Evangelist el 20 de Septiembre de 2008 y etiquetado como: Juegos, OSX, Retro
Vuelvo a la carga con más Juegos, bueno esto no es realmente un juego si no una máquina viertual de hardware que permite jugar a juegos clásicos de máquinas recreativas. Soy un apasionado de lo retro tanto de remakes de juegos viejos como jugar a los juegos viejos en sí que es lo que permite MAME OSX.
Esta aplicación lo único (por decir algo) que hace es procesar las ROMs de los juegos originales, es decir que para poder jugar necesitamos dichas ROMs las cuales no son libres ni gratuitas, aunque algunos desarrolladores y empresas de juegos las han liberado para uso no comercial. De todas formas podemos usar a nuestro amigo Google para buscar ROMs aunque no sea legal
Nada más arrancar la aplicación sale un listado de los juegos (ROMs) soportadas, esto no quiere decir que ya vengan las ROMs que no viene ninguna, SOLO indica que juegos soporta y en que versiones.
Las ROMs la podemos copiar tal cual están en ZIP no hace falta descomprimirlas. Por defecto hay que copiarlas en ~/Library/Application Support/MAM OS X/ROMs/ pero en preferencias podemos especificar la carpeta donde están las ROMs.
Una vez que tenemos la ROM del juego que queremos nos ponemos encima del nombre y pulsamos PLAY y entonces funciona idéntico como en la máquina recreativa original, es decir, hay que meter monedas (se hace pulsando el 5) y luego elegir 1 o 2 jugadores (pulsando 1 o 2), pasa salir del juego cerramos la ventana o pulsamos ESC.


